From ca0e488ea548de1d14dedcd0f1f5b154199ce4f9 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Sat, 10 Feb 2018 19:56:01 -0800 Subject: [PATCH] modules/client/rooms: Reactivate the /messages endpoint (with zero param respect). --- modules/client/rooms.cc | 56 +++++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 21 deletions(-) diff --git a/modules/client/rooms.cc b/modules/client/rooms.cc index 9b14467b6..da36f7ec3 100644 --- a/modules/client/rooms.cc +++ b/modules/client/rooms.cc @@ -34,40 +34,54 @@ get_messages(client &client, const resource::request &request, const m::room::id &room_id) { - const m::vm::query query + const string_view &from { - { "room_id", room_id }, - { "state_key", nullptr }, + request.query.at("from") }; - const size_t count + const string_view &to { - std::min(m::vm::count(query), 128UL) + request.query["to"] }; - if(!count && !exists(room_id)) - throw m::NOT_FOUND - { - "No messages." - }; - - size_t j(0); - std::vector ret(count); - m::vm::for_each(query, [&count, &j, &ret] - (const auto &event) + const char &dir { - if(j < count) - { - if(!defined(json::get<"state_key"_>(event))) - ret[j++] = event; - } + request.query.at("dir").at(0) + }; + + const uint16_t limit + { + request.query["limit"]? lex_cast(request.query.at("limit")) : ushort(10) + }; + + const string_view &filter + { + request.query["filter"] + }; + + const m::room room + { + room_id + }; + + const m::room::messages messages + { + room + }; + + std::vector ret; + ret.reserve(limit); + messages.test([&limit, &ret](const m::event &event) + { + ret.emplace_back(event); + return ret.size() >= limit; }); return resource::response { client, json::members { - { "chunk", json::value { ret.data(), j } } + { "chunk", json::value { ret.data(), ret.size() } } } }; }