summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--changelog.d/12786.feature1
-rw-r--r--synapse/handlers/room.py16
2 files changed, 9 insertions, 8 deletions
diff --git a/changelog.d/12786.feature b/changelog.d/12786.feature
new file mode 100644
index 0000000000..c90ddd411e
--- /dev/null
+++ b/changelog.d/12786.feature
@@ -0,0 +1 @@
+Implement [MSC3818: Copy room type on upgrade](https://github.com/matrix-org/matrix-spec-proposals/pull/3818).
diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index 53569e5212..b7d64a2f5a 100644
--- a/synapse/handlers/room.py
+++ b/synapse/handlers/room.py
@@ -469,14 +469,14 @@ class RoomCreationHandler:
             (EventTypes.PowerLevels, ""),
         ]
 
-        # If the old room was a space, copy over the room type and the rooms in
-        # the space.
-        if (
-            old_room_create_event.content.get(EventContentFields.ROOM_TYPE)
-            == RoomTypes.SPACE
-        ):
-            creation_content[EventContentFields.ROOM_TYPE] = RoomTypes.SPACE
-            types_to_copy.append((EventTypes.SpaceChild, None))
+        # Copy the room type as per MSC3818.
+        room_type = old_room_create_event.content.get(EventContentFields.ROOM_TYPE)
+        if room_type is not None:
+            creation_content[EventContentFields.ROOM_TYPE] = room_type
+
+            # If the old room was a space, copy over the rooms in the space.
+            if room_type == RoomTypes.SPACE:
+                types_to_copy.append((EventTypes.SpaceChild, None))
 
         old_room_state_ids = await self.store.get_filtered_current_state_ids(
             old_room_id, StateFilter.from_types(types_to_copy)