From 5466aa84b1ef2ac810d7343b5886f745f02ca675 Mon Sep 17 00:00:00 2001 From: ayn2op Date: Thu, 26 Jan 2023 16:41:25 +0530 Subject: [PATCH] Create MainFlex struct --- attachment_image.go | 2 +- guilds_tree.go | 10 +++++----- login_form.go | 12 ++---------- main.go | 24 ++++-------------------- main_flex.go | 38 ++++++++++++++++++++++++++++++++++---- message_input.go | 18 +++++++++--------- messages_text.go | 28 ++++++++++++++-------------- state.go | 14 +++++++------- 8 files changed, 76 insertions(+), 70 deletions(-) diff --git a/attachment_image.go b/attachment_image.go index c20eb1b..36a05f6 100644 --- a/attachment_image.go +++ b/attachment_image.go @@ -50,7 +50,7 @@ func newAttachmentImage(a discord.Attachment) (*AttachmentImage, error) { func (ai *AttachmentImage) onInputCapture(event *tcell.EventKey) *tcell.EventKey { if event.Name() == config.Current.Keys.Cancel { app.SetRoot(mainFlex, true) - app.SetFocus(messagesText) + app.SetFocus(mainFlex.messagesText) return nil } diff --git a/guilds_tree.go b/guilds_tree.go index edfedaa..289e51a 100644 --- a/guilds_tree.go +++ b/guilds_tree.go @@ -163,8 +163,8 @@ PARENT_CHANNELS: func (gt *GuildsTree) onSelected(n *tview.TreeNode) { gt.selectedChannelID = 0 - messagesText.reset() - messageInput.reset() + mainFlex.messagesText.reset() + mainFlex.messageInput.reset() if len(n.GetChildren()) != 0 { n.SetExpanded(!n.IsExpanded()) @@ -193,7 +193,7 @@ func (gt *GuildsTree) onSelected(n *tview.TreeNode) { } for i := len(ms) - 1; i >= 0; i-- { - messagesText.createMessage(ms[i]) + mainFlex.messagesText.createMessage(ms[i]) } c, err := discordState.Cabinet.Channel(ref) @@ -202,10 +202,10 @@ func (gt *GuildsTree) onSelected(n *tview.TreeNode) { return } - messagesText.SetTitle(gt.channelToString(*c)) + mainFlex.messagesText.SetTitle(gt.channelToString(*c)) gt.selectedChannelID = ref - app.SetFocus(messageInput) + app.SetFocus(mainFlex.messageInput) case nil: // Direct messages cs, err := discordState.Cabinet.PrivateChannels() if err != nil { diff --git a/login_form.go b/login_form.go index 26b9fca..f724d3e 100644 --- a/login_form.go +++ b/login_form.go @@ -63,21 +63,13 @@ func (lf *LoginForm) onLoginButtonSelected() { } } + mainFlex = newMainFlex() + // We got the token, return with a new Session. discordState, err = openState(l.Token) if err != nil { log.Fatal(err) } - right := tview.NewFlex() - right.SetDirection(tview.FlexRow) - right.AddItem(messagesText, 0, 1, false) - right.AddItem(messageInput, 3, 1, false) - - // The guilds tree is always focused first at start-up. - mainFlex.AddItem(guildsTree, 0, 1, true) - mainFlex.AddItem(right, 0, 4, false) - - mainFlex.SetInputCapture(onInputCapture) app.SetRoot(mainFlex, true) } diff --git a/main.go b/main.go index 7f9f01d..a2ac586 100644 --- a/main.go +++ b/main.go @@ -16,11 +16,8 @@ var ( discordState *State - app = tview.NewApplication() - mainFlex = tview.NewFlex() - guildsTree *GuildsTree - messagesText *MessagesText - messageInput *MessageInput + app = tview.NewApplication() + mainFlex *MainFlex ) func init() { @@ -64,30 +61,17 @@ func main() { log.Fatal(err) } - // Initialize UI widgets - guildsTree = newGuildsTree() - messagesText = newMessagesText() - messageInput = newMessageInput() - // mission failed, we'll get 'em next time if token == "" { app.SetRoot(newLoginForm(), true) } else { + mainFlex = newMainFlex() + discordState, err = openState(token) if err != nil { log.Fatal(err) } - right := tview.NewFlex() - right.SetDirection(tview.FlexRow) - right.AddItem(messagesText, 0, 1, false) - right.AddItem(messageInput, 3, 1, false) - - // The guilds tree is always focused first at start-up. - mainFlex.AddItem(guildsTree, 0, 1, true) - mainFlex.AddItem(right, 0, 4, false) - - mainFlex.SetInputCapture(onInputCapture) app.SetRoot(mainFlex, true) } diff --git a/main_flex.go b/main_flex.go index e2c0f7b..4333003 100644 --- a/main_flex.go +++ b/main_flex.go @@ -3,18 +3,48 @@ package main import ( "github.com/ayn2op/discordo/internal/config" "github.com/gdamore/tcell/v2" + "github.com/rivo/tview" ) -func onInputCapture(event *tcell.EventKey) *tcell.EventKey { +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(), + } + + 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) + mf.SetInputCapture(mf.onInputCapture) + + return mf +} + +func (mf *MainFlex) onInputCapture(event *tcell.EventKey) *tcell.EventKey { switch event.Name() { case config.Current.Keys.GuildsTree.Focus: - app.SetFocus(guildsTree) + app.SetFocus(mf.guildsTree) return nil case config.Current.Keys.MessagesText.Focus: - app.SetFocus(messagesText) + app.SetFocus(mf.messagesText) return nil case config.Current.Keys.MessageInput.Focus: - app.SetFocus(messageInput) + app.SetFocus(mf.messageInput) return nil } diff --git a/message_input.go b/message_input.go index 9ed4394..42fb62e 100644 --- a/message_input.go +++ b/message_input.go @@ -53,7 +53,7 @@ func (mi *MessageInput) onInputCapture(event *tcell.EventKey) *tcell.EventKey { mi.pasteAction() return nil case config.Current.Keys.MessageInput.LaunchEditor: - messageInput.launchEditorAction() + mainFlex.messageInput.launchEditorAction() return nil case config.Current.Keys.Cancel: mi.reset() @@ -64,7 +64,7 @@ func (mi *MessageInput) onInputCapture(event *tcell.EventKey) *tcell.EventKey { } func (mi *MessageInput) sendAction() { - if !guildsTree.selectedChannelID.IsValid() { + if !mainFlex.guildsTree.selectedChannelID.IsValid() { return } @@ -74,8 +74,8 @@ func (mi *MessageInput) sendAction() { } var err error - if messagesText.selectedMessage != -1 { - ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID) + if mainFlex.messagesText.selectedMessage != -1 { + ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID) if err != nil { log.Println(err) return @@ -83,7 +83,7 @@ func (mi *MessageInput) sendAction() { data := api.SendMessageData{ Content: text, - Reference: &discord.MessageReference{MessageID: ms[messagesText.selectedMessage].ID}, + Reference: &discord.MessageReference{MessageID: ms[mainFlex.messagesText.selectedMessage].ID}, AllowedMentions: &api.AllowedMentions{RepliedUser: option.False}, } @@ -91,9 +91,9 @@ func (mi *MessageInput) sendAction() { data.AllowedMentions.RepliedUser = option.True } - go discordState.SendMessageComplex(guildsTree.selectedChannelID, data) + go discordState.SendMessageComplex(mainFlex.guildsTree.selectedChannelID, data) } else { - go discordState.SendMessage(guildsTree.selectedChannelID, text) + go discordState.SendMessage(mainFlex.guildsTree.selectedChannelID, text) } if err != nil { @@ -101,8 +101,8 @@ func (mi *MessageInput) sendAction() { return } - messagesText.selectedMessage = -1 - messagesText.Highlight() + mainFlex.messagesText.selectedMessage = -1 + mainFlex.messagesText.Highlight() mi.reset() } diff --git a/messages_text.go b/messages_text.go index bdf9a58..62f0b15 100644 --- a/messages_text.go +++ b/messages_text.go @@ -53,7 +53,7 @@ func newMessagesText() *MessagesText { } func (mt *MessagesText) reset() { - messagesText.selectedMessage = -1 + mainFlex.messagesText.selectedMessage = -1 mt.SetTitle("") mt.Clear() @@ -135,10 +135,10 @@ func (mt *MessagesText) onInputCapture(event *tcell.EventKey) *tcell.EventKey { mt.showImageAction() return nil case config.Current.Keys.Cancel: - guildsTree.selectedChannelID = 0 + mainFlex.guildsTree.selectedChannelID = 0 - messagesText.reset() - messageInput.reset() + mainFlex.messagesText.reset() + mainFlex.messageInput.reset() return nil } @@ -157,20 +157,20 @@ func (mt *MessagesText) replyAction(mention bool) { title += "Replying to " } - ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID) + ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID) if err != nil { log.Println(err) return } title += ms[mt.selectedMessage].Author.Tag() - messageInput.SetTitle(title) + mainFlex.messageInput.SetTitle(title) - app.SetFocus(messageInput) + app.SetFocus(mainFlex.messageInput) } func (mt *MessagesText) selectPreviousAction() { - ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID) + ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID) if err != nil { log.Println(err) return @@ -190,7 +190,7 @@ func (mt *MessagesText) selectPreviousAction() { } func (mt *MessagesText) selectNextAction() { - ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID) + ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID) if err != nil { log.Println(err) return @@ -210,7 +210,7 @@ func (mt *MessagesText) selectNextAction() { } func (mt *MessagesText) selectFirstAction() { - ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID) + ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID) if err != nil { log.Println(err) return @@ -222,7 +222,7 @@ func (mt *MessagesText) selectFirstAction() { } func (mt *MessagesText) selectLastAction() { - ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID) + ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID) if err != nil { log.Println(err) return @@ -238,7 +238,7 @@ func (mt *MessagesText) selectReplyAction() { return } - ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID) + ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID) if err != nil { log.Println(err) return @@ -262,7 +262,7 @@ func (mt *MessagesText) copyContentAction() { return } - ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID) + ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID) if err != nil { log.Println(err) return @@ -280,7 +280,7 @@ func (mt *MessagesText) showImageAction() { return } - ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID) + ms, err := discordState.Cabinet.Messages(mainFlex.guildsTree.selectedChannelID) if err != nil { log.Println(err) return diff --git a/state.go b/state.go index 66b6c7d..dea3d9d 100644 --- a/state.go +++ b/state.go @@ -60,7 +60,7 @@ func (s *State) onRequest(r httpdriver.Request) error { func (s *State) onReady(r *gateway.ReadyEvent) { dmNode := tview.NewTreeNode("Direct Messages") - guildsTree.root.AddChild(dmNode) + mainFlex.guildsTree.root.AddChild(dmNode) for _, gf := range r.UserSettings.GuildFolders { /// If the ID of the guild folder is zero, the guild folder only contains single guild. @@ -71,18 +71,18 @@ func (s *State) onReady(r *gateway.ReadyEvent) { continue } - guildsTree.createGuildNode(guildsTree.root, *g) + mainFlex.guildsTree.createGuildNode(mainFlex.guildsTree.root, *g) } else { - guildsTree.createGuildFolderNode(guildsTree.root, gf) + mainFlex.guildsTree.createGuildFolderNode(mainFlex.guildsTree.root, gf) } } - guildsTree.SetCurrentNode(guildsTree.root) - app.SetFocus(guildsTree) + mainFlex.guildsTree.SetCurrentNode(mainFlex.guildsTree.root) + app.SetFocus(mainFlex.guildsTree) } func (s *State) onMessageCreate(m *gateway.MessageCreateEvent) { - if guildsTree.selectedChannelID.IsValid() && guildsTree.selectedChannelID == m.ChannelID { - messagesText.createMessage(m.Message) + if mainFlex.guildsTree.selectedChannelID.IsValid() && mainFlex.guildsTree.selectedChannelID == m.ChannelID { + mainFlex.messagesText.createMessage(m.Message) } }