Create room redesign and refactor (#4942)

This commit is contained in:
Mauro
2026-01-12 18:49:31 +01:00
committed by GitHub
parent f42c063e50
commit 4cfedefcca
77 changed files with 463 additions and 348 deletions
@@ -474,25 +474,26 @@ class ClientProxy: ClientProxyProtocol {
func createRoom(name: String,
topic: String?,
isRoomPrivate: Bool,
isKnockingOnly: Bool,
accessType: CreateRoomAccessType,
isSpace: Bool,
userIDs: [String],
avatarURL: URL?,
aliasLocalPart: String?) async -> Result<String, ClientProxyError> {
do {
let parameters = CreateRoomParameters(name: name,
topic: topic,
isEncrypted: isRoomPrivate,
isEncrypted: accessType.isEncrypted,
isDirect: false,
visibility: isRoomPrivate ? .private : .public,
preset: isRoomPrivate ? .privateChat : .publicChat,
visibility: accessType.visibility,
preset: accessType.preset,
invite: userIDs,
avatar: avatarURL?.absoluteString,
powerLevelContentOverride: isKnockingOnly ? Self.knockingRoomCreationPowerLevelOverrides : Self.roomCreationPowerLevelOverrides,
joinRuleOverride: isKnockingOnly ? .knock : nil,
historyVisibilityOverride: isRoomPrivate ? .invited : nil,
powerLevelContentOverride: accessType == .askToJoin ? Self.knockingRoomCreationPowerLevelOverrides : Self.roomCreationPowerLevelOverrides,
joinRuleOverride: accessType.joinRuleOverride,
historyVisibilityOverride: accessType.historyVisibilityOverride,
// This is an FFI naming mistake, what is required is the `aliasLocalPart` not the whole alias
canonicalAlias: aliasLocalPart)
canonicalAlias: aliasLocalPart,
isSpace: isSpace)
let roomID = try await client.createRoom(request: parameters)
await waitForRoomToSync(roomID: roomID)
@@ -1300,3 +1301,35 @@ private extension TimelineMediaVisibility {
}
}
}
private extension CreateRoomAccessType {
var isEncrypted: Bool {
switch self {
case .public:
false
case .askToJoin, .private:
true
}
}
var visibility: RoomVisibility {
isPrivate ? .private : .public
}
var preset: RoomPreset {
isPrivate ? .privateChat : .publicChat
}
var historyVisibilityOverride: RoomHistoryVisibility? {
isPrivate ? .invited : nil
}
var joinRuleOverride: JoinRule? {
switch self {
case .askToJoin:
.knock
case .private, .public:
nil
}
}
}
@@ -48,6 +48,21 @@ enum SlidingSyncConstants {
static let maximumVisibleRangeSize = 30
}
enum CreateRoomAccessType: CaseIterable {
case `public`
case askToJoin
case `private`
var isPrivate: Bool {
switch self {
case .private:
true
case .public, .askToJoin:
false
}
}
}
/// This struct represents the configuration that we are using to register the application through Pusher to Sygnal
/// using the Matrix Rust SDK, more info here:
/// https://github.com/matrix-org/sygnal
@@ -156,8 +171,8 @@ protocol ClientProxyProtocol: AnyObject {
func createRoom(name: String,
topic: String?,
isRoomPrivate: Bool,
isKnockingOnly: Bool,
accessType: CreateRoomAccessType,
isSpace: Bool,
userIDs: [String],
avatarURL: URL?,
aliasLocalPart: String?) async -> Result<String, ClientProxyError>