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,
|
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,33 +2443,34 @@ 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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue