| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- package cmd
- import (
- "log/slog"
- "github.com/ayn2op/discordo/internal/constants"
- "github.com/gdamore/tcell/v2"
- "github.com/rivo/tview"
- "github.com/zalando/go-keyring"
- )
- type MainFlex struct {
- *tview.Flex
- guildsTree *GuildsTree
- messagesText *MessagesText
- messageInput *MessageInput
- }
- func newMainFlex() *MainFlex {
- mf := &MainFlex{
- Flex: tview.NewFlex(),
- guildsTree: newGuildsTree(),
- messagesText: newMessagesText(),
- messageInput: newMessageInput(),
- }
- mf.init()
- mf.SetInputCapture(mf.onInputCapture)
- return mf
- }
- func (mf *MainFlex) init() {
- mf.Clear()
- right := tview.NewFlex()
- right.SetDirection(tview.FlexRow)
- right.AddItem(mf.messagesText, 0, 1, false)
- right.AddItem(mf.messageInput, 3, 1, false)
- // The guilds tree is always focused first at start-up.
- mf.AddItem(mf.guildsTree, 0, 1, true)
- mf.AddItem(right, 0, 4, false)
- }
- func (mf *MainFlex) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
- switch event.Name() {
- case cfg.Keys.FocusGuildsTree:
- app.SetFocus(mf.guildsTree)
- return nil
- case cfg.Keys.FocusMessagesText:
- app.SetFocus(mf.messagesText)
- return nil
- case cfg.Keys.FocusMessageInput:
- app.SetFocus(mf.messageInput)
- return nil
- case cfg.Keys.Logout:
- app.Stop()
- if err := keyring.Delete(constants.Name, "token"); err != nil {
- slog.Error("failed to delete token from keyring", "err", err)
- return nil
- }
- return nil
- case cfg.Keys.ToggleGuildsTree:
- // The guilds tree is visible if the numbers of items is two.
- if mf.GetItemCount() == 2 {
- mf.RemoveItem(mf.guildsTree)
- if mf.guildsTree.HasFocus() {
- app.SetFocus(mf)
- }
- } else {
- mf.init()
- app.SetFocus(mf.guildsTree)
- }
- return nil
- }
- return event
- }
|