Browse Source

d01 Продолжение вытаскивание окон в отдельные типы

SVI 2 years ago
parent
commit
e1df495d7f

+ 32 - 50
desktop/desktop.go

@@ -13,7 +13,9 @@ import (
 	"wartank/desktop/win_config_server"
 	"wartank/desktop/win_config_server_host_input"
 	"wartank/desktop/win_config_server_login_input"
+	"wartank/desktop/win_config_server_pass_input"
 	"wartank/desktop/win_default"
+	"wartank/desktop/win_server_connect"
 	"wartank/pkg/alias"
 	"wartank/pkg/cons"
 	"wartank/pkg/types"
@@ -77,6 +79,20 @@ func NewDesktop() (*Desktop, error) {
 			}
 			sf.dictWin[winConfigServerLoginInput.Name()] = winConfigServerLoginInput
 		}
+		{ // WinConfigServerPassInput
+			winConfigServerPassInput, err := win_config_server_pass_input.NewWinConfigServerPasswordInput(sf)
+			if err != nil {
+				return nil, fmt.Errorf("NewDesktop(): in create WinConfigServerPasswordInput, err=\n\t%w", err)
+			}
+			sf.dictWin[winConfigServerPassInput.Name()] = winConfigServerPassInput
+		}
+		{ // WinServerConnect
+			winServerConnect, err := win_server_connect.NewWinServerConnect(sf)
+			if err != nil {
+				return nil, fmt.Errorf("NewDesktop(): in create WinServerConnect, err=\n\t%w", err)
+			}
+			sf.dictWin[winServerConnect.Name()] = winServerConnect
+		}
 	}
 	sf.winName = cons.WinDefault
 	go sf.tick()
@@ -147,29 +163,6 @@ func (sf *Desktop) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 		return mod_, cmd_
 	}
 	/*
-		 case ModeInputPassServer:
-			switch msg := msg.(type) {
-			// Может клавиша нажата
-			case tea.KeyMsg:
-				switch msg.String() { // Да, нажато, а что именно?
-				case "esc": // Вернуться на шаг назад
-					desk.winName = ModeConfigServer
-				case "enter": // Нажатие "enter" или "пробел" переключает выбранный элемент списка
-					desk.pass = desk.textInput.Value()
-					desk.winName = ModeConfigServer
-				default:
-					desk.textInput, cmd = desk.textInput.Update(msg)
-				}
-			}
-		 case ModeConnectServer:
-			switch msg := msg.(type) {
-			// Может клавиша нажата
-			case tea.KeyMsg:
-				switch msg.String() { // Да, нажато, а что именно?
-				case "esc": // Нажатие "esc" прекращает подключение к серверу
-					desk.winName = ModeConfigServer
-				}
-			}
 		 case ModeLoginServer:
 			switch msg := msg.(type) {
 			// Может клавиша нажата
@@ -209,10 +202,6 @@ func (sf *Desktop) View() string {
 	s += desk.dictWin[desk.winName].View()
 	/*
 		switch desk.winName {
-		case ModeInputPassServer: // ввод пароля
-			s += desk.winPassServer()
-		case ModeConnectServer: // Режим подключения к серверу
-			s += desk.winConnectServer()
 		case ModeLoginServer: // Режим логина на сервер
 			s += desk.winServerLogin()
 		case ModeServerMakeAdmin: // Режим содания админа на бот-сервере
@@ -264,29 +253,6 @@ func (sf *Desktop) winServerLogin() string {
 	return s
 }
 
-func (sf *Desktop) winConnectServer() string {
-	s := "=Подключение к бот-серверу вар-танк=\n\n"
-	if !desk.isConnect {
-		err := desk.client.Connect(desk.host)
-		if err != nil {
-			s += fmt.Sprintf("Desktop.winConnectServer(): err=\n\t%v", err)
-			s += "\n\n[ctrl+q]-выход [esc]-отмена\n"
-			return s
-		}
-	}
-	s += "Desktop.winConnectServer(): ok\n"
-	desk.isConnect = true
-	s += "\n\n[ctrl+q]-выход [esc]-отмена\n"
-	return s
-}
-
-func (sf *Desktop) winPassServer() string {
-	s := "=Ввод пароля для бот-сервера вар-танк=\n\n"
-	s += fmt.Sprintf(">%v\n", desk.textInput.View())
-	s += "\n\n[ctrl+q]-выход [esc]-назад\n"
-	return s
-}
-
 */
 
 // IsLogin -- возвращает признак логина на сервер ботов
