From 36fb12ab962776bd0605de589cc48d3499a6880b Mon Sep 17 00:00:00 2001 From: Garrett Stevens Date: Sat, 8 Feb 2025 18:46:16 -0800 Subject: [PATCH] Handle multiple jobs with the same name (#4825) --- .../src/JobsListWidget/model.ts | 52 ++++++++++++++----- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/plugins/jobs-management/src/JobsListWidget/model.ts b/plugins/jobs-management/src/JobsListWidget/model.ts index fa789d0a0b..6f89d05eb2 100644 --- a/plugins/jobs-management/src/JobsListWidget/model.ts +++ b/plugins/jobs-management/src/JobsListWidget/model.ts @@ -47,7 +47,11 @@ export function stateModelFactory(_pluginManager: PluginManager) { * #action */ addJob(job: NewJob) { - const { cancelCallback } = job + const { cancelCallback, name } = job + const existing = self.jobs.find(job => job.name === name) + if (existing) { + return existing + } const length = self.jobs.push(job) const addedJob = self.jobs[length - 1]! addedJob.setCancelCallback(cancelCallback) @@ -58,39 +62,61 @@ export function stateModelFactory(_pluginManager: PluginManager) { */ removeJob(jobName: string) { const indx = self.jobs.findIndex(job => job.name === jobName) - const removed = self.jobs[indx] - self.jobs.splice(indx, 1) - return removed + if (indx === -1) { + return undefined + } + const removed = self.jobs.splice(indx, 1) + return removed[0] }, /** * #action */ addFinishedJob(job: NewJob) { - self.finished.push(job) - return self.finished + const existing = self.finished.find( + finishedJob => finishedJob.name === job.name, + ) + if (existing) { + return existing + } + const length = self.finished.push(job) + return self.finished[length - 1] }, /** * #action */ addQueuedJob(job: NewJob) { - self.queued.push(job) - return self.finished + const existing = self.queued.find( + queuedJob => queuedJob.name === job.name, + ) + if (existing) { + return existing + } + const length = self.queued.push(job) + return self.queued[length - 1] }, /** * #action */ addAbortedJob(job: NewJob) { - self.aborted.push(job) - return self.aborted + const existing = self.aborted.find( + abortedJob => abortedJob.name === job.name, + ) + if (existing) { + return existing + } + const length = self.aborted.push(job) + return self.aborted[length - 1] }, /** * #action */ removeQueuedJob(jobName: string) { const indx = self.queued.findIndex(job => job.name === jobName) - const removed = self.queued[indx] - self.queued.splice(indx, 1) - return removed + if (indx === -1) { + return undefined + } + const removed = self.queued.splice(indx, 1) + return removed[0] }, /** * #action