/*
* RequestFriendsTimelineTask.java
*
* Copyright (C) 2005-2010 Tommi Laukkanen
* http://www.substanceofcode.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.substanceofcode.twitter.tasks;
import com.substanceofcode.tasks.AbstractTask;
import com.substanceofcode.twitter.TwitterApi;
import com.substanceofcode.twitter.TwitterController;
import com.substanceofcode.twitter.model.Status;
import java.util.Enumeration;
import java.util.Vector;
/**
* RequestFriendsTimelineTask
*
* @author Tommi Laukkanen (tlaukkanen at gmail dot com)
*/
public class RequestTimelineTask extends AbstractTask {
private TwitterController controller;
private TwitterApi api;
private int feedType;
private int page;
private String listName;
public final static int FEED_HOME = 0;
public final static int FEED_RESPONSES = 1;
public final static int FEED_ARCHIVE = 2;
public final static int FEED_PUBLIC = 3;
public final static int FEED_DIRECT = 4;
public final static int FEED_FAVOURITE = 5;
public final static int FEED_RETWEETS_OF_ME = 6;
public final static int FEED_CUSTOM = 7;
private static String lastHomeStatusID = "";
private static String lastRetweetsOfMeStatusID = "";
/**
* Creates a new instance of RequestFriendsTimelineTask.
* @param controller
* @param api
* @param feedType
*/
public RequestTimelineTask(
TwitterController controller,
TwitterApi api,
int feedType,
int page) {
this.controller = controller;
this.api = api;
this.feedType = feedType;
this.page = page;
}
/**
* Create request for specific URL of statuses.
*/
public RequestTimelineTask(
TwitterController controller,
TwitterApi api,
String listName) {
this.controller = controller;
this.api = api;
this.listName = listName;
this.page = 0;
this.feedType = FEED_CUSTOM;
}
public void doTask() {
Vector timeline = null;
if(feedType==FEED_HOME) {
timeline = api.requestHomeTimeline( page );
if(timeline!=null && page==0) {
Status lastStatus = (Status) timeline.lastElement();
String newStatusID = lastStatus.getId();
if(lastHomeStatusID.length()>0 &&
!lastHomeStatusID.equals(newStatusID)) {
controller.playInfoSound();
}
lastHomeStatusID = newStatusID;
}
if(page<2) {
controller.setHomeTimeline( timeline );
} else {
Vector homeTimeline = controller.getHomeTimeline();
timeline = appendToTimeline(homeTimeline, timeline);
controller.setHomeTimeline( timeline );
}
} else if(feedType==FEED_ARCHIVE) {
timeline = api.requestUserTimeline();
controller.setUserTimeline( timeline );
} else if(feedType==FEED_RESPONSES) {
timeline = api.requestResponsesTimeline();
controller.setResponsesTimeline( timeline );
} else if(feedType==FEED_PUBLIC) {
timeline = api.requestPublicTimeline();
controller.setPublicTimeline( timeline );
} else if(feedType==FEED_DIRECT) {
timeline = api.requestDirectTimeline();
controller.setDirectTimeline(timeline);
} else if(feedType==FEED_FAVOURITE) {
timeline = api.requestFavouriteTimeline();
controller.setFavouriteTimeline(timeline);
} else if(feedType==FEED_RETWEETS_OF_ME) {
timeline = api.requestRetweetsOfMe( page );
if(timeline!=null && page==0) {
Status lastStatus = (Status) timeline.lastElement();
String newStatusID = lastStatus.getId();
if(lastRetweetsOfMeStatusID.length()>0 &&
!lastRetweetsOfMeStatusID.equals(newStatusID)) {
controller.playInfoSound();
}
lastRetweetsOfMeStatusID = newStatusID;
}
if(page<2) {
controller.setRetweetsOfMeTimeline( timeline );
} else {
Vector retweetsOfMeTimeline = controller.getRetweetsOfMeTimeline();
timeline = appendToTimeline(retweetsOfMeTimeline, timeline);
controller.setRetweetsOfMeTimeline(timeline);
}
} else if(feedType==FEED_CUSTOM) {
timeline = api.requestListStatuses( this.listName );
controller.showTimeline(timeline);
}
boolean resetVerticalScrolling = true;
if(page>1) {
resetVerticalScrolling = false;
}
controller.showTimeline( timeline );
}
private Vector appendToTimeline(Vector original, Vector added) {
Vector newVector = new Vector();
Enumeration orig = original.elements();
while(orig.hasMoreElements()) {
newVector.addElement(orig.nextElement());
}
if(added!=null) {
Enumeration en = added.elements();
while(en.hasMoreElements()) {
Status stat = (Status)en.nextElement();
newVector.addElement( stat );
}
}
return newVector;
}
}