From 08c61ad66b39adfaa2547f2e3485f33a25bdeb40 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Wed, 18 Sep 2019 12:39:36 -0700 Subject: [PATCH] Improves error message when Dropbox prevents downloading games due to copyright --- Delta/Syncing/SyncResultViewController.swift | 38 ++++++++++++++------ External/Harmony | 2 +- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/Delta/Syncing/SyncResultViewController.swift b/Delta/Syncing/SyncResultViewController.swift index 37baff8..4de8bf6 100644 --- a/Delta/Syncing/SyncResultViewController.swift +++ b/Delta/Syncing/SyncResultViewController.swift @@ -138,14 +138,30 @@ private extension SyncResultViewController switch error { case .filesFailed(_, let errors): - var messages = [String]() - for error in errors + let isRestricted = errors.contains(where: { (error) -> Bool in + switch error + { + case .restricted: return true + default: return false + } + }) + + if isRestricted { - messages.append(error.localizedDescription) + 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]() + + for error in errors + { + messages.append(error.localizedDescription) + } + + errorMessage = messages.joined(separator: "\n") } - - errorMessage = messages.joined(separator: "\n") case .other(_, let error as NSError): errorMessage = error.localizedFailureReason ?? error.localizedDescription default: errorMessage = error.failureReason @@ -213,6 +229,8 @@ private extension SyncResultViewController case let error as RecordError: guard let recordType = SyncManager.RecordType(rawValue: error.record.recordID.type) else { continue } + let metadata = error.record.localMetadata ?? error.record.remoteMetadata + switch recordType { case .game: group = .game(error.record.recordID) @@ -221,19 +239,19 @@ private extension SyncResultViewController case .gameControllerInputMapping: group = .gameControllerInputMapping 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) group = .game(recordID) 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) group = .saveState(gameID: recordID) 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) group = .cheat(gameID: recordID) @@ -338,7 +356,7 @@ extension SyncResultViewController case .saveState(let gameID): 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: "") } @@ -350,7 +368,7 @@ extension SyncResultViewController case .cheat(let gameID): 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: "") } diff --git a/External/Harmony b/External/Harmony index d9f1573..7f365fa 160000 --- a/External/Harmony +++ b/External/Harmony @@ -1 +1 @@ -Subproject commit d9f157385a809ba7281bf26a2287a7afa36004b1 +Subproject commit 7f365faac01e3a2d562d747875fbd062be4acb5e