Beispiel #1
0
        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();
            }
        }
Beispiel #2
0
 public static void InitSearch()
 {
     defaultTreeSearch = SearchMarshalling.LoadSearch(Properties.Settings.Default.DefaultSearch);
 }