Displays more detailed sync progress in RSTToastView

This commit is contained in:
Riley Testut 2019-03-25 15:46:01 -07:00
parent 72f4da6bc4
commit 84e44f5aee
4 changed files with 29 additions and 7 deletions

View File

@ -48,7 +48,15 @@ class GamesViewController: UIViewController
private var searchController: RSTSearchController? private var searchController: RSTSearchController?
private var syncingToastView: RSTToastView? private var syncingToastView: RSTToastView? {
didSet {
if self.syncingToastView == nil
{
self.syncingProgressObservation = nil
}
}
}
private var syncingProgressObservation: NSKeyValueObservation?
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
fatalError("initWithNibName: not implemented") fatalError("initWithNibName: not implemented")
@ -382,13 +390,21 @@ private extension GamesViewController
func showSyncingToastViewIfNeeded() func showSyncingToastViewIfNeeded()
{ {
guard let coordinator = SyncManager.shared.coordinator, coordinator.isSyncing && self.syncingToastView == nil else { return } guard let coordinator = SyncManager.shared.coordinator, let syncProgress = SyncManager.shared.syncProgress, coordinator.isSyncing && self.syncingToastView == nil else { return }
let toastView = RSTToastView(text: NSLocalizedString("Syncing...", comment: ""), detailText: nil) let toastView = RSTToastView(text: NSLocalizedString("Syncing...", comment: ""), detailText: syncProgress.localizedAdditionalDescription)
toastView.activityIndicatorView.startAnimating() toastView.activityIndicatorView.startAnimating()
toastView.addTarget(self, action: #selector(GamesViewController.hideSyncingToastView), for: .touchUpInside) toastView.addTarget(self, action: #selector(GamesViewController.hideSyncingToastView), for: .touchUpInside)
toastView.show(in: self.view) toastView.show(in: self.view)
self.syncingProgressObservation = syncProgress.observe(\.localizedAdditionalDescription) { [weak toastView, weak self] (progress, change) in
DispatchQueue.main.async {
// Prevent us from updating text right as we're dismissing the toast view.
guard self?.syncingToastView != nil else { return }
toastView?.detailTextLabel.text = progress.localizedAdditionalDescription
}
}
self.syncingToastView = toastView self.syncingToastView = toastView
} }
@ -402,6 +418,7 @@ private extension GamesViewController
case .failure(let error): toastView = RSTToastView(text: NSLocalizedString("Sync Failed", comment: ""), detailText: error.failureReason) case .failure(let error): toastView = RSTToastView(text: NSLocalizedString("Sync Failed", comment: ""), detailText: error.failureReason)
} }
toastView.textLabel.textAlignment = .center
toastView.addTarget(self, action: #selector(GamesViewController.presentSyncResultsViewController), for: .touchUpInside) toastView.addTarget(self, action: #selector(GamesViewController.presentSyncResultsViewController), for: .touchUpInside)
toastView.show(in: self.view, duration: 2.0) toastView.show(in: self.view, duration: 2.0)

View File

@ -92,6 +92,8 @@ final class SyncManager
return self.coordinator?.recordController return self.coordinator?.recordController
} }
private(set) var syncProgress: Progress?
private(set) var previousSyncResult: SyncResult? private(set) var previousSyncResult: SyncResult?
private(set) var coordinator: SyncCoordinator? private(set) var coordinator: SyncCoordinator?
@ -187,7 +189,8 @@ extension SyncManager
func sync() func sync()
{ {
self.coordinator?.sync() let progress = self.coordinator?.sync()
self.syncProgress = progress
} }
} }
@ -198,6 +201,8 @@ private extension SyncManager
guard let result = notification.userInfo?[SyncCoordinator.syncResultKey] as? SyncResult else { return } guard let result = notification.userInfo?[SyncCoordinator.syncResultKey] as? SyncResult else { return }
self.previousSyncResult = result self.previousSyncResult = result
self.syncProgress = nil
print("Finished syncing!") print("Finished syncing!")
} }

2
External/Harmony vendored

@ -1 +1 @@
Subproject commit 39311d36660c98bc6f240d7134c39f8361fc7b3e Subproject commit 0301f3ea5d3ede4f8eb3c06227a4f63b9b7b247c

2
External/Roxas vendored

@ -1 +1 @@
Subproject commit ffd65b85417db90895361446ea848d68a8ef9e4c Subproject commit 8ab1eecff273609896dff9bb18f17185ffa08f26