|
@@ -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()
|