/// <summary> /// Performs a backup on all games /// </summary> /// <returns>The task</returns> public async Task BackupAllAsync() { // Make sure no backups are running if (GameBackupItems.Any(x => x.PerformingBackupRestore)) { return; } try { GameBackupItems.ForEach(x => x.PerformingBackupRestore = true); // Confirm backup if (!await Services.MessageUI.DisplayMessageAsync(Resources.Backup_ConfirmBackupAll, Resources.Backup_ConfirmBackupAllHeader, MessageType.Warning, true)) { RL.Logger?.LogInformationSource($"Backup canceled"); return; } int completed = 0; // Perform the backups await Task.Run(async() => { foreach (GameBackupItemViewModel game in GameBackupItems) { game.ShowBackupRestoreIndicator = true; if (await RCPServices.Backup.BackupAsync(game.BackupInfo)) { completed++; } game.ShowBackupRestoreIndicator = false; } }); if (completed == GameBackupItems.Count) { await Services.MessageUI.DisplaySuccessfulActionMessageAsync(Resources.Backup_BackupAllSuccess); } else { await Services.MessageUI.DisplayMessageAsync(String.Format(Resources.Backup_BackupAllFailed, completed, GameBackupItems.Count), Resources.Backup_BackupAllFailedHeader, MessageType.Information); } // Refresh the item await Task.Run(async() => await RefreshAsync()); } finally { foreach (var x in GameBackupItems) { x.PerformingBackupRestore = false; x.ShowBackupRestoreIndicator = false; } } }
/// <summary> /// Refreshes the backup items /// </summary> /// <returns></returns> public async Task RefreshAsync() { using (await AsyncLock.LockAsync()) { try { // Clear current items GameBackupItems.Clear(); // Enumerate the saved games foreach (Games game in App.GetGames.Where(x => x.IsAdded())) { // Enumerate the backup info foreach (IBackupInfo info in game.GetGameInfo().GetBackupInfos) { // Refresh the info await info.RefreshAsync(); // Create the backup item var backupItem = new GameBackupItemViewModel(game, info); // Add the item GameBackupItems.Add(backupItem); // Refresh the item await backupItem.RefreshAsync(); } } } catch (Exception ex) { ex.HandleCritical("Refreshing backups"); throw; } } }