package com.seafile.seadroid2.data;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import com.google.common.base.Objects;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Value type that represents a ServerInfo.
*/
public class ServerInfo implements Parcelable{
private String url;
private String version;
private String features;
public ServerInfo(String url, String version, String features) {
this.url = url;
this.version = version;
this.features = features;
}
protected ServerInfo(Parcel in) {
url = in.readString();
version = in.readString();
features = in.readString();
}
public static final Creator<ServerInfo> CREATOR = new Creator<ServerInfo>() {
@Override
public ServerInfo createFromParcel(Parcel in) {
return new ServerInfo(in);
}
@Override
public ServerInfo[] newArray(int size) {
return new ServerInfo[size];
}
};
/**
*
* @return Server version. Might be null
*/
public String getVersion() {
return version;
}
/**
*
* @return Server features. Might be null
*/
public String getFeatures() {
return features;
}
public boolean isProEdition() {
return features != null && features.contains("seafile-pro");
}
public boolean isSearchEnabled() {
return features != null && features.contains("file-search");
}
public boolean canLocalDecrypt() {
if (TextUtils.isEmpty(version)
|| version.length() != 5)
return false;
final String realVersion = version.replaceAll("[.]", "");
final int versionCode = Integer.parseInt(realVersion);
return versionCode >= 510;
}
public String getUrl() {
return url;
}
public static ServerInfo fromJson(JSONObject obj, String server) throws JSONException {
String version = obj.optString("version");
String features = obj.optString("features");
ServerInfo serverInfo = new ServerInfo(server, version, features);
// raw data goes like "features":["seafile-basic","seafile-pro","office-preview","file-search"]
return serverInfo;
}
@Override
public int hashCode() {
return Objects.hashCode(url, version, features);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || (obj.getClass() != this.getClass()))
return false;
ServerInfo si = (ServerInfo)obj;
if (si.url == null || si.version == null || si.features == null)
return false;
return si.url.equals(this.url) && si.version.equals(this.version) && si.features.equals(this.features);
}
@Override
public String toString() {
return Objects.toStringHelper(this)
.add("url", url)
.add("version", version)
.add("features", features)
.toString();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(url);
dest.writeString(version);
dest.writeString(features);
}
}