mirror of
https://github.com/matrix-construct/construct
synced 2025-01-14 00:34:18 +01:00
modules/m_room_canonical_alias: Move handler function into ircd::m.
This commit is contained in:
parent
9c1739a452
commit
f5716caa50
1 changed files with 43 additions and 26 deletions
|
@ -8,31 +8,48 @@
|
||||||
// copyright notice and this permission notice is present in all copies. The
|
// copyright notice and this permission notice is present in all copies. The
|
||||||
// full license for this software is available in the LICENSE file.
|
// full license for this software is available in the LICENSE file.
|
||||||
|
|
||||||
using namespace ircd;
|
namespace ircd::m
|
||||||
|
{
|
||||||
|
static void changed_canonical_alias(const event &, vm::eval &);
|
||||||
|
|
||||||
mapi::header
|
extern const room alias_room;
|
||||||
|
extern const room::id::buf alias_room_id;
|
||||||
|
extern const hookfn<vm::eval &> changed_canonical_alias_hookfn;
|
||||||
|
}
|
||||||
|
|
||||||
|
ircd::mapi::header
|
||||||
IRCD_MODULE
|
IRCD_MODULE
|
||||||
{
|
{
|
||||||
"Matrix m.room.canonical_alias"
|
"Matrix m.room.canonical_alias"
|
||||||
};
|
};
|
||||||
|
|
||||||
const m::room::id::buf
|
decltype(ircd::m::alias_room_id)
|
||||||
alias_room_id
|
ircd::m::alias_room_id
|
||||||
{
|
{
|
||||||
"alias", ircd::my_host()
|
"alias", ircd::my_host()
|
||||||
};
|
};
|
||||||
|
|
||||||
const m::room
|
decltype(ircd::m::alias_room)
|
||||||
alias_room
|
ircd::m::alias_room
|
||||||
{
|
{
|
||||||
alias_room_id
|
alias_room_id
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
decltype(ircd::m::changed_canonical_alias_hookfn)
|
||||||
_changed_canonical_alias(const m::event &event,
|
ircd::m::changed_canonical_alias_hookfn
|
||||||
m::vm::eval &)
|
|
||||||
{
|
{
|
||||||
const m::room::id &room_id
|
changed_canonical_alias,
|
||||||
|
{
|
||||||
|
{ "_site", "vm.effect" },
|
||||||
|
{ "type", "m.room.canonical_alias" },
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
ircd::m::changed_canonical_alias(const event &event,
|
||||||
|
vm::eval &)
|
||||||
|
{
|
||||||
|
const room::id &room_id
|
||||||
{
|
{
|
||||||
at<"room_id"_>(event)
|
at<"room_id"_>(event)
|
||||||
};
|
};
|
||||||
|
@ -47,10 +64,15 @@ _changed_canonical_alias(const m::event &event,
|
||||||
at<"content"_>(event)
|
at<"content"_>(event)
|
||||||
};
|
};
|
||||||
|
|
||||||
const m::room::alias &alias
|
const json::string &content_alias
|
||||||
{
|
{
|
||||||
content.has("alias")?
|
content.get("alias")
|
||||||
m::room::alias{unquote(content.get("alias"))}:
|
};
|
||||||
|
|
||||||
|
const room::alias &alias
|
||||||
|
{
|
||||||
|
!empty(content_alias)?
|
||||||
|
m::room::alias{content_alias}:
|
||||||
m::room::alias{}
|
m::room::alias{}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -72,15 +94,20 @@ _changed_canonical_alias(const m::event &event,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto event_idx
|
const auto present_event_idx
|
||||||
{
|
{
|
||||||
room.get(std::nothrow, "m.room.canonical_alias", "")
|
room.get(std::nothrow, "m.room.canonical_alias", "")
|
||||||
};
|
};
|
||||||
|
|
||||||
if(!event_idx)
|
if(!present_event_idx)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m::get(std::nothrow, event_idx, "content", []
|
const auto prev_state_idx
|
||||||
|
{
|
||||||
|
m::room::state::prev(present_event_idx)
|
||||||
|
};
|
||||||
|
|
||||||
|
m::get(std::nothrow, prev_state_idx, "content", []
|
||||||
(const json::object &content)
|
(const json::object &content)
|
||||||
{
|
{
|
||||||
const json::string &alias
|
const json::string &alias
|
||||||
|
@ -91,13 +118,3 @@ _changed_canonical_alias(const m::event &event,
|
||||||
m::room::aliases::cache::del(alias);
|
m::room::aliases::cache::del(alias);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const m::hookfn<m::vm::eval &>
|
|
||||||
_changed_canonical_alias_hookfn
|
|
||||||
{
|
|
||||||
_changed_canonical_alias,
|
|
||||||
{
|
|
||||||
{ "_site", "vm.effect" },
|
|
||||||
{ "type", "m.room.canonical_alias" },
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
Loading…
Reference in a new issue