public static ShareJobFinishedEventArgs Cancel(IShareJob job) { return(new ShareJobFinishedEventArgs(job) { WasCancelled = true }); }
public static ShareJobFinishedEventArgs Error(IShareJob job, string message) { return(new ShareJobFinishedEventArgs(job) { ErrorMessage = message }); }
public async void RunAllJobs() { if (IsRunningJob) { return; } while (true) { IShareJob nextJob = null; // TryDequeue is thread-safe if (!InnerQueue.TryDequeue(out nextJob)) { AllJobsFinished?.Invoke(this, new EventArgs()); return; } nextJob.StatusUpdate += Job_StatusUpdate; nextJob.Finished += NextJob_Finished; IsRunningJob = true; CurrentJob = nextJob; JobStarted?.Invoke(this, new ShareJobQueueStatusEventArgs(nextJob, "Started")); await nextJob.Execute(); // executes NextJob_Finished when finished IsRunningJob = false; CurrentJob.StatusUpdate -= Job_StatusUpdate; } }
private void Job_StatusUpdate(object sender, ShareJobStatusEventArgs e) { IShareJob job = (IShareJob)sender; ShareJobQueueStatusEventArgs ee = new ShareJobQueueStatusEventArgs(job, e.Message); CurrentJobStatusUpdate?.Invoke(this, ee); }
private void SkipJobButton_Click(object sender, RoutedEventArgs e) { // remove the job from the extension's KVS IShareJob currentJob = ShareJobQueue.CurrentJob; currentJob?.Cancel(); // continue on with the queue ShareJobQueue.RunAllJobs(); }
private void NextJob_Finished(object sender, ShareJobFinishedEventArgs e) { IShareJob job = (IShareJob)sender; if (e.ErrorMessage != null) { JobFinished?.Invoke(this, new ShareJobQueueStatusEventArgs(job, "Failed: " + e.ErrorMessage, true)); } else { JobFinished?.Invoke(this, new ShareJobQueueStatusEventArgs(job, "Finished")); } }
public ShareJobQueueStatusEventArgs(IShareJob job, string status, bool failed = false) { this.Job = job; this.Status = status; this.Failed = failed; }
public ShareJobFinishedEventArgs(IShareJob job, string url = null) { this.Job = job; this.Url = url; }
public void Enqueue(IShareJob shareJob) { InnerQueue.Enqueue(shareJob); NotifyJobEnqueued(); }