diff --git a/NextcloudTalk/BaseChatViewController.swift b/NextcloudTalk/BaseChatViewController.swift index 0201bd125..5f289844c 100644 --- a/NextcloudTalk/BaseChatViewController.swift +++ b/NextcloudTalk/BaseChatViewController.swift @@ -3342,7 +3342,7 @@ import SwiftUI public func cellWants(toDownloadFile fileParameter: NCMessageFileParameter, for message: NCChatMessage) { if NCUtils.isImage(fileType: fileParameter.mimetype) { - let mediaViewController = NCMediaViewerViewController(initialMessage: message) + let mediaViewController = NCMediaViewerViewController(initialMessage: message, room: self.room) let navController = CustomPresentableNavigationController(rootViewController: mediaViewController) self.present(navController, interactiveDismissalType: .standard) @@ -3356,7 +3356,7 @@ import SwiftUI if NCUtils.isVideo(fileType: fileParameter.mimetype) { // Skip unsupported formats here ("webm" and "mkv") and use VLC later if !fileExtension.isEmpty, !VLCKitVideoViewController.supportedFileExtensions.contains(fileExtension) { - let mediaViewController = NCMediaViewerViewController(initialMessage: message) + let mediaViewController = NCMediaViewerViewController(initialMessage: message, room: self.room) let navController = CustomPresentableNavigationController(rootViewController: mediaViewController) self.present(navController, interactiveDismissalType: .standard) diff --git a/NextcloudTalk/NCMediaViewerViewController.swift b/NextcloudTalk/NCMediaViewerViewController.swift index 7f38f90fa..ecfa95e16 100644 --- a/NextcloudTalk/NCMediaViewerViewController.swift +++ b/NextcloudTalk/NCMediaViewerViewController.swift @@ -11,6 +11,7 @@ import UIKit UIPageViewControllerDataSource, NCMediaViewerPageViewControllerDelegate { + private let room: NCRoom private let pageController = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal) private var initialMessage: NCChatMessage @@ -38,7 +39,36 @@ import UIKit return shareButton }() - init(initialMessage: NCChatMessage) { + private lazy var showMessageButton = { + let showMessageButton = UIBarButtonItem(title: nil, style: .plain, target: nil, action: nil) + showMessageButton.isEnabled = false + showMessageButton.primaryAction = UIAction(title: "", image: .init(systemName: "text.magnifyingglass"), handler: { [unowned self, unowned showMessageButton] _ in + guard let mediaPageViewController = self.getCurrentPageViewController() else { return } + + let message = mediaPageViewController.message + + if let account = message.account, let chatViewController = ContextChatViewController(forRoom: self.room, withAccount: account, withMessage: [], withHighlightId: 0) { + + // Fetch the context of the message and update the BaseChatViewController + NCChatController(for: self.room).getMessageContext(forMessageId: message.messageId, withLimit: 50) { messages in + guard let messages else { return } + + chatViewController.appendMessages(messages: messages) + chatViewController.reloadDataAndHighlightMessage(messageId: message.messageId) + + } + + let navController = NCNavigationController(rootViewController: chatViewController) + self.present(navController, animated: true) + } + + }) + + return showMessageButton + }() + + init(initialMessage: NCChatMessage, room: NCRoom) { + self.room = room self.initialMessage = initialMessage super.init(nibName: nil, bundle: nil) @@ -87,11 +117,14 @@ import UIKit let appearance = UIToolbarAppearance() appearance.backgroundColor = .secondarySystemBackground + self.navigationController?.toolbar.standardAppearance = appearance self.navigationController?.toolbar.compactAppearance = appearance self.navigationController?.toolbar.scrollEdgeAppearance = appearance - self.toolbarItems = [shareButton] + let fixedSpace = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil) + fixedSpace.width = 20 + self.toolbarItems = [shareButton, fixedSpace, showMessageButton] } func getCurrentPageViewController() -> NCMediaViewerPageViewController? { @@ -184,6 +217,7 @@ import UIKit self.navigationItem.title = mediaPageViewController.navigationItem.title self.shareButton.isEnabled = (mediaPageViewController.currentImage != nil) || (mediaPageViewController.currentVideoURL != nil) + self.showMessageButton.isEnabled = (mediaPageViewController.currentImage != nil) || (mediaPageViewController.currentVideoURL != nil) } // MARK: - NCMediaViewerPageViewController delegate @@ -206,6 +240,7 @@ import UIKit func mediaViewerPageMediaDidLoad(_ controller: NCMediaViewerPageViewController) { if let mediaPageViewController = self.getCurrentPageViewController(), mediaPageViewController.isEqual(controller) { self.shareButton.isEnabled = true + self.showMessageButton.isEnabled = true } } }