Bläddra i källkod

d01 Добавление списка ботов для выбора

SVI 2 år sedan
förälder
incheckning
220f4f5d69
4 ändrade filer med 52 tillägg och 17 borttagningar
  1. 9 0
      desktop/desktop.go
  2. 40 17
      desktop/win_bots_list/win_bot_list.go
  3. 1 0
      pkg/cons/cons.go
  4. 2 0
      pkg/types/idesktop.go

+ 9 - 0
desktop/desktop.go

@@ -266,3 +266,12 @@ func (sf *Desktop) SetBotPass(password string) {
 	sf.conf.DictBot_[sf.botCurrent.Login_] = sf.botCurrent
 	sf.conf.Save()
 }
+
+// LstBot -- список ботов из десктоп-клиента
+func (sf *Desktop) LstBot() []string {
+	lst := make([]string, 0)
+	for _, bot := range sf.conf.DictBot_ {
+		lst = append(lst, bot.Login_)
+	}
+	return lst
+}

+ 40 - 17
desktop/win_bots_list/win_bot_list.go

@@ -13,31 +13,33 @@ import (
 	"wartank/pkg/types"
 )
 
-// WinBotsList -- конфигурация для добавления пароля бота на бото-ферму вар-танк
+// WinBotsList -- показывает список ботов на бото-ферме вар-танк
 type WinBotsList struct {
 	*win_base.WinBase
-	textInput textinput.Model
+	botSelect int            // Выбранный бот
+	dictBot   map[int]string // Список ботов
 }
 
-// NewWinBotsAddPass -- возвращает новое окно для ввода пароля бота при добавлению на бото-ферму вар-танк
-func NewWinBotsAddPass(desk types.IDesktop) (*WinBotsList, error) {
+// NewWinBotsList -- возвращает новое окно для ввода списка ботов а бото-ферме вар-танк
+func NewWinBotsList(desk types.IDesktop) (*WinBotsList, error) {
 	winBase, err := win_base.NewWinBase(desk, cons.WinBotsAddPass)
 	if err != nil {
-		return nil, fmt.Errorf("NewWinBotsAddPass(): in create WinBase, err=\n\t%w", err)
+		return nil, fmt.Errorf("NewWinBotsList(): in create WinBase, err=\n\t%w", err)
 	}
 	sf := &WinBotsList{
-		WinBase:   winBase,
-		textInput: textinput.New(),
+		WinBase: winBase,
+		dictBot: make(map[int]string),
 	}
-	sf.textInput.Placeholder = "wartank"
-	sf.textInput.Focus()
-	sf.textInput.Width = 30
 	_ = tea.Model(sf)
 	return sf, nil
 }
 
 // Init -- настраивает окно для бабл-теа
 func (sf *WinBotsList) Init() tea.Cmd {
+	lstBot := sf.Desk().LstBot()
+	for ind, bot := range lstBot {
+		sf.dictBot[ind] = bot
+	}
 	return textinput.Blink
 }
 
@@ -50,11 +52,26 @@ func (sf *WinBotsList) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 		switch msg.String() { // Да, нажато, а что именно?
 		case "esc": // Вернуться на шаг назад
 			winName = cons.WinBotsMenu
-		case "enter": // Нажатие "enter" вводит фактическое значение
-			sf.Desk().SetBotPass(sf.textInput.Value())
-			winName = cons.WinBotsMenu
-		default:
-			sf.textInput, _ = sf.textInput.Update(msg)
+		case "down", "s": // Нажато вниз
+			for key := range sf.dictBot {
+				if key == sf.botSelect {
+					sf.botSelect++
+					if sf.botSelect >= len(sf.dictBot) {
+						sf.botSelect = len(sf.dictBot) - 1
+					}
+					break
+				}
+			}
+		case "up", "w": // Нажато вверх
+			for key := range sf.dictBot {
+				if key == sf.botSelect {
+					sf.botSelect++
+					if sf.botSelect < 0 {
+						sf.botSelect = 0
+					}
+					break
+				}
+			}
 		}
 	}
 	if winName != "" {
@@ -65,8 +82,14 @@ func (sf *WinBotsList) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 
 // View -- перерисовывание окна по требованию
 func (sf *WinBotsList) View() string {
-	s := "=Добавление пароля бота на бото-ферму вар-танк=\n\n"
-	s += fmt.Sprintf(">%v\n", sf.textInput.View())
+	s := "=Выбор бота на бото-ферме вар-танк=\n\n"
+	for key, bot := range sf.dictBot {
+		if key != sf.botSelect {
+			s += fmt.Sprintf("\t\t%v\n", bot)
+			continue
+		}
+		s += fmt.Sprintf("=>\t%v\n", bot)
+	}
 	s += "\n\n[ctrl+q]-выход [esc]-назад\n"
 	return s
 }

+ 1 - 0
pkg/cons/cons.go

@@ -34,4 +34,5 @@ const (
 	WinBotsMenu     alias.AWinName = "winBotsMenu"     // Режим показа меню бото-фермы
 	WinBotsAddLogin alias.AWinName = "winBotsAddLogin" // Добавление логина бота на бото-ферму
 	WinBotsAddPass  alias.AWinName = "winBotsAddPass"  // Добавление пароля бота на бото-ферму
+	WinBotsList     alias.AWinName = "winBotsLits"     // Список ботов на бото-ферме
 )

+ 2 - 0
pkg/types/idesktop.go

@@ -24,4 +24,6 @@ type IDesktop interface {
 	SetBotLogin(login string)
 	// SetBotPass -- устанавливает пароль текущего бота
 	SetBotPass(password string)
+	// LstBot -- список ботов из клиента
+	LstBot() []string
 }