| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- // package win_bots_list -- окно списка ботов на бото-ферме
- package win_bots_list
- import (
- "fmt"
- "github.com/charmbracelet/bubbles/textinput"
- tea "github.com/charmbracelet/bubbletea"
- "wartank/desktop/win_base"
- "wartank/pkg/alias"
- "wartank/pkg/bot"
- "wartank/pkg/cons"
- "wartank/pkg/types"
- )
- // WinBotsList -- показывает список ботов на бото-ферме вар-танк
- type WinBotsList struct {
- *win_base.WinBase
- botSelect int // Выбранный бот
- lstBot []*bot.Bot // Список ботов
- }
- // NewWinBotsList -- возвращает новое окно для ввода списка ботов а бото-ферме вар-танк
- func NewWinBotsList(desk types.IDesktop) (*WinBotsList, error) {
- winBase, err := win_base.NewWinBase(desk, cons.WinBotsList)
- if err != nil {
- return nil, fmt.Errorf("NewWinBotsList(): in create WinBase, err=\n\t%w", err)
- }
- sf := &WinBotsList{
- WinBase: winBase,
- 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 {
- return textinput.Blink
- }
- // Update -- обрабатывает команду цикла
- func (sf *WinBotsList) 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.WinBotsMenu
- case "down", "s": // Нажато вниз
- sf.updateBots()
- for key := range sf.lstBot {
- if key == sf.botSelect {
- sf.botSelect++
- if sf.botSelect >= len(sf.lstBot) {
- sf.botSelect = len(sf.lstBot) - 1
- }
- sf.Desk().SetBotLogin(sf.lstBot[key].Login_)
- break
- }
- }
- case "up", "w": // Нажато вверх
- sf.updateBots()
- for key := range sf.lstBot {
- if key == 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 != "" {
- sf.Desk().SetWin(winName)
- }
- return nil, nil
- }
- // View -- перерисовывание окна по требованию
- func (sf *WinBotsList) View() string {
- s := "=Выбор бота на бото-ферме вар-танк=\n\n"
- sf.updateBots()
- for key, bot := range sf.lstBot {
- if key != sf.botSelect {
- s += fmt.Sprintf("%v)\t%v\n", key, bot.Login_)
- continue
- }
- s += fmt.Sprintf("%v)=>\t%v\n", key, bot.Login_)
- }
- s += fmt.Sprintf("WinBotsList.View(): select=%v\n", sf.lstBot[sf.botSelect].Login_)
- s += "\n\n[ctrl+q]-выход [esc]-назад [enter]-просмотр бота\n"
- return s
- }
|