فهرست منبع

manually added changes from #606

nayooti 5 سال پیش
والد
کامیت
1c28e192d6

+ 1 - 1
deltachat-ios/Controller/ChatListController.swift

@@ -216,7 +216,7 @@ class ChatListController: UITableViewController {
             if chatId == DC_CHAT_ID_ARCHIVED_LINK {
                 coordinator?.showArchive()
             } else {
-                coordinator?.showChat(chatId: chatId)
+                coordinator?.showChat(chatId: chatId, msgId: chatData.msgId)
             }
         case .contact(let contactData):
             let contactId = contactData.contactId

+ 19 - 2
deltachat-ios/Controller/ChatViewController.swift

@@ -45,6 +45,7 @@ class ChatViewController: MessagesViewController {
 
     let outgoingAvatarOverlap: CGFloat = 17.5
 
+    private var searchedMsgId: Int?
     let chatId: Int
     var messageList: [DcMsg] = []
 
@@ -79,7 +80,7 @@ class ChatViewController: MessagesViewController {
         return messageInputBar
     }
 
-    init(dcContext: DcContext, chatId: Int) {
+    init(dcContext: DcContext, chatId: Int, searchedMsgId: Int? = nil) {
         let dcChat = dcContext.getChat(chatId: chatId)
         self.dcContext = dcContext
         self.chatId = chatId
@@ -87,6 +88,7 @@ class ChatViewController: MessagesViewController {
         self.showNamesAboveMessage = dcChat.isGroup
         super.init(nibName: nil, bundle: nil)
         hidesBottomBarWhenPushed = true
+        self.searchedMsgId = searchedMsgId
     }
 
     required init?(coder _: NSCoder) {
@@ -301,7 +303,12 @@ class ChatViewController: MessagesViewController {
             DispatchQueue.main.async {
                 self.messageList = self.getMessageIds()
                 self.messagesCollectionView.reloadData()
-                self.messagesCollectionView.scrollToBottom(animated: false)
+                if let msgId = self.searchedMsgId {
+                    self.scrollToMessage(id: msgId, animated: false)
+                    self.searchedMsgId = nil
+                } else {
+                    self.messagesCollectionView.scrollToBottom(animated: false)
+                }
                 self.showEmptyStateView(self.messageList.isEmpty)
             }
         }
@@ -348,6 +355,16 @@ class ChatViewController: MessagesViewController {
         }
     }
 
+    func scrollToMessage(id: Int, animated: Bool) {
+        for (index, msg) in messageList.enumerated() {
+            if msg.id == id {
+                let indexPath = IndexPath(row: 0, section: index)
+                messagesCollectionView.scrollToItem(at: indexPath, at: .top, animated: animated)
+                return
+            }
+        }
+    }
+
     @objc private func setTextDraft() {
         if let text = self.messageInputBar.inputTextView.text {
             dcContext.setDraft(chatId: chatId, draftText: text)

+ 1 - 1
deltachat-ios/Controller/MailboxViewController.swift

@@ -3,7 +3,7 @@ import DcCore
 
 class MailboxViewController: ChatViewController {
 
-    override init(dcContext: DcContext, chatId: Int) {
+    override init(dcContext: DcContext, chatId: Int, searchedMsgId: Int? = nil) {
         super.init(dcContext: dcContext, chatId: chatId)
         hidesBottomBarWhenPushed = true
         showCustomNavBar = false

+ 2 - 2
deltachat-ios/Coordinator/AppCoordinator.swift

@@ -244,8 +244,8 @@ class ChatListCoordinator: Coordinator {
         navigationController.pushViewController(newChatVC, animated: true)
     }
 
-    func showChat(chatId: Int) {
-        let chatVC = ChatViewController(dcContext: dcContext, chatId: chatId)
+    func showChat(chatId: Int, msgId: Int? = nil) {
+        let chatVC = ChatViewController(dcContext: dcContext, chatId: chatId, searchedMsgId: msgId)
         let coordinator = ChatViewCoordinator(dcContext: dcContext, navigationController: navigationController, chatId: chatId)
         childCoordinators.append(coordinator)
         chatVC.coordinator = coordinator

+ 4 - 2
deltachat-ios/ViewModel/ChatListViewModel.swift

@@ -217,7 +217,8 @@ private extension ChatListViewModel {
             chatData: ChatCellData(
                 chatId: chatId,
                 summary: summary,
-                unreadMessages: unreadMessages
+                unreadMessages: unreadMessages,
+                msgId: nil
             ),
             titleHighlightIndexes: chatTitleIndexes
         )
@@ -236,7 +237,8 @@ private extension ChatListViewModel {
             chatData: ChatCellData(
                 chatId: chatId,
                 summary: summary,
-                unreadMessages: unreadMessages
+                unreadMessages: unreadMessages,
+                msgId: msgId
             )
         )
         let subtitle = viewModel.subtitle

+ 1 - 0
deltachat-ios/ViewModel/ContactCellViewModel.swift

@@ -24,6 +24,7 @@ struct ChatCellData {
     let chatId: Int
     let summary: DcLot
     let unreadMessages: Int
+    let msgId: Int?
 }
 
 struct DeaddropCellData {

+ 1 - 1
deltachat-ios/ViewModel/ContactDetailViewModel.swift

@@ -116,7 +116,7 @@ class ContactDetailViewModel: ContactDetailViewModelProtocol {
         let summary = sharedChats.getSummary(index: index)
         let unreadMessages = context.getUnreadMessages(chatId: chatId)
 
-        let cellData = ChatCellData(chatId: chatId, summary: summary, unreadMessages: unreadMessages)
+        let cellData = ChatCellData(chatId: chatId, summary: summary, unreadMessages: unreadMessages, msgId: nil)
         let cellViewModel = ChatCellViewModel(dcContext: context, chatData: cellData)
         cell.updateCell(cellViewModel: cellViewModel)
     }