Beispiel #1
0
        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?");
        }
Beispiel #4
0
 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()
                    );
            }
        }