Przeglądaj źródła

d01 Показ состояния бота

SVI 2 lat temu
rodzic
commit
1483d15cd0

+ 6 - 6
desktop/config/config.go

@@ -5,21 +5,21 @@ import (
 	"encoding/json"
 	"log"
 	"os"
-	"wartank/desktop/bot"
+	"wartank/pkg/bot"
 )
 
 // Config -- конфигурация для клиента
 type Config struct {
-	Host_    string              `json:"host"`      // Хост
-	Login_   string              `json:"login"`     // Логин
-	Pass_    string              `json:"password"`  // Пароль
-	DictBot_ map[string]*bot.Bot `json:"list_bots"` // Список ботов
+	Host_    string     `json:"host"`      // Хост
+	Login_   string     `json:"login"`     // Логин
+	Pass_    string     `json:"password"`  // Пароль
+	ListBot_ []*bot.Bot `json:"list_bots"` // Список ботов
 }
 
 // NewConfig -- возвращает новый конфиг
 func NewConfig() *Config {
 	sf := &Config{
-		DictBot_: map[string]*bot.Bot{},
+		ListBot_: []*bot.Bot{},
 	}
 	sf.load()
 	return sf

+ 13 - 12
desktop/desktop.go

@@ -10,7 +10,6 @@ import (
 	"github.com/charmbracelet/bubbles/textinput"
 	tea "github.com/charmbracelet/bubbletea"
 
-	"wartank/desktop/bot"
 	"wartank/desktop/client_serv"
 	"wartank/desktop/config"
 	"wartank/desktop/win_bots_add_login"
@@ -26,6 +25,7 @@ import (
 	"wartank/desktop/win_server_connect"
 	"wartank/desktop/win_server_login"
 	"wartank/pkg/alias"
+	"wartank/pkg/bot"
 	"wartank/pkg/cons"
 	"wartank/pkg/types"
 )
@@ -262,24 +262,25 @@ func (sf *Desktop) SetBotLogin(login string) {
 func (sf *Desktop) SetBotPass(password string) {
 
 	sf.botCurrent.Pass_ = password
-	bot := sf.conf.DictBot_[sf.botCurrent.Login_]
-	if bot != nil {
-		return
+	for _, bot_ := range sf.conf.ListBot_ {
+		if bot_.Login_ == sf.botCurrent.Login_ {
+			return
+		}
 	}
-	err := sf.client.AddBot(sf.botCurrent.Login_, sf.botCurrent.Pass_)
+	err := sf.client.AddBot(sf.botCurrent.Login_, password)
 	if err != nil {
 		log.Printf("Desktop.SetBotPass(): in make request, err=\n\t%v\n", err)
 		return
 	}
-	sf.conf.DictBot_[sf.botCurrent.Login_] = sf.botCurrent
+	botNew := &bot.Bot{
+		Login_: sf.botCurrent.Login_,
+		Pass_:  password,
+	}
+	sf.conf.ListBot_ = append(sf.conf.ListBot_, botNew)
 	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
+func (sf *Desktop) LstBot() []*bot.Bot {
+	return sf.conf.ListBot_
 }

+ 30 - 16
desktop/win_bots_list/win_bot_list.go

@@ -9,6 +9,7 @@ import (
 
 	"wartank/desktop/win_base"
 	"wartank/pkg/alias"
+	"wartank/pkg/bot"
 	"wartank/pkg/cons"
 	"wartank/pkg/types"
 )
@@ -16,8 +17,8 @@ import (
 // WinBotsList -- показывает список ботов на бото-ферме вар-танк
 type WinBotsList struct {
 	*win_base.WinBase
-	botSelect int            // Выбранный бот
-	dictBot   map[int]string // Список ботов
+	botSelect int        // Выбранный бот
+	lstBot    []*bot.Bot // Список ботов
 }
 
 // NewWinBotsList -- возвращает новое окно для ввода списка ботов а бото-ферме вар-танк
@@ -28,18 +29,23 @@ func NewWinBotsList(desk types.IDesktop) (*WinBotsList, error) {
 	}
 	sf := &WinBotsList{
 		WinBase: winBase,
-		dictBot: make(map[int]string),
+		lstBot:  make([]*bot.Bot, 0),
 	}
+	sf.updateBots()
 	_ = tea.Model(sf)
 	return sf, nil
 }
 
+// Обновляет список ботов
+func (sf *WinBotsList) updateBots() {
+	sf.lstBot = sf.Desk().LstBot()
+	if sf.botSelect >= len(sf.lstBot) {
+		sf.botSelect = len(sf.lstBot) - 1
+	}
+}
+
 // Init -- настраивает окно для бабл-теа
 func (sf *WinBotsList) Init() tea.Cmd {
-	lstBot := sf.Desk().LstBot()
-	for ind, bot := range lstBot {
-		sf.dictBot[ind] = bot
-	}
 	return textinput.Blink
 }
 
@@ -53,25 +59,31 @@ func (sf *WinBotsList) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 		case "esc": // Вернуться на шаг назад
 			winName = cons.WinBotsMenu
 		case "down", "s": // Нажато вниз
-			for key := range sf.dictBot {
+			sf.updateBots()
+			for key := range sf.lstBot {
 				if key == sf.botSelect {
 					sf.botSelect++
-					if sf.botSelect >= len(sf.dictBot) {
-						sf.botSelect = len(sf.dictBot) - 1
+					if sf.botSelect >= len(sf.lstBot) {
+						sf.botSelect = len(sf.lstBot) - 1
 					}
+					sf.Desk().SetBotLogin(sf.lstBot[key].Login_)
 					break
 				}
 			}
 		case "up", "w": // Нажато вверх
-			for key := range sf.dictBot {
+			sf.updateBots()
+			for key := range sf.lstBot {
 				if key == sf.botSelect {
-					sf.botSelect++
+					sf.botSelect--
 					if sf.botSelect < 0 {
 						sf.botSelect = 0
 					}
+					sf.Desk().SetBotLogin(sf.lstBot[key].Login_)
 					break
 				}
 			}
+		case "enter": // Посмотреть бота
+			winName = cons.WinBotShow
 		}
 	}
 	if winName != "" {
@@ -83,13 +95,15 @@ func (sf *WinBotsList) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 // View -- перерисовывание окна по требованию
 func (sf *WinBotsList) View() string {
 	s := "=Выбор бота на бото-ферме вар-танк=\n\n"
-	for key, bot := range sf.dictBot {
+	sf.updateBots()
+	for key, bot := range sf.lstBot {
 		if key != sf.botSelect {
-			s += fmt.Sprintf("\t\t%v\n", bot)
+			s += fmt.Sprintf("%v)\t%v\n", key, bot.Login_)
 			continue
 		}
-		s += fmt.Sprintf("=>\t%v\n", bot)
+		s += fmt.Sprintf("%v)=>\t%v\n", key, bot.Login_)
 	}
-	s += "\n\n[ctrl+q]-выход [esc]-назад\n"
+	s += fmt.Sprintf("WinBotsList.View(): select=%v\n", sf.lstBot[sf.botSelect].Login_)
+	s += "\n\n[ctrl+q]-выход [esc]-назад [enter]-просмотр бота\n"
 	return s
 }

+ 0 - 0
desktop/bot/bot.go → pkg/bot/bot.go


+ 1 - 0
pkg/cons/cons.go

@@ -35,4 +35,5 @@ const (
 	WinBotsAddLogin alias.AWinName = "winBotsAddLogin" // Добавление логина бота на бото-ферму
 	WinBotsAddPass  alias.AWinName = "winBotsAddPass"  // Добавление пароля бота на бото-ферму
 	WinBotsList     alias.AWinName = "winBotsLits"     // Список ботов на бото-ферме
+	WinBotShow      alias.AWinName = "winBotShow"      // Показать состояние бота
 )

+ 5 - 2
pkg/types/idesktop.go

@@ -1,6 +1,9 @@
 package types
 
-import "wartank/pkg/alias"
+import (
+	"wartank/pkg/alias"
+	"wartank/pkg/bot"
+)
 
 // IDesktop -- интерфейс к десктоп-приложению
 type IDesktop interface {
@@ -25,5 +28,5 @@ type IDesktop interface {
 	// SetBotPass -- устанавливает пароль текущего бота
 	SetBotPass(password string)
 	// LstBot -- список ботов из клиента
-	LstBot() []string
+	LstBot() []*bot.Bot
 }