Put in some basic recovery options for failed gtasks pushes. Hopefully this will reduce the number of failed syncs

pull/14/head
Sam Bosley 14 years ago
parent ed310f7e5f
commit a158192c7f

@ -24,6 +24,12 @@ public class CreateRequest extends PushRequest {
return service.createGtask(listId, toPush, parent, priorSiblingId); return service.createGtask(listId, toPush, parent, priorSiblingId);
} }
@Override
protected void recover() {
parent = null;
priorSiblingId = null;
}
public String getParent() { public String getParent() {
return parent; return parent;
} }

@ -29,6 +29,11 @@ public class MoveListRequest extends PushRequest {
return service.createGtask(dstList, toPush); return service.createGtask(dstList, toPush);
} }
@Override
protected void recover() {
//If there's a good way to recover, put it here
}
private void transferProperties(Task local) { private void transferProperties(Task local) {
toPush.setCompleted(local.getCompleted()); toPush.setCompleted(local.getCompleted());
toPush.setDeleted(local.getDeleted()); toPush.setDeleted(local.getDeleted());

@ -34,6 +34,12 @@ public class MoveRequest extends PushRequest {
return service.moveGtask(super.listId, taskId, parentId, priorSiblingId); return service.moveGtask(super.listId, taskId, parentId, priorSiblingId);
} }
@Override
protected void recover() {
parentId = null;
priorSiblingId = null;
}
public String getParentId() { public String getParentId() {
return parentId; return parentId;
} }

@ -41,5 +41,16 @@ public abstract class PushRequest {
this.service = service; this.service = service;
} }
public abstract Task executePush() throws IOException; public Task push() throws IOException {
try {
return executePush();
} catch (IOException e) {
recover();
return executePush();
}
}
protected abstract Task executePush() throws IOException;
protected abstract void recover();
} }

@ -20,4 +20,9 @@ public class UpdateRequest extends PushRequest {
return service.updateGtask(listId, toPush); return service.updateGtask(listId, toPush);
} }
@Override
protected void recover() {
//If there's a good way to recover, put it here
}
} }

@ -292,7 +292,7 @@ public final class GtasksSyncOnSaveService {
} }
MoveRequest move = new MoveRequest(gtasksService, taskId, listId, parent, priorSibling); MoveRequest move = new MoveRequest(gtasksService, taskId, listId, parent, priorSibling);
move.executePush(); move.push();
} }
private boolean syncOnSaveEnabled() { private boolean syncOnSaveEnabled() {

@ -294,7 +294,7 @@ public class GtasksSyncProvider extends SyncProvider<GtasksTaskContainer> {
String remoteSibling = gtasksMetadataService.getRemoteSiblingId(listId, t.gtaskMetadata); String remoteSibling = gtasksMetadataService.getRemoteSiblingId(listId, t.gtaskMetadata);
MoveRequest move = new MoveRequest(taskService, toMove, listId, remoteParent, remoteSibling); MoveRequest move = new MoveRequest(taskService, toMove, listId, remoteParent, remoteSibling);
move.executePush(); move.push();
} }
} }
@ -435,7 +435,7 @@ public class GtasksSyncProvider extends SyncProvider<GtasksTaskContainer> {
CreateRequest createRequest = new CreateRequest(taskService, listId, createdTask, local.parentId, local.priorSiblingId); CreateRequest createRequest = new CreateRequest(taskService, listId, createdTask, local.parentId, local.priorSiblingId);
//updateTaskHelper(local, null, createRequest); //updateTaskHelper(local, null, createRequest);
localPropertiesToModel(local, null, createRequest.getToPush()); localPropertiesToModel(local, null, createRequest.getToPush());
com.google.api.services.tasks.model.Task createResult = createRequest.executePush(); com.google.api.services.tasks.model.Task createResult = createRequest.push();
createdWithoutId.add(local); createdWithoutId.add(local);
createdWithoutOrder.add(local); createdWithoutOrder.add(local);
String newIdTask = createResult.getId(); String newIdTask = createResult.getId();
@ -499,11 +499,11 @@ public class GtasksSyncProvider extends SyncProvider<GtasksTaskContainer> {
Log.e("gtasks-debug", "ACTION: move(1) - " + newIdTask + ", " + local.parentId + ", " + local.priorSiblingId); Log.e("gtasks-debug", "ACTION: move(1) - " + newIdTask + ", " + local.parentId + ", " + local.priorSiblingId);
//This case basically defaults to whatever local settings are. Future versions could try and merge better //This case basically defaults to whatever local settings are. Future versions could try and merge better
MoveRequest moveRequest = new MoveRequest(taskService, newIdTask, idList, local.parentId, local.priorSiblingId); MoveRequest moveRequest = new MoveRequest(taskService, newIdTask, idList, local.parentId, local.priorSiblingId);
moveRequest.executePush(); moveRequest.push();
} }
if (request instanceof UpdateRequest) { if (request instanceof UpdateRequest) {
request.executePush(); request.push();
} }
//Strategy--delete, migrate properties, recreate, update local AND remote ids; happens in MoveListRequest //Strategy--delete, migrate properties, recreate, update local AND remote ids; happens in MoveListRequest
@ -513,7 +513,7 @@ public class GtasksSyncProvider extends SyncProvider<GtasksTaskContainer> {
Log.e("gtasks-debug", "ACTION: moveTask(5), " + newIdTask + ", " + idList + " to " + Log.e("gtasks-debug", "ACTION: moveTask(5), " + newIdTask + ", " + idList + " to " +
remote.gtaskMetadata.getValue(GtasksMetadata.LIST_ID)); remote.gtaskMetadata.getValue(GtasksMetadata.LIST_ID));
MoveListRequest moveList = new MoveListRequest(taskService, newIdTask, remote.gtaskMetadata.getValue(GtasksMetadata.LIST_ID), idList, null); MoveListRequest moveList = new MoveListRequest(taskService, newIdTask, remote.gtaskMetadata.getValue(GtasksMetadata.LIST_ID), idList, null);
com.google.api.services.tasks.model.Task result = moveList.executePush(); com.google.api.services.tasks.model.Task result = moveList.push();
local.gtaskMetadata.setValue(GtasksMetadata.ID, result.getId()); local.gtaskMetadata.setValue(GtasksMetadata.ID, result.getId());
remote.gtaskMetadata.setValue(GtasksMetadata.ID, result.getId()); remote.gtaskMetadata.setValue(GtasksMetadata.ID, result.getId());
} }

Loading…
Cancel
Save