Selaa lähdekoodia

Merge pull request #987 from deltachat/scroll-to-search-result

scroll to search result
bjoern 4 vuotta sitten
vanhempi
commit
01780f0e7b

+ 1 - 0
DcShare/ViewModel/ChatListViewModel.swift

@@ -89,6 +89,7 @@ class ChatListViewModel: NSObject {
             dcContext: dcContext,
             chatData: ChatCellData(
                 chatId: chatId,
+                highlightMsgId: nil,
                 summary: summary,
                 unreadMessages: unreadMessages
             ),

+ 7 - 2
deltachat-ios/Chat/ChatViewController.swift

@@ -86,6 +86,7 @@ class ChatViewController: UITableViewController {
     private var disableWriting: Bool
     private var showNamesAboveMessage: Bool
     var showCustomNavBar = true
+    var highlightedMsg: Int?
 
     private lazy var mediaPicker: MediaPicker? = {
         let mediaPicker = MediaPicker(navigationController: navigationController)
@@ -98,12 +99,13 @@ class ChatViewController: UITableViewController {
         return view
     }()
 
-    init(dcContext: DcContext, chatId: Int) {
+    init(dcContext: DcContext, chatId: Int, highlightedMsg: Int? = nil) {
         let dcChat = dcContext.getChat(chatId: chatId)
         self.dcContext = dcContext
         self.chatId = chatId
         self.disableWriting = !dcChat.canSend
         self.showNamesAboveMessage = dcChat.isGroup
+        self.highlightedMsg = highlightedMsg
         super.init(nibName: nil, bundle: nil)
         hidesBottomBarWhenPushed = true
     }
@@ -541,7 +543,10 @@ class ChatViewController: UITableViewController {
                 // update message ids
                 self.messageIds = self.getMessageIds()
                 self.tableView.reloadData()
-                if wasMessageIdsEmpty ||
+                if let msgId = self.highlightedMsg, let msgPosition = self.messageIds.firstIndex(of: msgId) {
+                    self.tableView.scrollToRow(at: IndexPath(row: msgPosition, section: 0), at: .top, animated: false)
+                    self.highlightedMsg = nil
+                } else if wasMessageIdsEmpty ||
                     wasLastRowVisible {
                     self.scrollToBottom(animated: false)
                 }

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

@@ -245,7 +245,7 @@ class ChatListController: UITableViewController {
             if chatId == DC_CHAT_ID_ARCHIVED_LINK {
                 showArchive()
             } else {
-                showChat(chatId: chatId)
+                showChat(chatId: chatId, highlightedMsg: chatData.highlightMsgId)
             }
         case .contact(let contactData):
             let contactId = contactData.contactId
@@ -405,9 +405,9 @@ class ChatListController: UITableViewController {
         navigationController?.pushViewController(newChatVC, animated: true)
     }
 
-    func showChat(chatId: Int, animated: Bool = true) {
+    func showChat(chatId: Int, highlightedMsg: Int? = nil, animated: Bool = true) {
         //let chatVC = ChatViewController(dcContext: dcContext, chatId: chatId)
-        let chatVC = ChatViewController(dcContext: dcContext, chatId: chatId)
+        let chatVC = ChatViewController(dcContext: dcContext, chatId: chatId, highlightedMsg: highlightedMsg)
         navigationController?.pushViewController(chatVC, animated: animated)
     }
 

+ 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, highlightedMsg: Int? = nil) {
         super.init(dcContext: dcContext, chatId: chatId)
         hidesBottomBarWhenPushed = true
         showCustomNavBar = false

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

@@ -227,6 +227,7 @@ private extension ChatListViewModel {
             dcContext: dcContext,
             chatData: ChatCellData(
                 chatId: chatId,
+                highlightMsgId: nil,
                 summary: summary,
                 unreadMessages: unreadMessages
             ),
@@ -246,6 +247,7 @@ private extension ChatListViewModel {
             dcContext: dcContext,
             chatData: ChatCellData(
                 chatId: chatId,
+                highlightMsgId: msgId,
                 summary: summary,
                 unreadMessages: unreadMessages
             )

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

@@ -23,6 +23,7 @@ struct ContactCellData {
 
 struct ChatCellData {
     let chatId: Int
+    let highlightMsgId: Int?
     let summary: DcLot
     let unreadMessages: Int
 }

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

@@ -146,7 +146,7 @@ class ContactDetailViewModel {
         let chatId = sharedChats.getChatId(index: index)
         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, highlightMsgId: nil, summary: summary, unreadMessages: unreadMessages)
         let cellViewModel = ChatCellViewModel(dcContext: context, chatData: cellData)
         cell.updateCell(cellViewModel: cellViewModel)
     }