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).
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,