Added a built-in update checker. See http://wiki.bukkit.org/Bukkit.yml#auto-updater for new bukkit.yml options.

This commit is contained in:
Nathan Adams
2012-02-16 22:31:40 +00:00
parent 64264f61b8
commit 236cfed616
8 changed files with 317 additions and 0 deletions

View File

@@ -0,0 +1,107 @@
package org.bukkit.craftbukkit.updater;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
public class AutoUpdater {
public static final String WARN_CONSOLE = "warn-console";
public static final String WARN_OPERATORS = "warn-ops";
private final BukkitDLUpdaterService service;
private final List<String> onUpdate = new ArrayList<String>();
private final List<String> onBroken = new ArrayList<String>();
private final Logger log;
private final String channel;
private boolean enabled;
private ArtifactDetails current = null;
private ArtifactDetails latest = null;
public AutoUpdater(BukkitDLUpdaterService service, Logger log, String channel) {
this.service = service;
this.log = log;
this.channel = channel;
}
public String getChannel() {
return channel;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean isEnabled) {
this.enabled = isEnabled;
}
public List<String> getOnBroken() {
return onBroken;
}
public List<String> getOnUpdate() {
return onUpdate;
}
public boolean isUpdateAvailable() {
if ((latest == null) || (current == null) || (!isEnabled())) {
return false;
} else {
return latest.getCreated().after(current.getCreated());
}
}
public ArtifactDetails getCurrent() {
return current;
}
public ArtifactDetails getLatest() {
return latest;
}
public void check(final String currentSlug) {
if (!isEnabled()) return;
new Thread() {
@Override
public void run() {
current = service.getArtifact(currentSlug);
latest = service.getArtifact("latest-" + channel);
if (isUpdateAvailable()) {
if ((current.isBroken()) && (onBroken.contains(WARN_CONSOLE))) {
log.severe("----- Bukkit Auto Updater -----");
log.severe("Your version of CraftBukkit is known to be broken. It is strongly advised that you update to a more recent version ASAP.");
log.severe("Known issues with your version:");
for (String line : current.getBrokenReason().split("\n")) {
log.severe("> " + line);
}
log.severe("Newer version " + latest.getVersion() + " (build #" + latest.getBuildNumber() + ") was released on " + latest.getCreated() + ".");
log.severe("Details: " + latest.getHtmlUrl());
log.severe("Download: " + latest.getFile().getUrl());
log.severe("----- ------------------- -----");
} else if (onUpdate.contains(WARN_CONSOLE)) {
log.warning("----- Bukkit Auto Updater -----");
log.warning("Your version of CraftBukkit is out of date. Version " + latest.getVersion() + " (build #" + latest.getBuildNumber() + ") was released on " + latest.getCreated() + ".");
log.warning("Details: " + latest.getHtmlUrl());
log.warning("Download: " + latest.getFile().getUrl());
log.warning("----- ------------------- -----");
}
} else if ((current != null) && (current.isBroken()) && (onBroken.contains(WARN_CONSOLE))) {
log.severe("----- Bukkit Auto Updater -----");
log.severe("Your version of CraftBukkit is known to be broken. It is strongly advised that you update to a more recent version ASAP.");
log.severe("Known issues with your version:");
for (String line : current.getBrokenReason().split("\n")) {
log.severe("> " + line);
}
log.severe("Unfortunately, there is not yet a newer version suitable for your server. We would advise you wait an hour or two, or try out a dev build.");
log.severe("----- ------------------- -----");
}
}
}.start();
}
}