X-Git-Url: http://www.average.org/gitweb/?p=WhereAmI.git;a=blobdiff_plain;f=src%2Forg%2Faverage%2Fwhereami%2FPhoneLog.java;h=3bb34d25effe10a1f194e0b0fce055adc7812265;hp=020690b89367e0fa1b2c986d82ce4cde70d84b15;hb=037cb8fe34228adc45247498dff852a1af8d304f;hpb=bfc8f9db47cf00565026d44bc27d84def51f4a94 diff --git a/src/org/average/whereami/PhoneLog.java b/src/org/average/whereami/PhoneLog.java index 020690b..3bb34d2 100644 --- a/src/org/average/whereami/PhoneLog.java +++ b/src/org/average/whereami/PhoneLog.java @@ -1,37 +1,141 @@ package org.average.whereami; -import org.average.whereami.CredentialStore; +import org.average.whereami.PersistentStore; -import com.google.api.client.extensions.android2.AndroidHttp; -import com.google.api.client.googleapis.GoogleHeaders; -import com.google.api.client.http.HttpRequest; -import com.google.api.client.http.HttpResponse; +import java.io.IOException; + +import com.google.api.client.googleapis.json.GoogleJsonResponseException; import com.google.api.client.http.HttpResponseException; -import com.google.api.client.http.HttpTransport; import com.google.api.client.util.DateTime; +import com.google.api.services.calendar.Calendar; +import com.google.api.services.calendar.CalendarRequest; +import com.google.api.services.calendar.model.CalendarList; +import com.google.api.services.calendar.model.CalendarListEntry; +import com.google.api.services.calendar.model.Event; +import com.google.api.services.calendar.model.Events; +import com.google.common.collect.Lists; -//import com.google.api.services.calendar.CalendarClient; -//import com.google.api.services.calendar.CalendarRequestInitializer; -//import com.google.api.services.calendar.CalendarUrl; -//import com.google.api.services.calendar.model.CalendarEntry; -//import com.google.api.services.calendar.model.CalendarFeed; -//import com.google.common.collect.Lists; - -import android.util.Log; -import android.os.SystemClock; import android.content.Context; -import android.content.SharedPreferences; +import android.content.res.Resources; +import android.util.Log; public final class PhoneLog extends Oracle { final String TAG = getClass().getName(); - public PhoneLog(CredentialStore store) { + private Calendar calendar; + + private PersistentStore store; + private String calendar_name; + private String peer_name; + private String calendar_id; + + public PhoneLog(final Resources res, final PersistentStore store) { + super(res, store); + this.store = store; + calendar_name = store.get("calendar_name"); + peer_name = store.get("peer_name"); + calendar_id = store.get("calendar_id"); + + calendar = Calendar.builder(httpTransport, jsonFactory) + .setHttpRequestInitializer(accessProtectedResource) + .setApplicationName("WhereAmI/1.0").build(); } @Override public final String getResult() { - SystemClock.sleep(5000); - return "Response from PhoneLog.getResult"; + try { + Log.v(TAG, "entering getResult"); + if (calendar_id == null || calendar_id == "") { + calendar_id = scanCalendars(calendar_name); + store.put("calendar_id", calendar_id); + } + return scanEvents(calendar_id, peer_name); + } catch (GoogleJsonResponseException e) { + Log.v(TAG, "GoogleJsonResponseException: " + e); + if (e.getResponse().getStatusCode() == 401) { + return authErrorMessage; + } else { + return e.getMessage(); + } + } catch (HttpResponseException e) { + Log.v(TAG, "HttpResponseException: " + e); + return e.getMessage(); + } catch (IOException e) { + e.printStackTrace(); + return e.getMessage(); + } + } + + private String scanCalendars(String calendar_name) + throws java.io.IOException { + String res = ""; + Log.v(TAG, "Entering scanCalendars for \"" + + calendar_name + "\""); + + CalendarList cl = calendar.calendarList().list().execute(); + while (true) { + String pt = cl.getNextPageToken(); + Log.v(TAG, "got cl with pt=" + pt); + for (CalendarListEntry le : cl.getItems()) { + Log.v(TAG, "entry " + le.getId() + ":\"" + + le.getSummary() + "\""); + if (le.getSummary().equals(calendar_name)) { + res = le.getId(); + //break; // get all in the log + } + } + if (pt != null && pt != "") { + cl = calendar.calendarList().list() + .setPageToken(pt).execute(); + } else { + break; + } + } + + return res; + } + + private String scanEvents(String calendar_id, String peer_name) + throws java.io.IOException { + Integer count = 0; + String res = "No records found"; + Log.v(TAG, "Entering scanEvents for \"" + + peer_name + "\" in \"" + calendar_id + "\""); + + Events events = calendar.events().list(calendar_id) + //.setOrderBy("starttime") + //.setSortOrder("descending") // this does not exist + .execute(); + while (true) { + String pt = events.getNextPageToken(); + Log.v(TAG, "got events with pt=" + pt); + for (Event event : events.getItems()) { + count++; + Log.v(TAG, "event " + + event.getStart() + " \"" + + event.getSummary() + "\""); + if ((event.getSummary().startsWith("Called ") || + event.getSummary().startsWith("Call from ")) && + event.getSummary().contains(peer_name)) { + res = makeMessage(event); + } + } + if (count < 100 && pt != null && pt != "") { + events = calendar.events().list(calendar_id) + .setPageToken(pt).execute(); + } else { + break; + } + } + + return res; + } + + private String makeMessage(Event event) { + Log.v(TAG, "Chosen event: " + event.getStatus() + + " start " + event.getStart() + + " end " + event.getEnd()); + return event.getId(); } }