Refactors SaveState.isPreview attribute to Game.previewSaveState relationship
This commit is contained in:
parent
304da44f3c
commit
290f1b93e5
@ -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)
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user