1 package com.td.service;
\r
3 import java.util.Calendar;
\r
4 import java.util.Date;
\r
5 import java.util.List;
\r
7 import twitter4j.QueryResult;
\r
8 import twitter4j.Tweet;
\r
9 import twitter4j.TwitterAdapter;
\r
10 import twitter4j.TwitterException;
\r
11 import twitter4j.TwitterMethod;
\r
12 import android.content.ContentValues;
\r
13 import android.content.Context;
\r
14 import android.content.Intent;
\r
15 import android.net.Uri;
\r
17 import com.td.HistoryContentProvider;
\r
18 import com.td.broadcast.DelayReceiver;
\r
19 import com.td.db.Keyword;
\r
20 import com.td.db.Train;
\r
21 import com.td.utility.ConfUtil;
\r
22 import com.td.utility.DateUtil;
\r
23 import com.td.utility.Debug;
\r
24 import com.td.utility.Delay;
\r
25 import com.td.utility.EditPrefUtil;
\r
26 import com.td.utility.ExceptionUtil;
\r
28 public class TrainTwitterAdapter extends TwitterAdapter {
\r
29 public static final long START_ID = Long.MAX_VALUE;
\r
30 public static final long ERROR_ID = START_ID - 1;
\r
31 public static final long DELAY_ID = START_ID - 2;
\r
33 private TrainDelayedService impl;
\r
34 private EditPrefUtil pref;
\r
36 private Calendar cal;
\r
38 public TrainTwitterAdapter(TrainDelayedService impl) {
\r
40 pref = new EditPrefUtil(impl.getContext());
\r
43 public void setCalender(Calendar cal) {
\r
48 public void searched(QueryResult result) {
\r
49 super.searched(result);
\r
52 int len = ConfUtil.getLen(pref);
\r
54 long min = Long.MAX_VALUE;
\r
57 Date minDate = null;
\r
58 Date maxDate = null;
\r
59 Date curDate = cal.getTime();
\r
61 long cur = curDate.getTime();
\r
62 long from = cur - len * 60 * 1000;
\r
66 List<Tweet> tweets = result.getTweets();
\r
67 for (Tweet tweet : tweets) {
\r
68 String text = tweet.getText();
\r
69 Date at = tweet.getCreatedAt();
\r
70 long l = at.getTime();
\r
75 if (!filter(text)) {
\r
76 //
\92x
\89\84\88È
\8aO
\82Ì
\8f\91\82«
\8d\9e\82Ý
\r
77 // Debug.d(this, "NO MATCH:" + text);
\r
92 if (minDate != null && maxDate != null) {
\r
96 String query = result.getQuery();
\r
98 List<Train> trains = impl.getTrains();
\r
99 if (trains != null) {
\r
100 Train train = null;
\r
101 for (Train t : trains) {
\r
102 if (query.equals(t.getSearchText())) {
\r
104 routeId = t.getId();
\r
108 if (train == null) {
\r
112 if (minDate != null && maxDate != null) {
\r
113 Debug.d(this, minDate.toString(), "-", maxDate.toString());
\r
115 if (ExceptionUtil.getInstance().isDebug(ExceptionUtil.TAG_E90)) {
\r
119 Debug.d(this, "routeId=" + routeId);
\r
120 Debug.d(this, "diff=" + diff);
\r
121 Debug.d(this, "count=" + count);
\r
123 checkDelay(train, cal, count, len);
\r
125 insert(routeId, diff, count, 0);
\r
127 } catch (Exception e) {
\r
128 Debug.d(this, null, e);
\r
132 public boolean checkDelay(Train train, Calendar curCal, int count, int len) {
\r
133 int cntpmi = count / len;
\r
134 int h = ConfUtil.getHeight(pref);
\r
140 boolean isDelay = true;
\r
142 String data = ConfUtil.getDelay(pref);
\r
143 Delay[] delays = Delay.getInstances(data);
\r
144 Delay newDelay = null;
\r
146 Delay delay = Delay.search(delays, train.getId());
\r
147 if (delay != null) {
\r
148 Calendar dCal = DateUtil.getCalendar(delay.getYmd(), delay.getHm());
\r
149 long t = dCal.getTimeInMillis();
\r
150 int w = ConfUtil.getWidth(pref);
\r
151 long cur = curCal.getTimeInMillis();
\r
152 if (cur - t < w * 60 * 1000) {
\r
153 //
\8dÅ
\8cã
\82Ì
\92x
\89\84\82©
\82ç
\8e\9e\8aÔ
\82ª
\8co
\82Á
\82Ä
\82¢
\82È
\82¢(
\92x
\89\84\82Ì
\8e\9e\8aÔ
\82Í
\8dX
\90V
\82·
\82é)
\r
154 Debug.t(impl.getContext(), train.getName() + "
\8dÅ
\8cã
\82Ì
\92x
\89\84\82©
\82ç
\8e\9e\8aÔ
\82ª
\8co
\82Á
\82Ä
\82¢
\82È
\82¢");
\r
158 //
\91O
\89ñ
\82Ì
\92x
\89\84\82©
\82ç
\81A
\8dÄ
\93x
\92x
\89\84\82ª
\94
\90¶
\r
159 Debug.t(impl.getContext(), train.getName() + "
\91O
\89ñ
\82Ì
\92x
\89\84\82©
\82ç
\81A
\8dÄ
\93x
\92x
\89\84\82ª
\94
\90¶");
\r
161 Date d = curCal.getTime();
\r
162 delay.setYmd(DateUtil.getYmd(d));
\r
163 delay.setHm(DateUtil.getHm(d));
\r
165 //
\90V
\8bK
\93o
\98^(
\92x
\89\84\94
\90¶)
\r
166 Date d = curCal.getTime();
\r
167 int ymd = DateUtil.getYmd(d);
\r
168 int hm = DateUtil.getHm(d);
\r
169 newDelay = new Delay(train.getId(), ymd, hm, 0, true);
\r
171 Debug.t(impl.getContext(), train.getName() + "
\90V
\8bK
\93o
\98^(
\92x
\89\84\94
\90¶)");
\r
173 TrainTwitterAdapter.insert(
\r
176 TrainTwitterAdapter.DELAY_ID, -1, (int)train.getId(),
\r
180 StringBuffer sb = Delay.getData(delays);
\r
181 if (newDelay != null) {
\r
182 Delay.setData(sb, newDelay);
\r
184 ConfUtil.setDelay(pref, sb.toString());
\r
187 //
\92x
\89\84\82ð
\92Ê
\92m
\r
188 if (impl != null) {
\r
189 impl.notificate(train.getName());
\r
191 Intent intent = new Intent(DelayReceiver.DELAY);
\r
192 intent.putExtra("ID", train.getId());
\r
193 impl.getContext().sendBroadcast(intent);
\r
200 private boolean filter(String text) {
\r
201 List<Keyword> keywords = impl.getKeywords();
\r
202 if (keywords == null) {
\r
206 for (Keyword keyword : keywords) {
\r
207 if (text.indexOf(keyword.getText()) >= 0) {
\r
214 private void insert(long routeId, long diff, int count, int status) {
\r
215 insert(impl.getContext(), cal, routeId, diff, count, status);
\r
218 public static void insert(Context context, Calendar cal, long routeId,
\r
219 long diff, long count, int status) {
\r
220 Date date = cal.getTime();
\r
222 int ymd = DateUtil.getYmd(date);
\r
223 int hm = DateUtil.getHm(date);
\r
224 int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
\r
226 Debug.d(context, "insert " + ymd, "/" + hm, "/" + w);
\r
228 ContentValues values = new ContentValues();
\r
229 values.put(HistoryContentProvider.Fields.ROUTE_ID, routeId);
\r
230 values.put(HistoryContentProvider.Fields.YMD, ymd);
\r
231 values.put(HistoryContentProvider.Fields.HM, hm);
\r
232 values.put(HistoryContentProvider.Fields.WEEK, w);
\r
233 values.put(HistoryContentProvider.Fields.PERIOD, diff);
\r
234 values.put(HistoryContentProvider.Fields.NUM, count);
\r
235 values.put(HistoryContentProvider.Fields.STATUS, status);
\r
237 Uri uri = context.getContentResolver().insert(
\r
238 HistoryContentProvider.CONTENT_URI, values);
\r
239 Debug.d(context, uri.toString());
\r
243 public void onException(TwitterException e, TwitterMethod method) {
\r
244 Debug.d(this, null, e);
\r
245 if (Debug.isDebug()) {
\r
246 insert(ERROR_ID, -1, -1, -1);
\r