package net.buycraft.plugin.sponge.util;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.buycraft.plugin.data.responses.Version;
import net.buycraft.plugin.shared.util.VersionUtil;
import net.buycraft.plugin.sponge.BuycraftPlugin;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.network.ClientConnectionEvent;
import org.spongepowered.api.text.Text;
import org.spongepowered.api.text.action.TextActions;
import org.spongepowered.api.text.format.TextColors;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import static net.buycraft.plugin.shared.util.VersionUtil.isVersionGreater;
@RequiredArgsConstructor
public class VersionCheck {
private final BuycraftPlugin plugin;
private final String pluginVersion;
@Getter
private Version lastKnownVersion;
@Getter
private boolean upToDate = true;
public void verify() throws IOException {
if (pluginVersion.endsWith("-SNAPSHOT")) {
return; // SNAPSHOT versions ignore updates
}
lastKnownVersion = VersionUtil.getVersion(plugin.getHttpClient(), "sponge");
if (lastKnownVersion == null) {
return;
}
// Compare versions
String latestVersionString = lastKnownVersion.getVersion();
if (!latestVersionString.equals(pluginVersion)) {
upToDate = !isVersionGreater(pluginVersion, latestVersionString);
if (!upToDate) {
plugin.getLogger().info(plugin.getI18n().get("update_available", lastKnownVersion.getVersion()));
}
}
}
@Listener
public void onPlayerJoinEvent(ClientConnectionEvent.Join event) {
if (event.getTargetEntity().hasPermission("buycraft.admin") && !upToDate) {
plugin.getPlatform().executeAsyncLater(() -> {
try {
event.getTargetEntity().sendMessage(
Text.builder()
.append(Text.of(plugin.getI18n().get("update_available", lastKnownVersion.getVersion())))
.onClick(TextActions.openUrl(new URL("https://server.buycraft.net")))
.color(TextColors.YELLOW)
.build());
} catch (MalformedURLException e) {
throw new AssertionError(e); // seriously?
}
}, 3, TimeUnit.SECONDS);
}
}
}