Skip to content

Commit

Permalink
Fix space handing (matrix-nio#434)
Browse files Browse the repository at this point in the history
Mark `via` optional, and update parents / children based on the presence
of the `via` property.
  • Loading branch information
ShadowRZ authored and justin-russell committed Sep 11, 2023
1 parent 262b3be commit 8abf5bb
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 6 deletions.
10 changes: 8 additions & 2 deletions nio/rooms.py
Original file line number Diff line number Diff line change
Expand Up @@ -412,10 +412,16 @@ def handle_event(self, event: Event) -> None:
self.users[user_id].power_level = level

elif isinstance(event, RoomSpaceParentEvent):
self.parents.add(event.state_key)
if "via" in event.source.get("content", {}):
self.parents.add(event.state_key)
else:
self.parents.discard(event.state_key)

elif isinstance(event, RoomSpaceChildEvent):
self.children.add(event.state_key)
if "via" in event.source.get("content", {}):
self.children.add(event.state_key)
else:
self.children.discard(event.state_key)

def handle_account_data(self, event: AccountDataEvent) -> None:
if isinstance(event, FullyReadEvent):
Expand Down
2 changes: 0 additions & 2 deletions nio/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -962,7 +962,6 @@ class Schemas:
"canonical": {"type": "boolean", "default": False},
"via": {"type": "array", "items": {"type": "string"}},
},
"required": ["via"],
},
},
"required": ["type", "sender", "content", "state_key"],
Expand All @@ -981,7 +980,6 @@ class Schemas:
"via": {"type": "array", "items": {"type": "string"}},
"order": {"type": "string"},
},
"required": ["via"],
},
},
"required": ["type", "sender", "content", "state_key"],
Expand Down
62 changes: 60 additions & 2 deletions tests/room_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -481,22 +481,80 @@ def test_space_parent(self):
assert room.parents == set()
room.handle_event(
RoomSpaceParentEvent(
{"event_id": "event_id", "sender": BOB_ID, "origin_server_ts": 0},
{
"event_id": "event_id",
"sender": BOB_ID,
"origin_server_ts": 0,
"content": {},
},
"!X:example.org",
)
)
assert "!X:example.org" not in room.parents
room.handle_event(
RoomSpaceParentEvent(
{
"event_id": "event_id",
"sender": BOB_ID,
"origin_server_ts": 0,
"content": {"via": ["!A:example.org"]},
},
"!X:example.org",
)
)
assert "!X:example.org" in room.parents
room.handle_event(
RoomSpaceParentEvent(
{
"event_id": "event_id",
"sender": BOB_ID,
"origin_server_ts": 0,
"content": {},
},
"!X:example.org",
)
)
assert "!X:example.org" not in room.parents

def test_space_child(self):
room = self.test_room
assert room.children == set()
room.handle_event(
RoomSpaceChildEvent(
{"event_id": "event_id", "sender": BOB_ID, "origin_server_ts": 0},
{
"event_id": "event_id",
"sender": BOB_ID,
"origin_server_ts": 0,
"content": {},
},
"!X:example.org",
)
)
assert "!X:example.org" not in room.children
room.handle_event(
RoomSpaceChildEvent(
{
"event_id": "event_id",
"sender": BOB_ID,
"origin_server_ts": 0,
"content": {"via": ["!A:example.org"]},
},
"!X:example.org",
)
)
assert "!X:example.org" in room.children
room.handle_event(
RoomSpaceChildEvent(
{
"event_id": "event_id",
"sender": BOB_ID,
"origin_server_ts": 0,
"content": {},
},
"!X:example.org",
)
)
assert "!X:example.org" not in room.children

def test_room_avatar_event(self):
room = self.test_room
Expand Down

0 comments on commit 8abf5bb

Please sign in to comment.