/*
- * Sone - UpdateChecker.java - Copyright © 2011–2015 David Roden
+ * Sone - UpdateChecker.java - Copyright © 2011–2019 David Roden
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
import java.util.logging.Level;
import java.util.logging.Logger;
-import net.pterodactylus.sone.core.FreenetInterface.Fetched;
+import javax.inject.Singleton;
+
import net.pterodactylus.sone.core.event.UpdateFoundEvent;
+import net.pterodactylus.sone.main.PluginHomepage;
import net.pterodactylus.sone.main.SonePlugin;
import net.pterodactylus.util.io.Closer;
import net.pterodactylus.util.version.Version;
/**
* Watches the official Sone homepage for new releases.
- *
- * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
*/
+@Singleton
public class UpdateChecker {
/** The logger. */
private FreenetURI currentUri;
/** The latest known edition. */
- private long latestEdition;
+ private long latestEdition = SonePlugin.getLatestEdition();
/** The current latest known version. */
- private Version currentLatestVersion = SonePlugin.VERSION;
+ private Version currentLatestVersion;
+ private final Version currentRunningVersion;
/** The release date of the latest version. */
private long latestVersionDate;
+ private final PluginHomepage pluginHomepage;
+
/**
* Creates a new update checker.
*
* The freenet interface to use
*/
@Inject
- public UpdateChecker(EventBus eventBus, FreenetInterface freenetInterface) {
+ public UpdateChecker(EventBus eventBus, FreenetInterface freenetInterface, Version currentVersion, PluginHomepage pluginHomepage) {
this.eventBus = eventBus;
this.freenetInterface = freenetInterface;
+ this.currentRunningVersion = currentVersion;
+ this.currentLatestVersion = currentVersion;
+ this.pluginHomepage = pluginHomepage;
}
//
* @return {@code true} if a new version was found
*/
public boolean hasLatestVersion() {
- return currentLatestVersion.compareTo(SonePlugin.VERSION) > 0;
+ return currentLatestVersion.compareTo(currentRunningVersion) > 0;
}
/**
*/
public void start() {
try {
- currentUri = new FreenetURI(SonePlugin.getHomepage());
+ currentUri = new FreenetURI(pluginHomepage.getHomepage());
} catch (MalformedURLException mue1) {
/* this can not really happen unless I screw up. */
logger.log(Level.SEVERE, "Sone Homepage URI invalid!", mue1);
if (version.compareTo(currentLatestVersion) > 0) {
currentLatestVersion = version;
latestVersionDate = releaseTime;
- logger.log(Level.INFO, String.format("Found new version: %s (%tc)", version, new Date(releaseTime)));
- eventBus.post(new UpdateFoundEvent(version, releaseTime, edition));
+ boolean disruptive = disruptiveVersionBetweenCurrentAndFound(properties);
+ logger.log(Level.INFO, String.format("Found new version: %s (%tc%s)", version, new Date(releaseTime), disruptive ? ", disruptive" : ""));
+ eventBus.post(new UpdateFoundEvent(version, releaseTime, edition, disruptive));
+ }
+ }
+
+ private boolean disruptiveVersionBetweenCurrentAndFound(Properties properties) {
+ for (String key : properties.stringPropertyNames()) {
+ if (key.startsWith("DisruptiveVersion/")) {
+ Version disruptiveVersion = Version.parse(key.substring("DisruptiveVersion/".length()));
+ if (disruptiveVersion.compareTo(currentRunningVersion) > 0) {
+ return true;
+ }
+ }
}
+ return false;
}
}