package de.bsd.zwitscher.helper;
import android.app.IntentService;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import de.bsd.zwitscher.TweetDB;
import de.bsd.zwitscher.TwitterHelper;
import de.bsd.zwitscher.account.Account;
import twitter4j.Paging;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import java.util.ArrayList;
import java.util.List;
/**
* Intent service to fetch timeline data from the server and store it in the
* Database
*
* @author Heiko W. Rupp
*/
public class FetchTimelinesService extends IntentService {
public FetchTimelinesService() {
super("FetchTimelinesService");
}
@Override
protected void onHandleIntent(Intent intent) {
Bundle bundle = intent.getExtras();
int[] listIds = bundle.getIntArray("listIds");
if (listIds==null) {
Log.e("Fetcher","No listIds passed, returning");
stopSelf();
return;
}
Account account = bundle.getParcelable("account");
int accountId = account.getId();
TwitterHelper th = new TwitterHelper(getApplicationContext(),account);
Twitter twitter = th.getTwitter();
TweetDB tdb = TweetDB.getInstance(getApplicationContext());
for (int listId : listIds ) {
List<Status> statuses;
long lastFetchedId = tdb.getLastFetched(accountId, listId);
Paging paging ;
if (lastFetchedId>0)
paging=new Paging(lastFetchedId);
else
paging=new Paging(1,200);
try {
switch (listId) {
case 0:
statuses = twitter.getHomeTimeline(paging);
break;
case 1:
statuses = twitter.getMentionsTimeline(paging);
break;
case 2:
Log.w("Fetcher","Direct messages are not supported");
statuses = new ArrayList<Status>(1);
break;
case 3:
statuses = twitter.getUserTimeline(paging);
break;
default:
statuses = twitter.getUserListStatuses(listId,paging);
}
if (statuses.size()>0) {
th.persistStatus(statuses, listId);
long newLast=-1;
// Update the 'since' id in the database
if (statuses.size()>0) {
newLast = statuses.get(0).getId(); // assumption is that twitter sends the newest (=highest id) first
tdb.updateOrInsertLastRead(accountId,listId,newLast);
Intent loadDone = new Intent("zwitscher.LoadDone");
loadDone.putExtra("listId",listId);
sendBroadcast(loadDone);
}
}
} catch (TwitterException e) {
e.printStackTrace(); // TODO: Customise this generated block
}
}
stopSelf();
}
}