diff --git a/dependencies.gradle b/dependencies.gradle
index 212ef992..f02355d0 100644
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@ -21,6 +21,7 @@ ext.versions = [
retrofit : "2.1.0",
jackson : "2.9.0",
okhttp : "3.9.0",
+ semver : "1.0.0",
junit : "4.12",
mockito : "2.12.0",
@@ -50,6 +51,7 @@ ext.other = [
jacksonConverter : "com.squareup.retrofit2:converter-jackson:$versions.retrofit",
jacksonKotlin : "com.fasterxml.jackson.module:jackson-module-kotlin:$versions.jackson",
okhttpLogging : "com.squareup.okhttp3:logging-interceptor:$versions.okhttp",
+ semver : "net.swiftzer.semver:semver:$versions.semver",
]
ext.testing = [
diff --git a/ultrasonic/build.gradle b/ultrasonic/build.gradle
index 0ba0a74b..db9c3557 100644
--- a/ultrasonic/build.gradle
+++ b/ultrasonic/build.gradle
@@ -54,6 +54,8 @@ dependencies {
implementation other.kotlinStdlib
+ implementation other.semver
+
testImplementation other.kotlinReflect
testImplementation testing.junit
testImplementation testing.kotlinJunit
diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/domain/Version.java b/ultrasonic/src/main/java/org/moire/ultrasonic/domain/Version.java
deleted file mode 100644
index aedf40ea..00000000
--- a/ultrasonic/src/main/java/org/moire/ultrasonic/domain/Version.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- This file is part of Subsonic.
-
- Subsonic 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.
-
- Subsonic 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 Subsonic. If not, see .
-
- Copyright 2009 (C) Sindre Mehus
- */
-package org.moire.ultrasonic.domain;
-
-import java.util.regex.Pattern;
-
-/**
- * Represents the version number of the Subsonic Android app.
- *
- * @author Sindre Mehus
- * @version $Revision: 1.3 $ $Date: 2006/01/20 21:25:16 $
- */
-public class Version implements Comparable
-{
- private static final Pattern COMPILE = Pattern.compile("\\.");
- private int major;
- private int minor;
- private int beta;
- private int bugFix;
-
- /**
- * Creates a new version instance by parsing the given string.
- *
- * @param version A string of the format "1.27", "1.27.2" or "1.27.beta3".
- */
- public Version(CharSequence version)
- {
- String[] s = COMPILE.split(version);
- major = Integer.valueOf(s[0]);
- minor = Integer.valueOf(s[1]);
-
- if (s.length > 2)
- {
- if (s[2].contains("beta"))
- {
- beta = Integer.valueOf(s[2].replace("beta", ""));
- }
- else
- {
- bugFix = Integer.valueOf(s[2]);
- }
- }
- }
-
- public int getMajor()
- {
- return major;
- }
-
- public int getMinor()
- {
- return minor;
- }
-
- /**
- * Return whether this object is equal to another.
- *
- * @param o Object to compare to.
- * @return Whether this object is equals to another.
- */
- public boolean equals(Object o)
- {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- final Version version = (Version) o;
-
- return beta == version.beta && bugFix == version.bugFix && major == version.major && minor == version.minor;
- }
-
- /**
- * Returns a hash code for this object.
- *
- * @return A hash code for this object.
- */
- public int hashCode()
- {
- int result;
- result = major;
- result = 29 * result + minor;
- result = 29 * result + beta;
- result = 29 * result + bugFix;
- return result;
- }
-
- /**
- * Returns a string representation of the form "1.27", "1.27.2" or "1.27.beta3".
- *
- * @return A string representation of the form "1.27", "1.27.2" or "1.27.beta3".
- */
- public String toString()
- {
- StringBuilder buf = new StringBuilder(3);
- buf.append(major).append('.').append(minor);
- if (beta != 0)
- {
- buf.append(".beta").append(beta);
- }
- else if (bugFix != 0)
- {
- buf.append('.').append(bugFix);
- }
-
- return buf.toString();
- }
-
- /**
- * Compares this object with the specified object for order.
- *
- * @param version The object to compare to.
- * @return A negative integer, zero, or a positive integer as this object is less than, equal to, or
- * greater than the specified object.
- */
- @Override
- public int compareTo(Version version)
- {
- if (major < version.major)
- {
- return -1;
- }
-
- if (major > version.major)
- {
- return 1;
- }
-
- if (minor < version.minor)
- {
- return -1;
- }
-
- if (minor > version.minor)
- {
- return 1;
- }
-
- if (bugFix < version.bugFix)
- {
- return -1;
- }
-
- if (bugFix > version.bugFix)
- {
- return 1;
- }
-
- int thisBeta = beta == 0 ? Integer.MAX_VALUE : beta;
- int otherBeta = version.beta == 0 ? Integer.MAX_VALUE : version.beta;
-
- if (thisBeta < otherBeta)
- {
- return -1;
- }
-
- if (thisBeta > otherBeta)
- {
- return 1;
- }
-
- return 0;
- }
-}
\ No newline at end of file
diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/Version.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/Version.kt
new file mode 100644
index 00000000..d9c947be
--- /dev/null
+++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/Version.kt
@@ -0,0 +1,27 @@
+package org.moire.ultrasonic.domain
+
+import net.swiftzer.semver.SemVer
+
+/**
+ * Represents the version number of the Subsonic Android app.
+ */
+data class Version(
+ val version: SemVer
+) : Comparable {
+
+ override fun compareTo(other: Version): Int {
+ return version.compareTo(other.version)
+ }
+
+ companion object {
+ /**
+ * Creates a new version instance by parsing the given string.
+ *
+ * @param version A string of the format "1.27", "1.27.2" or "1.27.beta3".
+ */
+ @JvmStatic
+ fun fromCharSequence(version: String): Version {
+ return Version(SemVer.parse(version))
+ }
+ }
+}
\ No newline at end of file