diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index 99fdeebac4..fbc9d35197 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -1516,7 +1516,7 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat, Hashable { case let .direct(contact): contact.sndReady case let .group(groupInfo, groupScope): groupInfo.membership.memberActive - && (groupScope != nil || (!groupInfo.membership.memberPending && groupInfo.membership.memberRole != .observer)) + && (groupScope != nil || (!groupInfo.membership.memberPending && groupInfo.membership.memberRole >= .author)) case .local: true case .contactRequest: false case .contactConnection: false @@ -1579,7 +1579,7 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat, Hashable { switch(groupChatScope) { case .none: if groupInfo.membership.memberPending { return ("reviewed by admins", "Please contact group admin.") } - if groupInfo.membership.memberRole == .observer { + if groupInfo.membership.memberRole < .author { return groupInfo.useRelays ? ("you are subscriber", nil) : ("you are observer", "Please contact group admin.") } return nil @@ -2874,6 +2874,7 @@ public struct GroupMemberIds: Decodable, Hashable { public enum GroupMemberRole: String, Identifiable, CaseIterable, Comparable, Codable, Hashable { case relay case observer + case commenter case author case member case moderator @@ -2888,6 +2889,7 @@ public enum GroupMemberRole: String, Identifiable, CaseIterable, Comparable, Cod switch self { case .relay: return NSLocalizedString("relay", comment: "member role") case .observer: return NSLocalizedString("observer", comment: "member role") + case .commenter: return NSLocalizedString("commenter", comment: "member role") case .author: return NSLocalizedString("author", comment: "member role") case .member: return NSLocalizedString("member", comment: "member role") case .moderator: return NSLocalizedString("moderator", comment: "member role") @@ -2900,11 +2902,12 @@ public enum GroupMemberRole: String, Identifiable, CaseIterable, Comparable, Cod switch self { case .relay: 0 case .observer: 1 - case .author: 2 - case .member: 3 - case .moderator: 4 - case .admin: 5 - case .owner: 6 + case .commenter: 2 + case .author: 3 + case .member: 4 + case .moderator: 5 + case .admin: 6 + case .owner: 7 } } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt index f89a599bb4..ad6b492e43 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt @@ -1621,7 +1621,7 @@ sealed class ChatInfo: SomeChat, NamedChat { if (groupInfo.membership.memberPending) { return generalGetString(MR.strings.reviewed_by_admins) to generalGetString(MR.strings.observer_cant_send_message_desc) } - if (groupInfo.membership.memberRole == GroupMemberRole.Observer) { + if (groupInfo.membership.memberRole < GroupMemberRole.Author) { return if (groupInfo.useRelays) { generalGetString(MR.strings.you_are_subscriber) to null } else { @@ -1673,7 +1673,7 @@ sealed class ChatInfo: SomeChat, NamedChat { is Direct -> contact.sndReady is Group -> groupInfo.membership.memberActive - && (groupChatScope != null || (!groupInfo.membership.memberPending && groupInfo.membership.memberRole != GroupMemberRole.Observer)) + && (groupChatScope != null || (!groupInfo.membership.memberPending && groupInfo.membership.memberRole >= GroupMemberRole.Author)) is Local -> true is ContactRequest -> false is ContactConnection -> false @@ -2529,6 +2529,7 @@ data class GroupMemberIds( enum class GroupMemberRole(val memberRole: String) { @SerialName("relay") Relay("relay"), // order matters in comparisons @SerialName("observer") Observer("observer"), + @SerialName("commenter") Commenter("commenter"), @SerialName("author") Author("author"), @SerialName("member") Member("member"), @SerialName("moderator") Moderator("moderator"), @@ -2542,6 +2543,7 @@ enum class GroupMemberRole(val memberRole: String) { val text: String get() = when (this) { Relay -> generalGetString(MR.strings.group_member_role_relay) Observer -> generalGetString(MR.strings.group_member_role_observer) + Commenter -> generalGetString(MR.strings.group_member_role_commenter) Author -> generalGetString(MR.strings.group_member_role_author) Member -> generalGetString(MR.strings.group_member_role_member) Moderator -> generalGetString(MR.strings.group_member_role_moderator) diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index 9ea32d5131..3b3d5af785 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -1772,6 +1772,7 @@ observer + commenter author member moderator