cvsimport
[beagle.git] / beagled / EvolutionDataServerQueryable / SourcesHandler.cs
blob66b2dd9a9ac91ec0b6664923b174356e188cf36d
1 //
2 // SourcesHandler.cs
3 //
4 // Copyright (C) 2005 Novell, Inc.
5 //
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining a
9 // copy of this software and associated documentation files (the "Software"),
10 // to deal in the Software without restriction, including without limitation
11 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
12 // and/or sell copies of the Software, and to permit persons to whom the
13 // Software is furnished to do so, subject to the following conditions:
15 // The above copyright notice and this permission notice shall be included in
16 // all copies or substantial portions of the Software.
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24 // DEALINGS IN THE SOFTWARE.
27 using System;
28 using System.Collections;
30 using Beagle.Util;
32 using Evolution;
34 namespace Beagle.Daemon.EvolutionDataServerQueryable {
36 public class SourcesHandler {
38 Type container_type;
39 EvolutionDataServerQueryable queryable;
40 string fingerprint;
41 SourceList source_list;
42 Hashtable src_to_cont_map = new Hashtable ();
44 public SourcesHandler (string gconf_key, Type container_type, EvolutionDataServerQueryable queryable, string fingerprint)
46 this.container_type = container_type;
47 this.queryable = queryable;
48 this.fingerprint = fingerprint;
50 // This is the first code to hit e-d-s, so we might
51 // get a DllNotFoundException exception if things
52 // aren't configured correctly. However, since
53 // we're instantiating an object, it might be
54 // wrapped in a TypeInitializationException, so
55 // catch that and rethrow the inner exception.
56 try {
57 this.source_list = new SourceList (gconf_key);
58 } catch (TypeInitializationException ex) {
59 throw ex.InnerException;
62 if (this.source_list == null) {
63 // FIXME: We may want to watch for the creation
64 // of the sources GConf key
65 Logger.Log.Info ("No sources found at {0}", gconf_key);
66 return;
69 this.source_list.GroupAdded += OnGroupAdded;
70 this.source_list.GroupRemoved += OnGroupRemoved;
72 foreach (SourceGroup group in this.source_list.Groups)
73 IndexSourceGroup (group, false);
76 private void IndexSourceGroup (SourceGroup group, bool all_items)
78 group.SourceAdded += OnSourceAdded;
79 group.SourceRemoved += OnSourceRemoved;
81 foreach (Evolution.Source src in group.Sources) {
82 Container cont = (Container) Activator.CreateInstance (this.container_type, new object[] { src, this.queryable, this.fingerprint });
83 if (!cont.OpenClient ())
84 continue;
86 src_to_cont_map [src] = cont;
88 if (all_items)
89 cont.IndexAll ();
90 else
91 cont.IndexChanges ();
93 cont.OpenView ();
97 private void RemoveSourceGroup (SourceGroup group)
99 foreach (Evolution.Source src in group.Sources) {
100 Container cont = (Container) src_to_cont_map [src];
101 cont.Remove ();
102 src_to_cont_map.Remove (src);
106 private void OnGroupAdded (object o, GroupAddedArgs args)
108 IndexSourceGroup (args.Group, true);
111 private void OnGroupRemoved (object o, GroupRemovedArgs args)
113 RemoveSourceGroup (args.Group);
116 private void OnSourceAdded (object o, SourceAddedArgs args)
118 Container cont = (Container) Activator.CreateInstance (this.container_type, new object[] { args.Source, this.queryable, this.fingerprint });
119 if (!cont.OpenClient ())
120 return;
121 cont.IndexAll ();
122 cont.OpenView ();
125 private void OnSourceRemoved (object o, SourceRemovedArgs args)
127 Container cont = (Container) src_to_cont_map [args.Source];
128 cont.Remove ();