package com.dgex.offspring.application.ui.statusbar; import nxt.Block; import nxt.util.Convert; import org.apache.log4j.Logger; public class BlockchainDownloadMonitor { private static Logger logger = Logger .getLogger(BlockchainDownloadMonitor.class); private Block previousBlock = null; private ProgressIndicator progress = null; private long totalWork = 0; private long sumWorked = 0; private final long minimumPeriod = 1000 * 60 * 2; // 2 minutes public void setProgress(ProgressIndicator progress) { this.progress = progress; if (totalWork > sumWorked) { beginTask((int) totalWork); worked((int) sumWorked); } else { done(); } } public void beginTask(int max) { totalWork = max; sumWorked = 0; if (progress != null && !progress.isDisposed()) progress.beginTask(max); } public void worked(int worked) { sumWorked += worked; if (progress != null && !progress.isDisposed()) progress.worked(worked); } public void done() { totalWork = sumWorked = 0; if (progress != null && !progress.isDisposed()) progress.done(); } public boolean isActive() { return totalWork != sumWorked; } public long remainingMilliseconds() { return totalWork - sumWorked; } public void blockPushed(Block block) { if (isActive()) { long worked = calculateWorked(block); worked((int) worked); if ((totalWork - sumWorked) < minimumPeriod) { done(); } else { previousBlock = block; } } else { sumWorked = 0; totalWork = Convert.getEpochTime() - block.getTimestamp(); if (totalWork > minimumPeriod) { beginTask((int) totalWork); previousBlock = block; } else { totalWork = sumWorked = 0; } } } private long calculateWorked(Block block) { long previous = previousBlock == null ? (block.getTimestamp() - 1) : previousBlock.getTimestamp(); return block.getTimestamp() - previous; } }