diff --git a/AltStore/Operations/UpdatePatronsOperation.swift b/AltStore/Operations/UpdatePatronsOperation.swift index c4d6301f..54000883 100644 --- a/AltStore/Operations/UpdatePatronsOperation.swift +++ b/AltStore/Operations/UpdatePatronsOperation.swift @@ -70,24 +70,15 @@ class UpdatePatronsOperation: ResultOperation do { let patrons = try result.get() - let managedPatrons = patrons.map { (patron) -> PatreonAccount in - let account = PatreonAccount(patron: patron, context: self.context) - account.isFriendZonePatron = true - return account - } + let managedPatrons = patrons.map { ManagedPatron(patron: $0, context: self.context) } - var patronIDs = Set(managedPatrons.map { $0.identifier }) - if let userAccountID = Keychain.shared.patreonAccountID + let patronIDs = Set(managedPatrons.map { $0.identifier }) + let nonFriendZonePredicate = NSPredicate(format: "NOT (%K IN %@)", #keyPath(ManagedPatron.identifier), patronIDs) + + let nonFriendZonePatrons = ManagedPatron.all(satisfying: nonFriendZonePredicate, in: self.context) + for managedPatron in nonFriendZonePatrons { - // Insert userAccountID into patronIDs to prevent it from being deleted. - patronIDs.insert(userAccountID) - } - - let removedPredicate = NSPredicate(format: "NOT (%K IN %@)", #keyPath(PatreonAccount.identifier), patronIDs) - let removedPatrons = PatreonAccount.all(satisfying: removedPredicate, in: self.context) - for patreonAccount in removedPatrons - { - self.context.delete(patreonAccount) + self.context.delete(managedPatron) } try self.context.save() diff --git a/AltStore/Settings/PatreonViewController.swift b/AltStore/Settings/PatreonViewController.swift index 8dc4e37b..10d0e5d2 100644 --- a/AltStore/Settings/PatreonViewController.swift +++ b/AltStore/Settings/PatreonViewController.swift @@ -75,24 +75,23 @@ class PatreonViewController: UICollectionViewController private extension PatreonViewController { - func makeDataSource() -> RSTCompositeCollectionViewDataSource + func makeDataSource() -> RSTCompositeCollectionViewDataSource { - let aboutDataSource = RSTDynamicCollectionViewDataSource() + let aboutDataSource = RSTDynamicCollectionViewDataSource() aboutDataSource.numberOfSectionsHandler = { 1 } aboutDataSource.numberOfItemsHandler = { _ in 0 } - let dataSource = RSTCompositeCollectionViewDataSource(dataSources: [aboutDataSource, self.patronsDataSource]) + let dataSource = RSTCompositeCollectionViewDataSource(dataSources: [aboutDataSource, self.patronsDataSource]) dataSource.proxy = self return dataSource } - func makePatronsDataSource() -> RSTFetchedResultsCollectionViewDataSource + func makePatronsDataSource() -> RSTFetchedResultsCollectionViewDataSource { - let fetchRequest: NSFetchRequest = PatreonAccount.fetchRequest() - fetchRequest.predicate = NSPredicate(format: "%K == YES", #keyPath(PatreonAccount.isFriendZonePatron)) - fetchRequest.sortDescriptors = [NSSortDescriptor(key: #keyPath(PatreonAccount.name), ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:)))] + let fetchRequest: NSFetchRequest = ManagedPatron.fetchRequest() + fetchRequest.sortDescriptors = [NSSortDescriptor(key: #keyPath(ManagedPatron.name), ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:)))] - let patronsDataSource = RSTFetchedResultsCollectionViewDataSource(fetchRequest: fetchRequest, managedObjectContext: DatabaseManager.shared.viewContext) + let patronsDataSource = RSTFetchedResultsCollectionViewDataSource(fetchRequest: fetchRequest, managedObjectContext: DatabaseManager.shared.viewContext) patronsDataSource.cellConfigurationHandler = { (cell, patron, indexPath) in let cell = cell as! PatronCollectionViewCell cell.textLabel.text = patron.name diff --git a/AltStoreCore/Model/AltStore.xcdatamodeld/AltStore 9.xcdatamodel/contents b/AltStoreCore/Model/AltStore.xcdatamodeld/AltStore 9.xcdatamodel/contents index 7589e6f7..ff5a5907 100644 --- a/AltStoreCore/Model/AltStore.xcdatamodeld/AltStore 9.xcdatamodel/contents +++ b/AltStoreCore/Model/AltStore.xcdatamodeld/AltStore 9.xcdatamodel/contents @@ -87,7 +87,6 @@ - @@ -178,7 +177,7 @@ - + diff --git a/AltStoreCore/Model/PatreonAccount.swift b/AltStoreCore/Model/PatreonAccount.swift index 63980931..95259c1e 100644 --- a/AltStoreCore/Model/PatreonAccount.swift +++ b/AltStoreCore/Model/PatreonAccount.swift @@ -38,7 +38,6 @@ public class PatreonAccount: NSManagedObject, Fetchable @NSManaged public var firstName: String? @NSManaged public var isPatron: Bool - @NSManaged public var isFriendZonePatron: NSNumber? private override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?) { @@ -63,16 +62,6 @@ public class PatreonAccount: NSManagedObject, Fetchable self.isPatron = false } } - - public init(patron: Patron, context: NSManagedObjectContext) - { - super.init(entity: PatreonAccount.entity(), insertInto: context) - - self.identifier = patron.identifier - self.name = patron.name - self.firstName = nil - self.isPatron = (patron.status == .active) - } } public extension PatreonAccount diff --git a/AltStoreCore/Patreon/PatreonAPI.swift b/AltStoreCore/Patreon/PatreonAPI.swift index 96a87a1e..74b259b2 100644 --- a/AltStoreCore/Patreon/PatreonAPI.swift +++ b/AltStoreCore/Patreon/PatreonAPI.swift @@ -246,10 +246,8 @@ public extension PatreonAPI DatabaseManager.shared.persistentContainer.performBackgroundTask { (context) in do { - if let account = DatabaseManager.shared.patreonAccount(in: context) - { - context.delete(account) - } + let accounts = PatreonAccount.all(in: context, requestProperties: [\.returnsObjectsAsFaults: true]) + accounts.forEach(context.delete(_:)) self.deactivateBetaApps(in: context)