diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt index b3e2a681fa..b9dc4b897f 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt @@ -599,19 +599,13 @@ open class ChatController(private val ctrl: ChatCtrl, val ntfManager: NtfManager return null } - suspend fun apiAddMember(groupId: Long, contactId: Long, memberRole: GroupMemberRole) { + suspend fun apiAddMember(groupId: Long, contactId: Long, memberRole: GroupMemberRole): GroupMember? { val r = sendCmd(CC.ApiAddMember(groupId, contactId, memberRole)) - if (r is CR.SentGroupInvitation) return + if (r is CR.SentGroupInvitation) return r.member Log.e(TAG, "apiAddMember bad response: ${r.responseType} ${r.details}") + return null } -// suspend fun apiAddMember(groupId: Long, contactId: Long, memberRole: GroupMemberRole): GroupMember? { -// val r = sendCmd(CC.ApiAddMember(groupId, contactId, memberRole)) -// if (r is CR.SentGroupInvitation) return r.member -// Log.e(TAG, "apiAddMember bad response: ${r.responseType} ${r.details}") -// return null -// } - suspend fun apiJoinGroup(groupId: Long) { val r = sendCmd(CC.ApiJoinGroup(groupId)) when (r) { @@ -1407,8 +1401,7 @@ sealed class CR { @Serializable @SerialName("contactsList") class ContactsList(val contacts: List): CR() // group events @Serializable @SerialName("groupCreated") class GroupCreated(val groupInfo: GroupInfo): CR() - @Serializable @SerialName("sentGroupInvitation") class SentGroupInvitation(val groupInfo: GroupInfo, val contact: Contact): CR() -// @Serializable @SerialName("sentGroupInvitation") class SentGroupInvitation(val groupInfo: GroupInfo, val contact: Contact, val member: GroupMember): CR() + @Serializable @SerialName("sentGroupInvitation") class SentGroupInvitation(val groupInfo: GroupInfo, val contact: Contact, val member: GroupMember): CR() @Serializable @SerialName("userAcceptedGroupSent") class UserAcceptedGroupSent (val groupInfo: GroupInfo): CR() @Serializable @SerialName("userDeletedMember") class UserDeletedMember(val groupInfo: GroupInfo, val member: GroupMember): CR() @Serializable @SerialName("leftMemberUser") class LeftMemberUser(val groupInfo: GroupInfo): CR() @@ -1577,7 +1570,7 @@ sealed class CR { is ChatItemDeleted -> "deletedChatItem:\n${json.encodeToString(deletedChatItem)}\ntoChatItem:\n${json.encodeToString(toChatItem)}" is ContactsList -> json.encodeToString(contacts) is GroupCreated -> json.encodeToString(groupInfo) - is SentGroupInvitation -> "groupInfo: $groupInfo\ncontact: $contact" + is SentGroupInvitation -> "groupInfo: $groupInfo\ncontact: $contact\nmember: $member" is UserAcceptedGroupSent -> json.encodeToString(groupInfo) is UserDeletedMember -> "groupInfo: $groupInfo\nmember: $member" is LeftMemberUser -> json.encodeToString(groupInfo) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt index 57dc06f4c3..b88c0b5470 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt @@ -41,8 +41,10 @@ fun AddGroupMembersView(groupInfo: GroupInfo, chatModel: ChatModel, close: () -> inviteMembers = { withApi { selectedContacts.forEach { - chatModel.controller.apiAddMember(groupInfo.groupId, it, selectedRole.value) - // chatModel.upsertGroupMember(groupInfo, member) + val member = chatModel.controller.apiAddMember(groupInfo.groupId, it, selectedRole.value) + if (member != null) { + chatModel.upsertGroupMember(groupInfo, member) + } } close.invoke() } diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index fd114528a9..d7dd4c7b9d 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -567,18 +567,12 @@ func apiNewGroup(_ p: GroupProfile) throws -> GroupInfo { throw r } -func apiAddMember(_ groupId: Int64, _ contactId: Int64, _ memberRole: GroupMemberRole) async throws { +func apiAddMember(_ groupId: Int64, _ contactId: Int64, _ memberRole: GroupMemberRole) async throws -> GroupMember { let r = await chatSendCmd(.apiAddMember(groupId: groupId, contactId: contactId, memberRole: memberRole)) - if case .sentGroupInvitation = r { return } + if case let .sentGroupInvitation(_, _, member) = r { return member } throw r } -//func apiAddMember(_ groupId: Int64, _ contactId: Int64, _ memberRole: GroupMemberRole) async throws -> GroupMember { -// let r = await chatSendCmd(.apiAddMember(groupId: groupId, contactId: contactId, memberRole: memberRole)) -// if case let .sentGroupInvitation(_, _, member) = r { return member } -// throw r -//} - enum JoinGroupResult { case joined(groupInfo: GroupInfo) case invitationRemoved diff --git a/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift b/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift index 7e4b9cbafa..d001d9ff0c 100644 --- a/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift +++ b/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift @@ -84,8 +84,8 @@ struct AddGroupMembersView: View { Task { do { for contactId in selectedContacts { - try await apiAddMember(groupInfo.groupId, contactId, selectedRole) - // await MainActor.run { ChatModel.shared.upsertGroupMember(groupInfo, member) } + let member = try await apiAddMember(groupInfo.groupId, contactId, selectedRole) + await MainActor.run { _ = ChatModel.shared.upsertGroupMember(groupInfo, member) } } await MainActor.run { dismiss() } if let cb = addedMembersCb { cb(selectedContacts) } diff --git a/apps/ios/SimpleXChat/APITypes.swift b/apps/ios/SimpleXChat/APITypes.swift index 61e32fcef3..1fc620c0a3 100644 --- a/apps/ios/SimpleXChat/APITypes.swift +++ b/apps/ios/SimpleXChat/APITypes.swift @@ -255,8 +255,7 @@ public enum ChatResponse: Decodable, Error { case contactsList(contacts: [Contact]) // group events case groupCreated(groupInfo: GroupInfo) - case sentGroupInvitation(groupInfo: GroupInfo, contact: Contact) -// case sentGroupInvitation(groupInfo: GroupInfo, contact: Contact, member: GroupMember) + case sentGroupInvitation(groupInfo: GroupInfo, contact: Contact, member: GroupMember) case userAcceptedGroupSent(groupInfo: GroupInfo) case userDeletedMember(groupInfo: GroupInfo, member: GroupMember) case leftMemberUser(groupInfo: GroupInfo) @@ -437,7 +436,7 @@ public enum ChatResponse: Decodable, Error { case let .chatItemDeleted(deletedChatItem, toChatItem): return "deletedChatItem:\n\(String(describing: deletedChatItem))\ntoChatItem:\n\(String(describing: toChatItem))" case let .contactsList(contacts): return String(describing: contacts) case let .groupCreated(groupInfo): return String(describing: groupInfo) - case let .sentGroupInvitation(groupInfo, contact): return "groupInfo: \(groupInfo)\ncontact: \(contact)" + case let .sentGroupInvitation(groupInfo, contact, member): return "groupInfo: \(groupInfo)\ncontact: \(contact)\nmember: \(member)" case let .userAcceptedGroupSent(groupInfo): return String(describing: groupInfo) case let .userDeletedMember(groupInfo, member): return "groupInfo: \(groupInfo)\nmember: \(member)" case let .leftMemberUser(groupInfo): return String(describing: groupInfo)