From 6bd6b82bac3326c0e4d27a48e09982a718cc8f08 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Wed, 23 Jan 2013 14:48:47 -0800 Subject: [PATCH] Refactored SyncDatabaseListener to use ActFmSyncThread.enqueueMessage --- .../astrid/actfm/sync/ActFmSyncThread.java | 15 +++++++++------ .../actfm/sync/SyncDatabaseListener.java | 19 ++++--------------- 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncThread.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncThread.java index e78b5398e..8ff9b7eb1 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncThread.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncThread.java @@ -94,10 +94,11 @@ public class ActFmSyncThread { List> syncQueue = Collections.synchronizedList(new LinkedList>()); ActFmSyncMonitor monitor = ActFmSyncMonitor.getInstance(); - taskDao.addListener(new SyncDatabaseListener(syncQueue, monitor, ModelType.TYPE_TASK)); - tagDataDao.addListener(new SyncDatabaseListener(syncQueue, monitor, ModelType.TYPE_TAG)); - instance = new ActFmSyncThread(syncQueue, monitor); + + taskDao.addListener(new SyncDatabaseListener(instance, ModelType.TYPE_TASK)); + tagDataDao.addListener(new SyncDatabaseListener(instance, ModelType.TYPE_TAG)); + instance.startSyncThread(); } } @@ -125,9 +126,11 @@ public class ActFmSyncThread { } public void enqueueMessage(ClientToServerMessage message) { - pendingMessages.add(message); - synchronized(monitor) { - monitor.notifyAll(); + if (!pendingMessages.contains(message)) { + pendingMessages.add(message); + synchronized(monitor) { + monitor.notifyAll(); + } } } diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/SyncDatabaseListener.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/SyncDatabaseListener.java index 169535752..b78ccccb8 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/SyncDatabaseListener.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/SyncDatabaseListener.java @@ -1,22 +1,16 @@ package com.todoroo.astrid.actfm.sync; -import java.util.List; - import com.todoroo.andlib.data.AbstractModel; import com.todoroo.andlib.data.DatabaseDao.ModelUpdateListener; import com.todoroo.astrid.actfm.sync.ActFmSyncThread.ModelType; import com.todoroo.astrid.actfm.sync.messages.ChangesHappened; -import com.todoroo.astrid.actfm.sync.messages.ClientToServerMessage; public class SyncDatabaseListener implements ModelUpdateListener { - private final List> queue; - private final Object monitor; private final ModelType modelType; - - public SyncDatabaseListener(List> queue, Object syncMonitor, ModelType modelType) { - this.queue = queue; - this.monitor = syncMonitor; + private final ActFmSyncThread actFmSyncThread; + public SyncDatabaseListener(ActFmSyncThread actFmSyncThread, ModelType modelType) { + this.actFmSyncThread = actFmSyncThread; this.modelType = modelType; } @@ -24,12 +18,7 @@ public class SyncDatabaseListener implements ModelU public void onModelUpdated(MTYPE model, boolean outstandingEntries) { if (outstandingEntries) { ChangesHappened ch = ChangesHappened.instantiateChangesHappened(model.getId(), modelType); - if (!queue.contains(ch)) { - queue.add(ch); - synchronized(monitor) { - monitor.notifyAll(); - } - } + actFmSyncThread.enqueueMessage(ch); } }