Ver Fonte

fix action delete everyone in grouping image view

alqindiirsyam há 2 anos atrás
pai
commit
3a1554c9b2

BIN
appbuilder-ios/DigiXLite/DigiXLite.xcworkspace/xcuserdata/akhmadalqindiirsyam.xcuserdatad/UserInterfaceState.xcuserstate


+ 83 - 28
appbuilder-ios/DigiXLite/DigiXLite/Source/View/Chat/EditorPersonal.swift

@@ -1127,23 +1127,41 @@ public class EditorPersonal: UIViewController, ImageVideoPickerDelegate, UIGestu
                             }
                         }
                     }
-                    if (dataMessages.count == 0 || dataMessages.last!["f_pin"] as! String == row["f_pin"] as! String) && row["image_id"] != nil && !(row["image_id"] as! String).isEmpty && (row["message_text"] as! String).isEmpty && (row["reff_id"] as! String).isEmpty && (row["credential"] as! String) != "1" && (row["read_receipts"] as! String) != "8" {
+                    if (dataMessages.count == 0 || dataMessages.last!["f_pin"] as! String == row["f_pin"] as! String) && tempImages.count <= 30 && row["image_id"] != nil && !(row["image_id"] as! String).isEmpty && (row["message_text"] as! String).isEmpty && (row["reff_id"] as! String).isEmpty && (row["credential"] as! String) != "1" && (row["read_receipts"] as! String) != "8" {
+                        if tempImages.count != 0 && getSecondsDifferenceFromTwoDates(start: Date.init(milliseconds: Int64(tempImages.last!.time)!), end: Date.init(milliseconds: Int64(row["server_date"] as! String)!))/60 >= 11 {
+                            if tempImages.count >= 4 {
+                                groupImages[tempImages[0].messageId] = tempImages
+                                if let idxTemp = dataMessages.firstIndex(where: { $0["message_id"] as! String == tempImages[0].messageId }) {
+                                    for _ in 1..<tempImages.count {
+                                        dataMessages.remove(at: idxTemp + 1)
+                                    }
+                                }
+                            }
+                            tempImages.removeAll()
+                        }
                         tempImages.append(ImageGrouping(messageId: row["message_id"] as! String, thumbId: row["thumb_id"] as! String, imageId: row["image_id"] as! String, status: row["status"] as! String, time: row["server_date"] as! String, lPin: row["l_pin"] as! String, dataMessage: row, dataPerson: dataPerson))
                     } else if tempImages.count >= 4 {
                         groupImages[tempImages[0].messageId] = tempImages
-                        for _ in 1..<tempImages.count {
-                            dataMessages.removeLast()
+                        if let idxTemp = dataMessages.firstIndex(where: { $0["message_id"] as! String == tempImages[0].messageId }) {
+                            for _ in 1..<tempImages.count {
+                                dataMessages.remove(at: idxTemp + 1)
+                            }
                         }
                         tempImages.removeAll()
-                    } else if tempImages.count > 0 {
+                    } else if tempImages.count != 0 {
                         tempImages.removeAll()
                     }
                     dataMessages.append(row)
                 }
                 if tempImages.count >= 4 {
+                    if tempImages.count > 30 {
+                        tempImages.removeSubrange(30..<tempImages.count)
+                    }
                     groupImages[tempImages[0].messageId] = tempImages
-                    for _ in 1..<tempImages.count {
-                        dataMessages.removeLast()
+                    if let idxTemp = dataMessages.firstIndex(where: { $0["message_id"] as! String == tempImages[0].messageId }) {
+                        for _ in 1..<tempImages.count {
+                            dataMessages.remove(at: idxTemp + 1)
+                        }
                     }
                 }
                 cursorData.close()
@@ -1152,12 +1170,12 @@ public class EditorPersonal: UIViewController, ImageVideoPickerDelegate, UIGestu
     }
     
     func getSecondsDifferenceFromTwoDates(start: Date, end: Date) -> Int {
-           let diff = Int(end.timeIntervalSince1970 - start.timeIntervalSince1970)
+        let diff = Int(end.timeIntervalSince1970 - start.timeIntervalSince1970)
 
-           let hours = diff / 3600
-           let seconds = (diff - hours * 3600)
-           return seconds
-       }
+        let hours = diff / 3600
+        let seconds = (diff - hours * 3600)
+        return seconds
+    }
     
     func chatDate(stringDate: String) -> String {
         let date = Date(milliseconds: Int64(stringDate)!)
@@ -1648,6 +1666,7 @@ public class EditorPersonal: UIViewController, ImageVideoPickerDelegate, UIGestu
                         if let idxMessageIdParent = self.groupImages.firstIndex(where: { $0.value.contains(where: { $0.messageId == chatData[CoreMessage_TMessageKey.MESSAGE_ID]! }) }) {
                             if let idxInImages = self.groupImages[idxMessageIdParent].value.firstIndex(where: { $0.messageId == chatData[CoreMessage_TMessageKey.MESSAGE_ID]! }) {
                                 self.groupImages[idxMessageIdParent].value[idxInImages].status = chatData[CoreMessage_TMessageKey.STATUS]!
+                                self.groupImages[idxMessageIdParent].value[idxInImages].dataMessage["status"] = chatData[CoreMessage_TMessageKey.STATUS]!
                             }
                             idx = self.dataMessages.firstIndex(where: { $0["message_id"] as? String == self.groupImages[idxMessageIdParent].key })
                         }
@@ -1684,6 +1703,7 @@ public class EditorPersonal: UIViewController, ImageVideoPickerDelegate, UIGestu
                         if let idxMessageIdParent = self.groupImages.firstIndex(where: { $0.value.contains(where: { $0.messageId == chatData["message_id"]! }) }) {
                             if let idxInImages = self.groupImages[idxMessageIdParent].value.firstIndex(where: { $0.messageId == chatData["message_id"]! }) {
                                 self.groupImages[idxMessageIdParent].value[idxInImages].status = chatData[CoreMessage_TMessageKey.STATUS]!
+                                self.groupImages[idxMessageIdParent].value[idxInImages].dataMessage["status"] = chatData[CoreMessage_TMessageKey.STATUS]!
                             }
                             idx = self.dataMessages.firstIndex(where: { $0["message_id"] as? String == self.groupImages[idxMessageIdParent].key })
                         }
@@ -1721,6 +1741,7 @@ public class EditorPersonal: UIViewController, ImageVideoPickerDelegate, UIGestu
                         if let idxMessageIdParent = self.groupImages.firstIndex(where: { $0.value.contains(where: { $0.messageId == messageId }) }) {
                             if let idxInImages = self.groupImages[idxMessageIdParent].value.firstIndex(where: { $0.messageId == messageId }) {
                                 self.groupImages[idxMessageIdParent].value[idxInImages].status = chatData[CoreMessage_TMessageKey.STATUS]!
+                                self.groupImages[idxMessageIdParent].value[idxInImages].dataMessage["status"] = chatData[CoreMessage_TMessageKey.STATUS]!
                             }
                             idx = self.dataMessages.firstIndex(where: { $0["message_id"] as? String == self.groupImages[idxMessageIdParent].key })
                         }
@@ -3839,7 +3860,8 @@ extension EditorPersonal: UIContextMenuInteractionDelegate {
             let idMe = UserDefaults.standard.string(forKey: "me") as String?
             let dataFilterFpin = dataMessages.filter({ $0["l_pin"] as? String == idMe})
             let dataFilterLock = dataMessages.filter({ $0["lock"] as? String == "1" || $0["lock"] as? String == "2" })
-            if dataFilterFpin.count == 0 && dataFilterLock.count == 0 {
+            let statusDataRead = dataMessages.filter({ Int($0["status"] as! String)! >= 4})
+            if dataFilterFpin.count == 0 && dataFilterLock.count == 0 && statusDataRead.count == 0 {
                 if let action = self.actionDelete(for: "everyone", title: "Delete".localized() + " \(countSelected) " + "For Everyone".localized(), dataMessages: dataMessages) {
                     alertController.addAction(action)
                 }
@@ -5515,12 +5537,46 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
             if replyData.count == 0 {
                 if updatedData.count != 0 && !isUpdateDelete {
                     groupImages[sender.listImageFromGrouping[0].messageId] = updatedData
-                    DispatchQueue.main.async { [self] in
-                        tableChatView.reloadData()
-                    }
-                } else {
-                    if updatedData.filter({ $0.dataMessage["lock"] as? String == "1" }).count != 0 {
-                        
+                } else if updatedData.count > 0 {
+                    let deletedForEveryoneData = updatedData.filter({ $0.dataMessage["lock"] as? String == "1" })
+                    if deletedForEveryoneData.count != 0 {
+                        if groupImages[sender.listImageFromGrouping[0].messageId] != nil {
+                            var dataWillEmpty = updatedData
+                            while dataWillEmpty.count > 0 {
+                                if let lastIdx = dataWillEmpty.lastIndex(where: { $0.dataMessage["lock"] as? String == "1" }) {
+                                    if let idx = self.dataMessages.firstIndex(where: { $0["message_id"] as! String == sender.listImageFromGrouping[0].messageId }) {
+                                        if dataWillEmpty[lastIdx].messageId == sender.listImageFromGrouping[0].messageId {
+                                            self.dataMessages.remove(at: idx)
+                                            self.dataMessages.insert(dataWillEmpty[lastIdx].dataMessage, at: idx)
+                                        } else {
+                                            self.dataMessages.insert(dataWillEmpty[lastIdx].dataMessage, at: idx + 1)
+                                        }
+                                        let subData = Array(updatedData[lastIdx+1..<dataWillEmpty.count])
+                                        if subData.count >= 4 {
+                                            groupImages[subData[0].messageId] = subData
+                                            self.dataMessages.insert(subData[0].dataMessage, at: lastIdx + 1)
+                                        } else {
+                                            if subData.count > 0 {
+                                                self.dataMessages.insert(contentsOf: subData.map({ $0.dataMessage }), at: idx + (dataWillEmpty[lastIdx].messageId == sender.listImageFromGrouping[0].messageId ? 1 : 2))
+                                            }
+                                        }
+                                    }
+                                    dataWillEmpty.removeSubrange(lastIdx..<dataWillEmpty.count)
+                                } else if dataWillEmpty.count >= 4 {
+                                    groupImages[dataWillEmpty[0].messageId] = dataWillEmpty
+                                    dataWillEmpty.removeAll()
+                                } else {
+                                    if let idx = self.dataMessages.firstIndex(where: { $0["message_id"] as! String == sender.listImageFromGrouping[0].messageId }) {
+                                        self.dataMessages.remove(at: idx)
+                                        self.dataMessages.insert(contentsOf: dataWillEmpty.map({ $0.dataMessage }), at: idx)
+                                        groupImages.removeValue(forKey: sender.listImageFromGrouping[0].messageId)
+                                    }
+                                    dataWillEmpty.removeAll()
+                                }
+                            }
+                        } else {
+                            
+                        }
                     } else {
                         if updatedData.count >= 4 {
                             if updatedData[0].messageId == sender.listImageFromGrouping[0].messageId {
@@ -5534,20 +5590,19 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                                 }
                             }
                         } else {
-                            if updatedData.count > 0 {
-                                if let idx = self.dataMessages.firstIndex(where: { $0["message_id"] as! String == sender.listImageFromGrouping[0].messageId }) {
-                                    self.dataMessages.remove(at: idx)
-                                    let dataMessageInGrouping = updatedData.map({ $0.dataMessage })
-                                    self.dataMessages.insert(contentsOf: dataMessageInGrouping, at: idx)
-                                }
-                            } else {
+                            if let idx = self.dataMessages.firstIndex(where: { $0["message_id"] as! String == sender.listImageFromGrouping[0].messageId }) {
                                 groupImages.removeValue(forKey: sender.listImageFromGrouping[0].messageId)
-                                if let idx = self.dataMessages.firstIndex(where: { $0["message_id"] as! String == sender.listImageFromGrouping[0].messageId }) {
-                                    self.dataMessages.remove(at: idx)
-                                }
+                                self.dataMessages.remove(at: idx)
+                                let dataMessageInGrouping = updatedData.map({ $0.dataMessage })
+                                self.dataMessages.insert(contentsOf: dataMessageInGrouping, at: idx)
                             }
                         }
                     }
+                } else {
+                    groupImages.removeValue(forKey: sender.listImageFromGrouping[0].messageId)
+                    if let idx = self.dataMessages.firstIndex(where: { $0["message_id"] as! String == sender.listImageFromGrouping[0].messageId }) {
+                        self.dataMessages.remove(at: idx)
+                    }
                 }
                 DispatchQueue.main.async { [self] in
                     tableChatView.reloadData()

+ 11 - 4
appbuilder-ios/DigiXLite/DigiXLite/Source/View/Chat/ListGroupImages.swift

@@ -69,6 +69,7 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
                 messageId = messageId.contains("-2") ? String(messageId.split(separator: ",")[1]) : messageId
                 if let idx = listGroupingImages.firstIndex(where: { $0.messageId == messageId }) {
                     listGroupingImages[idx].status = dataMessage.getBody(key: CoreMessage_TMessageKey.STATUS)
+                    listGroupingImages[idx].dataMessage["status"] = dataMessage.getBody(key: CoreMessage_TMessageKey.STATUS)
                     tableViewImages.reloadRows(at: [IndexPath(row: idx, section: 0)], with: .none)
                 }
             }
@@ -492,7 +493,7 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
             self.present(contactChatNav, animated: true, completion: nil)
         } else if deleteSession {
             let tempDataMessages = listGroupingImages.filter({ $0.isSelected })
-            var countSelected = tempDataMessages.count
+            let countSelected = tempDataMessages.count
             if countSelected == 0 {
                 return
             }
@@ -502,7 +503,8 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
                 alertController.addAction(action)
             }
             let idMe = UserDefaults.standard.string(forKey: "me") as String?
-            if tempDataMessages[0].dataMessage["f_pin"] as? String == idMe {
+            let dataStatusRead = tempDataMessages.filter({ $0.status == "4" })
+            if tempDataMessages[0].dataMessage["f_pin"] as? String == idMe && dataStatusRead.count == 0 {
                 if let action = self.actionDelete(for: "everyone", title: "Delete".localized() + " \(countSelected) " + "For Everyone".localized(), dataMessages: tempDataMessages) {
                     alertController.addAction(action)
                 }
@@ -514,16 +516,21 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
     
     private func actionDelete(for type: String, title: String, dataMessages: [ImageGrouping]) -> UIAlertAction? {
         return UIAlertAction(title: title, style: .destructive) { [unowned self] _ in
+            let tempDataDelete = listGroupingImages
             for i in 0..<dataMessages.count {
                 if (type == "me") {
                     self.deleteMessage(l_pin: dataMessages[i].lPin, message_id: dataMessages[i].messageId, scope: "3", type: "1", chat: "")
                     listGroupingImages.removeAll(where: { $0.messageId == dataMessages[i].messageId })
                 } else {
-                    
+                    self.deleteMessage(l_pin: dataMessages[i].lPin, message_id: dataMessages[i].messageId, scope: "3", type: "2", chat: "")
+                    if let idxTemp = tempDataDelete!.firstIndex(where: { $0.messageId == dataMessages[i].messageId}) {
+                        tempDataDelete![idxTemp].dataMessage["lock"] = "1"
+                    }
+                    listGroupingImages.removeAll(where: { $0.messageId == dataMessages[i].messageId })
                 }
             }
             centeredTitleView.subtitleLabel.text = String(listGroupingImages.count) + " " + "images".localized()
-            updateEditor!(listGroupingImages, [:], true)
+            updateEditor!(type == "me" ? listGroupingImages : tempDataDelete!, [:], true)
             doneAction()
         }
     }

+ 83 - 28
appbuilder-ios/NexilisLite/NexilisLite/Source/View/Chat/EditorPersonal.swift

@@ -1128,23 +1128,41 @@ public class EditorPersonal: UIViewController, ImageVideoPickerDelegate, UIGestu
                             }
                         }
                     }
-                    if (dataMessages.count == 0 || dataMessages.last!["f_pin"] as! String == row["f_pin"] as! String) && row["image_id"] != nil && !(row["image_id"] as! String).isEmpty && (row["message_text"] as! String).isEmpty && (row["reff_id"] as! String).isEmpty && (row["credential"] as! String) != "1" && (row["read_receipts"] as! String) != "8" {
+                    if (dataMessages.count == 0 || dataMessages.last!["f_pin"] as! String == row["f_pin"] as! String) && tempImages.count <= 30 && row["image_id"] != nil && !(row["image_id"] as! String).isEmpty && (row["message_text"] as! String).isEmpty && (row["reff_id"] as! String).isEmpty && (row["credential"] as! String) != "1" && (row["read_receipts"] as! String) != "8" {
+                        if tempImages.count != 0 && getSecondsDifferenceFromTwoDates(start: Date.init(milliseconds: Int64(tempImages.last!.time)!), end: Date.init(milliseconds: Int64(row["server_date"] as! String)!))/60 >= 11 {
+                            if tempImages.count >= 4 {
+                                groupImages[tempImages[0].messageId] = tempImages
+                                if let idxTemp = dataMessages.firstIndex(where: { $0["message_id"] as! String == tempImages[0].messageId }) {
+                                    for _ in 1..<tempImages.count {
+                                        dataMessages.remove(at: idxTemp + 1)
+                                    }
+                                }
+                            }
+                            tempImages.removeAll()
+                        }
                         tempImages.append(ImageGrouping(messageId: row["message_id"] as! String, thumbId: row["thumb_id"] as! String, imageId: row["image_id"] as! String, status: row["status"] as! String, time: row["server_date"] as! String, lPin: row["l_pin"] as! String, dataMessage: row, dataPerson: dataPerson))
                     } else if tempImages.count >= 4 {
                         groupImages[tempImages[0].messageId] = tempImages
-                        for _ in 1..<tempImages.count {
-                            dataMessages.removeLast()
+                        if let idxTemp = dataMessages.firstIndex(where: { $0["message_id"] as! String == tempImages[0].messageId }) {
+                            for _ in 1..<tempImages.count {
+                                dataMessages.remove(at: idxTemp + 1)
+                            }
                         }
                         tempImages.removeAll()
-                    } else if tempImages.count > 0 {
+                    } else if tempImages.count != 0 {
                         tempImages.removeAll()
                     }
                     dataMessages.append(row)
                 }
                 if tempImages.count >= 4 {
+                    if tempImages.count > 30 {
+                        tempImages.removeSubrange(30..<tempImages.count)
+                    }
                     groupImages[tempImages[0].messageId] = tempImages
-                    for _ in 1..<tempImages.count {
-                        dataMessages.removeLast()
+                    if let idxTemp = dataMessages.firstIndex(where: { $0["message_id"] as! String == tempImages[0].messageId }) {
+                        for _ in 1..<tempImages.count {
+                            dataMessages.remove(at: idxTemp + 1)
+                        }
                     }
                 }
                 cursorData.close()
@@ -1153,12 +1171,12 @@ public class EditorPersonal: UIViewController, ImageVideoPickerDelegate, UIGestu
     }
     
     func getSecondsDifferenceFromTwoDates(start: Date, end: Date) -> Int {
-           let diff = Int(end.timeIntervalSince1970 - start.timeIntervalSince1970)
+        let diff = Int(end.timeIntervalSince1970 - start.timeIntervalSince1970)
 
-           let hours = diff / 3600
-           let seconds = (diff - hours * 3600)
-           return seconds
-       }
+        let hours = diff / 3600
+        let seconds = (diff - hours * 3600)
+        return seconds
+    }
     
     func chatDate(stringDate: String) -> String {
         let date = Date(milliseconds: Int64(stringDate)!)
@@ -1649,6 +1667,7 @@ public class EditorPersonal: UIViewController, ImageVideoPickerDelegate, UIGestu
                         if let idxMessageIdParent = self.groupImages.firstIndex(where: { $0.value.contains(where: { $0.messageId == chatData[CoreMessage_TMessageKey.MESSAGE_ID]! }) }) {
                             if let idxInImages = self.groupImages[idxMessageIdParent].value.firstIndex(where: { $0.messageId == chatData[CoreMessage_TMessageKey.MESSAGE_ID]! }) {
                                 self.groupImages[idxMessageIdParent].value[idxInImages].status = chatData[CoreMessage_TMessageKey.STATUS]!
+                                self.groupImages[idxMessageIdParent].value[idxInImages].dataMessage["status"] = chatData[CoreMessage_TMessageKey.STATUS]!
                             }
                             idx = self.dataMessages.firstIndex(where: { $0["message_id"] as? String == self.groupImages[idxMessageIdParent].key })
                         }
@@ -1685,6 +1704,7 @@ public class EditorPersonal: UIViewController, ImageVideoPickerDelegate, UIGestu
                         if let idxMessageIdParent = self.groupImages.firstIndex(where: { $0.value.contains(where: { $0.messageId == chatData["message_id"]! }) }) {
                             if let idxInImages = self.groupImages[idxMessageIdParent].value.firstIndex(where: { $0.messageId == chatData["message_id"]! }) {
                                 self.groupImages[idxMessageIdParent].value[idxInImages].status = chatData[CoreMessage_TMessageKey.STATUS]!
+                                self.groupImages[idxMessageIdParent].value[idxInImages].dataMessage["status"] = chatData[CoreMessage_TMessageKey.STATUS]!
                             }
                             idx = self.dataMessages.firstIndex(where: { $0["message_id"] as? String == self.groupImages[idxMessageIdParent].key })
                         }
@@ -1722,6 +1742,7 @@ public class EditorPersonal: UIViewController, ImageVideoPickerDelegate, UIGestu
                         if let idxMessageIdParent = self.groupImages.firstIndex(where: { $0.value.contains(where: { $0.messageId == messageId }) }) {
                             if let idxInImages = self.groupImages[idxMessageIdParent].value.firstIndex(where: { $0.messageId == messageId }) {
                                 self.groupImages[idxMessageIdParent].value[idxInImages].status = chatData[CoreMessage_TMessageKey.STATUS]!
+                                self.groupImages[idxMessageIdParent].value[idxInImages].dataMessage["status"] = chatData[CoreMessage_TMessageKey.STATUS]!
                             }
                             idx = self.dataMessages.firstIndex(where: { $0["message_id"] as? String == self.groupImages[idxMessageIdParent].key })
                         }
@@ -3849,7 +3870,8 @@ extension EditorPersonal: UIContextMenuInteractionDelegate {
             let idMe = UserDefaults.standard.string(forKey: "me") as String?
             let dataFilterFpin = dataMessages.filter({ $0["l_pin"] as? String == idMe})
             let dataFilterLock = dataMessages.filter({ $0["lock"] as? String == "1" || $0["lock"] as? String == "2" })
-            if dataFilterFpin.count == 0 && dataFilterLock.count == 0 {
+            let statusDataRead = dataMessages.filter({ Int($0["status"] as! String)! >= 4})
+            if dataFilterFpin.count == 0 && dataFilterLock.count == 0 && statusDataRead.count == 0 {
                 if let action = self.actionDelete(for: "everyone", title: "Delete".localized() + " \(countSelected) " + "For Everyone".localized(), dataMessages: dataMessages) {
                     alertController.addAction(action)
                 }
@@ -5536,12 +5558,46 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
             if replyData.count == 0 {
                 if updatedData.count != 0 && !isUpdateDelete {
                     groupImages[sender.listImageFromGrouping[0].messageId] = updatedData
-                    DispatchQueue.main.async { [self] in
-                        tableChatView.reloadData()
-                    }
-                } else {
-                    if updatedData.filter({ $0.dataMessage["lock"] as? String == "1" }).count != 0 {
-                        
+                } else if updatedData.count > 0 {
+                    let deletedForEveryoneData = updatedData.filter({ $0.dataMessage["lock"] as? String == "1" })
+                    if deletedForEveryoneData.count != 0 {
+                        if groupImages[sender.listImageFromGrouping[0].messageId] != nil {
+                            var dataWillEmpty = updatedData
+                            while dataWillEmpty.count > 0 {
+                                if let lastIdx = dataWillEmpty.lastIndex(where: { $0.dataMessage["lock"] as? String == "1" }) {
+                                    if let idx = self.dataMessages.firstIndex(where: { $0["message_id"] as! String == sender.listImageFromGrouping[0].messageId }) {
+                                        if dataWillEmpty[lastIdx].messageId == sender.listImageFromGrouping[0].messageId {
+                                            self.dataMessages.remove(at: idx)
+                                            self.dataMessages.insert(dataWillEmpty[lastIdx].dataMessage, at: idx)
+                                        } else {
+                                            self.dataMessages.insert(dataWillEmpty[lastIdx].dataMessage, at: idx + 1)
+                                        }
+                                        let subData = Array(updatedData[lastIdx+1..<dataWillEmpty.count])
+                                        if subData.count >= 4 {
+                                            groupImages[subData[0].messageId] = subData
+                                            self.dataMessages.insert(subData[0].dataMessage, at: lastIdx + 1)
+                                        } else {
+                                            if subData.count > 0 {
+                                                self.dataMessages.insert(contentsOf: subData.map({ $0.dataMessage }), at: idx + (dataWillEmpty[lastIdx].messageId == sender.listImageFromGrouping[0].messageId ? 1 : 2))
+                                            }
+                                        }
+                                    }
+                                    dataWillEmpty.removeSubrange(lastIdx..<dataWillEmpty.count)
+                                } else if dataWillEmpty.count >= 4 {
+                                    groupImages[dataWillEmpty[0].messageId] = dataWillEmpty
+                                    dataWillEmpty.removeAll()
+                                } else {
+                                    if let idx = self.dataMessages.firstIndex(where: { $0["message_id"] as! String == sender.listImageFromGrouping[0].messageId }) {
+                                        self.dataMessages.remove(at: idx)
+                                        self.dataMessages.insert(contentsOf: dataWillEmpty.map({ $0.dataMessage }), at: idx)
+                                        groupImages.removeValue(forKey: sender.listImageFromGrouping[0].messageId)
+                                    }
+                                    dataWillEmpty.removeAll()
+                                }
+                            }
+                        } else {
+                            
+                        }
                     } else {
                         if updatedData.count >= 4 {
                             if updatedData[0].messageId == sender.listImageFromGrouping[0].messageId {
@@ -5555,20 +5611,19 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                                 }
                             }
                         } else {
-                            if updatedData.count > 0 {
-                                if let idx = self.dataMessages.firstIndex(where: { $0["message_id"] as! String == sender.listImageFromGrouping[0].messageId }) {
-                                    self.dataMessages.remove(at: idx)
-                                    let dataMessageInGrouping = updatedData.map({ $0.dataMessage })
-                                    self.dataMessages.insert(contentsOf: dataMessageInGrouping, at: idx)
-                                }
-                            } else {
+                            if let idx = self.dataMessages.firstIndex(where: { $0["message_id"] as! String == sender.listImageFromGrouping[0].messageId }) {
                                 groupImages.removeValue(forKey: sender.listImageFromGrouping[0].messageId)
-                                if let idx = self.dataMessages.firstIndex(where: { $0["message_id"] as! String == sender.listImageFromGrouping[0].messageId }) {
-                                    self.dataMessages.remove(at: idx)
-                                }
+                                self.dataMessages.remove(at: idx)
+                                let dataMessageInGrouping = updatedData.map({ $0.dataMessage })
+                                self.dataMessages.insert(contentsOf: dataMessageInGrouping, at: idx)
                             }
                         }
                     }
+                } else {
+                    groupImages.removeValue(forKey: sender.listImageFromGrouping[0].messageId)
+                    if let idx = self.dataMessages.firstIndex(where: { $0["message_id"] as! String == sender.listImageFromGrouping[0].messageId }) {
+                        self.dataMessages.remove(at: idx)
+                    }
                 }
                 DispatchQueue.main.async { [self] in
                     tableChatView.reloadData()

+ 11 - 4
appbuilder-ios/NexilisLite/NexilisLite/Source/View/Chat/ListGroupImages.swift

@@ -69,6 +69,7 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
                 messageId = messageId.contains("-2") ? String(messageId.split(separator: ",")[1]) : messageId
                 if let idx = listGroupingImages.firstIndex(where: { $0.messageId == messageId }) {
                     listGroupingImages[idx].status = dataMessage.getBody(key: CoreMessage_TMessageKey.STATUS)
+                    listGroupingImages[idx].dataMessage["status"] = dataMessage.getBody(key: CoreMessage_TMessageKey.STATUS)
                     tableViewImages.reloadRows(at: [IndexPath(row: idx, section: 0)], with: .none)
                 }
             }
@@ -492,7 +493,7 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
             self.present(contactChatNav, animated: true, completion: nil)
         } else if deleteSession {
             let tempDataMessages = listGroupingImages.filter({ $0.isSelected })
-            var countSelected = tempDataMessages.count
+            let countSelected = tempDataMessages.count
             if countSelected == 0 {
                 return
             }
@@ -502,7 +503,8 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
                 alertController.addAction(action)
             }
             let idMe = UserDefaults.standard.string(forKey: "me") as String?
-            if tempDataMessages[0].dataMessage["f_pin"] as? String == idMe {
+            let dataStatusRead = tempDataMessages.filter({ $0.status == "4" })
+            if tempDataMessages[0].dataMessage["f_pin"] as? String == idMe && dataStatusRead.count == 0 {
                 if let action = self.actionDelete(for: "everyone", title: "Delete".localized() + " \(countSelected) " + "For Everyone".localized(), dataMessages: tempDataMessages) {
                     alertController.addAction(action)
                 }
@@ -514,16 +516,21 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
     
     private func actionDelete(for type: String, title: String, dataMessages: [ImageGrouping]) -> UIAlertAction? {
         return UIAlertAction(title: title, style: .destructive) { [unowned self] _ in
+            let tempDataDelete = listGroupingImages
             for i in 0..<dataMessages.count {
                 if (type == "me") {
                     self.deleteMessage(l_pin: dataMessages[i].lPin, message_id: dataMessages[i].messageId, scope: "3", type: "1", chat: "")
                     listGroupingImages.removeAll(where: { $0.messageId == dataMessages[i].messageId })
                 } else {
-                    
+                    self.deleteMessage(l_pin: dataMessages[i].lPin, message_id: dataMessages[i].messageId, scope: "3", type: "2", chat: "")
+                    if let idxTemp = tempDataDelete!.firstIndex(where: { $0.messageId == dataMessages[i].messageId}) {
+                        tempDataDelete![idxTemp].dataMessage["lock"] = "1"
+                    }
+                    listGroupingImages.removeAll(where: { $0.messageId == dataMessages[i].messageId })
                 }
             }
             centeredTitleView.subtitleLabel.text = String(listGroupingImages.count) + " " + "images".localized()
-            updateEditor!(listGroupingImages, [:], true)
+            updateEditor!(type == "me" ? listGroupingImages : tempDataDelete!, [:], true)
             doneAction()
         }
     }