mirror of
https://dev.narayana.im/narayana/telegabber.git
synced 2026-08-05 04:07:07 +00:00
Fix some MAM bugs
This commit is contained in:
parent
075f327275
commit
4fb3886aab
2 changed files with 24 additions and 35 deletions
|
|
@ -2387,11 +2387,11 @@ func (c *Client) GetMessagesBetween(chatID, fromMessageId, lastMessageId int64,
|
||||||
if limit < 0 {
|
if limit < 0 {
|
||||||
reqFromMessageId = lastMessageId
|
reqFromMessageId = lastMessageId
|
||||||
reqOffset = -1
|
reqOffset = -1
|
||||||
reqLimit = limit
|
reqLimit = -limit + 1
|
||||||
} else {
|
} else {
|
||||||
reqFromMessageId = fromMessageId
|
reqFromMessageId = fromMessageId
|
||||||
reqOffset = -limit
|
reqOffset = -limit - 1
|
||||||
reqLimit = limit
|
reqLimit = limit + 1
|
||||||
}
|
}
|
||||||
|
|
||||||
newMessages, err = c.client.GetChatHistory(&client.GetChatHistoryRequest{
|
newMessages, err = c.client.GetChatHistory(&client.GetChatHistoryRequest{
|
||||||
|
|
@ -2408,7 +2408,7 @@ func (c *Client) GetMessagesBetween(chatID, fromMessageId, lastMessageId int64,
|
||||||
fromPos := -1
|
fromPos := -1
|
||||||
for i, message := range newMessages.Messages {
|
for i, message := range newMessages.Messages {
|
||||||
if message.Id == fromMessageId {
|
if message.Id == fromMessageId {
|
||||||
fromPos = i
|
fromPos = i+1
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2420,6 +2420,9 @@ func (c *Client) GetMessagesBetween(chatID, fromMessageId, lastMessageId int64,
|
||||||
complete = true
|
complete = true
|
||||||
} else {
|
} else {
|
||||||
for _, message := range newMessages.Messages {
|
for _, message := range newMessages.Messages {
|
||||||
|
if message.Id == fromMessageId {
|
||||||
|
continue
|
||||||
|
}
|
||||||
if lastMessageId != 0 {
|
if lastMessageId != 0 {
|
||||||
if message.Id > lastMessageId {
|
if message.Id > lastMessageId {
|
||||||
break
|
break
|
||||||
|
|
|
||||||
|
|
@ -2368,6 +2368,15 @@ func handleSetQueryMAM2(s xmpp.Sender, iq *stanza.IQ, query *extensions.MAM2Quer
|
||||||
iqAnswerSetError(answer, 404)
|
iqAnswerSetError(answer, 404)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
overallyLastMessage, overallyLastMessageErr := session.GetPreviousMessage(toID, beforeId)
|
||||||
|
if overallyLastMessageErr == nil && overallyLastMessage != nil {
|
||||||
|
overallyLastMessageId = overallyLastMessage.Id
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
newestMessage, newestMessageErr := session.GetPreviousMessage(toID, 0)
|
||||||
|
if newestMessageErr == nil && newestMessage != nil {
|
||||||
|
overallyLastMessageId = newestMessage.Id
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if rsmAfter != 0 {
|
if rsmAfter != 0 {
|
||||||
|
|
@ -2392,14 +2401,13 @@ func handleSetQueryMAM2(s xmpp.Sender, iq *stanza.IQ, query *extensions.MAM2Quer
|
||||||
}
|
}
|
||||||
if rsmBefore < beforeId {
|
if rsmBefore < beforeId {
|
||||||
canBeComplete = false
|
canBeComplete = false
|
||||||
overallyLastMessageId = beforeId
|
|
||||||
}
|
}
|
||||||
beforeId = rsmBefore
|
beforeId = rsmBefore
|
||||||
}
|
}
|
||||||
|
|
||||||
var lastMessageId int64
|
var lastMessageId int64
|
||||||
// should be fine even with afterId=0 as it would mean the last as needed
|
// should be fine even with beforeId=0 as it would mean the last as needed
|
||||||
lastMessage, lastMessageErr := session.GetPreviousMessage(toID, afterId)
|
lastMessage, lastMessageErr := session.GetPreviousMessage(toID, beforeId)
|
||||||
if lastMessageErr == nil && lastMessage != nil {
|
if lastMessageErr == nil && lastMessage != nil {
|
||||||
lastMessageId = lastMessage.Id
|
lastMessageId = lastMessage.Id
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -2411,16 +2419,6 @@ func handleSetQueryMAM2(s xmpp.Sender, iq *stanza.IQ, query *extensions.MAM2Quer
|
||||||
messages, newComplete, err = session.GetMessagesBetween(toID, afterId, lastMessageId, rsmLimit)
|
messages, newComplete, err = session.GetMessagesBetween(toID, afterId, lastMessageId, rsmLimit)
|
||||||
if canBeComplete {
|
if canBeComplete {
|
||||||
complete = newComplete
|
complete = newComplete
|
||||||
if !complete {
|
|
||||||
if lastMessageId != 0 {
|
|
||||||
overallyLastMessageId = lastMessageId
|
|
||||||
} else {
|
|
||||||
newestMessage, newestMessageErr := session.GetPreviousMessage(toID, 0)
|
|
||||||
if newestMessageErr == nil && newestMessage != nil {
|
|
||||||
overallyLastMessageId = newestMessage.Id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else { // time limit or no limits at all
|
} else { // time limit or no limits at all
|
||||||
|
|
@ -2447,9 +2445,15 @@ func handleSetQueryMAM2(s xmpp.Sender, iq *stanza.IQ, query *extensions.MAM2Quer
|
||||||
endMsg, endMsgErr := session.FindMessageByTime(toID, endTime)
|
endMsg, endMsgErr := session.FindMessageByTime(toID, endTime)
|
||||||
if endMsgErr == nil && endMsg != nil {
|
if endMsgErr == nil && endMsg != nil {
|
||||||
lastMessageId = endMsg.Id
|
lastMessageId = endMsg.Id
|
||||||
|
overallyLastMessageId = lastMessageId
|
||||||
} else {
|
} else {
|
||||||
beyond = true
|
beyond = true
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
newestMessage, newestMessageErr := session.GetPreviousMessage(toID, 0)
|
||||||
|
if newestMessageErr == nil && newestMessage != nil {
|
||||||
|
overallyLastMessageId = newestMessage.Id
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if rsmAfter != 0 {
|
if rsmAfter != 0 {
|
||||||
|
|
@ -2486,14 +2490,6 @@ func handleSetQueryMAM2(s xmpp.Sender, iq *stanza.IQ, query *extensions.MAM2Quer
|
||||||
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
|
||||||
if lastMessageId != 0 {
|
|
||||||
overallyLastMessageId = lastMessageId
|
|
||||||
} else {
|
|
||||||
newestMessage, newestMessageErr := session.GetPreviousMessage(toID, 0)
|
|
||||||
if newestMessageErr == nil && newestMessage != nil {
|
|
||||||
overallyLastMessageId = newestMessage.Id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
lastMessageId = newLastMessage.Id
|
lastMessageId = newLastMessage.Id
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -2511,16 +2507,6 @@ func handleSetQueryMAM2(s xmpp.Sender, iq *stanza.IQ, query *extensions.MAM2Quer
|
||||||
messages, newComplete, err = session.GetMessagesBetween(toID, fromMessageId, lastMessageId, rsmLimit)
|
messages, newComplete, err = session.GetMessagesBetween(toID, fromMessageId, lastMessageId, rsmLimit)
|
||||||
if canBeComplete {
|
if canBeComplete {
|
||||||
complete = newComplete
|
complete = newComplete
|
||||||
if !complete {
|
|
||||||
if lastMessageId != 0 {
|
|
||||||
overallyLastMessageId = lastMessageId
|
|
||||||
} else {
|
|
||||||
newestMessage, newestMessageErr := session.GetPreviousMessage(toID, 0)
|
|
||||||
if newestMessageErr == nil && newestMessage != nil {
|
|
||||||
overallyLastMessageId = newestMessage.Id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue