diff --git a/include/ircd/m/append.h b/include/ircd/m/append.h index 51df391eb..891560e5c 100644 --- a/include/ircd/m/append.h +++ b/include/ircd/m/append.h @@ -24,6 +24,6 @@ namespace ircd::m bool query_txnid {true}; }; - void append(json::stack::object &, const event &, const event_append_opts & = {}); - void append(json::stack::array &, const event &, const event_append_opts & = {}); + bool append(json::stack::object &, const event &, const event_append_opts & = {}); + bool append(json::stack::array &, const event &, const event_append_opts & = {}); } diff --git a/ircd/m_event.cc b/ircd/m_event.cc index d683a4764..01c8d3e37 100644 --- a/ircd/m_event.cc +++ b/ircd/m_event.cc @@ -356,10 +356,10 @@ ircd::m::pretty_oneline(std::ostream &s, /////////////////////////////////////////////////////////////////////////////// // -// event/append.h +// m/append.h // -void +bool ircd::m::append(json::stack::array &array, const event &event_, const event_append_opts &opts) @@ -369,10 +369,10 @@ ircd::m::append(json::stack::array &array, array }; - append(object, event_, opts); + return append(object, event_, opts); } -void +bool ircd::m::append(json::stack::object &object, const event &event, const event_append_opts &opts) @@ -415,19 +415,7 @@ ircd::m::append(json::stack::object &object, }; #endif - if(opts.user_id && !visible(event, *opts.user_id)) - { - log::debug - { - log, "Not sending event '%s' because not visible by '%s'", - string_view{event.event_id}, - string_view{*opts.user_id} - }; - - return; - } - - if(!json::get<"state_key"_>(event) && has_event_idx && m::redacted(*opts.event_idx)) + if(has_event_idx && !defined(json::get<"state_key"_>(event)) && m::redacted(*opts.event_idx)) { log::debug { @@ -435,7 +423,7 @@ ircd::m::append(json::stack::object &object, string_view{event.event_id}, }; - return; + return false; } if(!json::get<"state_key"_>(event) && has_user) @@ -451,7 +439,7 @@ ircd::m::append(json::stack::object &object, string_view{*opts.user_id} }; - return; + return false; } } @@ -528,6 +516,8 @@ ircd::m::append(json::stack::object &object, unsigned_, "transaction_id", unquote(content.get("transaction_id")) }; }); + + return true; } /////////////////////////////////////////////////////////////////////////////// diff --git a/modules/client/events.cc b/modules/client/events.cc index 795cb507a..6355eb4c5 100644 --- a/modules/client/events.cc +++ b/modules/client/events.cc @@ -16,7 +16,7 @@ IRCD_MODULE "Client 14.17.1.1 :Room Previews" }; -static void +static bool append_event(json::stack::array &out, const m::event &event, const m::event::idx &event_idx, @@ -336,8 +336,7 @@ get_events_from(client &client, if(!visible(it.event_id(), request.user_id)) continue; - append_event(chunk, *it, it.event_idx(), room_depth, user_room); - ++j; + j += append_event(chunk, *it, it.event_idx(), room_depth, user_room); } if(!j) @@ -352,7 +351,7 @@ get_events_from(client &client, return j; } -void +bool append_event(json::stack::array &out, const m::event &event, const m::event::idx &event_idx, @@ -364,5 +363,5 @@ append_event(json::stack::array &out, opts.room_depth = &room_depth; opts.user_room = &user_room; opts.user_id = &user_room.user.user_id; - m::append(out, event, opts); + return m::append(out, event, opts); } diff --git a/modules/client/rooms/context.cc b/modules/client/rooms/context.cc index 26f55863b..d7421cc15 100644 --- a/modules/client/rooms/context.cc +++ b/modules/client/rooms/context.cc @@ -56,7 +56,7 @@ context_log "matrix.context" }; -static void +static bool _append(json::stack::array &, const m::event &, const m::event::idx &, @@ -193,8 +193,7 @@ get__context(client &client, if(!visible(event, request.user_id)) continue; - _append(array, event, before.event_idx(), user_room, room_depth); - ++counts.before; + counts.before += _append(array, event, before.event_idx(), user_room, room_depth); } if(before && limit > 0) @@ -234,8 +233,7 @@ get__context(client &client, if(!visible(event, request.user_id)) continue; - _append(array, event, after.event_idx(), user_room, room_depth); - ++counts.after; + counts.after += _append(array, event, after.event_idx(), user_room, room_depth); } if(after && limit > 0) @@ -293,8 +291,7 @@ get__context(client &client, if(!visible(event, request.user_id)) return true; - _append(array, event, event_idx, user_room, room_depth, false); - ++counts.state; + counts.state += _append(array, event, event_idx, user_room, room_depth, false); return true; }); } @@ -315,7 +312,7 @@ get__context(client &client, return std::move(response); } -void +bool _append(json::stack::array &chunk, const m::event &event, const m::event::idx &event_idx, @@ -328,5 +325,5 @@ _append(json::stack::array &chunk, opts.user_id = &user_room.user.user_id; opts.user_room = &user_room; opts.room_depth = &room_depth; - m::append(chunk, event, opts); + return m::append(chunk, event, opts); } diff --git a/modules/client/rooms/messages.cc b/modules/client/rooms/messages.cc index 7155ac491..6d364bd16 100644 --- a/modules/client/rooms/messages.cc +++ b/modules/client/rooms/messages.cc @@ -22,7 +22,7 @@ struct pagination_tokens pagination_tokens(const resource::request &); }; -static void +static bool _append(json::stack::array &chunk, const m::event &, const m::event::idx &, @@ -168,8 +168,10 @@ get__messages(client &client, continue; } - _append(chunk, event, it.event_idx(), user_room, room_depth); - ++hit; + if(_append(chunk, event, it.event_idx(), user_room, room_depth)) + ++hit; + else + ++miss; } chunk.~array(); @@ -203,7 +205,7 @@ get__messages(client &client, return {}; } -void +bool _append(json::stack::array &chunk, const m::event &event, const m::event::idx &event_idx, @@ -215,7 +217,7 @@ _append(json::stack::array &chunk, opts.user_id = &user_room.user.user_id; opts.user_room = &user_room; opts.room_depth = &room_depth; - m::append(chunk, event, opts); + return m::append(chunk, event, opts); } // Client-Server 6.3.6 query parameters diff --git a/modules/client/sync/rooms/state.cc b/modules/client/sync/rooms/state.cc index f6a07788b..f948c585f 100644 --- a/modules/client/sync/rooms/state.cc +++ b/modules/client/sync/rooms/state.cc @@ -10,7 +10,7 @@ namespace ircd::m::sync { - static void room_state_append(data &, json::stack::array &, const m::event &, const m::event::idx &); + static bool room_state_append(data &, json::stack::array &, const m::event &, const m::event::idx &); static bool room_state_phased_member_events(data &, json::stack::array &); static bool room_state_phased_events(data &); @@ -253,8 +253,7 @@ ircd::m::sync::room_state_polylog_events(data &data) } const std::lock_guard lock{mutex}; - room_state_append(data, array, event, event_idx); - ret |= true; + ret |= room_state_append(data, array, event, event_idx); } }; @@ -296,10 +295,9 @@ ircd::m::sync::room_state_phased_events(data &data) { [&data, &array, &ret, &mutex](const m::event &event) { - ret |= true; const auto event_idx(m::index(event)); const std::lock_guard lock{mutex}; - room_state_append(data, array, event, event_idx); + ret |= room_state_append(data, array, event, event_idx); } }; @@ -362,7 +360,7 @@ ircd::m::sync::room_state_phased_member_events(data &data, return ret; } -void +bool ircd::m::sync::room_state_append(data &data, json::stack::array &events, const m::event &event, @@ -374,5 +372,5 @@ ircd::m::sync::room_state_append(data &data, opts.user_room = &data.user_room; opts.query_txnid = false; opts.room_depth = &data.room_depth; - m::append(events, event, opts); + return m::append(events, event, opts); } diff --git a/modules/client/sync/rooms/timeline.cc b/modules/client/sync/rooms/timeline.cc index 4c8622ff9..69e8e9369 100644 --- a/modules/client/sync/rooms/timeline.cc +++ b/modules/client/sync/rooms/timeline.cc @@ -16,7 +16,7 @@ IRCD_MODULE namespace ircd::m::sync { - static void _room_timeline_append(data &, json::stack::array &, const m::event::idx &, const m::event &); + static bool _room_timeline_append(data &, json::stack::array &, const m::event::idx &, const m::event &); static event::id::buf _room_timeline_polylog_events(data &, const m::room &, bool &, bool &); static bool room_timeline_polylog(data &); @@ -155,8 +155,7 @@ ircd::m::sync::room_timeline_linear(data &data) *data.out, "events" }; - _room_timeline_append(data, array, data.event_idx, *data.event); - return true; + return _room_timeline_append(data, array, data.event_idx, *data.event); } bool @@ -205,8 +204,7 @@ ircd::m::sync::_room_timeline_linear_command(data &data) data.event, &event }; - _room_timeline_append(data, array, data.event_idx, event); - return true; + return _room_timeline_append(data, array, data.event_idx, event); } bool @@ -295,14 +293,13 @@ ircd::m::sync::_room_timeline_polylog_events(data &data, { const m::event &event(*it); const m::event::idx &event_idx(it.event_idx()); - _room_timeline_append(data, array, event_idx, event); - ret = true; + ret |= _room_timeline_append(data, array, event_idx, event); } return event_id; } -void +bool ircd::m::sync::_room_timeline_append(data &data, json::stack::array &events, const m::event::idx &event_idx, @@ -314,5 +311,5 @@ ircd::m::sync::_room_timeline_append(data &data, opts.user_id = &data.user.user_id; opts.user_room = &data.user_room; opts.room_depth = &data.room_depth; - m::append(events, event, opts); + return m::append(events, event, opts); }