|
@@ -82,10 +82,8 @@ func (ml *messagesList) setTitle(channel discord.Channel) {
|
|
|
ml.SetTitle(title)
|
|
ml.SetTitle(title)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func (ml *messagesList) drawMessages(messages []discord.Message) {
|
|
|
|
|
- ml.messages = slices.Grow(ml.messages[:0], len(messages))
|
|
|
|
|
- ml.messages = ml.messages[:len(messages)]
|
|
|
|
|
- copy(ml.messages, messages)
|
|
|
|
|
|
|
+func (ml *messagesList) setMessages(messages []discord.Message) {
|
|
|
|
|
+ ml.messages = slices.Clone(messages)
|
|
|
slices.Reverse(ml.messages)
|
|
slices.Reverse(ml.messages)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -355,6 +353,33 @@ func (ml *messagesList) _select(name string) {
|
|
|
cursor = len(messages) - 1
|
|
cursor = len(messages) - 1
|
|
|
case cursor > 0:
|
|
case cursor > 0:
|
|
|
cursor--
|
|
cursor--
|
|
|
|
|
+ case cursor == 0:
|
|
|
|
|
+ selectedChannel := ml.chatView.SelectedChannel()
|
|
|
|
|
+ if selectedChannel == nil {
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ channelID := selectedChannel.ID
|
|
|
|
|
+ before := ml.messages[0].ID
|
|
|
|
|
+ limit := uint(ml.cfg.MessagesLimit)
|
|
|
|
|
+ messages, err := ml.chatView.state.MessagesBefore(channelID, before, limit)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ slog.Error("failed to fetch older messages", "err", err)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ if len(messages) == 0 {
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if guildID := selectedChannel.GuildID; guildID.IsValid() {
|
|
|
|
|
+ ml.requestGuildMembers(guildID, messages)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ older := slices.Clone(messages)
|
|
|
|
|
+ slices.Reverse(older)
|
|
|
|
|
+
|
|
|
|
|
+ ml.messages = slices.Concat(older, ml.messages)
|
|
|
|
|
+ cursor = len(messages) - 1
|
|
|
}
|
|
}
|
|
|
case ml.cfg.Keys.MessagesList.SelectNext:
|
|
case ml.cfg.Keys.MessagesList.SelectNext:
|
|
|
switch {
|
|
switch {
|
|
@@ -379,8 +404,6 @@ func (ml *messagesList) _select(name string) {
|
|
|
if refIdx != -1 {
|
|
if refIdx != -1 {
|
|
|
cursor = refIdx
|
|
cursor = refIdx
|
|
|
}
|
|
}
|
|
|
- } else {
|
|
|
|
|
- return
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|