refactor: append messages by sent order
This commit is contained in:
parent
4ecd386b61
commit
693cbd00e4
1 changed files with 23 additions and 27 deletions
50
discordo.go
50
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],
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue