Move support for MSC3026 behind an experimental flag

This commit is contained in:
Brendan Abolivier 2021-03-18 18:37:19 +01:00
parent 405aeb0b2c
commit 066c703729
No known key found for this signature in database
GPG Key ID: 1E015C145F1916CD
3 changed files with 18 additions and 3 deletions

View File

@ -302,6 +302,8 @@ class GenericWorkerPresence(BasePresenceHandler):
self.send_stop_syncing, UPDATE_SYNCING_USERS_MS self.send_stop_syncing, UPDATE_SYNCING_USERS_MS
) )
self._busy_presence_enabled = hs.config.experimental.msc3026_enabled
hs.get_reactor().addSystemEventTrigger( hs.get_reactor().addSystemEventTrigger(
"before", "before",
"shutdown", "shutdown",
@ -439,8 +441,11 @@ class GenericWorkerPresence(BasePresenceHandler):
PresenceState.ONLINE, PresenceState.ONLINE,
PresenceState.UNAVAILABLE, PresenceState.UNAVAILABLE,
PresenceState.OFFLINE, PresenceState.OFFLINE,
PresenceState.BUSY,
) )
if self._busy_presence_enabled:
valid_presence += (PresenceState.BUSY,)
if presence not in valid_presence: if presence not in valid_presence:
raise SynapseError(400, "Invalid presence state") raise SynapseError(400, "Invalid presence state")

View File

@ -27,3 +27,5 @@ class ExperimentalConfig(Config):
# MSC2858 (multiple SSO identity providers) # MSC2858 (multiple SSO identity providers)
self.msc2858_enabled = experimental.get("msc2858_enabled", False) # type: bool self.msc2858_enabled = experimental.get("msc2858_enabled", False) # type: bool
# MSC3026 (busy presence state)
self.msc3026_enabled = experimental.get("msc3026_enabled", False) # type: bool

View File

@ -104,6 +104,8 @@ class BasePresenceHandler(abc.ABC):
self.clock = hs.get_clock() self.clock = hs.get_clock()
self.store = hs.get_datastore() self.store = hs.get_datastore()
self._busy_presence_enabled = hs.config.experimental.msc3026_enabled
active_presence = self.store.take_presence_startup_info() active_presence = self.store.take_presence_startup_info()
self.user_to_current_state = {state.user_id: state for state in active_presence} self.user_to_current_state = {state.user_id: state for state in active_presence}
@ -730,8 +732,11 @@ class PresenceHandler(BasePresenceHandler):
PresenceState.ONLINE, PresenceState.ONLINE,
PresenceState.UNAVAILABLE, PresenceState.UNAVAILABLE,
PresenceState.OFFLINE, PresenceState.OFFLINE,
PresenceState.BUSY,
) )
if self._busy_presence_enabled:
valid_presence += (PresenceState.BUSY,)
if presence not in valid_presence: if presence not in valid_presence:
raise SynapseError(400, "Invalid presence state") raise SynapseError(400, "Invalid presence state")
@ -745,7 +750,10 @@ class PresenceHandler(BasePresenceHandler):
msg = status_msg if presence != PresenceState.OFFLINE else None msg = status_msg if presence != PresenceState.OFFLINE else None
new_fields["status_msg"] = msg new_fields["status_msg"] = msg
if presence == PresenceState.ONLINE or presence == PresenceState.BUSY: if (
presence == PresenceState.ONLINE or
(self._busy_presence_enabled and presence == PresenceState.BUSY)
):
new_fields["last_active_ts"] = self.clock.time_msec() new_fields["last_active_ts"] = self.clock.time_msec()
await self._update_states([prev_state.copy_and_replace(**new_fields)]) await self._update_states([prev_state.copy_and_replace(**new_fields)])