Ver código fonte

show already added members as preselected contacts in existing groups, remove members on deselection

cyberta 5 anos atrás
pai
commit
8dd1bb12f9

+ 2 - 6
deltachat-ios/Controller/AddGroupMembersViewController.swift

@@ -72,7 +72,7 @@ class AddGroupMembersViewController: GroupMembersViewController {
         super.init()
         isVerifiedGroup = chat?.isVerified ?? false
         numberOfSections = sections.count
-        selectedContactIds = []
+        selectedContactIds = Set(dcContext.getChat(chatId: chatId).contactIds)
     }
 
     required init?(coder _: NSCoder) {
@@ -102,7 +102,6 @@ class AddGroupMembersViewController: GroupMembersViewController {
                     self.contactIds = self.loadMemberCandidates()
                     if self.contactIds.contains(contactId) {
                         self.selectedContactIds.insert(contactId)
-
                         self.tableView.reloadData()
                     }
 
@@ -182,10 +181,7 @@ class AddGroupMembersViewController: GroupMembersViewController {
         if isVerifiedGroup {
             flags |= DC_GCL_VERIFIED_ONLY
         }
-        var contactIds = dcContext.getContacts(flags: flags)
-        let memberSet = Set(chatMemberIds)
-        contactIds.removeAll(where: { memberSet.contains($0)})
-        return Array(contactIds)
+        return dcContext.getContacts(flags: flags)
     }
 
     private func showNewContactController() {

+ 6 - 0
deltachat-ios/Controller/GroupChatDetailViewController.swift

@@ -273,6 +273,12 @@ class GroupChatDetailViewController: UIViewController {
         let groupMemberViewController = AddGroupMembersViewController(chatId: chatId)
         groupMemberViewController.onMembersSelected = { [weak self] (memberIds: Set<Int>) -> Void in
             guard let self = self else { return }
+            let chat = self.dcContext.getChat(chatId: chatId)
+            var chatMembersToRemove = chat.contactIds
+            chatMembersToRemove.removeAll(where: { memberIds.contains($0)})
+            for contactId in chatMembersToRemove {
+                _ = self.dcContext.removeContactFromChat(chatId: chatId, contactId: contactId)
+            }
             for contactId in memberIds {
                 _ = self.dcContext.addContactToChat(chatId: chatId, contactId: contactId)
             }