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 } }