package info.justaway.fragment.main.tab;
import android.os.AsyncTask;
import android.view.View;
import java.util.Collections;
import java.util.Comparator;
import info.justaway.event.model.StreamingDestroyMessageEvent;
import info.justaway.model.Row;
import info.justaway.model.TabManager;
import info.justaway.model.TwitterManager;
import info.justaway.settings.BasicSettings;
import twitter4j.DirectMessage;
import twitter4j.Paging;
import twitter4j.ResponseList;
import twitter4j.Twitter;
public class DirectMessagesFragment extends BaseFragment {
/**
* このタブを表す固有のID、ユーザーリストで正数を使うため負数を使う
*/
public long getTabId() {
return TabManager.DIRECT_MESSAGES_TAB_ID;
}
/**
* このタブに表示するツイートの定義
* @param row ストリーミングAPIから受け取った情報(ツイートやDM)
* @return trueは表示しない、falseは表示する
*/
@Override
protected boolean isSkip(Row row) {
return !row.isDirectMessage();
}
@Override
protected void taskExecute() {
new DirectMessagesTask().execute();
}
private class DirectMessagesTask extends AsyncTask<Void, Void, ResponseList<DirectMessage>> {
@Override
protected ResponseList<DirectMessage> doInBackground(Void... params) {
try {
Twitter twitter = TwitterManager.getTwitter();
// 受信したDM
Paging directMessagesPaging = new Paging();
if (mDirectMessagesMaxId > 0 && !mReloading) {
directMessagesPaging.setMaxId(mDirectMessagesMaxId - 1);
directMessagesPaging.setCount(BasicSettings.getPageCount() / 2);
} else {
directMessagesPaging.setCount(10);
}
ResponseList<DirectMessage> directMessages = twitter.getDirectMessages(directMessagesPaging);
for (DirectMessage directMessage : directMessages) {
if (mDirectMessagesMaxId <= 0L || mDirectMessagesMaxId > directMessage.getId()) {
mDirectMessagesMaxId = directMessage.getId();
}
}
// 送信したDM
Paging sentDirectMessagesPaging = new Paging();
if (mSentDirectMessagesMaxId > 0 && !mReloading) {
sentDirectMessagesPaging.setMaxId(mSentDirectMessagesMaxId - 1);
sentDirectMessagesPaging.setCount(BasicSettings.getPageCount() / 2);
} else {
sentDirectMessagesPaging.setCount(10);
}
ResponseList<DirectMessage> sentDirectMessages = twitter.getSentDirectMessages(sentDirectMessagesPaging);
for (DirectMessage directMessage : sentDirectMessages) {
if (mSentDirectMessagesMaxId <= 0L || mSentDirectMessagesMaxId > directMessage.getId()) {
mSentDirectMessagesMaxId = directMessage.getId();
}
}
directMessages.addAll(sentDirectMessages);
// 日付でソート
Collections.sort(directMessages, new Comparator<DirectMessage>() {
@Override
public int compare(DirectMessage arg0, DirectMessage arg1) {
return arg1.getCreatedAt().compareTo(
arg0.getCreatedAt());
}
});
return directMessages;
} catch (OutOfMemoryError e) {
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(ResponseList<DirectMessage> statuses) {
mFooter.setVisibility(View.GONE);
if (statuses == null || statuses.size() == 0) {
mReloading = false;
mPullToRefreshLayout.setRefreshComplete();
mListView.setVisibility(View.VISIBLE);
return;
}
if (mReloading) {
clear();
for (DirectMessage status : statuses) {
mAdapter.add(Row.newDirectMessage(status));
}
mReloading = false;
mPullToRefreshLayout.setRefreshComplete();
} else {
for (DirectMessage status : statuses) {
mAdapter.extensionAdd(Row.newDirectMessage(status));
}
mAutoLoader = true;
mListView.setVisibility(View.VISIBLE);
}
}
}
/**
* DM削除通知
* @param event DMのID
*/
public void onEventMainThread(StreamingDestroyMessageEvent event) {
mAdapter.removeDirectMessage(event.getStatusId());
}
}