128 lines
5.7 KiB
Java
128 lines
5.7 KiB
Java
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;
|
|
private boolean suggestChannels = true;
|
|
|
|
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 boolean shouldSuggestChannels() {
|
|
return suggestChannels;
|
|
}
|
|
|
|
public void setSuggestChannels(boolean suggestChannels) {
|
|
this.suggestChannels = suggestChannels;
|
|
}
|
|
|
|
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, "information about this CraftBukkit version; perhaps you are running a custom one?");
|
|
latest = service.getArtifact("latest-" + channel, "latest artifact information");
|
|
|
|
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("----- ------------------- -----");
|
|
} else if ((current != null) && (shouldSuggestChannels())) {
|
|
ArtifactDetails.ChannelDetails prefChan = service.getChannel(channel, "preferred channel details");
|
|
|
|
if ((prefChan != null) && (current.getChannel().getPriority() < prefChan.getPriority())) {
|
|
log.info("----- Bukkit Auto Updater -----");
|
|
log.info("It appears that you're running a " + current.getChannel().getName() + ", when you've specified in bukkit.yml that you prefer to run " + prefChan.getName() + "s.");
|
|
log.info("If you would like to be kept informed about new " + current.getChannel().getName() + " releases, it is recommended that you change 'preferred-channel' in your bukkit.yml to '" + current.getChannel().getSlug() + "'.");
|
|
log.info("With that set, you will be told whenever a new version is available for download, so that you can always keep up to date and secure with the latest fixes.");
|
|
log.info("If you would like to disable this warning, simply set 'suggest-channels' to false in bukkit.yml.");
|
|
log.info("----- ------------------- -----");
|
|
}
|
|
}
|
|
}
|
|
}.start();
|
|
}
|
|
}
|