Fixed presence results not returning offline users on initial sync (#17231)
This is to address an issue in which `m.presence` results on initial sync are not returning entries of users who are currently offline. The original behaviour was from https://github.com/element-hq/synapse/issues/1535 This change is useful for applications that use the presence system for tracking user profile information/updates (e.g. https://github.com/element-hq/synapse/pull/16992 or for profile status messages). This is gated behind a new configuration option to avoid performance impact for applications that don't need this, as a pragmatic solution for now.
This commit is contained in:
parent
13a99fba1b
commit
a9ee832e48
|
@ -0,0 +1 @@
|
||||||
|
Added configurable option to always include offline users in presence sync results. Contributed by @Michael-Hollister.
|
|
@ -246,6 +246,7 @@ Example configuration:
|
||||||
```yaml
|
```yaml
|
||||||
presence:
|
presence:
|
||||||
enabled: false
|
enabled: false
|
||||||
|
include_offline_users_on_sync: false
|
||||||
```
|
```
|
||||||
|
|
||||||
`enabled` can also be set to a special value of "untracked" which ignores updates
|
`enabled` can also be set to a special value of "untracked" which ignores updates
|
||||||
|
@ -254,6 +255,10 @@ received via clients and federation, while still accepting updates from the
|
||||||
|
|
||||||
*The "untracked" option was added in Synapse 1.96.0.*
|
*The "untracked" option was added in Synapse 1.96.0.*
|
||||||
|
|
||||||
|
When clients perform an initial or `full_state` sync, presence results for offline users are
|
||||||
|
not included by default. Setting `include_offline_users_on_sync` to `true` will always include
|
||||||
|
offline users in the results. Defaults to false.
|
||||||
|
|
||||||
---
|
---
|
||||||
### `require_auth_for_profile_requests`
|
### `require_auth_for_profile_requests`
|
||||||
|
|
||||||
|
|
|
@ -384,6 +384,11 @@ class ServerConfig(Config):
|
||||||
# Whether to internally track presence, requires that presence is enabled,
|
# Whether to internally track presence, requires that presence is enabled,
|
||||||
self.track_presence = self.presence_enabled and presence_enabled != "untracked"
|
self.track_presence = self.presence_enabled and presence_enabled != "untracked"
|
||||||
|
|
||||||
|
# Determines if presence results for offline users are included on initial/full sync
|
||||||
|
self.presence_include_offline_users_on_sync = presence_config.get(
|
||||||
|
"include_offline_users_on_sync", False
|
||||||
|
)
|
||||||
|
|
||||||
# Custom presence router module
|
# Custom presence router module
|
||||||
# This is the legacy way of configuring it (the config should now be put in the modules section)
|
# This is the legacy way of configuring it (the config should now be put in the modules section)
|
||||||
self.presence_router_module_class = None
|
self.presence_router_module_class = None
|
||||||
|
|
|
@ -2270,7 +2270,11 @@ class SyncHandler:
|
||||||
user=user,
|
user=user,
|
||||||
from_key=presence_key,
|
from_key=presence_key,
|
||||||
is_guest=sync_config.is_guest,
|
is_guest=sync_config.is_guest,
|
||||||
include_offline=include_offline,
|
include_offline=(
|
||||||
|
True
|
||||||
|
if self.hs_config.server.presence_include_offline_users_on_sync
|
||||||
|
else include_offline
|
||||||
|
),
|
||||||
)
|
)
|
||||||
assert presence_key
|
assert presence_key
|
||||||
sync_result_builder.now_token = now_token.copy_and_replace(
|
sync_result_builder.now_token = now_token.copy_and_replace(
|
||||||
|
|
Loading…
Reference in New Issue