private async Task DecryptPakAsync() { var dialog = new MessageDialog("This will permanently decrypt the pak file! Are you sure you want to do this?"); dialog.Commands.Add(new UICommand("Yes", null, "yes")); dialog.Commands.Add(new UICommand("Cancel", null, "no")); var choice = await dialog.ShowAsync(); if ((string)choice.Id == "yes") { await CurrentPak.DecryptAsync(EncryptionKey); var flyout = new Flyout() { Content = new TextBlock { Text = $"Pak decrypted!" }, Placement = FlyoutPlacementMode.Bottom }; flyout.ShowAt((FrameworkElement)Window.Current.Content); // Reload browser. Entries = await CurrentPak.GetEntriesAsync(); } }
private async Task ExportFileAsync() { PakFileBrowserFileItem file = SelectedItems.First(); var picker = new FileSavePicker { SuggestedFileName = file.DisplayName }; picker.FileTypeChoices.Add($"{file.Extension} files", new List <string> { file.Extension }); var saveFile = await picker.PickSaveFileAsync(); if (saveFile != null) { Stream input; if (EncryptionKey == null) { input = await CurrentPak.GetEntryStreamAsync(file.Metadata); } else { input = await CurrentPak.GetEntryStreamAsync(file.Metadata, EncryptionKey); } using (input) using (var output = await saveFile.OpenStreamForWriteAsync()) { await input.CopyToAsync(output); } var flyout = new Flyout() { Content = new TextBlock { Text = $"File saved!" }, Placement = FlyoutPlacementMode.Bottom }; flyout.ShowAt((FrameworkElement)Window.Current.Content); } }
private async Task SwapFileAsync() { var metadata = SelectedItems.First().Metadata; var picker = new FileOpenPicker(); picker.FileTypeFilter.Add("*"); var newFile = await picker.PickSingleFileAsync(); if (newFile != null) { using (var stream = await newFile.OpenStreamForReadAsync()) using (var bufferStream = new MemoryStream()) { await stream.CopyToAsync(bufferStream); if (bufferStream.Length > metadata.Size) { await new MessageDialog($"New file size is bigger than the original file! The new file size must be less than {metadata.Size} bytes.").ShowAsync(); return; } if (bufferStream.Length < metadata.Size) { long sizeDifference = metadata.Size - bufferStream.Length; var swapPaddingDialog = new SwapPaddingDialog(); if (await swapPaddingDialog.ShowAsync() == ContentDialogResult.Primary) { byte padByte; switch (swapPaddingDialog.FilePadding) { case FilePadding.NullBytes: default: padByte = 0x00; break; case FilePadding.Spaces: padByte = (byte)' '; break; } byte[] padding = new byte[sizeDifference]; Array.Fill(padding, padByte); await bufferStream.WriteAsync(padding, 0, padding.Length); } } await CurrentPak.SwapEntryAsync(metadata, bufferStream); OnPropertyChanged(nameof(CurrentView)); var flyout = new Flyout() { Content = new TextBlock { Text = $"File replaced!" }, Placement = FlyoutPlacementMode.Bottom }; flyout.ShowAt((FrameworkElement)Window.Current.Content); } } }