parent
d068851af7
commit
97f3699436
|
@ -8,7 +8,37 @@
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
class ChecksBeforeSyncAction {
|
class ChecksBeforeSyncAction {
|
||||||
init(container: DIContainer) { }
|
let internalSyncProgress: InternalSyncProgress
|
||||||
|
let storage: CompactBlockRepository
|
||||||
|
init(container: DIContainer) {
|
||||||
|
internalSyncProgress = container.resolve(InternalSyncProgress.self)
|
||||||
|
storage = container.resolve(CompactBlockRepository.self)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Tells whether the state represented by these sync ranges evidence some sort of
|
||||||
|
/// outdated state on the cache or the internal state of the compact block processor.
|
||||||
|
///
|
||||||
|
/// - Note: this can mean that the processor has synced over the height that the internal
|
||||||
|
/// state knows of because the sync process was interrupted before it could reflect
|
||||||
|
/// it in the internal state storage. This could happen because of many factors, the
|
||||||
|
/// most feasible being OS shutting down a background process or the user abruptly
|
||||||
|
/// exiting the app.
|
||||||
|
/// - Returns: an ``Optional<BlockHeight>`` where Some represents what's the
|
||||||
|
/// new state the internal state should reflect and indicating that the cache should be cleared
|
||||||
|
/// as well. c`None` means that no action is required.
|
||||||
|
func shouldClearBlockCacheAndUpdateInternalState(syncRange: SyncRanges) -> BlockHeight? {
|
||||||
|
guard syncRange.downloadedButUnscannedRange != nil else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
guard
|
||||||
|
let latestScannedHeight = syncRange.latestScannedHeight,
|
||||||
|
let latestDownloadedHeight = syncRange.latestDownloadedBlockHeight,
|
||||||
|
latestScannedHeight > latestDownloadedHeight
|
||||||
|
else { return nil }
|
||||||
|
|
||||||
|
return latestScannedHeight
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension ChecksBeforeSyncAction: Action {
|
extension ChecksBeforeSyncAction: Action {
|
||||||
|
@ -19,12 +49,12 @@ extension ChecksBeforeSyncAction: Action {
|
||||||
// this checks if there was a sync in progress that was
|
// this checks if there was a sync in progress that was
|
||||||
// interrupted abruptly and cache was not able to be cleared
|
// interrupted abruptly and cache was not able to be cleared
|
||||||
// properly and internal state set to the appropriate value
|
// properly and internal state set to the appropriate value
|
||||||
// if let newLatestDownloadedHeight = ranges.shouldClearBlockCacheAndUpdateInternalState() {
|
if let newLatestDownloadedHeight = shouldClearBlockCacheAndUpdateInternalState(syncRange: await context.syncRanges) {
|
||||||
// try await storage.clear()
|
try await storage.clear()
|
||||||
// await internalSyncProgress.set(newLatestDownloadedHeight, .latestDownloadedBlockHeight)
|
await internalSyncProgress.set(newLatestDownloadedHeight, .latestDownloadedBlockHeight)
|
||||||
// } else {
|
} else {
|
||||||
// try await storage.create()
|
try await storage.create()
|
||||||
// }
|
}
|
||||||
|
|
||||||
await context.update(state: .fetchUTXO)
|
await context.update(state: .fetchUTXO)
|
||||||
return context
|
return context
|
||||||
|
|
Loading…
Reference in New Issue