[#1048] Implement ScanDownloadedButUnscannedAction

- scan downloaded but unscanned blocks
This commit is contained in:
Lukas Korba 2023-05-11 16:50:03 +02:00 committed by Michal Fousek
parent 3193d025b4
commit c127735ec3
1 changed files with 19 additions and 13 deletions

View File

@ -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
}