mirror of
https://dev.narayana.im/narayana/telegabber.git
synced 2026-08-05 04:07:07 +00:00
Fix complete flag logic: it marks if RSM/result covers full range, not if the output range touches the end
This commit is contained in:
parent
6ceb4efe32
commit
15f62b619d
2 changed files with 34 additions and 2 deletions
|
|
@ -2399,6 +2399,7 @@ func (c *Client) GetMessagesBetween(chatID, fromMessageId, lastMessageId int64,
|
||||||
|
|
||||||
var newMessages *client.Messages
|
var newMessages *client.Messages
|
||||||
if limit == 0 {
|
if limit == 0 {
|
||||||
|
complete = true
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2471,14 +2472,40 @@ func (c *Client) GetMessagesBetween(chatID, fromMessageId, lastMessageId int64,
|
||||||
} else {
|
} else {
|
||||||
messages = fetchedMessages
|
messages = fetchedMessages
|
||||||
}
|
}
|
||||||
|
if complete && len(messages) > 0 {
|
||||||
|
firstMessage := messages[len(messages)-1]
|
||||||
|
if fromMessageId > 1 {
|
||||||
|
if firstMessage.Id > fromMessageId {
|
||||||
|
complete = false
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// try to fetch one more message to check if there are any other before
|
||||||
|
previousMessage, previousMessageErr := c.GetPreviousMessage(chatID, firstMessage.Id)
|
||||||
|
if previousMessageErr == nil && previousMessage != nil {
|
||||||
|
complete = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
complete = true
|
|
||||||
for _, message := range fetchedMessages {
|
for _, message := range fetchedMessages {
|
||||||
if message.Id <= fromMessageId {
|
if message.Id <= fromMessageId {
|
||||||
|
complete = true
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
messages = append(messages, message)
|
messages = append(messages, message)
|
||||||
}
|
}
|
||||||
|
if len(messages) > 0 {
|
||||||
|
firstMessage := messages[len(messages)-1]
|
||||||
|
// try to fetch one more message to check if there are any other before
|
||||||
|
previousMessage, previousMessageErr := c.GetPreviousMessage(chatID, firstMessage.Id)
|
||||||
|
if previousMessageErr == nil && previousMessage != nil {
|
||||||
|
if previousMessage.Id == fromMessageId {
|
||||||
|
complete = true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
complete = true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !reverse {
|
if !reverse {
|
||||||
|
|
|
||||||
|
|
@ -2372,6 +2372,7 @@ func handleSetQueryMAM(s xmpp.Sender, iq *stanza.IQ, query extensions.MAMQuery)
|
||||||
var beyond, complete bool
|
var beyond, complete bool
|
||||||
canBeComplete := true
|
canBeComplete := true
|
||||||
fromStart := !rsmLastPage
|
fromStart := !rsmLastPage
|
||||||
|
toEnd := rsmLastPage
|
||||||
var overallyFirstMessageId, overallyLastMessageId int64
|
var overallyFirstMessageId, overallyLastMessageId int64
|
||||||
|
|
||||||
reverse := query.GetFlipPage() != nil
|
reverse := query.GetFlipPage() != nil
|
||||||
|
|
@ -2453,6 +2454,7 @@ func handleSetQueryMAM(s xmpp.Sender, iq *stanza.IQ, query extensions.MAMQuery)
|
||||||
}
|
}
|
||||||
if rsmAfter != afterId {
|
if rsmAfter != afterId {
|
||||||
fromStart = false
|
fromStart = false
|
||||||
|
canBeComplete = false
|
||||||
overallyFirstMessage, overallyFirstMessageErr := session.GetNextMessage(toID, afterId)
|
overallyFirstMessage, overallyFirstMessageErr := session.GetNextMessage(toID, afterId)
|
||||||
if overallyFirstMessageErr == nil && overallyFirstMessage != nil {
|
if overallyFirstMessageErr == nil && overallyFirstMessage != nil {
|
||||||
overallyFirstMessageId = overallyFirstMessage.Id
|
overallyFirstMessageId = overallyFirstMessage.Id
|
||||||
|
|
@ -2468,6 +2470,7 @@ func handleSetQueryMAM(s xmpp.Sender, iq *stanza.IQ, query extensions.MAMQuery)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if rsmBefore < beforeId {
|
if rsmBefore < beforeId {
|
||||||
|
toEnd = false
|
||||||
canBeComplete = false
|
canBeComplete = false
|
||||||
}
|
}
|
||||||
beforeId = rsmBefore
|
beforeId = rsmBefore
|
||||||
|
|
@ -2537,6 +2540,7 @@ func handleSetQueryMAM(s xmpp.Sender, iq *stanza.IQ, query extensions.MAMQuery)
|
||||||
|
|
||||||
if rsmAfterMessage.Id > fromMessageId && int64(rsmAfterMessage.Date) >= startTime.Unix() {
|
if rsmAfterMessage.Id > fromMessageId && int64(rsmAfterMessage.Date) >= startTime.Unix() {
|
||||||
fromStart = false
|
fromStart = false
|
||||||
|
canBeComplete = false
|
||||||
overallyFirstMessage, overallyFirstMessageErr := session.GetNextMessage(toID, fromMessageId)
|
overallyFirstMessage, overallyFirstMessageErr := session.GetNextMessage(toID, fromMessageId)
|
||||||
if overallyFirstMessageErr == nil && overallyFirstMessage != nil {
|
if overallyFirstMessageErr == nil && overallyFirstMessage != nil {
|
||||||
overallyFirstMessageId = overallyFirstMessage.Id
|
overallyFirstMessageId = overallyFirstMessage.Id
|
||||||
|
|
@ -2564,6 +2568,7 @@ func handleSetQueryMAM(s xmpp.Sender, iq *stanza.IQ, query extensions.MAMQuery)
|
||||||
if newLastMessageErr == nil && newLastMessage != nil {
|
if newLastMessageErr == nil && newLastMessage != nil {
|
||||||
if lastMessageId == 0 || lastMessageId != newLastMessage.Id {
|
if lastMessageId == 0 || lastMessageId != newLastMessage.Id {
|
||||||
canBeComplete = false
|
canBeComplete = false
|
||||||
|
toEnd = false
|
||||||
lastMessageId = newLastMessage.Id
|
lastMessageId = newLastMessage.Id
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -2637,7 +2642,7 @@ func handleSetQueryMAM(s xmpp.Sender, iq *stanza.IQ, query extensions.MAMQuery)
|
||||||
overallyFirstMessageId = firstMsgId
|
overallyFirstMessageId = firstMsgId
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if complete {
|
if toEnd {
|
||||||
if reverse {
|
if reverse {
|
||||||
overallyLastMessageId = firstMsgId
|
overallyLastMessageId = firstMsgId
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue