La gestione dei task è ora più sicura (usa GUID per evitare doppioni

Leonardo Robol [2010-02-11 20:17]
La gestione dei task è ora più sicura (usa GUID per evitare doppioni
nel caso di file con nome uguale e fa il cleanup quando le cose si sono
sistemato -> niente più memory leak).
Filename
Dizzy/EventManager.cs
Dizzy/FileTransfer.cs
diff --git a/Dizzy/EventManager.cs b/Dizzy/EventManager.cs
index 703f821..b71aeda 100644
--- a/Dizzy/EventManager.cs
+++ b/Dizzy/EventManager.cs
@@ -140,12 +140,12 @@ namespace Dizzy
 			});
 		}

-		public static void TaskTreeViewAddTask (string filename, int perc)
+		public static void TaskTreeViewAddTask (string filename, int perc, string GUID)
 		{
 			if (taskTreeView == null)
 				return;
 			GLib.Idle.Add (delegate {
-				EventManager.AddIter(filename, taskTreeView.AddTask (filename, perc));
+				EventManager.AddIter(GUID, taskTreeView.AddTask (filename, perc));
 				return false;
 			});

@@ -171,21 +171,26 @@ namespace Dizzy
 			});
 		}

-		public static void AddIter (string filename, TreeIter iter)
+		public static void AddIter (string GUID, TreeIter iter)
 		{
-			iters.Add(filename, iter);
+			iters.Add(GUID, iter);
 		}

-		public static TreeIter GetIter (string filename)
+		public static TreeIter GetIter (string GUID)
 		{
-			try {return iters[filename];}
+			TreeIter ret;
+			try {
+				ret = iters[GUID];
+				iters.Remove (GUID);
+				return ret;
+			}
 			catch (Exception e)
 			{
 				// Aspettiamo nella speranza che le cose vadano meglio
 				Log.Warning ("Sto richiamando GetIter () per ottenre l'iter (" + e.Message + ")");
 				System.Threading.Thread.Sleep(200);
 			}
-			return GetIter(filename);
+			return GetIter(GUID);
 		}

 	}
diff --git a/Dizzy/FileTransfer.cs b/Dizzy/FileTransfer.cs
index 2f55cd9..bb24a5b 100644
--- a/Dizzy/FileTransfer.cs
+++ b/Dizzy/FileTransfer.cs
@@ -17,6 +17,10 @@ namespace Dizzy
 		// L'etichetta da mettere sul trasferimento
 		protected string label;

+		// Un Globally Unique identifier che identifichi il nostro
+		// trasferimento
+		protected string GUID;
+
 		public delegate void Handler(string src, string dest, int transferredBytes,
 		                             int totalBytes, string message);

@@ -52,8 +56,9 @@ namespace Dizzy
 		public void OnTransferStarted (string src, string dest, int transferredBytes,
 		                          int totalBytes, string message)
 		{
-			EventManager.TaskTreeViewAddTask (label, 0);
-			this.iter = EventManager.GetIter (label);
+			GUID =	System.Guid.NewGuid().ToString();
+			EventManager.TaskTreeViewAddTask (label, 0, GUID);
+			this.iter = EventManager.GetIter (GUID);
 		}

 		public void OnTransferProgress(string src, string dest, int transferredBytes,
ViewGit