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

perf(cmd): only request guild members on initial channel load

ayn2op 9 месяцев назад
Родитель
Сommit
a8e7dbd524
3 измененных файлов с 20 добавлено и 20 удалено
  1. 11 1
      cmd/guilds_tree.go
  2. 2 18
      cmd/messages_list.go
  3. 7 1
      cmd/state.go

+ 11 - 1
cmd/guilds_tree.go

@@ -216,8 +216,18 @@ func (gt *guildsTree) onSelected(node *tview.TreeNode) {
 
 		go discordState.ReadState.MarkRead(channel.ID, channel.LastMessageID)
 
+		messages, err := discordState.Messages(channel.ID, uint(gt.cfg.MessagesLimit))
+		if err != nil {
+			slog.Error("failed to get messages", "err", err, "channel_id", channel.ID, "limit", gt.cfg.MessagesLimit)
+			return
+		}
+
+		if guildID := channel.GuildID; guildID.IsValid() {
+			app.messagesList.requestGuildMembers(guildID, messages)
+		}
+
 		app.messagesList.reset()
-		app.messagesList.drawMsgs(channel.ID)
+		app.messagesList.drawMsgs(messages)
 		app.messagesList.
 			ScrollToEnd().
 			SetTitle(gt.channelToString(*channel))

+ 2 - 18
cmd/messages_list.go

@@ -62,24 +62,8 @@ func newMessagesList(cfg *config.Config) *messagesList {
 	return ml
 }
 
-func (ml *messagesList) drawMsgs(cID discord.ChannelID) {
-	msgs, err := discordState.Messages(cID, uint(ml.cfg.MessagesLimit))
-	if err != nil {
-		slog.Error("failed to get messages", "err", err, "channel_id", cID)
-		return
-	}
-
-	channel, err := discordState.Cabinet.Channel(cID)
-	if err != nil {
-		slog.Error("failed to get channel from state", "channel_id", cID, "err", err)
-		return
-	}
-
-	if guildID := channel.GuildID; guildID.IsValid() {
-		ml.requestGuildMembers(guildID, msgs)
-	}
-
-	for _, m := range slices.Backward(msgs) {
+func (ml *messagesList) drawMsgs(messages []discord.Message) {
+	for _, m := range slices.Backward(messages) {
 		ml.createMsg(m)
 	}
 }

+ 7 - 1
cmd/state.go

@@ -178,8 +178,14 @@ func onMessageUpdate(message *gateway.MessageUpdateEvent) {
 
 func onMessageDelete(message *gateway.MessageDeleteEvent) {
 	if app.guildsTree.selectedChannelID == message.ChannelID {
+		messages, err := discordState.Cabinet.Messages(message.ChannelID)
+		if err != nil {
+			slog.Error("failed to get messages from state", "err", err, "channel_id", message.ChannelID)
+			return
+		}
+
 		app.messagesList.reset()
-		app.messagesList.drawMsgs(message.ChannelID)
+		app.messagesList.drawMsgs(messages)
 		app.Draw()
 	}
 }