@@ -754,7 +754,7 @@ class SourceProcessor(
754754 log.debug(" Processor:'{}' {} filtered item:{}" , name, filterBy::class .simpleName, sourceItem)
755755 return ProcessingContent (name, itemContent).copy(status = FILTERED )
756756 }
757-
757+ val itemContext = ItemContext ()
758758 val mover = this .selectUpdateStatusMover()
759759 var replaceFiles: List <CoreFileContent > = emptyList()
760760 processLock.lock {
@@ -771,16 +771,26 @@ class SourceProcessor(
771771 secondaryFileMover.preoccupiedTargetPath(sourceItem, targetPaths)
772772 replaceFiles = identifyFilesToReplace(itemContent)
773773 context.addItemPaths(itemContent, targetPaths)
774- }
775774
776- val (shouldDownload, contentStatus) = probeContentStatus(itemContent, replaceFiles)
777- log.trace(
778- " Processor:'{}' item:{}, shouldDownload: {}, contentStatus:{}" ,
779- name, sourceItem, shouldDownload, contentStatus
780- )
781- val processingContent = postProcessingContent(
782- ProcessingContent (name, itemContent).copy(status = contentStatus)
783- )
775+ val (shouldDownload, contentStatus) = probeContentStatus(itemContent, replaceFiles)
776+ itemContext.shouldDownload = shouldDownload
777+ itemContext.status = contentStatus
778+ if (context.isItemCanceled(sourceItem)) {
779+ itemContext.status = CANCELLED
780+ }
781+ log.trace(
782+ " Processor:'{}' item:{}, shouldDownload: {}, contentStatus:{}" ,
783+ name, sourceItem, shouldDownload, contentStatus
784+ )
785+ val processingContent = postProcessingContent(
786+ ProcessingContent (name, itemContent).copy(status = itemContext.status)
787+ )
788+ itemContext.content = processingContent
789+ }
790+ val shouldDownload = itemContext.shouldDownload
791+ val contentStatus = itemContext.status
792+ val processingContent = itemContext.content
793+ checkNotNull(processingContent)
784794
785795 if (shouldDownload) {
786796 val success = doDownload(processingContent, replaceFiles)
@@ -860,6 +870,7 @@ class SourceProcessor(
860870 content.fileContents.filter { it.targetPath() == existTargetPath }
861871 .onEach { it.status = FileContentStatus .REPLACED }
862872 cancelItem(content.sourceItem, fileContent, discardedItems)
873+ context.cancelItem(content.sourceItem)
863874 }
864875 }
865876 }
@@ -966,6 +977,12 @@ class SourceProcessor(
966977 }
967978 }
968979
980+ private data class ItemContext (
981+ var shouldDownload : Boolean = false ,
982+ var status : ProcessingContent .Status = NO_FILES ,
983+ var content : ProcessingContent ? = null
984+ )
985+
969986 private fun invokeListeners (
970987 mode : ListenerMode = ListenerMode .EACH ,
971988 inProcess : Boolean = true,
0 commit comments