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,
})
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 {
complete = true
fromPos := -1
if lastMessageId != 0 {
for i, message := range newMessages.Messages {
for i, message := range fetchedMessages {
if message.Id < lastMessageId {
complete = false
break
@ -2427,33 +2443,34 @@ func (c *Client) GetMessagesBetween(chatID, fromMessageId, lastMessageId int64,
}
}
} else {
if len(newMessages.Messages) > 0 {
if len(fetchedMessages) > 0 {
lastMsg, lastMsgErr := c.GetPreviousMessage(chatID, 0)
if lastMsgErr == nil && lastMsg != nil {
if lastMsg.Id != newMessages.Messages[0].Id {
if lastMsg.Id != fetchedMessages[0].Id {
complete = false
}
}
}
}
if fromPos > -1 {
messages = newMessages.Messages[fromPos:]
messages = fetchedMessages[fromPos:]
} else {
messages = newMessages.Messages
messages = fetchedMessages
}
} else {
complete = true
for _, message := range newMessages.Messages {
for _, message := range fetchedMessages {
if message.Id <= fromMessageId {
break
}
messages = append(messages, message)
}
}
}
if !reverse {
ReverseMessagesSlice(messages)
}
}
return
}