Adding in support for comment import/export

See Tasks issue #373 - Comments not in backup XML?

Added code to existing XML importer/exporter to write comments on export and to read comments back in for (v2 & v3) format input.
pull/511/head
tegee 8 years ago committed by Alex Baker
parent 0a738af84c
commit 79a7c66a87

@ -31,6 +31,9 @@ class BackupConstants {
/** Tag containing a task */
public static final String TASK_TAG = "task";
/** Tag containing a comment item */
public static final String COMMENT_TAG = "comment";
/** Tag containing a metadata item */
public static final String METADATA_TAG = "metadata";

@ -12,6 +12,9 @@ import android.os.Handler;
import android.util.Xml;
import android.widget.Toast;
import com.todoroo.astrid.dao.UserActivityDao;
import com.todoroo.astrid.data.UserActivity;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.Property.PropertyVisitor;
@ -58,6 +61,7 @@ public class TasksXmlExporter {
private final TagDataDao tagDataDao;
private final MetadataDao metadataDao;
private final TaskDao taskDao;
private UserActivityDao userActivityDao;
private final Preferences preferences;
// 3 is started on Version 4.6.10
@ -85,11 +89,12 @@ public class TasksXmlExporter {
}
@Inject
public TasksXmlExporter(TagDataDao tagDataDao, MetadataDao metadataDao, TaskDao taskDao,
public TasksXmlExporter(TagDataDao tagDataDao, MetadataDao metadataDao, TaskDao taskDao, UserActivityDao userActivityDao,
Preferences preferences) {
this.tagDataDao = tagDataDao;
this.metadataDao = metadataDao;
this.taskDao = taskDao;
this.userActivityDao = userActivityDao;
this.preferences = preferences;
}
@ -185,6 +190,7 @@ public class TasksXmlExporter {
xml.startTag(null, BackupConstants.TASK_TAG);
serializeModel(task, Task.PROPERTIES, Task.ID);
serializeMetadata(task);
serializeComments(task);
xml.endTag(null, BackupConstants.TASK_TAG);
this.exportCount++;
}
@ -193,6 +199,21 @@ public class TasksXmlExporter {
}
}
/** export the comments made to a particular task. See 'Tasks' issue #373. */
private synchronized void serializeComments(Task task) {
userActivityDao.getCommentsForTask(task.getUuid(), this::writeComment);
}
private void writeComment(UserActivity userActivity) {
try {
xml.startTag(null, BackupConstants.COMMENT_TAG);
serializeModel(userActivity, UserActivity.PROPERTIES, Metadata.ID, Metadata.TASK);
xml.endTag(null, BackupConstants.COMMENT_TAG);
} catch (IOException e) {
// ignore
}
}
private synchronized void serializeMetadata(Task task) {
metadataDao.byTask(task.getId(), metadata -> {
try {

@ -23,9 +23,11 @@ import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.dao.UserActivityDao;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.UserActivity;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import org.tasks.R;
@ -46,6 +48,7 @@ public class TasksXmlImporter {
private final TagDataDao tagDataDao;
private final MetadataDao metadataDao;
private final UserActivityDao userActivityDao;
private final DialogBuilder dialogBuilder;
private final TaskDao taskDao;
@ -63,10 +66,11 @@ public class TasksXmlImporter {
}
@Inject
public TasksXmlImporter(TagDataDao tagDataDao, MetadataDao metadataDao,
public TasksXmlImporter(TagDataDao tagDataDao, MetadataDao metadataDao, UserActivityDao userActivityDao,
DialogBuilder dialogBuilder, TaskDao taskDao) {
this.tagDataDao = tagDataDao;
this.metadataDao = metadataDao;
this.userActivityDao = userActivityDao;
this.dialogBuilder = dialogBuilder;
this.taskDao = taskDao;
}
@ -150,6 +154,7 @@ public class TasksXmlImporter {
XmlPullParser xpp;
final Task currentTask = new Task();
final UserActivity userActivity = new UserActivity();
final Metadata metadata = new Metadata();
final TagData tagdata = new TagData();
@ -167,6 +172,9 @@ public class TasksXmlImporter {
if (tag.equals(BackupConstants.TASK_TAG)) {
// Parse <task ... >
parseTask();
} else if (tag.equals(BackupConstants.COMMENT_TAG)) {
// Process <comment ... >
parseComment();
} else if (tag.equals(BackupConstants.METADATA_TAG)) {
// Process <metadata ... >
parseMetadata(2);
@ -208,6 +216,30 @@ public class TasksXmlImporter {
}
}
/**
* Imports a comment from the XML we're reading.
* taken from EditNoteActivity.addComment()
*/
void parseComment() {
if (!currentTask.isSaved()) {
return;
}
userActivity.clear();
// We only want to import these fields.
// These are the fields that are sent in EditNoteActivity.addComment() when a user creates a comment.
final Property<?>[] NEW_PROPERTIES = new Property<?>[4];
NEW_PROPERTIES[0] = UserActivity.MESSAGE;
NEW_PROPERTIES[1] = UserActivity.ACTION;
NEW_PROPERTIES[2] = UserActivity.TARGET_ID;
NEW_PROPERTIES[3] = UserActivity.CREATED_AT;
deserializeModel(userActivity, NEW_PROPERTIES);
userActivity.setId(UserActivity.NO_ID);
userActivityDao.createNew(userActivity);
}
void parseMetadata(int format) {
if(!currentTask.isSaved()) {
return;
@ -328,6 +360,9 @@ public class TasksXmlImporter {
case BackupConstants.METADATA_TAG:
parseMetadata(3);
break;
case BackupConstants.COMMENT_TAG:
parseComment();
break;
case BackupConstants.TAGDATA_TAG:
parseTagdata();
break;

Loading…
Cancel
Save