private async void ButtonRestore_Click(object sender, RoutedEventArgs e)
        {
            var selected = ListBoxBackups.SelectedItem as BackupFile;

            if (selected == null)
            {
                return;
            }
            var result =
                await
                Core.MainWindow.ShowMessageAsync("Restore backup " + selected.DisplayName,
                                                 "This can not be undone! Make sure you have a current backup (if necessary). To create one, CANCEL and click \"CREATE NEW\".",
                                                 MessageDialogStyle.AffirmativeAndNegative);

            if (result != MessageDialogResult.Affirmative)
            {
                return;
            }
            var archive = new ZipArchive(selected.FileInfo.OpenRead(), ZipArchiveMode.Read);

            archive.ExtractToDirectory(Config.Instance.DataDir, true);
            Config.Load();
            Config.Save();
            DeckList.Reload();
            DeckList.Save();
            DeckStatsList.Reload();
            DeckStatsList.Save();
            DefaultDeckStats.Reload();
            DefaultDeckStats.Save();
            Core.MainWindow.ShowMessage("Success", "Please restart HDT for this to take effect.").Forget();
        }
 internal static bool Restore(FileInfo backup, bool reload, params string[] files)
 {
     try
     {
         var archive = new ZipArchive(backup.OpenRead(), ZipArchiveMode.Read);
         if (files.Length == 0)
         {
             archive.ExtractToDirectory(Config.Instance.DataDir, true);
         }
         else
         {
             foreach (var file in files.Where(x => Files.Contains(x)))
             {
                 archive.GetEntry(file).ExtractToFile(Path.Combine(Config.Instance.DataDir, file), true);
             }
         }
         if (!reload)
         {
             return(true);
         }
         if (files.Length == 0 || files.Contains("config.xml"))
         {
             Config.Load();
             Config.Save();
         }
         if (files.Length == 0 || files.Contains("PlayerDecks.xml"))
         {
             DeckList.Reload();
             DeckList.Save();
         }
         if (files.Length == 0 || files.Contains("DeckStats.xml"))
         {
             DeckStatsList.Reload();
             DeckStatsList.Save();
         }
         if (files.Length == 0 || files.Contains("DefaultDeckStats.xml"))
         {
             DefaultDeckStats.Reload();
             DefaultDeckStats.Save();
         }
         return(true);
     }
     catch (Exception ex)
     {
         Log.Error(ex);
         return(false);
     }
 }