示例#1
0
 private void DecryptFile(Stream inputFileStream, Stream outputFileStream, string passphrase)
 {
     _engine.DecryptFile(inputFileStream, outputFileStream, passphrase);
 }
        /// <summary>
        /// Shows the details of an item clicked on in the <see cref="ItemPage"/>
        /// </summary>
        private async void ItemView_ItemClick(object sender, ItemClickEventArgs e)
        {
            // Navigate to the appropriate destination page, configuring the new page
            // by passing required information as a navigation parameter
            //var itemId = ((SampleDataItem)e.ClickedItem).UniqueId;
            //if (!Frame.Navigate(typeof(ItemPage), itemId))
            //{
            //    throw new Exception(this.resourceLoader.GetString("NavigationFailedExceptionMessage"));
            //}
            Exception exception = null;

            try
            {
                var passphraseDialog = new PassphraseInputDialog();
                ContentDialogResult passphraseDialogResult = await passphraseDialog.ShowAsync();

                if (passphraseDialogResult == ContentDialogResult.Primary)
                {
                    var passphrase = passphraseDialog.Passphrase;
                    var fileData   = (YCFileData)e.ClickedItem;

                    StorageFolder tempFolder    = Windows.Storage.ApplicationData.Current.LocalCacheFolder;
                    StorageFile   encryptedFile = await tempFolder.CreateFileAsync(fileData.InternalName, CreationCollisionOption.ReplaceExisting);

                    StorageFile decryptedFile = await tempFolder.CreateFileAsync(fileData.FileName, CreationCollisionOption.ReplaceExisting);

                    using (var encryptedFileStream = await encryptedFile.OpenStreamForWriteAsync())
                    {
                        await client.GetFile(fileData.InternalName, encryptedFileStream);

                        // reset encrypted file tape head
                        encryptedFileStream.Seek(0, SeekOrigin.Begin);

                        using (var decryptedFileStream = await decryptedFile.OpenStreamForWriteAsync())
                        {
                            engine.DecryptFile(encryptedFileStream, decryptedFileStream, passphrase);
                        }
                    }
                    //No further use for the local encrypted file
                    await encryptedFile.DeleteAsync(StorageDeleteOption.PermanentDelete);

                    // Lift Off!
                    //var launcherOpts = new LauncherOptions()
                    //{
                    //    DisplayApplicationPicker = false
                    //};
                    await Launcher.LaunchFileAsync(decryptedFile);

                    //Burn after reading!
                    //await decryptedFile.DeleteAsync();
                }
            }
            catch (Exception ex)
            {
                exception = ex;
            }
            if (exception != null)
            {
                var dialog = new MessageDialog("An exception was thrown:" + Environment.NewLine + exception.Message, "Oh noes!");
                await dialog.ShowAsync();
            }
        }