From 0f10dbff8c7637652e440a0df94ff004ebdb78b1 Mon Sep 17 00:00:00 2001 From: Bohdan Horbeshko Date: Mon, 25 Aug 2025 09:27:31 -0400 Subject: [PATCH] Take flip-page into account when calculating MAM RSM count/index --- xmpp/handlers.go | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/xmpp/handlers.go b/xmpp/handlers.go index 90aa9d6..a6560e3 100644 --- a/xmpp/handlers.go +++ b/xmpp/handlers.go @@ -2549,11 +2549,21 @@ func handleSetQueryMAM2(s xmpp.Sender, iq *stanza.IQ, query *extensions.MAM2Quer log.Debugf("MAM: beyond") } else { if len(messages) > 0 { + firstMsgId := messages[0].Id + lastMsgId := messages[len(messages)-1].Id if fromStart { - overallyFirstMessageId = messages[0].Id + if reverse { + overallyFirstMessageId = lastMsgId + } else { + overallyFirstMessageId = firstMsgId + } } if complete { - overallyLastMessageId = messages[len(messages)-1].Id + if reverse { + overallyLastMessageId = firstMsgId + } else { + overallyLastMessageId = lastMsgId + } } } @@ -2581,17 +2591,22 @@ func handleSetQueryMAM2(s xmpp.Sender, iq *stanza.IQ, query *extensions.MAM2Quer } if len(messages) > 0 { + firstMsgId := messages[0].Id + lastMsgId := messages[len(messages)-1].Id + if reverse { + firstMsgId, lastMsgId = lastMsgId, firstMsgId + } rs.First = &stanza.First{ - Content: strconv.FormatInt(messages[0].Id, 10), + Content: strconv.FormatInt(firstMsgId, 10), } if firstMsgPositionCount != 0 { - rsmFirstMsgPosition, rsmFirstMsgPositionErr := session.GetChatMessagePosition(toID, messages[0].Id) + rsmFirstMsgPosition, rsmFirstMsgPositionErr := session.GetChatMessagePosition(toID, firstMsgId) if rsmFirstMsgPositionErr == nil && rsmFirstMsgPosition != nil { index := int(firstMsgPositionCount - rsmFirstMsgPosition.Count) rs.First.Index = &index } } - last := strconv.FormatInt(messages[len(messages)-1].Id, 10) + last := strconv.FormatInt(lastMsgId, 10) rs.Last = &last } }