This commit is contained in:
Jason Volk 2023-04-21 21:20:53 -07:00
parent 1a032b28b7
commit 238cc10489
5 changed files with 18 additions and 0 deletions

View File

@ -48,6 +48,9 @@ struct ircd::m::rooms::opts
/// Room alias prefix search
string_view room_alias;
/// Room type search
string_view room_type;
/// user::rooms convenience
id::user user_id;

View File

@ -138,6 +138,10 @@ ircd::m::rooms::for_each(const opts &opts,
if(!join_rule(room, opts.join_rule))
return;
if(opts.room_type)
if(!m::type(room_id, opts.room_type))
return;
if(opts.server && opts.request_node_id && my_host(opts.server))
if(!room::aliases(room_id).has_server(opts.server))
return;

View File

@ -134,6 +134,7 @@ get__publicrooms(client &client,
opts.lower_bound = true;
opts.room_id = since;
opts.request_user_id = request.user_id;
opts.room_type = json::string{filter["room_type"]};
if(m::valid(m::id::USER, search_term))
opts.user_id = search_term;

View File

@ -241,4 +241,13 @@ ircd::m::client_versions::append_unstable_features(client &client,
bool(e2ee_forced_trusted_private)
}
};
// Supports filtering of /publicRooms by room type as per MSC3827
json::stack::member
{
out, "org.matrix.msc3827.stable", json::value
{
true
}
};
}

View File

@ -114,6 +114,7 @@ handle_get(client &client,
opts.room_id = since;
opts.search_term = search_term;
opts.request_node_id = request.node_id;
opts.room_type = json::string(filter["room_type"]);
size_t count{0};
m::room::id::buf prev_batch_buf;