Record task outstanding entries when tag added or removed

pull/14/head
Sam Bosley 13 years ago
parent a1007f2440
commit 96b29c30bc

@ -41,7 +41,7 @@ public class DatabaseDao<TYPE extends AbstractModel> {
private Table table; private Table table;
private Table outstandingTable; protected Table outstandingTable;
private AbstractDatabase database; private AbstractDatabase database;
@ -239,9 +239,13 @@ public class DatabaseDao<TYPE extends AbstractModel> {
public boolean makeChange(); public boolean makeChange();
} }
private boolean insertOrUpdateAndRecordChanges(TYPE item, ContentValues values, DatabaseChangeOp op) { protected boolean shouldRecordOutstanding(TYPE item) {
boolean recordOutstanding = (outstandingTable != null) && return (outstandingTable != null) &&
!item.checkAndClearTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES); !item.checkAndClearTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES);
}
private boolean insertOrUpdateAndRecordChanges(TYPE item, ContentValues values, DatabaseChangeOp op) {
boolean recordOutstanding = shouldRecordOutstanding(item);
final AtomicBoolean result = new AtomicBoolean(false); final AtomicBoolean result = new AtomicBoolean(false);
if (recordOutstanding) { // begin transaction if (recordOutstanding) { // begin transaction
@ -322,7 +326,7 @@ public class DatabaseDao<TYPE extends AbstractModel> {
return insertOrUpdateAndRecordChanges(item, values, update); return insertOrUpdateAndRecordChanges(item, values, update);
} }
private boolean createOutstandingEntries(long modelId, ContentValues modelSetValues) { protected boolean createOutstandingEntries(long modelId, ContentValues modelSetValues) {
Set<Entry<String, Object>> entries = modelSetValues.valueSet(); Set<Entry<String, Object>> entries = modelSetValues.valueSet();
long now = DateUtilities.now(); long now = DateUtilities.now();
for (Entry<String, Object> entry : entries) { for (Entry<String, Object> entry : entries) {

@ -31,6 +31,9 @@ public class Metadata extends AbstractModel {
/** table for this model */ /** table for this model */
public static final Table TABLE = new Table("metadata", Metadata.class); public static final Table TABLE = new Table("metadata", Metadata.class);
/** changes to metadata (specifically tags) are recorded in the task outstanding table */
public static final Class<? extends OutstandingEntry<Task>> OUTSTANDING_MODEL = TaskOutstanding.class;
/** content uri for this model */ /** content uri for this model */
public static final Uri CONTENT_URI = Uri.parse("content://" + AstridApiConstants.API_PACKAGE + "/" + public static final Uri CONTENT_URI = Uri.parse("content://" + AstridApiConstants.API_PACKAGE + "/" +
TABLE.name); TABLE.name);

@ -5,6 +5,8 @@
*/ */
package com.todoroo.astrid.data; package com.todoroo.astrid.data;
import android.text.TextUtils;
import com.todoroo.andlib.data.AbstractModel; import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.Property.LongProperty; import com.todoroo.andlib.data.Property.LongProperty;
import com.todoroo.andlib.data.Property.StringProperty; import com.todoroo.andlib.data.Property.StringProperty;
@ -65,4 +67,8 @@ abstract public class RemoteModel extends AbstractModel {
else else
return NO_UUID; return NO_UUID;
} }
public static boolean isUuidEmpty(String uuid) {
return NO_UUID.equals(uuid) || TextUtils.isEmpty(uuid);
}
} }

@ -103,6 +103,9 @@ public class NameMaps {
TASK_PROPERTIES_SERVER_TO_LOCAL = AndroidUtilities.reverseMap(TASK_PROPERTIES_LOCAL_TO_SERVER); TASK_PROPERTIES_SERVER_TO_LOCAL = AndroidUtilities.reverseMap(TASK_PROPERTIES_LOCAL_TO_SERVER);
} }
public static final String TAG_ADDED_COLUMN = "tag_added";
public static final String TAG_REMOVED_COLUMN = "tag_removed";
private static final Map<Property<?>, String> TAG_DATA_PROPERTIES_LOCAL_TO_SERVER; private static final Map<Property<?>, String> TAG_DATA_PROPERTIES_LOCAL_TO_SERVER;
private static final Map<String, Property<?>> TAG_DATA_COLUMN_NAMES_TO_PROPERTIES; private static final Map<String, Property<?>> TAG_DATA_COLUMN_NAMES_TO_PROPERTIES;

@ -5,8 +5,10 @@
*/ */
package com.todoroo.astrid.dao; package com.todoroo.astrid.dao;
import android.content.ContentValues;
import android.database.Cursor; import android.database.Cursor;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.DatabaseDao; import com.todoroo.andlib.data.DatabaseDao;
import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.data.TodorooCursor;
@ -17,8 +19,12 @@ import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences; import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.actfm.sync.messages.NameMaps;
import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.OutstandingEntry;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.TaskOutstanding;
import com.todoroo.astrid.provider.Astrid2TaskProvider; import com.todoroo.astrid.provider.Astrid2TaskProvider;
import com.todoroo.astrid.service.StatisticsConstants; import com.todoroo.astrid.service.StatisticsConstants;
import com.todoroo.astrid.service.StatisticsService; import com.todoroo.astrid.service.StatisticsService;
@ -67,6 +73,38 @@ public class MetadataDao extends DatabaseDao<Metadata> {
} }
@Override
protected boolean shouldRecordOutstanding(Metadata item) {
ContentValues cv = item.getSetValues();
return super.shouldRecordOutstanding(item) && cv != null &&
((cv.containsKey(Metadata.KEY.name) &&
TagMetadata.KEY.equals(item.getValue(Metadata.KEY))) ||
(cv.containsKey(Metadata.DELETION_DATE.name) &&
item.getValue(Metadata.DELETION_DATE) > 0));
}
@Override
protected boolean createOutstandingEntries(long modelId, ContentValues modelSetValues) {
Long taskId = modelSetValues.getAsLong(Metadata.TASK.name);
String tagUuid = modelSetValues.getAsString(TagMetadata.TAG_UUID.name);
Long deletionDate = modelSetValues.getAsLong(Metadata.DELETION_DATE.name);
if (taskId == null || taskId == AbstractModel.NO_ID || deletionDate == null || RemoteModel.isUuidEmpty(tagUuid))
return false;
TaskOutstanding m = new TaskOutstanding();
m.setValue(OutstandingEntry.ENTITY_ID_PROPERTY, taskId);
m.setValue(OutstandingEntry.CREATED_AT_PROPERTY, DateUtilities.now());
String addedOrRemoved = NameMaps.TAG_ADDED_COLUMN;
if (deletionDate > 0)
addedOrRemoved = NameMaps.TAG_REMOVED_COLUMN;
m.setValue(OutstandingEntry.COLUMN_STRING_PROPERTY, addedOrRemoved);
m.setValue(OutstandingEntry.VALUE_STRING_PROPERTY, tagUuid);
database.insert(outstandingTable.name, null, m.getSetValues());
return true;
}
@Override @Override
public boolean persist(Metadata item) { public boolean persist(Metadata item) {
if(!item.containsValue(Metadata.CREATION_DATE)) if(!item.containsValue(Metadata.CREATION_DATE))

Loading…
Cancel
Save