package com.seafile.seadroid2.account;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import com.google.common.base.Objects;
import com.seafile.seadroid2.BuildConfig;
import com.seafile.seadroid2.util.Utils;
public class Account implements Parcelable, Comparable<Account> {
private static final String DEBUG_TAG = "Account";
/**
* Type of the account (currently there is only one type)
*/
public final static String ACCOUNT_TYPE = BuildConfig.ACCOUNT_TYPE;
// The full URL of the server, like 'http://gonggeng.org/seahub/' or 'http://gonggeng.org/'
public final String server;
public final String email;
public final Boolean is_shib;
public String token;
public Account(String server, String email, String token, Boolean is_shib) {
this.server = server;
this.email = email;
this.token = token;
this.is_shib = is_shib;
}
public String getServerHost() {
String s = server.substring(server.indexOf("://") + 3);
return s.substring(0, s.indexOf('/'));
}
public String getServerDomainName() {
String dn = getServerHost();
// strip port, like :8000 in 192.168.1.116:8000
if (dn.contains(":"))
dn = dn.substring(0, dn.indexOf(':'));
return dn;
}
public String getEmail() {
return email;
}
public String getServer() {
return server;
}
public String getServerNoProtocol() {
String result = server.substring(server.indexOf("://") + 3);
if (result.endsWith("/"))
result = result.substring(0, result.length() - 1);
return result;
}
public String getToken() {
return token;
}
public boolean isHttps() {
return server.startsWith("https");
}
public boolean isShib() {
return is_shib;
}
@Override
public int hashCode() {
return Objects.hashCode(server, email);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || (obj.getClass() != this.getClass()))
return false;
Account a = (Account)obj;
if (a.server == null || a.email == null || a.token == null)
return false;
return a.server.equals(this.server) && a.email.equals(this.email);
}
public String getSignature() {
return String.format("%s (%s)", getServerNoProtocol(), email);
}
public String getDisplayName() {
String server = Utils.stripSlashes(getServerHost());
return Utils.assembleUserName(email, server);
}
public android.accounts.Account getAndroidAccount() {
return new android.accounts.Account(getSignature(), ACCOUNT_TYPE);
}
public boolean hasValidToken() {
return !TextUtils.isEmpty(token);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(this.server);
out.writeString(this.email);
out.writeString(this.token);
out.writeValue(this.is_shib);
}
public static final Parcelable.Creator<Account> CREATOR = new Parcelable.Creator<Account>() {
@Override
public Account createFromParcel(Parcel source) {
return new Account(source);
}
@Override
public Account[] newArray(int size) {
return new Account[size];
}
};
protected Account(Parcel in) {
this.server = in.readString();
this.email = in.readString();
this.token = in.readString();
this.is_shib = (Boolean) in.readValue(Boolean.class.getClassLoader());
// Log.d(DEBUG_TAG, String.format("%s %s %s %b", server, email, token ,is_shib));
}
@Override
public String toString() {
return Objects.toStringHelper(this)
.add("server", server)
.add("user", email)
.toString();
}
@Override
public int compareTo(Account other) {
return this.toString().compareTo(other.toString());
}
}