From c127735ec33ab4e6fd71f4bb84acc5c30d5e8d76 Mon Sep 17 00:00:00 2001 From: Lukas Korba Date: Thu, 11 May 2023 16:50:03 +0200 Subject: [PATCH] [#1048] Implement ScanDownloadedButUnscannedAction - scan downloaded but unscanned blocks --- .../ScanDownloadedButUnscannedAction.swift | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/Sources/ZcashLightClientKit/Block/Actions/ScanDownloadedButUnscannedAction.swift b/Sources/ZcashLightClientKit/Block/Actions/ScanDownloadedButUnscannedAction.swift index 352235a3..1601a2c2 100644 --- a/Sources/ZcashLightClientKit/Block/Actions/ScanDownloadedButUnscannedAction.swift +++ b/Sources/ZcashLightClientKit/Block/Actions/ScanDownloadedButUnscannedAction.swift @@ -8,25 +8,31 @@ import Foundation class ScanDownloadedButUnscannedAction { - init(container: DIContainer) { } + let logger: Logger + let blockScanner: BlockScanner + + init(container: DIContainer) { + logger = container.resolve(Logger.self) + blockScanner = container.resolve(BlockScanner.self) + } } extension ScanDownloadedButUnscannedAction: Action { var removeBlocksCacheWhenFailed: Bool { false } func run(with context: ActionContext, didUpdate: @escaping (CompactBlockProcessorNG.Event) async -> Void) async throws -> ActionContext { -// if let range = ranges.downloadedButUnscannedRange { -// logger.debug("Starting scan with downloaded but not scanned blocks with range: \(range.lowerBound)...\(range.upperBound)") -// try await blockScanner.scanBlocks(at: range, totalProgressRange: totalProgressRange) { [weak self] lastScannedHeight in -// let progress = BlockProgress( -// startHeight: totalProgressRange.lowerBound, -// targetHeight: totalProgressRange.upperBound, -// progressHeight: lastScannedHeight -// ) -// await self?.notifyProgress(.syncing(progress)) -// } -// } - + if let range = await context.syncRanges.downloadedButUnscannedRange { + logger.debug("Starting scan with downloaded but not scanned blocks with range: \(range.lowerBound)...\(range.upperBound)") + let totalProgressRange = await context.totalProgressRange + try await blockScanner.scanBlocks(at: range, totalProgressRange: totalProgressRange) { lastScannedHeight in + let progress = BlockProgress( + startHeight: totalProgressRange.lowerBound, + targetHeight: totalProgressRange.upperBound, + progressHeight: lastScannedHeight + ) + await didUpdate(.progressUpdated(.syncing(progress))) + } + } await context.update(state: .download) return context }