mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-10-22 19:42:13 +00:00
ios: resolve SimpleX names on search, show each result once
The keyboard Search key on the chat list now also resolves a typed SimpleX name online, alongside the directory search, and shows what it finds as a Names part between the local chats and the directory results. Resolution never raises an alert: apiConnectPlan gains an onFailure mode, and existing callers keep alerting by default. Each directory entry is looked up in the store (store-only, as entries are now group or channel links only) so a chat the user already sees locally, or found by name, is not shown again; names already in the local list are hidden the same way. A directory row is matched to a name only by the link the core resolved, never by a profile field the name's owner writes, so a name cannot hide a genuine directory row. The "Search in Directory" row, retry and "Show more" keep the names already shown. One helper drives the spinner from whether anything is in flight, and every publish checks the search generation, so a late reply after a text change or cancel writes nothing. The first-search alert now also names the server that resolves names. Run: 002-ios-directory-search-ui, slice 3
This commit is contained in:
1 parent
8bfae1fb53
commit
bfb62d2606
4 files changed
+279
-46
No files matched your search
@@ -1057,7 +1057,11 @@ func apiSearchDirectory(_ text: String, cursor: JSONValue?) async -> DirectorySe
|
||||
return nil
|
||||
}
|
||||
|
||||
func apiConnectPlan(connLink: String, resolveMode: PlanResolveMode = .unknown, linkOwnerSig: LinkOwnerSig? = nil, inProgress: BoxedValue<Bool>) async -> ConnectionPlanResult? {
|
||||
enum ConnectPlanFailure {
|
||||
case alert, log
|
||||
}
|
||||
|
||||
func apiConnectPlan(connLink: String, resolveMode: PlanResolveMode = .unknown, linkOwnerSig: LinkOwnerSig? = nil, inProgress: BoxedValue<Bool>, onFailure: ConnectPlanFailure = .alert) async -> ConnectionPlanResult? {
|
||||
guard let userId = ChatModel.shared.currentUser?.userId else {
|
||||
logger.error("apiConnectPlan: no current user")
|
||||
return nil
|
||||
@@ -1068,7 +1072,12 @@ func apiConnectPlan(connLink: String, resolveMode: PlanResolveMode = .unknown, l
|
||||
}
|
||||
// a .never (typing) search that matches nothing locally is not an error to surface
|
||||
if case .error(.error(.notResolvedLocally)) = r { return nil }
|
||||
if let r { await apiConnectResponseAlert(r) }
|
||||
if let r {
|
||||
switch onFailure {
|
||||
case .alert: await apiConnectResponseAlert(r)
|
||||
case .log: logger.debug("apiConnectPlan: \(String(describing: r))")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user