]> git.0d.be Git - empathy.git/blob - libempathy-gtk/empathy-roster-model-aggregator.c
8aa20f93400dc21b7d94377c032cc23d9bea2fb6
[empathy.git] / libempathy-gtk / empathy-roster-model-aggregator.c
1 /*
2  * empathy-roster-model-aggregator.c
3  *
4  * Implementation of EmpathyRosterModel using FolksIndividualAggregator as
5  * source.
6  *
7  * Copyright (C) 2012 Collabora Ltd. <http://www.collabora.co.uk/>
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
22  */
23
24
25 #include "config.h"
26
27 #include <folks/folks.h>
28 #include <folks/folks-telepathy.h>
29
30 #include "empathy-roster-model-aggregator.h"
31
32 #include "empathy-roster-model.h"
33
34 /**
35  * SECTION: empathy-roster-model-aggregator
36  * @title: EmpathyRosterModelAggregator
37  * @short_description: TODO
38  *
39  * TODO
40  */
41
42 /**
43  * EmpathyRosterModelAggregator:
44  *
45  * Data structure representing a #EmpathyRosterModelAggregator.
46  *
47  * Since: UNRELEASED
48  */
49
50 /**
51  * EmpathyRosterModelAggregatorClass:
52  *
53  * The class of a #EmpathyRosterModelAggregator.
54  *
55  * Since: UNRELEASED
56  */
57
58 static void roster_model_iface_init (EmpathyRosterModelInterface *iface);
59
60 G_DEFINE_TYPE_WITH_CODE (EmpathyRosterModelAggregator,
61     empathy_roster_model_aggregator,
62     G_TYPE_OBJECT,
63     G_IMPLEMENT_INTERFACE (EMPATHY_TYPE_ROSTER_MODEL, roster_model_iface_init))
64
65 enum
66 {
67   PROP_AGGREGATOR = 1,
68   N_PROPS
69 };
70
71 /*
72 enum
73 {
74   LAST_SIGNAL
75 };
76
77 static guint signals[LAST_SIGNAL];
78 */
79
80 struct _EmpathyRosterModelAggregatorPriv
81 {
82   FolksIndividualAggregator *aggregator;
83 };
84
85 static void
86 empathy_roster_model_aggregator_get_property (GObject *object,
87     guint property_id,
88     GValue *value,
89     GParamSpec *pspec)
90 {
91   EmpathyRosterModelAggregator *self = EMPATHY_ROSTER_MODEL_AGGREGATOR (object);
92
93   switch (property_id)
94     {
95       case PROP_AGGREGATOR:
96         g_value_set_object (value, self->priv->aggregator);
97         break;
98       default:
99         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
100         break;
101     }
102 }
103
104 static void
105 empathy_roster_model_aggregator_set_property (GObject *object,
106     guint property_id,
107     const GValue *value,
108     GParamSpec *pspec)
109 {
110   EmpathyRosterModelAggregator *self = EMPATHY_ROSTER_MODEL_AGGREGATOR (object);
111
112   switch (property_id)
113     {
114       case PROP_AGGREGATOR:
115         g_assert (self->priv->aggregator == NULL); /* construct only */
116         self->priv->aggregator = g_value_dup_object (value);
117         break;
118       default:
119         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
120         break;
121     }
122 }
123
124 static void
125 empathy_roster_model_aggregator_constructed (GObject *object)
126 {
127   EmpathyRosterModelAggregator *self = EMPATHY_ROSTER_MODEL_AGGREGATOR (object);
128   void (*chain_up) (GObject *) =
129       ((GObjectClass *) empathy_roster_model_aggregator_parent_class)->constructed;
130
131   if (chain_up != NULL)
132     chain_up (object);
133
134   if (self->priv->aggregator == NULL)
135     self->priv->aggregator = folks_individual_aggregator_new ();
136
137   g_assert (FOLKS_IS_INDIVIDUAL_AGGREGATOR (self->priv->aggregator));
138 }
139
140 static void
141 empathy_roster_model_aggregator_dispose (GObject *object)
142 {
143   EmpathyRosterModelAggregator *self = EMPATHY_ROSTER_MODEL_AGGREGATOR (object);
144   void (*chain_up) (GObject *) =
145       ((GObjectClass *) empathy_roster_model_aggregator_parent_class)->dispose;
146
147   g_clear_object (&self->priv->aggregator);
148
149   if (chain_up != NULL)
150     chain_up (object);
151 }
152
153 static void
154 empathy_roster_model_aggregator_finalize (GObject *object)
155 {
156   //EmpathyRosterModelAggregator *self = EMPATHY_ROSTER_MODEL_AGGREGATOR (object);
157   void (*chain_up) (GObject *) =
158       ((GObjectClass *) empathy_roster_model_aggregator_parent_class)->finalize;
159
160   if (chain_up != NULL)
161     chain_up (object);
162 }
163
164 static void
165 empathy_roster_model_aggregator_class_init (
166     EmpathyRosterModelAggregatorClass *klass)
167 {
168   GObjectClass *oclass = G_OBJECT_CLASS (klass);
169   GParamSpec *spec;
170
171   oclass->get_property = empathy_roster_model_aggregator_get_property;
172   oclass->set_property = empathy_roster_model_aggregator_set_property;
173   oclass->constructed = empathy_roster_model_aggregator_constructed;
174   oclass->dispose = empathy_roster_model_aggregator_dispose;
175   oclass->finalize = empathy_roster_model_aggregator_finalize;
176
177   spec = g_param_spec_object ("aggregator", "Aggregator",
178       "FolksIndividualAggregator",
179       FOLKS_TYPE_INDIVIDUAL_AGGREGATOR,
180       G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
181   g_object_class_install_property (oclass, PROP_AGGREGATOR, spec);
182
183   g_type_class_add_private (klass, sizeof (EmpathyRosterModelAggregatorPriv));
184 }
185
186 static void
187 empathy_roster_model_aggregator_init (EmpathyRosterModelAggregator *self)
188 {
189   self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
190       EMPATHY_TYPE_ROSTER_MODEL_AGGREGATOR, EmpathyRosterModelAggregatorPriv);
191 }
192
193 EmpathyRosterModelAggregator *
194 empathy_roster_model_aggregator_new (void)
195 {
196   return g_object_new (EMPATHY_TYPE_ROSTER_MODEL_AGGREGATOR,
197       NULL);
198 }
199
200 EmpathyRosterModelAggregator *
201 empathy_roster_model_aggregator_new_with_aggregator (
202     FolksIndividualAggregator *aggregator)
203 {
204   g_return_val_if_fail (FOLKS_IS_INDIVIDUAL_AGGREGATOR (aggregator), NULL);
205
206   return g_object_new (EMPATHY_TYPE_ROSTER_MODEL_AGGREGATOR,
207       "aggregator", aggregator,
208       NULL);
209 }
210
211 static void
212 roster_model_iface_init (EmpathyRosterModelInterface *iface)
213 {
214
215 }