diff --git a/modules/client/sync/rooms/state.cc b/modules/client/sync/rooms/state.cc index 2bfcc5e71..75b761698 100644 --- a/modules/client/sync/rooms/state.cc +++ b/modules/client/sync/rooms/state.cc @@ -11,14 +11,19 @@ namespace ircd::m::sync { static bool room_state_polylog_events(data &); + static bool _room_state_polylog(data &); static bool room_state_polylog(data &); + static bool room_invite_state_polylog(data &); static bool room_state_linear_events(data &); + static bool _room_state_linear(data &); static bool room_state_linear(data &); + static bool room_invite_state_linear(data &); extern const event::keys::include _default_keys; extern event::fetch::opts _default_fopts; + extern item room_invite_state; extern item room_state; } @@ -39,6 +44,14 @@ ircd::m::sync::room_state room_state_linear }; +decltype(ircd::m::sync::room_invite_state) +ircd::m::sync::room_invite_state +{ + "rooms.invite_state", + room_invite_state_polylog, + room_invite_state_linear +}; + decltype(ircd::m::sync::_default_keys) ircd::m::sync::_default_keys { @@ -61,6 +74,24 @@ ircd::m::sync::_default_fopts bool ircd::m::sync::room_state_linear(data &data) +{ + if(data.membership == "invite") + return false; + + return _room_state_linear(data); +} + +bool +ircd::m::sync::room_invite_state_linear(data &data) +{ + if(data.membership != "invite") + return false; + + return _room_state_linear(data); +} + +bool +ircd::m::sync::_room_state_linear(data &data) { // if since token is non-zero, any events in the range are // included in the timeline array and not the state array. @@ -85,6 +116,24 @@ ircd::m::sync::room_state_linear(data &data) bool ircd::m::sync::room_state_polylog(data &data) +{ + if(data.membership == "invite") + return false; + + return _room_state_polylog(data); +} + +bool +ircd::m::sync::room_invite_state_polylog(data &data) +{ + if(data.membership != "invite") + return false; + + return _room_state_polylog(data); +} + +bool +ircd::m::sync::_room_state_polylog(data &data) { if(!apropos(data, data.room_head)) return false;