From 9ab8bec2b1e902fe4b265233fe6f9fdbd5545c82 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Fri, 4 Jan 2019 11:38:30 -0500 Subject: [PATCH] Fix searching for 'note to self'. --- SignalMessaging/Views/ContactsViewHelper.m | 9 +++++-- .../utils/ConversationSearcher.swift | 27 ++++++++++++++++--- SignalMessaging/utils/Searcher.swift | 3 +-- .../src/Storage/FullTextSearchFinder.swift | 22 +++++++-------- 4 files changed, 43 insertions(+), 18 deletions(-) diff --git a/SignalMessaging/Views/ContactsViewHelper.m b/SignalMessaging/Views/ContactsViewHelper.m index 4b39fa18f..a351eecf9 100644 --- a/SignalMessaging/Views/ContactsViewHelper.m +++ b/SignalMessaging/Views/ContactsViewHelper.m @@ -1,5 +1,5 @@ // -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. +// Copyright (c) 2019 Open Whisper Systems. All rights reserved. // #import "ContactsViewHelper.h" @@ -206,7 +206,12 @@ NS_ASSUME_NONNULL_BEGIN - (NSArray *)signalAccountsMatchingSearchString:(NSString *)searchText { - return [self.conversationSearcher filterSignalAccounts:self.signalAccounts withSearchText:searchText]; + // Check for matches against "Note to Self". + NSMutableArray *signalAccountsToSearch = [self.signalAccounts mutableCopy]; + SignalAccount *selfAccount = [[SignalAccount alloc] initWithRecipientId:self.localNumber]; + [signalAccountsToSearch addObject:selfAccount]; + return [self.conversationSearcher filterSignalAccounts:signalAccountsToSearch + withSearchText:searchText]; } - (BOOL)doesContact:(Contact *)contact matchSearchTerm:(NSString *)searchTerm diff --git a/SignalMessaging/utils/ConversationSearcher.swift b/SignalMessaging/utils/ConversationSearcher.swift index 8f7d5a9d3..315d5b5e6 100644 --- a/SignalMessaging/utils/ConversationSearcher.swift +++ b/SignalMessaging/utils/ConversationSearcher.swift @@ -1,5 +1,5 @@ // -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. +// Copyright (c) 2019 Open Whisper Systems. All rights reserved. // import Foundation @@ -102,6 +102,14 @@ public class SearchResultSet { @objc public class ConversationSearcher: NSObject { + // MARK: - Dependencies + + private var tsAccountManager: TSAccountManager { + return TSAccountManager.sharedInstance() + } + + // MARK: - + private let finder: FullTextSearchFinder @objc @@ -222,12 +230,25 @@ public class ConversationSearcher: NSObject { private lazy var contactThreadSearcher: Searcher = Searcher { (contactThread: TSContactThread) in let recipientId = contactThread.contactIdentifier() - return self.indexingString(recipientId: recipientId) + return self.conversationIndexingString(recipientId: recipientId) } private lazy var signalAccountSearcher: Searcher = Searcher { (signalAccount: SignalAccount) in let recipientId = signalAccount.recipientId - return self.indexingString(recipientId: recipientId) + return self.conversationIndexingString(recipientId: recipientId) + } + + private func conversationIndexingString(recipientId: String) -> String { + var result = self.indexingString(recipientId: recipientId) + + if let localNumber = tsAccountManager.localNumber() { + if localNumber == recipientId { + let noteToSelfLabel = NSLocalizedString("NOTE_TO_SELF", comment: "Label for 1:1 conversation with yourself.") + result += " \(noteToSelfLabel)" + } + } + + return result } private var contactsManager: OWSContactsManager { diff --git a/SignalMessaging/utils/Searcher.swift b/SignalMessaging/utils/Searcher.swift index 207177641..26ff9ee32 100644 --- a/SignalMessaging/utils/Searcher.swift +++ b/SignalMessaging/utils/Searcher.swift @@ -1,5 +1,5 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2019 Open Whisper Systems. All rights reserved. // import Foundation @@ -30,7 +30,6 @@ public class Searcher { public func matches(item: T, query: String) -> Bool { let itemString = normalize(string: indexer(item)) - return stem(string: query).map { queryStem in return itemString.contains(queryStem) }.reduce(true) { $0 && $1 } diff --git a/SignalServiceKit/src/Storage/FullTextSearchFinder.swift b/SignalServiceKit/src/Storage/FullTextSearchFinder.swift index 234c45287..ed4c7cdcc 100644 --- a/SignalServiceKit/src/Storage/FullTextSearchFinder.swift +++ b/SignalServiceKit/src/Storage/FullTextSearchFinder.swift @@ -169,7 +169,16 @@ public class FullTextSearchFinder: NSObject { private static let contactThreadIndexer: SearchIndexer = SearchIndexer { (contactThread: TSContactThread, transaction: YapDatabaseReadTransaction) in let recipientId = contactThread.contactIdentifier() - return recipientIndexer.index(recipientId, transaction: transaction) + var result = recipientIndexer.index(recipientId, transaction: transaction) + + if let localNumber = tsAccountManager.storedOrCachedLocalNumber(transaction) { + if localNumber == recipientId { + let noteToSelfLabel = NSLocalizedString("NOTE_TO_SELF", comment: "Label for 1:1 conversation with yourself.") + result += " \(noteToSelfLabel)" + } + } + + return result } private static let recipientIndexer: SearchIndexer = SearchIndexer { (recipientId: String, transaction: YapDatabaseReadTransaction) in @@ -190,16 +199,7 @@ public class FullTextSearchFinder: NSObject { return String(String.UnicodeScalarView(digitScalars)) }(recipientId) - var result = "\(recipientId) \(nationalNumber) \(displayName)" - - if let localNumber = tsAccountManager.storedOrCachedLocalNumber(transaction) { - if localNumber == recipientId { - let noteToSelfLabel = NSLocalizedString("NOTE_TO_SELF", comment: "Label for 1:1 conversation with yourself.") - result += " \(noteToSelfLabel)" - } - } - - return result + return "\(recipientId) \(nationalNumber) \(displayName)" } private static let messageIndexer: SearchIndexer = SearchIndexer { (message: TSMessage, transaction: YapDatabaseReadTransaction) in