ソースを参照

Limit AI history to the 30 most recent entries.

Keeps storage lean by trimming older generates, optimizations, and comments on save and at launch.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 1 ヶ月 前
コミット
7ddeed274d
1 ファイル変更12 行追加6 行削除
  1. 12 6
      Reddit App/Managers/AIHistoryManager.swift

+ 12 - 6
Reddit App/Managers/AIHistoryManager.swift

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