From 01bab5422712299b49f656e6b4c42a3bf314f519 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Thu, 02 Jul 2026 11:02:42 +0800
Subject: [PATCH] Release 8.3.5 free tag order persistence
---
src/Apptag/AppLibraryController.swift | 31 +++++++++++++++++++++++++++----
1 files changed, 27 insertions(+), 4 deletions(-)
diff --git a/src/Apptag/AppLibraryController.swift b/src/Apptag/AppLibraryController.swift
index 2a2136a..1f45bf6 100644
--- a/src/Apptag/AppLibraryController.swift
+++ b/src/Apptag/AppLibraryController.swift
@@ -29,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)
@@ -36,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
)
}
@@ -47,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
)
}
@@ -56,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
)
}
@@ -65,11 +80,19 @@
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(
scannedApps: [AppInfo],
store: TagDatabase.Store
--
Gitblit v1.9.3