Skip to content

Commit 03563d4

Browse files
committed
fix: bring back schedule request cancelling, refactor it to clarify
Signed-off-by: Julien Veyssier <julien-nc@posteo.net>
1 parent a0af7bb commit 03563d4

1 file changed

Lines changed: 32 additions & 6 deletions

File tree

src/assistant.js

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ window.assistantPollTaskId = null
1616
window.assistantPollPositionTimerId = null
1717
window.assistantPollPositionTaskId = null
1818
window.assistantPollPositionAbortController = null
19+
window.assistantSchedulingAbortController = null
1920

2021
listen('taskprocessing:task_update', (type, body) => {
2122
console.debug('[assistant] received task update push notification', type, body)
@@ -172,6 +173,7 @@ export async function openAssistantForm({
172173
}
173174

174175
modalMountPoint.addEventListener('cancel', () => {
176+
cancelScheduling()
175177
cancelTaskPolling()
176178
cancelTaskPositionPolling()
177179
app.unmount()
@@ -191,15 +193,16 @@ export async function openAssistantForm({
191193
view.outputs = null
192194
view.selectedTaskTypeId = taskTypeId
193195

194-
scheduleTask(appId, newTaskCustomId, taskTypeId, inputs)
196+
window.assistantSchedulingAbortController = new AbortController()
197+
scheduleTask(appId, newTaskCustomId, taskTypeId, inputs, window.assistantSchedulingAbortController.signal)
195198
.then((response) => {
199+
cancelScheduling()
196200
const task = response.data?.ocs?.data?.task
197201
lastTask = task
198202
view.selectedTaskId = lastTask?.id
199203
view.expectedRuntime = (lastTask?.completionExpectedAt - lastTask?.scheduledAt) || null
200204
view.startedAt = lastTask?.startedAt || null
201205
view.completionExpectedAt = lastTask?.completionExpectedAt || null
202-
203206
const hasPush = listenToTaskNotifications(task.id)
204207
console.debug('[assistant] HAS PUSH', hasPush)
205208

@@ -255,6 +258,7 @@ export async function openAssistantForm({
255258
})
256259
})
257260
.catch(error => {
261+
cancelScheduling()
258262
view.loading = false
259263
view.showSyncTaskRunning = false
260264
view.taskPosition = null
@@ -267,13 +271,15 @@ export async function openAssistantForm({
267271
syncSubmit(data.detail.inputs, data.detail.selectedTaskTypeId, customId || identifier)
268272
})
269273
modalMountPoint.addEventListener('try-again', (data) => {
274+
cancelScheduling()
270275
const task = data.detail
271276
console.debug('[assistant] try again', task)
272277
syncSubmit(task.input, task.type)
273278
})
274279
modalMountPoint.addEventListener('load-task', (data) => {
275280
const task = data.detail
276281
console.debug('[assistant] loading task', task)
282+
cancelScheduling()
277283
cancelTaskPolling()
278284
cancelTaskPositionPolling()
279285
view.showSyncTaskRunning = false
@@ -378,6 +384,7 @@ export async function openAssistantForm({
378384
})
379385
modalMountPoint.addEventListener('new-task', () => {
380386
console.debug('[assistant] new task')
387+
cancelScheduling()
381388
cancelTaskPolling()
382389
cancelTaskPositionPolling()
383390
view.loading = false
@@ -395,6 +402,7 @@ export async function openAssistantForm({
395402
})
396403
})
397404
modalMountPoint.addEventListener('cancel-task', () => {
405+
cancelScheduling()
398406
cancelTaskPolling()
399407
cancelTaskPositionPolling()
400408
setNotifyReady(lastTask.id, false)
@@ -558,6 +566,11 @@ export async function cancelTaskPositionPolling() {
558566
window.assistantPollPositionTaskId = null
559567
}
560568

569+
export async function cancelScheduling() {
570+
window.assistantSchedulingAbortController?.abort()
571+
window.assistantSchedulingAbortController = null
572+
}
573+
561574
export async function getTask(taskId, signal = null) {
562575
const { default: axios } = await import('@nextcloud/axios')
563576
const { generateOcsUrl } = await import('@nextcloud/router')
@@ -604,9 +617,10 @@ export async function cancelTask(taskId) {
604617
* @param {string} customId the task custom ID
605618
* @param {string} taskType the task type class
606619
* @param {Array} inputs the task input texts as an array
620+
* @param {AbortSignal} signal optional abort signal for cancellation
607621
* @return {Promise<object>}
608622
*/
609-
export async function scheduleTask(appId, customId, taskType, inputs) {
623+
export async function scheduleTask(appId, customId, taskType, inputs, signal = null) {
610624
const { default: axios } = await import('@nextcloud/axios')
611625
const { generateOcsUrl } = await import('@nextcloud/router')
612626
if (taskType === 'core:text2text:translate') {
@@ -620,7 +634,8 @@ export async function scheduleTask(appId, customId, taskType, inputs) {
620634
customId,
621635
preferStreaming: true,
622636
}
623-
return axios.post(url, params)
637+
const config = signal ? { signal } : {}
638+
return axios.post(url, params, config)
624639
}
625640

626641
export async function saveLastSelectedTaskType(taskType) {
@@ -809,17 +824,21 @@ export async function openAssistantTask(
809824
}
810825

811826
modalMountPoint.addEventListener('cancel', () => {
827+
cancelScheduling()
812828
cancelTaskPolling()
813829
cancelTaskPositionPolling()
814830
app.unmount()
815831
OCA.Assistant.isAssistantDialogOpen = false
816832
})
817833
modalMountPoint.addEventListener('submit', (data) => {
818-
scheduleTask(task.appId, task.identifier ?? '', data.detail.selectedTaskTypeId, data.detail.inputs)
834+
window.assistantSchedulingAbortController = new AbortController()
835+
scheduleTask(task.appId, task.identifier ?? '', data.detail.selectedTaskTypeId, data.detail.inputs, window.assistantSchedulingAbortController.signal)
819836
.then((response) => {
837+
cancelScheduling()
820838
console.debug('scheduled task', response.data?.ocs?.data?.task)
821839
})
822840
.catch(error => {
841+
cancelScheduling()
823842
app.unmount()
824843
OCA.Assistant.isAssistantDialogOpen = false
825844
console.error('Assistant scheduling error', error)
@@ -841,8 +860,10 @@ export async function openAssistantTask(
841860
view.outputs = null
842861
view.selectedTaskTypeId = taskTypeId
843862

844-
scheduleTask('assistant', newTaskCustomId, taskTypeId, inputs)
863+
window.assistantSchedulingAbortController = new AbortController()
864+
scheduleTask('assistant', newTaskCustomId, taskTypeId, inputs, window.assistantSchedulingAbortController.signal)
845865
.then((response) => {
866+
cancelScheduling()
846867
const task = response.data?.ocs?.data?.task
847868
lastTask = task
848869
view.selectedTaskId = lastTask?.id
@@ -897,6 +918,7 @@ export async function openAssistantTask(
897918
})
898919
})
899920
.catch(error => {
921+
cancelScheduling()
900922
view.loading = false
901923
view.showSyncTaskRunning = false
902924
view.taskPosition = null
@@ -908,11 +930,13 @@ export async function openAssistantTask(
908930
syncSubmit(data.detail.inputs, data.detail.selectedTaskTypeId, task.identifier ?? '')
909931
})
910932
modalMountPoint.addEventListener('try-again', (data) => {
933+
cancelScheduling()
911934
const task = data.detail
912935
syncSubmit(task.input, task.type)
913936
})
914937
modalMountPoint.addEventListener('load-task', (data) => {
915938
const task = data.detail
939+
cancelScheduling()
916940
cancelTaskPolling()
917941
cancelTaskPositionPolling()
918942
view.showSyncTaskRunning = false
@@ -1016,6 +1040,7 @@ export async function openAssistantTask(
10161040
})
10171041
modalMountPoint.addEventListener('new-task', () => {
10181042
console.debug('[assistant] new task')
1043+
cancelScheduling()
10191044
cancelTaskPolling()
10201045
cancelTaskPositionPolling()
10211046
view.loading = false
@@ -1033,6 +1058,7 @@ export async function openAssistantTask(
10331058
})
10341059
})
10351060
modalMountPoint.addEventListener('cancel-task', () => {
1061+
cancelScheduling()
10361062
cancelTaskPolling()
10371063
cancelTaskPositionPolling()
10381064
setNotifyReady(lastTask.id, false)

0 commit comments

Comments
 (0)