public void pushMetadataOnSave(Metadata model, GtasksInvoker invoker) throws IOException { AndroidUtilities.sleepDeep(1000L); String taskId = model.getValue(GtasksMetadata.ID); String listId = model.getValue(GtasksMetadata.LIST_ID); String parent = gtasksMetadataService.getRemoteParentId(model); String priorSibling = gtasksMetadataService.getRemoteSiblingId(listId, model); MoveRequest move = new MoveRequest(invoker, taskId, listId, parent, priorSibling); com.google.api.services.tasks.model.Task result = move.push(); // Update order metadata from result if (result != null) { model.setValue(GtasksMetadata.GTASKS_ORDER, Long.parseLong(result.getPosition())); model.putTransitory(SyncFlags.GTASKS_SUPPRESS_SYNC, true); metadataDao.saveExisting(model); } }
/** Synchronize with server when data changes */ public void pushTaskOnSave(Task task, ContentValues values, GtasksInvoker invoker, boolean sleep) throws IOException { if (sleep) AndroidUtilities.sleepDeep(1000L); // Wait for metadata to be saved Metadata gtasksMetadata = gtasksMetadataService.getTaskMetadata(task.getId()); com.google.api.services.tasks.model.Task remoteModel = null; boolean newlyCreated = false; String remoteId = null; String listId = Preferences.getStringValue(GtasksPreferenceService.PREF_DEFAULT_LIST); if (listId == null) { com.google.api.services.tasks.model.TaskList defaultList = invoker.getGtaskList(DEFAULT_LIST); if (defaultList != null) { listId = defaultList.getId(); Preferences.setString(GtasksPreferenceService.PREF_DEFAULT_LIST, listId); } else { listId = DEFAULT_LIST; } } if (gtasksMetadata == null || !gtasksMetadata.containsNonNullValue(GtasksMetadata.ID) || TextUtils.isEmpty(gtasksMetadata.getValue(GtasksMetadata.ID))) { // Create case if (gtasksMetadata == null) { gtasksMetadata = GtasksMetadata.createEmptyMetadata(task.getId()); } if (gtasksMetadata.containsNonNullValue(GtasksMetadata.LIST_ID)) { listId = gtasksMetadata.getValue(GtasksMetadata.LIST_ID); } remoteModel = new com.google.api.services.tasks.model.Task(); newlyCreated = true; } else { // update case remoteId = gtasksMetadata.getValue(GtasksMetadata.ID); listId = gtasksMetadata.getValue(GtasksMetadata.LIST_ID); remoteModel = new com.google.api.services.tasks.model.Task(); remoteModel.setId(remoteId); } // If task was newly created but without a title, don't sync--we're in the middle of // creating a task which may end up being cancelled if (newlyCreated && (!values.containsKey(Task.TITLE.name) || TextUtils.isEmpty(task.getValue(Task.TITLE)))) { return; } // Update the remote model's changed properties if (values.containsKey(Task.DELETION_DATE.name) && task.isDeleted()) { remoteModel.setDeleted(true); } if (values.containsKey(Task.TITLE.name)) { remoteModel.setTitle(task.getValue(Task.TITLE)); } if (values.containsKey(Task.NOTES.name)) { remoteModel.setNotes(task.getValue(Task.NOTES)); } if (values.containsKey(Task.DUE_DATE.name) && task.hasDueDate()) { remoteModel.setDue(GtasksApiUtilities.unixTimeToGtasksDueDate(task.getValue(Task.DUE_DATE))); } if (values.containsKey(Task.COMPLETION_DATE.name)) { if (task.isCompleted()) { remoteModel.setCompleted( GtasksApiUtilities.unixTimeToGtasksCompletionTime(task.getValue(Task.COMPLETION_DATE))); remoteModel.setStatus("completed"); // $NON-NLS-1$ } else { remoteModel.setCompleted(null); remoteModel.setStatus("needsAction"); // $NON-NLS-1$ } } if (!newlyCreated) { invoker.updateGtask(listId, remoteModel); } else { String parent = gtasksMetadataService.getRemoteParentId(gtasksMetadata); String priorSibling = gtasksMetadataService.getRemoteSiblingId(listId, gtasksMetadata); CreateRequest create = new CreateRequest(invoker, listId, remoteModel, parent, priorSibling); com.google.api.services.tasks.model.Task created = create.executePush(); if (created != null) { // Update the metadata for the newly created task gtasksMetadata.setValue(GtasksMetadata.ID, created.getId()); gtasksMetadata.setValue(GtasksMetadata.LIST_ID, listId); } else return; } task.setValue(Task.MODIFICATION_DATE, DateUtilities.now()); gtasksMetadata.setValue(GtasksMetadata.LAST_SYNC, DateUtilities.now() + 1000L); metadataService.save(gtasksMetadata); task.putTransitory(SyncFlags.GTASKS_SUPPRESS_SYNC, true); taskDao.saveExistingWithSqlConstraintCheck(task); }