OSDN Git Service

設定機能追加
[train-delayed/source.git] / workspace / TrainDelayed / src / com / td / service / TrainTwitterAdapter.java
1 package com.td.service;\r
2 \r
3 import java.util.Calendar;\r
4 import java.util.Date;\r
5 import java.util.List;\r
6 \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
15 \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.EditPrefUtil;\r
23 \r
24 public class TrainTwitterAdapter extends TwitterAdapter {\r
25         public static final long START_ID = Long.MAX_VALUE;\r
26         public static final long ERROR_ID = START_ID - 1;\r
27         \r
28         private TrainDelayedServiceImpl context;\r
29         private EditPrefUtil pref;\r
30 \r
31         private Calendar cal;\r
32 \r
33         public TrainTwitterAdapter(TrainDelayedServiceImpl context) {\r
34                 this.context = context;\r
35                 pref = new EditPrefUtil(context);\r
36         }\r
37 \r
38         public void setCalender(Calendar cal) {\r
39                 this.cal = cal;\r
40         }\r
41 \r
42         @Override\r
43         public void searched(QueryResult result) {\r
44                 super.searched(result);\r
45 \r
46                 try {\r
47                         int len = ConfUtil.getLen(pref);\r
48                         \r
49                         long min = Long.MAX_VALUE;\r
50                         long max = 0;\r
51 \r
52                         Date minDate = null;\r
53                         Date maxDate = null;\r
54                         Date curDate = cal.getTime();\r
55 \r
56                         long cur = curDate.getTime();\r
57                         long from = cur - len * 60 * 1000;\r
58                         int count = 0;\r
59                         long diff = 0;\r
60 \r
61                         List<Tweet> tweets = result.getTweets();\r
62                         for (Tweet tweet : tweets) {\r
63                                 String text = tweet.getText();\r
64                                 Date at = tweet.getCreatedAt();\r
65                                 long l = at.getTime();\r
66 \r
67                                 if (l < from) {\r
68                                         continue;\r
69                                 }\r
70                                 if (!filter(text)) {\r
71                                         // \92x\89\84\88È\8aO\82Ì\8f\91\82«\8d\9e\82Ý\r
72                                         // Debug.d(this, "NO MATCH:" + text);\r
73                                         continue;\r
74                                 }\r
75                                 if (l < min) {\r
76                                         min = l;\r
77                                         minDate = at;\r
78                                 }\r
79                                 if (l > max) {\r
80                                         max = l;\r
81                                         maxDate = at;\r
82                                 }\r
83 \r
84                                 count++;\r
85                         }\r
86                         diff = 0;\r
87                         if (minDate != null && maxDate != null) {\r
88                                 diff = len;\r
89                         }\r
90 \r
91                         String query = result.getQuery();\r
92                         long routeId = -1;\r
93                         List<Train> trains = context.getTrains();\r
94                         if (trains != null) {\r
95                                 for (Train train : trains) {\r
96                                         if (query.equals(train.getSearchText())) {\r
97                                                 routeId = train.getId();\r
98                                                 break;\r
99                                         }\r
100                                 }\r
101 \r
102                                 if (minDate != null && maxDate != null) {\r
103                                         Debug.d(this, minDate.toString(), "-", maxDate.toString());\r
104                                 }\r
105                                 Debug.d(this, "routeId=" + routeId);\r
106                                 Debug.d(this, "diff=" + diff);\r
107                                 Debug.d(this, "count=" + count);\r
108 \r
109                                 insert(routeId, diff, count, 0);\r
110                         }\r
111                 } catch (Exception e) {\r
112                         Debug.d(this, null, e);\r
113                 }\r
114         }\r
115 \r
116         private boolean filter(String text) {\r
117                 List<Keyword> keywords = context.getKeywords();\r
118                 if (keywords == null) {\r
119                         return false;\r
120                 }\r
121 \r
122                 for (Keyword keyword : keywords) {\r
123                         if (text.indexOf(keyword.getText()) >= 0) {\r
124                                 return true;\r
125                         }\r
126                 }\r
127                 return false;\r
128         }\r
129 \r
130         private void insert(long routeId, long diff, int count, int status) {\r
131                 insert(context, cal, routeId, diff, count, status);\r
132         }\r
133         \r
134         public static void insert(Context context, Calendar cal, long routeId, long diff, int count, int status) {\r
135                 Date date = cal.getTime();\r
136 \r
137                 int ymd = DateUtil.getYmd(date);\r
138                 int hm = DateUtil.getHm(date);\r
139                 int w = cal.get(Calendar.DAY_OF_WEEK) - 1;\r
140 \r
141                 Debug.d(context, "insert " + ymd, "/" + hm, "/" + w);\r
142 \r
143                 ContentValues values = new ContentValues();\r
144                 values.put(HistoryContentProvider.Fields.ROUTE_ID, routeId);\r
145                 values.put(HistoryContentProvider.Fields.YMD, ymd);\r
146                 values.put(HistoryContentProvider.Fields.HM, hm);\r
147                 values.put(HistoryContentProvider.Fields.WEEK, w);\r
148                 values.put(HistoryContentProvider.Fields.PERIOD, diff);\r
149                 values.put(HistoryContentProvider.Fields.NUM, count);\r
150                 values.put(HistoryContentProvider.Fields.STATUS, status);\r
151 \r
152                 Uri uri = context.getContentResolver().insert(\r
153                                 HistoryContentProvider.CONTENT_URI, values);\r
154                 Debug.d(context, uri.toString());\r
155         }\r
156 \r
157         @Override\r
158         public void onException(TwitterException e, TwitterMethod method) {\r
159                 Debug.d(this, null, e);\r
160                 if (Debug.isDebug()){\r
161                         insert(ERROR_ID, -1, -1, -1);\r
162                 }\r
163         }\r
164 }\r