diff --git a/astrid/plugin-src/com/todoroo/astrid/alarms/AlarmService.java b/astrid/plugin-src/com/todoroo/astrid/alarms/AlarmService.java index eaaff3f55..b1e1392b4 100644 --- a/astrid/plugin-src/com/todoroo/astrid/alarms/AlarmService.java +++ b/astrid/plugin-src/com/todoroo/astrid/alarms/AlarmService.java @@ -78,7 +78,7 @@ public class AlarmService { metadata.add(item); } - boolean changed = service.synchronizeMetadata(taskId, metadata, Metadata.KEY.eq(AlarmFields.METADATA_KEY)) > 0; + boolean changed = service.synchronizeMetadata(taskId, metadata, Metadata.KEY.eq(AlarmFields.METADATA_KEY)); if(changed) scheduleAlarms(taskId); return changed; diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java index f0105f482..949961fab 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java @@ -210,7 +210,7 @@ public final class TagService { metadata.add(item); } - return service.synchronizeMetadata(taskId, metadata, Metadata.KEY.eq(KEY)) > 0; + return service.synchronizeMetadata(taskId, metadata, Metadata.KEY.eq(KEY)); } public int delete(String tag) { diff --git a/astrid/src/com/todoroo/astrid/service/MetadataService.java b/astrid/src/com/todoroo/astrid/service/MetadataService.java index 52beaaf5e..95730f90f 100644 --- a/astrid/src/com/todoroo/astrid/service/MetadataService.java +++ b/astrid/src/com/todoroo/astrid/service/MetadataService.java @@ -92,10 +92,11 @@ public class MetadataService { * @param id * @param metadata * @param metadataKeys - * @return number of items saved + * @return true if there were changes */ - public int synchronizeMetadata(long taskId, ArrayList metadata, + public boolean synchronizeMetadata(long taskId, ArrayList metadata, Criterion metadataCriterion) { + boolean dirty = false; HashSet newMetadataValues = new HashSet(); for(Metadata metadatum : metadata) { metadatum.setValue(Metadata.TASK, taskId); @@ -123,21 +124,21 @@ public class MetadataService { // not matched. cut it metadataDao.delete(id); + dirty = true; } } finally { cursor.close(); } // everything that remains shall be written - int written = 0; for(ContentValues values : newMetadataValues) { item.clear(); item.mergeWith(values); metadataDao.persist(item); - ++written; + dirty = true; } - return written; + return dirty; } /**