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.net.Uri;
\r
16 import com.td.HistoryContentProvider;
\r
17 import com.td.db.Keyword;
\r
18 import com.td.db.Train;
\r
19 import com.td.utility.ConfUtil;
\r
20 import com.td.utility.DateUtil;
\r
21 import com.td.utility.Debug;
\r
22 import com.td.utility.Delay;
\r
23 import com.td.utility.EditPrefUtil;
\r
25 public class TrainTwitterAdapter extends TwitterAdapter {
\r
26 public static final long START_ID = Long.MAX_VALUE;
\r
27 public static final long ERROR_ID = START_ID - 1;
\r
28 public static final long DELAY_ID = START_ID - 2;
\r
30 private TrainDelayedService impl;
\r
31 private EditPrefUtil pref;
\r
33 private Calendar cal;
\r
35 public TrainTwitterAdapter(TrainDelayedService impl) {
\r
37 pref = new EditPrefUtil(impl.getContext());
\r
40 public void setCalender(Calendar cal) {
\r
45 public void searched(QueryResult result) {
\r
46 super.searched(result);
\r
49 int len = ConfUtil.getLen(pref);
\r
51 long min = Long.MAX_VALUE;
\r
54 Date minDate = null;
\r
55 Date maxDate = null;
\r
56 Date curDate = cal.getTime();
\r
58 long cur = curDate.getTime();
\r
59 long from = cur - len * 60 * 1000;
\r
63 List<Tweet> tweets = result.getTweets();
\r
64 for (Tweet tweet : tweets) {
\r
65 String text = tweet.getText();
\r
66 Date at = tweet.getCreatedAt();
\r
67 long l = at.getTime();
\r
72 if (!filter(text)) {
\r
73 //
\92x
\89\84\88È
\8aO
\82Ì
\8f\91\82«
\8d\9e\82Ý
\r
74 // Debug.d(this, "NO MATCH:" + text);
\r
89 if (minDate != null && maxDate != null) {
\r
93 String query = result.getQuery();
\r
95 List<Train> trains = impl.getTrains();
\r
96 if (trains != null) {
\r
98 for (Train t : trains) {
\r
99 if (query.equals(t.getSearchText())) {
\r
101 routeId = t.getId();
\r
105 if (train == null) {
\r
109 if (minDate != null && maxDate != null) {
\r
110 Debug.d(this, minDate.toString(), "-", maxDate.toString());
\r
112 Debug.d(this, "routeId=" + routeId);
\r
113 Debug.d(this, "diff=" + diff);
\r
114 Debug.d(this, "count=" + count);
\r
116 checkDelay(train, cal, count, len);
\r
118 insert(routeId, diff, count, 0);
\r
120 } catch (Exception e) {
\r
121 Debug.d(this, null, e);
\r
125 public boolean checkDelay(Train train, Calendar curCal, int count, int len) {
\r
126 int cntpmi = count / len;
\r
127 int h = ConfUtil.getHeight(pref);
\r
133 boolean isDelay = true;
\r
135 String data = ConfUtil.getDelay(pref);
\r
136 Delay[] delays = Delay.getInstances(data);
\r
137 Delay newDelay = null;
\r
139 Delay delay = Delay.search(delays, train.getId());
\r
140 if (delay != null) {
\r
141 Calendar dCal = DateUtil.getCalendar(delay.getYmd(), delay.getHm());
\r
142 long t = dCal.getTimeInMillis();
\r
143 int w = ConfUtil.getWidth(pref);
\r
144 long cur = curCal.getTimeInMillis();
\r
145 if (cur - t < w * 60 * 1000) {
\r
146 //
\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
147 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
151 //
\91O
\89ñ
\82Ì
\92x
\89\84\82©
\82ç
\81A
\8dÄ
\93x
\92x
\89\84\82ª
\94
\90¶
\r
152 Debug.t(impl.getContext(), train.getName() + "
\91O
\89ñ
\82Ì
\92x
\89\84\82©
\82ç
\81A
\8dÄ
\93x
\92x
\89\84\82ª
\94
\90¶");
\r
154 Date d = curCal.getTime();
\r
155 delay.setYmd(DateUtil.getYmd(d));
\r
156 delay.setHm(DateUtil.getHm(d));
\r
158 //
\90V
\8bK
\93o
\98^(
\92x
\89\84\94
\90¶)
\r
159 Date d = curCal.getTime();
\r
160 int ymd = DateUtil.getYmd(d);
\r
161 int hm = DateUtil.getHm(d);
\r
162 newDelay = new Delay(train.getId(), ymd, hm, 0, true);
\r
164 Debug.t(impl.getContext(), train.getName() + "
\90V
\8bK
\93o
\98^(
\92x
\89\84\94
\90¶)");
\r
166 TrainTwitterAdapter.insert(
\r
169 TrainTwitterAdapter.DELAY_ID, -1, (int)train.getId(),
\r
173 StringBuffer sb = Delay.getData(delays);
\r
174 if (newDelay != null) {
\r
175 Delay.setData(sb, newDelay);
\r
177 ConfUtil.setDelay(pref, sb.toString());
\r
180 //
\92x
\89\84\82ð
\92Ê
\92m
\r
181 if (impl != null) {
\r
182 impl.notificate(train.getName());
\r
189 private boolean filter(String text) {
\r
190 List<Keyword> keywords = impl.getKeywords();
\r
191 if (keywords == null) {
\r
195 for (Keyword keyword : keywords) {
\r
196 if (text.indexOf(keyword.getText()) >= 0) {
\r
203 private void insert(long routeId, long diff, int count, int status) {
\r
204 insert(impl.getContext(), cal, routeId, diff, count, status);
\r
207 public static void insert(Context context, Calendar cal, long routeId,
\r
208 long diff, long count, int status) {
\r
209 Date date = cal.getTime();
\r
211 int ymd = DateUtil.getYmd(date);
\r
212 int hm = DateUtil.getHm(date);
\r
213 int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
\r
215 Debug.d(context, "insert " + ymd, "/" + hm, "/" + w);
\r
217 ContentValues values = new ContentValues();
\r
218 values.put(HistoryContentProvider.Fields.ROUTE_ID, routeId);
\r
219 values.put(HistoryContentProvider.Fields.YMD, ymd);
\r
220 values.put(HistoryContentProvider.Fields.HM, hm);
\r
221 values.put(HistoryContentProvider.Fields.WEEK, w);
\r
222 values.put(HistoryContentProvider.Fields.PERIOD, diff);
\r
223 values.put(HistoryContentProvider.Fields.NUM, count);
\r
224 values.put(HistoryContentProvider.Fields.STATUS, status);
\r
226 Uri uri = context.getContentResolver().insert(
\r
227 HistoryContentProvider.CONTENT_URI, values);
\r
228 Debug.d(context, uri.toString());
\r
232 public void onException(TwitterException e, TwitterMethod method) {
\r
233 Debug.d(this, null, e);
\r
234 if (Debug.isDebug()) {
\r
235 insert(ERROR_ID, -1, -1, -1);
\r