win_config_server.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // package win_config_server -- конфигурация для подключения к бото-серверу вар-танк
  2. package win_config_server
  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. // WinConfigServer -- конфигурация для подключения к бото-серверу вар-танк
  13. type WinConfigServer struct {
  14. *win_base.WinBase
  15. model tea.Model
  16. textInput textinput.Model
  17. }
  18. // NewWinConfigServer -- возвращает новое окно для подключения к бото-серверу вар-танк
  19. func NewWinConfigServer(desk types.IDesktop) (*WinConfigServer, error) {
  20. winBase, err := win_base.NewWinBase(desk, cons.WinConfigServer)
  21. if err != nil {
  22. return nil, fmt.Errorf("NewWinConfigServer(): in create WinBase, err=\n\t%w", err)
  23. }
  24. sf := &WinConfigServer{
  25. WinBase: winBase,
  26. }
  27. return sf, nil
  28. }
  29. // Init -- настраивает окно для бабл-теа
  30. func (sf *WinConfigServer) Init() tea.Cmd {
  31. return textinput.Blink
  32. }
  33. // Update -- обрабатывает команду цикла
  34. func (sf *WinConfigServer) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
  35. winName := alias.AWinName("")
  36. switch msg := msg.(type) {
  37. // Может клавиша нажата
  38. case tea.KeyMsg:
  39. switch msg.String() { // Да, нажато, а что именно?
  40. case "esc": // Вернуться на шаг назад
  41. winName = cons.WinConfig
  42. case "1": // Выбор хоста сервера
  43. winName = cons.WinConfigServerHostInput
  44. sf.textInput.Reset()
  45. sf.textInput.Placeholder = "localhost:18050"
  46. case "2": // Выбор логина для входа
  47. winName = cons.WinConfigServerLoginInput
  48. sf.textInput.Reset()
  49. sf.textInput.Placeholder = "login"
  50. case "3": // Выбор пароля для входа
  51. winName = cons.WinInputPassServer
  52. sf.textInput.Reset()
  53. sf.textInput.Placeholder = "pass"
  54. }
  55. }
  56. if winName != "" {
  57. sf.Desk().SetWin(winName)
  58. return sf.model, nil
  59. }
  60. return nil, nil
  61. }
  62. // View -- перерисовывание окна по требованию
  63. func (sf *WinConfigServer) View() string {
  64. s := "Настройки сервера вар-танк\n\n"
  65. s += "[1]-Настройки хоста сервера\n"
  66. s += "[2]-Логин для входа\n"
  67. s += "[3]-Пароль для входа\n"
  68. s += "\n\n[ctrl+q]-выход [esc]-назад\n"
  69. return s
  70. }