diff --git a/pom.xml b/pom.xml index 79cdcbe6..8ddbaf43 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,6 @@ ${maven.build.timestamp} yyyy-MM-dd HH:mm yugecin.opsudance.core.Entrypoint - false src @@ -148,7 +147,6 @@ ${mainClassName} - ${XDG} @@ -234,11 +232,6 @@ jna-platform 4.1.0 - - org.apache.maven - maven-artifact - 3.3.3 - org.apache.commons commons-compress diff --git a/src/itdelatrisu/opsu/downloads/Updater.java b/src/itdelatrisu/opsu/downloads/Updater.java index c8da26e5..5a199f82 100644 --- a/src/itdelatrisu/opsu/downloads/Updater.java +++ b/src/itdelatrisu/opsu/downloads/Updater.java @@ -32,10 +32,10 @@ import java.util.Date; import java.util.Locale; import java.util.Properties; -import org.apache.maven.artifact.versioning.DefaultArtifactVersion; import org.newdawn.slick.util.Log; import org.newdawn.slick.util.ResourceLoader; import yugecin.opsudance.core.Constants; +import yugecin.opsudance.utils.SimpleVersion; import static yugecin.opsudance.core.errorhandling.ErrorHandler.*; import static yugecin.opsudance.core.InstanceContainer.*; @@ -91,7 +91,7 @@ public class Updater { private Status status; /** The current and latest versions. */ - private DefaultArtifactVersion currentVersion, latestVersion; + private SimpleVersion currentVersion, latestVersion; /** The version information if the program was just updated. */ private String updatedFromVersion, updatedToVersion; @@ -106,7 +106,7 @@ public class Updater { if (currentVersion == null) { return "unknown version"; } - return currentVersion.getMajorVersion() + "." + currentVersion.getMinorVersion() + "." + currentVersion.getIncrementalVersion(); + return currentVersion.toString(); } public Updater() { @@ -181,13 +181,13 @@ public class Updater { * @param props the set of properties * @return the version, or null if not found */ - private DefaultArtifactVersion getVersion(Properties props) { - String version = props.getProperty("version"); - if (version == null || version.equals("${pom.version}")) { - status = Status.INTERNAL_ERROR; - return null; - } else - return new DefaultArtifactVersion(version); + private SimpleVersion getVersion(Properties props) { + final String version = props.getProperty("version"); + if (version != null && !version.equals("${pom.version}")) { + return SimpleVersion.parse(version); + } + this.status = Status.INTERNAL_ERROR; + return null; } /** @@ -195,7 +195,7 @@ public class Updater { * @throws IOException if an I/O exception occurs */ public void checkForUpdates() throws IOException { - if (status != Status.INITIAL || config.USE_XDG) + if (status != Status.INITIAL) return; status = Status.CHECKING; diff --git a/src/yugecin/opsudance/core/InstanceContainer.java b/src/yugecin/opsudance/core/InstanceContainer.java index 6d2913a7..33eb6d77 100644 --- a/src/yugecin/opsudance/core/InstanceContainer.java +++ b/src/yugecin/opsudance/core/InstanceContainer.java @@ -37,7 +37,6 @@ import yugecin.opsudance.render.GameObjectRenderer; import yugecin.opsudance.skinning.SkinService; import yugecin.opsudance.ui.BackButton; import yugecin.opsudance.ui.OptionsOverlay; -import yugecin.opsudance.utils.ManifestWrapper; import java.io.File; import java.io.IOException; @@ -88,8 +87,7 @@ public class InstanceContainer { env = new Environment(); JarFile jarfile = getJarfile(); - ManifestWrapper manifest = new ManifestWrapper(getJarManifest(jarfile)); - config = new Configuration(manifest); + config = new Configuration(); if (jarfile != null) { try { NativeLoader.loadNatives(jarfile); diff --git a/src/yugecin/opsudance/options/Configuration.java b/src/yugecin/opsudance/options/Configuration.java index 14ddbf23..c0c33a35 100644 --- a/src/yugecin/opsudance/options/Configuration.java +++ b/src/yugecin/opsudance/options/Configuration.java @@ -28,7 +28,6 @@ import org.lwjgl.BufferUtils; import org.lwjgl.opengl.Display; import org.lwjgl.opengl.GL11; import org.newdawn.slick.util.Log; -import yugecin.opsudance.utils.ManifestWrapper; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; @@ -41,13 +40,11 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import static itdelatrisu.opsu.ui.Colors.*; -import static yugecin.opsudance.core.errorhandling.ErrorHandler.*; import static yugecin.opsudance.options.Options.*; import static yugecin.opsudance.core.InstanceContainer.*; public class Configuration { - public final boolean USE_XDG; public final File CONFIG_DIR; public final File DATA_DIR; public final File CACHE_DIR; @@ -72,12 +69,10 @@ public class Configuration { public File replayImportDir; public File skinRootDir; - public Configuration(ManifestWrapper jarmanifest) { - USE_XDG = jarmanifest.valueOrDefault(null, "Use-XDG", "").equalsIgnoreCase("true"); - - CONFIG_DIR = getXDGBaseDir("XDG_CONFIG_HOME", ".config"); - DATA_DIR = getXDGBaseDir("XDG_DATA_HOME", ".local/share"); - CACHE_DIR = getXDGBaseDir("XDG_CACHE_HOME", ".cache"); + public Configuration() { + CONFIG_DIR = env.workingdir; + DATA_DIR = env.workingdir; + CACHE_DIR = env.workingdir; BEATMAP_DIR = new File(DATA_DIR, "Songs/"); SKIN_ROOT_DIR = new File(DATA_DIR, "Skins/"); @@ -174,39 +169,6 @@ public class Configuration { return loadDirectory(dir, defaultDir, kind); } - /** - * Returns the directory based on the XDG base directory specification for - * Unix-like operating systems, only if the "XDG" flag is enabled. - * @param envvar the environment variable to check (XDG_*_*) - * @param fallback the fallback directory relative to ~home - * @return the XDG base directory, or the working directory if unavailable - */ - private File getXDGBaseDir(String envvar, String fallback) { - if (!USE_XDG) { - return env.workingdir; - } - - String OS = System.getProperty("os.name").toLowerCase(); - if (OS.indexOf("nix") == -1 && OS.indexOf("nux") == -1 && OS.indexOf("aix") == -1){ - return env.workingdir; - } - - String rootPath = System.getenv(envvar); - if (rootPath == null) { - String home = System.getProperty("user.home"); - if (home == null) { - return new File("./"); - } - rootPath = String.format("%s/%s", home, fallback); - } - File dir = new File(rootPath, "opsu"); - if (!dir.isDirectory() && !dir.mkdir()) { - explode(String.format("Failed to create configuration folder at '%s/opsu'.", rootPath), - new Exception("empty"), PREVENT_REPORT); - } - return dir; - } - /** * @author http://wiki.lwjgl.org/index.php?title=Taking_Screen_Shots */ diff --git a/src/yugecin/opsudance/utils/ManifestWrapper.java b/src/yugecin/opsudance/utils/ManifestWrapper.java deleted file mode 100644 index b02804c8..00000000 --- a/src/yugecin/opsudance/utils/ManifestWrapper.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * opsu!dance - fork of opsu! with cursordance auto - * Copyright (C) 2017 yugecin - * - * opsu!dance is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * opsu!dance is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with opsu!dance. If not, see . - */ -package yugecin.opsudance.utils; - -import yugecin.opsudance.core.NotNull; -import yugecin.opsudance.core.Nullable; - -import java.util.jar.Attributes; -import java.util.jar.Manifest; - -public class ManifestWrapper { - - @Nullable - public final Manifest manifest; - - public ManifestWrapper(@Nullable Manifest manifest) { - this.manifest = manifest; - } - - /** - * @param attribute attribute in jarfile or null for default attributes - */ - public String valueOrDefault(@Nullable String attribute, @NotNull String key, @Nullable String dfault) { - if (manifest == null) { - return dfault; - } - Attributes attributes = - attribute == null ? manifest.getMainAttributes() : manifest.getAttributes(attribute); - if (attributes == null) { - return dfault; - } - String val = attributes.getValue(key); - if (val == null) { - return dfault; - } - return val; - } - -} diff --git a/src/yugecin/opsudance/utils/SimpleVersion.java b/src/yugecin/opsudance/utils/SimpleVersion.java new file mode 100644 index 00000000..e11a2a33 --- /dev/null +++ b/src/yugecin/opsudance/utils/SimpleVersion.java @@ -0,0 +1,67 @@ +/* + * opsu!dance - fork of opsu! with cursordance auto + * Copyright (C) 2018 yugecin + * + * opsu!dance is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opsu!dance is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with opsu!dance. If not, see . + */ +package yugecin.opsudance.utils; + +import itdelatrisu.opsu.Utils; +import yugecin.opsudance.core.NotNull; +import yugecin.opsudance.core.Nullable; + +public class SimpleVersion implements Comparable { + + @Nullable + public static SimpleVersion parse(@NotNull String version) { + int dashpos = version.indexOf('-'); + if (dashpos != -1) { + version = version.substring(0, dashpos); + } + final String[] parts = version.split("\\."); + if (parts.length < 3) { + return null; + } + try { + return new SimpleVersion( + Integer.parseInt(parts[0]), + Integer.parseInt(parts[1]), + Integer.parseInt(parts[2]) + ); + } catch (Exception e) { + return null; + } + } + + final int major, minor, incremental; + + public SimpleVersion(int major, int minor, int incremental) { + this.major = major; + this.minor = minor; + this.incremental = incremental; + } + + @Override + public int compareTo(@NotNull SimpleVersion o) { + return + Utils.clamp(Integer.compare(major, o.major), -1, 1) * 100 + + Utils.clamp(Integer.compare(minor, o.minor), -1, 1) * 10 + + Utils.clamp(Integer.compare(incremental, o.incremental), -1, 1); + } + + @Override + public String toString() { + return "" + major + '.' + minor + '.' + incremental; + } +}