From cf4a1ad4dbc8f4a3f61a0a1a32f63d31c3562b27 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Thu, 02 Jul 2026 03:07:40 +0800
Subject: [PATCH] Record TagLauncher 8.3.2 release freeze

---
 src/Apptag/AppLibraryController.swift |   41 ++++++++++++++++++++++++++++++++++++-----
 1 files changed, 36 insertions(+), 5 deletions(-)

diff --git a/src/Apptag/AppLibraryController.swift b/src/Apptag/AppLibraryController.swift
index d8ebbd3..1f45bf6 100644
--- a/src/Apptag/AppLibraryController.swift
+++ b/src/Apptag/AppLibraryController.swift
@@ -5,6 +5,8 @@
     let quickSearchDocuments: [QuickSearchDocument]
     let tagColors: [String: Int]
     let tagOrder: [String]
+    let tagDefinitions: [String: TagDatabase.TagDef]
+    let containerAppOrder: [String: [String]]
 }
 
 struct AppLibraryRefreshResult {
@@ -27,6 +29,15 @@
 }
 
 enum AppLibraryController {
+    private static let snapshotCacheLock = NSLock()
+    private static var cachedSnapshot: AppLibrarySnapshot?
+
+    static func lastSnapshot() -> AppLibrarySnapshot? {
+        snapshotCacheLock.lock()
+        defer { snapshotCacheLock.unlock() }
+        return cachedSnapshot
+    }
+
     static func refresh(useCache: Bool = true) -> AppLibraryRefreshResult {
         let scannedApps = AppIndexer.scan(useCache: useCache)
         let reconciledStore = TagEditor.reconcileScannedApps(scannedApps)
@@ -34,8 +45,10 @@
             apps: scannedApps,
             store: reconciledStore
         )
+        let snapshot = makeSnapshot(scannedApps: scannedApps, store: smartStartResult.store)
+        updateLastSnapshot(snapshot)
         return AppLibraryRefreshResult(
-            snapshot: makeSnapshot(scannedApps: scannedApps, store: smartStartResult.store),
+            snapshot: snapshot,
             smartStartResult: smartStartResult
         )
     }
@@ -45,8 +58,10 @@
         scannedApps: [AppInfo]
     ) -> AppLibrarySmartStartApplyResult {
         let result = SmartStartService.applySuggestion(draft)
+        let snapshot = makeSnapshot(scannedApps: scannedApps, store: result.store)
+        updateLastSnapshot(snapshot)
         return AppLibrarySmartStartApplyResult(
-            snapshot: makeSnapshot(scannedApps: scannedApps, store: result.store),
+            snapshot: snapshot,
             summary: result.summary
         )
     }
@@ -54,8 +69,10 @@
     static func applySystemInitialScheme() -> AppLibrarySystemSchemeApplyResult {
         let scannedApps = AppIndexer.scan(useCache: false)
         let result = SmartStartService.applySystemInitialScheme(apps: scannedApps)
+        let snapshot = makeSnapshot(scannedApps: scannedApps, store: result.store)
+        updateLastSnapshot(snapshot)
         return AppLibrarySystemSchemeApplyResult(
-            snapshot: makeSnapshot(scannedApps: scannedApps, store: result.store),
+            snapshot: snapshot,
             summary: result.summary
         )
     }
@@ -63,9 +80,17 @@
     static func resetToUncategorized() -> AppLibraryUncategorizedResetResult {
         let scannedApps = AppIndexer.scan(useCache: false)
         let store = TagDatabase.resetAppTagAssignmentsToUncategorized()
+        let snapshot = makeSnapshot(scannedApps: scannedApps, store: store)
+        updateLastSnapshot(snapshot)
         return AppLibraryUncategorizedResetResult(
-            snapshot: makeSnapshot(scannedApps: scannedApps, store: store)
+            snapshot: snapshot
         )
+    }
+
+    private static func updateLastSnapshot(_ snapshot: AppLibrarySnapshot) {
+        snapshotCacheLock.lock()
+        cachedSnapshot = snapshot
+        snapshotCacheLock.unlock()
     }
 
     private static func makeSnapshot(
@@ -77,7 +102,13 @@
             apps: apps,
             quickSearchDocuments: QuickSearchEngine.makeDocuments(apps: apps, store: store),
             tagColors: store.tags.mapValues { $0.color },
-            tagOrder: TagEditor.orderedTagNames()
+            tagOrder: TagEditor.orderedTagNames(in: store),
+            tagDefinitions: store.tags,
+            containerAppOrder: TagDatabase.normalizedContainerAppOrder(
+                store.containerAppOrder,
+                tags: store.tags,
+                appTags: store.appTags
+            )
         )
     }
 }

--
Gitblit v1.9.3