Separated DatabaseManager validation logic into separate method
This commit is contained in:
parent
8863e8f3d0
commit
25521aad74
@ -232,7 +232,7 @@ private extension DatabaseManager
|
|||||||
{
|
{
|
||||||
// MARK: - Saving -
|
// MARK: - Saving -
|
||||||
|
|
||||||
private func save()
|
func save()
|
||||||
{
|
{
|
||||||
let backgroundTaskIdentifier = RSTBeginBackgroundTask("Save Database Task")
|
let backgroundTaskIdentifier = RSTBeginBackgroundTask("Save Database Task")
|
||||||
|
|
||||||
@ -282,6 +282,37 @@ private extension DatabaseManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - Validation -
|
||||||
|
|
||||||
|
func validateManagedObjectSaveWithUserInfo(userInfo: [NSObject : AnyObject])
|
||||||
|
{
|
||||||
|
// Remove deleted games from disk
|
||||||
|
if let deletedObjects = userInfo[NSDeletedObjectsKey] as? Set<NSManagedObject>
|
||||||
|
{
|
||||||
|
let games = deletedObjects.filter({ $0 is Game }).map({ self.validationManagedObjectContext.objectWithID($0.objectID) as! Game })
|
||||||
|
|
||||||
|
for game in games
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
try NSFileManager.defaultManager().removeItemAtURL(game.fileURL)
|
||||||
|
}
|
||||||
|
catch let error as NSError
|
||||||
|
{
|
||||||
|
print(error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove empty collections
|
||||||
|
let collections = GameCollection.instancesWithPredicate(NSPredicate(format: "%K.@count == 0", GameCollectionAttributes.games.rawValue), inManagedObjectContext: self.validationManagedObjectContext, type: GameCollection.self)
|
||||||
|
|
||||||
|
for collection in collections
|
||||||
|
{
|
||||||
|
self.validationManagedObjectContext.deleteObject(collection)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: - Notifications -
|
// MARK: - Notifications -
|
||||||
|
|
||||||
dynamic func managedObjectContextDidSave(notification: NSNotification)
|
dynamic func managedObjectContextDidSave(notification: NSNotification)
|
||||||
@ -289,35 +320,8 @@ private extension DatabaseManager
|
|||||||
guard let managedObjectContext = notification.object as? NSManagedObjectContext where managedObjectContext.parentContext == self.validationManagedObjectContext else { return }
|
guard let managedObjectContext = notification.object as? NSManagedObjectContext where managedObjectContext.parentContext == self.validationManagedObjectContext else { return }
|
||||||
|
|
||||||
self.validationManagedObjectContext.performBlockAndWait {
|
self.validationManagedObjectContext.performBlockAndWait {
|
||||||
|
self.validateManagedObjectSaveWithUserInfo(notification.userInfo ?? [:])
|
||||||
// Remove deleted games from disk
|
|
||||||
if let deletedObjects = notification.userInfo?[NSDeletedObjectsKey] as? Set<NSManagedObject>
|
|
||||||
{
|
|
||||||
let games = deletedObjects.filter({ $0 is Game }).map({ self.validationManagedObjectContext.objectWithID($0.objectID) as! Game })
|
|
||||||
|
|
||||||
for game in games
|
|
||||||
{
|
|
||||||
do
|
|
||||||
{
|
|
||||||
try NSFileManager.defaultManager().removeItemAtURL(game.fileURL)
|
|
||||||
}
|
|
||||||
catch let error as NSError
|
|
||||||
{
|
|
||||||
print(error)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove empty collections
|
|
||||||
let collections = GameCollection.instancesWithPredicate(NSPredicate(format: "%K.@count == 0", GameCollectionAttributes.games.rawValue), inManagedObjectContext: self.validationManagedObjectContext, type: GameCollection.self)
|
|
||||||
|
|
||||||
for collection in collections
|
|
||||||
{
|
|
||||||
self.validationManagedObjectContext.deleteObject(collection)
|
|
||||||
}
|
|
||||||
|
|
||||||
self.save()
|
self.save()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user