Use more intelligent version parsing

Signed-off-by: Andrew DeMaria <lostonamountain@gmail.com>
master
Andrew DeMaria 8 years ago
parent cc0ac2e4d2
commit 6d3c3e2d8d
No known key found for this signature in database
GPG Key ID: 0A3F5E91F8364EDF
  1. 6
      libresonic-main/pom.xml
  2. 2
      libresonic-main/src/main/java/org/libresonic/player/Logger.java
  3. 90
      libresonic-main/src/main/java/org/libresonic/player/domain/Version.java
  4. 16
      libresonic-main/src/test/java/org/libresonic/player/domain/VersionTestCase.java

@ -363,6 +363,12 @@
<version>3.5.1</version> <version>3.5.1</version>
</dependency> </dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
<version>3.3.9</version>
</dependency>
</dependencies> </dependencies>
<profiles> <profiles>

@ -115,7 +115,7 @@ public class Logger {
return true; // versionService not yet available. return true; // versionService not yet available.
} }
Version localVersion = versionService.getLocalVersion(); Version localVersion = versionService.getLocalVersion();
debugEnabled = localVersion == null || localVersion.getBeta() != 0; debugEnabled = localVersion == null || localVersion.isPreview();
} }
return debugEnabled; return debugEnabled;
} }

@ -19,6 +19,10 @@
*/ */
package org.libresonic.player.domain; package org.libresonic.player.domain;
import org.apache.commons.lang3.StringUtils;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
/** /**
* Represents the version number of Libresonic. * Represents the version number of Libresonic.
* *
@ -26,39 +30,22 @@ package org.libresonic.player.domain;
* @version $Revision: 1.3 $ $Date: 2006/01/20 21:25:16 $ * @version $Revision: 1.3 $ $Date: 2006/01/20 21:25:16 $
*/ */
public class Version implements Comparable<Version> { public class Version implements Comparable<Version> {
private int major; private final DefaultArtifactVersion internalVersion;
private int minor;
private int beta;
private int bugfix;
/** /**
* Creates a new version instance by parsing the given string. * 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". * @param version A string of the format "1.27", "1.27.2" or "1.27.beta3".
*/ */
public Version(String version) { public Version(String version) {
String[] s = version.split("\\."); this.internalVersion = new DefaultArtifactVersion(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() { public int getMajor() {
return major; return internalVersion.getMajorVersion();
} }
public int getMinor() { public int getMinor() {
return minor; return internalVersion.getMinorVersion();
}
public int getBeta() {
return beta;
} }
/** /**
@ -67,15 +54,11 @@ public class Version implements Comparable<Version> {
* @return Whether this object is equals to another. * @return Whether this object is equals to another.
*/ */
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) return true; if(o instanceof Version) {
if (o == null || getClass() != o.getClass()) return false; return internalVersion.equals(((Version)o).internalVersion);
} else {
final Version version = (Version) o; return false;
}
if (beta != version.beta) return false;
if (bugfix != version.bugfix) return false;
if (major != version.major) return false;
return minor == version.minor;
} }
/** /**
@ -83,12 +66,7 @@ public class Version implements Comparable<Version> {
* @return A hash code for this object. * @return A hash code for this object.
*/ */
public int hashCode() { public int hashCode() {
int result; return internalVersion.hashCode();
result = major;
result = 29 * result + minor;
result = 29 * result + beta;
result = 29 * result + bugfix;
return result;
} }
/** /**
@ -96,15 +74,7 @@ public class Version implements Comparable<Version> {
* @return 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() { public String toString() {
StringBuffer buf = new StringBuffer(); return internalVersion.toString();
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();
} }
/** /**
@ -114,33 +84,11 @@ public class Version implements Comparable<Version> {
* greater than the specified object. * greater than the specified object.
*/ */
public int compareTo(Version version) { public int compareTo(Version version) {
if (major < version.major) { return internalVersion.compareTo(version.internalVersion);
return -1;
} else if (major > version.major) {
return 1;
}
if (minor < version.minor) {
return -1;
} else if (minor > version.minor) {
return 1;
}
if (bugfix < version.bugfix) {
return -1;
} else 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;
} else if (thisBeta > otherBeta) {
return 1;
} }
return 0; public boolean isPreview() {
return StringUtils.isNotBlank(internalVersion.getQualifier()) &&
!StringUtils.equalsIgnoreCase(internalVersion.getQualifier(), Artifact.RELEASE_VERSION);
} }
} }

@ -47,6 +47,22 @@ public class VersionTestCase extends TestCase {
doTestVersion("1.5.beta1", "1.6"); doTestVersion("1.5.beta1", "1.6");
doTestVersion("1.5.beta1", "1.5.beta2"); doTestVersion("1.5.beta1", "1.5.beta2");
doTestVersion("1.5.beta2", "1.5.beta11"); doTestVersion("1.5.beta2", "1.5.beta11");
doTestVersion("6.2-SNAPSHOT", "6.11-SNAPSHOT");
}
public void testIsPreview() {
Version version = new Version("1.6.0-SNAPSHOT");
assertTrue("Version should be snapshot", version.isPreview());
version = new Version("1.6.0-beta2");
assertTrue("Version should be snapshot", version.isPreview());
version = new Version("1.6.0");
assertFalse("Version should not be snapshot", version.isPreview());
version = new Version("1.6.0-RELEASE");
assertFalse("Version should not be snapshot", version.isPreview());
} }
/** /**

Loading…
Cancel
Save