private async Task ConfirmAndDeleteFile(YubiCryptFile file)
        {
            if (await CheckUSBToken())
            {
                try
                {
                    var msgResult = await this.ShowMessageAsync(string.Empty, string.Format("{0} will be deleted.\nContinue?", file.FileName), MessageDialogStyle.AffirmativeAndNegative);

                    if (msgResult == MessageDialogResult.Affirmative)
                    {
                        await DeleteFile(file.InternalName);
                        await LoadFiles();
                    }
                }
                catch (Exception e)
                {
                    ToggleProgressOverlay(false);
                    this.ShowMessageAsync("Houston, we've had a problem.", e.Message);
                }
            }
        }
        private async Task SelectAndDownloadFile(YubiCryptFile file)
        {
            if (await CheckUSBToken())
            {
                var tempFilePath = Path.GetTempFileName();

                SaveFileDialog dlg = new SaveFileDialog();
                dlg.FileName        = file.FileName;
                dlg.OverwritePrompt = true;

                Nullable <bool> result = dlg.ShowDialog();

                if (result == true)
                {
                    try
                    {
                        var password = await this.ShowInputAsync("Passphrase needed", "Please enter the passphrase used to protect this file:");

                        ToggleProgressOverlay(true);
                        SetProgressMessage(string.Format("Downloading {0} from your YubiCrypt account...", file.FileName));
                        using (var encryptedFileStream = File.Open(tempFilePath, FileMode.Open, FileAccess.ReadWrite))
                        {
                            await DownloadFile(file.InternalName, encryptedFileStream);

                            SetProgressMessage("Decrypting your file.\nMake sure your YubiKey token is plugged in.");
                            encryptedFileStream.Seek(0, SeekOrigin.Begin);
                            using (var plaintextFileStream = File.Open(dlg.FileName + ".tmp", FileMode.Create))
                            {
                                DecryptFile(encryptedFileStream, plaintextFileStream, password);
                            }
                            if (File.Exists(dlg.FileName))
                            {
                                File.Delete(dlg.FileName);
                            }
                            File.Move(dlg.FileName + ".tmp", dlg.FileName);
                            ToggleProgressOverlay(false);
                        }
                        File.Delete(tempFilePath);
                    }
                    catch (YubiCryptEngineException e)
                    {
                        ToggleProgressOverlay(false);
                        this.ShowMessageAsync("Houston, we've had a problem.", e.Message);
                    }
                    catch (Exception e)
                    {
                        ToggleProgressOverlay(false);
                        this.ShowMessageAsync("Houston, we've had a problem.", e.Message);
                    }
                    finally
                    {
                        if (File.Exists(dlg.FileName + ".tmp"))
                        {
                            File.Delete(dlg.FileName + ".tmp");
                        }
                        if (File.Exists(tempFilePath))
                        {
                            File.Delete(tempFilePath);
                        }
                    }
                }
            }
        }