From 1d19c0593ebe6abe60468e12e87459ab68586603 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Thu, 04 Jun 2026 12:07:09 +0800
Subject: [PATCH] Refresh app index when application folders change
---
Apptag/ContentView.swift | 37 +++++++++++++++++++++++++++----------
1 files changed, 27 insertions(+), 10 deletions(-)
diff --git a/Apptag/ContentView.swift b/Apptag/ContentView.swift
index 86e511f..59964a3 100644
--- a/Apptag/ContentView.swift
+++ b/Apptag/ContentView.swift
@@ -376,6 +376,7 @@
@State private var refreshInProgress = false
@State private var refreshAgainAfterCurrent = false
@State private var refreshAgainForceLayout = false
+ @State private var refreshAgainUseCache = true
@FocusState private var bubbleNoteFocused: Bool
// Quick Search
@@ -532,7 +533,7 @@
}
.onAppear {
refreshNotchHeight()
- refreshAppsIfNeeded()
+ refreshAppsForOverlay()
if let initialQuickSearchSource, !initialQuickSearchConsumed {
initialQuickSearchConsumed = true
if initialQuickSearchSource == QuickSearchOpenSource.globalHidden {
@@ -545,6 +546,7 @@
}
quickSearchOpenedAt = Date()
refreshQuickSearchResults()
+ refreshAppsForQuickSearch()
NotificationCenter.default.post(
name: .tagLauncherQuickSearchVisibilityChanged,
object: nil,
@@ -558,7 +560,7 @@
.onReceive(NotificationCenter.default.publisher(for: .tagLauncherOverlayDidShow)) { _ in
resetTransientDragState()
refreshNotchHeight()
- refreshAppsIfNeeded()
+ refreshAppsForOverlay()
}
.onReceive(NotificationCenter.default.publisher(for: .tagLauncherOverlayDidHide)) { _ in
resetTransientDragState()
@@ -676,7 +678,7 @@
selectedID: quickSearchSelectedID,
focusToken: quickSearchFocusToken,
selectionScrollToken: quickSearchSelectionScrollToken,
- isLoading: quickSearchDocuments.isEmpty && refreshInProgress,
+ isLoading: quickSearchShouldShowLoading,
maxVisibleRows: quickSearchMaxVisibleRows(in: proxy.size),
panelTopY: quickSearchPanelTopY(in: proxy.size),
panelHeight: quickSearchPanelContentHeight(in: proxy.size),
@@ -695,7 +697,7 @@
}
private func quickSearchPanelContentHeight(in size: CGSize) -> CGFloat {
- let hasResultList = !(quickSearchDocuments.isEmpty && refreshInProgress)
+ let hasResultList = !quickSearchShouldShowLoading
&& quickSearchErrorMessage == nil
&& !quickSearchResults.isEmpty
let visibleRows = min(max(1, quickSearchResults.count), quickSearchMaxVisibleRows(in: size))
@@ -735,7 +737,7 @@
quickSearchErrorMessage = nil
quickSearchFocusToken &+= 1
refreshQuickSearchResults()
- refreshApps()
+ refreshAppsForQuickSearch()
NotificationCenter.default.post(
name: .tagLauncherQuickSearchVisibilityChanged,
object: nil,
@@ -752,6 +754,10 @@
&& smartStartNotice == nil
&& !appGridInteraction.dropRefreshVisible
&& !quickSearchVisible
+ }
+
+ private var quickSearchShouldShowLoading: Bool {
+ quickSearchVisible && refreshInProgress && quickSearchResults.isEmpty
}
private func closeQuickSearch(
@@ -1807,6 +1813,16 @@
refreshApps()
}
+ private func refreshAppsForOverlay() {
+ guard AppIndexer.shouldRefreshForSearchPathChanges() else { return }
+ refreshApps()
+ }
+
+ private func refreshAppsForQuickSearch() {
+ guard AppIndexer.shouldRefreshForSearchPathChanges() else { return }
+ refreshApps()
+ }
+
private func refreshNotchHeight() {
let mousePoint = NSEvent.mouseLocation
let activeScreen = NSScreen.screens.first(where: {
@@ -2417,10 +2433,9 @@
func refreshApps(forceLayoutRefresh: Bool = false, useCache: Bool = true) {
guard !refreshInProgress else {
- if forceLayoutRefresh {
- refreshAgainAfterCurrent = true
- refreshAgainForceLayout = true
- }
+ refreshAgainAfterCurrent = true
+ refreshAgainForceLayout = refreshAgainForceLayout || forceLayoutRefresh
+ refreshAgainUseCache = refreshAgainUseCache && useCache
return
}
@@ -2436,9 +2451,11 @@
refreshInProgress = false
if refreshAgainAfterCurrent {
let shouldForceLayout = refreshAgainForceLayout
+ let shouldUseCache = refreshAgainUseCache
refreshAgainAfterCurrent = false
refreshAgainForceLayout = false
- refreshApps(forceLayoutRefresh: shouldForceLayout)
+ refreshAgainUseCache = true
+ refreshApps(forceLayoutRefresh: shouldForceLayout, useCache: shouldUseCache)
}
}
}
--
Gitblit v1.9.3