/*
* Copyright 2012 Javier Pérez Pacheco and Francisco Díaz Rodriguez
* TweetTopics 2.0
* javielinux@gmail.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.javielinux.api.loaders;
import android.content.Context;
import android.database.CursorIndexOutOfBoundsException;
import com.android.dataframework.DataFramework;
import com.android.dataframework.Entity;
import com.javielinux.api.AsynchronousLoader;
import com.javielinux.api.request.TwitterUserDBRequest;
import com.javielinux.api.response.BaseResponse;
import com.javielinux.api.response.TwitterUserDBResponse;
import com.javielinux.database.EntityTweetUser;
import com.javielinux.infos.InfoTweet;
import com.javielinux.utils.CacheData;
import com.javielinux.utils.TweetTopicsUtils;
import com.javielinux.utils.Utils;
import java.util.ArrayList;
public class TwitterUserDBLoader extends AsynchronousLoader<BaseResponse> {
private TwitterUserDBRequest request;
public TwitterUserDBLoader(Context context, TwitterUserDBRequest request) {
super(context);
this.request = request;
}
@Override
public BaseResponse loadInBackground() {
TwitterUserDBResponse response = new TwitterUserDBResponse();
ArrayList<InfoTweet> infoTweets = new ArrayList<InfoTweet>();
if (request.getColumn() == TweetTopicsUtils.COLUMN_SEARCH) {
ArrayList<Entity> tweets;
try {
tweets = DataFramework.getInstance().getEntityList("tweets", "search_id = " + request.getSearchEntity().getId(), "date desc");
} catch (Exception exception) {
tweets = DataFramework.getInstance().getEntityList("tweets", "search_id = " + request.getSearchEntity().getId(), "date desc", "0," + Utils.MAX_ROW_BYSEARCH);
}
int pos = 0;
int count = 0;
boolean found = false;
int countHide = 0;
for (int i = 0; i < tweets.size(); i++) {
boolean delete_tweet = false;
if (i > 0) {
if (tweets.get(i).getLong("tweet_id") == tweets.get(i - 1).getLong("tweet_id")) {
delete_tweet = true;
}
}
if (delete_tweet) {
try {
tweets.get(i).delete();
} catch (Exception exception) {
exception.printStackTrace();
}
} else {
InfoTweet infoTweet = new InfoTweet(tweets.get(i));
if (!found && request.getSearchEntity().getValueLastId() >= tweets.get(i).getLong("tweet_id")) {
infoTweet.setLastRead(true);
pos = count;
found = true;
}
if (i >= tweets.size() - 1 && !found) {
infoTweet.setLastRead(true);
pos = count;
found = true;
}
infoTweet.setRead(found);
try {
infoTweets.add(infoTweet);
count++;
} catch (OutOfMemoryError er) {
i = tweets.size();
}
}
}
response.setInfoTweets(infoTweets);
response.setPosition(pos);
response.setCountHide(countHide);
} else if (request.getColumn() == TweetTopicsUtils.COLUMN_SAVED_TWEETS) {
ArrayList<Entity> tweets;
try {
tweets = DataFramework.getInstance().getEntityList("saved_tweets", "", "date desc");
} catch (Exception exception) {
tweets = DataFramework.getInstance().getEntityList("saved_tweets", "", "date desc", "0," + Utils.MAX_ROW_BYSEARCH);
}
for (int i = 0; i < tweets.size(); i++) {
boolean delete_tweet = false;
if (i > 0) {
if (tweets.get(i).getLong("tweet_id") == tweets.get(i - 1).getLong("tweet_id")) {
delete_tweet = true;
}
}
if (delete_tweet) {
try {
tweets.get(i).delete();
} catch (Exception exception) {
exception.printStackTrace();
}
} else {
InfoTweet infoTweet = new InfoTweet(tweets.get(i));
try {
infoTweets.add(infoTweet);
} catch (OutOfMemoryError er) {
i = tweets.size();
}
}
}
response.setInfoTweets(infoTweets);
response.setPosition(0);
response.setCountHide(0);
} else {
try {
EntityTweetUser entityTweetUser = new EntityTweetUser(request.getUserId(), request.getTypeUserColumn());
String whereType = "";
switch (request.getColumn()) {
case TweetTopicsUtils.COLUMN_TIMELINE:
whereType = " AND type_id = " + TweetTopicsUtils.TWEET_TYPE_TIMELINE;
break;
case TweetTopicsUtils.COLUMN_MENTIONS:
whereType = " AND type_id = " + TweetTopicsUtils.TWEET_TYPE_MENTIONS;
break;
case TweetTopicsUtils.COLUMN_DIRECT_MESSAGES:
whereType = " AND (type_id = " + TweetTopicsUtils.TWEET_TYPE_DIRECTMESSAGES + " OR type_id = " + TweetTopicsUtils.TWEET_TYPE_SENT_DIRECTMESSAGES + ")";
break;
}
ArrayList<Entity> tweets;
try {
tweets = DataFramework.getInstance().getEntityList("tweets_user", "user_tt_id = " + request.getUserId() + whereType, "date desc, has_more_tweets_down asc");
} catch (Exception exception) {
tweets = DataFramework.getInstance().getEntityList("tweets_user", "user_tt_id = " + request.getUserId() + whereType, "date desc, has_more_tweets_down asc", "0," + Utils.MAX_ROW_BYSEARCH);
}
int pos = 0;
int count = 0;
boolean found = false;
int countHide = 0;
for (int i = 0; i < tweets.size(); i++) {
boolean delete_tweet = false;
if (i > 0) {
if (tweets.get(i).getLong("tweet_id") == tweets.get(i - 1).getLong("tweet_id")) {
delete_tweet = true;
}
}
if (delete_tweet) {
try {
tweets.get(i).delete();
} catch (Exception exception) {
exception.printStackTrace();
}
} else {
boolean is_timeline = request.getColumn() == TweetTopicsUtils.COLUMN_TIMELINE;
if (is_timeline && CacheData.getInstance().isHideUserInText(tweets.get(i).getString("username").toLowerCase())) { // usuario
countHide++;
} else if (is_timeline && CacheData.getInstance().isHideWordInText(tweets.get(i).getString("text").toLowerCase())) { // palabra
countHide++;
} else if (is_timeline && CacheData.getInstance().isHideSourceInText(tweets.get(i).getString("source").toLowerCase())) { // fuente
countHide++;
} else {
InfoTweet infoTweet = new InfoTweet(tweets.get(i));
if (!found && entityTweetUser.getValueLastId() >= tweets.get(i).getLong("tweet_id")) {
infoTweet.setLastRead(true);
pos = count;
found = true;
}
if (i >= tweets.size() - 1 && !found) {
infoTweet.setLastRead(true);
pos = count;
found = true;
}
infoTweet.setRead(found);
try {
infoTweets.add(infoTweet);
/*if (r.hasMoreTweetDown()) {
response.add(new RowResponseList(RowResponseList.TYPE_MORE_TWEETS));
}*/
count++;
} catch (OutOfMemoryError er) {
i = tweets.size();
}
}
}
}
response.setInfoTweets(infoTweets);
response.setPosition(pos);
response.setCountHide(countHide);
} catch (CursorIndexOutOfBoundsException e) {
}
}
return response;
}
}