Просмотр исходного кода

refactor: append messages by sent order

rigormorrtiss 4 лет назад
Родитель
Сommit
693cbd00e4
1 измененных файлов с 23 добавлено и 27 удалено
  1. 23 27
      discordo.go

+ 23 - 27
discordo.go

@@ -99,32 +99,30 @@ func onMessagesTextViewInputCapture(e *tcell.EventKey) *tcell.EventKey {
 	case e.Key() == tcell.KeyUp || e.Rune() == 'k': // Up
 		ms := selectedChannel.Messages
 		hs := messagesTextView.GetHighlights()
-		// Initially, no message is highlighted/selected; highlight the last
+		// If there are no currently highlighted message, highlight the last
 		// message in the TextView.
 		if len(hs) == 0 {
 			messagesTextView.
-				Highlight(selectedChannel.LastMessageID).
+				Highlight(ms[len(ms)-1].ID).
 				ScrollToHighlight()
 		} else {
-			// Find the index of the highlighted message in the
+			// Find the index of the currently highlighted message in the
 			// *discordgo.Channel.Messages slice.
 			var idx int
 			for i, v := range ms {
 				if hs[0] == v.ID {
 					idx = i
+					break
 				}
 			}
-			// If the length of the *discordgo.Channel.Messages slice is
-			// equal to the index of the message just after highlighted
-			// message in the slice (this is the first-rendered message in
-			// the TextView), do not handle the event.
-			if len(ms) == idx+1 {
+			// If the index of the currently highlighted message is equal to zero
+			// (first message in the TextView), do not handle the event.
+			if idx == 0 {
 				return nil
 			}
-			// Highlight the message just before the currently highlighted
-			// message.
+			// Highlight the message just before the currently highlighted message.
 			messagesTextView.
-				Highlight(ms[idx+1].ID).
+				Highlight(ms[idx-1].ID).
 				ScrollToHighlight()
 		}
 
@@ -132,11 +130,11 @@ func onMessagesTextViewInputCapture(e *tcell.EventKey) *tcell.EventKey {
 	case e.Key() == tcell.KeyDown || e.Rune() == 'j': // Down
 		ms := selectedChannel.Messages
 		hs := messagesTextView.GetHighlights()
-		// Initially, no message is highlighted/selected; highlight the last
+		// If there are no currently highlighted message, highlight the last
 		// message in the TextView.
 		if len(hs) == 0 {
 			messagesTextView.
-				Highlight(ms[0].ID).
+				Highlight(ms[len(ms)-1].ID).
 				ScrollToHighlight()
 		} else {
 			// Find the index of the highlighted message in the
@@ -146,19 +144,19 @@ func onMessagesTextViewInputCapture(e *tcell.EventKey) *tcell.EventKey {
 				if v.Type == discordgo.MessageTypeDefault || v.Type == discordgo.MessageTypeReply {
 					if hs[0] == v.ID {
 						idx = i
+						break
 					}
 				}
 			}
-			// If the index of the highlighted message in the slice is equal
-			// to zero (this is the last-rendered message in the TextView),
-			// do not handle the event.
-			if idx == 0 {
+			// If the index of the currently highlighted message is equal to the
+			// total number of elements in the *discordgo.Channel.Messages
+			// slice, do not handle the event.
+			if idx == len(ms)-1 {
 				return nil
 			}
-			// Highlight the message just after the currently highlighted
-			// message.
+			// Highlight the message just after the currently highlighted message.
 			messagesTextView.
-				Highlight(ms[idx-1].ID).
+				Highlight(ms[idx+1].ID).
 				ScrollToHighlight()
 		}
 
@@ -168,14 +166,14 @@ func onMessagesTextViewInputCapture(e *tcell.EventKey) *tcell.EventKey {
 		// Highlight the last message in the selectedChannel.Messages slice
 		// (the first message rendered in the TextView).
 		messagesTextView.
-			Highlight(ms[len(ms)-1].ID).
+			Highlight(ms[0].ID).
 			ScrollToHighlight()
 	case e.Key() == tcell.KeyEnd || e.Rune() == 'G': // Bottom
 		ms := selectedChannel.Messages
 		// Highlight the first message in the selectedChannel.Messages slice
 		// (the last message rendered in the TextView).
 		messagesTextView.
-			Highlight(ms[0].ID).
+			Highlight(ms[len(ms)-1].ID).
 			ScrollToHighlight()
 	case e.Rune() == 'r': // Reply
 		hs := messagesTextView.GetHighlights()
@@ -295,10 +293,7 @@ func onSessionMessageCreate(_ *discordgo.Session, m *discordgo.MessageCreate) {
 		return
 	}
 
-	selectedChannel.Messages = append(
-		[]*discordgo.Message{m.Message},
-		selectedChannel.Messages...)
-
+	selectedChannel.Messages = append(selectedChannel.Messages, m.Message)
 	util.WriteMessage(
 		messagesTextView,
 		m.Message,
@@ -359,8 +354,9 @@ func onGuildsTreeViewSelected(n *tview.TreeNode) {
 
 func writeMessages(cID string) {
 	msgs, _ := session.ChannelMessages(cID, config.GetMessagesLimit, "", "", "")
-	selectedChannel.Messages = msgs
 	for i := len(msgs) - 1; i >= 0; i-- {
+		selectedChannel.Messages = append(selectedChannel.Messages, msgs[i])
+
 		util.WriteMessage(
 			messagesTextView,
 			msgs[i],