summaryrefslogtreecommitdiff
path: root/src/xmpp
diff options
context:
space:
mode:
authorlouiz’ <louiz@louiz.org>2018-04-29 22:18:26 +0200
committerlouiz’ <louiz@louiz.org>2018-04-29 22:18:26 +0200
commitb0168fd45b3683c2d6f61ccae67dcd5b918a363d (patch)
tree6b3e035f6edfef0b9a8aac1813259b9c95ebcf35 /src/xmpp
parent0887be6eef24929fd594239e9569fc5cee54aba0 (diff)
downloadbiboumi-b0168fd45b3683c2d6f61ccae67dcd5b918a363d.tar.gz
biboumi-b0168fd45b3683c2d6f61ccae67dcd5b918a363d.tar.bz2
biboumi-b0168fd45b3683c2d6f61ccae67dcd5b918a363d.tar.xz
biboumi-b0168fd45b3683c2d6f61ccae67dcd5b918a363d.zip
mam: Send “fin complete” only when appropriate
Also simplify how we did the whole “limit + 1” And fix one bad interpretation of the XEP for the case where the query has no after or before restriction. fix #3349
Diffstat (limited to 'src/xmpp')
-rw-r--r--src/xmpp/biboumi_component.cpp22
1 files changed, 9 insertions, 13 deletions
diff --git a/src/xmpp/biboumi_component.cpp b/src/xmpp/biboumi_component.cpp
index 6dc5fc5..dbaf8a4 100644
--- a/src/xmpp/biboumi_component.cpp
+++ b/src/xmpp/biboumi_component.cpp
@@ -743,19 +743,15 @@ bool BiboumiComponent::handle_mam_request(const Stanza& stanza)
}
// Do not send more than 100 messages, even if the client asked for more,
// or if it didn’t specify any limit.
- // 101 is just a trick to know if there are more available messages.
- // If our query returns 101 message, we know it’s incomplete, but we
- // still send only 100
- if ((limit == -1 && start.empty() && end.empty())
- || limit > 100)
- limit = 101;
- auto lines = Database::get_muc_logs(from.bare(), iid.get_local(), iid.get_server(), limit, start, end, reference_record_id, paging_order);
- bool complete = true;
- if (lines.size() > 100)
- {
- complete = false;
- lines.erase(lines.begin(), std::prev(lines.end(), 100));
- }
+ if (limit < 0 || limit > 100)
+ limit = 100;
+ auto result = Database::get_muc_logs(from.bare(), iid.get_local(), iid.get_server(),
+ limit,
+ start, end,
+ reference_record_id, paging_order);
+ bool complete = std::get<bool>(result);
+ auto& lines = std::get<1>(result);
+
for (const Database::MucLogLine& line: lines)
{
if (!line.col<Database::Nick>().empty())