From d27faf551bf627834749b7e1b220ed6942fbb40d Mon Sep 17 00:00:00 2001 From: ryanzhao Date: Wed, 23 Feb 2022 15:49:19 +1100 Subject: [PATCH] reduce unnecessary database read --- .../GlobalSearch/GlobalSearchViewController.swift | 14 ++++++-------- Session/Shared/ConversationCell.swift | 5 +++-- .../Messaging/FullTextSearcher.swift | 13 +++++-------- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/Session/Home/GlobalSearch/GlobalSearchViewController.swift b/Session/Home/GlobalSearch/GlobalSearchViewController.swift index 4d1691364..8bb5829c0 100644 --- a/Session/Home/GlobalSearch/GlobalSearchViewController.swift +++ b/Session/Home/GlobalSearch/GlobalSearchViewController.swift @@ -192,12 +192,12 @@ extension GlobalSearchViewController { SNLog("shouldn't be able to tap 'no results' section") case .contacts: let sectionResults = searchResultSet.conversations - guard let searchResult = sectionResults[safe: indexPath.row], let threadId = searchResult.thread.threadRecord.uniqueId, let thread = TSThread.fetch(uniqueId: threadId) else { return } - show(thread, highlightedMessageID: nil, animated: true) + guard let searchResult = sectionResults[safe: indexPath.row] else { return } + show(searchResult.thread.threadRecord, highlightedMessageID: nil, animated: true) case .messages: let sectionResults = searchResultSet.messages - guard let searchResult = sectionResults[safe: indexPath.row], let threadId = searchResult.thread.threadRecord.uniqueId, let thread = TSThread.fetch(uniqueId: threadId) else { return } - show(thread, highlightedMessageID: searchResult.messageId, animated: true) + guard let searchResult = sectionResults[safe: indexPath.row] else { return } + show(searchResult.thread.threadRecord, highlightedMessageID: searchResult.message?.uniqueId, animated: true) case .recent: guard let threadId = recentSearchResults[safe: indexPath.row], let thread = TSThread.fetch(uniqueId: threadId) else { return } show(thread, highlightedMessageID: nil, animated: true, isFromRecent: true) @@ -336,7 +336,7 @@ extension GlobalSearchViewController { cell.isShowingGlobalSearchResult = true let searchResult = sectionResults[safe: indexPath.row] cell.threadViewModel = searchResult?.thread - cell.configure(messageDate: searchResult?.messageDate, snippet: searchResult?.snippet, searchText: searchResultSet.searchText) + cell.configure(snippet: searchResult?.snippet, searchText: searchResultSet.searchText) return cell case .messages: let sectionResults = searchResultSet.messages @@ -344,9 +344,7 @@ extension GlobalSearchViewController { cell.isShowingGlobalSearchResult = true let searchResult = sectionResults[safe: indexPath.row] cell.threadViewModel = searchResult?.thread - var message: TSMessage? = nil - if let messageId = searchResult?.messageId { message = TSMessage.fetch(uniqueId: messageId) } - cell.configure(messageDate: searchResult?.messageDate, snippet: searchResult?.snippet, searchText: searchResultSet.searchText, message: message) + cell.configure(snippet: searchResult?.snippet, searchText: searchResultSet.searchText, message: searchResult?.message) return cell case .recent: let cell = tableView.dequeueReusableCell(withIdentifier: ConversationCell.reuseIdentifier) as! ConversationCell diff --git a/Session/Shared/ConversationCell.swift b/Session/Shared/ConversationCell.swift index 2f6a47f2f..8369778c8 100644 --- a/Session/Shared/ConversationCell.swift +++ b/Session/Shared/ConversationCell.swift @@ -219,10 +219,11 @@ final class ConversationCell : UITableViewCell { timestampLabel.isHidden = true } - public func configure(messageDate: Date?, snippet: String?, searchText: String, message: TSMessage? = nil) { + public func configure(snippet: String?, searchText: String, message: TSMessage? = nil) { let normalizedSearchText = searchText.lowercased() - if let messageDate = messageDate, let snippet = snippet { + if let messageTimestamp = message?.timestamp, let snippet = snippet { // Message + let messageDate = NSDate.ows_date(withMillisecondsSince1970: messageTimestamp) displayNameLabel.attributedText = NSMutableAttributedString(string: getDisplayName(), attributes: [.foregroundColor:Colors.text]) timestampLabel.isHidden = false timestampLabel.text = DateUtil.formatDate(forDisplay: messageDate) diff --git a/SignalUtilitiesKit/Messaging/FullTextSearcher.swift b/SignalUtilitiesKit/Messaging/FullTextSearcher.swift index 236ad7e44..8efe00335 100644 --- a/SignalUtilitiesKit/Messaging/FullTextSearcher.swift +++ b/SignalUtilitiesKit/Messaging/FullTextSearcher.swift @@ -22,18 +22,16 @@ public struct ConversationSortKey: Comparable { public class ConversationSearchResult: Comparable where SortKey: Comparable { public let thread: ThreadViewModel - public let messageId: String? - public let messageDate: Date? + public let message: TSMessage? public let snippet: String? private let sortKey: SortKey - init(thread: ThreadViewModel, sortKey: SortKey, messageId: String? = nil, messageDate: Date? = nil, snippet: String? = nil) { + init(thread: ThreadViewModel, sortKey: SortKey, message: TSMessage? = nil, snippet: String? = nil) { self.thread = thread self.sortKey = sortKey - self.messageId = messageId - self.messageDate = messageDate + self.message = message self.snippet = snippet } @@ -47,7 +45,7 @@ public class ConversationSearchResult: Comparable where SortKey: Compar public static func == (lhs: ConversationSearchResult, rhs: ConversationSearchResult) -> Bool { return lhs.thread.threadRecord.uniqueId == rhs.thread.threadRecord.uniqueId && - lhs.messageId == rhs.messageId + lhs.message?.uniqueId == rhs.message?.uniqueId } } @@ -270,8 +268,7 @@ public class FullTextSearcher: NSObject { let sortKey = message.sortId let searchResult = ConversationSearchResult(thread: threadViewModel, sortKey: sortKey, - messageId: message.uniqueId, - messageDate: NSDate.ows_date(withMillisecondsSince1970: message.timestamp), + message: message, snippet: snippet) messages.append(searchResult)