mirror of
https://dev.narayana.im/narayana/telegabber.git
synced 2026-08-05 04:07:07 +00:00
Additional request for loading last messages
This commit is contained in:
parent
6e0da6ba3a
commit
bfb1786a42
1 changed files with 27 additions and 10 deletions
|
|
@ -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,32 +2443,33 @@ 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)
|
||||
|
||||
if !reverse {
|
||||
ReverseMessagesSlice(messages)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue