Merge pull request #2853 from omnivore-app/fix/ios-delete-old-items
Better handling of deleted items on iOS
This commit is contained in:
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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> = 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)")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user