package com.vaguehope.onosendai.provider.twitter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import com.vaguehope.onosendai.C;
import com.vaguehope.onosendai.config.Account;
import com.vaguehope.onosendai.model.Meta;
import com.vaguehope.onosendai.model.Tweet;
import com.vaguehope.onosendai.model.TweetList;
import com.vaguehope.onosendai.util.LogWrapper;
class SearchFeed implements TwitterFeed {
private static final LogWrapper LOG = new LogWrapper("TS");
private final String term;
public SearchFeed (final String term) {
this.term = term;
}
@Override
public TweetList getTweets (final Account account, final Twitter t, final long sinceId, final boolean hdMedia, final Collection<Meta> extraMetas) throws TwitterException {
final List<Tweet> tweets = new ArrayList<Tweet>();
final List<Tweet> quotedTweets = new ArrayList<Tweet>();
final int page = 1; // First page is 1.
Query query = new Query()
.query(this.term)
.count(C.TWEET_FETCH_PAGE_SIZE)
.resultType(Query.RECENT);
if (sinceId > 0) query.setSinceId(sinceId);
QueryResult result;
do {
result = t.search(query);
final List<Status> resTweets = result.getTweets();
LOG.i("Page %d of query '%s' contains %d items.", page, this.term, resTweets.size());
TwitterUtils.addTweetsToList(tweets, account, resTweets, t.getId(), hdMedia, extraMetas, quotedTweets);
}
while (tweets.size() < C.TWITTER_FETCH_COUNT_SEARCH && (query = result.nextQuery()) != null); // NOSONAR I am ok with this inner assignment.
return new TweetList(tweets, quotedTweets);
}
@Override
public String toString () {
return "search{" + this.term + "}";
}
}