Skip to content

Commit

Permalink
Improved synchronization issues with sync on save
Browse files Browse the repository at this point in the history
  • Loading branch information
sbosley committed Jul 16, 2011
1 parent 0b664c2 commit e6f9e0b
Show file tree
Hide file tree
Showing 4 changed files with 111 additions and 90 deletions.
Expand Up @@ -64,7 +64,7 @@ public static Filter filterFromList(Context context, StoreObject list) {
MetadataCriteria.withKey(GtasksMetadata.METADATA_KEY),
TaskCriteria.activeAndVisible(),
GtasksMetadata.LIST_ID.eq(list.getValue(GtasksList.REMOTE_ID)))).orderBy(
Order.asc(Functions.cast(GtasksMetadata.ORDER, "LONG"))), //$NON-NLS-1$
Order.asc(Functions.cast(GtasksMetadata.ORDER, "LONG"))).groupBy(Task.ID), //$NON-NLS-1$
values);
filter.listingIcon = ((BitmapDrawable)context.getResources().getDrawable(R.drawable.gtasks_icon)).getBitmap();
filter.customTaskList = new ComponentName(ContextManager.getContext(), GtasksListActivity.class);
Expand Down
Expand Up @@ -11,11 +11,16 @@
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.activity.DraggableTaskListActivity;
import com.todoroo.astrid.gtasks.sync.GtasksSyncOnSaveService;

