repo: add better check for duplicate messages

This commit is contained in:
Hylke Bons 2011-11-04 00:05:25 +00:00
parent 26df391130
commit 25877948ad
2 changed files with 12 additions and 11 deletions

View file

@ -17,7 +17,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Timers; using System.Timers;
namespace SparkleLib { 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)) { if (announcement.FolderIdentifier.Equals (folder_identifier)) {
string message = announcement.Message;
this.queue_down.Remove (announcement); 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); SparkleHelpers.DebugInfo ("Listener", "Got message from " + announcement.FolderIdentifier + " on " + this.server);
this.queue_down.Add (announcement); this.queue_down.Add (announcement);
this.queue_down = this.queue_down.Distinct ().ToList ();
if (Announcement != null) if (Announcement != null)
Announcement (announcement); Announcement (announcement);

View file

@ -256,14 +256,18 @@ namespace SparkleLib {
this.listener.Announcement += delegate (SparkleAnnouncement announcement) { this.listener.Announcement += delegate (SparkleAnnouncement announcement) {
string identifier = Identifier; string identifier = Identifier;
if (announcement.FolderIdentifier == identifier && if (announcement.FolderIdentifier.Equals (identifier) &&
!announcement.Message.Equals (CurrentRevision)) { !announcement.Message.Equals (CurrentRevision)) {
if ((Status != SyncStatus.SyncUp) && if ((Status != SyncStatus.SyncUp) &&
(Status != SyncStatus.SyncDown) && (Status != SyncStatus.SyncDown) &&
!this.is_buffering) { !this.is_buffering) {
while (this.listener.HasQueueDownAnnouncement (identifier)) string message;
SyncDownBase (); while ((message = this.listener.NextQueueDownMessage (identifier)) != null) {
if (!message.Equals (CurrentRevision))
SyncDownBase ();
}
} }
} }
}; };