/**
* This file is part of FileSpace for Android, an app for managing your server (files, talks...).
* <p/>
* Copyright (c) 2014-2015 FileSpace for Android contributors (http://mercandalli.com)
* <p/>
* LICENSE:
* <p/>
* FileSpace for Android 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 2 of the License, or (at your option) any
* later version.
* <p/>
* FileSpace for Android 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.
*
* @author Jonathan Mercandalli
* @license http://www.gnu.org/licenses/gpl.html
* @copyright 2014-2015 FileSpace for Android contributors (http://mercandalli.com)
*/
package com.mercandalli.android.apps.files.user;
import android.app.Activity;
import android.util.Log;
import com.mercandalli.android.apps.files.common.listener.IPostExecuteListener;
import com.mercandalli.android.apps.files.common.net.TaskPost;
import com.mercandalli.android.apps.files.file.FileModel;
import com.mercandalli.android.apps.files.file.FileUtils;
import com.mercandalli.android.apps.files.main.Config;
import com.mercandalli.android.apps.files.main.Constants;
import com.mercandalli.android.library.base.java.HashUtils;
import org.json.JSONException;
import org.json.JSONObject;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
public class UserModel {
private static final String ADMIN = "admin";
private int mId = -1;
private int mIdFileProfilePicture = -1;
public String username;
public String password;
public String regId;
public Date date_creation;
private Date mDateLastConnection;
public long size_files, file_profile_picture_size = -1, num_files, server_max_size_end_user;
private boolean admin = false;
public String mPictureUrl;
public UserLocationModel userLocation;
public UserModel() {
}
public UserModel(
int id, String username, String password, String regId, boolean admin) {
mId = id;
this.username = username;
this.password = password;
this.regId = regId;
this.admin = admin;
}
public UserModel(JSONObject json) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.US);
try {
if (json.has("id")) {
this.mId = json.getInt("id");
}
if (json.has("username")) {
this.username = json.getString("username");
}
if (json.has("password")) {
this.password = json.getString("password");
}
if (json.has("regId")) {
this.regId = json.getString("regId");
}
if (json.has("date_creation") && !json.isNull("date_creation")) {
this.date_creation = dateFormat.parse(json.getString("date_creation"));
}
if (json.has("date_last_connection") && !json.isNull("date_last_connection")) {
this.mDateLastConnection = dateFormat.parse(json.getString("date_last_connection"));
}
if (json.has("size_files") && !json.isNull("size_files")) {
this.size_files = json.getLong("size_files");
}
if (json.has("server_max_size_end_user") && !json.isNull("server_max_size_end_user")) {
this.server_max_size_end_user = json.getLong("server_max_size_end_user");
}
if (json.has(ADMIN)) {
final Object adminObj = json.get(ADMIN);
if (adminObj instanceof Integer) {
this.admin = json.getInt(ADMIN) == 1;
} else if (adminObj instanceof Boolean) {
this.admin = json.getBoolean(ADMIN);
}
}
if (json.has("id_file_profile_picture")) {
this.mIdFileProfilePicture = json.getInt("id_file_profile_picture");
}
if (json.has("file_profile_picture_size")) {
this.file_profile_picture_size = json.getLong("file_profile_picture_size");
}
if (json.has("num_files") && !json.isNull("num_files")) {
this.num_files = json.getLong("num_files");
}
userLocation = new UserLocationModel(json);
} catch (JSONException | ParseException e) {
Log.e(getClass().getName(), "Failed to convert Json", e);
}
if (hasPicture()) {
FileModel.FileModelBuilder fileModelBuilder = new FileModel.FileModelBuilder();
fileModelBuilder.id(this.mIdFileProfilePicture);
fileModelBuilder.size(this.file_profile_picture_size);
mPictureUrl = fileModelBuilder.build().getOnlineUrl();
}
}
public boolean hasPicture() {
return mIdFileProfilePicture != -1 && file_profile_picture_size != -1;
}
public String getAdapterTitle() {
return this.username;
}
public String getAdapterSubtitle() {
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yy", Locale.US);
String date = dateFormat.format(mDateLastConnection.getTime());
return date + " " + FileUtils.humanReadableByteCount(size_files) + " " + this.num_files + " file" + (this.num_files > 1 ? "s" : "");
}
public String getAccessLogin() {
return this.username;
}
public String getAccessPassword() {
final Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
final SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.US);
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("UTC"));
String currentDate = dateFormatGmt.format(calendar.getTime());
return HashUtils.sha1(HashUtils.sha1(this.password) + currentDate);
}
public boolean isAdmin() {
return admin;
}
public void delete(Activity activity, IPostExecuteListener listener) {
if (Config.isUserAdmin() && this.mId != Config.getUserId()) {
String url = Constants.URL_DOMAIN + Config.ROUTE_USER_DELETE + "/" + this.mId;
new TaskPost(activity, url, listener).execute();
return;
}
if (listener != null) {
listener.onPostExecute(null, null);
}
}
public int getId() {
return mId;
}
public int getIdFileProfilePicture() {
return mIdFileProfilePicture;
}
public Date getDateLastConnection() {
return mDateLastConnection;
}
}