Refactored SyncDatabaseListener to use ActFmSyncThread.enqueueMessage

pull/14/head
Sam Bosley 13 years ago
parent 508f533e6d
commit 6bd6b82bac

@ -94,10 +94,11 @@ public class ActFmSyncThread {
List<ClientToServerMessage<?>> syncQueue = Collections.synchronizedList(new LinkedList<ClientToServerMessage<?>>()); List<ClientToServerMessage<?>> syncQueue = Collections.synchronizedList(new LinkedList<ClientToServerMessage<?>>());
ActFmSyncMonitor monitor = ActFmSyncMonitor.getInstance(); ActFmSyncMonitor monitor = ActFmSyncMonitor.getInstance();
taskDao.addListener(new SyncDatabaseListener<Task>(syncQueue, monitor, ModelType.TYPE_TASK));
tagDataDao.addListener(new SyncDatabaseListener<TagData>(syncQueue, monitor, ModelType.TYPE_TAG));
instance = new ActFmSyncThread(syncQueue, monitor); instance = new ActFmSyncThread(syncQueue, monitor);
taskDao.addListener(new SyncDatabaseListener<Task>(instance, ModelType.TYPE_TASK));
tagDataDao.addListener(new SyncDatabaseListener<TagData>(instance, ModelType.TYPE_TAG));
instance.startSyncThread(); instance.startSyncThread();
} }
} }
@ -125,9 +126,11 @@ public class ActFmSyncThread {
} }
public void enqueueMessage(ClientToServerMessage<?> message) { public void enqueueMessage(ClientToServerMessage<?> message) {
pendingMessages.add(message); if (!pendingMessages.contains(message)) {
synchronized(monitor) { pendingMessages.add(message);
monitor.notifyAll(); synchronized(monitor) {
monitor.notifyAll();
}
} }
} }

@ -1,22 +1,16 @@
package com.todoroo.astrid.actfm.sync; package com.todoroo.astrid.actfm.sync;
import java.util.List;
import com.todoroo.andlib.data.AbstractModel; import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.DatabaseDao.ModelUpdateListener; import com.todoroo.andlib.data.DatabaseDao.ModelUpdateListener;
import com.todoroo.astrid.actfm.sync.ActFmSyncThread.ModelType; import com.todoroo.astrid.actfm.sync.ActFmSyncThread.ModelType;
import com.todoroo.astrid.actfm.sync.messages.ChangesHappened; import com.todoroo.astrid.actfm.sync.messages.ChangesHappened;
import com.todoroo.astrid.actfm.sync.messages.ClientToServerMessage;
public class SyncDatabaseListener<MTYPE extends AbstractModel> implements ModelUpdateListener<MTYPE> { public class SyncDatabaseListener<MTYPE extends AbstractModel> implements ModelUpdateListener<MTYPE> {
private final List<ClientToServerMessage<?>> queue;
private final Object monitor;
private final ModelType modelType; private final ModelType modelType;
private final ActFmSyncThread actFmSyncThread;
public SyncDatabaseListener(List<ClientToServerMessage<?>> queue, Object syncMonitor, ModelType modelType) { public SyncDatabaseListener(ActFmSyncThread actFmSyncThread, ModelType modelType) {
this.queue = queue; this.actFmSyncThread = actFmSyncThread;
this.monitor = syncMonitor;
this.modelType = modelType; this.modelType = modelType;
} }
@ -24,12 +18,7 @@ public class SyncDatabaseListener<MTYPE extends AbstractModel> implements ModelU
public void onModelUpdated(MTYPE model, boolean outstandingEntries) { public void onModelUpdated(MTYPE model, boolean outstandingEntries) {
if (outstandingEntries) { if (outstandingEntries) {
ChangesHappened<?, ?> ch = ChangesHappened.instantiateChangesHappened(model.getId(), modelType); ChangesHappened<?, ?> ch = ChangesHappened.instantiateChangesHappened(model.getId(), modelType);
if (!queue.contains(ch)) { actFmSyncThread.enqueueMessage(ch);
queue.add(ch);
synchronized(monitor) {
monitor.notifyAll();
}
}
} }
} }

Loading…
Cancel
Save