コード例 #1
0
        private static void HandleSaveAsFileSelection(FileSelectionEventArgs e)
        {
            using (SaveFileDialog sfd = new SaveFileDialog())
            {
                switch (e.FileSelectionType)
                {
                case FileSelectionType.SaveAsEncrypted:
                    sfd.Title        = Texts.EncryptFileSaveAsDialogTitle;
                    sfd.DefaultExt   = OS.Current.AxCryptExtension;
                    sfd.AddExtension = true;
                    sfd.Filter       = Texts.FileFilterDialogFilterPatternWin.InvariantFormat("." + sfd.DefaultExt, Texts.FileFilterFileTypeAxCryptFiles, Texts.FileFilterFileTypeAllFiles);
                    break;

                case FileSelectionType.SaveAsDecrypted:
                    string extension = Path.GetExtension(e.SelectedFiles[0]);
                    sfd.Title        = Texts.DecryptedSaveAsFileDialogTitle;
                    sfd.DefaultExt   = extension;
                    sfd.AddExtension = !String.IsNullOrEmpty(extension);
                    sfd.Filter       = Texts.FileFilterDialogFilterPatternWin.InvariantFormat("." + sfd.DefaultExt, Texts.FileFilterFileTypeFiles, Texts.FileFilterFileTypeAllFiles);
                    break;
                }
                sfd.CheckPathExists  = true;
                sfd.FileName         = Path.GetFileName(e.SelectedFiles[0]);
                sfd.InitialDirectory = Path.GetDirectoryName(e.SelectedFiles[0]);
                sfd.ValidateNames    = true;
                sfd.OverwritePrompt  = true;
                sfd.RestoreDirectory = true;
                DialogResult saveAsResult = sfd.ShowDialog();
                e.Cancel           = saveAsResult != DialogResult.OK;
                e.SelectedFiles[0] = sfd.FileName;
            }
        }
コード例 #2
0
        private Task <FileOperationContext> WipeFileWorkAsync(IDataStore file, IProgressContext progress)
        {
            FileOperationsController operationsController = new FileOperationsController(progress);

            operationsController.WipeQueryConfirmation += (object sender, FileOperationEventArgs e) =>
            {
                FileSelectionEventArgs fileSelectionArgs = new FileSelectionEventArgs(new string[] { file.FullName, })
                {
                    FileSelectionType = FileSelectionType.WipeConfirm,
                };
                OnSelectingFiles(fileSelectionArgs);
                e.Cancel           = fileSelectionArgs.Cancel;
                e.Skip             = fileSelectionArgs.Skip;
                e.ConfirmAll       = fileSelectionArgs.ConfirmAll;
                e.SaveFileFullName = fileSelectionArgs.SelectedFiles.FirstOrDefault() ?? String.Empty;
            };

            operationsController.Completed += async(object sender, FileOperationEventArgs e) =>
            {
                if (e.Skip)
                {
                    return;
                }
                if (e.Status.ErrorStatus == ErrorStatus.Success)
                {
                    await New <ActiveFileAction>().RemoveRecentFiles(new IDataStore[] { New <IDataStore>(e.SaveFileFullName) }, progress);
                }
            };

            return(operationsController.WipeFileAsync(file));
        }
コード例 #3
0
        protected virtual void OnSelectingFiles(FileSelectionEventArgs e)
        {
            EventHandler <FileSelectionEventArgs> handler = SelectingFiles;

            if (handler != null)
            {
                handler(this, e);
            }
        }
コード例 #4
0
 private static void HandleWipeConfirm(FileSelectionEventArgs e)
 {
     using (ConfirmWipeDialog cwd = new ConfirmWipeDialog())
     {
         cwd.FileNameLabel.Text = Path.GetFileName(e.SelectedFiles[0]);
         e.Skip = false;
         DialogResult confirmResult = cwd.ShowDialog();
         e.ConfirmAll = cwd._confirmAllCheckBox.Checked;
         e.Skip       = confirmResult == DialogResult.No;
         e.Cancel     = confirmResult == DialogResult.Cancel;
     }
 }
