Przeglądaj źródła

make cleanup function async

polscm32 2 lat temu
rodzic
commit
ad8055e5a0

+ 8 - 18
FreeAPS/Sources/APS/APSManager.swift

@@ -147,29 +147,19 @@ final class BaseAPSManager: APSManager, Injectable {
         let now = Date()
         let calendar = Calendar.current
 
-        // Check if there was already a clean on the specified day
+        // Check if last clean is longer than one day ago
         if calendar.isDate(now, inSameDayAs: lastHistoryCleanupDate) {
-            // Cleanup was already done
+            // Cleanup already done
             return
         }
 
-        DispatchQueue.global(qos: .background).async {
-            // Logging start time
-            let startTime = Date()
-            print("Starting cleanup at \(startTime)")
-
-            // Cleanup
-            CoreDataStack.shared.cleanupPersistentHistory(before: Date.oneWeekAgo)
-
-            // Logging end time
-            let endTime = Date()
-            print("Finished cleanup at \(endTime), duration: \(endTime.timeIntervalSince(startTime)) seconds")
-
-            // Update last cleanup date
-            DispatchQueue.main.async {
-                self.lastHistoryCleanupDate = now
-            }
+        // Cleanup
+        Task {
+            await CoreDataStack.shared.cleanupPersistentHistory(before: Date.oneWeekAgo)
         }
+
+        // Update lastHistoryCleanupDate
+        lastHistoryCleanupDate = now
     }
 
     private func subscribe() {

+ 4 - 1
FreeAPS/Sources/Application/FreeAPSApp.swift

@@ -59,7 +59,10 @@ import Swinject
         loadServices()
 
         // Clear the persistentHistory every time the app starts
-        coreDataStack.cleanupPersistentHistory(before: Date.oneWeekAgo)
+        let coreDataStack = self.coreDataStack
+        Task {
+            await coreDataStack.cleanupPersistentHistory(before: Date.oneWeekAgo)
+        }
     }
 
     var body: some Scene {

+ 3 - 7
Model/CoreDataStack.swift

@@ -35,7 +35,7 @@ class CoreDataStack: ObservableObject {
     /// Save the last token to User defaults
     private var lastToken: NSPersistentHistoryToken? {
         get {
-            return UserDefaults.standard.lastHistoryToken
+            UserDefaults.standard.lastHistoryToken
         }
         set {
             UserDefaults.standard.lastHistoryToken = newValue
@@ -130,11 +130,11 @@ class CoreDataStack: ObservableObject {
 
     // Clean old Persistent History
     /// - Tag: clearHistory
-    func cleanupPersistentHistory(before date: Date) {
+    func cleanupPersistentHistory(before date: Date) async {
         let taskContext = newTaskContext()
         taskContext.name = "cleanPersistentHistoryContext"
 
-        taskContext.perform {
+        await taskContext.perform {
             let deleteHistoryRequest = NSPersistentHistoryChangeRequest.deleteHistory(before: date)
             do {
                 try taskContext.execute(deleteHistoryRequest)
@@ -151,7 +151,6 @@ class CoreDataStack: ObservableObject {
 // MARK: - Delete
 
 extension CoreDataStack {
-
     /// Synchronously delete entries with specified object IDs
     ///  - Tag: synchronousDelete
     func deleteObject(identifiedBy objectIDs: [NSManagedObjectID]) {
@@ -197,7 +196,6 @@ extension CoreDataStack {
 // MARK: - Fetch Requests
 
 extension CoreDataStack {
-
     // Fetch in background thread
     /// - Tag: backgroundFetch
     func fetchEntities<T: NSManagedObject>(
@@ -370,10 +368,8 @@ extension CoreDataStack {
             completion(result ?? [])
         }
     }
-
 }
 
-
 // MARK: - Save
 
 extension NSManagedObjectContext {

+ 1 - 8
Model/Helper/UserDefaultsExtension.swift

@@ -1,12 +1,5 @@
-//
-//  UserDefaultsExtension.swift
-//  FreeAPS
-//
-//  Created by Marvin Polscheit on 26.05.24.
-//
-
-import Foundation
 import CoreData
+import Foundation
 
 extension UserDefaults {
     private enum Keys {