From ac572aeeaad7c706d14c483a5c2ce5058e241969 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Mon, 9 Sep 2019 19:25:41 -0700 Subject: [PATCH] ircd::m: Add branch and overload for event::id in room_id() suite. --- include/ircd/m/room/room.h | 8 +++++--- ircd/m_room.cc | 41 ++++++++++++++++++++++++++++++-------- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/include/ircd/m/room/room.h b/include/ircd/m/room/room.h index 421fed097..df0d6e41c 100644 --- a/include/ircd/m/room/room.h +++ b/include/ircd/m/room/room.h @@ -49,9 +49,11 @@ namespace ircd::m string_view display_name(const mutable_buffer &out, const room &); id::user::buf any_user(const room &, const string_view &host, const string_view &memshp = "join"); - id::room room_id(const mutable_buffer &, const id::room_alias &); - id::room room_id(const mutable_buffer &, const string_view &id_or_alias); - id::room::buf room_id(const id::room_alias &); + id::room room_id(const mutable_buffer &, const id::event &); // db + id::room room_id(const mutable_buffer &, const id::room_alias &); // db + net + id::room room_id(const mutable_buffer &, const string_view &mxid); + id::room::buf room_id(const id::event &); // db + id::room::buf room_id(const id::room_alias &); // db + net id::room::buf room_id(const string_view &id_or_alias); // [SET] Lowest-level diff --git a/ircd/m_room.cc b/ircd/m_room.cc index bbb70125d..50b4d67a9 100644 --- a/ircd/m_room.cc +++ b/ircd/m_room.cc @@ -640,39 +640,64 @@ ircd::m::room_id(const id::room_alias &room_alias) } ircd::m::id::room::buf -ircd::m::room_id(const string_view &room_id_or_alias) +ircd::m::room_id(const id::event &event_id) { char buf[m::id::MAX_SIZE + 1]; static_assert(sizeof(buf) <= 256); - return room_id(buf, room_id_or_alias); + return room_id(buf, event_id); +} + +ircd::m::id::room::buf +ircd::m::room_id(const string_view &mxid) +{ + char buf[m::id::MAX_SIZE + 1]; + static_assert(sizeof(buf) <= 256); + return room_id(buf, mxid); } ircd::m::id::room ircd::m::room_id(const mutable_buffer &out, - const string_view &room_id_or_alias) + const string_view &mxid) { - switch(m::sigil(room_id_or_alias)) + switch(m::sigil(mxid)) { case id::ROOM: - return id::room{out, room_id_or_alias}; + return id::room{out, mxid}; case id::USER: { - const m::user::room user_room(room_id_or_alias); + const m::user::room user_room(mxid); return string_view{data(out), copy(out, user_room.room_id)}; } case id::NODE: { - const m::node node(lstrip(room_id_or_alias, ':')); + const m::node node(lstrip(mxid, ':')); return node.room_id(out); } + case id::EVENT: + return room_id(out, id::event{mxid}); + default: - return room_id(out, id::room_alias{room_id_or_alias}); + return room_id(out, id::room_alias{mxid}); } } +ircd::m::id::room +ircd::m::room_id(const mutable_buffer &out, + const id::event &event_id) +{ + room::id ret; + m::get(event_id, "room_id", [&out, &ret] + (const room::id &room_id) + { + ret = string_view { data(out), copy(out, room_id) }; + }); + + return ret; +} + ircd::m::id::room ircd::m::room_id(const mutable_buffer &out, const id::room_alias &room_alias)