@@ -16,6 +16,7 @@ window.assistantPollTaskId = null
1616window . assistantPollPositionTimerId = null
1717window . assistantPollPositionTaskId = null
1818window . assistantPollPositionAbortController = null
19+ window . assistantSchedulingAbortController = null
1920
2021listen ( '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+
561574export 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
626641export 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