X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fde%2Ftodesbaum%2Fjsite%2Fgui%2FUpdateChecker.java;h=44be635ae9ea5c7595192ee0b7f3d7f3cffa5a56;hb=a7d90795bb3f97633bdeb0ccc5b060f39f14eb54;hp=d151ed05bad9eebc51123dfccab36043665648da;hpb=2618eb9b28ce1c22c8c86da510e4b1c7b980e0b1;p=jSite.git
diff --git a/src/de/todesbaum/jsite/gui/UpdateChecker.java b/src/de/todesbaum/jsite/gui/UpdateChecker.java
index d151ed0..44be635 100644
--- a/src/de/todesbaum/jsite/gui/UpdateChecker.java
+++ b/src/de/todesbaum/jsite/gui/UpdateChecker.java
@@ -25,8 +25,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
-import javax.swing.JFrame;
-
import de.todesbaum.jsite.application.Freenet7Interface;
import de.todesbaum.jsite.main.Main;
import de.todesbaum.jsite.main.Version;
@@ -70,9 +68,6 @@ public class UpdateChecker implements Runnable {
/** Last found version. */
private Version lastVersion = Main.getVersion();
- /** The parent of the dialog. */
- private final JFrame parent;
-
/** The freenet interface. */
private final Freenet7Interface freenetInterface;
@@ -80,13 +75,10 @@ public class UpdateChecker implements Runnable {
* Creates a new update checker that uses the given frame as its parent and
* communications via the given freenet interface.
*
- * @param parent
- * The parent of the dialog
* @param freenetInterface
* The freenet interface
*/
- public UpdateChecker(JFrame parent, Freenet7Interface freenetInterface) {
- this.parent = parent;
+ public UpdateChecker(Freenet7Interface freenetInterface) {
this.freenetInterface = freenetInterface;
}
@@ -94,14 +86,34 @@ public class UpdateChecker implements Runnable {
// EVENT LISTENER MANAGEMENT
//
+ /**
+ * Adds an update listener to the list of registered listeners.
+ *
+ * @param updateListener
+ * The update listener to add
+ */
public void addUpdateListener(UpdateListener updateListener) {
updateListeners.add(updateListener);
}
+ /**
+ * Removes the given listener from the list of registered listeners.
+ *
+ * @param updateListener
+ * The update listener to remove
+ */
public void removeUpdateListener(UpdateListener updateListener) {
updateListeners.remove(updateListener);
}
+ /**
+ * Notifies all listeners that a version was found.
+ *
+ * @param foundVersion
+ * The version that was found
+ * @param versionTimestamp
+ * The timestamp of the version
+ */
protected void fireUpdateFound(Version foundVersion, long versionTimestamp) {
for (UpdateListener updateListener : updateListeners) {
updateListener.foundUpdateData(foundVersion, versionTimestamp);
@@ -109,13 +121,32 @@ public class UpdateChecker implements Runnable {
}
//
+ // ACCESSORS
+ //
+
+ /**
+ * Returns the latest version that was found.
+ *
+ * @return The latest found version
+ */
+ public Version getLatestVersion() {
+ return lastVersion;
+ }
+
+ //
// ACTIONS
//
+ /**
+ * Starts the update checker.
+ */
public void start() {
new Thread(this).start();
}
+ /**
+ * Stops the update checker.
+ */
public void stop() {
synchronized (syncObject) {
shouldStop = true;
@@ -127,12 +158,25 @@ public class UpdateChecker implements Runnable {
// PRIVATE METHODS
//
+ /**
+ * Returns whether the update checker should stop.
+ *
+ * @return true
if the update checker should stop,
+ * false
otherwise
+ */
private boolean shouldStop() {
synchronized (syncObject) {
return shouldStop;
}
}
+ /**
+ * Creates the URI of the update file for the given edition.
+ *
+ * @param edition
+ * The edition number
+ * @return The URI for the update file for the given edition
+ */
private String constructUpdateKey(int edition) {
return UPDATE_KEY + "/jSite/" + edition + "/jSite.properties";
}
@@ -141,6 +185,9 @@ public class UpdateChecker implements Runnable {
// INTERFACE Runnable
//
+ /**
+ * {@inheritDoc}
+ */
public void run() {
Connection connection = freenetInterface.getConnection("jSite-" + ++counter + "-UpdateChecker");
try {
@@ -149,10 +196,13 @@ public class UpdateChecker implements Runnable {
e1.printStackTrace();
}
Client client = new Client(connection);
+ boolean checkNow = false;
+ int currentEdition = lastUpdateEdition;
while (!shouldStop()) {
- System.out.println("Trying " + constructUpdateKey(lastUpdateEdition));
+ checkNow = false;
+ System.out.println("Trying " + constructUpdateKey(currentEdition));
ClientGet clientGet = new ClientGet("get-update-key");
- clientGet.setUri(constructUpdateKey(lastUpdateEdition));
+ clientGet.setUri(constructUpdateKey(currentEdition));
clientGet.setPersistence(Persistence.CONNECTION);
clientGet.setReturnType(ReturnType.direct);
clientGet.setVerbosity(Verbosity.ALL);
@@ -173,7 +223,9 @@ public class UpdateChecker implements Runnable {
}
if (editionNumber != -1) {
System.out.println("Found new edition " + editionNumber);
+ currentEdition = editionNumber;
lastUpdateEdition = editionNumber;
+ checkNow = true;
break;
}
}
@@ -193,17 +245,19 @@ public class UpdateChecker implements Runnable {
if (foundVersionString != null) {
Version foundVersion = Version.parse(foundVersionString);
if (foundVersion != null) {
- if (foundVersion.compareTo(Main.getVersion()) > 0) {
- lastVersion = foundVersion;
- String versionTimestampString = properties.getProperty("jSite.Date");
- long versionTimestamp = -1;
- try {
- versionTimestamp = Long.parseLong(versionTimestampString);
- } catch (NumberFormatException nfe1) {
- /* ignore. */
- }
- fireUpdateFound(foundVersion, versionTimestamp);
+ lastVersion = foundVersion;
+ String versionTimestampString = properties.getProperty("jSite.Date");
+ System.out.println(versionTimestampString);
+ long versionTimestamp = -1;
+ try {
+ versionTimestamp = Long.parseLong(versionTimestampString);
+ } catch (NumberFormatException nfe1) {
+ /* ignore. */
}
+ fireUpdateFound(foundVersion, versionTimestamp);
+ stop = true;
+ checkNow = true;
+ ++currentEdition;
}
}
}
@@ -212,6 +266,16 @@ public class UpdateChecker implements Runnable {
System.out.println("Got IOException: " + e.getMessage());
e.printStackTrace();
}
+ if (!checkNow && !shouldStop()) {
+ synchronized (syncObject) {
+ try {
+ syncObject.wait(15 * 60 * 1000);
+ } catch (InterruptedException ie1) {
+ /* ignore. */
+ }
+ }
+ }
}
}
+
}