Browse Source

add action reply in grouping image view

alqindiirsyam 2 years ago
parent
commit
b29066bc75

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


+ 8 - 8
appbuilder-ios/DigiXLite/DigiXLite/Source/View/Chat/EditorGroup.swift

@@ -3443,7 +3443,7 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
         let containerViewFile = UIView()
         
         if (thumbChat != "" && (dataMessages[indexPath.row]["lock"] == nil || dataMessages[indexPath.row]["lock"] as! String != "1")) {
-            topMarginText.constant = topMarginText.constant + 205
+            topMarginText.constant = topMarginText.constant + ListGroupImages.getImageSize(image: thumbChat, screenWidth: self.view.frame.size.width * 0.6, screenHeight: 305)!.height
             
             containerMessage.addSubview(imageThumb)
             imageThumb.translatesAutoresizingMaskIntoConstraints = false
@@ -3454,7 +3454,7 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
             imageThumb.leadingAnchor.constraint(equalTo: containerMessage.leadingAnchor, constant: 15).isActive = true
             imageThumb.bottomAnchor.constraint(equalTo: messageText.topAnchor, constant: -5).isActive = true
             imageThumb.trailingAnchor.constraint(equalTo: containerMessage.trailingAnchor, constant: -15).isActive = true
-            imageThumb.widthAnchor.constraint(equalToConstant: self.view.frame.size.width * 0.6).isActive = true
+            imageThumb.widthAnchor.constraint(equalToConstant: ListGroupImages.getImageSize(image: thumbChat, screenWidth: self.view.frame.size.width * 0.6, screenHeight: 305)!.width).isActive = true
             imageThumb.layer.cornerRadius = 5.0
             imageThumb.clipsToBounds = true
             imageThumb.contentMode = .scaleAspectFill
@@ -3464,8 +3464,8 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
             let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
             if let dirPath = paths.first {
                 let thumbURL = URL(fileURLWithPath: dirPath).appendingPathComponent(thumbChat)
-//                let image    = UIImage(contentsOfFile: thumbURL.path)
-                let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
+                let image    = UIImage(contentsOfFile: thumbURL.path)
+//                let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
                 imageThumb.image = image
                 
                 let videoURL = URL(fileURLWithPath: dirPath).appendingPathComponent(videoChat)
@@ -3887,8 +3887,8 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
                     let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
                     if let dirPath = paths.first {
                         let thumbURL = URL(fileURLWithPath: dirPath).appendingPathComponent(thumb_chat)
-//                        let image    = UIImage(contentsOfFile: thumbURL.path)
-                        let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
+                        let image    = UIImage(contentsOfFile: thumbURL.path)
+//                        let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
                         let imageThumb = UIImageView(image: image)
                         containerReply.addSubview(imageThumb)
                         imageThumb.layer.cornerRadius = 2.0
@@ -4463,8 +4463,8 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
             let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
             if let dirPath = paths.first {
                 let thumbURL = URL(fileURLWithPath: dirPath).appendingPathComponent(thumb_chat)
-//                let image    = UIImage(contentsOfFile: thumbURL.path)
-                let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
+                let image    = UIImage(contentsOfFile: thumbURL.path)
+//                let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
                 let imageThumb = UIImageView(image: image)
                 self.containerPreviewReply.addSubview(imageThumb)
                 imageThumb.layer.cornerRadius = 2.0

+ 26 - 18
appbuilder-ios/DigiXLite/DigiXLite/Source/View/Chat/EditorPersonal.swift

@@ -1128,7 +1128,7 @@ public class EditorPersonal: UIViewController, ImageVideoPickerDelegate, UIGestu
                             }
                         }
                     }
-                    if 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) && 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" {
                         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
