alqindiirsyam 1 рік тому
батько
коміт
d63c26acb2

+ 3 - 3
appbuilder-ios/DigiXLite/DigiXLite/Source/Extension.swift

@@ -696,7 +696,7 @@ extension String {
             var totalEmoji = 0
             for i in 0..<rangeItalic.count {
                 if rangeItalic[i].startIndex > lastFirstRange {
-                    let charStart: Character = rangeItalic[i].startIndex != 0 ? Array(textUTF8.substring(from: rangeItalic[i].startIndex - 1, to: rangeItalic[i].startIndex - 1))[0] : Array("0")[0]
+                    let charStart: Character = rangeItalic[i].startIndex != 0 ? Array(textAfterbold.substring(from: rangeItalic[i].startIndex - 1, to: rangeItalic[i].startIndex - 1))[0] : Array("0")[0]
                     if (rangeItalic[i].startIndex == 0 || (!charStart.isLetter && !charStart.isNumber)) {
                         lastFirstRange = rangeItalic[i].startIndex
                         continueCheckingItalic = true
@@ -744,7 +744,7 @@ extension String {
             var totalEmoji = 0
             for i in 0..<rangeUnderline.count {
                 if rangeUnderline[i].startIndex > lastFirstRange {
-                    let charStart: Character = rangeUnderline[i].startIndex != 0 ? Array(textUTF8.substring(from: rangeUnderline[i].startIndex - 1, to: rangeUnderline[i].startIndex - 1))[0] : Array("0")[0]
+                    let charStart: Character = rangeUnderline[i].startIndex != 0 ? Array(textAfterItalic.substring(from: rangeUnderline[i].startIndex - 1, to: rangeUnderline[i].startIndex - 1))[0] : Array("0")[0]
                     if (rangeUnderline[i].startIndex == 0 || (!charStart.isLetter && !charStart.isNumber)) {
                         lastFirstRange = rangeUnderline[i].startIndex
                         continueCheckingUnderline = true
@@ -788,7 +788,7 @@ extension String {
             var totalEmoji = 0
             for i in 0..<rangeStrikethrough.count {
                 if rangeStrikethrough[i].startIndex > lastFirstRange {
-                    let charStart: Character = rangeStrikethrough[i].startIndex != 0 ? Array(textUTF8.substring(from: rangeStrikethrough[i].startIndex - 1, to: rangeStrikethrough[i].startIndex - 1))[0] : Array("0")[0]
+                    let charStart: Character = rangeStrikethrough[i].startIndex != 0 ? Array(textAfterUnderline.substring(from: rangeStrikethrough[i].startIndex - 1, to: rangeStrikethrough[i].startIndex - 1))[0] : Array("0")[0]
                     if (rangeStrikethrough[i].startIndex == 0 || (!charStart.isLetter && !charStart.isNumber)) {
                         lastFirstRange = rangeStrikethrough[i].startIndex
                         continueCheckingStrikethrough = true

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

@@ -2024,7 +2024,7 @@ extension EditorGroup: UITextViewDelegate {
                                               onSuccess: { result in
                         let title = result.title ?? "No Title"
                         let description = stringURl.contains("google.com") ? "" : result.description
-                        let imageUrl = result.image
+                        let imageUrl = result.icon
                         Database.shared.database?.inTransaction({ (fmdb, rollback) in
                             do {
                                 var dataJson: [String: Any] = [:]
@@ -2094,11 +2094,7 @@ extension EditorGroup: UITextViewDelegate {
             imagePreview.bottomAnchor.constraint(equalTo: self.containerLink.bottomAnchor).isActive = true
             imagePreview.topAnchor.constraint(equalTo: self.containerLink.topAnchor).isActive = true
             imagePreview.widthAnchor.constraint(equalToConstant: 80.0).isActive = true
-            if !imageUrl!.starts(with: "https://") {
-                imagePreview.loadImageAsync(with: "https://www.google.be" + imageUrl!)
-            } else {
-                imagePreview.loadImageAsync(with: imageUrl)
-            }
+            imagePreview.loadImageAsync(with: imageUrl)
             imagePreview.contentMode = .scaleAspectFit
         }
         
@@ -3334,7 +3330,7 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
             
             let pictureImage = dataProfile["image_id"]
             if dataMessages[indexPath.row]["f_pin"] as? String == "-999" {
-                if Utils.getIconDock() != nil {
+                if !Utils.getIconDock().isEmpty {
                     let dataImage = try? Data(contentsOf: URL(string: Utils.getUrlDock()!)!) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch
                     if dataImage != nil {
                         profileMessage.image = UIImage(data: dataImage!)
@@ -3561,29 +3557,33 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
         messageText.isUserInteractionEnabled = false
         if !textChat!.isEmpty {
             if textChat!.contains("■"){
-                textChat = textChat?.components(separatedBy: "■")[0]
-                textChat = textChat?.trimmingCharacters(in: .whitespacesAndNewlines)
+                textChat = textChat!.components(separatedBy: "■")[0]
+                textChat = textChat!.trimmingCharacters(in: .whitespacesAndNewlines)
             }
             let listTextEnter = textChat!.split(separator: "\n")
+            var finalAtribute = textChat!.richText()
+            var containsLink = false
             for j in 0...listTextEnter.count - 1 {
                 let listText = listTextEnter[j].split(separator: " ")
                 if listText.count > 0 {
                     for i in 0...listText.count - 1 {
                         if listText[i].lowercased().checkStartWithLink() {
-                            let attributedString = textChat!.richText(group_id: self.dataGroup["group_id"] as! String)
-                            let rangeTapLink = (attributedString.string as NSString).range(of: String(listText[i]))
-                            attributedString.addAttributes([.foregroundColor: UIColor.blue, .underlineStyle: NSUnderlineStyle.single.rawValue], range: rangeTapLink)
-                            messageText.attributedText = attributedString
-                            if messageText.isUserInteractionEnabled == false && !copySession && !forwardSession && !deleteSession && !isHistoryCC && !removed {
-                                messageText.isUserInteractionEnabled = true
-                                let longPress = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPressLink(_:)))
-                                longPress.minimumPressDuration = 0.1
-                                containerMessage.addGestureRecognizer(longPress)
+                            let rangeTapLink = (finalAtribute.string as NSString).range(of: String(listText[i]))
+                            finalAtribute.addAttributes([.foregroundColor: UIColor.blue, .underlineStyle: NSUnderlineStyle.single.rawValue], range: rangeTapLink)
+                            if !containsLink {
+                                containsLink = true
                             }
                         }
                     }
                 }
             }
+            messageText.attributedText = finalAtribute
+            if containsLink && !copySession && !forwardSession && !deleteSession && !self.removed {
+                messageText.isUserInteractionEnabled = true
+                let longPress = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPressLink(_:)))
+                longPress.minimumPressDuration = 0.1
+                containerMessage.addGestureRecognizer(longPress)
+            }
         }
         
         if !copySession && !forwardSession && !deleteSession && !isHistoryCC && !removed && messageText.isUserInteractionEnabled == false {
@@ -3999,11 +3999,7 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
                             imagePreview.bottomAnchor.constraint(equalTo: containerLinkMessage.bottomAnchor).isActive = true
                             imagePreview.topAnchor.constraint(equalTo: containerLinkMessage.topAnchor).isActive = true
                             imagePreview.widthAnchor.constraint(equalToConstant: 80.0).isActive = true
-                            if !imageUrl!.starts(with: "https://") {
-                                imagePreview.loadImageAsync(with: "https://www.google.be" + imageUrl!)
-                            } else {
-                                imagePreview.loadImageAsync(with: imageUrl)
-                            }
+                            imagePreview.loadImageAsync(with: imageUrl)
                             imagePreview.contentMode = .scaleToFill
                         }
                         
@@ -4015,8 +4011,8 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
                         } else {
                             titlePreview.leadingAnchor.constraint(equalTo: containerLinkMessage.leadingAnchor, constant: 5.0).isActive = true
                         }
-                        titlePreview.topAnchor.constraint(equalTo: containerLinkMessage.topAnchor, constant: 25.0).isActive = true
-                        titlePreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -80.0).isActive = true
+                        titlePreview.topAnchor.constraint(equalTo: containerLinkMessage.topAnchor, constant: 10.0).isActive = true
+                        titlePreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -5.0).isActive = true
                         titlePreview.text = title
                         titlePreview.font = UIFont.systemFont(ofSize: 14.0, weight: .bold)
                         titlePreview.textColor = .black
@@ -4030,7 +4026,7 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
                             descPreview.leadingAnchor.constraint(equalTo: containerLinkMessage.leadingAnchor, constant: 5.0).isActive = true
                         }
                         descPreview.topAnchor.constraint(equalTo: titlePreview.bottomAnchor).isActive = true
-                        descPreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -80.0).isActive = true
+                        descPreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -5.0).isActive = true
                         descPreview.text = description
                         descPreview.font = UIFont.systemFont(ofSize: 12.0)
                         descPreview.textColor = .gray
@@ -4045,7 +4041,7 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
                             linkPreview.leadingAnchor.constraint(equalTo: containerLinkMessage.leadingAnchor, constant: 5.0).isActive = true
                         }
                         linkPreview.topAnchor.constraint(equalTo: descPreview.bottomAnchor, constant: 8.0).isActive = true
-                        linkPreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -80.0).isActive = true
+                        linkPreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -5.0).isActive = true
                         linkPreview.text = link
                         linkPreview.font = UIFont.systemFont(ofSize: 10.0)
                         linkPreview.textColor = .gray
@@ -4076,7 +4072,7 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
                                               onSuccess: { result in
                         let title = result.title ?? "No Title"
                         let description = text.contains("google.com") ? "" : result.description
-                        let imageUrl = result.image
+                        let imageUrl = result.icon
                         Database.shared.database?.inTransaction({ (fmdb, rollback) in
                             do {
                                 var dataJson: [String: Any] = [:]

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

@@ -673,7 +673,7 @@ public class EditorPersonal: UIViewController, ImageVideoPickerDelegate, UIGestu
                 }
             } else if dataPerson["f_pin"]!! == "-999" {
                 viewAppBar.addSubview(imageProfile)
-                if Utils.getIconDock() != nil {
+                if !Utils.getIconDock().isEmpty {
                     let dataImage = try? Data(contentsOf: URL(string: Utils.getUrlDock()!)!) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch
                     if dataImage != nil {
                         imageProfile.image = UIImage(data: dataImage!)
@@ -3146,7 +3146,7 @@ extension EditorPersonal: UITextViewDelegate {
                                               onSuccess: { result in
                         let title = result.title ?? "No Title"
                         let description = stringURl.contains("google.com") ? "" : result.description
-                        let imageUrl = result.image
+                        let imageUrl = result.icon
                         Database.shared.database?.inTransaction({ (fmdb, rollback) in
                             do {
                                 var dataJson: [String: Any] = [:]
@@ -3213,11 +3213,7 @@ extension EditorPersonal: UITextViewDelegate {
             imagePreview.bottomAnchor.constraint(equalTo: self.containerLink.bottomAnchor).isActive = true
             imagePreview.topAnchor.constraint(equalTo: self.containerLink.topAnchor).isActive = true
             imagePreview.widthAnchor.constraint(equalToConstant: 80.0).isActive = true
-            if !imageUrl!.starts(with: "https://") {
-                imagePreview.loadImageAsync(with: "https://www.google.be" + imageUrl!)
-            } else {
-                imagePreview.loadImageAsync(with: imageUrl)
-            }
+            imagePreview.loadImageAsync(with: imageUrl)
             imagePreview.contentMode = .scaleAspectFit
         }
         
@@ -4835,25 +4831,29 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                 textChat = textChat.trimmingCharacters(in: .whitespacesAndNewlines)
             }
             let listTextEnter = textChat.split(separator: "\n")
+            var finalAtribute = textChat.richText()
+            var containsLink = false
             for j in 0...listTextEnter.count - 1 {
                 let listText = listTextEnter[j].split(separator: " ")
                 if listText.count > 0 {
                     for i in 0...listText.count - 1 {
                         if listText[i].lowercased().checkStartWithLink() {
-                            let attributedString = textChat.richText()
-                            let rangeTapLink = (attributedString.string as NSString).range(of: String(listText[i]))
-                            attributedString.addAttributes([.foregroundColor: UIColor.blue, .underlineStyle: NSUnderlineStyle.single.rawValue], range: rangeTapLink)
-                            messageText.attributedText = attributedString
-                            if messageText.isUserInteractionEnabled == false && !copySession && !forwardSession && !deleteSession && !self.removed {
-                                messageText.isUserInteractionEnabled = true
-                                let longPress = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPressLink(_:)))
-                                longPress.minimumPressDuration = 0.1
-                                containerMessage.addGestureRecognizer(longPress)
+                            let rangeTapLink = (finalAtribute.string as NSString).range(of: String(listText[i]))
+                            finalAtribute.addAttributes([.foregroundColor: UIColor.blue, .underlineStyle: NSUnderlineStyle.single.rawValue], range: rangeTapLink)
+                            if !containsLink {
+                                containsLink = true
                             }
                         }
                     }
                 }
             }
+            messageText.attributedText = finalAtribute
+            if containsLink && !copySession && !forwardSession && !deleteSession && !self.removed {
+                messageText.isUserInteractionEnabled = true
+                let longPress = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPressLink(_:)))
+                longPress.minimumPressDuration = 0.1
+                containerMessage.addGestureRecognizer(longPress)
+            }
         }
         
         if !copySession && !forwardSession && !deleteSession && !self.removed && messageText.isUserInteractionEnabled == false {
@@ -5279,11 +5279,7 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                             imagePreview.bottomAnchor.constraint(equalTo: containerLinkMessage.bottomAnchor).isActive = true
                             imagePreview.topAnchor.constraint(equalTo: containerLinkMessage.topAnchor).isActive = true
                             imagePreview.widthAnchor.constraint(equalToConstant: 80.0).isActive = true
-                            if !imageUrl!.starts(with: "https://") {
-                                imagePreview.loadImageAsync(with: "https://www.google.be" + imageUrl!)
-                            } else {
-                                imagePreview.loadImageAsync(with: imageUrl)
-                            }
+                            imagePreview.loadImageAsync(with: imageUrl)
                             imagePreview.contentMode = .scaleToFill
                         }
                         
@@ -5295,8 +5291,8 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                         } else {
                             titlePreview.leadingAnchor.constraint(equalTo: containerLinkMessage.leadingAnchor, constant: 5.0).isActive = true
                         }
-                        titlePreview.topAnchor.constraint(equalTo: containerLinkMessage.topAnchor, constant: 25.0).isActive = true
-                        titlePreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -80.0).isActive = true
+                        titlePreview.topAnchor.constraint(equalTo: containerLinkMessage.topAnchor, constant: 10.0).isActive = true
+                        titlePreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -5.0).isActive = true
                         titlePreview.text = title
                         titlePreview.font = UIFont.systemFont(ofSize: 14.0, weight: .bold)
                         titlePreview.textColor = .black
@@ -5310,7 +5306,7 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                             descPreview.leadingAnchor.constraint(equalTo: containerLinkMessage.leadingAnchor, constant: 5.0).isActive = true
                         }
                         descPreview.topAnchor.constraint(equalTo: titlePreview.bottomAnchor).isActive = true
-                        descPreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -80.0).isActive = true
+                        descPreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -5.0).isActive = true
                         descPreview.text = description
                         descPreview.font = UIFont.systemFont(ofSize: 12.0)
                         descPreview.textColor = .gray
@@ -5325,7 +5321,7 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                             linkPreview.leadingAnchor.constraint(equalTo: containerLinkMessage.leadingAnchor, constant: 5.0).isActive = true
                         }
                         linkPreview.topAnchor.constraint(equalTo: descPreview.bottomAnchor, constant: 8.0).isActive = true
-                        linkPreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -80.0).isActive = true
+                        linkPreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -5.0).isActive = true
                         linkPreview.text = link
                         linkPreview.font = UIFont.systemFont(ofSize: 10.0)
                         linkPreview.textColor = .gray
@@ -5356,7 +5352,7 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                                               onSuccess: { result in
                         let title = result.title ?? "No Title"
                         let description = text.contains("google.com") ? "" : result.description
-                        let imageUrl = result.image
+                        let imageUrl = result.icon
                         Database.shared.database?.inTransaction({ (fmdb, rollback) in
                             do {
                                 var dataJson: [String: Any] = [:]

+ 3 - 3
appbuilder-ios/NexilisLite/NexilisLite/Source/Extension.swift

@@ -696,7 +696,7 @@ extension String {
             var totalEmoji = 0
             for i in 0..<rangeItalic.count {
                 if rangeItalic[i].startIndex > lastFirstRange {
-                    let charStart: Character = rangeItalic[i].startIndex != 0 ? Array(textUTF8.substring(from: rangeItalic[i].startIndex - 1, to: rangeItalic[i].startIndex - 1))[0] : Array("0")[0]
+                    let charStart: Character = rangeItalic[i].startIndex != 0 ? Array(textAfterbold.substring(from: rangeItalic[i].startIndex - 1, to: rangeItalic[i].startIndex - 1))[0] : Array("0")[0]
                     if (rangeItalic[i].startIndex == 0 || (!charStart.isLetter && !charStart.isNumber)) {
                         lastFirstRange = rangeItalic[i].startIndex
                         continueCheckingItalic = true
@@ -744,7 +744,7 @@ extension String {
             var totalEmoji = 0
             for i in 0..<rangeUnderline.count {
                 if rangeUnderline[i].startIndex > lastFirstRange {
-                    let charStart: Character = rangeUnderline[i].startIndex != 0 ? Array(textUTF8.substring(from: rangeUnderline[i].startIndex - 1, to: rangeUnderline[i].startIndex - 1))[0] : Array("0")[0]
+                    let charStart: Character = rangeUnderline[i].startIndex != 0 ? Array(textAfterItalic.substring(from: rangeUnderline[i].startIndex - 1, to: rangeUnderline[i].startIndex - 1))[0] : Array("0")[0]
                     if (rangeUnderline[i].startIndex == 0 || (!charStart.isLetter && !charStart.isNumber)) {
                         lastFirstRange = rangeUnderline[i].startIndex
                         continueCheckingUnderline = true
@@ -788,7 +788,7 @@ extension String {
             var totalEmoji = 0
             for i in 0..<rangeStrikethrough.count {
                 if rangeStrikethrough[i].startIndex > lastFirstRange {
-                    let charStart: Character = rangeStrikethrough[i].startIndex != 0 ? Array(textUTF8.substring(from: rangeStrikethrough[i].startIndex - 1, to: rangeStrikethrough[i].startIndex - 1))[0] : Array("0")[0]
+                    let charStart: Character = rangeStrikethrough[i].startIndex != 0 ? Array(textAfterUnderline.substring(from: rangeStrikethrough[i].startIndex - 1, to: rangeStrikethrough[i].startIndex - 1))[0] : Array("0")[0]
                     if (rangeStrikethrough[i].startIndex == 0 || (!charStart.isLetter && !charStart.isNumber)) {
                         lastFirstRange = rangeStrikethrough[i].startIndex
                         continueCheckingStrikethrough = true

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

@@ -2024,7 +2024,7 @@ extension EditorGroup: UITextViewDelegate {
                                               onSuccess: { result in
                         let title = result.title ?? "No Title"
                         let description = stringURl.contains("google.com") ? "" : result.description
-                        let imageUrl = result.image
+                        let imageUrl = result.icon
                         Database.shared.database?.inTransaction({ (fmdb, rollback) in
                             do {
                                 var dataJson: [String: Any] = [:]
@@ -2094,11 +2094,7 @@ extension EditorGroup: UITextViewDelegate {
             imagePreview.bottomAnchor.constraint(equalTo: self.containerLink.bottomAnchor).isActive = true
             imagePreview.topAnchor.constraint(equalTo: self.containerLink.topAnchor).isActive = true
             imagePreview.widthAnchor.constraint(equalToConstant: 80.0).isActive = true
-            if !imageUrl!.starts(with: "https://") {
-                imagePreview.loadImageAsync(with: "https://www.google.be" + imageUrl!)
-            } else {
-                imagePreview.loadImageAsync(with: imageUrl)
-            }
+            imagePreview.loadImageAsync(with: imageUrl)
             imagePreview.contentMode = .scaleAspectFit
         }
         
@@ -3561,29 +3557,33 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
         messageText.isUserInteractionEnabled = false
         if !textChat!.isEmpty {
             if textChat!.contains("■"){
-                textChat = textChat?.components(separatedBy: "■")[0]
-                textChat = textChat?.trimmingCharacters(in: .whitespacesAndNewlines)
+                textChat = textChat!.components(separatedBy: "■")[0]
+                textChat = textChat!.trimmingCharacters(in: .whitespacesAndNewlines)
             }
             let listTextEnter = textChat!.split(separator: "\n")
+            var finalAtribute = textChat!.richText()
+            var containsLink = false
             for j in 0...listTextEnter.count - 1 {
                 let listText = listTextEnter[j].split(separator: " ")
                 if listText.count > 0 {
                     for i in 0...listText.count - 1 {
                         if listText[i].lowercased().checkStartWithLink() {
-                            let attributedString = textChat!.richText(group_id: self.dataGroup["group_id"] as! String)
-                            let rangeTapLink = (attributedString.string as NSString).range(of: String(listText[i]))
-                            attributedString.addAttributes([.foregroundColor: UIColor.blue, .underlineStyle: NSUnderlineStyle.single.rawValue], range: rangeTapLink)
-                            messageText.attributedText = attributedString
-                            if messageText.isUserInteractionEnabled == false && !copySession && !forwardSession && !deleteSession && !isHistoryCC && !removed {
-                                messageText.isUserInteractionEnabled = true
-                                let longPress = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPressLink(_:)))
-                                longPress.minimumPressDuration = 0.1
-                                containerMessage.addGestureRecognizer(longPress)
+                            let rangeTapLink = (finalAtribute.string as NSString).range(of: String(listText[i]))
+                            finalAtribute.addAttributes([.foregroundColor: UIColor.blue, .underlineStyle: NSUnderlineStyle.single.rawValue], range: rangeTapLink)
+                            if !containsLink {
+                                containsLink = true
                             }
                         }
                     }
                 }
             }
+            messageText.attributedText = finalAtribute
+            if containsLink && !copySession && !forwardSession && !deleteSession && !self.removed {
+                messageText.isUserInteractionEnabled = true
+                let longPress = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPressLink(_:)))
+                longPress.minimumPressDuration = 0.1
+                containerMessage.addGestureRecognizer(longPress)
+            }
         }
         
         if !copySession && !forwardSession && !deleteSession && !isHistoryCC && !removed && messageText.isUserInteractionEnabled == false {
@@ -3999,11 +3999,7 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
                             imagePreview.bottomAnchor.constraint(equalTo: containerLinkMessage.bottomAnchor).isActive = true
                             imagePreview.topAnchor.constraint(equalTo: containerLinkMessage.topAnchor).isActive = true
                             imagePreview.widthAnchor.constraint(equalToConstant: 80.0).isActive = true
-                            if !imageUrl!.starts(with: "https://") {
-                                imagePreview.loadImageAsync(with: "https://www.google.be" + imageUrl!)
-                            } else {
-                                imagePreview.loadImageAsync(with: imageUrl)
-                            }
+                            imagePreview.loadImageAsync(with: imageUrl)
                             imagePreview.contentMode = .scaleToFill
                         }
                         
@@ -4015,8 +4011,8 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
                         } else {
                             titlePreview.leadingAnchor.constraint(equalTo: containerLinkMessage.leadingAnchor, constant: 5.0).isActive = true
                         }
-                        titlePreview.topAnchor.constraint(equalTo: containerLinkMessage.topAnchor, constant: 25.0).isActive = true
-                        titlePreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -80.0).isActive = true
+                        titlePreview.topAnchor.constraint(equalTo: containerLinkMessage.topAnchor, constant: 10.0).isActive = true
+                        titlePreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -5.0).isActive = true
                         titlePreview.text = title
                         titlePreview.font = UIFont.systemFont(ofSize: 14.0, weight: .bold)
                         titlePreview.textColor = .black
@@ -4030,7 +4026,7 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
                             descPreview.leadingAnchor.constraint(equalTo: containerLinkMessage.leadingAnchor, constant: 5.0).isActive = true
                         }
                         descPreview.topAnchor.constraint(equalTo: titlePreview.bottomAnchor).isActive = true
-                        descPreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -80.0).isActive = true
+                        descPreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -5.0).isActive = true
                         descPreview.text = description
                         descPreview.font = UIFont.systemFont(ofSize: 12.0)
                         descPreview.textColor = .gray
@@ -4045,7 +4041,7 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
                             linkPreview.leadingAnchor.constraint(equalTo: containerLinkMessage.leadingAnchor, constant: 5.0).isActive = true
                         }
                         linkPreview.topAnchor.constraint(equalTo: descPreview.bottomAnchor, constant: 8.0).isActive = true
-                        linkPreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -80.0).isActive = true
+                        linkPreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -5.0).isActive = true
                         linkPreview.text = link
                         linkPreview.font = UIFont.systemFont(ofSize: 10.0)
                         linkPreview.textColor = .gray
@@ -4076,7 +4072,7 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
                                               onSuccess: { result in
                         let title = result.title ?? "No Title"
                         let description = text.contains("google.com") ? "" : result.description
-                        let imageUrl = result.image
+                        let imageUrl = result.icon
                         Database.shared.database?.inTransaction({ (fmdb, rollback) in
                             do {
                                 var dataJson: [String: Any] = [:]

+ 21 - 25
appbuilder-ios/NexilisLite/NexilisLite/Source/View/Chat/EditorPersonal.swift

@@ -3146,7 +3146,7 @@ extension EditorPersonal: UITextViewDelegate {
                                               onSuccess: { result in
                         let title = result.title ?? "No Title"
                         let description = stringURl.contains("google.com") ? "" : result.description
-                        let imageUrl = result.image
+                        let imageUrl = result.icon
                         Database.shared.database?.inTransaction({ (fmdb, rollback) in
                             do {
                                 var dataJson: [String: Any] = [:]
@@ -3213,11 +3213,7 @@ extension EditorPersonal: UITextViewDelegate {
             imagePreview.bottomAnchor.constraint(equalTo: self.containerLink.bottomAnchor).isActive = true
             imagePreview.topAnchor.constraint(equalTo: self.containerLink.topAnchor).isActive = true
             imagePreview.widthAnchor.constraint(equalToConstant: 80.0).isActive = true
-            if !imageUrl!.starts(with: "https://") {
-                imagePreview.loadImageAsync(with: "https://www.google.be" + imageUrl!)
-            } else {
-                imagePreview.loadImageAsync(with: imageUrl)
-            }
+            imagePreview.loadImageAsync(with: imageUrl)
             imagePreview.contentMode = .scaleAspectFit
         }
         
@@ -4835,25 +4831,29 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                 textChat = textChat.trimmingCharacters(in: .whitespacesAndNewlines)
             }
             let listTextEnter = textChat.split(separator: "\n")
+            var finalAtribute = textChat.richText()
+            var containsLink = false
             for j in 0...listTextEnter.count - 1 {
                 let listText = listTextEnter[j].split(separator: " ")
                 if listText.count > 0 {
                     for i in 0...listText.count - 1 {
                         if listText[i].lowercased().checkStartWithLink() {
-                            let attributedString = textChat.richText()
-                            let rangeTapLink = (attributedString.string as NSString).range(of: String(listText[i]))
-                            attributedString.addAttributes([.foregroundColor: UIColor.blue, .underlineStyle: NSUnderlineStyle.single.rawValue], range: rangeTapLink)
-                            messageText.attributedText = attributedString
-                            if messageText.isUserInteractionEnabled == false && !copySession && !forwardSession && !deleteSession && !self.removed {
-                                messageText.isUserInteractionEnabled = true
-                                let longPress = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPressLink(_:)))
-                                longPress.minimumPressDuration = 0.1
-                                containerMessage.addGestureRecognizer(longPress)
+                            let rangeTapLink = (finalAtribute.string as NSString).range(of: String(listText[i]))
+                            finalAtribute.addAttributes([.foregroundColor: UIColor.blue, .underlineStyle: NSUnderlineStyle.single.rawValue], range: rangeTapLink)
+                            if !containsLink {
+                                containsLink = true
                             }
                         }
                     }
                 }
             }
+            messageText.attributedText = finalAtribute
+            if containsLink && !copySession && !forwardSession && !deleteSession && !self.removed {
+                messageText.isUserInteractionEnabled = true
+                let longPress = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPressLink(_:)))
+                longPress.minimumPressDuration = 0.1
+                containerMessage.addGestureRecognizer(longPress)
+            }
         }
         
         if !copySession && !forwardSession && !deleteSession && !self.removed && messageText.isUserInteractionEnabled == false {
@@ -5279,11 +5279,7 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                             imagePreview.bottomAnchor.constraint(equalTo: containerLinkMessage.bottomAnchor).isActive = true
                             imagePreview.topAnchor.constraint(equalTo: containerLinkMessage.topAnchor).isActive = true
                             imagePreview.widthAnchor.constraint(equalToConstant: 80.0).isActive = true
-                            if !imageUrl!.starts(with: "https://") {
-                                imagePreview.loadImageAsync(with: "https://www.google.be" + imageUrl!)
-                            } else {
-                                imagePreview.loadImageAsync(with: imageUrl)
-                            }
+                            imagePreview.loadImageAsync(with: imageUrl)
                             imagePreview.contentMode = .scaleToFill
                         }
                         
@@ -5295,8 +5291,8 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                         } else {
                             titlePreview.leadingAnchor.constraint(equalTo: containerLinkMessage.leadingAnchor, constant: 5.0).isActive = true
                         }
-                        titlePreview.topAnchor.constraint(equalTo: containerLinkMessage.topAnchor, constant: 25.0).isActive = true
-                        titlePreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -80.0).isActive = true
+                        titlePreview.topAnchor.constraint(equalTo: containerLinkMessage.topAnchor, constant: 10.0).isActive = true
+                        titlePreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -5.0).isActive = true
                         titlePreview.text = title
                         titlePreview.font = UIFont.systemFont(ofSize: 14.0, weight: .bold)
                         titlePreview.textColor = .black
@@ -5310,7 +5306,7 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                             descPreview.leadingAnchor.constraint(equalTo: containerLinkMessage.leadingAnchor, constant: 5.0).isActive = true
                         }
                         descPreview.topAnchor.constraint(equalTo: titlePreview.bottomAnchor).isActive = true
-                        descPreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -80.0).isActive = true
+                        descPreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -5.0).isActive = true
                         descPreview.text = description
                         descPreview.font = UIFont.systemFont(ofSize: 12.0)
                         descPreview.textColor = .gray
@@ -5325,7 +5321,7 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                             linkPreview.leadingAnchor.constraint(equalTo: containerLinkMessage.leadingAnchor, constant: 5.0).isActive = true
                         }
                         linkPreview.topAnchor.constraint(equalTo: descPreview.bottomAnchor, constant: 8.0).isActive = true
-                        linkPreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -80.0).isActive = true
+                        linkPreview.trailingAnchor.constraint(equalTo: containerLinkMessage.trailingAnchor, constant: -5.0).isActive = true
                         linkPreview.text = link
                         linkPreview.font = UIFont.systemFont(ofSize: 10.0)
                         linkPreview.textColor = .gray
@@ -5356,7 +5352,7 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                                               onSuccess: { result in
                         let title = result.title ?? "No Title"
                         let description = text.contains("google.com") ? "" : result.description
-                        let imageUrl = result.image
+                        let imageUrl = result.icon
                         Database.shared.database?.inTransaction({ (fmdb, rollback) in
                             do {
                                 var dataJson: [String: Any] = [:]