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