Преглед на файлове

d01 Добавление экрана ввода хоста

SVI преди 2 години
родител
ревизия
7190a0609b
променени са 5 файла, в които са добавени 100 реда и са изтрити 36 реда
  1. 15 24
      desktop/desktop.go
  2. 1 1
      desktop/win_config_server/win_config_server.go
  3. 71 0
      desktop/win_config_server_host_input/win_config_server_host_input.go
  4. 11 11
      pkg/cons/cons.go
  5. 2 0
      pkg/types/idesktop.go

+ 15 - 24
desktop/desktop.go

@@ -11,6 +11,7 @@ import (
 	"wartank/desktop/client_serv"
 	"wartank/desktop/win_config"
 	"wartank/desktop/win_config_server"
+	"wartank/desktop/win_config_server_host_input"
 	"wartank/desktop/win_default"
 	"wartank/pkg/alias"
 	"wartank/pkg/cons"
@@ -57,6 +58,12 @@ func NewDesktop() (*Desktop, error) {
 			return nil, fmt.Errorf("NewDesktop(): in create WinConfigServer, err=\n\t%w", err)
 		}
 		sf.dictWin[winConfigServer.Name()] = winConfigServer
+
+		winConfigServerHostInput, err := win_config_server_host_input.NewWinConfigServerHostInput(sf)
+		if err != nil {
+			return nil, fmt.Errorf("NewDesktop(): in create WinConfigServerHostInput, err=\n\t%w", err)
+		}
+		sf.dictWin[winConfigServerHostInput.Name()] = winConfigServerHostInput
 	}
 	sf.winName = cons.WinDefault
 	go sf.tick()
@@ -105,11 +112,13 @@ func (sf *Desktop) Run() error {
 	return nil
 }
 
+// Init -- инициализация перед запуском главного цикла
 func (sf *Desktop) Init() tea.Cmd {
 	// Просто вернуть `nil`, т.е. никаких команд
 	return textinput.Blink
 }
 
+// Update -- обновление консоли по требованию
 func (sf *Desktop) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 	var cmd tea.Cmd
 	switch msg := msg.(type) {
@@ -125,20 +134,6 @@ func (sf *Desktop) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 		return mod_, cmd_
 	}
 	/*
-		 case ModeInputHostServer:
-		// 	switch msg := msg.(type) {
-		// 	// Может клавиша нажата
-		// 	case tea.KeyMsg:
-		// 		switch msg.String() { // Да, нажато, а что именно?
-		// 		case "esc": // Вернуться на шаг назад
-		// 			desk.winName = ModeConfigServer
-		// 		case "enter": // Нажатие "enter" или "пробел" переключает выбранный элемент списка
-		// 			desk.host = desk.textInput.Value()
-		// 			desk.winName = ModeConfigServer
-		// 		default:
-		// 			desk.textInput, cmd = desk.textInput.Update(msg)
-		// 		}
-		// 	}
 		 case ModeInputLoginServer:
 		// 	switch msg := msg.(type) {
 		// 	// Может клавиша нажата
@@ -209,13 +204,11 @@ func (sf *Desktop) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 	return desk, cmd
 }
 
-func (sf Desktop) View() string {
+func (sf *Desktop) View() string {
 	s := time.Now().Local().Format("[ WarTank ] = 2006-01-02 15:04:05.000")
 	s += fmt.Sprintf("\tХост=%q\tЛогин=%q\tПароль=%q\tПодключено=%v\tЛогин=%v\tЕстьАдмин=%v\n\n", desk.host, desk.login, desk.pass, desk.isConnect, desk.isLogin, desk.isMakeAdmin)
 	s += desk.dictWin[desk.winName].View()
 	switch desk.winName {
-	// case ModeInputHostServer: // Ввод хоста для сервера
-	// 	s += desk.winHostServer()
 	// case ModeInputLoginServer: // Ввод логина для входа на сервер
 	// 	s += desk.winLoginServer()
 	// case ModeInputPassServer: // ввод пароля
@@ -303,13 +296,6 @@ func (sf *Desktop) winLoginServer() string {
 	return s
 }
 
-func (sf *Desktop) winHostServer() string {
-	s := "=Ввод хоста для сервера вар-танк=\n\n"
-	s += fmt.Sprintf(">%v\n", desk.textInput.View())
-	s += "\n\n[ctrl+q]-выход [esc]-назад\n"
-	return s
-}
-
 */
 
 // IsLogin -- возвращает признак логина на сервер ботов