@@ -308,3 +274,19 @@ func (sf *Desktop) SetHost(hostName string) {
 func (sf *Desktop) SetLogin(login string) {
 	sf.login = login
 }
+
+// SetPass -- устанавливает пароль бото-фермы
+func (sf *Desktop) SetPass(password string) {
+	sf.pass = password
+}
+
+// Connect -- подключает клиент к бото-ферме
+func (sf *Desktop) Connect() error {
+	err := sf.client.Connect(sf.host)
+	sf.isConnect = false
+	if err != nil {
+		return fmt.Errorf("Desktop.Connect(): err=\n\t%v", err)
+	}
+	sf.isConnect = true
+	return nil
+}

+ 1 - 1
desktop/win_config/win_config.go

@@ -43,7 +43,7 @@ func (sf *WinConfig) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 			winName = cons.WinConfigServer
 		case "2": // Вход на сервер
 			if !sf.Desk().IsConnect() {
-				winName = cons.WinConnectServer
+				winName = cons.WinServerConnect
 			}
 		case "3": // Логин на сервер
 			if !sf.Desk().IsLogin() {

+ 1 - 1
desktop/win_config_server/win_config_server.go

@@ -55,7 +55,7 @@ func (sf *WinConfigServer) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 			sf.textInput.Reset()
 			sf.textInput.Placeholder = "login"
 		case "3": // Выбор пароля для входа
-			winName = cons.WinInputPassServer
+			winName = cons.WinConfigServerPassInput
 			sf.textInput.Reset()
 			sf.textInput.Placeholder = "pass"
 		}

+ 72 - 0
desktop/win_config_server_pass_input/win_config_server_pass_input.go

@@ -0,0 +1,72 @@
+// package win_config_server_pass_input -- окно ввода пароля бото-фермы
+package win_config_server_pass_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"
+)
+
+// WinConfigServerPasswordInput -- конфигурация для ввода пароля к бото-серверу вар-танк
+type WinConfigServerPasswordInput struct {
+	*win_base.WinBase
+	textInput textinput.Model
+}
+
+// NewWinConfigServerPasswordInput -- возвращает новое окно для ввода пароля к бото-серверу вар-танк
+func NewWinConfigServerPasswordInput(desk types.IDesktop) (*WinConfigServerPasswordInput, error) {
+	winBase, err := win_base.NewWinBase(desk, cons.WinConfigServerPassInput)
+	if err != nil {
+		return nil, fmt.Errorf("NewWinConfigServerPasswordInput(): in create WinBase, err=\n\t%w", err)
+	}
+	sf := &WinConfigServerPasswordInput{
+		WinBase:   winBase,
+		textInput: textinput.New(),
+	}
+	sf.textInput.Placeholder = "admin"
+	sf.textInput.Focus()
+	sf.textInput.Width = 30
+	_ = tea.Model(sf)
+	return sf, nil
+}
+
+// Init -- настраивает окно для бабл-теа
+func (sf *WinConfigServerPasswordInput) Init() tea.Cmd {
+	return textinput.Blink
+}
+
+// Update -- обрабатывает команду цикла
+func (sf *WinConfigServerPasswordInput) 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().SetPass(sf.textInput.Value())
+			winName = cons.WinConfigServer
+		default:
+			sf.textInput, _ = sf.textInput.Update(msg)
+		}
+	}
+	if winName != "" {
+		sf.Desk().SetWin(winName)
+	}
+	return nil, nil
+}
+
+// View -- перерисовывание окна по требованию
+func (sf *WinConfigServerPasswordInput) View() string {
+	s := "=Ввод пароля для бот-сервера вар-танк=\tWinConfigServerPasswordInput\n\n"
+	s += fmt.Sprintf(">%v\n", sf.textInput.View())
+	s += "\n\n[ctrl+q]-выход [esc]-назад\n"
+	return s
+}

