Clean up task duplicator and fix tag duplication

pull/384/head
Alex Baker 10 years ago
parent fff0d6c008
commit b0fa12589b

@ -82,6 +82,17 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
readPropertiesFromCursor(cursor);
}
public AbstractModel(AbstractModel abstractModel) {
if (abstractModel != null) {
if (abstractModel.setValues != null) {
setValues = new ContentValues(abstractModel.setValues);
}
if (abstractModel.values != null) {
values = new ContentValues(abstractModel.values);
}
}
}
/** Get database-read values for this object */
public ContentValues getDatabaseValues() {
return values;

@ -56,6 +56,10 @@ public class MetadataDao {
dao.createNew(metadata);
}
public List<Metadata> toList(Criterion criterion) {
return toList(Query.select(Metadata.PROPERTIES).where(criterion));
}
public List<Metadata> toList(Query where) {
return dao.toList(where);
}
@ -118,6 +122,10 @@ public class MetadataDao {
Metadata.TASK.eq(Task.ID))).where(Task.TITLE.isNull())));
}
public List<Metadata> byTask(long taskId) {
return toList(MetadataCriteria.byTask(taskId));
}
public void byTask(long taskId, Callback<Metadata> callback) {
dao.query(callback, Query.select(Metadata.PROPERTIES).where(Metadata.TASK.eq(taskId)));
}

@ -94,6 +94,14 @@ public class Metadata extends AbstractModel {
defaultValues.put(DELETION_DATE.name, 0L);
}
public Metadata() {
super();
}
public Metadata(Metadata metadata) {
super(metadata);
}
@Override
public ContentValues getDefaultValues() {
return defaultValues;

@ -36,6 +36,10 @@ abstract public class RemoteModel extends AbstractModel {
super(cursor);
}
public RemoteModel(AbstractModel model) {
super(model);
}
/** remote id property common to all remote models */
public static final String UUID_PROPERTY_NAME = "remoteId"; //$NON-NLS-1$

@ -190,6 +190,10 @@ public class Task extends RemoteModel {
super(cursor);
}
public Task(Task task) {
super(task);
}
@Override
public long getId() {
return getIdHelper(ID);

@ -1,6 +1,5 @@
package com.todoroo.astrid.service;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.data.Metadata;
@ -8,11 +7,14 @@ import com.todoroo.astrid.data.SyncFlags;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gcal.GCalHelper;
import com.todoroo.astrid.gtasks.GtasksMetadata;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import java.util.List;
import javax.inject.Inject;
import timber.log.Timber;
public class TaskDuplicator {
private final TaskService taskService;
@ -31,47 +33,41 @@ public class TaskDuplicator {
* @return cloned item id
*/
public long duplicateTask(long itemId) {
Task original = new Task();
original.setId(itemId);
Task clone = clone(original);
Task original = taskService.fetchById(itemId, Task.PROPERTIES);
Timber.d("Cloning %s", original);
Task clone = new Task(original);
clone.setCreationDate(DateUtilities.now());
clone.setCompletionDate(0L);
clone.setDeletionDate(0L);
clone.setCalendarUri(""); //$NON-NLS-1$
gcalHelper.createTaskEventIfEnabled(clone);
taskService.save(clone);
return clone.getId();
}
clone.setCalendarUri("");
clone.clearValue(Task.ID);
clone.clearValue(Task.UUID);
private Task clone(Task task) {
Task newTask = taskService.fetchById(task.getId(), Task.PROPERTIES);
if(newTask == null) {
return new Task();
List<Metadata> metadataList = metadataDao.byTask(itemId);
if (!metadataList.isEmpty()) {
clone.putTransitory(SyncFlags.GTASKS_SUPPRESS_SYNC, true);
}
newTask.clearValue(Task.ID);
newTask.clearValue(Task.UUID);
List<Metadata> metadataList = metadataDao.toList(Query.select(Metadata.PROPERTIES).where(MetadataDao.MetadataCriteria.byTask(task.getId())));
taskService.save(clone);
if (!metadataList.isEmpty()) {
newTask.putTransitory(SyncFlags.GTASKS_SUPPRESS_SYNC, true);
taskService.save(newTask);
long newId = newTask.getId();
for (Metadata metadata : metadataList) {
if(!metadata.containsNonNullValue(Metadata.KEY)) {
for (Metadata oldMetadata : metadataList) {
if(!oldMetadata.containsNonNullValue(Metadata.KEY)) {
continue;
}
Timber.d("Cloning %s", oldMetadata);
Metadata metadata = new Metadata(oldMetadata);
if(GtasksMetadata.METADATA_KEY.equals(metadata.getKey())) {
metadata.setValue(GtasksMetadata.ID, ""); //$NON-NLS-1$
} else if (TaskToTagMetadata.KEY.equals(metadata.getKey())) {
metadata.setValue(TaskToTagMetadata.TASK_UUID, clone.getUuid());
}
metadata.setTask(newId);
metadata.setTask(clone.getId());
metadata.clearValue(Metadata.ID);
metadataDao.createNew(metadata);
}
}
return newTask;
gcalHelper.createTaskEventIfEnabled(clone);
return clone.getId();
}
}

Loading…
Cancel
Save