private static void SynchroniseSearches() { Dictionary <String, Search> localSearches = new Dictionary <String, Search>(); foreach (IXenConnection connection in ConnectionsManager.XenConnectionsCopy) { connection.Cache.RegisterBatchCollectionChanged <Pool>(Pool_BatchCollectionChanged); foreach (Pool pool in connection.Cache.Pools) { foreach (KeyValuePair <String, String> kvp in pool.gui_config) { if (!kvp.Key.StartsWith(SearchPrefix)) { continue; } String uuid = kvp.Key.Substring(SearchPrefix.Length); Search search = SearchMarshalling.LoadSearch(kvp.Value); if (search == null) { continue; } search.Connection = connection; localSearches[uuid] = search; } } } bool changed = false; lock (searches) { String[] uuids = new String[searches.Keys.Count]; searches.Keys.CopyTo(uuids, 0); foreach (String uuid in uuids) { if (searches[uuid].DefaultSearch) { continue; } if (localSearches.ContainsKey(uuid)) { continue; } searches.Remove(uuid); changed = true; } foreach (Search search in localSearches.Values) { if (searches.ContainsKey(search.UUID)) { if (searches[search.UUID].Equals(search)) { continue; } // try and persist the number of items in a // search, so they don't flick back to 0 search.items = searches[search.UUID].items; } searches[search.UUID] = search; changed = true; } } if (changed) { OnSearchesChanged(); } }
public static void InitSearch() { defaultTreeSearch = SearchMarshalling.LoadSearch(Properties.Settings.Default.DefaultSearch); }