@@ -321,3 +307,8 @@ func (sf *Desktop) IsLogin() bool {
 func (sf *Desktop) IsConnect() bool {
 	return sf.isConnect
 }
+
+// SetHost -- устанавливает имя хоста бото-фермы
+func (sf *Desktop) SetHost(hostName string) {
+	sf.host = hostName
+}

+ 1 - 1
desktop/win_config_server/win_config_server.go

@@ -47,7 +47,7 @@ func (sf *WinConfigServer) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 		case "esc": // Вернуться на шаг назад
 			winName = cons.WinConfig
 		case "1": // Выбор хоста сервера
-			winName = cons.WinInputHostServer
+			winName = cons.WinConfigServerHostInput
 			sf.textInput.Reset()
 			sf.textInput.Placeholder = "localhost:18050"
 		case "2": // Выбор логина для входа

+ 71 - 0
desktop/win_config_server_host_input/win_config_server_host_input.go

@@ -0,0 +1,71 @@
+// package win_config_server_host_input -- окно ввода хоста бото-фермы
+package win_config_server_host_input
+
+import (
+	"fmt"
+
+	"github.com/charmbracelet/bubbles/textinput"
+	tea "github.com/charmbracelet/bubbletea"
+
+	"wartank/desktop/win_base"
+	"wartank/pkg/alias"
+	"wartank/pkg/cons"
+	"wartank/pkg/types"
+)
+
+// WinConfigServerHostInput -- конфигурация для ввода имени хоста к бото-серверу вар-танк
+type WinConfigServerHostInput struct {
+	*win_base.WinBase
+	model     tea.Model
+	textInput textinput.Model
+}
+
+// NewWinConfigServerHostInput -- возвращает новое окно для ввода имени хоста к бото-серверу вар-танк
+func NewWinConfigServerHostInput(desk types.IDesktop) (*WinConfigServerHostInput, error) {
+	winBase, err := win_base.NewWinBase(desk, cons.WinConfigServerHostInput)
+	if err != nil {
+		return nil, fmt.Errorf("NewWinConfigServerHostInput(): in create WinBase, err=\n\t%w", err)
+	}
+	sf := &WinConfigServerHostInput{
+		WinBase: winBase,
+	}
+	return sf, nil
+}
+
+// Init -- настраивает окно для бабл-теа
+func (sf *WinConfigServerHostInput) Init() tea.Cmd {
+	return textinput.Blink
+}
+
+// Update -- обрабатывает команду цикла
+func (sf *WinConfigServerHostInput) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
+	winName := alias.AWinName("")
+	switch msg := msg.(type) {
+	// Может клавиша нажата
+	case tea.KeyMsg:
+		switch msg.String() { // Да, нажато, а что именно?
+		case "esc": // Вернуться на шаг назад
+			winName = cons.WinConfigServer
+		case "enter": // Нажатие "enter" вводит фактическое значение
+			sf.Desk().SetHost(sf.textInput.Value())
+			winName = cons.WinConfigServer
+		default:
+			sf.textInput, _ = sf.textInput.Update(msg)
+			fmt.Printf("\nmsg=%#v\n", msg.String())
+			winName = sf.Name()
+		}
+	}
+	if winName != "" {
+		sf.Desk().SetWin(winName)
+		return sf.model, nil
+	}
+	return nil, nil
+}
+
+// View -- перерисовывание окна по требованию
+func (sf *WinConfigServerHostInput) View() string {
+	s := "=Ввод хоста для сервера вар-танк=\n\n"
+	s += fmt.Sprintf(">%v\n", sf.textInput.View())
+	s += "\n\n[ctrl+q]-выход [esc]-назад\n"
+	return s
+}

+ 11 - 11
pkg/cons/cons.go

@@ -20,15 +20,15 @@ const (
 )
 
 const (
-	WinDefault          alias.AWinName = "winDefault"
-	WinConfig           alias.AWinName = "winConfig"       // Режим конфигурирования
-	WinConfigServer     alias.AWinName = "winConfigServer" // Режим конфигуррования сервера
-	WinInputHostServer                                     // Режим ввода хоста сервера
-	WinInputLoginServer                                    // Режим ввода логина на сервер
-	WinInputPassServer                                     // Режим ввода пароля входа на сервер
-	WinConnectServer                                       // Режим подключения к серверу
-	WinLoginServer                                         // Режим логина на сервер
-	WinServerMakeAdmin                                     // Создать админа для бот-сервера
-	WinServerMakeUser                                      // Создать пользователя для бот-сервера
-	WinShowMenuBot                                         // Показать меню ботов
+	WinDefault               alias.AWinName = "winDefault"
+	WinConfig                alias.AWinName = "winConfig"                // Режим конфигурирования
+	WinConfigServer          alias.AWinName = "winConfigServer"          // Режим конфигуррования сервера
+	WinConfigServerHostInput alias.AWinName = "winConfigServerHostInput" // Режим ввода хоста сервера
+	WinInputLoginServer                                                  // Режим ввода логина на сервер
+	WinInputPassServer                                                   // Режим ввода пароля входа на сервер
+	WinConnectServer                                                     // Режим подключения к серверу
+	WinLoginServer                                                       // Режим логина на сервер
+	WinServerMakeAdmin                                                   // Создать админа для бот-сервера
+	WinServerMakeUser                                                    // Создать пользователя для бот-сервера
+	WinShowMenuBot                                                       // Показать меню ботов
 )

+ 2 - 0
pkg/types/idesktop.go

@@ -10,4 +10,6 @@ type IDesktop interface {
 	IsConnect() bool
 	// IsLogin -- возвращает признак логина на сервере ботов
 	IsLogin() bool
+	// SetHost -- устанавливает имя хоста бото-фермы
+	SetHost(host string)
 }