1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-07 16:06:08 +00:00

Merge pull request #20 from owncloud/check_server_version

Updated representation of server version
This commit is contained in:
David A. Velasco 2014-04-01 14:03:39 +02:00
commit cecda3333a
3 changed files with 47 additions and 65 deletions

View File

@ -81,10 +81,9 @@ public class AccountUtils {
AccountManager ama = AccountManager.get(context);
String baseurl = ama.getUserData(account, Constants.KEY_OC_BASE_URL);
String version = ama.getUserData(account, Constants.KEY_OC_VERSION);
String versionString = ama.getUserData(account, Constants.KEY_OC_VERSION_STRING);
boolean supportsOAuth = (ama.getUserData(account, Constants.KEY_SUPPORTS_OAUTH2) != null);
boolean supportsSamlSso = (ama.getUserData(account, Constants.KEY_SUPPORTS_SAML_WEB_SSO) != null);
OwnCloudVersion ver = new OwnCloudVersion(version, versionString);
OwnCloudVersion ver = new OwnCloudVersion(version);
String webdavpath = getWebdavPath(ver, supportsOAuth, supportsSamlSso);
if (baseurl == null || webdavpath == null)
@ -149,10 +148,6 @@ public class AccountUtils {
* http://server/path or https://owncloud.server
*/
public static final String KEY_OC_BASE_URL = "oc_base_url";
/**
* Version string as shown in the status.php resource in the server side
*/
public static final String KEY_OC_VERSION_STRING = "oc_version_string";
/**
* Flag signaling if the ownCloud server can be accessed with OAuth2 access tokens.
*/

View File

@ -56,7 +56,6 @@ public class GetRemoteStatusOperation extends RemoteOperation {
private static final String NODE_INSTALLED = "installed";
private static final String NODE_VERSION = "version";
private static final String NODE_VERSIONSTRING = "versionstring";
private String mUrl;
private RemoteOperationResult mLatestResult;
@ -86,8 +85,7 @@ public class GetRemoteStatusOperation extends RemoteOperation {
mLatestResult = new RemoteOperationResult(RemoteOperationResult.ResultCode.INSTANCE_NOT_CONFIGURED);
} else {
String version = json.getString(NODE_VERSION);
String versionString = json.getString(NODE_VERSIONSTRING);
mOCVersion = new OwnCloudVersion(version, versionString);
mOCVersion = new OwnCloudVersion(version);
if (!mOCVersion.isVersionValid()) {
mLatestResult = new RemoteOperationResult(RemoteOperationResult.ResultCode.BAD_OC_VERSION);

View File

@ -27,58 +27,58 @@ package com.owncloud.android.lib.resources.status;
public class OwnCloudVersion implements Comparable<OwnCloudVersion> {
public static final OwnCloudVersion owncloud_v1 = new OwnCloudVersion(
0x010000);
0x01000000);
public static final OwnCloudVersion owncloud_v2 = new OwnCloudVersion(
0x020000);
0x02000000);
public static final OwnCloudVersion owncloud_v3 = new OwnCloudVersion(
0x030000);
0x03000000);
public static final OwnCloudVersion owncloud_v4 = new OwnCloudVersion(
0x040000);
0x04000000);
public static final OwnCloudVersion owncloud_v4_5 = new OwnCloudVersion(
0x040500);
0x04050000);
public static final int MINIMUM_VERSION_STRING_FOR_SHARING_API = 0x05000D;
public static final int MINIMUM_VERSION_FOR_SHARING_API = 0x05001B00; // 5.0.27
private static final int MAX_DOTS = 3;
// format is in version
// 0xAABBCC
// for version AA.BB.CC
// ie version 2.0.3 will be stored as 0x020003
// 0xAABBCCDD
// for version AA.BB.CC.DD
// ie version 2.0.3 will be stored as 0x02000300
private int mVersion;
private boolean mIsValid;
// not parsed, saved same value offered by the server
private String mVersionString;
protected OwnCloudVersion(int version) {
mVersion = version;
mIsValid = true;
mVersionString = "";
}
public OwnCloudVersion(String version){
mVersion = 0;
mIsValid = false;
int countDots = version.length() - version.replace(".", "").length();
// Complete the version. Version must have 3 dots
for (int i = countDots; i < MAX_DOTS; i++) {
version = version + ".0";
}
parseVersion(version);
public OwnCloudVersion(String version, String versionString) {
mVersion = 0;
mIsValid = false;
parseVersionString(version);
if (versionString != null && versionString.length() > 0) {
mVersionString = versionString;
} else if (mIsValid) {
mVersionString = version;
}
}
public String toString() {
return ((mVersion >> 16) % 256) + "." + ((mVersion >> 8) % 256) + "."
+ ((mVersion) % 256);
String versionToString = String.valueOf((mVersion >> (8*MAX_DOTS)) % 256);
for (int i = MAX_DOTS - 1; i >= 0; i-- ) {
versionToString = versionToString + "." + String.valueOf((mVersion >> (8*i)) % 256);
}
return versionToString;
}
public String getVersion() {
return toString();
}
public String getVersionString() {
return mVersionString;
}
public boolean isVersionValid() {
return mIsValid;
}
@ -89,9 +89,9 @@ public class OwnCloudVersion implements Comparable<OwnCloudVersion> {
: another.mVersion < mVersion ? 1 : -1;
}
private void parseVersionString(String versionString) {
private void parseVersion(String version) {
try {
mVersion = getParsedVersionString(versionString);
mVersion = getParsedVersion(version);
mIsValid = true;
} catch (Exception e) {
@ -99,37 +99,26 @@ public class OwnCloudVersion implements Comparable<OwnCloudVersion> {
}
}
private int getParsedVersionString(String versionString) throws NumberFormatException {
int version = 0;
private int getParsedVersion(String version) throws NumberFormatException {
int versionValue = 0;
// get only numeric part
versionString = versionString.replaceAll("[^\\d.]", "");
String[] nums = versionString.split("\\.");
if (nums.length > 0) {
version += Integer.parseInt(nums[0]);
}
version = version << 8;
if (nums.length > 1) {
version += Integer.parseInt(nums[1]);
}
version = version << 8;
if (nums.length > 2) {
version += Integer.parseInt(nums[2]);
}
return version;
version = version.replaceAll("[^\\d.]", "");
String[] nums = version.split("\\.");
for (int i = 0; i < nums.length && i <= MAX_DOTS; i++) {
versionValue += Integer.parseInt(nums[i]);
if (i < nums.length - 1) {
versionValue = versionValue << 8;
}
}
return versionValue;
}
public boolean isSharedSupported() {
int versionString = 0;
try {
versionString = getParsedVersionString(mVersionString);
} catch (Exception e) {
// nothing to do here
}
return (versionString >= MINIMUM_VERSION_STRING_FOR_SHARING_API);
return (mVersion >= MINIMUM_VERSION_FOR_SHARING_API);
}