public async Task CreateZip(List <StorageFolder> folders, string zipFileName, System.IO.Compression.CompressionLevel compressionLevel)
        {
            ArchiverPlus archiver = new ArchiverPlus();

            archiver.CompressingProgress += Archiver_CompressingProgress;

            await archiver.Compress(folders, await (await StorageFolder.GetFolderFromPathAsync(System.IO.Path.GetDirectoryName(zipFileName))).CreateFileAsync(System.IO.Path.GetFileName(zipFileName)), compressionLevel);

            archiver.CompressingProgress -= Archiver_CompressingProgress;
        }
        public async Task BackupPath(string path, string output)
        {
            ArchiverPlus archiver = new ArchiverPlus();

            archiver.CompressingProgress += Archiver_CompressingProgress;

            await archiver.Compress(new StorageFolder[] { await StorageFolder.GetFolderFromPathAsync(path) }.ToList(),
                                    await (await StorageFolder.GetFolderFromPathAsync(System.IO.Path.GetDirectoryName(output))).CreateFileAsync(System.IO.Path.GetFileName(output)), System.IO.Compression.CompressionLevel.NoCompression);

            archiver.CompressingProgress -= Archiver_CompressingProgress;
        }
        public async Task Restore(Backup backup, List <CompactAppData> skipApps)
        {
            int counter = 1;

            try
            {
                foreach (var item in backup.Apps)
                {
                    if (!skipApps.Contains(item))
                    {
                        OnBackupProgress(new BackupEventArgs(-1, BackupState.ResettingAppData, "Clearing current state of " + item.DisplayName, counter.ToString() + " / " + (backup.Apps.Count - skipApps.Count).ToString(), restoreLog));
                        await ResetAppData(AppDataExtension.GetAppDataFromCompactAppData(item));

                        counter++;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageDialog md = new MessageDialog("4" + ex.Message);
                await md.ShowAsync();
            }
            ArchiverPlus archiver = new ArchiverPlus();

            OnBackupProgress(new BackupEventArgs(-1, BackupState.Initializing, "Loading backup file...", "", restoreLog));
            StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(System.IO.Path.Combine(App.BackupDestination, backup.Name));

            StorageFile file = await folder.GetFileAsync("data.zip");



            Dictionary <string, StorageFolder> dests = new Dictionary <string, StorageFolder>();

            familyToDisplayNames = new Dictionary <string, string>();
            try
            {
                foreach (var item in backup.Apps)
                {
                    if (!skipApps.Contains(item))
                    {
                        FileOperations.RemoveFromGetContentsCache(item.FamilyName);

                        dests[item.FamilyName] = await StorageFolder.GetFolderFromPathAsync(System.IO.Path.GetDirectoryName(await LoadAppData.GetDataFolder(AppDataExtension.GetAppDataFromCompactAppData(item))));

                        familyToDisplayNames.Add(item.FamilyName, item.DisplayName);
                    }
                    else
                    {
                        dests[item.FamilyName] = null; //Skip
                    }
                }
            }
            catch (Exception ex)
            {
                MessageDialog md = new MessageDialog("5" + ex.Message);
                await md.ShowAsync();
            }

            archiver.DecompressingProgress += Archiver_DecompressingProgress;

            try
            {
                await archiver.DecompressSpecial(file, dests);
            }
            catch (Exception ex)
            {
                MessageDialog md = new MessageDialog("6" + ex.Message);
                await md.ShowAsync();
            }
            archiver.DecompressingProgress -= Archiver_DecompressingProgress;

            OnBackupProgress(new BackupEventArgs(100.0, BackupState.Finished, "Restore completed.", "", restoreLog));
        }