Improves error message when Dropbox prevents downloading games due to copyright

This commit is contained in:
Riley Testut 2019-09-18 12:39:36 -07:00
parent adffbc03a2
commit 08c61ad66b
2 changed files with 29 additions and 11 deletions

View File

@ -138,6 +138,21 @@ private extension SyncResultViewController
switch error switch error
{ {
case .filesFailed(_, let errors): case .filesFailed(_, let errors):
let isRestricted = errors.contains(where: { (error) -> Bool in
switch error
{
case .restricted: return true
default: return false
}
})
if isRestricted
{
errorMessage = NSLocalizedString("Dropbox has flagged this game as copyrighted material, so it cannot be downloaded. Please re-import this game to continue syncing.", comment: "")
}
else
{
var messages = [String]() var messages = [String]()
for error in errors for error in errors
@ -146,6 +161,7 @@ private extension SyncResultViewController
} }
errorMessage = messages.joined(separator: "\n") errorMessage = messages.joined(separator: "\n")
}
case .other(_, let error as NSError): errorMessage = error.localizedFailureReason ?? error.localizedDescription case .other(_, let error as NSError): errorMessage = error.localizedFailureReason ?? error.localizedDescription
default: errorMessage = error.failureReason default: errorMessage = error.failureReason
@ -213,6 +229,8 @@ private extension SyncResultViewController
case let error as RecordError: case let error as RecordError:
guard let recordType = SyncManager.RecordType(rawValue: error.record.recordID.type) else { continue } guard let recordType = SyncManager.RecordType(rawValue: error.record.recordID.type) else { continue }
let metadata = error.record.localMetadata ?? error.record.remoteMetadata
switch recordType switch recordType
{ {
case .game: group = .game(error.record.recordID) case .game: group = .game(error.record.recordID)
@ -221,19 +239,19 @@ private extension SyncResultViewController
case .gameControllerInputMapping: group = .gameControllerInputMapping case .gameControllerInputMapping: group = .gameControllerInputMapping
case .gameSave: case .gameSave:
guard let gameID = error.record.metadata?[.gameID] else { continue } guard let gameID = metadata?[.gameID] else { continue }
let recordID = RecordID(type: SyncManager.RecordType.game.rawValue, identifier: gameID) let recordID = RecordID(type: SyncManager.RecordType.game.rawValue, identifier: gameID)
group = .game(recordID) group = .game(recordID)
case .saveState: case .saveState:
guard let gameID = error.record.metadata?[.gameID] else { continue } guard let gameID = metadata?[.gameID] else { continue }
let recordID = RecordID(type: SyncManager.RecordType.game.rawValue, identifier: gameID) let recordID = RecordID(type: SyncManager.RecordType.game.rawValue, identifier: gameID)
group = .saveState(gameID: recordID) group = .saveState(gameID: recordID)
case .cheat: case .cheat:
guard let gameID = error.record.metadata?[.gameID] else { continue } guard let gameID = metadata?[.gameID] else { continue }
let recordID = RecordID(type: SyncManager.RecordType.game.rawValue, identifier: gameID) let recordID = RecordID(type: SyncManager.RecordType.game.rawValue, identifier: gameID)
group = .cheat(gameID: recordID) group = .cheat(gameID: recordID)
@ -338,7 +356,7 @@ extension SyncResultViewController
case .saveState(let gameID): case .saveState(let gameID):
guard let error = section.errors.first as? RecordError else { return nil } guard let error = section.errors.first as? RecordError else { return nil }
if let gameName = self.gameNamesByRecordID[gameID] ?? error.record.metadata?[.gameName] if let gameName = self.gameNamesByRecordID[gameID] ?? error.record.localMetadata?[.gameName] ?? error.record.remoteMetadata?[.gameName]
{ {
return gameName + " - " + NSLocalizedString("Save States", comment: "") return gameName + " - " + NSLocalizedString("Save States", comment: "")
} }
@ -350,7 +368,7 @@ extension SyncResultViewController
case .cheat(let gameID): case .cheat(let gameID):
guard let error = section.errors.first as? RecordError else { return nil } guard let error = section.errors.first as? RecordError else { return nil }
if let gameName = self.gameNamesByRecordID[gameID] ?? error.record.metadata?[.gameName] if let gameName = self.gameNamesByRecordID[gameID] ?? error.record.localMetadata?[.gameName] ?? error.record.remoteMetadata?[.gameName]
{ {
return gameName + " - " + NSLocalizedString("Cheats", comment: "") return gameName + " - " + NSLocalizedString("Cheats", comment: "")
} }

2
External/Harmony vendored

@ -1 +1 @@
Subproject commit d9f157385a809ba7281bf26a2287a7afa36004b1 Subproject commit 7f365faac01e3a2d562d747875fbd062be4acb5e