public JobEntry(IJobView jobView, JobTypeDescription typeDescription) { InitializeComponent(); _jobView = jobView; EntryType = typeDescription; EntryProgress = jobView.Progress; EntryException = jobView.Exception; Status = jobView.LastStatus; JobId = jobView.Id; switch (jobView.Type) { case JobType.FileTransfer: EntryArgs = new TransferArgsView(jobView.GetArgumentsView().FileTransferArguments); break; case JobType.Delete: EntryArgs = new DelArgsView(jobView.GetArgumentsView().DeleteArguments); break; case JobType.DirTransfer: EntryArgs = new TransferArgsView(jobView.GetArgumentsView().DirectoryTransferArguments); break; default: throw new ArgumentOutOfRangeException("JobEntry.ctor: new type of job?"); } }
private void JobChanged(IJobView jobView, JobChangeEvent changeEvent) { if (pane.GetControl().IsDisposed) { return; } if (!pane.GetControl().IsHandleCreated) { pane.GetControl().HandleCreated += (object sender, EventArgs e) => JobChangeHandler(jobView, changeEvent); } else { pane.GetControl().BeginInvoke(new Action <IJobView, JobChangeEvent>(JobChangeHandler), jobView, changeEvent); } }
public static JobTypeDescription GetJobTypeDescription(this IJobView jobView) { if (jobView.Type == JobType.Delete) { if (jobView.GetArgumentsView().DeleteArguments.Target.GetType() == typeof(DirectoryInfo)) { return(JobTypeDescription.DirDelete); } else { return(JobTypeDescription.FileDelete); } } if (jobView.Type == JobType.DirTransfer) { if (jobView.GetArgumentsView().DirectoryTransferArguments.Settings == TransferSettings.DeleteOriginal) { return(JobTypeDescription.DirMove); } else { return(JobTypeDescription.DirCopy); } } if (jobView.Type == JobType.FileTransfer) { if (jobView.GetArgumentsView().FileTransferArguments.Settings == TransferSettings.DeleteOriginal) { return(JobTypeDescription.FileMove); } else { return(JobTypeDescription.FileCopy); } } throw new ArgumentOutOfRangeException("New JobTypeDescription?"); }
private static void OnJobChange(IJobView changedJob, JobChangeEvent changeEvent) { JobChange?.Invoke(changedJob, changeEvent); }
private void JobChangeHandler(IJobView jobView, JobChangeEvent changeEvent) { switch (changeEvent) { case JobChangeEvent.Enqueued: pane.JobsQueued++; entriesHolder.Add(new JobEntry(jobView, jobView.GetJobTypeDescription())); break; case JobChangeEvent.BeforeRun: { var entry = entriesHolder.Find(e => e.JobId == jobView.Id); if (entry == null || entry.Locked) { return; } pane.JobsQueued--; pane.JobsInProgress++; entry.Status = JobStatus.Running; } break; case JobChangeEvent.AfterCompleted: { var entry = entriesHolder.Find(e => e.JobId == jobView.Id); if (entry == null || entry.Locked) { return; } pane.JobsInProgress--; entry.Status = JobStatus.Done; entry.Locked = true; } break; case JobChangeEvent.OnProgressChange: { var entry = entriesHolder.Find(e => e.JobId == jobView.Id); if (entry == null) { pane.JobsInProgress++; entriesHolder.AddToTop(new JobEntry(jobView, jobView.GetJobTypeDescription())); } else if (entry.Locked) { return; } else { entry.EntryProgress = jobView.Progress; } } break; case JobChangeEvent.ExceptionThrown: { var entry = entriesHolder.Find(e => e.JobId == jobView.Id); if (entry == null || entry.Locked) { return; } pane.JobsInProgress--; entry.EntryException = jobView.Exception; entry.Status = JobStatus.Error; entry.Locked = true; } break; case JobChangeEvent.Canceled: { var entry = entriesHolder.Find(e => e.JobId == jobView.Id); if (entry == null || entry.Locked) { return; } pane.JobsInProgress--; entry.Status = JobStatus.Canceled; entry.Locked = true; } break; default: throw new ArgumentOutOfRangeException("JobsPanePresenter.JobsChanged: Maybe new type of JobChangeEvent?"); } if (changeEvent == JobChangeEvent.AfterCompleted || changeEvent == JobChangeEvent.ExceptionThrown || changeEvent == JobChangeEvent.Canceled) { Task.Delay(2000).ContinueWith( _ => { entriesHolder.Remove(e => e.JobId == jobView.Id); } , new CancellationToken() , TaskContinuationOptions.None , TaskScheduler.FromCurrentSynchronizationContext() ); } }