diff options
author | louiz’ <louiz@louiz.org> | 2018-04-29 22:18:26 +0200 |
---|---|---|
committer | louiz’ <louiz@louiz.org> | 2018-04-29 22:18:26 +0200 |
commit | b0168fd45b3683c2d6f61ccae67dcd5b918a363d (patch) | |
tree | 6b3e035f6edfef0b9a8aac1813259b9c95ebcf35 /src/xmpp | |
parent | 0887be6eef24929fd594239e9569fc5cee54aba0 (diff) | |
download | biboumi-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.cpp | 22 |
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()) |