mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2024-10-01 11:49:51 -04:00
Use stable identifiers for MSC3771 & MSC3773. (#14050)
These are both part of Matrix 1.4 which has now been released. For now, support both the unstable and stable identifiers.
This commit is contained in:
parent
0adeccafc6
commit
66a7857334
@ -1 +1 @@
|
|||||||
Experimental support for thread-specific notifications ([MSC3773](https://github.com/matrix-org/matrix-spec-proposals/pull/3773)).
|
Support for thread-specific notifications & receipts ([MSC3771](https://github.com/matrix-org/matrix-spec-proposals/pull/3771) and [MSC3773](https://github.com/matrix-org/matrix-spec-proposals/pull/3773)).
|
||||||
|
@ -1 +1 @@
|
|||||||
Experimental support for thread-specific receipts ([MSC3771](https://github.com/matrix-org/matrix-spec-proposals/pull/3771)).
|
Support for thread-specific notifications & receipts ([MSC3771](https://github.com/matrix-org/matrix-spec-proposals/pull/3771) and [MSC3773](https://github.com/matrix-org/matrix-spec-proposals/pull/3773)).
|
||||||
|
@ -1 +1 @@
|
|||||||
Experimental support for thread-specific receipts ([MSC3771](https://github.com/matrix-org/matrix-spec-proposals/pull/3771)).
|
Support for thread-specific notifications & receipts ([MSC3771](https://github.com/matrix-org/matrix-spec-proposals/pull/3771) and [MSC3773](https://github.com/matrix-org/matrix-spec-proposals/pull/3773)).
|
||||||
|
@ -1 +1 @@
|
|||||||
Experimental support for thread-specific receipts ([MSC3771](https://github.com/matrix-org/matrix-spec-proposals/pull/3771)).
|
Support for thread-specific notifications & receipts ([MSC3771](https://github.com/matrix-org/matrix-spec-proposals/pull/3771) and [MSC3773](https://github.com/matrix-org/matrix-spec-proposals/pull/3773)).
|
||||||
|
1
changelog.d/14050.feature
Normal file
1
changelog.d/14050.feature
Normal file
@ -0,0 +1 @@
|
|||||||
|
Support for thread-specific notifications & receipts ([MSC3771](https://github.com/matrix-org/matrix-spec-proposals/pull/3771) and [MSC3773](https://github.com/matrix-org/matrix-spec-proposals/pull/3773)).
|
@ -84,6 +84,7 @@ ROOM_EVENT_FILTER_SCHEMA = {
|
|||||||
"contains_url": {"type": "boolean"},
|
"contains_url": {"type": "boolean"},
|
||||||
"lazy_load_members": {"type": "boolean"},
|
"lazy_load_members": {"type": "boolean"},
|
||||||
"include_redundant_members": {"type": "boolean"},
|
"include_redundant_members": {"type": "boolean"},
|
||||||
|
"unread_thread_notifications": {"type": "boolean"},
|
||||||
"org.matrix.msc3773.unread_thread_notifications": {"type": "boolean"},
|
"org.matrix.msc3773.unread_thread_notifications": {"type": "boolean"},
|
||||||
# Include or exclude events with the provided labels.
|
# Include or exclude events with the provided labels.
|
||||||
# cf https://github.com/matrix-org/matrix-doc/pull/2326
|
# cf https://github.com/matrix-org/matrix-doc/pull/2326
|
||||||
@ -308,12 +309,16 @@ class Filter:
|
|||||||
self.include_redundant_members = filter_json.get(
|
self.include_redundant_members = filter_json.get(
|
||||||
"include_redundant_members", False
|
"include_redundant_members", False
|
||||||
)
|
)
|
||||||
if hs.config.experimental.msc3773_enabled:
|
|
||||||
self.unread_thread_notifications: bool = filter_json.get(
|
self.unread_thread_notifications: bool = filter_json.get(
|
||||||
|
"unread_thread_notifications", False
|
||||||
|
)
|
||||||
|
if (
|
||||||
|
not self.unread_thread_notifications
|
||||||
|
and hs.config.experimental.msc3773_enabled
|
||||||
|
):
|
||||||
|
self.unread_thread_notifications = filter_json.get(
|
||||||
"org.matrix.msc3773.unread_thread_notifications", False
|
"org.matrix.msc3773.unread_thread_notifications", False
|
||||||
)
|
)
|
||||||
else:
|
|
||||||
self.unread_thread_notifications = False
|
|
||||||
|
|
||||||
self.types = filter_json.get("types", None)
|
self.types = filter_json.get("types", None)
|
||||||
self.not_types = filter_json.get("not_types", [])
|
self.not_types = filter_json.get("not_types", [])
|
||||||
|
@ -95,8 +95,6 @@ class ExperimentalConfig(Config):
|
|||||||
# MSC2815 (allow room moderators to view redacted event content)
|
# MSC2815 (allow room moderators to view redacted event content)
|
||||||
self.msc2815_enabled: bool = experimental.get("msc2815_enabled", False)
|
self.msc2815_enabled: bool = experimental.get("msc2815_enabled", False)
|
||||||
|
|
||||||
# MSC3771: Thread read receipts
|
|
||||||
self.msc3771_enabled: bool = experimental.get("msc3771_enabled", False)
|
|
||||||
# MSC3772: A push rule for mutual relations.
|
# MSC3772: A push rule for mutual relations.
|
||||||
self.msc3772_enabled: bool = experimental.get("msc3772_enabled", False)
|
self.msc3772_enabled: bool = experimental.get("msc3772_enabled", False)
|
||||||
# MSC3773: Thread notifications
|
# MSC3773: Thread notifications
|
||||||
|
@ -63,8 +63,6 @@ class ReceiptsHandler:
|
|||||||
self.clock = self.hs.get_clock()
|
self.clock = self.hs.get_clock()
|
||||||
self.state = hs.get_state_handler()
|
self.state = hs.get_state_handler()
|
||||||
|
|
||||||
self._msc3771_enabled = hs.config.experimental.msc3771_enabled
|
|
||||||
|
|
||||||
async def _received_remote_receipt(self, origin: str, content: JsonDict) -> None:
|
async def _received_remote_receipt(self, origin: str, content: JsonDict) -> None:
|
||||||
"""Called when we receive an EDU of type m.receipt from a remote HS."""
|
"""Called when we receive an EDU of type m.receipt from a remote HS."""
|
||||||
receipts = []
|
receipts = []
|
||||||
@ -96,7 +94,6 @@ class ReceiptsHandler:
|
|||||||
# Check if these receipts apply to a thread.
|
# Check if these receipts apply to a thread.
|
||||||
thread_id = None
|
thread_id = None
|
||||||
data = user_values.get("data", {})
|
data = user_values.get("data", {})
|
||||||
if self._msc3771_enabled and isinstance(data, dict):
|
|
||||||
thread_id = data.get("thread_id")
|
thread_id = data.get("thread_id")
|
||||||
# If the thread ID is invalid, consider it missing.
|
# If the thread ID is invalid, consider it missing.
|
||||||
if not isinstance(thread_id, str):
|
if not isinstance(thread_id, str):
|
||||||
|
@ -279,8 +279,6 @@ class SyncHandler:
|
|||||||
|
|
||||||
self.rooms_to_exclude = hs.config.server.rooms_to_exclude_from_sync
|
self.rooms_to_exclude = hs.config.server.rooms_to_exclude_from_sync
|
||||||
|
|
||||||
self._msc3773_enabled = hs.config.experimental.msc3773_enabled
|
|
||||||
|
|
||||||
async def wait_for_sync_for_user(
|
async def wait_for_sync_for_user(
|
||||||
self,
|
self,
|
||||||
requester: Requester,
|
requester: Requester,
|
||||||
@ -2412,10 +2410,7 @@ class SyncHandler:
|
|||||||
unread_count = notifs.main_timeline.unread_count
|
unread_count = notifs.main_timeline.unread_count
|
||||||
|
|
||||||
# Check the sync configuration.
|
# Check the sync configuration.
|
||||||
if (
|
if sync_config.filter_collection.unread_thread_notifications():
|
||||||
self._msc3773_enabled
|
|
||||||
and sync_config.filter_collection.unread_thread_notifications()
|
|
||||||
):
|
|
||||||
# And add info for each thread.
|
# And add info for each thread.
|
||||||
room_sync.unread_thread_notifications = {
|
room_sync.unread_thread_notifications = {
|
||||||
thread_id: {
|
thread_id: {
|
||||||
|
@ -50,7 +50,6 @@ class ReceiptRestServlet(RestServlet):
|
|||||||
ReceiptTypes.READ_PRIVATE,
|
ReceiptTypes.READ_PRIVATE,
|
||||||
ReceiptTypes.FULLY_READ,
|
ReceiptTypes.FULLY_READ,
|
||||||
}
|
}
|
||||||
self._msc3771_enabled = hs.config.experimental.msc3771_enabled
|
|
||||||
|
|
||||||
async def on_POST(
|
async def on_POST(
|
||||||
self, request: SynapseRequest, room_id: str, receipt_type: str, event_id: str
|
self, request: SynapseRequest, room_id: str, receipt_type: str, event_id: str
|
||||||
@ -67,7 +66,6 @@ class ReceiptRestServlet(RestServlet):
|
|||||||
|
|
||||||
# Pull the thread ID, if one exists.
|
# Pull the thread ID, if one exists.
|
||||||
thread_id = None
|
thread_id = None
|
||||||
if self._msc3771_enabled:
|
|
||||||
if "thread_id" in body:
|
if "thread_id" in body:
|
||||||
thread_id = body.get("thread_id")
|
thread_id = body.get("thread_id")
|
||||||
if not thread_id or not isinstance(thread_id, str):
|
if not thread_id or not isinstance(thread_id, str):
|
||||||
|
@ -100,6 +100,7 @@ class SyncRestServlet(RestServlet):
|
|||||||
self._server_notices_sender = hs.get_server_notices_sender()
|
self._server_notices_sender = hs.get_server_notices_sender()
|
||||||
self._event_serializer = hs.get_event_client_serializer()
|
self._event_serializer = hs.get_event_client_serializer()
|
||||||
self._msc2654_enabled = hs.config.experimental.msc2654_enabled
|
self._msc2654_enabled = hs.config.experimental.msc2654_enabled
|
||||||
|
self._msc3773_enabled = hs.config.experimental.msc3773_enabled
|
||||||
|
|
||||||
async def on_GET(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
|
async def on_GET(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
|
||||||
# This will always be set by the time Twisted calls us.
|
# This will always be set by the time Twisted calls us.
|
||||||
@ -510,6 +511,8 @@ class SyncRestServlet(RestServlet):
|
|||||||
result["ephemeral"] = {"events": ephemeral_events}
|
result["ephemeral"] = {"events": ephemeral_events}
|
||||||
result["unread_notifications"] = room.unread_notifications
|
result["unread_notifications"] = room.unread_notifications
|
||||||
if room.unread_thread_notifications:
|
if room.unread_thread_notifications:
|
||||||
|
result["unread_thread_notifications"] = room.unread_thread_notifications
|
||||||
|
if self._msc3773_enabled:
|
||||||
result[
|
result[
|
||||||
"org.matrix.msc3773.unread_thread_notifications"
|
"org.matrix.msc3773.unread_thread_notifications"
|
||||||
] = room.unread_thread_notifications
|
] = room.unread_thread_notifications
|
||||||
|
@ -105,7 +105,7 @@ class VersionsRestServlet(RestServlet):
|
|||||||
# Adds support for thread relations, per MSC3440.
|
# Adds support for thread relations, per MSC3440.
|
||||||
"org.matrix.msc3440.stable": True, # TODO: remove when "v1.3" is added above
|
"org.matrix.msc3440.stable": True, # TODO: remove when "v1.3" is added above
|
||||||
# Support for thread read receipts & notification counts.
|
# Support for thread read receipts & notification counts.
|
||||||
"org.matrix.msc3771": self.config.experimental.msc3771_enabled,
|
"org.matrix.msc3771": True,
|
||||||
"org.matrix.msc3773": self.config.experimental.msc3773_enabled,
|
"org.matrix.msc3773": self.config.experimental.msc3773_enabled,
|
||||||
# Allows moderators to fetch redacted event content as described in MSC2815
|
# Allows moderators to fetch redacted event content as described in MSC2815
|
||||||
"fi.mau.msc2815": self.config.experimental.msc2815_enabled,
|
"fi.mau.msc2815": self.config.experimental.msc2815_enabled,
|
||||||
|
Loading…
Reference in New Issue
Block a user