/*
* Copyright (c) 2015. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
* Vestibulum commodo. Ut rhoncus gravida arcu.
*/
package com.shaweibo.biu.dao.user;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.drawable.BitmapDrawable;
import android.util.Log;
import com.shaweibo.biu.R;
import com.shaweibo.biu.Utils.Utility;
import com.shaweibo.biu.dao.UrlConstants;
import com.shaweibo.biu.dao.HttpClientUtils;
import com.shaweibo.biu.db.DataBaseHelper;
import com.shaweibo.biu.db.tables.UsersTable;
import com.shaweibo.biu.global.Constants;
import com.shaweibo.biu.model.UserModel;
import com.shaweibo.biu.dao.WeiboParameters;
import com.google.gson.Gson;
import static com.shaweibo.biu.BuildConfig.DEBUG;
public class UserDao
{
private static String TAG = UserDao.class.getSimpleName();
private static BitmapDrawable[] mVipDrawable;
public UserDao(Context context) {
mHelper = DataBaseHelper.instance(context);
if (mVipDrawable == null) {
mVipDrawable = new BitmapDrawable[]{
(BitmapDrawable) context.getResources().getDrawable(R.mipmap.ic_personal_vip),
(BitmapDrawable) context.getResources().getDrawable(R.mipmap.ic_enterprise_vip)
};
}
}
private DataBaseHelper mHelper;
public UserModel getUser(String uid) {
UserModel model;
model = getUserFromApi(uid);
if (model == null) {
Cursor cursor = mHelper.getReadableDatabase().query(UsersTable.NAME, new String[] {
UsersTable.UID,
UsersTable.TIMESTAMP,
UsersTable.USERNAME,
UsersTable.JSON
}, UsersTable.UID + "=?", new String[]{uid}, null, null, null);
if (cursor.getCount() >= 1) {
cursor.moveToFirst();
long time = cursor.getLong(cursor.getColumnIndex(UsersTable.TIMESTAMP));
if (DEBUG) {
Log.d(TAG, "time = " + time);
Log.d(TAG, "available = " + Utility.isCacheAvailable(time, Constants.DB_CACHE_DAYS));
}
if (Utility.isCacheAvailable(time, Constants.DB_CACHE_DAYS)) {
model = new Gson().fromJson(cursor.getString(cursor.getColumnIndex(UsersTable.JSON)), UserModel.class);
model.timestamp = cursor.getInt(cursor.getColumnIndex(UsersTable.TIMESTAMP));
}
}
} else {
// Insert into database
ContentValues values = new ContentValues();
values.put(UsersTable.UID, uid);
values.put(UsersTable.TIMESTAMP, model.timestamp);
values.put(UsersTable.USERNAME, model.getName());
values.put(UsersTable.JSON, new Gson().toJson(model));
SQLiteDatabase db = mHelper.getWritableDatabase();
db.beginTransaction();
db.delete(UsersTable.NAME, UsersTable.UID + "=?", new String[]{uid});
db.insert(UsersTable.NAME, null, values);
db.setTransactionSuccessful();
db.endTransaction();
}
return model;
}
public UserModel getUserByName(String name) {
UserModel model;
model = getUserByNameFromAPi(name);
if (model == null) {
Cursor cursor = mHelper.getReadableDatabase().query(UsersTable.NAME, new String[] {
UsersTable.UID,
UsersTable.TIMESTAMP,
UsersTable.USERNAME,
UsersTable.JSON
}, UsersTable.USERNAME + "=?", new String[]{name}, null, null, null);
if (cursor.getCount() >= 1) {
cursor.moveToFirst();
long time = cursor.getLong(cursor.getColumnIndex(UsersTable.TIMESTAMP));
if (DEBUG) {
Log.d(TAG, "time = " + time);
Log.d(TAG, "available = " + Utility.isCacheAvailable(time, Constants.DB_CACHE_DAYS));
}
if (Utility.isCacheAvailable(time, Constants.DB_CACHE_DAYS)) {
model = new Gson().fromJson(cursor.getString(cursor.getColumnIndex(UsersTable.JSON)), UserModel.class);
model.timestamp = cursor.getInt(cursor.getColumnIndex(UsersTable.TIMESTAMP));
}
}
} else {
// Insert into database
ContentValues values = new ContentValues();
values.put(UsersTable.UID, model.id);
values.put(UsersTable.TIMESTAMP, model.timestamp);
values.put(UsersTable.USERNAME, name);
values.put(UsersTable.JSON, new Gson().toJson(model));
SQLiteDatabase db = mHelper.getWritableDatabase();
db.beginTransaction();
db.delete(UsersTable.NAME, UsersTable.USERNAME + "=?", new String[]{name});
db.insert(UsersTable.NAME, null, values);
db.setTransactionSuccessful();
db.endTransaction();
}
return model;
}
public static UserModel getUserFromApi(String uid) {
WeiboParameters params = new WeiboParameters();
params.put("uid", uid);
try {
String json = HttpClientUtils.doGetRequstWithAceesToken(UrlConstants.USER_SHOW, params);
UserModel user = new Gson().fromJson(json.replaceAll("-Weibo", ""), UserModel.class);
return user;
} catch (Exception e) {
if (DEBUG) {
Log.e(TAG, "Failed to fetch user info from net: " + e.getClass().getSimpleName());
}
return null;
}
}
public static UserModel getUserByNameFromAPi(String name) {
WeiboParameters params = new WeiboParameters();
params.put("screen_name", name);
try {
String json = HttpClientUtils.doGetRequstWithAceesToken(UrlConstants.USER_SHOW, params);
UserModel user = new Gson().fromJson(json.replaceAll("-Weibo", ""), UserModel.class);
return user;
} catch (Exception e) {
if (DEBUG) {
Log.e(TAG, "Failed to fetch user info from net: " + e.getClass().getSimpleName());
}
return null;
}
}
}