diff --git a/Rocket.Chat/Models/AuthSettings.swift b/Rocket.Chat/Models/AuthSettings.swift index 9b0abaf732..91f6ff4e45 100644 --- a/Rocket.Chat/Models/AuthSettings.swift +++ b/Rocket.Chat/Models/AuthSettings.swift @@ -18,8 +18,9 @@ final class AuthSettings: BaseModel { @objc dynamic var serverName: String? @objc dynamic var serverFaviconURL: String? - // User + // Layout: User Interface @objc dynamic var useUserRealName = false + @objc dynamic var allowSpecialCharsOnRoomNames = false // Rooms @objc dynamic var favoriteRooms = true diff --git a/Rocket.Chat/Models/Mapping/AuthSettingsModelMapping.swift b/Rocket.Chat/Models/Mapping/AuthSettingsModelMapping.swift index 756b884289..740faf2d31 100644 --- a/Rocket.Chat/Models/Mapping/AuthSettingsModelMapping.swift +++ b/Rocket.Chat/Models/Mapping/AuthSettingsModelMapping.swift @@ -32,6 +32,8 @@ extension AuthSettings: ModelMappeable { self.useUserRealName = objectForKey(object: values, key: "UI_Use_Real_Name")?.bool ?? false + self.allowSpecialCharsOnRoomNames = objectForKey(object: values, key: "UI_Allow_room_names_with_special_chars")?.bool ?? false + self.favoriteRooms = objectForKey(object: values, key: "Favorite_Rooms")?.bool ?? true self.isUsernameEmailAuthenticationEnabled = objectForKey(object: values, key: "Accounts_ShowFormLogin")?.bool ?? true diff --git a/Rocket.Chat/Models/Subscription.swift b/Rocket.Chat/Models/Subscription.swift index 9f527b8fea..dfd83fb402 100644 --- a/Rocket.Chat/Models/Subscription.swift +++ b/Rocket.Chat/Models/Subscription.swift @@ -59,12 +59,12 @@ class Subscription: BaseModel { extension Subscription { func displayName() -> String { - if type != .directMessage { + guard let settings = AuthSettingsManager.settings else { return name } - guard let settings = AuthSettingsManager.settings else { - return name + if type != .directMessage { + return settings.allowSpecialCharsOnRoomNames && fname != "" ? fname : name } return settings.useUserRealName ? fname : name diff --git a/Rocket.ChatTests/Models/SubscriptionSpec.swift b/Rocket.ChatTests/Models/SubscriptionSpec.swift index f9dafc655e..aacdfea32a 100644 --- a/Rocket.ChatTests/Models/SubscriptionSpec.swift +++ b/Rocket.ChatTests/Models/SubscriptionSpec.swift @@ -152,4 +152,54 @@ class SubscriptionSpec: XCTestCase { XCTAssertNotEqual(group.displayName(), "GROUP", "Subscription.displayName() will always return name for groups") } + func testSubscriptionDisplayChannelNameWithSpecialChars() { + let settings = AuthSettings() + settings.allowSpecialCharsOnRoomNames = true + + AuthSettingsManager.shared.internalSettings = settings + + // Channels + let channel = Subscription() + channel.name = "special-channel" + channel.fname = "special channel" + channel.privateType = "c" + + XCTAssertEqual(channel.displayName(), "special channel", "Subscription.displayName() will return fname for channels when 'allowSpecialCharsOnRoomNames' is enabled") + XCTAssertNotEqual(channel.displayName(), "special-channel", "Subscription.displayName() will return fname for channels when 'allowSpecialCharsOnRoomNames' is enabled") + + // Groups and Private Groups + let group = Subscription() + group.name = "special-group" + group.fname = "special group" + group.privateType = "p" + + XCTAssertEqual(group.displayName(), "special group", "Subscription.displayName() will return fname for groups when 'allowSpecialCharsOnRoomNames' is enabled") + XCTAssertNotEqual(group.displayName(), "special-group", "Subscription.displayName() will return fname for groups when 'allowSpecialCharsOnRoomNames' is enabled") + } + + func testSubscriptionDisplayChannelNameWithoutSpecialChars() { + let settings = AuthSettings() + settings.allowSpecialCharsOnRoomNames = false + + AuthSettingsManager.shared.internalSettings = settings + + // Channels + let channel = Subscription() + channel.name = "special-channel" + channel.fname = "special channel" + channel.privateType = "c" + + XCTAssertEqual(channel.displayName(), "special-channel", "Subscription.displayName() will return name for channels when 'allowSpecialCharsOnRoomNames' is disabled") + XCTAssertNotEqual(channel.displayName(), "special channel", "Subscription.displayName() will return name for channels when 'allowSpecialCharsOnRoomNames' is disabled") + + // Groups and Private Groups + let group = Subscription() + group.name = "special-group" + group.fname = "special group" + group.privateType = "p" + + XCTAssertEqual(group.displayName(), "special-group", "Subscription.displayName() will return name for groups when 'allowSpecialCharsOnRoomNames' is disabled") + XCTAssertNotEqual(group.displayName(), "special group", "Subscription.displayName() will return name for groups when 'allowSpecialCharsOnRoomNames' is disabled") + } + }