Quellcode durchsuchen

Create MainFlex struct

ayn2op vor 3 Jahren
Ursprung
Commit
5466aa84b1
8 geänderte Dateien mit 76 neuen und 70 gelöschten Zeilen
  1. 1 1
      attachment_image.go
  2. 5 5
      guilds_tree.go
  3. 2 10
      login_form.go
  4. 4 20
      main.go
  5. 34 4
      main_flex.go
  6. 9 9
      message_input.go
  7. 14 14
      messages_text.go
  8. 7 7
      state.go

+ 1 - 1
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
 	}
 

+ 5 - 5
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 {

+ 2 - 10
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)
 }

+ 4 - 20
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)
 	}
 

+ 34 - 4
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
 	}
 

+ 9 - 9
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()
 }
 

+ 14 - 14
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

+ 7 - 7
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)
 	}
 }