Additional request for loading last messages

This commit is contained in:
Bohdan Horbeshko 2025-08-26 13:10:20 -04:00
parent 6e0da6ba3a
commit bfb1786a42

View file

@ -2412,12 +2412,28 @@ func (c *Client) GetMessagesBetween(chatID, fromMessageId, lastMessageId int64,
Limit: reqLimit, Limit: reqLimit,
}) })
if err == nil { if err == nil {
log.Debugf("pre-fetched %v messages, cutting", len(newMessages.Messages)) fetchedMessages := newMessages.Messages
log.Debugf("pre-fetched %v messages, cutting", len(fetchedMessages))
// it's not quite good to yield just one last message with the complete flag,
// as clients won't fetch more, give it one more chance
if limit < -1 && len(fetchedMessages) == 1 {
additionalMessages, err := c.client.GetChatHistory(&client.GetChatHistoryRequest{
ChatId: chatID,
FromMessageId: fetchedMessages[0].Id,
Limit: reqLimit-1,
})
if err == nil {
log.Debugf("fetched %v more messages", len(additionalMessages.Messages))
fetchedMessages = append(fetchedMessages, additionalMessages.Messages...)
}
}
if limit > 0 { if limit > 0 {
complete = true complete = true
fromPos := -1 fromPos := -1
if lastMessageId != 0 { if lastMessageId != 0 {
for i, message := range newMessages.Messages { for i, message := range fetchedMessages {
if message.Id < lastMessageId { if message.Id < lastMessageId {
complete = false complete = false
break break
@ -2427,32 +2443,33 @@ func (c *Client) GetMessagesBetween(chatID, fromMessageId, lastMessageId int64,
} }
} }
} else { } else {
if len(newMessages.Messages) > 0 { if len(fetchedMessages) > 0 {
lastMsg, lastMsgErr := c.GetPreviousMessage(chatID, 0) lastMsg, lastMsgErr := c.GetPreviousMessage(chatID, 0)
if lastMsgErr == nil && lastMsg != nil { if lastMsgErr == nil && lastMsg != nil {
if lastMsg.Id != newMessages.Messages[0].Id { if lastMsg.Id != fetchedMessages[0].Id {
complete = false complete = false
} }
} }
} }
} }
if fromPos > -1 { if fromPos > -1 {
messages = newMessages.Messages[fromPos:] messages = fetchedMessages[fromPos:]
} else { } else {
messages = newMessages.Messages messages = fetchedMessages
} }
} else { } else {
complete = true complete = true
for _, message := range newMessages.Messages { for _, message := range fetchedMessages {
if message.Id <= fromMessageId { if message.Id <= fromMessageId {
break break
} }
messages = append(messages, message) messages = append(messages, message)
} }
} }
}
if !reverse { if !reverse {
ReverseMessagesSlice(messages) ReverseMessagesSlice(messages)
}
} }
return return
} }