private void PrepareOutputs(DestConfig ucDestOptions)
 {
     if (!States.Contains(TaskState.Prepared) && !States.Contains(TaskState.CancellationPending))
     {
         WorkflowConfig.DestConfig = ucDestOptions;
         States.Add(TaskState.Prepared);
     }
 }
        private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker bw = (BackgroundWorker)sender;
            UploaderInfo[] uploaders = (UploaderInfo[])e.Argument;

            foreach (UploaderInfo uploader in uploaders)
            {
                if (this.IsDisposed || !isTesting || uploader == null)
                {
                    break;
                }

                DestConfig dcTester = new DestConfig();
                dcTester.Outputs.Add(OutputEnum.RemoteHost);

                TaskInfo tiTester = new TaskInfo()
                {
                    Job = WorkerTask.JobLevel2.UploadFromClipboard,
                    DestConfig = dcTester
                };
                WorkerTask task = new WorkerTask(new BackgroundWorker() { WorkerReportsProgress = true }, tiTester);

                uploader.Timer = new Stopwatch();
                uploader.Timer.Start();
                uploader.Task = task;
                bw.ReportProgress((int)UploadStatus.Uploading, uploader);

                try
                {
                    switch (uploader.UploaderType)
                    {
                        case UploaderType.ImageUploader:
                            task.WorkflowConfig.DestConfig.ImageUploaders.Add(uploader.ImageUploader);
                            task.UpdateLocalFilePath(TestImageFilePath);
                            task.PublishData();
                            break;
                        case UploaderType.FileUploader:
                            task.WorkflowConfig.DestConfig.ImageUploaders.Add(ImageDestination.FileUploader);
                            task.WorkflowConfig.DestConfig.FileUploaders.Add(uploader.FileUploader);
                            task.UpdateLocalFilePath(TestFilePath);
                            task.PublishData();
                            break;
                        case UploaderType.TextUploader:
                            task.WorkflowConfig.DestConfig.TextUploaders.Add(uploader.TextUploader);
                            task.SetText(TestText);
                            task.PublishData();
                            break;
                        case UploaderType.UrlShortener:
                            task.WorkflowConfig.DestConfig.LinkUploaders.Add(uploader.UrlShortener);
                            task.ShortenURL(TestURL);
                            if (task.UploadResults.Count > 0)
                            {
                                task.UploadResults[0].URL = task.UploadResults[0].ShortenedURL;
                            }
                            break;
                        default:
                            throw new Exception("Unknown uploader.");
                    }
                }
                catch (Exception ex)
                {
                    ConsoleWriteLine(ex.ToString());
                }
                finally
                {
                    uploader.Timer.Stop();
                    uploader.Task = task;
                    bw.ReportProgress((int)UploadStatus.Uploaded, uploader);
                }
            }
        }
        private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker bw = (BackgroundWorker)sender;

            UploaderInfo[] uploaders = (UploaderInfo[])e.Argument;

            foreach (UploaderInfo uploader in uploaders)
            {
                if (this.IsDisposed || !isTesting || uploader == null)
                {
                    break;
                }

                DestConfig dcTester = new DestConfig();
                dcTester.Outputs.Add(OutputEnum.RemoteHost);

                TaskInfo tiTester = new TaskInfo()
                {
                    Job        = WorkerTask.JobLevel2.UploadFromClipboard,
                    DestConfig = dcTester
                };
                WorkerTask task = new WorkerTask(new BackgroundWorker()
                {
                    WorkerReportsProgress = true
                }, tiTester);

                uploader.Timer = new Stopwatch();
                uploader.Timer.Start();
                uploader.Task = task;
                bw.ReportProgress((int)UploadStatus.Uploading, uploader);

                try
                {
                    switch (uploader.UploaderType)
                    {
                    case UploaderType.ImageUploader:
                        task.WorkflowConfig.DestConfig.ImageUploaders.Add(uploader.ImageUploader);
                        task.UpdateLocalFilePath(TestImageFilePath);
                        task.PublishData();
                        break;

                    case UploaderType.FileUploader:
                        task.WorkflowConfig.DestConfig.ImageUploaders.Add(ImageDestination.FileUploader);
                        task.WorkflowConfig.DestConfig.FileUploaders.Add(uploader.FileUploader);
                        task.UpdateLocalFilePath(TestFilePath);
                        task.PublishData();
                        break;

                    case UploaderType.TextUploader:
                        task.WorkflowConfig.DestConfig.TextUploaders.Add(uploader.TextUploader);
                        task.SetText(TestText);
                        task.PublishData();
                        break;

                    case UploaderType.UrlShortener:
                        task.WorkflowConfig.DestConfig.LinkUploaders.Add(uploader.UrlShortener);
                        task.ShortenURL(TestURL);
                        if (task.UploadResults.Count > 0)
                        {
                            task.UploadResults[0].URL = task.UploadResults[0].ShortenedURL;
                        }
                        break;

                    default:
                        throw new Exception("Unknown uploader.");
                    }
                }
                catch (Exception ex)
                {
                    ConsoleWriteLine(ex.ToString());
                }
                finally
                {
                    uploader.Timer.Stop();
                    uploader.Task = task;
                    bw.ReportProgress((int)UploadStatus.Uploaded, uploader);
                }
            }
        }