/// <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;
                }
            }
        }