void AddQuery (object query)
{
lock (queryLock) {
if (query is VersionInfoQuery) {
VersionInfoQuery vi = (VersionInfoQuery)query;
vi.Paths.RemoveAll (p => filesInQueryQueue.Contains (p) || directoriesInQueryQueue.Contains (p.ParentDirectory));
if (vi.Paths.Count == 0)
return;
filesInQueryQueue.UnionWith (vi.Paths);
fileQueryQueue.Enqueue (vi);
// Console.WriteLine ("GetVersionInfo AddQuery " + string.Join (", ", vi.Paths.Select (p => p.FullPath)));
} else if (query is RecursiveDirectoryInfoQuery) {
var di = (RecursiveDirectoryInfoQuery)query;
if (!recursiveDirectoriesInQueryQueue.Add (di.Directory))
return;
recursiveDirectoryQueryQueue.Enqueue (di);
} else if (query is DirectoryInfoQuery) {
DirectoryInfoQuery di = (DirectoryInfoQuery)query;
if (!directoriesInQueryQueue.Add (di.Directory))
return;
directoryQueryQueue.Enqueue (di);
// Console.WriteLine ("GetDirectoryVersionInfo AddQuery " + ((DirectoryInfoQuery)query).Directory);
}
if (!queryRunning) {
queryRunning = true;
ThreadPool.QueueUserWorkItem (RunQueries);
}
}
}