Exemplo n.º 1
0
        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();
            }
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
                    }
            }
        }