package im.zico.wingtwitter.dao;
import android.content.ContentValues;
import android.content.Context;
import android.content.CursorLoader;
import android.database.Cursor;
import android.net.Uri;
import java.util.ArrayList;
import java.util.List;
import im.zico.wingtwitter.type.WingTweet;
import im.zico.wingtwitter.type.WingUser;
import im.zico.wingtwitter.utils.WConfig;
/**
* Created by tinyao on 12/5/14.
*/
public class WingDataHelper extends BaseDataHelper {
public WingDataHelper(Context context) {
super(context);
}
@Override
protected Uri getContentUri(int type) {
switch (type) {
case WingStore.TYPE_TWEET:
return WingDataProvider.STATUS_CONTENT_URI;
case WingStore.TYPE_MENTION:
return WingDataProvider.MENTION_CONTENT_URI;
case WingStore.TYPE_USER:
return WingDataProvider.USER_CONTENT_URI;
case WingStore.TYPE_FAVORITE:
return WingDataProvider.FAVORITE_CONTENT_URI;
case WingStore.TYPE_COMMON_TWEET:
return WingDataProvider.COMMON_TWEETS_URI;
}
return null;
}
public WingTweet getTweet(long tweet_id) {
WingTweet wingTweet = null;
Cursor cursor = query(WingStore.TYPE_TWEET, null, WingStore.TweetColumns.TWEET_ID + " = ?",
new String[]{ "" + tweet_id }, null);
if (cursor.moveToFirst()) {
wingTweet = WingTweet.fromCursor(cursor);
} else {
cursor = query(WingStore.TYPE_COMMON_TWEET, null, WingStore.TweetColumns.TWEET_ID + " = ?",
new String[]{"" + tweet_id}, null);
if (cursor.moveToFirst()) {
wingTweet = WingTweet.fromCursor(cursor);
} else {
cursor = query(WingStore.TYPE_MENTION, null, WingStore.TweetColumns.TWEET_ID + " = ?",
new String[]{"" + tweet_id}, null);
if (cursor.moveToFirst()) {
wingTweet = WingTweet.fromCursor(cursor);
} else {
cursor = query(WingStore.TYPE_FAVORITE, null, WingStore.TweetColumns.TWEET_ID + " = ?",
new String[]{"" + tweet_id}, null);
if (cursor.moveToFirst()) {
wingTweet = WingTweet.fromCursor(cursor);
}
}
}
}
cursor.close();
return wingTweet;
}
public WingTweet getTweet(long tweet_id, int type) {
WingTweet wingTweet = null;
Cursor cursor = query(type, null, WingStore.TweetColumns.TWEET_ID + " = ?",
new String[]{ "" + tweet_id }, null);
if(cursor.moveToFirst()) {
wingTweet = WingTweet.fromCursor(cursor);
}
cursor.close();
return wingTweet;
}
/**
* Save Tweet List
* @param wingTweets
*/
// public synchronized void saveAll(List<WingTweet> wingTweets) {
// ArrayList<ContentValues> contentValues = new ArrayList<ContentValues>();
//
// for (WingTweet wingTweet : wingTweets) {
// ContentValues values = wingTweet.toContentValues();
// contentValues.add(values);
// }
//
// ContentValues[] valueArray = new ContentValues[contentValues.size()];
// bulkInsert(WingStore.TYPE_TWEET, contentValues.toArray(valueArray));
// }
public synchronized void saveAll(List<WingTweet> wingTweets, int type) {
ArrayList<ContentValues> contentValues = new ArrayList<ContentValues>();
for (WingTweet wingTweet : wingTweets) {
ContentValues values = wingTweet.toContentValues();
contentValues.add(values);
}
ContentValues[] valueArray = new ContentValues[contentValues.size()];
bulkInsert(type, contentValues.toArray(valueArray));
}
// /**
// * Save Tweet List
// * @param wingTweets
// */
// public synchronized void saveAllMention(List<WingTweet> wingTweets) {
// ArrayList<ContentValues> contentValues = new ArrayList<ContentValues>();
//
// for (WingTweet wingTweet : wingTweets) {
// ContentValues values = wingTweet.toContentValues();
// contentValues.add(values);
// }
//
// ContentValues[] valueArray = new ContentValues[contentValues.size()];
// bulkInsert(WingStore.TYPE_MENTION, contentValues.toArray(valueArray));
// }
// /**
// * Save single tweet
// * @param wingTweet
// */
// public void saveMention(WingTweet wingTweet) {
// if(!isTweetExisted(wingTweet.tweet_id)) {
// ContentValues values = wingTweet.toContentValues();
// insert(WingStore.TYPE_MENTION, values);
// }
// }
//
// /**
// * Save single tweet
// * @param wingTweet
// */
// public void save(WingTweet wingTweet) {
// if(!isTweetExisted(wingTweet.tweet_id)) {
// ContentValues values = wingTweet.toContentValues();
// insert(WingStore.TYPE_TWEET, values);
// }
// }
public void save(WingTweet wingTweet, int type) {
if(!isTweetExisted(wingTweet.tweet_id, type)) {
ContentValues values = wingTweet.toContentValues();
insert(type, values);
}
}
public int tweetAmount(int type) {
int amount = 0;
Cursor ccc = query(getContentUri(type), null, null, null, null);
if (ccc != null) {
amount = ccc.getCount();
}
ccc.close();
return amount;
}
public void update(WingTweet wingTweet) {
ContentValues values = wingTweet.toContentValues();
update(WingStore.TYPE_TWEET, values,
WingStore.TweetColumns.TWEET_ID + "=?", new String[]{ wingTweet.tweet_id + "" });
update(WingStore.TYPE_FAVORITE, values,
WingStore.TweetColumns.TWEET_ID + "=?", new String[]{ wingTweet.tweet_id + "" });
update(WingStore.TYPE_MENTION, values,
WingStore.TweetColumns.TWEET_ID + "=?", new String[]{ wingTweet.tweet_id + "" });
}
/**
* Save single user
* @param wingUser
*/
public synchronized void save(WingUser wingUser) {
if(!isUserExsisted(wingUser.user_id)) {
ContentValues values = wingUser.toContentValues();
insert(WingStore.TYPE_USER, values);
} else {
ContentValues values = wingUser.toContentValues();
update(WingStore.TYPE_USER, values,
WingStore.UserColumns.USER_ID + "=?", new String[]{ wingUser.user_id+"" });
}
}
public WingUser getUser(long userId) {
WingUser wingUser = null;
Cursor cursor = query(WingStore.TYPE_USER, null, WingStore.UserColumns.USER_ID + " = ?",
new String[]{ "" + userId }, null);
if (cursor.getCount()>0 && cursor.moveToFirst()) {
wingUser = new WingUser(cursor);
}
cursor.close();
return wingUser;
}
public WingUser getUser(String screenName) {
WingUser wingUser = null;
Cursor cursor = query(WingStore.TYPE_USER, null, WingStore.UserColumns.SCREEN_NAME + " = ?",
new String[]{ "" + screenName }, null);
if (cursor.getCount()>0 && cursor.moveToFirst()) {
wingUser = new WingUser(cursor);
}
cursor.close();
return wingUser;
}
/**
*
* @param tweet
*/
public void delete(WingTweet tweet) {
delete(getContentUri(WingStore.TYPE_TWEET),
WingStore.TweetColumns.TWEET_ID + " = ?", new String[]{ "" + tweet.tweet_id });
}
public void delete(WingTweet tweet, int type) {
delete(getContentUri(type),
WingStore.TweetColumns.TWEET_ID + " = ?", new String[]{ "" + tweet.tweet_id });
}
public int deletePreviousTweets(long tweet_id) {
return delete(getContentUri(WingStore.TYPE_TWEET), WingStore.TweetColumns.TWEET_ID + " < ?", new String[]{ "" + tweet_id });
}
public void clearOldTweets(int type) {
Cursor ccc = query(getContentUri(type), null, null, null, WingStore.TweetColumns.TWEET_ID + " DESC");
if (ccc!=null && ccc.getCount() > WConfig.TIMELINE_MAX_CACHE
&& ccc.moveToPosition(WConfig.TIMELINE_MAX_CACHE)) {
long startId = WingTweet.fromCursor(ccc).tweet_id;
delete(getContentUri(type),
WingStore.TweetColumns.TWEET_ID + " <= ?",
new String[]{ "" + startId});
}
ccc.close();
}
public int deleteAllTweets() {
return delete(getContentUri(WingStore.TYPE_TWEET),null, null);
}
public boolean isTweetExisted(long tweet_id) {
Cursor c = query(getContentUri(WingStore.TYPE_TWEET), null, WingStore.TweetColumns.TWEET_ID + " = ?",
new String[]{ "" + tweet_id}, null);
boolean existed = c!=null && c.getCount() > 0;
c.close();
return existed;
}
public boolean isTweetExisted(long tweet_id, int type) {
Cursor c = query(getContentUri(type), null, WingStore.TweetColumns.TWEET_ID + " = ?",
new String[]{ "" + tweet_id}, null);
boolean existed = c!=null && c.getCount() > 0;
c.close();
return existed;
}
private boolean isUserExsisted(long user_id) {
Cursor c = query(getContentUri(WingStore.TYPE_USER), null, WingStore.UserColumns.USER_ID + " = ?",
new String[]{ "" + user_id}, null);
boolean existed = ( c!=null && c.getCount() > 0 );
c.close();
return existed;
}
public CursorLoader getCursorLoader(int type) {
switch (type) {
case WingStore.TYPE_TWEET:
return new CursorLoader(getContext(), getContentUri(type), null, null,
null, WingStore.TweetColumns.TWEET_ID + " DESC");
case WingStore.TYPE_MENTION:
return new CursorLoader(getContext(), getContentUri(type), null, null,
null, WingStore.TweetColumns.TWEET_ID + " DESC");
case WingStore.TYPE_USER:
return new CursorLoader(getContext(), getContentUri(type), null, null,
null, WingStore.UserColumns.USER_ID + " DESC");
case WingStore.TYPE_FAVORITE:
return new CursorLoader(getContext(), getContentUri(type), null, null,
null, WingStore.FavoriteCollumns.TWEET_ID + " DESC");
case WingStore.TYPE_COMMON_TWEET:
return new CursorLoader(getContext(), getContentUri(type), null, null,
null, WingStore.CommonTweetColumns.TWEET_ID + " DESC");
}
return null;
}
}