package com.autoupdater.gui.adapter.runnables; import static java.lang.Math.abs; import static java.lang.Thread.sleep; import static java.util.concurrent.TimeUnit.*; import java.util.Date; import com.autoupdater.gui.adapter.helpers.ClientOperations; public class PeridicalUpdateCheckRunnable implements Runnable { private final static int MINUTES_BETWEEN_EACH_UPDATE_CHECK = 10; private final ClientOperations clientOperations; public PeridicalUpdateCheckRunnable(ClientOperations clientOperations) { this.clientOperations = clientOperations; } @Override public void run() { clientOperations.checkUpdates(false); while (!clientOperations.isCheckingUpdatesPerodically()) { if (shouldCheckUpdates()) clientOperations.checkUpdates(false); try { waitOneMinute(); } catch (InterruptedException e) { break; } } } private boolean shouldCheckUpdates() { long lastCheck = MILLISECONDS .toMinutes(clientOperations.getLastUpdateCheckTime().getTime()); long now = MILLISECONDS.toMinutes(new Date().getTime()); return abs(lastCheck - now) >= MINUTES_BETWEEN_EACH_UPDATE_CHECK; } private void waitOneMinute() throws InterruptedException { sleep(MINUTES.toMillis(1)); } }