mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 12:07:55 +00:00
Create room redesign and refactor (#4942)
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user