package com.jasonchen.microlang.database;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import com.jasonchen.microlang.activitys.BlackMagicActivity;
import com.jasonchen.microlang.activitys.OAuthActivity;
import com.jasonchen.microlang.beans.AccountBean;
import com.jasonchen.microlang.beans.UserBean;
import com.jasonchen.microlang.database.table.AccountTable;
import com.jasonchen.microlang.debug.AppLogger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
/**
* jasonchen
* 2015/04/10
*/
public class AccountDBTask {
private AccountDBTask() {
}
private static SQLiteDatabase getWsd() {
DatabaseHelper databaseHelper = DatabaseHelper.getInstance();
return databaseHelper.getWritableDatabase();
}
private static SQLiteDatabase getRsd() {
DatabaseHelper databaseHelper = DatabaseHelper.getInstance();
return databaseHelper.getReadableDatabase();
}
public static OAuthActivity.DBResult addOrUpdateAccount(AccountBean account) {
ContentValues cv = new ContentValues();
cv.put(AccountTable.UID, account.getUid());
cv.put(AccountTable.OAUTH_TOKEN, account.getAccess_token());
cv.put(AccountTable.OAUTH_TOKEN_EXPIRES_TIME, String.valueOf(account.getExpires_time()));
String json = new Gson().toJson(account.getInfo());
cv.put(AccountTable.INFOJSON, json);
Cursor c = getWsd().query(AccountTable.TABLE_NAME, null, AccountTable.UID + "=?",
new String[]{account.getUid()}, null, null, null);
if (c != null && c.getCount() > 0) {
String[] args = {account.getUid()};
getWsd().update(AccountTable.TABLE_NAME, cv, AccountTable.UID + "=?", args);
return OAuthActivity.DBResult.update_successfully;
} else {
getWsd().insert(AccountTable.TABLE_NAME,
AccountTable.UID, cv);
return OAuthActivity.DBResult.add_successfuly;
}
}
public static BlackMagicActivity.DBResult addOrUpdateBlackAccount(AccountBean account,
boolean blackMagic) {
ContentValues cv = new ContentValues();
cv.put(AccountTable.UID, account.getUid());
cv.put(AccountTable.OAUTH_TOKEN_SECRET, account.getAccess_token_secret());
cv.put(AccountTable.OAUTH_TOKEN_SECRET_EXPIRES_TIME, String.valueOf(account.getExpires_time_secret()));
cv.put(AccountTable.BLACK_MAGIC, blackMagic);
String json = new Gson().toJson(account.getInfo());
cv.put(AccountTable.INFOJSON, json);
Cursor c = getWsd().query(AccountTable.TABLE_NAME, null, AccountTable.UID + "=?",
new String[]{account.getUid()}, null, null, null);
if (c != null && c.getCount() > 0) {
String[] args = {account.getUid()};
getWsd().update(AccountTable.TABLE_NAME, cv, AccountTable.UID + "=?", args);
return BlackMagicActivity.DBResult.update_successfully;
} else {
getWsd().insert(AccountTable.TABLE_NAME,
AccountTable.UID, cv);
return BlackMagicActivity.DBResult.add_successfuly;
}
}
public static void asyncUpdateMyProfile(final AccountBean accountBean, final UserBean value) {
new Thread(new Runnable() {
@Override
public void run() {
updateMyProfile(accountBean, value);
}
}).start();
}
public static void updateMyProfile(AccountBean account, UserBean value) {
String uid = account.getUid();
String json = new Gson().toJson(value);
ContentValues cv = new ContentValues();
cv.put(AccountTable.UID, uid);
cv.put(AccountTable.INFOJSON, json);
int c = getWsd().update(AccountTable.TABLE_NAME, cv, AccountTable.UID + "=?",
new String[]{uid});
}
public static void updateNavigationPosition(AccountBean account, int position) {
String uid = account.getUid();
ContentValues cv = new ContentValues();
cv.put(AccountTable.UID, uid);
cv.put(AccountTable.NAVIGATION_POSITION, position);
int c = getWsd().update(AccountTable.TABLE_NAME, cv, AccountTable.UID + "=?",
new String[]{uid});
}
public static List<AccountBean> getAccountList() {
List<AccountBean> accountList = new ArrayList<AccountBean>();
String sql = "select * from " + AccountTable.TABLE_NAME;
Cursor c = getWsd().rawQuery(sql, null);
while (c.moveToNext()) {
AccountBean account = new AccountBean();
int colid = c.getColumnIndex(AccountTable.OAUTH_TOKEN);
account.setAccess_token(c.getString(colid));
colid = c.getColumnIndex(AccountTable.OAUTH_TOKEN_EXPIRES_TIME);
account.setExpires_time(Long.valueOf(c.getString(colid)));
colid = c.getColumnIndex(AccountTable.OAUTH_TOKEN_SECRET);
account.setAccess_token_secret(c.getString(colid));
colid = c.getColumnIndex(AccountTable.OAUTH_TOKEN_SECRET_EXPIRES_TIME);
if(c.getString(colid) != null) {
account.setExpires_time_secret(Long.valueOf(c.getString(colid)));
}
colid = c.getColumnIndex(AccountTable.BLACK_MAGIC);
account.setBlack_magic(c.getInt(colid) == 1);
//test
colid = c.getColumnIndex(AccountTable.NAVIGATION_POSITION);
account.setNavigationPosition(c.getInt(colid));
Gson gson = new Gson();
String json = c.getString(c.getColumnIndex(AccountTable.INFOJSON));
try {
UserBean value = gson.fromJson(json, UserBean.class);
account.setInfo(value);
} catch (JsonSyntaxException e) {
AppLogger.e(e.getMessage());
}
accountList.add(account);
}
c.close();
System.out.println("accountList::"+accountList);
return accountList;
}
public static AccountBean getAccount(String id) {
String sql = "select * from " + AccountTable.TABLE_NAME + " where " + AccountTable.UID
+ " = " + id;
Cursor c = getRsd().rawQuery(sql, null);
if (c.moveToNext()) {
AccountBean account = new AccountBean();
int colid = c.getColumnIndex(AccountTable.OAUTH_TOKEN);
account.setAccess_token(c.getString(colid));
colid = c.getColumnIndex(AccountTable.OAUTH_TOKEN_EXPIRES_TIME);
account.setExpires_time(Long.valueOf(c.getString(colid)));
colid = c.getColumnIndex(AccountTable.OAUTH_TOKEN_SECRET);
account.setAccess_token_secret(c.getString(colid));
colid = c.getColumnIndex(AccountTable.OAUTH_TOKEN_SECRET_EXPIRES_TIME);
account.setExpires_time_secret(Long.valueOf(c.getString(colid)));
colid = c.getColumnIndex(AccountTable.BLACK_MAGIC);
account.setBlack_magic(c.getInt(colid) == 1);
colid = c.getColumnIndex(AccountTable.NAVIGATION_POSITION);
account.setNavigationPosition(c.getInt(colid));
Gson gson = new Gson();
String json = c.getString(c.getColumnIndex(AccountTable.INFOJSON));
try {
UserBean value = gson.fromJson(json, UserBean.class);
account.setInfo(value);
} catch (JsonSyntaxException e) {
AppLogger.e(e.getMessage());
}
return account;
}
return null;
}
public static List<AccountBean> removeAndGetNewAccountList(Set<String> checkedItemPosition) {
String[] args = checkedItemPosition.toArray(new String[0]);
String asString = Arrays.toString(args);
asString = asString.replace("[", "(");
asString = asString.replace("]", ")");
String sql = "delete from " + AccountTable.TABLE_NAME + " where " + AccountTable.UID
+ " in " + asString;
getWsd().execSQL(sql);
for (String id : args) {
/* FriendsTimeLineDBTask.deleteAllHomes(id);
MentionWeiboTimeLineDBTask.deleteAllReposts(id);
MentionCommentsTimeLineDBTask.deleteAllComments(id);
CommentToMeTimeLineDBTask.deleteAllComments(id);
CommentByMeTimeLineDBTask.deleteAllComments(id);
MyStatusDBTask.clear(id);
AtUsersDBTask.clear(id);
FavouriteDBTask.deleteAllFavourites(id);*/
}
return getAccountList();
}
}