|
|
@@ -9,7 +9,7 @@ final class AIHistoryManager {
|
|
|
|
|
|
private let defaults: UserDefaults
|
|
|
private let storageKey = "reddora.ai.history.entries"
|
|
|
- private let maxEntries = 100
|
|
|
+ private let maxEntries = 30
|
|
|
private let persistQueue = DispatchQueue(label: "com.reddora.ai-history.persist", qos: .utility)
|
|
|
|
|
|
init(defaults: UserDefaults = .standard) {
|
|
|
@@ -29,11 +29,7 @@ final class AIHistoryManager {
|
|
|
func save(_ entry: AIHistoryEntry) {
|
|
|
entries.removeAll { $0.id == entry.id }
|
|
|
entries.insert(entry, at: 0)
|
|
|
-
|
|
|
- if entries.count > maxEntries {
|
|
|
- entries = Array(entries.prefix(maxEntries))
|
|
|
- }
|
|
|
-
|
|
|
+ enforceLimit()
|
|
|
persist()
|
|
|
}
|
|
|
|
|
|
@@ -59,11 +55,21 @@ final class AIHistoryManager {
|
|
|
let decoder = JSONDecoder()
|
|
|
decoder.dateDecodingStrategy = .iso8601
|
|
|
entries = try decoder.decode([AIHistoryEntry].self, from: data)
|
|
|
+ let hadExcessEntries = entries.count > maxEntries
|
|
|
+ enforceLimit()
|
|
|
+ if hadExcessEntries {
|
|
|
+ persist()
|
|
|
+ }
|
|
|
} catch {
|
|
|
entries = []
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private func enforceLimit() {
|
|
|
+ guard entries.count > maxEntries else { return }
|
|
|
+ entries = Array(entries.prefix(maxEntries))
|
|
|
+ }
|
|
|
+
|
|
|
private func persist() {
|
|
|
let snapshot = entries
|
|
|
let storageKey = storageKey
|