From 25877948ad1713bff58a7e50cf9480e4f677f16d Mon Sep 17 00:00:00 2001 From: Hylke Bons Date: Fri, 4 Nov 2011 00:05:25 +0000 Subject: [PATCH] repo: add better check for duplicate messages --- SparkleLib/SparkleListenerBase.cs | 13 +++++-------- SparkleLib/SparkleRepoBase.cs | 10 +++++++--- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/SparkleLib/SparkleListenerBase.cs b/SparkleLib/SparkleListenerBase.cs index fb78a38d..aeb4a004 100755 --- a/SparkleLib/SparkleListenerBase.cs +++ b/SparkleLib/SparkleListenerBase.cs @@ -17,7 +17,6 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Timers; namespace SparkleLib { @@ -147,18 +146,17 @@ namespace SparkleLib { } - public bool HasQueueDownAnnouncement (string folder_identifier) + public string NextQueueDownMessage (string folder_identifier) { - this.queue_down = this.queue_down.Distinct ().ToList (); - - foreach (SparkleAnnouncement announcement in this.queue_down.GetRange(0, this.queue_down.Count)) { + foreach (SparkleAnnouncement announcement in this.queue_down.GetRange (0, this.queue_down.Count)) { if (announcement.FolderIdentifier.Equals (folder_identifier)) { + string message = announcement.Message; this.queue_down.Remove (announcement); - return true; + return message; } } - return false; + return null; } @@ -201,7 +199,6 @@ namespace SparkleLib { SparkleHelpers.DebugInfo ("Listener", "Got message from " + announcement.FolderIdentifier + " on " + this.server); this.queue_down.Add (announcement); - this.queue_down = this.queue_down.Distinct ().ToList (); if (Announcement != null) Announcement (announcement); diff --git a/SparkleLib/SparkleRepoBase.cs b/SparkleLib/SparkleRepoBase.cs index 6d724859..6fd009ba 100755 --- a/SparkleLib/SparkleRepoBase.cs +++ b/SparkleLib/SparkleRepoBase.cs @@ -256,14 +256,18 @@ namespace SparkleLib { this.listener.Announcement += delegate (SparkleAnnouncement announcement) { string identifier = Identifier; - if (announcement.FolderIdentifier == identifier && + if (announcement.FolderIdentifier.Equals (identifier) && !announcement.Message.Equals (CurrentRevision)) { + if ((Status != SyncStatus.SyncUp) && (Status != SyncStatus.SyncDown) && !this.is_buffering) { - while (this.listener.HasQueueDownAnnouncement (identifier)) - SyncDownBase (); + string message; + while ((message = this.listener.NextQueueDownMessage (identifier)) != null) { + if (!message.Equals (CurrentRevision)) + SyncDownBase (); + } } } };