Parcourir la source

Store selected message index (+1) instead of *discordgo.Message struct (#71)

* Store selected message index (+1) instead of *discordgo.Message struct

* Fix typo; Repling -> Replying
ayntgl il y a 4 ans
Parent
commit
2400226ee1
3 fichiers modifiés avec 27 ajouts et 47 suppressions
  1. 1 1
      discord.go
  2. 26 36
      ui.go
  3. 0 10
      util.go

+ 1 - 1
discord.go

@@ -15,7 +15,7 @@ import (
 var (
 	session         *discordgo.Session
 	selectedChannel *discordgo.Channel
-	selectedMessage *discordgo.Message
+	selectedMessage int
 )
 var (
 	boldRegex          = regexp.MustCompile(`(?m)\*\*(.*?)\*\*`)

+ 26 - 36
ui.go

@@ -54,7 +54,7 @@ func newChannelsTree() *tview.TreeView {
 
 func onChannelsTreeSelected(n *tview.TreeNode) {
 	selectedChannel = nil
-	selectedMessage = nil
+	selectedMessage = 0
 	messagesView.
 		Clear().
 		SetTitle("")
@@ -232,19 +232,19 @@ func onMessagesViewInputCapture(e *tcell.EventKey) *tcell.EventKey {
 			return nil
 		}
 
-		hs := messagesView.GetHighlights()
-		if len(hs) == 0 {
+		if len(messagesView.GetHighlights()) == 0 {
+			selectedMessage = len(ms)
 			messagesView.
-				Highlight(ms[len(ms)-1].ID).
+				Highlight(ms[selectedMessage-1].ID).
 				ScrollToHighlight()
 		} else {
-			idx, _ := findByMessageID(ms, hs[0])
-			if idx == -1 || idx == 0 {
-				return nil
+			selectedMessage--
+			if selectedMessage < 0 {
+				selectedMessage = 1
 			}
 
 			messagesView.
-				Highlight(ms[idx-1].ID).
+				Highlight(ms[selectedMessage-1].ID).
 				ScrollToHighlight()
 		}
 
@@ -255,19 +255,19 @@ func onMessagesViewInputCapture(e *tcell.EventKey) *tcell.EventKey {
 			return nil
 		}
 
-		hs := messagesView.GetHighlights()
-		if len(hs) == 0 {
+		if len(messagesView.GetHighlights()) == 0 {
+			selectedMessage = len(ms)
 			messagesView.
-				Highlight(ms[len(ms)-1].ID).
+				Highlight(ms[selectedMessage-1].ID).
 				ScrollToHighlight()
 		} else {
-			idx, _ := findByMessageID(ms, hs[0])
-			if idx == -1 || idx == len(ms)-1 {
-				return nil
+			selectedMessage++
+			if selectedMessage > len(ms) {
+				selectedMessage = len(ms)
 			}
 
 			messagesView.
-				Highlight(ms[idx+1].ID).
+				Highlight(ms[selectedMessage-1].ID).
 				ScrollToHighlight()
 		}
 
@@ -278,8 +278,9 @@ func onMessagesViewInputCapture(e *tcell.EventKey) *tcell.EventKey {
 			return nil
 		}
 
+		selectedMessage = 1
 		messagesView.
-			Highlight(ms[0].ID).
+			Highlight(ms[selectedMessage-1].ID).
 			ScrollToHighlight()
 	case conf.Keybindings.MessagesView.SelectLast:
 		ms := selectedChannel.Messages
@@ -287,8 +288,9 @@ func onMessagesViewInputCapture(e *tcell.EventKey) *tcell.EventKey {
 			return nil
 		}
 
+		selectedMessage = len(ms)
 		messagesView.
-			Highlight(ms[len(ms)-1].ID).
+			Highlight(ms[selectedMessage-1].ID).
 			ScrollToHighlight()
 	case conf.Keybindings.MessagesView.Reply:
 		ms := selectedChannel.Messages
@@ -296,14 +298,8 @@ func onMessagesViewInputCapture(e *tcell.EventKey) *tcell.EventKey {
 			return nil
 		}
 
-		hs := messagesView.GetHighlights()
-		if len(hs) == 0 {
-			return nil
-		}
-
-		_, selectedMessage = findByMessageID(ms, hs[0])
 		messageInputField.SetTitle(
-			"Replying to " + selectedMessage.Author.Username,
+			"Replying to " + ms[selectedMessage-1].Author.Username,
 		)
 		app.SetFocus(messageInputField)
 	case conf.Keybindings.MessagesView.ReplyMention:
@@ -312,13 +308,7 @@ func onMessagesViewInputCapture(e *tcell.EventKey) *tcell.EventKey {
 			return nil
 		}
 
-		hs := messagesView.GetHighlights()
-		if len(hs) == 0 {
-			return nil
-		}
-
-		_, selectedMessage = findByMessageID(ms, hs[0])
-		messageInputField.SetTitle("[@] Repling to " + selectedMessage.Author.Username)
+		messageInputField.SetTitle("[@] Replying to " + ms[selectedMessage-1].Author.Username)
 		app.SetFocus(messageInputField)
 	}
 
@@ -356,10 +346,11 @@ func onMessageInputFieldInputCapture(e *tcell.EventKey) *tcell.EventKey {
 			return nil
 		}
 
-		if selectedMessage != nil {
+		if selectedMessage != 0 {
+			m := selectedChannel.Messages[selectedMessage-1]
 			d := &discordgo.MessageSend{
 				Content:         t,
-				Reference:       selectedMessage.Reference(),
+				Reference:       m.Reference(),
 				AllowedMentions: &discordgo.MessageAllowedMentions{RepliedUser: false},
 			}
 			if strings.HasPrefix(messageInputField.GetTitle(), "[@]") {
@@ -368,9 +359,8 @@ func onMessageInputFieldInputCapture(e *tcell.EventKey) *tcell.EventKey {
 				d.AllowedMentions.RepliedUser = false
 			}
 
-			go session.ChannelMessageSendComplex(selectedMessage.ChannelID, d)
+			go session.ChannelMessageSendComplex(m.ChannelID, d)
 			messageInputField.SetTitle("")
-			selectedMessage = nil
 		} else {
 			go session.ChannelMessageSend(selectedChannel.ID, t)
 		}
@@ -382,7 +372,7 @@ func onMessageInputFieldInputCapture(e *tcell.EventKey) *tcell.EventKey {
 		messageInputField.SetText(text)
 	case tcell.KeyEscape:
 		messageInputField.SetTitle("")
-		selectedMessage = nil
+		selectedMessage = 0
 	}
 
 	return e

+ 0 - 10
util.go

@@ -24,13 +24,3 @@ func generateChannelRepr(c *discordgo.Channel) string {
 
 	return repr
 }
-
-func findByMessageID(ms []*discordgo.Message, mID string) (int, *discordgo.Message) {
-	for i, m := range ms {
-		if mID == m.ID {
-			return i, m
-		}
-	}
-
-	return -1, nil
-}