From 581c6c179bb8182a409202ad182537a107813931 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Wed, 4 Oct 2023 14:00:02 +0800 Subject: [PATCH 1/3] Purge old deleted items from iOS --- .../Services/DataService/DataService.swift | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift b/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift index f878806bf..a9892ccef 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift @@ -63,6 +63,31 @@ public final class DataService: ObservableObject { fatalError("Core Data store failed to load with error: \(error)") } } + cleanupDeletedItems(in: viewContext) + } + } + + func cleanupDeletedItems(in context: NSManagedObjectContext) { + let fetchRequest: NSFetchRequest = LinkedItem.fetchRequest() + + let calendar = Calendar.current + let oneDayAgo = calendar.date(byAdding: .day, value: -1, to: Date())! + + let statePredicate = NSPredicate(format: "state == %@", "DELETED") + let datePredicate = NSPredicate(format: "updatedAt < %@", oneDayAgo as NSDate) + + fetchRequest.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [statePredicate, datePredicate]) + + do { + let oldDeletedItems = try context.fetch(fetchRequest) + + for item in oldDeletedItems { + context.delete(item) + } + + try context.save() + } catch { + print("Error fetching or deleting objects: \(error)") } } From 07702b61afc2b2c0952551342269f9257744c65d Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Wed, 4 Oct 2023 14:19:58 +0800 Subject: [PATCH 2/3] Delete PDF files from cache when documents deleted --- .../Sources/App/Views/RemoveLibraryItemAction.swift | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apple/OmnivoreKit/Sources/App/Views/RemoveLibraryItemAction.swift b/apple/OmnivoreKit/Sources/App/Views/RemoveLibraryItemAction.swift index 5d431e66f..60269a8e1 100644 --- a/apple/OmnivoreKit/Sources/App/Views/RemoveLibraryItemAction.swift +++ b/apple/OmnivoreKit/Sources/App/Views/RemoveLibraryItemAction.swift @@ -3,6 +3,7 @@ import CoreData import Foundation import Models import Services +import Utils import Views func removeLibraryItemAction(dataService: DataService, objectID: NSManagedObjectID) { @@ -10,6 +11,11 @@ func removeLibraryItemAction(dataService: DataService, objectID: NSManagedObject if let item = dataService.viewContext.object(with: objectID) as? LinkedItem { item.state = "DELETED" try? dataService.viewContext.save() + + // Delete local PDF file if it exists + if let localPdf = item.localPDF, let localPdfURL = PDFUtils.localPdfURL(filename: localPdf) { + try? FileManager.default.removeItem(at: localPdfURL) + } } } From be37b264531058a5b1262f4c6c6204899f0c1cb3 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Wed, 4 Oct 2023 14:20:14 +0800 Subject: [PATCH 3/3] Fix layout of fallback image --- apple/OmnivoreKit/Sources/Views/FeedItem/LibraryItemCard.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apple/OmnivoreKit/Sources/Views/FeedItem/LibraryItemCard.swift b/apple/OmnivoreKit/Sources/Views/FeedItem/LibraryItemCard.swift index f1b132c34..fff8f9b71 100644 --- a/apple/OmnivoreKit/Sources/Views/FeedItem/LibraryItemCard.swift +++ b/apple/OmnivoreKit/Sources/Views/FeedItem/LibraryItemCard.swift @@ -185,7 +185,8 @@ public struct LibraryItemCard: View { .frame(maxWidth: .infinity, maxHeight: .infinity) .background(Gradient.randomColor(str: item.unwrappedTitle, offset: 0)) .background(LinearGradient(gradient: Gradient(fromStr: item.unwrappedTitle)!, startPoint: .top, endPoint: .bottom)) - .frame(width: 50, height: 50) + .cornerRadius(5) + .frame(width: 50, height: 75) } var bylineStr: String {