Переглянути джерело

perf: store selected channel ID instead

ayn2op 3 роки тому
батько
коміт
609357fcc3
4 змінених файлів з 25 додано та 24 видалено
  1. 11 10
      guilds_tree.go
  2. 4 4
      message_input.go
  3. 9 9
      messages_text.go
  4. 1 1
      state.go

+ 11 - 10
guilds_tree.go

@@ -15,8 +15,8 @@ import (
 type GuildsTree struct {
 	*tview.TreeView
 
-	root            *tview.TreeNode
-	selectedChannel *discord.Channel
+	root              *tview.TreeNode
+	selectedChannelID discord.ChannelID
 }
 
 func newGuildsTree() *GuildsTree {
@@ -137,7 +137,7 @@ func (gt *GuildsTree) createChannelNodes(n *tview.TreeNode, cs []discord.Channel
 }
 
 func (gt *GuildsTree) onSelected(n *tview.TreeNode) {
-	gt.selectedChannel = nil
+	gt.selectedChannelID = 0
 
 	messagesText.reset()
 	messageInput.reset()
@@ -161,25 +161,26 @@ func (gt *GuildsTree) onSelected(n *tview.TreeNode) {
 
 		gt.createChannelNodes(n, cs)
 	case discord.ChannelID:
-		c, err := discordState.Cabinet.Channel(ref)
+
+		ms, err := discordState.Messages(ref, cfg.MessagesLimit)
 		if err != nil {
 			log.Println(err)
 			return
 		}
 
-		gt.selectedChannel = c
-		messagesText.SetTitle(gt.channelToString(*c))
+		for i := len(ms) - 1; i >= 0; i-- {
+			messagesText.createMessage(&ms[i])
+		}
 
-		ms, err := discordState.Messages(ref, cfg.MessagesLimit)
+		c, err := discordState.Cabinet.Channel(ref)
 		if err != nil {
 			log.Println(err)
 			return
 		}
 
-		for i := len(ms) - 1; i >= 0; i-- {
-			messagesText.createMessage(&ms[i])
-		}
+		messagesText.SetTitle(gt.channelToString(*c))
 
+		gt.selectedChannelID = ref
 		app.SetFocus(messageInput)
 	case nil: // Direct messages
 		cs, err := discordState.Cabinet.PrivateChannels()

+ 4 - 4
message_input.go

@@ -63,7 +63,7 @@ func (mi *MessageInput) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
 }
 
 func (mi *MessageInput) sendAction() {
-	if guildsTree.selectedChannel == nil {
+	if !guildsTree.selectedChannelID.IsValid() {
 		return
 	}
 
@@ -74,7 +74,7 @@ func (mi *MessageInput) sendAction() {
 
 	var err error
 	if messagesText.selectedMessage != -1 {
-		ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannel.ID)
+		ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID)
 		if err != nil {
 			log.Println(err)
 			return
@@ -90,9 +90,9 @@ func (mi *MessageInput) sendAction() {
 			data.AllowedMentions.RepliedUser = option.True
 		}
 
-		go discordState.SendMessageComplex(guildsTree.selectedChannel.ID, data)
+		go discordState.SendMessageComplex(guildsTree.selectedChannelID, data)
 	} else {
-		go discordState.SendMessage(guildsTree.selectedChannel.ID, text)
+		go discordState.SendMessage(guildsTree.selectedChannelID, text)
 	}
 
 	if err != nil {

+ 9 - 9
messages_text.go

@@ -134,7 +134,7 @@ func (mt *MessagesText) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
 		mt.showImageAction()
 		return nil
 	case cfg.Keys.Cancel:
-		guildsTree.selectedChannel = nil
+		guildsTree.selectedChannelID = 0
 
 		messagesText.reset()
 		messageInput.reset()
@@ -156,7 +156,7 @@ func (mt *MessagesText) replyAction(mention bool) {
 		title += "Replying to "
 	}
 
-	ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannel.ID)
+	ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID)
 	if err != nil {
 		log.Println(err)
 		return
@@ -169,7 +169,7 @@ func (mt *MessagesText) replyAction(mention bool) {
 }
 
 func (mt *MessagesText) selectPreviousAction() {
-	ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannel.ID)
+	ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID)
 	if err != nil {
 		log.Println(err)
 		return
@@ -189,7 +189,7 @@ func (mt *MessagesText) selectPreviousAction() {
 }
 
 func (mt *MessagesText) selectNextAction() {
-	ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannel.ID)
+	ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID)
 	if err != nil {
 		log.Println(err)
 		return
@@ -209,7 +209,7 @@ func (mt *MessagesText) selectNextAction() {
 }
 
 func (mt *MessagesText) selectFirstAction() {
-	ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannel.ID)
+	ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID)
 	if err != nil {
 		log.Println(err)
 		return
@@ -221,7 +221,7 @@ func (mt *MessagesText) selectFirstAction() {
 }
 
 func (mt *MessagesText) selectLastAction() {
-	ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannel.ID)
+	ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID)
 	if err != nil {
 		log.Println(err)
 		return
@@ -237,7 +237,7 @@ func (mt *MessagesText) selectReplyAction() {
 		return
 	}
 
-	ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannel.ID)
+	ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID)
 	if err != nil {
 		log.Println(err)
 		return
@@ -261,7 +261,7 @@ func (mt *MessagesText) copyContentAction() {
 		return
 	}
 
-	ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannel.ID)
+	ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID)
 	if err != nil {
 		log.Println(err)
 		return
@@ -279,7 +279,7 @@ func (mt *MessagesText) showImageAction() {
 		return
 	}
 
-	ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannel.ID)
+	ms, err := discordState.Cabinet.Messages(guildsTree.selectedChannelID)
 	if err != nil {
 		log.Println(err)
 		return

+ 1 - 1
state.go

@@ -82,7 +82,7 @@ func (s *State) onReady(r *gateway.ReadyEvent) {
 }
 
 func (s *State) onMessageCreate(m *gateway.MessageCreateEvent) {
-	if guildsTree.selectedChannel != nil && guildsTree.selectedChannel.ID == m.ChannelID {
+	if guildsTree.selectedChannelID.IsValid() && guildsTree.selectedChannelID == m.ChannelID {
 		messagesText.createMessage(&m.Message)
 	}
 }