コード例 #5
0
        private void carousel_FileSelected(object sender, FileSelectionEventArgs e)
        {
            var file = files.FirstOrDefault(x => x.Name == e.NewFilePath);

            if (file != null)
            {
                LoadFile(file);
            }
            else
            {
                MessageBox.Show("No file found", $"Could not load `{ e.NewFilePath }` file from disc", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
コード例 #6
0
        private IEnumerable <string> SelectFilesInternal(FileSelectionType fileSelectionType)
        {
            FileSelectionEventArgs fileSelectionArgs = new FileSelectionEventArgs(new string[0])
            {
                FileSelectionType = fileSelectionType,
            };

            OnSelectingFiles(fileSelectionArgs);
            if (fileSelectionArgs.Cancel)
            {
                return(new string[0]);
            }
            return(fileSelectionArgs.SelectedFiles);
        }
コード例 #7
0
        private Task OpenFilesFromFolderActionAsync(string folder)
        {
            FileSelectionEventArgs fileSelectionArgs = new FileSelectionEventArgs(new string[] { folder })
            {
                FileSelectionType = FileSelectionType.Open,
            };

            OnSelectingFiles(fileSelectionArgs);
            if (fileSelectionArgs.Cancel)
            {
                return(Constant.CompletedTask);
            }
            return(OpenFilesActionAsync(fileSelectionArgs.SelectedFiles));
        }
コード例 #8
0
        public Task HandleSelection(FileSelectionEventArgs e)
        {
            if (e == null)
            {
                throw new ArgumentNullException(nameof(e));
            }

            try
            {
                New <IMainUI>().DisableUI();
                HandleSelectionInternal(e);
            }
            finally
            {
                New <IMainUI>().RestoreUI();
            }
            return(Constant.CompletedTask);
        }
コード例 #9
0
 private void HandleFolderSelection(FileSelectionEventArgs e)
 {
     using (FolderBrowserDialog fbd = new FolderBrowserDialog())
     {
         fbd.ShowNewFolderButton = false;
         fbd.Description         = Texts.UpgradeLegacyFilesMenuToolTip;
         fbd.RootFolder          = Environment.SpecialFolder.MyComputer;
         DialogResult result = fbd.ShowDialog(_owner);
         e.SelectedFiles.Clear();
         if (result == DialogResult.Cancel)
         {
             e.Cancel = true;
         }
         else
         {
             e.SelectedFiles.Add(fbd.SelectedPath);
         }
     }
 }
コード例 #10
0
        private Task <FileOperationContext> DecryptFileWork(IDataStore file, IProgressContext progress)
        {
            ActiveFile activeFile = New <FileSystemState>().FindActiveFileFromEncryptedPath(file.FullName);

            if (activeFile != null && activeFile.Status.HasFlag(ActiveFileStatus.AssumedOpenAndDecrypted))
            {
                return(Task.FromResult(new FileOperationContext(file.FullName, ErrorStatus.FileLocked)));
            }

            FileOperationsController operationsController = new FileOperationsController(progress);

            operationsController.QueryDecryptionPassphrase = HandleQueryDecryptionPassphraseEventAsync;

            operationsController.QuerySaveFileAs += (object sender, FileOperationEventArgs e) =>
            {
                FileSelectionEventArgs fileSelectionArgs = new FileSelectionEventArgs(new string[] { e.SaveFileFullName })
                {
                    FileSelectionType = FileSelectionType.SaveAsDecrypted,
                };
                OnSelectingFiles(fileSelectionArgs);
                if (fileSelectionArgs.Cancel)
                {
                    e.Cancel = true;
                    return;
                }
                e.SaveFileFullName = fileSelectionArgs.SelectedFiles[0];
            };

            operationsController.KnownKeyAdded = new AsyncDelegateAction <FileOperationEventArgs>(async(FileOperationEventArgs e) =>
            {
                await _knownIdentities.AddAsync(e.LogOnIdentity);
            });

            operationsController.Completed += async(object sender, FileOperationEventArgs e) =>
            {
                if (e.Status.ErrorStatus == ErrorStatus.Success)
                {
                    await New <ActiveFileAction>().RemoveRecentFiles(new IDataStore[] { New <IDataStore>(e.OpenFileFullName) }, progress);
                }
            };

            return(operationsController.DecryptFileAsync(file));
        }
コード例 #11
0
        private void HandleSelectionInternal(FileSelectionEventArgs e)
        {
            switch (e.FileSelectionType)
            {
            case FileSelectionType.SaveAsEncrypted:
            case FileSelectionType.SaveAsDecrypted:
                HandleSaveAsFileSelection(e);
                break;

            case FileSelectionType.WipeConfirm:
                HandleWipeConfirm(e);
                break;

            case FileSelectionType.Folder:
                HandleFolderSelection(e);
                break;

            default:
                HandleOpenFileSelection(e);
                break;
            }
        }
コード例 #12
0
        private Task <FileOperationContext> TryBrokenFileWork(IDataStore file, IProgressContext progress)
        {
            FileOperationsController operationsController = new FileOperationsController(progress);

            operationsController.QueryDecryptionPassphrase = HandleQueryDecryptionPassphraseEventAsync;

            operationsController.QuerySaveFileAs += (object sender, FileOperationEventArgs e) =>
            {
                FileSelectionEventArgs fileSelectionArgs = new FileSelectionEventArgs(new string[] { e.SaveFileFullName })
                {
                    FileSelectionType = FileSelectionType.SaveAsDecrypted,
                };
                OnSelectingFiles(fileSelectionArgs);
                if (fileSelectionArgs.Cancel)
                {
                    e.Cancel = true;
                    return;
                }
                e.SaveFileFullName = fileSelectionArgs.SelectedFiles[0];
            };

            operationsController.KnownKeyAdded = new AsyncDelegateAction <FileOperationEventArgs>(async(FileOperationEventArgs e) =>
            {
                await _knownIdentities.AddAsync(e.LogOnIdentity);
            });

            operationsController.Completed += async(object sender, FileOperationEventArgs e) =>
            {
                if (e.Status.ErrorStatus == ErrorStatus.Success)
                {
                    await New <ActiveFileAction>().RemoveRecentFiles(new IDataStore[] { New <IDataStore>(e.OpenFileFullName) }, progress);
                }
            };

            return(operationsController.TryDecryptBrokenFileAsync(file));
        }
コード例 #13
0
        private static void HandleOpenFileSelection(FileSelectionEventArgs e)
        {
            using (OpenFileDialog ofd = new OpenFileDialog())
            {
                if (e.SelectedFiles != null && e.SelectedFiles.Count > 0 && !String.IsNullOrEmpty(e.SelectedFiles[0]))
                {
                    IDataContainer initialFolder = New <IDataContainer>(e.SelectedFiles[0]);
                    if (initialFolder.IsAvailable)
                    {
                        ofd.InitialDirectory = initialFolder.FullName;
                    }
                }
                switch (e.FileSelectionType)
                {
                case FileSelectionType.Decrypt:
                    ofd.Title           = Texts.DecryptFileOpenDialogTitle;
                    ofd.Multiselect     = true;
                    ofd.CheckFileExists = true;
                    ofd.CheckPathExists = true;
                    ofd.DefaultExt      = New <IRuntimeEnvironment>().AxCryptExtension;
                    ofd.Filter          = Texts.FileFilterDialogFilterPatternWin.InvariantFormat("." + ofd.DefaultExt, Texts.FileFilterFileTypeAxCryptFiles, Texts.FileFilterFileTypeAllFiles);
                    ofd.Multiselect     = true;
                    break;

                case FileSelectionType.Rename:
                    ofd.Title           = Texts.AnonymousRenameSelectFilesDialogTitle;
                    ofd.Multiselect     = true;
                    ofd.CheckFileExists = true;
                    ofd.CheckPathExists = true;
                    ofd.DefaultExt      = New <IRuntimeEnvironment>().AxCryptExtension;
                    ofd.Filter          = Texts.FileFilterDialogFilterPatternWin.InvariantFormat("." + ofd.DefaultExt, Texts.FileFilterFileTypeAxCryptFiles, Texts.FileFilterFileTypeAllFiles);
                    ofd.Multiselect     = true;
                    break;

                case FileSelectionType.Encrypt:
                    ofd.Title           = Texts.EncryptFileOpenDialogTitle;
                    ofd.Multiselect     = true;
                    ofd.CheckFileExists = true;
                    ofd.CheckPathExists = true;
                    break;

                case FileSelectionType.Open:
                    ofd.Title           = Texts.OpenEncryptedFileOpenDialogTitle;
                    ofd.Multiselect     = false;
                    ofd.CheckFileExists = true;
                    ofd.CheckPathExists = true;
                    ofd.DefaultExt      = New <IRuntimeEnvironment>().AxCryptExtension;
                    ofd.Filter          = Texts.FileFilterDialogFilterPatternWin.InvariantFormat("." + ofd.DefaultExt, Texts.FileFilterFileTypeAxCryptFiles, Texts.FileFilterFileTypeAllFiles);
                    break;

                case FileSelectionType.Wipe:
                    ofd.Title           = Texts.WipeFileSelectFileDialogTitle;
                    ofd.Multiselect     = true;
                    ofd.CheckFileExists = true;
                    ofd.CheckPathExists = true;
                    break;

                case FileSelectionType.ImportPublicKeys:
                    ofd.Title           = Texts.ImportPublicKeysFileSelectionTitle;
                    ofd.Multiselect     = true;
                    ofd.CheckFileExists = true;
                    ofd.CheckPathExists = true;
                    ofd.DefaultExt      = ".txt";
                    ofd.Filter          = Texts.FileFilterDialogFilterPatternWin.InvariantFormat("." + ofd.DefaultExt, Texts.FileFilterFileTypePublicSharingKeyFiles, Texts.FileFilterFileTypeAllFiles);
                    break;

                case FileSelectionType.ImportPrivateKeys:
                    ofd.Title           = Texts.ImportPrivateKeysFileSelectionTitle;
                    ofd.Multiselect     = false;
                    ofd.CheckFileExists = true;
                    ofd.CheckPathExists = true;
                    ofd.DefaultExt      = New <IRuntimeEnvironment>().AxCryptExtension;
                    ofd.Filter          = Texts.FileFilterDialogFilterPatternWin.InvariantFormat("." + ofd.DefaultExt, Texts.FileFilterFileTypeAxCryptIdFiles, Texts.FileFilterFileTypeAllFiles);
                    break;

                case FileSelectionType.KeySharing:
                    ofd.Title           = Texts.ShareKeysFileOpenDialogTitle;
                    ofd.Multiselect     = true;
                    ofd.CheckFileExists = true;
                    ofd.CheckPathExists = true;
                    ofd.DefaultExt      = New <IRuntimeEnvironment>().AxCryptExtension;
                    ofd.Filter          = Texts.FileFilterDialogFilterPatternWin.InvariantFormat("." + ofd.DefaultExt, Texts.FileFilterFileTypeAxCryptFiles, Texts.FileFilterFileTypeAllFiles);
                    break;

                default:
                    break;
                }
                DialogResult result = ofd.ShowDialog();
                e.Cancel = result != DialogResult.OK;
                e.SelectedFiles.Clear();
                foreach (string fileName in ofd.FileNames)
                {
                    e.SelectedFiles.Add(fileName);
                }
            }
        }
コード例 #14
0
 public void OnFileSelected(FileSelectionEventArgs e) => FileSelection?.Invoke(this, e);
コード例 #15
0
 protected virtual void OnSelectingFiles(FileSelectionEventArgs e)
 {
     SelectingFiles?.Invoke(this, e);
 }