mirror of
https://mau.dev/maunium/synapse.git
synced 2024-12-15 21:03:51 +01:00
Integrate knock rooms with the public rooms directory (#9359)
This PR implements the ["Changes regarding the Public Rooms Directory"](https://github.com/Sorunome/matrix-doc/blob/soru/knock/proposals/2403-knock.md#changes-regarding-the-public-rooms-directory) section of knocking MSC2403. Specifically, it: * Allows rooms with `join_rule` "knock" to be returned by the query behind the public rooms directory * Adds the field `join_rule` to each room entry returned by a public rooms directory query, so clients can know whether to attempt a join or knock on a room Based on https://github.com/matrix-org/synapse/issues/6739. Complement tests for this change: https://github.com/matrix-org/complement/pull/72
This commit is contained in:
parent
d936371b69
commit
a7a37437bc
3 changed files with 11 additions and 5 deletions
1
changelog.d/9359.feature
Normal file
1
changelog.d/9359.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Implement "room knocking" as per [MSC2403](https://github.com/matrix-org/matrix-doc/pull/2403). Contributed by Sorunome and anoa.
|
|
@ -169,6 +169,7 @@ class RoomListHandler(BaseHandler):
|
||||||
"world_readable": room["history_visibility"]
|
"world_readable": room["history_visibility"]
|
||||||
== HistoryVisibility.WORLD_READABLE,
|
== HistoryVisibility.WORLD_READABLE,
|
||||||
"guest_can_join": room["guest_access"] == "can_join",
|
"guest_can_join": room["guest_access"] == "can_join",
|
||||||
|
"join_rule": room["join_rules"],
|
||||||
}
|
}
|
||||||
|
|
||||||
# Filter out Nones – rather omit the field altogether
|
# Filter out Nones – rather omit the field altogether
|
||||||
|
|
|
@ -19,7 +19,7 @@ from abc import abstractmethod
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from typing import Any, Dict, List, Optional, Tuple
|
from typing import Any, Dict, List, Optional, Tuple
|
||||||
|
|
||||||
from synapse.api.constants import EventTypes
|
from synapse.api.constants import EventTypes, JoinRules
|
||||||
from synapse.api.errors import StoreError
|
from synapse.api.errors import StoreError
|
||||||
from synapse.api.room_versions import RoomVersion, RoomVersions
|
from synapse.api.room_versions import RoomVersion, RoomVersions
|
||||||
from synapse.storage._base import SQLBaseStore, db_to_json
|
from synapse.storage._base import SQLBaseStore, db_to_json
|
||||||
|
@ -177,11 +177,13 @@ class RoomWorkerStore(SQLBaseStore):
|
||||||
INNER JOIN room_stats_current USING (room_id)
|
INNER JOIN room_stats_current USING (room_id)
|
||||||
WHERE
|
WHERE
|
||||||
(
|
(
|
||||||
join_rules = 'public' OR history_visibility = 'world_readable'
|
join_rules = 'public' OR join_rules = '%(knock_join_rule)s'
|
||||||
|
OR history_visibility = 'world_readable'
|
||||||
)
|
)
|
||||||
AND joined_members > 0
|
AND joined_members > 0
|
||||||
""" % {
|
""" % {
|
||||||
"published_sql": published_sql
|
"published_sql": published_sql,
|
||||||
|
"knock_join_rule": JoinRules.KNOCK,
|
||||||
}
|
}
|
||||||
|
|
||||||
txn.execute(sql, query_args)
|
txn.execute(sql, query_args)
|
||||||
|
@ -303,7 +305,7 @@ class RoomWorkerStore(SQLBaseStore):
|
||||||
sql = """
|
sql = """
|
||||||
SELECT
|
SELECT
|
||||||
room_id, name, topic, canonical_alias, joined_members,
|
room_id, name, topic, canonical_alias, joined_members,
|
||||||
avatar, history_visibility, joined_members, guest_access
|
avatar, history_visibility, guest_access, join_rules
|
||||||
FROM (
|
FROM (
|
||||||
%(published_sql)s
|
%(published_sql)s
|
||||||
) published
|
) published
|
||||||
|
@ -311,7 +313,8 @@ class RoomWorkerStore(SQLBaseStore):
|
||||||
INNER JOIN room_stats_current USING (room_id)
|
INNER JOIN room_stats_current USING (room_id)
|
||||||
WHERE
|
WHERE
|
||||||
(
|
(
|
||||||
join_rules = 'public' OR history_visibility = 'world_readable'
|
join_rules = 'public' OR join_rules = '%(knock_join_rule)s'
|
||||||
|
OR history_visibility = 'world_readable'
|
||||||
)
|
)
|
||||||
AND joined_members > 0
|
AND joined_members > 0
|
||||||
%(where_clause)s
|
%(where_clause)s
|
||||||
|
@ -320,6 +323,7 @@ class RoomWorkerStore(SQLBaseStore):
|
||||||
"published_sql": published_sql,
|
"published_sql": published_sql,
|
||||||
"where_clause": where_clause,
|
"where_clause": where_clause,
|
||||||
"dir": "DESC" if forwards else "ASC",
|
"dir": "DESC" if forwards else "ASC",
|
||||||
|
"knock_join_rule": JoinRules.KNOCK,
|
||||||
}
|
}
|
||||||
|
|
||||||
if limit is not None:
|
if limit is not None:
|
||||||
|
|
Loading…
Reference in a new issue