]> www.average.org Git - WhereAmI.git/blob - src/org/average/whereami/PhoneLog.java
don't try nonexistent calendar
[WhereAmI.git] / src / org / average / whereami / PhoneLog.java
1 package org.average.whereami;
2
3 import org.average.whereami.PersistentStore;
4
5 import java.io.IOException;
6
7 import com.google.api.client.googleapis.json.GoogleJsonResponseException;
8 import com.google.api.client.http.HttpResponseException;
9 import com.google.api.client.util.DateTime;
10 import com.google.api.services.calendar.Calendar;
11 import com.google.api.services.calendar.CalendarRequest;
12 import com.google.api.services.calendar.model.CalendarList;
13 import com.google.api.services.calendar.model.CalendarListEntry;
14 import com.google.api.services.calendar.model.Event;
15 import com.google.api.services.calendar.model.Events;
16 import com.google.common.collect.Lists;
17
18 import android.content.Context;
19 import android.content.res.Resources;
20 import android.util.Log;
21
22 public final class PhoneLog extends Oracle {
23
24         final String TAG = getClass().getName();
25
26         private Calendar calendar;
27
28         private PersistentStore store;
29         private String calendar_name;
30         private String peer_name;
31         private String calendar_id;
32         private String nocalendar;
33
34         public PhoneLog(final Resources res, final PersistentStore store) {
35                 super(res, store);
36                 this.store = store;
37                 nocalendar = res.getString(R.string.nocalendar);
38                 calendar_name = store.get("calendar_name");
39                 peer_name = store.get("peer_name");
40                 calendar_id = store.get("calendar_id");
41
42                 calendar = Calendar.builder(httpTransport, jsonFactory)
43                         .setHttpRequestInitializer(accessProtectedResource)
44                         .setApplicationName("WhereAmI/1.0").build();
45         }
46
47         @Override
48         public final String getResult() {
49                 try {
50                         Log.v(TAG, "entering getResult");
51                         if (calendar_id == null || calendar_id == "") {
52                                 calendar_id = scanCalendars(calendar_name);
53                                 store.put("calendar_id", calendar_id);
54                         }
55                         if (calendar_id == null || calendar_id == "") {
56                                 return scanEvents(calendar_id, peer_name);
57                         } else {
58                                 return nocalendar + " \"" +
59                                         calendar_name + "\"";
60                         }
61                 } catch (GoogleJsonResponseException e) {
62                         Log.v(TAG, "GoogleJsonResponseException: " + e);
63                         if (e.getResponse().getStatusCode() == 401) {
64                                 return authErrorMessage;
65                         } else {
66                                 return e.getMessage();
67                         }
68                 } catch (HttpResponseException e) {
69                         Log.v(TAG, "HttpResponseException: " + e);
70                         return e.getMessage();
71                 } catch (IOException e) {
72                         e.printStackTrace();
73                         return e.getMessage();
74                 }
75         }
76
77         private String scanCalendars(String calendar_name)
78                                                 throws java.io.IOException {
79                 String res = "";
80                 Log.v(TAG, "Entering scanCalendars for \"" +
81                         calendar_name + "\"");
82
83                 CalendarList cl = calendar.calendarList().list().execute();
84                 while (true) {
85                         String pt = cl.getNextPageToken();
86                         Log.v(TAG, "got cl with pt=" + pt);
87                         for (CalendarListEntry le : cl.getItems()) {
88                                 Log.v(TAG, "entry " + le.getId() + ":\"" +
89                                         le.getSummary() + "\"");
90                                 if (le.getSummary().equals(calendar_name)) {
91                                         res = le.getId();
92                                         //break; // get all in the log
93                                 }
94                         }
95                         if (pt != null && pt != "") {
96                                 cl = calendar.calendarList().list()
97                                         .setPageToken(pt).execute();
98                         } else {
99                                 break;
100                         }
101                 }
102
103                 return res;
104         }
105
106         private String scanEvents(String calendar_id, String peer_name)
107                                                 throws java.io.IOException {
108                 Integer count = 0;
109                 String res = "No records found";
110                 Log.v(TAG, "Entering scanEvents for \"" +
111                         peer_name + "\" in \"" + calendar_id + "\"");
112
113                 Events events = calendar.events().list(calendar_id)
114                         //.setOrderBy("starttime")
115                         //.setSortOrder("descending") // this does not exist
116                         .execute();
117                 while (true) {
118                         String pt = events.getNextPageToken();
119                         Log.v(TAG, "got events with pt=" + pt);
120                         for (Event event : events.getItems()) {
121                                 count++;
122                                 Log.v(TAG, "event " +
123                                         event.getStart() + " \"" +
124                                         event.getSummary() + "\"");
125                                 if ((event.getSummary().startsWith("Called ") ||
126                                      event.getSummary().startsWith("Call from ")) &&
127                                     event.getSummary().contains(peer_name)) {
128                                         res = makeMessage(event);
129                                 }
130                         }
131                         if (count < 100 && pt != null && pt != "") {
132                                 events = calendar.events().list(calendar_id)
133                                         .setPageToken(pt).execute();
134                         } else {
135                                 break;
136                         }
137                 }
138
139                 return res;
140         }
141
142         private String makeMessage(Event event) {
143                 Log.v(TAG, "Chosen event: " + event.getStatus() +
144                         " start " + event.getStart() +
145                         " end " + event.getEnd());
146                 return event.getId();
147         }
148 }