package net.miz_hi.smileessence.model.statuslist.timeline.impl;
import net.miz_hi.smileessence.Client;
import net.miz_hi.smileessence.model.status.IStatusModel;
import net.miz_hi.smileessence.model.status.tweet.TweetModel;
import net.miz_hi.smileessence.model.statuslist.timeline.Timeline;
import net.miz_hi.smileessence.preference.EnumPreferenceKey;
import net.miz_hi.smileessence.task.impl.SearchTask;
import net.miz_hi.smileessence.twitter.ResponseConverter;
import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Status;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Future;
public class SearchTimeline extends Timeline
{
static final String LANG = "ja";
static final int COUNT = Client.<Integer>getPreferenceValue(EnumPreferenceKey.REQUEST_COUNT);
String queryString;
Query query;
long maxId;
long minId;
public SearchTimeline(String queryString)
{
this.queryString = queryString;
}
private void initQuery()
{
query = new Query();
query.setQuery(queryString);
query.setLang(LANG);
query.setCount(COUNT);
query.setResultType(Query.RECENT);
}
@Override
public Future loadNewer(Runnable callback)
{
initQuery();
if (getStatusList().length > 0)
{
maxId = ((TweetModel) getStatus(0)).statusId;
query.setSinceId(maxId);
return new SearchTask(Client.getMainAccount(), query)
{
@Override
public void onPostExecute(QueryResult result)
{
maxId = result.getMaxId();
List<Status> statuses = result.getTweets();
Collections.reverse(statuses);
for (Status status : statuses)
{
if (!Client.<Boolean>getPreferenceValue(EnumPreferenceKey.SEARCH_INCLUDE_RT) && status.isRetweet())
{
continue;
}
addToTop(ResponseConverter.convert(status));
}
applyForce();
}
}.setCallBack(callback).callAsync();
}
else
{
return new SearchTask(Client.getMainAccount(), query)
{
@Override
public void onPostExecute(QueryResult result)
{
List<Status> statuses = result.getTweets();
Collections.reverse(statuses);
for (Status status : statuses)
{
if (!Client.<Boolean>getPreferenceValue(EnumPreferenceKey.SEARCH_INCLUDE_RT) && status.isRetweet())
{
continue;
}
addToTop(ResponseConverter.convert(status));
}
applyForce();
}
}.setCallBack(callback).callAsync();
}
}
@Override
public Future loadOlder(Runnable callback)
{
initQuery();
if (getStatusList().length > 0)
{
minId = ((TweetModel) getStatus(getStatusList().length - 1)).statusId;
query.setMaxId(minId);
return new SearchTask(Client.getMainAccount(), query)
{
@Override
public void onPostExecute(QueryResult result)
{
minId = result.getSinceId();
List<Status> statuses = result.getTweets();
for (Status status : statuses)
{
if (!Client.<Boolean>getPreferenceValue(EnumPreferenceKey.SEARCH_INCLUDE_RT) && status.isRetweet())
{
continue;
}
addToBottom(ResponseConverter.convert(status));
}
applyForce();
}
}.setCallBack(callback).callAsync();
}
else
{
return new SearchTask(Client.getMainAccount(), query)
{
@Override
public void onPostExecute(QueryResult result)
{
List<Status> statuses = result.getTweets();
for (Status status : statuses)
{
if (!Client.<Boolean>getPreferenceValue(EnumPreferenceKey.SEARCH_INCLUDE_RT) && status.isRetweet())
{
continue;
}
addToBottom(ResponseConverter.convert(status));
}
applyForce();
}
}.setCallBack(callback).callAsync();
}
}
@Override
public boolean checkStatus(IStatusModel status)
{
return status instanceof TweetModel;
}
}