public class GtasksListActivity extends DraggableTaskListActivity {

@Autowired private GtasksTaskListUpdater gtasksTaskListUpdater;

@Autowired private GtasksSyncOnSaveService gtasksSyncOnSaveService;

@Autowired private GtasksMetadataService gtasksMetadataService;

@Override
protected IntegerProperty getIndentProperty() {
return GtasksMetadata.INDENT;
Expand Down Expand Up @@ -43,6 +48,7 @@ public void drop(int from, int to) {
long targetTaskId = taskAdapter.getItemId(from);
long destinationTaskId = taskAdapter.getItemId(to);
gtasksTaskListUpdater.moveTo(targetTaskId, destinationTaskId);
gtasksSyncOnSaveService.triggerMoveForMetadata(gtasksMetadataService.getTaskMetadata(targetTaskId));
loadTaskListContent(true);
}
};
Expand All @@ -52,13 +58,15 @@ public void drop(int from, int to) {
public void swipeRight(int which) {
long targetTaskId = taskAdapter.getItemId(which);
gtasksTaskListUpdater.indent(targetTaskId, 1);
gtasksSyncOnSaveService.triggerMoveForMetadata(gtasksMetadataService.getTaskMetadata(targetTaskId));
loadTaskListContent(true);
}

@Override
public void swipeLeft(int which) {
long targetTaskId = taskAdapter.getItemId(which);
gtasksTaskListUpdater.indent(targetTaskId, -1);
gtasksSyncOnSaveService.triggerMoveForMetadata(gtasksMetadataService.getTaskMetadata(targetTaskId));
loadTaskListContent(true);
}
};
Expand Down
44 changes: 35 additions & 9 deletions astrid/plugin-src/com/todoroo/astrid/gtasks/api/GtasksService.java
Expand Up @@ -4,6 +4,7 @@

import com.google.api.client.extensions.android2.AndroidHttp;
import com.google.api.client.googleapis.auth.oauth2.draft10.GoogleAccessProtectedResource;
import com.google.api.client.http.HttpResponseException;
import com.google.api.client.json.jackson.JacksonFactory;
import com.google.api.services.tasks.v1.Tasks;
import com.google.api.services.tasks.v1.Tasks.TasksOperations.Insert;
Expand All @@ -12,6 +13,7 @@
import com.google.api.services.tasks.v1.model.Task;
import com.google.api.services.tasks.v1.model.TaskList;
import com.google.api.services.tasks.v1.model.TaskLists;
import com.todoroo.astrid.gtasks.auth.GtasksTokenValidator;

/**
* Wrapper around the official Google Tasks API to simplify common operations. In the case
Expand All @@ -22,28 +24,39 @@
@SuppressWarnings("nls")
public class GtasksService {
private Tasks service;
private GoogleAccessProtectedResource accessProtectedResource;
private String token;

private static final String API_KEY = "AIzaSyCIYZTBo6haRHxmiplZsfYdagFEpaiFnAk"; // non-production API key

public static final String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/tasks";

public GtasksService(String authToken) {
try {
authenticate(authToken);
} catch (Exception e) {
e.printStackTrace();
}
authenticate(authToken);
}

public void authenticate(String authToken) throws IOException {

GoogleAccessProtectedResource accessProtectedResource = new GoogleAccessProtectedResource(authToken);
public void authenticate(String authToken) {
this.token = authToken;
accessProtectedResource = new GoogleAccessProtectedResource(authToken);

service = new Tasks(AndroidHttp.newCompatibleTransport(), accessProtectedResource, new JacksonFactory());
service.accessKey = API_KEY;
service.setApplicationName("Astrid");
}

//If we get a 401 or 403, try revalidating the auth token before bailing
private synchronized void handleException(IOException e) {
if (e instanceof HttpResponseException) {
HttpResponseException h = (HttpResponseException)e;
if (h.response.statusCode == 401 || h.response.statusCode == 403) {
token = GtasksTokenValidator.validateAuthToken(token);
if (token != null) {
accessProtectedResource.setAccessToken(token);
}
}
}
}

/**
* A simple service query that will throw an exception if anything goes wrong.
* Useful for checking if token needs revalidating or if there are network problems--
Expand All @@ -59,6 +72,7 @@ public TaskLists allGtaskLists() throws IOException {
try {
toReturn = service.tasklists.list().execute();
} catch (IOException e) {
handleException(e);
toReturn = service.tasklists.list().execute();
}
return toReturn;
Expand All @@ -69,6 +83,7 @@ public TaskList getGtaskList(String id) throws IOException {
try {
toReturn = service.tasklists.get(id).execute();
} catch (IOException e) {
handleException(e);
toReturn = service.tasklists.get(id).execute();
}
return toReturn;
Expand All @@ -81,6 +96,7 @@ public TaskList createGtaskList(String title) throws IOException {
try {
toReturn = service.tasklists.insert(newList).execute();
} catch (IOException e) {
handleException(e);
toReturn = service.tasklists.insert(newList).execute();
}
return toReturn;
Expand All @@ -91,6 +107,7 @@ public TaskList updateGtaskList(TaskList list) throws IOException {
try {
toReturn = service.tasklists.update(list.id, list).execute();
} catch (IOException e) {
handleException(e);
toReturn = service.tasklists.update(list.id, list).execute();
}
return toReturn;
Expand All @@ -100,7 +117,8 @@ public void deleteGtaskList(String listId) throws IOException {
try {
service.tasklists.delete(listId).execute();
} catch (IOException e) {
service.tasks.clear(listId).execute();
handleException(e);
service.tasklists.delete(listId).execute();
}
}

Expand All @@ -109,6 +127,7 @@ public com.google.api.services.tasks.v1.model.Tasks getAllGtasksFromTaskList(Tas
try {
toReturn = getAllGtasksFromListId(list.id, includeDeleted);
} catch (IOException e) {
handleException(e);
toReturn = getAllGtasksFromListId(list.id, includeDeleted);
}
return toReturn;
Expand All @@ -121,6 +140,7 @@ public com.google.api.services.tasks.v1.model.Tasks getAllGtasksFromListId(Strin
try {
toReturn = request.execute();
} catch (IOException e) {
handleException(e);
toReturn = request.execute();
}
return toReturn;
Expand All @@ -131,6 +151,7 @@ public Task getGtask(String listId, String taskId) throws IOException {
try {
toReturn = service.tasks.get(listId, taskId).execute();
} catch (IOException e) {
handleException(e);
toReturn = service.tasks.get(listId, taskId).execute();
}
return toReturn;
Expand Down Expand Up @@ -158,6 +179,7 @@ public Task createGtask(String listId, Task task, String parent, String priorSib
try {
toReturn = insertOp.execute();
} catch (IOException e) {
handleException(e);
toReturn = insertOp.execute();
}
return toReturn;
Expand All @@ -168,6 +190,7 @@ public Task updateGtask(String listId, Task task) throws IOException {
try {
toReturn = service.tasks.update(listId, task.id, task).execute();
} catch (IOException e) {
handleException(e);
toReturn = service.tasks.update(listId, task.id, task).execute();
}
return toReturn;
Expand All @@ -182,6 +205,7 @@ public Task moveGtask(String listId, String taskId, String parentId, String prev
try {
toReturn = move.execute();
} catch (IOException e) {
handleException(e);
toReturn = move.execute();
}
return toReturn;
Expand All @@ -191,6 +215,7 @@ public void deleteGtask(String listId, String taskId) throws IOException {
try {
service.tasks.delete(listId, taskId).execute();
} catch (IOException e) {
handleException(e);
service.tasks.delete(listId, taskId).execute();
}
}
Expand All @@ -199,6 +224,7 @@ public void clearCompletedTasks(String listId) throws IOException {
try {
service.tasks.clear(listId).execute();
} catch (IOException e) {
handleException(e);
service.tasks.clear(listId).execute();
}
}
Expand Down

0 comments on commit e6f9e0b

Please sign in to comment.