@@ -4943,8 +4943,8 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                     let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
                     if let dirPath = paths.first {
                         let thumbURL = URL(fileURLWithPath: dirPath).appendingPathComponent(listImages[i].thumbId)
-//                        let image    = UIImage(contentsOfFile: thumbURL.path)
-                        let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
+                        let image    = UIImage(contentsOfFile: thumbURL.path)
+//                        let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
                         listImageThumb[i].image = image
 
                         let imageURL = URL(fileURLWithPath: dirPath).appendingPathComponent(listImages[i].imageId)
@@ -5016,7 +5016,7 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                     countRestImages.textColor = .white
                 }
             } else {
-                topMarginText.constant = topMarginText.constant + 205
+                topMarginText.constant = topMarginText.constant + ListGroupImages.getImageSize(image: thumbChat, screenWidth: self.view.frame.size.width * 0.6, screenHeight: 305)!.height
                 
                 containerMessage.addSubview(imageThumb)
                 imageThumb.translatesAutoresizingMaskIntoConstraints = false
@@ -5027,7 +5027,7 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                 imageThumb.leadingAnchor.constraint(equalTo: containerMessage.leadingAnchor, constant: 15).isActive = true
                 imageThumb.bottomAnchor.constraint(equalTo: messageText.topAnchor, constant: -5).isActive = true
                 imageThumb.trailingAnchor.constraint(equalTo: containerMessage.trailingAnchor, constant: -15).isActive = true
-                imageThumb.widthAnchor.constraint(equalToConstant: self.view.frame.size.width * 0.6).isActive = true
+                imageThumb.widthAnchor.constraint(equalToConstant: ListGroupImages.getImageSize(image: thumbChat, screenWidth: self.view.frame.size.width * 0.6, screenHeight: 305)!.width).isActive = true
                 imageThumb.layer.cornerRadius = 5.0
                 imageThumb.clipsToBounds = true
                 imageThumb.contentMode = .scaleAspectFill
@@ -5037,8 +5037,8 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                 let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
                 if let dirPath = paths.first {
                     let thumbURL = URL(fileURLWithPath: dirPath).appendingPathComponent(thumbChat)
-//                    let image    = UIImage(contentsOfFile: thumbURL.path)
-                    let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
+                    let image    = UIImage(contentsOfFile: thumbURL.path)
+//                    let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
                     imageThumb.image = image
                     
                     let videoURL = URL(fileURLWithPath: dirPath).appendingPathComponent(videoChat)
@@ -5453,8 +5453,8 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                     let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
                     if let dirPath = paths.first {
                         let thumbURL = URL(fileURLWithPath: dirPath).appendingPathComponent(thumb_chat)
-//                        let image    = UIImage(contentsOfFile: thumbURL.path)
-                        let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
+                        let image    = UIImage(contentsOfFile: thumbURL.path)
+//                        let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
                         let imageThumb = UIImageView(image: image)
                         containerReply.addSubview(imageThumb)
                         imageThumb.layer.cornerRadius = 2.0
@@ -5514,10 +5514,14 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
         listGroupingImages.listGroupingImages = sender.listImageFromGrouping
         listGroupingImages.titleName = titleText
         listGroupingImages.isInitiator = sender.isInitiator
-        listGroupingImages.updateEditor = { [self] updatedData in
-            groupImages[sender.listImageFromGrouping[0].messageId] = updatedData
-            DispatchQueue.main.async { [self] in
-                tableChatView.reloadData()
+        listGroupingImages.updateEditor = { [self] updatedData, replyData in
+            if updatedData.count != 0 {
+                groupImages[sender.listImageFromGrouping[0].messageId] = updatedData
+                DispatchQueue.main.async { [self] in
+                    tableChatView.reloadData()
+                }
+            } else if replyData.count != 0 {
+                handleReply(indexPath: IndexPath(row: 0, section: 0), dataMessagesImage: replyData)
             }
         }
         self.navigationController?.pushViewController(listGroupingImages, animated: true)
@@ -5997,10 +6001,14 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
 //        return UISwipeActionsConfiguration(actions: [action])
 //    }
     
-    private func handleReply(indexPath: IndexPath) {
-        let dataMessages = self.dataMessages.filter({ $0["chat_date"] as! String == dataDates[indexPath.section]})
+    private func handleReply(indexPath: IndexPath, dataMessagesImage: [String: Any?] = [:]) {
         self.deleteReplyView()
-        self.textFieldSend.becomeFirstResponder()
+        var dataMessages = self.dataMessages.filter({ $0["chat_date"] as! String == dataDates[indexPath.section]})
+        if dataMessages.count != 0 {
+            dataMessages = [dataMessagesImage]
+        } else {
+            self.textFieldSend.becomeFirstResponder()
+        }
         self.reffId = dataMessages[indexPath.row]["message_id"] as? String
         UIView.animate(withDuration: 0.25, delay: 0.0, options: .curveEaseInOut, animations: {
             self.constraintTopTextField.constant = self.constraintTopTextField.constant + 50
@@ -6103,8 +6111,8 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
             let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
             if let dirPath = paths.first {
                 let thumbURL = URL(fileURLWithPath: dirPath).appendingPathComponent(thumb_chat)
-//                let image    = UIImage(contentsOfFile: thumbURL.path)
-                let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
+                let image    = UIImage(contentsOfFile: thumbURL.path)
+//                let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
                 let imageThumb = UIImageView(image: image)
                 self.containerPreviewReply.addSubview(imageThumb)
                 imageThumb.layer.cornerRadius = 2.0

+ 13 - 10
appbuilder-ios/DigiXLite/DigiXLite/Source/View/Chat/ListGroupImages.swift

@@ -22,7 +22,7 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
     var startYVisible: CGFloat!
     var endYVisible: CGFloat!
     var indexSelected = 0
-    var updateEditor: (([ImageGrouping]) -> ())?
+    var updateEditor: (([ImageGrouping], [String: Any?]) -> ())?
 
     override func viewDidLoad() {
         super.viewDidLoad()
@@ -113,7 +113,7 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
         let containerImages = UIImageView()
         containerImages.contentMode = .scaleAspectFit
         cell.contentView.addSubview(containerImages)
-        containerImages.anchor(top: cell.contentView.topAnchor, left: cell.contentView.leftAnchor, bottom: cell.contentView.bottomAnchor, right: cell.contentView.rightAnchor, paddingBottom: 15, height: getImageSize(image: listGroupingImages[indexPath.row].imageId)!.height)
+        containerImages.anchor(top: cell.contentView.topAnchor, left: cell.contentView.leftAnchor, bottom: cell.contentView.bottomAnchor, right: cell.contentView.rightAnchor, paddingBottom: 15, height: ListGroupImages.getImageSize(image: listGroupingImages[indexPath.row].imageId, screenWidth: UIScreen.main.bounds.width, screenHeight: UIScreen.main.bounds.height)!.height)
         
         if !copySession && !forwardSession && !deleteSession {
             let longPressRecognizer = LongPressImageVIew(target: self, action: #selector(handleLongPress(_:)))
@@ -129,7 +129,13 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
         if let dirPath = paths.first {
             let imageURL = URL(fileURLWithPath: dirPath).appendingPathComponent(listGroupingImages[indexPath.row].imageId)
             let image    = UIImage(contentsOfFile: imageURL.path)
-            containerImages.image = image
+            if image == nil {
+                let thumbURL = URL(fileURLWithPath: dirPath).appendingPathComponent(listGroupingImages[indexPath.row].thumbId)
+                let image    = UIImage(contentsOfFile: imageURL.path)
+                containerImages.image = image
+            } else {
+                containerImages.image = image
+            }
             if !FileManager.default.fileExists(atPath: imageURL.path) {
                 let blurEffect = UIBlurEffect(style: UIBlurEffect.Style.light)
                 let blurEffectView = UIVisualEffectView(effect: blurEffect)
@@ -137,7 +143,6 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
                 blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
                 containerImages.addSubview(blurEffectView)
             }
-
         }
         
         let containerTimeStatus = UIView()
@@ -213,9 +218,11 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
                     listGroupingImages[indexSelected].dataMessage["is_stared"] = "0"
                 }
                 tableViewImages.reloadRows(at: [IndexPath(row: indexSelected, section: 0)], with: .none)
-                updateEditor!(listGroupingImages)
+                updateEditor!(listGroupingImages, [:])
             case 1:
                 popover.dismiss()
+                self.navigationController?.popViewController(animated: true)
+                updateEditor!([], listGroupingImages[indexSelected].dataMessage)
             case 2:
                 popover.dismiss()
             case 3:
@@ -279,7 +286,7 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
         
     }
     
-    func getImageSize(image: String) -> CGSize? {
+    static func getImageSize(image: String, screenWidth: CGFloat, screenHeight: CGFloat) -> CGSize? {
         let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory
         let nsUserDomainMask = FileManager.SearchPathDomainMask.userDomainMask
         let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
@@ -292,10 +299,6 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
             // Calculate the aspect ratio of the image
             let aspectRatio = imageWidth / imageHeight
 
-            // Get the available width and height of the screen
-            let screenWidth = UIScreen.main.bounds.width
-            let screenHeight = UIScreen.main.bounds.height
-
             // Calculate the size to display the image while maintaining its aspect ratio
             var displayWidth: CGFloat = 0.0
             var displayHeight: CGFloat = 0.0

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

@@ -679,7 +679,7 @@ class MessageInfo: UIViewController, UITableViewDelegate, UITableViewDataSource
             let containerViewFile = UIView()
             
             if (!thumbChat.isEmpty) {
-                topMarginText.constant = topMarginText.constant + 205
+                topMarginText.constant = topMarginText.constant + ListGroupImages.getImageSize(image: thumbChat, screenWidth: self.view.frame.size.width * 0.6, screenHeight: 305)!.height
                 
                 containerMessage.addSubview(imageThumb)
                 imageThumb.translatesAutoresizingMaskIntoConstraints = false
@@ -690,7 +690,7 @@ class MessageInfo: UIViewController, UITableViewDelegate, UITableViewDataSource
                 imageThumb.leadingAnchor.constraint(equalTo: containerMessage.leadingAnchor, constant: 15).isActive = true
                 imageThumb.bottomAnchor.constraint(equalTo: messageText.topAnchor, constant: -5).isActive = true
                 imageThumb.trailingAnchor.constraint(equalTo: containerMessage.trailingAnchor, constant: -15).isActive = true
-                imageThumb.widthAnchor.constraint(equalToConstant: self.view.frame.size.width * 0.6).isActive = true
+                imageThumb.widthAnchor.constraint(equalToConstant: ListGroupImages.getImageSize(image: thumbChat, screenWidth: self.view.frame.size.width * 0.6, screenHeight: 305)!.width).isActive = true
                 imageThumb.layer.cornerRadius = 5.0
                 imageThumb.clipsToBounds = true
                 imageThumb.contentMode = .scaleAspectFill
@@ -700,8 +700,8 @@ class MessageInfo: UIViewController, UITableViewDelegate, UITableViewDataSource
                 let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
                 if let dirPath = paths.first {
                     let thumbURL = URL(fileURLWithPath: dirPath).appendingPathComponent(thumbChat)
-//                    let image    = UIImage(contentsOfFile: thumbURL.path)
-                    let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
+                    let image    = UIImage(contentsOfFile: thumbURL.path)
+//                    let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
                     imageThumb.image = image
                     
                     let videoURL = URL(fileURLWithPath: dirPath).appendingPathComponent(videoChat)

+ 8 - 8
appbuilder-ios/NexilisLite/NexilisLite/Source/View/Chat/EditorGroup.swift

@@ -3445,7 +3445,7 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
         let containerViewFile = UIView()
         
         if (thumbChat != "" && (dataMessages[indexPath.row]["lock"] == nil || dataMessages[indexPath.row]["lock"] as! String != "1")) {
-            topMarginText.constant = topMarginText.constant + 205
+            topMarginText.constant = topMarginText.constant + ListGroupImages.getImageSize(image: thumbChat, screenWidth: self.view.frame.size.width * 0.6, screenHeight: 305)!.height
             
             containerMessage.addSubview(imageThumb)
             imageThumb.translatesAutoresizingMaskIntoConstraints = false
@@ -3456,7 +3456,7 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
             imageThumb.leadingAnchor.constraint(equalTo: containerMessage.leadingAnchor, constant: 15).isActive = true
             imageThumb.bottomAnchor.constraint(equalTo: messageText.topAnchor, constant: -5).isActive = true
             imageThumb.trailingAnchor.constraint(equalTo: containerMessage.trailingAnchor, constant: -15).isActive = true
-            imageThumb.widthAnchor.constraint(equalToConstant: self.view.frame.size.width * 0.6).isActive = true
+            imageThumb.widthAnchor.constraint(equalToConstant: ListGroupImages.getImageSize(image: thumbChat, screenWidth: self.view.frame.size.width * 0.6, screenHeight: 305)!.width).isActive = true
             imageThumb.layer.cornerRadius = 5.0
             imageThumb.clipsToBounds = true
             imageThumb.contentMode = .scaleAspectFill
@@ -3466,8 +3466,8 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
             let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
             if let dirPath = paths.first {
                 let thumbURL = URL(fileURLWithPath: dirPath).appendingPathComponent(thumbChat)
-//                let image    = UIImage(contentsOfFile: thumbURL.path)
-                let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
+                let image    = UIImage(contentsOfFile: thumbURL.path)
+//                let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
                 imageThumb.image = image
                 
                 let videoURL = URL(fileURLWithPath: dirPath).appendingPathComponent(videoChat)
@@ -3889,8 +3889,8 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
                     let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
                     if let dirPath = paths.first {
                         let thumbURL = URL(fileURLWithPath: dirPath).appendingPathComponent(thumb_chat)
-//                        let image    = UIImage(contentsOfFile: thumbURL.path)
-                        let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
+                        let image    = UIImage(contentsOfFile: thumbURL.path)
+//                        let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
                         let imageThumb = UIImageView(image: image)
                         containerReply.addSubview(imageThumb)
                         imageThumb.layer.cornerRadius = 2.0
@@ -4465,8 +4465,8 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
             let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
             if let dirPath = paths.first {
                 let thumbURL = URL(fileURLWithPath: dirPath).appendingPathComponent(thumb_chat)
-//                let image    = UIImage(contentsOfFile: thumbURL.path)
-                let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
+                let image    = UIImage(contentsOfFile: thumbURL.path)
+//                let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
                 let imageThumb = UIImageView(image: image)
                 self.containerPreviewReply.addSubview(imageThumb)
                 imageThumb.layer.cornerRadius = 2.0

+ 26 - 18
appbuilder-ios/NexilisLite/NexilisLite/Source/View/Chat/EditorPersonal.swift

@@ -1129,7 +1129,7 @@ public class EditorPersonal: UIViewController, ImageVideoPickerDelegate, UIGestu
                             }
                         }
                     }
-                    if 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) && 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" {
                         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
@@ -4955,8 +4955,8 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                     let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
                     if let dirPath = paths.first {
                         let thumbURL = URL(fileURLWithPath: dirPath).appendingPathComponent(listImages[i].thumbId)
-//                        let image    = UIImage(contentsOfFile: thumbURL.path)
-                        let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
+                        let image    = UIImage(contentsOfFile: thumbURL.path)
+//                        let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
                         listImageThumb[i].image = image
 
                         let imageURL = URL(fileURLWithPath: dirPath).appendingPathComponent(listImages[i].imageId)
@@ -5038,7 +5038,7 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                     countRestImages.textColor = .white
                 }
             } else {
-                topMarginText.constant = topMarginText.constant + 205
+                topMarginText.constant = topMarginText.constant + ListGroupImages.getImageSize(image: thumbChat, screenWidth: self.view.frame.size.width * 0.6, screenHeight: 305)!.height
                 
                 containerMessage.addSubview(imageThumb)
                 imageThumb.translatesAutoresizingMaskIntoConstraints = false
@@ -5049,7 +5049,7 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                 imageThumb.leadingAnchor.constraint(equalTo: containerMessage.leadingAnchor, constant: 15).isActive = true
                 imageThumb.bottomAnchor.constraint(equalTo: messageText.topAnchor, constant: -5).isActive = true
                 imageThumb.trailingAnchor.constraint(equalTo: containerMessage.trailingAnchor, constant: -15).isActive = true
-                imageThumb.widthAnchor.constraint(equalToConstant: self.view.frame.size.width * 0.6).isActive = true
+                imageThumb.widthAnchor.constraint(equalToConstant: ListGroupImages.getImageSize(image: thumbChat, screenWidth: self.view.frame.size.width * 0.6, screenHeight: 305)!.width).isActive = true
                 imageThumb.layer.cornerRadius = 5.0
                 imageThumb.clipsToBounds = true
                 imageThumb.contentMode = .scaleAspectFill
@@ -5059,8 +5059,8 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                 let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
                 if let dirPath = paths.first {
                     let thumbURL = URL(fileURLWithPath: dirPath).appendingPathComponent(thumbChat)
-    //                let image    = UIImage(contentsOfFile: thumbURL.path)
-                    let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
+                    let image    = UIImage(contentsOfFile: thumbURL.path)
+//                    let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
                     imageThumb.image = image
                     
                     let videoURL = URL(fileURLWithPath: dirPath).appendingPathComponent(videoChat)
@@ -5475,8 +5475,8 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                     let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
                     if let dirPath = paths.first {
                         let thumbURL = URL(fileURLWithPath: dirPath).appendingPathComponent(thumb_chat)
-//                        let image    = UIImage(contentsOfFile: thumbURL.path)
-                        let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
+                        let image    = UIImage(contentsOfFile: thumbURL.path)
+//                        let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
                         let imageThumb = UIImageView(image: image)
                         containerReply.addSubview(imageThumb)
                         imageThumb.layer.cornerRadius = 2.0
@@ -5536,10 +5536,14 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
         listGroupingImages.listGroupingImages = sender.listImageFromGrouping
         listGroupingImages.titleName = titleText
         listGroupingImages.isInitiator = sender.isInitiator
-        listGroupingImages.updateEditor = { [self] updatedData in
-            groupImages[sender.listImageFromGrouping[0].messageId] = updatedData
-            DispatchQueue.main.async { [self] in
-                tableChatView.reloadData()
+        listGroupingImages.updateEditor = { [self] updatedData, replyData in
+            if updatedData.count != 0 {
+                groupImages[sender.listImageFromGrouping[0].messageId] = updatedData
+                DispatchQueue.main.async { [self] in
+                    tableChatView.reloadData()
+                }
+            } else if replyData.count != 0 {
+                handleReply(indexPath: IndexPath(row: 0, section: 0), dataMessagesImage: replyData)
             }
         }
         self.navigationController?.pushViewController(listGroupingImages, animated: true)
@@ -6019,10 +6023,14 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
 //        return UISwipeActionsConfiguration(actions: [action])
 //    }
     
-    private func handleReply(indexPath: IndexPath) {
-        let dataMessages = self.dataMessages.filter({ $0["chat_date"] as! String == dataDates[indexPath.section]})
+    private func handleReply(indexPath: IndexPath, dataMessagesImage: [String: Any?] = [:]) {
         self.deleteReplyView()
-        self.textFieldSend.becomeFirstResponder()
+        var dataMessages = self.dataMessages.filter({ $0["chat_date"] as! String == dataDates[indexPath.section]})
+        if dataMessages.count != 0 {
+            dataMessages = [dataMessagesImage]
+        } else {
+            self.textFieldSend.becomeFirstResponder()
+        }
         self.reffId = dataMessages[indexPath.row]["message_id"] as? String
         UIView.animate(withDuration: 0.25, delay: 0.0, options: .curveEaseInOut, animations: {
             self.constraintTopTextField.constant = self.constraintTopTextField.constant + 50
@@ -6125,8 +6133,8 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
             let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
             if let dirPath = paths.first {
                 let thumbURL = URL(fileURLWithPath: dirPath).appendingPathComponent(thumb_chat)
-//                let image    = UIImage(contentsOfFile: thumbURL.path)
-                let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
+                let image    = UIImage(contentsOfFile: thumbURL.path)
+//                let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
                 let imageThumb = UIImageView(image: image)
                 self.containerPreviewReply.addSubview(imageThumb)
                 imageThumb.layer.cornerRadius = 2.0

+ 13 - 10
appbuilder-ios/NexilisLite/NexilisLite/Source/View/Chat/ListGroupImages.swift

@@ -22,7 +22,7 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
     var startYVisible: CGFloat!
     var endYVisible: CGFloat!
     var indexSelected = 0
-    var updateEditor: (([ImageGrouping]) -> ())?
+    var updateEditor: (([ImageGrouping], [String: Any?]) -> ())?
 
     override func viewDidLoad() {
         super.viewDidLoad()
@@ -113,7 +113,7 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
         let containerImages = UIImageView()
         containerImages.contentMode = .scaleAspectFit
         cell.contentView.addSubview(containerImages)
-        containerImages.anchor(top: cell.contentView.topAnchor, left: cell.contentView.leftAnchor, bottom: cell.contentView.bottomAnchor, right: cell.contentView.rightAnchor, paddingBottom: 15, height: getImageSize(image: listGroupingImages[indexPath.row].imageId)!.height)
+        containerImages.anchor(top: cell.contentView.topAnchor, left: cell.contentView.leftAnchor, bottom: cell.contentView.bottomAnchor, right: cell.contentView.rightAnchor, paddingBottom: 15, height: ListGroupImages.getImageSize(image: listGroupingImages[indexPath.row].imageId, screenWidth: UIScreen.main.bounds.width, screenHeight: UIScreen.main.bounds.height)!.height)
         
         if !copySession && !forwardSession && !deleteSession {
             let longPressRecognizer = LongPressImageVIew(target: self, action: #selector(handleLongPress(_:)))
@@ -129,7 +129,13 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
         if let dirPath = paths.first {
             let imageURL = URL(fileURLWithPath: dirPath).appendingPathComponent(listGroupingImages[indexPath.row].imageId)
             let image    = UIImage(contentsOfFile: imageURL.path)
-            containerImages.image = image
+            if image == nil {
+                let thumbURL = URL(fileURLWithPath: dirPath).appendingPathComponent(listGroupingImages[indexPath.row].thumbId)
+                let image    = UIImage(contentsOfFile: imageURL.path)
+                containerImages.image = image
+            } else {
+                containerImages.image = image
+            }
             if !FileManager.default.fileExists(atPath: imageURL.path) {
                 let blurEffect = UIBlurEffect(style: UIBlurEffect.Style.light)
                 let blurEffectView = UIVisualEffectView(effect: blurEffect)
@@ -137,7 +143,6 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
                 blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
                 containerImages.addSubview(blurEffectView)
             }
-
         }
         
         let containerTimeStatus = UIView()
@@ -213,9 +218,11 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
                     listGroupingImages[indexSelected].dataMessage["is_stared"] = "0"
                 }
                 tableViewImages.reloadRows(at: [IndexPath(row: indexSelected, section: 0)], with: .none)
-                updateEditor!(listGroupingImages)
+                updateEditor!(listGroupingImages, [:])
             case 1:
                 popover.dismiss()
+                self.navigationController?.popViewController(animated: true)
+                updateEditor!([], listGroupingImages[indexSelected].dataMessage)
             case 2:
                 popover.dismiss()
             case 3:
@@ -279,7 +286,7 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
         
     }
     
-    func getImageSize(image: String) -> CGSize? {
+    static func getImageSize(image: String, screenWidth: CGFloat, screenHeight: CGFloat) -> CGSize? {
         let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory
         let nsUserDomainMask = FileManager.SearchPathDomainMask.userDomainMask
         let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
@@ -292,10 +299,6 @@ class ListGroupImages: UIViewController, UITableViewDataSource, UITableViewDeleg
             // Calculate the aspect ratio of the image
             let aspectRatio = imageWidth / imageHeight
 
-            // Get the available width and height of the screen
-            let screenWidth = UIScreen.main.bounds.width
-            let screenHeight = UIScreen.main.bounds.height
-
             // Calculate the size to display the image while maintaining its aspect ratio
             var displayWidth: CGFloat = 0.0
             var displayHeight: CGFloat = 0.0

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

@@ -679,7 +679,7 @@ class MessageInfo: UIViewController, UITableViewDelegate, UITableViewDataSource
             let containerViewFile = UIView()
             
             if (!thumbChat.isEmpty) {
-                topMarginText.constant = topMarginText.constant + 205
+                topMarginText.constant = topMarginText.constant + ListGroupImages.getImageSize(image: thumbChat, screenWidth: self.view.frame.size.width * 0.6, screenHeight: 305)!.height
                 
                 containerMessage.addSubview(imageThumb)
                 imageThumb.translatesAutoresizingMaskIntoConstraints = false
@@ -690,7 +690,7 @@ class MessageInfo: UIViewController, UITableViewDelegate, UITableViewDataSource
                 imageThumb.leadingAnchor.constraint(equalTo: containerMessage.leadingAnchor, constant: 15).isActive = true
                 imageThumb.bottomAnchor.constraint(equalTo: messageText.topAnchor, constant: -5).isActive = true
                 imageThumb.trailingAnchor.constraint(equalTo: containerMessage.trailingAnchor, constant: -15).isActive = true
-                imageThumb.widthAnchor.constraint(equalToConstant: self.view.frame.size.width * 0.6).isActive = true
+                imageThumb.widthAnchor.constraint(equalToConstant: ListGroupImages.getImageSize(image: thumbChat, screenWidth: self.view.frame.size.width * 0.6, screenHeight: 305)!.width).isActive = true
                 imageThumb.layer.cornerRadius = 5.0
                 imageThumb.clipsToBounds = true
                 imageThumb.contentMode = .scaleAspectFill
@@ -700,8 +700,8 @@ class MessageInfo: UIViewController, UITableViewDelegate, UITableViewDataSource
                 let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
                 if let dirPath = paths.first {
                     let thumbURL = URL(fileURLWithPath: dirPath).appendingPathComponent(thumbChat)
-//                    let image    = UIImage(contentsOfFile: thumbURL.path)
-                    let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
+                    let image    = UIImage(contentsOfFile: thumbURL.path)
+//                    let image = UIGraphicsRenderer.renderImageAt(url: thumbURL as NSURL, size: CGSize(width: 250, height: 250))
                     imageThumb.image = image
                     
                     let videoURL = URL(fileURLWithPath: dirPath).appendingPathComponent(videoChat)