From aeeb7dba0b7528374de4a03d17e7475db130c586 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20M=C3=BCller?= Date: Sun, 9 Feb 2025 22:55:55 +0100 Subject: [PATCH] feat(quote): Show context when message is currently not loaded MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marcel Müller --- NextcloudTalk/BaseChatViewController.swift | 10 +++++++++ NextcloudTalk/ContextChatViewController.swift | 22 +++++++++++++++++++ .../NCMediaViewerViewController.swift | 13 +---------- .../RoomSharedItemsTableViewController.swift | 7 +----- NextcloudTalk/RoomsTableViewController.m | 18 +-------------- 5 files changed, 35 insertions(+), 35 deletions(-) diff --git a/NextcloudTalk/BaseChatViewController.swift b/NextcloudTalk/BaseChatViewController.swift index 632895fdf..5f58f69e9 100644 --- a/NextcloudTalk/BaseChatViewController.swift +++ b/NextcloudTalk/BaseChatViewController.swift @@ -3608,6 +3608,16 @@ import SwiftUI DispatchQueue.main.async { if let indexPath = self.indexPath(for: message) { self.highlightMessage(at: indexPath, with: .top) + } else { + // Show context of messages that are currently not loaded + guard let account = self.room.account, + let chatViewController = ContextChatViewController(forRoom: self.room, withAccount: account, withMessage: [], withHighlightId: 0) + else { return } + + chatViewController.showContext(ofMessageId: message.messageId, withLimit: 50, withCloseButton: true) + + let navController = NCNavigationController(rootViewController: chatViewController) + self.present(navController, animated: true) } } } diff --git a/NextcloudTalk/ContextChatViewController.swift b/NextcloudTalk/ContextChatViewController.swift index 698b3399c..154c039ca 100644 --- a/NextcloudTalk/ContextChatViewController.swift +++ b/NextcloudTalk/ContextChatViewController.swift @@ -12,4 +12,26 @@ import Foundation self.titleView?.longPressGestureRecognizer.isEnabled = false } + + public func showContext(ofMessageId messageId: Int, withLimit limit: Int, withCloseButton closeButton: Bool) { + // Fetch the context of the message and update the BaseChatViewController + NCChatController(for: self.room).getMessageContext(forMessageId: messageId, withLimit: limit) { [weak self] messages in + guard let self else { return } + + guard let messages, messages.count > 0 else { + let errorMessage = NSLocalizedString("Unable to get context of the message", comment: "") + NotificationPresenter.shared().present(text: errorMessage, dismissAfterDelay: 5.0, includedStyle: .dark) + return + } + + self.appendMessages(messages: messages) + self.reloadDataAndHighlightMessage(messageId: messageId) + } + + if closeButton { + self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: NSLocalizedString("Close", comment: ""), primaryAction: UIAction { [unowned self] _ in + self.dismiss(animated: true) + }) + } + } } diff --git a/NextcloudTalk/NCMediaViewerViewController.swift b/NextcloudTalk/NCMediaViewerViewController.swift index c0d9d1a17..5368dd099 100644 --- a/NextcloudTalk/NCMediaViewerViewController.swift +++ b/NextcloudTalk/NCMediaViewerViewController.swift @@ -48,18 +48,7 @@ import UIKit 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) - } - - chatViewController.navigationItem.rightBarButtonItem = UIBarButtonItem(title: NSLocalizedString("Close", comment: ""), primaryAction: UIAction { [weak chatViewController] _ in - chatViewController?.dismiss(animated: true) - }) + chatViewController.showContext(ofMessageId: message.messageId, withLimit: 50, withCloseButton: true) let navController = NCNavigationController(rootViewController: chatViewController) self.present(navController, animated: true) diff --git a/NextcloudTalk/RoomSharedItemsTableViewController.swift b/NextcloudTalk/RoomSharedItemsTableViewController.swift index 222ab5149..1faaf7661 100644 --- a/NextcloudTalk/RoomSharedItemsTableViewController.swift +++ b/NextcloudTalk/RoomSharedItemsTableViewController.swift @@ -409,12 +409,7 @@ import QuickLook // Fetch the context of the message and update the BaseChatViewController let message = self.currentItems[indexPath.row] - 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) - } + chatViewController.showContext(ofMessageId: message.messageId, withLimit: 50, withCloseButton: false) let navController = NCNavigationController(rootViewController: chatViewController) self.previewNavigationChatViewController = navController diff --git a/NextcloudTalk/RoomsTableViewController.m b/NextcloudTalk/RoomsTableViewController.m index 1d6660d25..680f1b444 100644 --- a/NextcloudTalk/RoomsTableViewController.m +++ b/NextcloudTalk/RoomsTableViewController.m @@ -1293,28 +1293,12 @@ - (void)presentContextChatInRoom:(NCRoom *)room forMessageId:(NSInteger)messageI } ContextChatViewController *contextChatViewController = [[ContextChatViewController alloc] initForRoom:room withAccount:account withMessage:@[] withHighlightId:0]; - contextChatViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(closeContextChat)]; - - NCChatController *chatController = [[NCChatController alloc] initForRoom:room]; - [chatController getMessageContextForMessageId:messageId withLimit:50 withCompletionBlock:^(NSArray * _Nullable messages) { - if (messages.count > 0) { - [contextChatViewController appendMessagesWithMessages:messages]; - [contextChatViewController reloadDataAndHighlightMessageWithMessageId:messageId]; - } else { - NSString *errorMessage = NSLocalizedString(@"Unable to get context of the message", nil); - [[JDStatusBarNotificationPresenter sharedPresenter] presentWithText:errorMessage dismissAfterDelay:5.0 includedStyle:JDStatusBarNotificationIncludedStyleDark]; - } - }]; + [contextChatViewController showContextOfMessageId:messageId withLimit:50 withCloseButton:YES]; _contextChatNavigationController = [[NCNavigationController alloc] initWithRootViewController:contextChatViewController]; [self presentViewController:_contextChatNavigationController animated:YES completion:nil]; } -- (void)closeContextChat -{ - [_contextChatNavigationController dismissViewControllerAnimated:YES completion:nil]; -} - - (void)createRoomForSelectedUser:(NCUser *)user { [[NCAPIController sharedInstance]