Newer
Older
ultramine_bukkit / src / main / java / org / bukkit / craftbukkit / updater / AutoUpdater.java
@vlad20012 vlad20012 on 24 Feb 2017 4 KB initial
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();
	}
}