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 typeIdentifier
|
||||||
|
|
||||||
case gameCollections
|
case gameCollections
|
||||||
|
case previewSaveState
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,6 +39,7 @@ class Game: NSManagedObject, GameType
|
|||||||
@NSManaged var typeIdentifier: String
|
@NSManaged var typeIdentifier: String
|
||||||
|
|
||||||
@NSManaged var gameCollections: Set<GameCollection>
|
@NSManaged var gameCollections: Set<GameCollection>
|
||||||
|
@NSManaged var previewSaveState: SaveState?
|
||||||
|
|
||||||
var fileURL: NSURL {
|
var fileURL: NSURL {
|
||||||
let fileURL = DatabaseManager.gamesDirectoryURL.URLByAppendingPathComponent(self.filename)
|
let fileURL = DatabaseManager.gamesDirectoryURL.URLByAppendingPathComponent(self.filename)
|
||||||
|
|||||||
@ -15,6 +15,7 @@
|
|||||||
<attribute name="name" attributeType="String" syncable="YES"/>
|
<attribute name="name" attributeType="String" syncable="YES"/>
|
||||||
<attribute name="typeIdentifier" 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="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"/>
|
<relationship name="saveStates" toMany="YES" deletionRule="Cascade" destinationEntity="SaveState" inverseName="game" inverseEntity="SaveState" syncable="YES"/>
|
||||||
<uniquenessConstraints>
|
<uniquenessConstraints>
|
||||||
<uniquenessConstraint>
|
<uniquenessConstraint>
|
||||||
@ -40,11 +41,11 @@
|
|||||||
</userInfo>
|
</userInfo>
|
||||||
</attribute>
|
</attribute>
|
||||||
<attribute name="identifier" attributeType="String" syncable="YES"/>
|
<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="modifiedDate" attributeType="Date" syncable="YES"/>
|
||||||
<attribute name="name" optional="YES" attributeType="String" syncable="YES"/>
|
<attribute name="name" optional="YES" attributeType="String" syncable="YES"/>
|
||||||
<attribute name="type" attributeType="Integer 16" defaultValueString="1" 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="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>
|
<uniquenessConstraints>
|
||||||
<uniquenessConstraint>
|
<uniquenessConstraint>
|
||||||
<constraint value="identifier"/>
|
<constraint value="identifier"/>
|
||||||
@ -52,7 +53,7 @@
|
|||||||
</uniquenessConstraints>
|
</uniquenessConstraints>
|
||||||
</entity>
|
</entity>
|
||||||
<elements>
|
<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="GameCollection" positionX="-198" positionY="-207" width="128" height="90"/>
|
||||||
<element name="SaveState" positionX="-198" positionY="113" width="128" height="165"/>
|
<element name="SaveState" positionX="-198" positionY="113" width="128" height="165"/>
|
||||||
</elements>
|
</elements>
|
||||||
|
|||||||
@ -17,13 +17,13 @@ extension SaveState
|
|||||||
{
|
{
|
||||||
case filename
|
case filename
|
||||||
case identifier
|
case identifier
|
||||||
case isPreview
|
|
||||||
case name
|
case name
|
||||||
case creationDate
|
case creationDate
|
||||||
case modifiedDate
|
case modifiedDate
|
||||||
case type
|
case type
|
||||||
|
|
||||||
case game
|
case game
|
||||||
|
case previewGame
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc enum Type: Int16
|
@objc enum Type: Int16
|
||||||
@ -40,7 +40,6 @@ class SaveState: NSManagedObject, SaveStateType
|
|||||||
@NSManaged var name: String?
|
@NSManaged var name: String?
|
||||||
@NSManaged var modifiedDate: NSDate
|
@NSManaged var modifiedDate: NSDate
|
||||||
@NSManaged var type: Type
|
@NSManaged var type: Type
|
||||||
@NSManaged var isPreview: Bool
|
|
||||||
|
|
||||||
@NSManaged private(set) var filename: String
|
@NSManaged private(set) var filename: String
|
||||||
@NSManaged private(set) var identifier: String
|
@NSManaged private(set) var identifier: String
|
||||||
@ -50,6 +49,8 @@ class SaveState: NSManagedObject, SaveStateType
|
|||||||
// https://forums.developer.apple.com/thread/20535
|
// https://forums.developer.apple.com/thread/20535
|
||||||
@NSManaged var game: Game!
|
@NSManaged var game: Game!
|
||||||
|
|
||||||
|
@NSManaged var previewGame: Game?
|
||||||
|
|
||||||
var fileURL: NSURL {
|
var fileURL: NSURL {
|
||||||
let fileURL = DatabaseManager.saveStatesDirectoryURLForGame(self.game).URLByAppendingPathComponent(self.filename)
|
let fileURL = DatabaseManager.saveStatesDirectoryURLForGame(self.game).URLByAppendingPathComponent(self.filename)
|
||||||
return fileURL
|
return fileURL
|
||||||
|
|||||||
@ -130,9 +130,7 @@ class GamesViewController: UIViewController
|
|||||||
{
|
{
|
||||||
destinationViewController.deferredPreparationHandler = { [unowned destinationViewController] in
|
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 = game.previewSaveState
|
||||||
|
|
||||||
if let saveState = SaveState.instancesWithPredicate(predicate, inManagedObjectContext: DatabaseManager.sharedManager.managedObjectContext, type: SaveState.self).first
|
|
||||||
{
|
{
|
||||||
destinationViewController.emulatorCore.startEmulation()
|
destinationViewController.emulatorCore.startEmulation()
|
||||||
destinationViewController.emulatorCore.pauseEmulation()
|
destinationViewController.emulatorCore.pauseEmulation()
|
||||||
|
|||||||
@ -358,15 +358,14 @@ private extension SaveStatesViewController
|
|||||||
var game = self.delegate.saveStatesViewControllerActiveEmulatorCore(self).game as! Game
|
var game = self.delegate.saveStatesViewControllerActiveEmulatorCore(self).game as! Game
|
||||||
game = backgroundContext.objectWithID(game.objectID) 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
|
if let saveState = saveState
|
||||||
{
|
{
|
||||||
let previewSaveState = backgroundContext.objectWithID(saveState.objectID) as! SaveState
|
let previewSaveState = backgroundContext.objectWithID(saveState.objectID) as! SaveState
|
||||||
previewSaveState.isPreview = true
|
game.previewSaveState = previewSaveState
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
game.previewSaveState = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
backgroundContext.saveWithErrorLogging()
|
backgroundContext.saveWithErrorLogging()
|
||||||
@ -465,7 +464,7 @@ private extension SaveStatesViewController
|
|||||||
|
|
||||||
if self.traitCollection.forceTouchCapability == .Available
|
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
|
let previewAction = Action(title: NSLocalizedString("Set as Preview Save State", comment: ""), style: .Default, action: { action in
|
||||||
self.updatePreviewSaveState(saveState)
|
self.updatePreviewSaveState(saveState)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user