From ffc50a6b927afd16601e0bc01a53d76ae6069ba3 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Wed, 03 Jun 2026 21:22:41 +0800
Subject: [PATCH] Refresh app index for quick search

---
 Apptag/ContentView.swift |   17 ++++++++++++++---
 1 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/Apptag/ContentView.swift b/Apptag/ContentView.swift
index f29d986..0fbfc7f 100644
--- a/Apptag/ContentView.swift
+++ b/Apptag/ContentView.swift
@@ -731,6 +731,7 @@
         quickSearchErrorMessage = nil
         quickSearchFocusToken &+= 1
         refreshQuickSearchResults()
+        refreshApps()
         NotificationCenter.default.post(
             name: .tagLauncherQuickSearchVisibilityChanged,
             object: nil,
@@ -777,7 +778,10 @@
 
     private func refreshQuickSearchResults() {
         let previousSelection = quickSearchSelectedID
-        quickSearchResults = QuickSearchEngine.search(quickSearchQuery, documents: quickSearchDocuments)
+        quickSearchResults = QuickSearchEngine.search(
+            quickSearchQuery,
+            documents: quickSearchDocuments.filter { FileManager.default.fileExists(atPath: $0.app.path.path) }
+        )
 
         if quickSearchResults.isEmpty {
             quickSearchSelectedID = nil
@@ -2369,7 +2373,7 @@
         }
     }
 
-    func refreshApps(forceLayoutRefresh: Bool = false) {
+    func refreshApps(forceLayoutRefresh: Bool = false, useCache: Bool = true) {
         guard !refreshInProgress else {
             if forceLayoutRefresh {
                 refreshAgainAfterCurrent = true
@@ -2380,7 +2384,7 @@
 
         refreshInProgress = true
         DispatchQueue.global(qos: .userInitiated).async {
-            let result = AppLibraryController.refresh()
+            let result = AppLibraryController.refresh(useCache: useCache)
             DispatchQueue.main.async {
                 applyAppLibrarySnapshot(result.snapshot)
                 handleSmartStartRunResult(result.smartStartResult)
@@ -2417,6 +2421,13 @@
     ) {
         appGridInteraction.appDragModeActive = false
         endTagNavReorder()
+        guard FileManager.default.fileExists(atPath: app.path.path) else {
+            AppIndexer.invalidateScanCache()
+            refreshApps()
+            onFailure?()
+            return
+        }
+
         let closeQuickSearchAndOverlayBeforeOpening = closeQuickSearchOnSuccess
             && closeOverlayOnSuccess
             && (quickSearchCloseHidesOverlay || quickSearchOnlySession)

--
Gitblit v1.9.3