@@ -18,6 +18,13 @@ actor NCNetworkingProcess {
1818 private let networking = NCNetworking . shared
1919
2020 private var currentTask : Task < Void , Never > ?
21+
22+ @MainActor
23+ private var currentUploadTask : Task < ( account: String , file: NKFile ? , error: NKError ) , Never > ?
24+
25+ @MainActor
26+ private var currentUploadRequest : UploadRequest ?
27+
2128 private var enableControllingScreenAwake = true
2229 private var currentAccount = " "
2330 private var inWaitingCount : Int = 0
@@ -54,6 +61,8 @@ actor NCNetworkingProcess {
5461
5562 Task {
5663 await self . stopTimer ( )
64+ await self . cancelCurrentTaskOnBackground ( )
65+ await self . cancelCurrentUpload ( )
5766 }
5867 }
5968
@@ -146,6 +155,19 @@ actor NCNetworkingProcess {
146155 timer = nil
147156 }
148157
158+ private func cancelCurrentTaskOnBackground( ) {
159+ currentTask? . cancel ( )
160+ currentTask = nil
161+ }
162+
163+ @MainActor
164+ private func cancelCurrentUpload( ) async {
165+ self . currentUploadTask? . cancel ( )
166+ self . currentUploadRequest? . cancel ( )
167+ self . currentUploadTask = nil
168+ self . currentUploadRequest = nil
169+ }
170+
149171 private func handleTimerTick( ) async {
150172 if currentTask != nil {
151173 print ( " [NKLOG] current task is running " )
@@ -157,6 +179,10 @@ actor NCNetworkingProcess {
157179 currentTask = nil
158180 }
159181
182+ if Task . isCancelled {
183+ return
184+ }
185+
160186 guard networking. isOnline,
161187 !currentAccount. isEmpty,
162188 networking. noServerErrorAccount ( currentAccount)
@@ -207,6 +233,10 @@ actor NCNetworkingProcess {
207233 ScreenAwakeManager . shared. mode = resultsScreenAwake. isEmpty && !hasSyncTask ? . off : NCPreferences ( ) . screenAwakeMode
208234 }
209235
236+ if Task . isCancelled {
237+ return
238+ }
239+
210240 await runMetadataPipelineAsync ( metadatas: metadatas)
211241
212242 // TODO: Check temperature
@@ -358,29 +388,28 @@ actor NCNetworkingProcess {
358388 // UPLOAD E2EE
359389 //
360390 if metadata. isDirectoryE2EE {
361- var currentUploadTask : Task < ( account: String , file: NKFile ? , error: NKError ) , Never > ?
362- var request : UploadRequest ?
363391 let controller = await getController ( account: metadata. account, sceneIdentifier: metadata. sceneIdentifier)
364392 let scene = await SceneManager . shared. getWindow ( sceneIdentifier: metadata. sceneIdentifier) ? . windowScene
365393
366394 let token = await showUploadBanner ( scene: scene,
367395 blocksTouches: true ,
368396 onButtonTap: {
369- if let currentUploadTask {
370- currentUploadTask. cancel ( )
371- }
372- if let request {
373- request. cancel ( )
397+ Task {
398+ await self . cancelCurrentUpload ( )
374399 }
375400 } )
376401
377402 await NCNetworkingE2EEUpload ( ) . upload ( metadata: metadata,
378403 controller: controller,
379404 stageBanner: . button,
380405 tokenBanner: token) { uploadRequest in
381- request = uploadRequest
406+ Task { @MainActor in
407+ self . currentUploadRequest = uploadRequest
408+ }
382409 } currentUploadTask: { task in
383- currentUploadTask = task
410+ Task { @MainActor in
411+ self . currentUploadTask = task
412+ }
384413 }
385414
386415 // wait dismiss banner before open another (loop)
@@ -405,7 +434,6 @@ actor NCNetworkingProcess {
405434
406435 @MainActor
407436 func uploadChunk( metadata: tableMetadata ) async {
408- var currentUploadTask : Task < ( account: String , file: NKFile ? , error: NKError ) , Never > ?
409437 var tokenBanner : Int ?
410438 let scene = SceneManager . shared. getWindow ( sceneIdentifier: metadata. sceneIdentifier) ? . windowScene
411439
@@ -416,9 +444,8 @@ actor NCNetworkingProcess {
416444 stage: . button,
417445 allowMinimizeOnTap: true ,
418446 onButtonTap: {
419- if let currentUploadTask {
420- currentUploadTask. cancel ( )
421- } else {
447+ Task {
448+ await self . cancelCurrentUpload ( )
422449 LucidBanner . shared. dismiss ( )
423450 }
424451 } )
0 commit comments