"Fossies" - the Fresh Open Source Software Archive 
Member "evolution-mapi-3.46.1/src/libexchangemapi/e-source-mapi-folder.c" (2 Dec 2022, 11910 Bytes) of package /linux/misc/evolution-mapi-3.46.1.tar.xz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "e-source-mapi-folder.c" see the
Fossies "Dox" file reference documentation.
1 /*
2 * e-source-mapi-folder.c
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) version 3.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with the program; if not, see <http://www.gnu.org/licenses/>
16 *
17 */
18
19 #include "e-source-mapi-folder.h"
20
21 struct _ESourceMapiFolderPrivate {
22 guint64 fid;
23 guint64 parent_fid;
24 gboolean is_public;
25 gboolean server_notification;
26 gchar *foreign_username;
27 gboolean allow_partial;
28 gint partial_count;
29 };
30
31 enum {
32 PROP_0,
33 PROP_ID,
34 PROP_PARENT_ID,
35 PROP_IS_PUBLIC,
36 PROP_SERVER_NOTIFICATION,
37 PROP_FOREIGN_USERNAME,
38 PROP_ALLOW_PARTIAL,
39 PROP_PARTIAL_COUNT
40 };
41
42 G_DEFINE_DYNAMIC_TYPE_EXTENDED (
43 ESourceMapiFolder,
44 e_source_mapi_folder,
45 E_TYPE_SOURCE_EXTENSION,
46 0,
47 G_ADD_PRIVATE_DYNAMIC (ESourceMapiFolder))
48
49 static void
50 source_mapi_folder_set_property (GObject *object,
51 guint property_id,
52 const GValue *value,
53 GParamSpec *pspec)
54 {
55 switch (property_id) {
56 case PROP_ID:
57 e_source_mapi_folder_set_id (
58 E_SOURCE_MAPI_FOLDER (object),
59 g_value_get_uint64 (value));
60 return;
61
62 case PROP_PARENT_ID:
63 e_source_mapi_folder_set_parent_id (
64 E_SOURCE_MAPI_FOLDER (object),
65 g_value_get_uint64 (value));
66 return;
67
68 case PROP_IS_PUBLIC:
69 e_source_mapi_folder_set_is_public (
70 E_SOURCE_MAPI_FOLDER (object),
71 g_value_get_boolean (value));
72 return;
73
74 case PROP_SERVER_NOTIFICATION:
75 e_source_mapi_folder_set_server_notification (
76 E_SOURCE_MAPI_FOLDER (object),
77 g_value_get_boolean (value));
78 return;
79
80 case PROP_FOREIGN_USERNAME:
81 e_source_mapi_folder_set_foreign_username (
82 E_SOURCE_MAPI_FOLDER (object),
83 g_value_get_string (value));
84 return;
85
86 case PROP_ALLOW_PARTIAL:
87 e_source_mapi_folder_set_allow_partial (
88 E_SOURCE_MAPI_FOLDER (object),
89 g_value_get_boolean (value));
90 return;
91
92 case PROP_PARTIAL_COUNT:
93 e_source_mapi_folder_set_partial_count (
94 E_SOURCE_MAPI_FOLDER (object),
95 g_value_get_int (value));
96 return;
97 }
98
99 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
100 }
101
102 static void
103 source_mapi_folder_get_property (GObject *object,
104 guint property_id,
105 GValue *value,
106 GParamSpec *pspec)
107 {
108 switch (property_id) {
109 case PROP_ID:
110 g_value_set_uint64 (
111 value,
112 e_source_mapi_folder_get_id (
113 E_SOURCE_MAPI_FOLDER (object)));
114 return;
115
116 case PROP_PARENT_ID:
117 g_value_set_uint64 (
118 value,
119 e_source_mapi_folder_get_parent_id (
120 E_SOURCE_MAPI_FOLDER (object)));
121 return;
122
123 case PROP_IS_PUBLIC:
124 g_value_set_boolean (
125 value,
126 e_source_mapi_folder_is_public (
127 E_SOURCE_MAPI_FOLDER (object)));
128 return;
129
130 case PROP_SERVER_NOTIFICATION:
131 g_value_set_boolean (
132 value,
133 e_source_mapi_folder_get_server_notification (
134 E_SOURCE_MAPI_FOLDER (object)));
135 return;
136
137 case PROP_FOREIGN_USERNAME:
138 g_value_take_string (
139 value,
140 e_source_mapi_folder_dup_foreign_username (
141 E_SOURCE_MAPI_FOLDER (object)));
142 return;
143
144 case PROP_ALLOW_PARTIAL:
145 g_value_set_boolean (
146 value,
147 e_source_mapi_folder_get_allow_partial (
148 E_SOURCE_MAPI_FOLDER (object)));
149 return;
150
151 case PROP_PARTIAL_COUNT:
152 g_value_set_int (
153 value,
154 e_source_mapi_folder_get_partial_count (
155 E_SOURCE_MAPI_FOLDER (object)));
156 return;
157 }
158
159 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
160 }
161
162 static void
163 source_mapi_folder_finalize (GObject *object)
164 {
165 ESourceMapiFolder *extension = E_SOURCE_MAPI_FOLDER (object);
166
167 g_free (extension->priv->foreign_username);
168
169 /* Chain up to parent's finalize() method. */
170 G_OBJECT_CLASS (e_source_mapi_folder_parent_class)->finalize (object);
171 }
172
173 static void
174 e_source_mapi_folder_class_init (ESourceMapiFolderClass *class)
175 {
176 GObjectClass *object_class;
177 ESourceExtensionClass *extension_class;
178
179 object_class = G_OBJECT_CLASS (class);
180 object_class->set_property = source_mapi_folder_set_property;
181 object_class->get_property = source_mapi_folder_get_property;
182 object_class->finalize = source_mapi_folder_finalize;
183
184 extension_class = E_SOURCE_EXTENSION_CLASS (class);
185 extension_class->name = E_SOURCE_EXTENSION_MAPI_FOLDER;
186
187 g_object_class_install_property (
188 object_class,
189 PROP_ID,
190 g_param_spec_uint64 (
191 "id",
192 "ID",
193 "The server-assigned folder ID",
194 0, G_MAXUINT64, 0,
195 G_PARAM_READWRITE |
196 G_PARAM_STATIC_STRINGS |
197 E_SOURCE_PARAM_SETTING));
198
199 g_object_class_install_property (
200 object_class,
201 PROP_PARENT_ID,
202 g_param_spec_uint64 (
203 "parent-id",
204 "Parent ID",
205 "The server-assigned folder's parent ID",
206 0, G_MAXUINT64, 0,
207 G_PARAM_READWRITE |
208 G_PARAM_STATIC_STRINGS |
209 E_SOURCE_PARAM_SETTING));
210
211 g_object_class_install_property (
212 object_class,
213 PROP_IS_PUBLIC,
214 g_param_spec_boolean (
215 "is-public",
216 "Is Public",
217 "Folder is a public folder",
218 FALSE,
219 G_PARAM_READWRITE |
220 G_PARAM_STATIC_STRINGS |
221 E_SOURCE_PARAM_SETTING));
222
223 g_object_class_install_property (
224 object_class,
225 PROP_SERVER_NOTIFICATION,
226 g_param_spec_boolean (
227 "server-notification",
228 "Server Notification",
229 "Whether to listen for server notifications on this folder",
230 FALSE,
231 G_PARAM_READWRITE |
232 G_PARAM_STATIC_STRINGS |
233 E_SOURCE_PARAM_SETTING));
234
235 g_object_class_install_property (
236 object_class,
237 PROP_FOREIGN_USERNAME,
238 g_param_spec_string (
239 "foreign-username",
240 "Foreign Username",
241 "Set for folders belonging to other (foreign) users",
242 NULL,
243 G_PARAM_READWRITE |
244 G_PARAM_STATIC_STRINGS |
245 E_SOURCE_PARAM_SETTING));
246
247 g_object_class_install_property (
248 object_class,
249 PROP_ALLOW_PARTIAL,
250 g_param_spec_boolean (
251 "allow-partial",
252 "Allow Partial",
253 "Allow Partial fetching for GAL",
254 TRUE,
255 G_PARAM_READWRITE |
256 G_PARAM_STATIC_STRINGS |
257 E_SOURCE_PARAM_SETTING));
258
259 g_object_class_install_property (
260 object_class,
261 PROP_PARTIAL_COUNT,
262 g_param_spec_int (
263 "partial-count",
264 "Partial Count",
265 "Count of contacts for Partial fetching of GAL",
266 G_MININT, G_MAXINT, 50,
267 G_PARAM_READWRITE |
268 G_PARAM_STATIC_STRINGS |
269 E_SOURCE_PARAM_SETTING));
270 }
271
272 static void
273 e_source_mapi_folder_class_finalize (ESourceMapiFolderClass *class)
274 {
275 }
276
277 static void
278 e_source_mapi_folder_init (ESourceMapiFolder *extension)
279 {
280 extension->priv = e_source_mapi_folder_get_instance_private (extension);
281
282 extension->priv->fid = 0;
283 extension->priv->parent_fid = 0;
284 extension->priv->is_public = FALSE;
285 extension->priv->server_notification = FALSE;
286 extension->priv->foreign_username = NULL;
287 extension->priv->allow_partial = TRUE;
288 extension->priv->partial_count = 50;
289 }
290
291 void
292 e_source_mapi_folder_type_register (GTypeModule *type_module)
293 {
294 /* XXX G_DEFINE_DYNAMIC_TYPE_EXTENDED declares a static type registration
295 * function, so we have to wrap it with a public function in
296 * order to register types from a separate compilation unit. */
297 e_source_mapi_folder_register_type (type_module);
298 }
299
300 guint64
301 e_source_mapi_folder_get_id (ESourceMapiFolder *extension)
302 {
303 g_return_val_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension), 0);
304
305 return extension->priv->fid;
306 }
307
308 void
309 e_source_mapi_folder_set_id (ESourceMapiFolder *extension,
310 guint64 id)
311 {
312 g_return_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension));
313
314 if (extension->priv->fid == id)
315 return;
316
317 extension->priv->fid = id;
318
319 g_object_notify (G_OBJECT (extension), "id");
320 }
321
322 guint64
323 e_source_mapi_folder_get_parent_id (ESourceMapiFolder *extension)
324 {
325 g_return_val_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension), 0);
326
327 return extension->priv->parent_fid;
328 }
329
330 void
331 e_source_mapi_folder_set_parent_id (ESourceMapiFolder *extension,
332 guint64 id)
333 {
334 g_return_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension));
335
336 if (extension->priv->parent_fid == id)
337 return;
338
339 extension->priv->parent_fid = id;
340
341 g_object_notify (G_OBJECT (extension), "parent-id");
342 }
343
344 gboolean
345 e_source_mapi_folder_is_public (ESourceMapiFolder *extension)
346 {
347 g_return_val_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension), FALSE);
348
349 return extension->priv->is_public;
350 }
351
352 void
353 e_source_mapi_folder_set_is_public (ESourceMapiFolder *extension,
354 gboolean is_public)
355 {
356 g_return_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension));
357
358 if ((extension->priv->is_public ? 1 : 0) == (is_public ? 1 : 0))
359 return;
360
361 extension->priv->is_public = is_public;
362
363 g_object_notify (G_OBJECT (extension), "is-public");
364 }
365
366 gboolean
367 e_source_mapi_folder_get_allow_partial (ESourceMapiFolder *extension)
368 {
369 g_return_val_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension), FALSE);
370
371 return extension->priv->allow_partial;
372 }
373
374 void
375 e_source_mapi_folder_set_allow_partial (ESourceMapiFolder *extension,
376 gboolean allow_partial)
377 {
378 g_return_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension));
379
380 if ((extension->priv->allow_partial ? 1 : 0) == (allow_partial ? 1 : 0))
381 return;
382
383 extension->priv->allow_partial = allow_partial;
384
385 g_object_notify (G_OBJECT (extension), "allow-partial");
386 }
387
388 gint
389 e_source_mapi_folder_get_partial_count (ESourceMapiFolder *extension)
390 {
391 g_return_val_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension), FALSE);
392
393 return extension->priv->partial_count;
394 }
395
396 void
397 e_source_mapi_folder_set_partial_count (ESourceMapiFolder *extension,
398 gint partial_count)
399 {
400 g_return_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension));
401
402 if (extension->priv->partial_count == partial_count)
403 return;
404
405 extension->priv->partial_count = partial_count;
406
407 g_object_notify (G_OBJECT (extension), "partial-count");
408 }
409
410 gboolean
411 e_source_mapi_folder_get_server_notification (ESourceMapiFolder *extension)
412 {
413 g_return_val_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension), FALSE);
414
415 return extension->priv->server_notification;
416 }
417
418 void
419 e_source_mapi_folder_set_server_notification (ESourceMapiFolder *extension,
420 gboolean server_notification)
421 {
422 g_return_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension));
423
424 if ((extension->priv->server_notification ? 1 : 0) == (server_notification ? 1 : 0))
425 return;
426
427 extension->priv->server_notification = server_notification;
428
429 g_object_notify (G_OBJECT (extension), "server-notification");
430 }
431
432 const gchar *
433 e_source_mapi_folder_get_foreign_username (ESourceMapiFolder *extension)
434 {
435 g_return_val_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension), NULL);
436
437 return extension->priv->foreign_username;
438 }
439
440 gchar *
441 e_source_mapi_folder_dup_foreign_username (ESourceMapiFolder *extension)
442 {
443 gchar *duplicate;
444
445 g_return_val_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension), NULL);
446
447 e_source_extension_property_lock (E_SOURCE_EXTENSION (extension));
448
449 duplicate = g_strdup (e_source_mapi_folder_get_foreign_username (extension));
450
451 e_source_extension_property_unlock (E_SOURCE_EXTENSION (extension));
452
453 return duplicate;
454 }
455
456 void
457 e_source_mapi_folder_set_foreign_username (ESourceMapiFolder *extension,
458 const gchar *foreign_username)
459 {
460 g_return_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension));
461
462 e_source_extension_property_lock (E_SOURCE_EXTENSION (extension));
463
464 if (foreign_username && !*foreign_username)
465 foreign_username = NULL;
466
467 if (g_strcmp0 (extension->priv->foreign_username, foreign_username) == 0) {
468 e_source_extension_property_unlock (E_SOURCE_EXTENSION (extension));
469 return;
470 }
471
472 g_free (extension->priv->foreign_username);
473 extension->priv->foreign_username = g_strdup (foreign_username);
474
475 e_source_extension_property_unlock (E_SOURCE_EXTENSION (extension));
476
477 g_object_notify (G_OBJECT (extension), "foreign-username");
478 }