From 0ea1ba29689162066c509887cacdf8d3a71b5aeb Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Sat, 27 Oct 2018 14:27:53 -0700 Subject: [PATCH] ircd::m::room::power: Simplify level_event / level_state interface related. --- include/ircd/m/room.h | 9 +++++++-- ircd/m/room.cc | 9 +++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/include/ircd/m/room.h b/include/ircd/m/room.h index be230d301..0e119acae 100644 --- a/include/ircd/m/room.h +++ b/include/ircd/m/room.h @@ -441,9 +441,14 @@ struct ircd::m::room::power size_t count_levels() const; // This suite queries with full defaulting logic as per the spec. These - // always return suitable results. + // always return suitable results. When determining power to change a state + // event rather than a non-state event, the state_key must always be + // defined. If the state_key is a default constructed string_view{} (which + // means !defined(state_key) and is not the same as string_view{""} for + // the common state_key="") then the interface considers your query for + // a non-state event rather than a state_event. Be careful. int64_t level(const string_view &prop) const; - int64_t level_state(const string_view &type, const string_view &state_key = {}) const; + int64_t level_event(const string_view &type, const string_view &state_key) const; int64_t level_event(const string_view &type) const; int64_t level_user(const m::id::user &) const; diff --git a/ircd/m/room.cc b/ircd/m/room.cc index d03b0d866..bd03c74b2 100644 --- a/ircd/m/room.cc +++ b/ircd/m/room.cc @@ -2060,10 +2060,8 @@ const const auto &required_level { - prop == "events" && defined(state_key)? - level_state(type, state_key): prop == "events"? - level_event(type): + level_event(type, state_key): level(prop) }; @@ -2144,10 +2142,13 @@ catch(const json::error &e) } int64_t -ircd::m::room::power::level_state(const string_view &type, +ircd::m::room::power::level_event(const string_view &type, const string_view &state_key) const try { + if(!defined(state_key)) + return level_event(type); + int64_t ret { default_power_level