From 3a626ed80a52582dd0e4dbb4c17edbe2a08d2094 Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Tue, 18 Jan 2022 13:35:53 +1100 Subject: [PATCH] fix a deadlock issue --- Session/Home/GlobalSearch.swift | 22 +++++-------------- Session/Home/HomeVC+Search.swift | 2 +- SessionMessagingKit/Threads/TSContactThread.m | 7 ++++++ SessionMessagingKit/Threads/TSGroupThread.m | 5 +++++ SessionMessagingKit/Threads/TSThread.h | 2 ++ SessionMessagingKit/Threads/TSThread.m | 5 +++++ .../Messaging/ThreadViewModel.swift | 2 +- 7 files changed, 27 insertions(+), 18 deletions(-) diff --git a/Session/Home/GlobalSearch.swift b/Session/Home/GlobalSearch.swift index 811e4d1cd..145a0807e 100644 --- a/Session/Home/GlobalSearch.swift +++ b/Session/Home/GlobalSearch.swift @@ -11,6 +11,9 @@ public protocol GlobalSearchViewDelegate: AnyObject { @objc public class GlobalSearchViewController: UITableViewController { + @objc + public static let minimumSearchTextLength: Int = 2 + @objc public weak var delegate: GlobalSearchViewDelegate? @@ -106,16 +109,13 @@ public class GlobalSearchViewController: UITableViewController { private func updateSearchResults(searchText rawSearchText: String) { let searchText = rawSearchText.stripped - guard searchText.count > 0 else { + guard searchText.count >= GlobalSearchViewController.minimumSearchTextLength else { searchResultSet = HomeScreenSearchResultSet.empty lastSearchText = nil reloadTableData() return } - guard lastSearchText != searchText else { - // Ignoring redundant search. - return - } + guard lastSearchText != searchText else { return } lastSearchText = searchText @@ -125,17 +125,7 @@ public class GlobalSearchViewController: UITableViewController { searchResults = strongSelf.searcher.searchForHomeScreen(searchText: searchText, transaction: transaction) }, completionBlock: { [weak self] in AssertIsOnMainThread() - guard let self = self else { return } - - guard let results = searchResults else { - owsFailDebug("searchResults was unexpectedly nil") - return - } - guard self.lastSearchText == searchText else { - // Discard results from stale search. - return - } - + guard let self = self, let results = searchResults, self.lastSearchText == searchText else { return } self.searchResultSet = results self.reloadTableData() }) diff --git a/Session/Home/HomeVC+Search.swift b/Session/Home/HomeVC+Search.swift index 829a6e7b3..6eead612a 100644 --- a/Session/Home/HomeVC+Search.swift +++ b/Session/Home/HomeVC+Search.swift @@ -37,7 +37,7 @@ extension HomeVC: UISearchBarDelegate, GlobalSearchViewDelegate { func updateSearchResultsVisibility() { guard let searchText = searchBar.text?.ows_stripped() else { return } searchResultsController.searchText = searchText - let isSearching = searchText.count > 0 + let isSearching = searchText.count >= GlobalSearchViewController.minimumSearchTextLength searchResultsController.view.isHidden = !isSearching tableView.isScrollEnabled = !isSearching } diff --git a/SessionMessagingKit/Threads/TSContactThread.m b/SessionMessagingKit/Threads/TSContactThread.m index 1024389f7..c69994802 100644 --- a/SessionMessagingKit/Threads/TSContactThread.m +++ b/SessionMessagingKit/Threads/TSContactThread.m @@ -69,6 +69,13 @@ NSString *const TSContactThreadPrefix = @"c"; return [contact displayNameFor:SNContactContextRegular] ?: sessionID; } +- (NSString *)nameWithTransaction:(YapDatabaseReadTransaction *)transaction +{ + NSString *sessionID = self.contactSessionID; + SNContact *contact = [LKStorage.shared getContactWithSessionID:sessionID using:transaction]; + return [contact displayNameFor:SNContactContextRegular] ?: sessionID; +} + + (NSString *)threadIDFromContactSessionID:(NSString *)contactSessionID { return [TSContactThreadPrefix stringByAppendingString:contactSessionID]; } diff --git a/SessionMessagingKit/Threads/TSGroupThread.m b/SessionMessagingKit/Threads/TSGroupThread.m index 382f6ed5e..61b2e706e 100644 --- a/SessionMessagingKit/Threads/TSGroupThread.m +++ b/SessionMessagingKit/Threads/TSGroupThread.m @@ -192,6 +192,11 @@ NSString *const TSGroupThread_NotificationKey_UniqueId = @"TSGroupThread_Notific return self.groupModel.groupName ?: self.class.defaultGroupName; } +- (NSString *)nameWithTransaction:(YapDatabaseReadTransaction *)transaction +{ + return [self name]; +} + + (NSString *)defaultGroupName { return @"Group"; diff --git a/SessionMessagingKit/Threads/TSThread.h b/SessionMessagingKit/Threads/TSThread.h index c2449397a..dcf5346c3 100644 --- a/SessionMessagingKit/Threads/TSThread.h +++ b/SessionMessagingKit/Threads/TSThread.h @@ -38,6 +38,8 @@ BOOL IsNoteToSelfEnabled(void); */ - (NSString *)name; +- (NSString *)nameWithTransaction:(YapDatabaseReadTransaction *)transaction; + /** * @returns recipientId for each recipient in the thread */ diff --git a/SessionMessagingKit/Threads/TSThread.m b/SessionMessagingKit/Threads/TSThread.m index 6283a324d..94402dc2f 100644 --- a/SessionMessagingKit/Threads/TSThread.m +++ b/SessionMessagingKit/Threads/TSThread.m @@ -148,6 +148,11 @@ BOOL IsNoteToSelfEnabled(void) return nil; } +- (NSString *)nameWithTransaction:(YapDatabaseReadTransaction *)transaction +{ + return nil; +} + - (NSArray *)recipientIdentifiers { return @[]; diff --git a/SignalUtilitiesKit/Messaging/ThreadViewModel.swift b/SignalUtilitiesKit/Messaging/ThreadViewModel.swift index 2e6f9bab1..daf54062c 100644 --- a/SignalUtilitiesKit/Messaging/ThreadViewModel.swift +++ b/SignalUtilitiesKit/Messaging/ThreadViewModel.swift @@ -30,7 +30,7 @@ public class ThreadViewModel: NSObject { self.threadRecord = thread self.isGroupThread = thread.isGroupThread() - self.name = thread.name() + self.name = thread.name(with: transaction) self.isMuted = thread.isMuted self.isPinned = thread.isPinned self.lastMessageText = thread.lastMessageText(transaction: transaction)