package com.tuit.ar.models.timeline;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONTokener;
import com.tuit.ar.api.TwitterAccount;
import com.tuit.ar.api.TwitterRequest;
import com.tuit.ar.api.request.Options;
import com.tuit.ar.models.DirectMessage;
import com.tuit.ar.models.Timeline;
public class DirectMessages extends Timeline {
static private HashMap<TwitterAccount, DirectMessages> instances = new HashMap<TwitterAccount, DirectMessages>();
private ArrayList<DirectMessage> tweets;
protected DirectMessages(TwitterAccount account) {
super(account);
tweets = com.tuit.ar.models.DirectMessage.select("belongs_to_user = ?", new String[] { String.valueOf(account.getUser().getId()) }, null, null, "id DESC", null);
if (tweets.size() > 0) {
newestTweet = tweets.get(0).getId();
}
}
@Override
protected Options getTimeline() {
return Options.DIRECT_MESSAGES;
}
public static com.tuit.ar.models.timeline.DirectMessages getInstance(TwitterAccount account) {
if (instances.containsKey(account) == false) instances.put(account, new DirectMessages(account));
return instances.get(account);
}
public void requestHasFinished(TwitterRequest request) {
if (!request.getUrl().equals(this.getTimeline())) return;
try {
JSONArray tweets = new JSONArray(new JSONTokener(request.getResponse()));
int c = tweets.length();
if (c > 0) {
for (int i = c-1; i >= 0; i--) {
DirectMessage tweet = new DirectMessage(tweets.getJSONObject(i));
tweet.setBelongsToUser(account.getUser().getId());
tweet.replace();
if (i == 0)
newestTweet = tweet.getId();
this.tweets.add(0, tweet);
}
if (this.tweets.size() > MAX_SIZE) {
this.tweets.subList(MAX_SIZE, this.tweets.size()).clear();
}
timelineChanged();
}
} catch (Exception e) {
failedToUpdate(e.getLocalizedMessage());
}
finishedUpdate();
}
public ArrayList<DirectMessage> getTweets() {
return tweets;
}
public Collection<DirectMessage> getTweetsNewerThan(DirectMessage directMessage) {
return tweets.subList(0, tweets.indexOf(directMessage));
}
public void deleteTweet(DirectMessage directMessage) {
tweets.remove(directMessage);
timelineChanged();
}
}