+ 71 - 0
desktop/win_server_connect/win_server_connect.go

@@ -0,0 +1,71 @@
+// package win_server_connect -- подключение к бото-ферме
+package win_server_connect
+
+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"
+)
+
+// WinServerConnect -- конфигурация для подключения к бото-серверу вар-танк
+type WinServerConnect struct {
+	*win_base.WinBase
+}
+
+// NewWinServerConnect -- возвращает новое окно для подключения к бото-серверу вар-танк
+func NewWinServerConnect(desk types.IDesktop) (*WinServerConnect, error) {
+	winBase, err := win_base.NewWinBase(desk, cons.WinServerConnect)
+	if err != nil {
+		return nil, fmt.Errorf("NewWinServerConnect(): in create WinBase, err=\n\t%w", err)
+	}
+	sf := &WinServerConnect{
+		WinBase: winBase,
+	}
+	_ = tea.Model(sf)
+	return sf, nil
+}
+
+// Init -- настраивает окно для бабл-теа
+func (sf *WinServerConnect) Init() tea.Cmd {
+	return textinput.Blink
+}
+
+// Update -- обрабатывает команду цикла
+func (sf *WinServerConnect) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
+	winName := alias.AWinName("")
+	switch msg := msg.(type) {
+	// Может клавиша нажата
+	case tea.KeyMsg:
+		switch msg.String() { // Да, нажато, а что именно?
+		case "esc": // Нажатие "esc" прекращает подключение к серверу
+			winName = cons.WinConfigServer
+		}
+	}
+	if winName != "" {
+		sf.Desk().SetWin(winName)
+	}
+	return nil, nil
+}
+
+// View -- перерисовывание окна по требованию
+func (sf *WinServerConnect) View() string {
+	s := "=Подключение к бот-серверу вар-танк=\n\n"
+	if !sf.Desk().IsConnect() {
+		// err := desk.client.Connect(desk.host)
+		err := sf.Desk().Connect()
+		if err != nil {
+			s += fmt.Sprintf("WinServerConnect.View(): in connect to server, err=\n\t%v", err)
+			s += "\n\n[ctrl+q]-выход [esc]-отмена\n"
+			return s
+		}
+	}
+	s += "Desktop.winConnectServer(): ok\n"
+	s += "\n\n[ctrl+q]-выход [esc]-отмена\n"
+	return s
+}

+ 2 - 2
pkg/cons/cons.go

@@ -25,8 +25,8 @@ const (
 	WinConfigServer           alias.AWinName = "winConfigServer"           // Режим конфигуррования сервера
 	WinConfigServerHostInput  alias.AWinName = "winConfigServerHostInput"  // Режим ввода хоста сервера
 	WinConfigServerLoginInput alias.AWinName = "winConfigServerLoginInput" // Режим ввода логина на сервер
-	WinInputPassServer                                                     // Режим ввода пароля входа на сервер
-	WinConnectServer                                                       // Режим подключения к серверу
+	WinConfigServerPassInput  alias.AWinName = "winConfigServerPassInput"  // Режим ввода пароля входа на сервер
+	WinServerConnect          alias.AWinName = "winServerConnect"          // Режим подключения к серверу
 	WinLoginServer                                                         // Режим логина на сервер
 	WinServerMakeAdmin                                                     // Создать админа для бот-сервера
 	WinServerMakeUser                                                      // Создать пользователя для бот-сервера

+ 5 - 1
pkg/types/idesktop.go

@@ -8,10 +8,14 @@ type IDesktop interface {
 	SetWin(alias.AWinName)
 	// IsConnect -- возвращает признак подключенности к серверу ботов
 	IsConnect() bool
+	// Connect -- подклячает клиента к бото-ферме
+	Connect() error
 	// IsLogin -- возвращает признак логина на сервере ботов
 	IsLogin() bool
 	// SetHost -- устанавливает имя хоста бото-фермы
 	SetHost(host string)
-	// SetLogin -- устанавливает логин на бото-ферму
+	// SetLogin -- устанавливает логин для входа на бото-ферму
 	SetLogin(login string)
+	// SetPass -- устанавливает пароль для входа на бото-ферму
+	SetPass(password string)
 }