diff --git a/Classes/FloatingScrollDownButton.swift b/Classes/FloatingScrollDownButton.swift index ce1e11a58..f0298afab 100644 --- a/Classes/FloatingScrollDownButton.swift +++ b/Classes/FloatingScrollDownButton.swift @@ -70,7 +70,7 @@ extension ChatConversationTableViewSwift { keyWindow.addSubview(self.floatingScrollBackground!) keyWindow.addSubview(floatingButton) keyWindow.trailingAnchor.constraint(equalTo: floatingButton.trailingAnchor, constant: Constants.trailingValue).isActive = true - floatingButton.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -25).isActive = true + floatingButton.bottomAnchor.constraint(equalTo: keyWindow.bottomAnchor, constant: -25).isActive = true floatingButton.widthAnchor.constraint(equalToConstant: Constants.buttonWidth).isActive = true floatingButton.heightAnchor.constraint(equalToConstant: diff --git a/Classes/Swift/Chat/Views/ChatConversationTableViewSwift.swift b/Classes/Swift/Chat/Views/ChatConversationTableViewSwift.swift index f34fc4472..c1a9cf9de 100644 --- a/Classes/Swift/Chat/Views/ChatConversationTableViewSwift.swift +++ b/Classes/Swift/Chat/Views/ChatConversationTableViewSwift.swift @@ -217,16 +217,20 @@ class ChatConversationTableViewSwift: UIViewController, UICollectionViewDataSour func scrollViewDidScroll(_ scrollView: UIScrollView) { let contentOffsetY = scrollView.contentOffset.y if contentOffsetY <= 20{ - floatingScrollButton?.isHidden = true - floatingScrollBackground?.isHidden = true - scrollBadge?.text = "0" - ChatConversationViewSwift.markAsRead(ChatConversationViewModel.sharedModel.chatRoom?.getCobject) + if floatingScrollButton != nil && floatingScrollBackground != nil { + floatingScrollButton?.isHidden = true + floatingScrollBackground?.isHidden = true + scrollBadge?.text = "0" + ChatConversationViewSwift.markAsRead(ChatConversationViewModel.sharedModel.chatRoom?.getCobject) + } } else { - floatingScrollButton?.isHidden = false - floatingScrollBackground?.isHidden = false; - if(scrollBadge?.text == "0"){ - scrollBadge?.isHidden = true - } + if floatingScrollButton != nil && floatingScrollBackground != nil { + floatingScrollButton?.isHidden = false + floatingScrollBackground?.isHidden = false; + if(scrollBadge?.text == "0"){ + scrollBadge?.isHidden = true + } + } } } diff --git a/Classes/Swift/Chat/Views/MultilineMessageCell.swift b/Classes/Swift/Chat/Views/MultilineMessageCell.swift index 39221dcec..3e3d75b97 100644 --- a/Classes/Swift/Chat/Views/MultilineMessageCell.swift +++ b/Classes/Swift/Chat/Views/MultilineMessageCell.swift @@ -1000,7 +1000,9 @@ class MultilineMessageCell: SwipeCollectionViewCell, UICollectionViewDataSource, meetingView.isHidden = true event.chatMessage!.contents.forEach { content in + print("chatMessagecontentschatMessagecontents content.type \(eventMessage?.chatMessage?.contentType)") if (content.isFileTransfer && content.name != "" && !content.isVoiceRecording) { + print("chatMessagecontentschatMessagecontents 1") imagesGridCollectionView.append(getImageFrom(content, forReplyBubble: false)!) collectionViewImagesGrid.reloadData() @@ -1012,6 +1014,7 @@ class MultilineMessageCell: SwipeCollectionViewCell, UICollectionViewDataSource, } if (event.chatMessage?.isOutgoing == true && content.isFileTransfer && event.chatMessage?.isFileTransferInProgress == true && !content.isVoiceRecording) { + print("chatMessagecontentschatMessagecontents 2") var filePath = "" if VFSUtil.vfsEnabled(groupName: kLinphoneMsgNotificationAppGroupId) { filePath = content.exportPlainFile() @@ -1098,8 +1101,8 @@ class MultilineMessageCell: SwipeCollectionViewCell, UICollectionViewDataSource, } } - if content.type == "text"{ - //label.text = content.utf8Text.trimmingCharacters(in: .whitespacesAndNewlines) + if content.type == "text" && !content.isFile{ + print("chatMessagecontentschatMessagecontents 3 text \(content.isFile)") if event.chatMessage!.contents.count > 1 { NSLayoutConstraint.deactivate(labelConstraints) NSLayoutConstraint.activate(labelTopConstraints) @@ -1107,36 +1110,32 @@ class MultilineMessageCell: SwipeCollectionViewCell, UICollectionViewDataSource, NSLayoutConstraint.activate(labelConstraints) NSLayoutConstraint.deactivate(labelTopConstraints) } - - if imagesGridCollectionView.count == 0 { + + if imagesGridCollectionView.count == 0 { //imagesGridCollectionView.append(nil) - imagesGridCollectionViewNil += 1 - } + imagesGridCollectionViewNil += 1 + } label.font = label.font.withSize(17) - - if (content.utf8Text.trimmingCharacters(in: .whitespacesAndNewlines).unicodeScalars.first?.properties.isEmojiPresentation == true){ - var onlyEmojis = true - content.utf8Text.trimmingCharacters(in: .whitespacesAndNewlines).unicodeScalars.forEach { emoji in - if !emoji.properties.isEmojiPresentation && !emoji.properties.isWhitespace{ - onlyEmojis = false - } - } - if onlyEmojis { - label.font = label.font.withSize(51) - } - } - + if (content.utf8Text.trimmingCharacters(in: .whitespacesAndNewlines).unicodeScalars.first?.properties.isEmojiPresentation == true){ + var onlyEmojis = true + content.utf8Text.trimmingCharacters(in: .whitespacesAndNewlines).unicodeScalars.forEach { emoji in + if !emoji.properties.isEmojiPresentation && !emoji.properties.isWhitespace{ + onlyEmojis = false + } + } + if onlyEmojis { + label.font = label.font.withSize(51) + } + } checkIfIsLinkOrPhoneNumber(content: content.utf8Text) - - NSLayoutConstraint.deactivate(labelHiddenConstraints) label.isHidden = false - }else if content.type == "image"{ + print("chatMessagecontentschatMessagecontents 4 image") if imagesGridCollectionView.count > 1 { if(content.isFile){ imagesGridCollectionView.append(getImageFrom(content, forReplyBubble: false)!) @@ -1171,6 +1170,7 @@ class MultilineMessageCell: SwipeCollectionViewCell, UICollectionViewDataSource, } }else if content.type == "video"{ + print("chatMessagecontentschatMessagecontents 5 video") if imagesGridCollectionView.count > 1 { if(content.isFile){ imagesGridCollectionView.append(getImageFrom(content, forReplyBubble: false)!) @@ -1205,6 +1205,7 @@ class MultilineMessageCell: SwipeCollectionViewCell, UICollectionViewDataSource, } }else if content.isVoiceRecording { + print("chatMessagecontentschatMessagecontents 6 recording") recordingView.subviews.forEach({ view in view.removeFromSuperview() }) @@ -1213,6 +1214,7 @@ class MultilineMessageCell: SwipeCollectionViewCell, UICollectionViewDataSource, messageWithRecording = true } }else{ + print("chatMessagecontentschatMessagecontents 7 file") if(content.isFile && !content.isText){ var filePath = "" if VFSUtil.vfsEnabled(groupName: kLinphoneMsgNotificationAppGroupId) { @@ -1308,9 +1310,35 @@ class MultilineMessageCell: SwipeCollectionViewCell, UICollectionViewDataSource, imageViewBubble.image = nil NSLayoutConstraint.deactivate(imageConstraints) imageViewBubble.isHidden = true + } else { + var filePathString = VFSUtil.vfsEnabled(groupName: kLinphoneMsgNotificationAppGroupId) ? content.exportPlainFile() : content.filePath + if let urlEncoded = filePathString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed){ + if !urlEncoded.isEmpty { + if let urlFile = URL(string: "file://" + urlEncoded){ + do { + let text = try String(contentsOf: urlFile, encoding: .utf8) + + print("chatMessagecontentschatMessagecontents filetextfiletext \(text)") + imagesGridCollectionView.append(SwiftUtil.textToImage(drawText: "Error", inImage: UIImage(named: "file_default")!, forReplyBubble: true)) + collectionViewImagesGrid.reloadData() + + collectionViewImagesGrid.isHidden = false + NSLayoutConstraint.activate(imagesGridConstraints) + imageViewBubble.image = nil + NSLayoutConstraint.deactivate(imageConstraints) + imageViewBubble.isHidden = true + } catch {} + } + } + } + if VFSUtil.vfsEnabled(groupName: kLinphoneMsgNotificationAppGroupId) { + ChatConversationViewModel.sharedModel.removeTmpFile(filePath: filePathString) + filePathString = "" + } } } - }} + } + } if imagesGridCollectionView.count > 0 { self.collectionViewImagesGrid.layoutIfNeeded() } diff --git a/Classes/Swift/Util/Viewers/MediaViewer.swift b/Classes/Swift/Util/Viewers/MediaViewer.swift index 2033209d4..6069db562 100644 --- a/Classes/Swift/Util/Viewers/MediaViewer.swift +++ b/Classes/Swift/Util/Viewers/MediaViewer.swift @@ -44,6 +44,9 @@ class MediaViewer: BackNextNavigationView, UICompositeViewDelegate, UIScrollVie var player: AVPlayer? = AVPlayer() var playerLayer = AVPlayerLayer() + //PDF + let pdfView = PDFView() + override func viewDidLoad() { super.viewDidLoad( backAction: { @@ -69,38 +72,14 @@ class MediaViewer: BackNextNavigationView, UICompositeViewDelegate, UIScrollVie imageViewViewer.removeFromSuperview() imageScrollView.removeFromSuperview() playerLayer.removeFromSuperlayer() + pdfView.removeFromSuperview() if contentType == "image" { setUpImageView() } else if contentType == "video" { setUpPlayerContainerView() } else if contentType == "file" { if imageNameViewer.lowercased().components(separatedBy: ".").last == "pdf" { - /* - let pdfView = PDFView() - - //pdfView.translatesAutoresizingMaskIntoConstraints = false - view.addSubview(pdfView) - pdfView.backgroundColor = .red - pdfView.frame = CGRectMake(0, 0, UIScreen.main.bounds.size.width, UIScreen.main.bounds.size.height-20) - */ - - let pdfView = PDFView() - - pdfView.translatesAutoresizingMaskIntoConstraints = false - view.addSubview(pdfView) - - pdfView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true - pdfView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true - pdfView.topAnchor.constraint(equalTo: super.topBar.bottomAnchor).isActive = true - pdfView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true - - if let urlEncoded = imagePathViewer.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed){ - if let urlPDF = URL(string: urlEncoded){ - if let document = PDFDocument(url: urlPDF) { - pdfView.document = document - } - } - } + displayPDF() } } @@ -227,6 +206,30 @@ class MediaViewer: BackNextNavigationView, UICompositeViewDelegate, UIScrollVie } } + func displayPDF() { + if let urlEncoded = imagePathViewer.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed){ + if !urlEncoded.isEmpty { + pdfView.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(pdfView) + + pdfView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true + pdfView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true + pdfView.topAnchor.constraint(equalTo: super.topBar.bottomAnchor).isActive = true + pdfView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true + pdfView.autoScales = true + + if let urlEncoded = imagePathViewer.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed){ + if let path = URL(string: "file://" + urlEncoded) { + if let document = PDFDocument(url: path) { + pdfView.document = document + } + } + + } + } + } + } + @objc func videoTapped(){ if let urlEncoded = imagePathViewer.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed){ if !urlEncoded.isEmpty {