Refactors SaveState.isPreview attribute to Game.previewSaveState relationship

This commit is contained in:
Riley Testut 2016-05-19 02:40:07 -05:00
parent 304da44f3c
commit 290f1b93e5
5 changed files with 16 additions and 15 deletions

View File

@ -25,6 +25,7 @@ extension Game
case typeIdentifier
case gameCollections
case previewSaveState
}
}
@ -38,6 +39,7 @@ class Game: NSManagedObject, GameType
@NSManaged var typeIdentifier: String
@NSManaged var gameCollections: Set<GameCollection>
@NSManaged var previewSaveState: SaveState?
var fileURL: NSURL {
let fileURL = DatabaseManager.gamesDirectoryURL.URLByAppendingPathComponent(self.filename)

View File

@ -15,6 +15,7 @@
<attribute name="name" attributeType="String" syncable="YES"/>
<attribute name="typeIdentifier" attributeType="String" syncable="YES"/>
<relationship name="gameCollections" toMany="YES" deletionRule="Nullify" destinationEntity="GameCollection" inverseName="games" inverseEntity="GameCollection" syncable="YES"/>
<relationship name="previewSaveState" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="SaveState" inverseName="previewGame" inverseEntity="SaveState" syncable="YES"/>
<relationship name="saveStates" toMany="YES" deletionRule="Cascade" destinationEntity="SaveState" inverseName="game" inverseEntity="SaveState" syncable="YES"/>
<uniquenessConstraints>
<uniquenessConstraint>
@ -40,11 +41,11 @@
</userInfo>
</attribute>
<attribute name="identifier" attributeType="String" syncable="YES"/>
<attribute name="isPreview" attributeType="Boolean" defaultValueString="NO" syncable="YES"/>
<attribute name="modifiedDate" attributeType="Date" syncable="YES"/>
<attribute name="name" optional="YES" attributeType="String" syncable="YES"/>
<attribute name="type" attributeType="Integer 16" defaultValueString="1" syncable="YES"/>
<relationship name="game" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Game" inverseName="saveStates" inverseEntity="Game" syncable="YES"/>
<relationship name="previewGame" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Game" inverseName="previewSaveState" inverseEntity="Game" syncable="YES"/>
<uniquenessConstraints>
<uniquenessConstraint>
<constraint value="identifier"/>
@ -52,7 +53,7 @@
</uniquenessConstraints>
</entity>
<elements>
<element name="Game" positionX="-200" positionY="-72" width="128" height="148"/>
<element name="Game" positionX="-200" positionY="-72" width="128" height="165"/>
<element name="GameCollection" positionX="-198" positionY="-207" width="128" height="90"/>
<element name="SaveState" positionX="-198" positionY="113" width="128" height="165"/>
</elements>

View File

@ -17,13 +17,13 @@ extension SaveState
{
case filename
case identifier
case isPreview
case name
case creationDate
case modifiedDate
case type
case game
case previewGame
}
@objc enum Type: Int16
@ -40,7 +40,6 @@ class SaveState: NSManagedObject, SaveStateType
@NSManaged var name: String?
@NSManaged var modifiedDate: NSDate
@NSManaged var type: Type
@NSManaged var isPreview: Bool
@NSManaged private(set) var filename: String
@NSManaged private(set) var identifier: String
@ -50,6 +49,8 @@ class SaveState: NSManagedObject, SaveStateType
// https://forums.developer.apple.com/thread/20535
@NSManaged var game: Game!
@NSManaged var previewGame: Game?
var fileURL: NSURL {
let fileURL = DatabaseManager.saveStatesDirectoryURLForGame(self.game).URLByAppendingPathComponent(self.filename)
return fileURL

View File

@ -129,10 +129,8 @@ class GamesViewController: UIViewController
if segue.identifier == "peekEmulationViewController"
{
destinationViewController.deferredPreparationHandler = { [unowned destinationViewController] in
let predicate = NSPredicate(format: "%K == %@ AND %K == YES", SaveState.Attributes.game.rawValue, game, SaveState.Attributes.isPreview.rawValue)
if let saveState = SaveState.instancesWithPredicate(predicate, inManagedObjectContext: DatabaseManager.sharedManager.managedObjectContext, type: SaveState.self).first
if let saveState = game.previewSaveState
{
destinationViewController.emulatorCore.startEmulation()
destinationViewController.emulatorCore.pauseEmulation()

View File

@ -358,15 +358,14 @@ private extension SaveStatesViewController
var game = self.delegate.saveStatesViewControllerActiveEmulatorCore(self).game as! Game
game = backgroundContext.objectWithID(game.objectID) as! Game
let predicate = NSPredicate(format: "%K == %@ AND %K == YES", SaveState.Attributes.game.rawValue, game, SaveState.Attributes.isPreview.rawValue)
let previousPreviewSaveState = SaveState.instancesWithPredicate(predicate, inManagedObjectContext: backgroundContext, type: SaveState.self).first
previousPreviewSaveState?.isPreview = false
if let saveState = saveState
{
let previewSaveState = backgroundContext.objectWithID(saveState.objectID) as! SaveState
previewSaveState.isPreview = true
game.previewSaveState = previewSaveState
}
else
{
game.previewSaveState = nil
}
backgroundContext.saveWithErrorLogging()
@ -465,7 +464,7 @@ private extension SaveStatesViewController
if self.traitCollection.forceTouchCapability == .Available
{
if !saveState.isPreview
if saveState.game.previewSaveState != saveState
{
let previewAction = Action(title: NSLocalizedString("Set as Preview Save State", comment: ""), style: .Default, action: { action in
self.updatePreviewSaveState(saveState)