private void ButtonClick(object sender, RoutedEventArgs e) { var button = (Button)sender; switch (button.Name) { case "Retry": Result = new TransferErrorDialogResult(ErrorResolutionBehavior.Retry); break; case "Skip": Result = new TransferErrorDialogResult(ErrorResolutionBehavior.Skip); break; case "SkipAll": Result = new TransferErrorDialogResult(ErrorResolutionBehavior.Skip, CopyActionScope.All); break; case "Cancel": Result = new TransferErrorDialogResult(ErrorResolutionBehavior.Cancel); break; } DialogResult = true; Close(); }
public void InitializeTransfer(Queue <QueueItem> queue, FileOperation mode) { _queue = queue; _paneCache.Clear(); _isPaused = false; _isAborted = false; _isContinued = false; _deleteAll = false; _skipAll = null; UserAction = mode; TransferAction = mode == FileOperation.Copy ? GetCopyActionText() : Resx.ResourceManager.GetString(mode.ToString()); _rememberedCopyAction = CopyAction.CreateNew; _currentFileBytesTransferred = 0; CurrentFileProgress = 0; FilesTransferred = 0; FileCount = _queue.Count; BytesTransferred = 0; TotalBytes = _queue.Where(item => item.FileSystemItem.Type == ItemType.File).Sum(item => item.FileSystemItem.Size ?? 0); Speed = 0; ElapsedTime = new TimeSpan(0); RemainingTime = new TimeSpan(0); WorkHandler.Run(BeforeTransferStart, BeforeTransferStartCallback); }
internal TransferErrorDialogResult ShowCorrespondingErrorDialog(Exception exception, bool feedbackNeeded = true) { var transferException = exception as TransferException; var exceptionType = transferException != null ? transferException.Type : TransferErrorType.NotSpecified; _elapsedTimeMeter.Stop(); var result = new TransferErrorDialogResult(ErrorResolutionBehavior.Cancel); switch (exceptionType) { case TransferErrorType.NotSpecified: { if (feedbackNeeded) { result = _skipAll ?? WindowManager.ShowIoErrorDialog(exception); } else { WindowManager.ShowMessage(Resx.IOError, exception.Message); } } break; case TransferErrorType.WriteAccessError: case TransferErrorType.NotSupporterCharactersInPath: case TransferErrorType.NameIsTooLong: case TransferErrorType.PathIsTooLong: { if (_skipAll != null) { result = _skipAll; } else { if (_queue == null) { WindowManager.ShowMessage(Resx.IOError, exception.Message); } else { var sourceFile = _queue.Peek().FileSystemItem; var viewModel = WindowManager.GetWriteErrorDialogViewModel(transferException); if (exceptionType == TransferErrorType.WriteAccessError) { if (IsResumeSupported && sourceFile.Size > transferException.TargetFileSize) { viewModel.IsResumeEnabled = true; viewModel.IsResumeAllEnabled = true; } if (transferException.TargetFile != null) { TargetPane.GetItemViewModel(transferException.TargetFile); } } SourcePane.GetItemViewModel(sourceFile.Path); result = WindowManager.ShowWriteErrorDialog(viewModel); } } } break; case TransferErrorType.LostConnection: var ftp = (FtpContentViewModel)transferException.Pane; if (WindowManager.ShowReconnectionDialog(exception) == true) { try { ftp.RestoreConnection(); ftp.Refresh(false); } catch (Exception ex) { WindowManager.ShowMessage(Resx.ConnectionFailed, string.Format(Resx.CannotReestablishConnection, ex.Message)); ftp.CloseCommand.Execute(); } } else { ftp.CloseCommand.Execute(); } break; default: throw new NotSupportedException("Invalid transfer error type: " + exceptionType); } //TODO: refactor scoping if (result.Scope == CopyActionScope.All) { if (result.Action.HasValue) { _rememberedCopyAction = result.Action.Value; } if (result.Behavior == ErrorResolutionBehavior.Skip) { _skipAll = result; } } _elapsedTimeMeter.Start(); return(result); }