win_bot_list.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // package win_bots_list -- окно списка ботов на бото-ферме
  2. package win_bots_list
  3. import (
  4. "fmt"
  5. "github.com/charmbracelet/bubbles/textinput"
  6. tea "github.com/charmbracelet/bubbletea"
  7. "wartank/desktop/win_base"
  8. "wartank/pkg/alias"
  9. "wartank/pkg/cons"
  10. "wartank/pkg/types"
  11. )
  12. // WinBotsList -- конфигурация для добавления пароля бота на бото-ферму вар-танк
  13. type WinBotsList struct {
  14. *win_base.WinBase
  15. textInput textinput.Model
  16. }
  17. // NewWinBotsAddPass -- возвращает новое окно для ввода пароля бота при добавлению на бото-ферму вар-танк
  18. func NewWinBotsAddPass(desk types.IDesktop) (*WinBotsList, error) {
  19. winBase, err := win_base.NewWinBase(desk, cons.WinBotsAddPass)
  20. if err != nil {
  21. return nil, fmt.Errorf("NewWinBotsAddPass(): in create WinBase, err=\n\t%w", err)
  22. }
  23. sf := &WinBotsList{
  24. WinBase: winBase,
  25. textInput: textinput.New(),
  26. }
  27. sf.textInput.Placeholder = "wartank"
  28. sf.textInput.Focus()
  29. sf.textInput.Width = 30
  30. _ = tea.Model(sf)
  31. return sf, nil
  32. }
  33. // Init -- настраивает окно для бабл-теа
  34. func (sf *WinBotsList) Init() tea.Cmd {
  35. return textinput.Blink
  36. }
  37. // Update -- обрабатывает команду цикла
  38. func (sf *WinBotsList) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
  39. winName := alias.AWinName("")
  40. switch msg := msg.(type) {
  41. // Может клавиша нажата
  42. case tea.KeyMsg:
  43. switch msg.String() { // Да, нажато, а что именно?
  44. case "esc": // Вернуться на шаг назад
  45. winName = cons.WinBotsMenu
  46. case "enter": // Нажатие "enter" вводит фактическое значение
  47. sf.Desk().SetBotPass(sf.textInput.Value())
  48. winName = cons.WinBotsMenu
  49. default:
  50. sf.textInput, _ = sf.textInput.Update(msg)
  51. }
  52. }
  53. if winName != "" {
  54. sf.Desk().SetWin(winName)
  55. }
  56. return nil, nil
  57. }
  58. // View -- перерисовывание окна по требованию
  59. func (sf *WinBotsList) View() string {
  60. s := "=Добавление пароля бота на бото-ферму вар-танк=\n\n"
  61. s += fmt.Sprintf(">%v\n", sf.textInput.View())
  62. s += "\n\n[ctrl+q]-выход [esc]-назад\n"
  63. return s
  64. }