|
|
@@ -3,12 +3,18 @@ package desktop
|
|
|
|
|
|
import (
|
|
|
"fmt"
|
|
|
+ "log"
|
|
|
+ "os"
|
|
|
"time"
|
|
|
|
|
|
"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"
|
|
|
+ "wartank/desktop/win_bots_add_pass"
|
|
|
"wartank/desktop/win_bots_menu"
|
|
|
"wartank/desktop/win_config"
|
|
|
"wartank/desktop/win_config_server"
|
|
|
@@ -17,6 +23,7 @@ import (
|
|
|
"wartank/desktop/win_config_server_pass_input"
|
|
|
"wartank/desktop/win_default"
|
|
|
"wartank/desktop/win_server_connect"
|
|
|
+ "wartank/desktop/win_server_login"
|
|
|
"wartank/pkg/alias"
|
|
|
"wartank/pkg/cons"
|
|
|
"wartank/pkg/types"
|
|
|
@@ -24,26 +31,26 @@ import (
|
|
|
|
|
|
// Desktop -- консольный клиент для вар-танка
|
|
|
type Desktop struct {
|
|
|
- TeaModel
|
|
|
- winName alias.AWinName // Режим показа на экране
|
|
|
- p *tea.Program // Объект приложения
|
|
|
- client *client_serv.ClientServ // Клиент подключния к бото-серверу
|
|
|
- isConnect bool // Признак подключения к бот-серверу
|
|
|
- isLogin bool // Признак логина на сервер
|
|
|
- isMakeAdmin bool // Признак создания админа
|
|
|
- dictWin map[alias.AWinName]types.ITermWin // Список окон показа
|
|
|
+ conf *config.Config
|
|
|
+ winName alias.AWinName // Режим показа на экране
|
|
|
+ p *tea.Program // Объект приложения
|
|
|
+ client *client_serv.ClientServ // Клиент подключния к бото-серверу
|
|
|
+ isConnect bool // Признак подключения к бот-серверу
|
|
|
+ isLogin bool // Признак логина на сервер
|
|
|
+ dictWin map[alias.AWinName]types.ITermWin // Список окон показа
|
|
|
+ botCurrent *bot.Bot
|
|
|
}
|
|
|
|
|
|
-var desk *Desktop
|
|
|
+// var desk *Desktop
|
|
|
|
|
|
func NewDesktop() (*Desktop, error) {
|
|
|
sf := &Desktop{
|
|
|
- client: client_serv.NewClientServ(),
|
|
|
- dictWin: make(map[alias.AWinName]types.ITermWin),
|
|
|
+ client: client_serv.NewClientServ(),
|
|
|
+ dictWin: make(map[alias.AWinName]types.ITermWin),
|
|
|
+ conf: config.NewConfig(),
|
|
|
+ botCurrent: &bot.Bot{},
|
|
|
}
|
|
|
- sf.TeaModel = NewModel()
|
|
|
sf.p = tea.NewProgram(sf, tea.WithAltScreen(), tea.WithANSICompressor())
|
|
|
- desk = sf
|
|
|
{ // Создание окон
|
|
|
{ // WinDefault
|
|
|
winDefault, err := win_default.NewWinDefault(sf)
|
|
|
@@ -94,6 +101,13 @@ func NewDesktop() (*Desktop, error) {
|
|
|
}
|
|
|
sf.dictWin[winServerConnect.Name()] = winServerConnect
|
|
|
}
|
|
|
+ { // WinServerLogin
|
|
|
+ winServerLogin, err := win_server_login.NewWinServerLogin(sf)
|
|
|
+ if err != nil {
|
|
|
+ return nil, fmt.Errorf("NewDesktop(): in create WinServerLogin, err=\n\t%w", err)
|
|
|
+ }
|
|
|
+ sf.dictWin[winServerLogin.Name()] = winServerLogin
|
|
|
+ }
|
|
|
{ // WinBotsMenu
|
|
|
winBotsMenu, err := win_bots_menu.NewWinBotsMenu(sf)
|
|
|
if err != nil {
|
|
|
@@ -101,6 +115,20 @@ func NewDesktop() (*Desktop, error) {
|
|
|
}
|
|
|
sf.dictWin[winBotsMenu.Name()] = winBotsMenu
|
|
|
}
|
|
|
+ { // WinBotsAddLogin
|
|
|
+ winBotsAddLogin, err := win_bots_add_login.NewWinBotsAddLogin(sf)
|
|
|
+ if err != nil {
|
|
|
+ return nil, fmt.Errorf("NewDesktop(): in create WinBotsAddLogin, err=\n\t%w", err)
|
|
|
+ }
|
|
|
+ sf.dictWin[winBotsAddLogin.Name()] = winBotsAddLogin
|
|
|
+ }
|
|
|
+ { // WinBotsAddPass
|
|
|
+ winBotsAddPass, err := win_bots_add_pass.NewWinBotsAddPass(sf)
|
|
|
+ if err != nil {
|
|
|
+ return nil, fmt.Errorf("NewDesktop(): in create WinBotsAddPass, err=\n\t%w", err)
|
|
|
+ }
|
|
|
+ sf.dictWin[winBotsAddPass.Name()] = winBotsAddPass
|
|
|
+ }
|
|
|
}
|
|
|
sf.winName = cons.WinDefault
|
|
|
go sf.tick()
|
|
|
@@ -112,26 +140,6 @@ func (sf *Desktop) SetWin(winName alias.AWinName) {
|
|
|
sf.winName = winName
|
|
|
}
|
|
|
|
|
|
-type TeaModel struct {
|
|
|
- textInput textinput.Model
|
|
|
- host string // Имя хоста сервера (с портом)
|
|
|
- login string // Логин для сервера
|
|
|
- pass string // Пароль для сервера
|
|
|
-}
|
|
|
-
|
|
|
-func NewModel() TeaModel {
|
|
|
- ti := textinput.New()
|
|
|
- ti.Placeholder = "localhost"
|
|
|
- ti.Focus()
|
|
|
- ti.CharLimit = 156
|
|
|
- ti.Width = 20
|
|
|
-
|
|
|
- m := TeaModel{
|
|
|
- textInput: ti,
|
|
|
- }
|
|
|
- return m
|
|
|
-}
|
|
|
-
|
|
|
func (sf *Desktop) tick() {
|
|
|
for {
|
|
|
time.Sleep(time.Second * 1)
|
|
|
@@ -166,35 +174,24 @@ func (sf *Desktop) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|
|
return sf, tea.Quit
|
|
|
}
|
|
|
}
|
|
|
- mod_, cmd_ := sf.dictWin[sf.winName].Update(msg)
|
|
|
+ mod_, _ := sf.dictWin[sf.winName].Update(msg)
|
|
|
if mod_ != nil {
|
|
|
- return mod_, cmd_
|
|
|
+ return sf, nil
|
|
|
}
|
|
|
- /*
|
|
|
- case ModeShowMenuBot:
|
|
|
- // Может клавиша нажата
|
|
|
- switch msg := msg.(type) {
|
|
|
- case tea.KeyMsg:
|
|
|
- switch msg.String() { // Да, нажато, а что именно?
|
|
|
- case "esc": // Нажатие "esc" прекращает показ меню
|
|
|
- desk.winName = ModeConfig
|
|
|
- }
|
|
|
- }
|
|
|
- // Возвращает обновлённую модель дляe Bubble Tea runtime для обработки.
|
|
|
- //Здесь команду возвращать надо.
|
|
|
- */
|
|
|
- return desk, cmd
|
|
|
+ return sf, cmd
|
|
|
}
|
|
|
|
|
|
func (sf *Desktop) View() string {
|
|
|
+ _s := fmt.Sprintf("Desktop.View(): winName=%q\n", sf.winName)
|
|
|
+ os.WriteFile("./out.log", []byte(_s), 0600)
|
|
|
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()
|
|
|
- /*
|
|
|
- case ModeShowMenuBot: // Меню бото-фермы
|
|
|
- s += desk.winMenuBotoFerma()
|
|
|
- }
|
|
|
- */
|
|
|
+ s += fmt.Sprintf("\tХост=%q\tЛогин=%q\tПароль=%q\tПодключено=%v\tЛогин=%v\n\n",
|
|
|
+ sf.conf.Host_,
|
|
|
+ sf.conf.Login_,
|
|
|
+ sf.conf.Pass_,
|
|
|
+ sf.isConnect,
|
|
|
+ sf.isLogin)
|
|
|
+ s += _s + sf.dictWin[sf.winName].View()
|
|
|
return s
|
|
|
}
|
|
|
|
|
|
@@ -210,22 +207,25 @@ func (sf *Desktop) IsConnect() bool {
|
|
|
|
|
|
// SetHost -- устанавливает имя хоста бото-фермы
|
|
|
func (sf *Desktop) SetHost(hostName string) {
|
|
|
- sf.host = hostName
|
|
|
+ sf.conf.Host_ = hostName
|
|
|
+ sf.conf.Save()
|
|
|
}
|
|
|
|
|
|
// SetLogin -- устанавливает логин бото-фермы
|
|
|
func (sf *Desktop) SetLogin(login string) {
|
|
|
- sf.login = login
|
|
|
+ sf.conf.Login_ = login
|
|
|
+ sf.conf.Save()
|
|
|
}
|
|
|
|
|
|
// SetPass -- устанавливает пароль бото-фермы
|
|
|
func (sf *Desktop) SetPass(password string) {
|
|
|
- sf.pass = password
|
|
|
+ sf.conf.Pass_ = password
|
|
|
+ sf.conf.Save()
|
|
|
}
|
|
|
|
|
|
// Connect -- подключает клиент к бото-ферме
|
|
|
func (sf *Desktop) Connect() error {
|
|
|
- err := sf.client.Connect(sf.host)
|
|
|
+ err := sf.client.Connect(sf.conf.Host_)
|
|
|
sf.isConnect = false
|
|
|
if err != nil {
|
|
|
return fmt.Errorf("Desktop.Connect(): err=\n\t%v", err)
|
|
|
@@ -236,7 +236,7 @@ func (sf *Desktop) Connect() error {
|
|
|
|
|
|
// MakeLogin -- выполняет вход на бото-ферму
|
|
|
func (sf *Desktop) MakeLogin() error {
|
|
|
- err := sf.client.Login(sf.login, sf.pass)
|
|
|
+ err := sf.client.Login(sf.conf.Login_, sf.conf.Pass_)
|
|
|
sf.isLogin = false
|
|
|
if err != nil {
|
|
|
return fmt.Errorf("Desktop.MakeLogin(): in login to server, err=\n\t%v", err)
|
|
|
@@ -244,3 +244,25 @@ func (sf *Desktop) MakeLogin() error {
|
|
|
sf.isLogin = true
|
|
|
return nil
|
|
|
}
|
|
|
+
|
|
|
+// SetBotLogin -- устанавливает логин текущего бота
|
|
|
+func (sf *Desktop) SetBotLogin(login string) {
|
|
|
+ sf.botCurrent.Login_ = login
|
|
|
+}
|
|
|
+
|
|
|
+// SetBotPass -- устанавливает пароль текущего бота
|
|
|
+func (sf *Desktop) SetBotPass(password string) {
|
|
|
+
|
|
|
+ sf.botCurrent.Pass_ = password
|
|
|
+ bot := sf.conf.DictBot_[sf.botCurrent.Login_]
|
|
|
+ if bot != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ err := sf.client.AddBot(sf.botCurrent.Login_, sf.botCurrent.Pass_)
|
|
|
+ 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
|
|
|
+ sf.conf.Save()
|
|
|
+}
|