4 * Copyright (c) 2012 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
26 #include "cal_internal.h"
27 #include "cal_typedef.h"
28 #include "cal_handle.h"
29 #include "cal_utils.h"
31 #define CAL_DBUS_SET_STRING(x) (x) ? x : ""
32 #define CAL_DBUS_GET_STRING(x) do { \
33 x = (NULL != x) ? strdup(x) : NULL; \
36 GVariant* cal_dbus_utils_null_to_gvariant(void)
38 GVariant *value = NULL;
39 value = g_variant_new("(s)", "");
43 GVariant *cal_dbus_utils_char_to_gvariant(unsigned char *ch, int count)
45 GVariantBuilder builder;
46 g_variant_builder_init(&builder, G_VARIANT_TYPE("ay"));
49 for (i = 0; i < count; i++)
50 g_variant_builder_add(&builder, "y", ch[i]);
52 return g_variant_builder_end(&builder);
55 int cal_dbus_utils_gvariant_to_char(GVariant *arg_char, int count,
56 unsigned char **out_flag)
59 return CALENDAR_ERROR_NONE;
61 GVariantIter *iter_char = NULL;
62 g_variant_get(arg_char, "ay", &iter_char);
64 unsigned char *flag = calloc(count, sizeof(unsigned char));
67 return CALENDAR_ERROR_OUT_OF_MEMORY;
70 for (i = 0; i < count; i++)
71 g_variant_iter_loop(iter_char, "y", &flag[i]);
74 return CALENDAR_ERROR_NONE;
77 GVariant* cal_dbus_utils_common_to_gvariant(cal_record_s *rec)
79 GVariant *arg_flags = cal_dbus_utils_char_to_gvariant(rec->properties_flags,
80 rec->properties_max_count);
81 GVariant *value = NULL;
82 value = g_variant_new("(isuvy)",
84 CAL_DBUS_SET_STRING(rec->view_uri),
85 rec->properties_max_count,
91 int cal_dbus_utils_gvariant_to_common(GVariant *arg_common, calendar_record_h *record)
93 cal_record_s rec = {0};
94 GVariant *arg_flags = NULL;
95 g_variant_get(arg_common, "(i&suvy)",
98 &rec.properties_max_count,
101 CAL_DBUS_GET_STRING(rec.view_uri);
102 cal_dbus_utils_gvariant_to_char(arg_flags, rec.properties_max_count,
103 &rec.properties_flags);
105 cal_record_s *p = ((cal_record_s *)(*record));
107 p->properties_max_count = rec.properties_max_count;
108 p->properties_flags = rec.properties_flags;
110 return CALENDAR_ERROR_NONE;
113 GVariant* cal_dbus_utils_handle_to_gvariant(calendar_h handle)
115 GVariant *value = NULL;
116 cal_s *p = (cal_s *)handle;
117 value = g_variant_new("(ii)",
118 p->version, p->connection_count);
122 static GVariant* _caltime_to_gvariant(calendar_time_s *ct)
124 GVariant *value = NULL;
126 case CALENDAR_TIME_UTIME:
127 value = g_variant_new("(x)", ct->time.utime);
129 case CALENDAR_TIME_LOCALTIME:
130 value = g_variant_new("(iiiiii)",
131 ct->time.date.year, ct->time.date.month, ct->time.date.mday,
132 ct->time.date.hour, ct->time.date.minute, ct->time.date.second);
138 static int _gvariant_to_caltime(int type, GVariant *arg_caltime, calendar_time_s *ct)
141 case CALENDAR_TIME_UTIME:
142 g_variant_get(arg_caltime, "(x)", &ct->time.utime);
144 case CALENDAR_TIME_LOCALTIME:
145 g_variant_get(arg_caltime, "(iiiiii)",
146 &ct->time.date.year, &ct->time.date.month, &ct->time.date.mday,
147 &ct->time.date.hour, &ct->time.date.minute, &ct->time.date.second);
150 return CALENDAR_ERROR_NONE;
153 GVariant *cal_dbus_utils_ids_to_gvariant(int *ids, int count)
155 GVariantBuilder builder;
156 g_variant_builder_init(&builder, G_VARIANT_TYPE("ai"));
159 for (i = 0; i < count; i++)
160 g_variant_builder_add(&builder, "i", ids[i]);
162 return g_variant_builder_end(&builder);
165 static void _set_attribute_filter(GVariantBuilder *builder, cal_attribute_filter_s* filter)
167 g_variant_builder_add(builder, "v", g_variant_new("i", filter->filter_type));
168 g_variant_builder_add(builder, "v", g_variant_new("i", filter->property_id));
169 g_variant_builder_add(builder, "v", g_variant_new("i", filter->match));
170 switch (filter->filter_type) {
172 g_variant_builder_add(builder, "v",
173 g_variant_new("s", CAL_DBUS_SET_STRING(filter->value.s)));
176 g_variant_builder_add(builder, "v", g_variant_new("i", filter->value.i));
178 case CAL_FILTER_DOUBLE:
179 g_variant_builder_add(builder, "v", g_variant_new("d", filter->value.d));
182 g_variant_builder_add(builder, "v", g_variant_new("x", filter->value.lli));
184 case CAL_FILTER_CALTIME:
185 g_variant_builder_add(builder, "v", g_variant_new("(iv)", filter->value.caltime.type,
186 _caltime_to_gvariant(&filter->value.caltime)));
189 ERR("Invalid parameter(0x%x)", filter->property_id);
194 static void _set_composite_filter(GVariantBuilder *builder, cal_composite_filter_s *filter)
196 g_variant_builder_add(builder, "v", g_variant_new("i", filter->filter_type));
197 g_variant_builder_add(builder, "v",
198 g_variant_new("s", CAL_DBUS_SET_STRING(filter->view_uri)));
201 if (NULL == filter->filters) {
203 g_variant_builder_add(builder, "v", g_variant_new("i", 0));
206 GSList *cursor = NULL;
207 int filter_count = g_slist_length(filter->filters);
208 g_variant_builder_add(builder, "v", g_variant_new("i", filter_count));
209 cursor = filter->filters;
211 cal_filter_s* child_filter = (cal_filter_s*)cursor->data;
212 if (CAL_FILTER_COMPOSITE == child_filter->filter_type)
213 _set_composite_filter(builder, (cal_composite_filter_s *)child_filter);
215 _set_attribute_filter(builder, (cal_attribute_filter_s *)child_filter);
217 cursor = g_slist_next(cursor);
222 if (NULL == filter->filter_ops) {
224 g_variant_builder_add(builder, "v", g_variant_new("i", 0));
227 int ops_count = g_slist_length(filter->filter_ops);
228 g_variant_builder_add(builder, "v", g_variant_new("i", ops_count));
229 GSList *cursor = NULL;
230 cursor = filter->filter_ops;
232 calendar_filter_operator_e op = (calendar_filter_operator_e)cursor->data;
233 g_variant_builder_add(builder, "v", g_variant_new("i", op));
234 cursor = g_slist_next(cursor);
239 static GVariant *_filter_to_gvariant(cal_composite_filter_s *f)
241 GVariantBuilder builder;
242 g_variant_builder_init(&builder, G_VARIANT_TYPE("av"));
243 _set_composite_filter(&builder, f);
244 return g_variant_builder_end(&builder);
247 static GVariant *_projection_to_gvariant(cal_query_s *q)
250 GVariantBuilder builder;
251 g_variant_builder_init(&builder, G_VARIANT_TYPE("au"));
252 for (i = 0; i < q->projection_count; i++)
253 g_variant_builder_add(&builder, "u", q->projection[i]);
255 return g_variant_builder_end(&builder);
258 GVariant *cal_dbus_utils_query_to_gvariant(calendar_query_h query)
260 RETV_IF(NULL == query, NULL);
262 cal_query_s *q = (cal_query_s *)query;
264 GVariant *arg_filter = NULL;
267 arg_filter = _filter_to_gvariant(q->filter);
270 arg_filter = cal_dbus_utils_null_to_gvariant();
273 GVariant *arg_projection = NULL;
274 if (q->projection_count)
275 arg_projection = _projection_to_gvariant(q);
277 arg_projection = cal_dbus_utils_null_to_gvariant();
279 GVariant *value = NULL;
280 value = g_variant_new("(siviviii)",
281 CAL_DBUS_SET_STRING(q->view_uri), has_filter, arg_filter,
282 q->projection_count, arg_projection,
283 q->sort_property_id, (int)q->asc, (int)q->distinct);
289 static GVariant *_book_to_gvariant(calendar_record_h record)
291 RETV_IF(NULL == record, NULL);
293 GVariant *value = NULL;
294 cal_book_s *p = (cal_book_s *)record;
295 value = g_variant_new("(iisissssiiiissssi)",
296 p->index, p->store_type,
297 CAL_DBUS_SET_STRING(p->uid),
299 CAL_DBUS_SET_STRING(p->name),
300 CAL_DBUS_SET_STRING(p->description),
301 CAL_DBUS_SET_STRING(p->color),
302 CAL_DBUS_SET_STRING(p->location),
303 p->visibility, p->sync_event, p->is_deleted, p->account_id,
304 CAL_DBUS_SET_STRING(p->sync_data1),
305 CAL_DBUS_SET_STRING(p->sync_data2),
306 CAL_DBUS_SET_STRING(p->sync_data3),
307 CAL_DBUS_SET_STRING(p->sync_data4),
312 static GVariant *_only_event_to_gvariant(calendar_record_h record)
314 GVariant *value = NULL;
315 cal_event_s *p = (cal_event_s *)record;
316 RETV_IF(NULL == record, NULL);
318 GVariant *arg_until = _caltime_to_gvariant(&p->until);
319 GVariant *arg_start = _caltime_to_gvariant(&p->start);
320 GVariant *arg_end = _caltime_to_gvariant(&p->end);
322 value = g_variant_new("(iisssssiiiiiiisssiddixixiiiviisssssssssissiiiissssivsivsi)",
323 p->index, p->calendar_id,
324 CAL_DBUS_SET_STRING(p->summary),
325 CAL_DBUS_SET_STRING(p->description),
326 CAL_DBUS_SET_STRING(p->location),
327 CAL_DBUS_SET_STRING(p->categories),
328 CAL_DBUS_SET_STRING(p->exdate),
329 p->event_status, p->priority, p->timezone, p->contact_id, p->busy_status,
330 p->sensitivity, p->meeting_status,
331 CAL_DBUS_SET_STRING(p->uid),
332 CAL_DBUS_SET_STRING(p->organizer_name),
333 CAL_DBUS_SET_STRING(p->organizer_email),
334 p->original_event_id, p->latitude, p->longitude, p->email_id,
335 p->created_time, p->is_deleted, p->last_mod, p->freq, p->range_type,
336 p->until.type, arg_until, p->count, p->interval,
337 CAL_DBUS_SET_STRING(p->bysecond),
338 CAL_DBUS_SET_STRING(p->byminute),
339 CAL_DBUS_SET_STRING(p->byhour),
340 CAL_DBUS_SET_STRING(p->byday),
341 CAL_DBUS_SET_STRING(p->bymonthday),
342 CAL_DBUS_SET_STRING(p->byyearday),
343 CAL_DBUS_SET_STRING(p->byweekno),
344 CAL_DBUS_SET_STRING(p->bymonth),
345 CAL_DBUS_SET_STRING(p->bysetpos),
347 CAL_DBUS_SET_STRING(p->recurrence_id),
348 CAL_DBUS_SET_STRING(p->rdate),
349 p->has_attendee, p->has_alarm, p->system_type, p->updated,
350 CAL_DBUS_SET_STRING(p->sync_data1),
351 CAL_DBUS_SET_STRING(p->sync_data2),
352 CAL_DBUS_SET_STRING(p->sync_data3),
353 CAL_DBUS_SET_STRING(p->sync_data4),
354 p->start.type, arg_start,
355 CAL_DBUS_SET_STRING(p->start_tzid),
356 p->end.type, arg_end,
357 CAL_DBUS_SET_STRING(p->end_tzid),
362 static GVariant *_alarm_to_gvariant(calendar_record_h record)
364 GVariant *value = NULL;
365 cal_alarm_s *p = (cal_alarm_s *)record;
366 GVariant *arg_alarm = _caltime_to_gvariant(&p->alarm);
367 value = g_variant_new("(iiiiissisiv)",
368 p->id, p->parent_id, p->is_deleted, p->remind_tick, p->remind_tick_unit,
369 CAL_DBUS_SET_STRING(p->alarm_description),
370 CAL_DBUS_SET_STRING(p->alarm_summary),
372 CAL_DBUS_SET_STRING(p->alarm_attach),
373 p->alarm.type, arg_alarm);
377 static GVariant *_attendee_to_gvariant(calendar_record_h record)
379 GVariant *value = NULL;
380 cal_attendee_s *p = (cal_attendee_s *)record;
381 value = g_variant_new("(iisiisssiiissss)",
383 CAL_DBUS_SET_STRING(p->attendee_number),
384 p->attendee_cutype, p->attendee_ct_index,
385 CAL_DBUS_SET_STRING(p->attendee_uid),
386 CAL_DBUS_SET_STRING(p->attendee_group),
387 CAL_DBUS_SET_STRING(p->attendee_email),
388 p->attendee_role, p->attendee_status, p->attendee_rsvp,
389 CAL_DBUS_SET_STRING(p->attendee_delegatee_uri),
390 CAL_DBUS_SET_STRING(p->attendee_delegator_uri),
391 CAL_DBUS_SET_STRING(p->attendee_name),
392 CAL_DBUS_SET_STRING(p->attendee_member));
396 static GVariant *_timezone_to_gvariant(calendar_record_h record)
398 GVariant *value = NULL;
399 cal_timezone_s *p = (cal_timezone_s *)record;
400 value = g_variant_new("(iisiiiiisiiiiii)",
401 p->index, p->tz_offset_from_gmt,
402 CAL_DBUS_SET_STRING(p->standard_name),
403 p->std_start_month, p->std_start_position_of_week, p->std_start_day,
404 p->std_start_hour, p->standard_bias,
405 CAL_DBUS_SET_STRING(p->day_light_name),
406 p->day_light_start_month, p->day_light_start_position_of_week,
407 p->day_light_start_day, p->day_light_start_hour, p->day_light_bias,
412 static GVariant *_extended_to_gvariant(calendar_record_h record)
414 GVariant *value = NULL;
415 cal_extended_s *p = (cal_extended_s *)record;
416 value = g_variant_new("(iiiss)",
417 p->id, p->record_id, p->record_type,
418 CAL_DBUS_SET_STRING(p->key),
419 CAL_DBUS_SET_STRING(p->value));
423 static GVariant *_event_to_gvariant(calendar_record_h record)
426 RETV_IF(NULL == record, NULL);
428 GVariant *arg_only_event = _only_event_to_gvariant(record);
429 if (NULL == arg_only_event) {
430 ERR("_only_event_to_gvariant() Fail");
434 unsigned int count_alarm = 0;
435 GVariantBuilder builder_alarm;
436 g_variant_builder_init(&builder_alarm, G_VARIANT_TYPE("av"));
437 calendar_record_get_child_record_count(record, _calendar_event.calendar_alarm, &count_alarm);
438 if (0 < count_alarm) {
439 for (i = 0 ; i < count_alarm; i++) {
440 calendar_record_h alarm = NULL;
441 calendar_record_get_child_record_at_p(record, _calendar_event.calendar_alarm, i, &alarm);
442 g_variant_builder_add(&builder_alarm, "v", _alarm_to_gvariant(alarm));
446 g_variant_builder_add(&builder_alarm, "v", cal_dbus_utils_null_to_gvariant());
449 unsigned int count_attendee = 0;
450 GVariantBuilder builder_attendee;
451 g_variant_builder_init(&builder_attendee, G_VARIANT_TYPE("av"));
452 calendar_record_get_child_record_count(record, _calendar_event.calendar_attendee, &count_attendee);
453 if (0 < count_attendee) {
454 for (i = 0 ; i < count_attendee; i++) {
455 calendar_record_h attendee = NULL;
456 calendar_record_get_child_record_at_p(record, _calendar_event.calendar_attendee, i, &attendee);
457 g_variant_builder_add(&builder_attendee, "v", _attendee_to_gvariant(attendee));
461 g_variant_builder_add(&builder_attendee, "v", cal_dbus_utils_null_to_gvariant());
464 unsigned int count_exception = 0;
465 GVariantBuilder builder_exception;
466 g_variant_builder_init(&builder_exception, G_VARIANT_TYPE("av"));
467 calendar_record_get_child_record_count(record, _calendar_event.exception, &count_exception);
468 if (0 < count_exception) {
469 for (i = 0 ; i < count_exception; i++) {
470 calendar_record_h exception = NULL;
471 calendar_record_get_child_record_at_p(record, _calendar_event.exception, i, &exception);
472 g_variant_builder_add(&builder_exception, "v", _only_event_to_gvariant(exception));
476 g_variant_builder_add(&builder_exception, "v", cal_dbus_utils_null_to_gvariant());
479 unsigned int count_extended = 0;
480 GVariantBuilder builder_extended;
481 g_variant_builder_init(&builder_extended, G_VARIANT_TYPE("av"));
482 calendar_record_get_child_record_count(record, _calendar_event.extended, &count_extended);
483 if (0 < count_extended) {
484 for (i = 0 ; i < count_extended; i++) {
485 calendar_record_h extended = NULL;
486 calendar_record_get_child_record_at_p(record, _calendar_event.extended, i, &extended);
487 g_variant_builder_add(&builder_extended, "v", _extended_to_gvariant(extended));
491 g_variant_builder_add(&builder_extended, "v", cal_dbus_utils_null_to_gvariant());
494 GVariant *value = NULL;
495 value = g_variant_new("(viaviaviaviav)", arg_only_event,
496 count_alarm, &builder_alarm, count_attendee, &builder_attendee,
497 count_exception, &builder_exception, count_extended, &builder_extended);
502 static GVariant *_only_todo_to_gvariant(calendar_record_h record)
504 GVariant *value = NULL;
505 RETV_IF(NULL == record, NULL);
507 cal_todo_s *p = (cal_todo_s *)record;
508 GVariant *arg_until = _caltime_to_gvariant(&p->until);
509 GVariant *arg_start = _caltime_to_gvariant(&p->start);
510 GVariant *arg_due = _caltime_to_gvariant(&p->due);
512 value = g_variant_new("(iissssiiisddxxiixiiiviisssssssssiiiissssivsivsssii)",
513 p->index, p->calendar_id,
514 CAL_DBUS_SET_STRING(p->summary),
515 CAL_DBUS_SET_STRING(p->description),
516 CAL_DBUS_SET_STRING(p->location),
517 CAL_DBUS_SET_STRING(p->categories),
518 p->todo_status, p->priority, p->sensitivity,
519 CAL_DBUS_SET_STRING(p->uid),
520 p->latitude, p->longitude, p->created_time, p->completed_time, p->progress,
521 p->is_deleted, p->last_mod, p->freq, p->range_type, p->until.type,
522 arg_until, p->count, p->interval,
523 CAL_DBUS_SET_STRING(p->bysecond),
524 CAL_DBUS_SET_STRING(p->byminute),
525 CAL_DBUS_SET_STRING(p->byhour),
526 CAL_DBUS_SET_STRING(p->byday),
527 CAL_DBUS_SET_STRING(p->bymonthday),
528 CAL_DBUS_SET_STRING(p->byyearday),
529 CAL_DBUS_SET_STRING(p->byweekno),
530 CAL_DBUS_SET_STRING(p->bymonth),
531 CAL_DBUS_SET_STRING(p->bysetpos),
532 p->wkst, p->has_alarm, p->system_type, p->updated,
533 CAL_DBUS_SET_STRING(p->sync_data1),
534 CAL_DBUS_SET_STRING(p->sync_data2),
535 CAL_DBUS_SET_STRING(p->sync_data3),
536 CAL_DBUS_SET_STRING(p->sync_data4),
537 p->start.type, arg_start,
538 CAL_DBUS_SET_STRING(p->start_tzid),
539 p->due.type, arg_due,
540 CAL_DBUS_SET_STRING(p->due_tzid),
541 CAL_DBUS_SET_STRING(p->organizer_name),
542 CAL_DBUS_SET_STRING(p->organizer_email),
543 p->has_attendee, p->is_allday);
548 static GVariant *_todo_to_gvariant(calendar_record_h record)
551 RETV_IF(NULL == record, NULL);
553 GVariant *arg_only_todo = _only_todo_to_gvariant(record);
554 if (NULL == arg_only_todo) {
555 ERR("_only_todo_to_gvariant() Fail");
559 unsigned int count_alarm = 0;
560 GVariantBuilder builder_alarm;
561 g_variant_builder_init(&builder_alarm, G_VARIANT_TYPE("av"));
562 calendar_record_get_child_record_count(record, _calendar_todo.calendar_alarm, &count_alarm);
563 if (0 < count_alarm) {
564 for (i = 0 ; i < count_alarm; i++) {
565 calendar_record_h alarm = NULL;
566 calendar_record_get_child_record_at_p(record, _calendar_todo.calendar_alarm, i, &alarm);
567 g_variant_builder_add(&builder_alarm, "v", _alarm_to_gvariant(alarm));
571 g_variant_builder_add(&builder_alarm, "v", cal_dbus_utils_null_to_gvariant());
574 unsigned int count_attendee = 0;
575 GVariantBuilder builder_attendee;
576 g_variant_builder_init(&builder_attendee, G_VARIANT_TYPE("av"));
577 calendar_record_get_child_record_count(record, _calendar_todo.calendar_attendee, &count_attendee);
578 if (0 < count_attendee) {
579 for (i = 0 ; i < count_attendee; i++) {
580 calendar_record_h attendee = NULL;
581 calendar_record_get_child_record_at_p(record, _calendar_todo.calendar_attendee, i, &attendee);
582 g_variant_builder_add(&builder_attendee, "v", _attendee_to_gvariant(attendee));
586 g_variant_builder_add(&builder_attendee, "v", cal_dbus_utils_null_to_gvariant());
589 unsigned int count_extended = 0;
590 GVariantBuilder builder_extended;
591 g_variant_builder_init(&builder_extended, G_VARIANT_TYPE("av"));
592 calendar_record_get_child_record_count(record, _calendar_todo.extended, &count_extended);
593 if (0 < count_extended) {
594 for (i = 0 ; i < count_extended; i++) {
595 calendar_record_h extended = NULL;
596 calendar_record_get_child_record_at_p(record, _calendar_todo.extended, i, &extended);
597 g_variant_builder_add(&builder_extended, "v", _extended_to_gvariant(extended));
601 g_variant_builder_add(&builder_extended, "v", cal_dbus_utils_null_to_gvariant());
605 GVariant *value = NULL;
606 value = g_variant_new("(viaviaviav)", arg_only_todo,
607 count_alarm, &builder_alarm, count_attendee, &builder_attendee,
608 count_extended, &builder_extended);
613 static GVariant *_instance_utime_to_gvariant(calendar_record_h record)
615 GVariant *value = NULL;
616 cal_instance_utime_s *p = (cal_instance_utime_s *)record;
618 GVariant *arg_start = _caltime_to_gvariant(&p->start);
619 GVariant *arg_end = _caltime_to_gvariant(&p->end);
621 value = g_variant_new("(iiivivsssiiiiiddiixs)",
622 p->event_id, p->calendar_id, p->start.type, arg_start, p->end.type, arg_end,
623 CAL_DBUS_SET_STRING(p->summary),
624 CAL_DBUS_SET_STRING(p->description),
625 CAL_DBUS_SET_STRING(p->location),
626 p->busy_status, p->event_status, p->priority, p->sensitivity, p->has_rrule,
627 p->latitude, p->longitude, p->has_alarm, p->original_event_id, p->last_mod,
628 CAL_DBUS_SET_STRING(p->sync_data1));
632 static GVariant *_instance_localtime_to_gvariant(calendar_record_h record)
634 GVariant *value = NULL;
635 cal_instance_localtime_s *p = (cal_instance_localtime_s *)record;
637 GVariant *arg_start = _caltime_to_gvariant(&p->start);
638 GVariant *arg_end = _caltime_to_gvariant(&p->end);
640 value = g_variant_new("(iiivivsssiiiiiddiixsi)",
641 p->event_id, p->calendar_id, p->start.type, arg_start, p->end.type, arg_end,
642 CAL_DBUS_SET_STRING(p->summary),
643 CAL_DBUS_SET_STRING(p->description),
644 CAL_DBUS_SET_STRING(p->location),
645 p->busy_status, p->event_status, p->priority, p->sensitivity, p->has_rrule,
646 p->latitude, p->longitude, p->has_alarm, p->original_event_id, p->last_mod,
647 CAL_DBUS_SET_STRING(p->sync_data1),
652 static GVariant *_instance_utime_extended_to_gvariant(calendar_record_h record)
654 GVariant *value = NULL;
655 cal_instance_utime_extended_s *p = (cal_instance_utime_extended_s *)record;
657 GVariant *arg_start = _caltime_to_gvariant(&p->start);
658 GVariant *arg_end = _caltime_to_gvariant(&p->end);
660 value = g_variant_new("(iiivivsssiiiiiddiixssissss)",
661 p->event_id, p->calendar_id, p->start.type, arg_start, p->end.type, arg_end,
662 CAL_DBUS_SET_STRING(p->summary),
663 CAL_DBUS_SET_STRING(p->description),
664 CAL_DBUS_SET_STRING(p->location),
665 p->busy_status, p->event_status, p->priority, p->sensitivity, p->has_rrule,
666 p->latitude, p->longitude, p->has_alarm, p->original_event_id, p->last_mod,
667 CAL_DBUS_SET_STRING(p->organizer_name),
668 CAL_DBUS_SET_STRING(p->categories),
670 CAL_DBUS_SET_STRING(p->sync_data1),
671 CAL_DBUS_SET_STRING(p->sync_data2),
672 CAL_DBUS_SET_STRING(p->sync_data3),
673 CAL_DBUS_SET_STRING(p->sync_data4));
677 static GVariant *_instance_localtime_extended_to_gvariant(calendar_record_h record)
679 GVariant *value = NULL;
680 cal_instance_localtime_extended_s *p = (cal_instance_localtime_extended_s *)record;
682 GVariant *arg_start = _caltime_to_gvariant(&p->start);
683 GVariant *arg_end = _caltime_to_gvariant(&p->end);
685 value = g_variant_new("(iiivivsssiiiiiddiixssissss)",
686 p->event_id, p->calendar_id, p->start.type, arg_start, p->end.type, arg_end,
687 CAL_DBUS_SET_STRING(p->summary),
688 CAL_DBUS_SET_STRING(p->description),
689 CAL_DBUS_SET_STRING(p->location),
690 p->busy_status, p->event_status,
691 p->priority, p->sensitivity, p->has_rrule, p->latitude, p->longitude,
692 p->has_alarm, p->original_event_id, p->last_mod,
693 CAL_DBUS_SET_STRING(p->organizer_name),
694 CAL_DBUS_SET_STRING(p->categories),
696 CAL_DBUS_SET_STRING(p->sync_data1),
697 CAL_DBUS_SET_STRING(p->sync_data2),
698 CAL_DBUS_SET_STRING(p->sync_data3),
699 CAL_DBUS_SET_STRING(p->sync_data4));
703 static GVariant *_updated_info_to_gvariant(calendar_record_h record)
705 GVariant *value = NULL;
706 cal_updated_info_s *p = (cal_updated_info_s *)record;
707 value = g_variant_new("(iiii)", p->type, p->id, p->calendar_id, p->version);
711 static GVariant *_value_to_gvariant(cal_search_value_s *p)
713 GVariant *value = NULL;
715 int type = p->property_id & CAL_PROPERTY_DATA_TYPE_MASK;
717 case CAL_PROPERTY_DATA_TYPE_STR:
718 value = g_variant_new("s", CAL_DBUS_SET_STRING(p->value.s));
720 case CAL_PROPERTY_DATA_TYPE_INT:
721 value = g_variant_new("i", p->value.i);
723 case CAL_PROPERTY_DATA_TYPE_DOUBLE:
724 value = g_variant_new("d", p->value.d);
726 case CAL_PROPERTY_DATA_TYPE_LLI:
727 value = g_variant_new("x", p->value.lli);
729 case CAL_PROPERTY_DATA_TYPE_CALTIME:
730 value = g_variant_new("(iv)", p->value.caltime.type,
731 _caltime_to_gvariant(&p->value.caltime));
734 ERR("Invalid parameter(0x%x)", type);
740 static GVariant *_search_to_gvariant(calendar_record_h record)
742 cal_search_s *p = (cal_search_s *)record;
744 GVariant *arg_search = NULL;
745 GVariantBuilder builder;
746 g_variant_builder_init(&builder, (G_VARIANT_TYPE("a(iv)")));
747 GVariant *arg_value = NULL;
748 int count = g_slist_length(p->values);
751 GSList *cursor = p->values;
753 cal_search_value_s * d = (cal_search_value_s *)(cursor->data);
754 arg_value = _value_to_gvariant(d);
755 g_variant_builder_add(&builder, "(iv)", d->property_id, arg_value);
756 cursor = g_slist_next(cursor);
759 arg_value = cal_dbus_utils_null_to_gvariant();
760 g_variant_builder_add(&builder, "(iv)", 1, arg_value);
762 arg_search = g_variant_builder_end(&builder);
764 GVariant *value = NULL;
765 value = g_variant_new("(isv)", count, p->common.view_uri, arg_search);
769 GVariant *cal_dbus_utils_record_to_gvariant(calendar_record_h record)
772 GVariant *value = NULL;
773 GVariant *arg_common = NULL;
774 GVariant *arg_record = NULL;
776 if (NULL == record) {
777 ERR("record is NULL");
778 arg_common = cal_dbus_utils_null_to_gvariant();
781 cal_record_s *rec = (cal_record_s *)record;
782 arg_common = cal_dbus_utils_common_to_gvariant(rec);
787 case CAL_RECORD_TYPE_BOOK:
788 arg_record = _book_to_gvariant(record);
790 case CAL_RECORD_TYPE_EVENT:
791 arg_record = _event_to_gvariant(record);
793 case CAL_RECORD_TYPE_TODO:
794 arg_record = _todo_to_gvariant(record);
796 case CAL_RECORD_TYPE_ALARM:
797 arg_record = _alarm_to_gvariant(record);
799 case CAL_RECORD_TYPE_ATTENDEE:
800 arg_record = _attendee_to_gvariant(record);
802 case CAL_RECORD_TYPE_TIMEZONE:
803 arg_record = _timezone_to_gvariant(record);
805 case CAL_RECORD_TYPE_INSTANCE_UTIME:
806 arg_record = _instance_utime_to_gvariant(record);
808 case CAL_RECORD_TYPE_INSTANCE_LOCALTIME:
809 arg_record = _instance_localtime_to_gvariant(record);
811 case CAL_RECORD_TYPE_INSTANCE_UTIME_EXTENDED:
812 arg_record = _instance_utime_extended_to_gvariant(record);
814 case CAL_RECORD_TYPE_INSTANCE_LOCALTIME_EXTENDED:
815 arg_record = _instance_localtime_extended_to_gvariant(record);
817 case CAL_RECORD_TYPE_UPDATED_INFO:
818 arg_record = _updated_info_to_gvariant(record);
820 case CAL_RECORD_TYPE_SEARCH:
821 arg_record = _search_to_gvariant(record);
823 case CAL_RECORD_TYPE_EXTENDED:
824 arg_record = _extended_to_gvariant(record);
827 ERR("Invalid type(%d)", type);
828 arg_record = cal_dbus_utils_null_to_gvariant();
831 value = g_variant_new("(ivv)", type, arg_common, arg_record);
835 GVariant *cal_dbus_utils_list_to_gvariant(calendar_list_h list)
838 GVariant *value = NULL;
839 GVariant *arg_list = NULL;
844 arg_list = cal_dbus_utils_null_to_gvariant();
845 return g_variant_new("(iv)", has_list, arg_list);
849 GVariantBuilder builder;
850 g_variant_builder_init(&builder, G_VARIANT_TYPE("av"));
854 calendar_list_get_count(list, &count);
856 calendar_list_first(list);
857 for (i = 0; i < count; i++) {
858 calendar_record_h record = NULL;
859 calendar_list_get_current_record_p(list, &record);
860 GVariant *arg_record = cal_dbus_utils_record_to_gvariant(record);
861 g_variant_builder_add(&builder, "v", arg_record);
862 calendar_list_next(list);
864 arg_list = g_variant_builder_end(&builder);
866 value = g_variant_new("(iv)", has_list, arg_list);
870 int cal_dbus_utils_gvariant_to_handle(GVariant *arg_handle, calendar_h *out_handle)
872 RETV_IF(NULL == arg_handle, CALENDAR_ERROR_INVALID_PARAMETER);
873 RETV_IF(NULL == out_handle, CALENDAR_ERROR_INVALID_PARAMETER);
875 calendar_h handle = NULL;
876 cal_handle_create(&handle);
877 if (NULL == handle) {
878 ERR("handle is NULL");
879 return CALENDAR_ERROR_OUT_OF_MEMORY;
881 cal_s *p = (cal_s *)handle;
883 g_variant_get(arg_handle, "(ii)",
884 &p->version, &p->connection_count);
885 *out_handle = handle;
886 return CALENDAR_ERROR_NONE;
889 static int _gvariant_to_book(GVariant *arg_record, calendar_record_h *out_record)
891 RETV_IF(NULL == arg_record, CALENDAR_ERROR_INVALID_PARAMETER);
892 RETV_IF(NULL == out_record, CALENDAR_ERROR_INVALID_PARAMETER);
894 calendar_record_h record = NULL;
895 calendar_record_create(_calendar_book._uri, &record);
896 cal_book_s *p = (cal_book_s *)record;
898 g_variant_get(arg_record, "(ii&si&s&s&s&siiii&s&s&s&si)",
899 &p->index, &p->store_type, &p->uid, &p->updated, &p->name, &p->description,
900 &p->color, &p->location, &p->visibility, &p->sync_event, &p->is_deleted,
901 &p->account_id, &p->sync_data1, &p->sync_data2, &p->sync_data3,
902 &p->sync_data4, &p->mode);
903 CAL_DBUS_GET_STRING(p->uid);
904 CAL_DBUS_GET_STRING(p->name);
905 CAL_DBUS_GET_STRING(p->description);
906 CAL_DBUS_GET_STRING(p->color);
907 CAL_DBUS_GET_STRING(p->location);
908 CAL_DBUS_GET_STRING(p->sync_data1);
909 CAL_DBUS_GET_STRING(p->sync_data2);
910 CAL_DBUS_GET_STRING(p->sync_data3);
911 CAL_DBUS_GET_STRING(p->sync_data4);
913 *out_record = record;
914 return CALENDAR_ERROR_NONE;
917 static int _gvariant_to_alarm(GVariant * arg_record, calendar_record_h *out_record)
919 RETV_IF(NULL == arg_record, CALENDAR_ERROR_INVALID_PARAMETER);
920 RETV_IF(NULL == out_record, CALENDAR_ERROR_INVALID_PARAMETER);
922 calendar_record_h record = NULL;
923 calendar_record_create(_calendar_alarm._uri, &record);
924 GVariant *arg_alarm = NULL;
925 cal_alarm_s *p = (cal_alarm_s *)record;
926 g_variant_get(arg_record, "(iiiii&s&si&siv)",
927 &p->id, &p->parent_id, &p->is_deleted, &p->remind_tick, &p->remind_tick_unit,
928 &p->alarm_description, &p->alarm_summary, &p->alarm_action, &p->alarm_attach,
929 &p->alarm.type, &arg_alarm);
930 _gvariant_to_caltime(p->alarm.type, arg_alarm, &p->alarm);
931 CAL_DBUS_GET_STRING(p->alarm_description);
932 CAL_DBUS_GET_STRING(p->alarm_summary);
933 CAL_DBUS_GET_STRING(p->alarm_attach);
935 *out_record = record;
936 return CALENDAR_ERROR_NONE;
939 static int _gvariant_to_attendee(GVariant * arg_record, calendar_record_h *out_record)
941 RETV_IF(NULL == arg_record, CALENDAR_ERROR_INVALID_PARAMETER);
942 RETV_IF(NULL == out_record, CALENDAR_ERROR_INVALID_PARAMETER);
944 calendar_record_h record = NULL;
945 calendar_record_create(_calendar_attendee._uri, &record);
946 cal_attendee_s *p = (cal_attendee_s *)record;
947 g_variant_get(arg_record, "(ii&sii&s&s&siii&s&s&s&s)",
948 &p->id, &p->parent_id, &p->attendee_number, &p->attendee_cutype,
949 &p->attendee_ct_index, &p->attendee_uid, &p->attendee_group,
950 &p->attendee_email, &p->attendee_role, &p->attendee_status,
951 &p->attendee_rsvp, &p->attendee_delegatee_uri, &p->attendee_delegator_uri,
952 &p->attendee_name, &p->attendee_member);
953 CAL_DBUS_GET_STRING(p->attendee_number);
954 CAL_DBUS_GET_STRING(p->attendee_uid);
955 CAL_DBUS_GET_STRING(p->attendee_group);
956 CAL_DBUS_GET_STRING(p->attendee_email);
957 CAL_DBUS_GET_STRING(p->attendee_delegatee_uri);
958 CAL_DBUS_GET_STRING(p->attendee_delegator_uri);
959 CAL_DBUS_GET_STRING(p->attendee_name);
960 CAL_DBUS_GET_STRING(p->attendee_member);
962 *out_record = record;
963 return CALENDAR_ERROR_NONE;
966 static int _gvariant_to_timezone(GVariant * arg_record, calendar_record_h *out_record)
968 RETV_IF(NULL == arg_record, CALENDAR_ERROR_INVALID_PARAMETER);
969 RETV_IF(NULL == out_record, CALENDAR_ERROR_INVALID_PARAMETER);
971 calendar_record_h record = NULL;
972 calendar_record_create(_calendar_timezone._uri, &record);
973 cal_timezone_s *p = (cal_timezone_s *)record;
974 g_variant_get(arg_record, "(ii&siiiii&siiiiii)",
975 &p->index, &p->tz_offset_from_gmt, &p->standard_name, &p->std_start_month,
976 &p->std_start_position_of_week, &p->std_start_day, &p->std_start_hour,
977 &p->standard_bias, &p->day_light_name, &p->day_light_start_month,
978 &p->day_light_start_position_of_week, &p->day_light_start_day,
979 &p->day_light_start_hour, &p->day_light_bias, &p->calendar_id);
980 CAL_DBUS_GET_STRING(p->standard_name);
981 CAL_DBUS_GET_STRING(p->day_light_name);
983 *out_record = record;
984 return CALENDAR_ERROR_NONE;
987 static int _gvariant_to_only_event(GVariant *arg_record, calendar_record_h *out_record)
989 calendar_record_h record = NULL;
990 calendar_record_create(_calendar_event._uri, &record);
991 cal_event_s *p = (cal_event_s *)record;
993 GVariant *arg_until = NULL;
994 GVariant *arg_start = NULL;
995 GVariant *arg_end = NULL;
997 g_variant_get(arg_record, "(ii&s&s&s&s&siiiiiii&s&s&siddixixiiivii"
998 "&s&s&s&s&s&s&s&s&si&s&siiii&s&s&s&siv&siv&si)",
999 &p->index, &p->calendar_id, &p->summary, &p->description, &p->location,
1000 &p->categories, &p->exdate, &p->event_status, &p->priority, &p->timezone,
1001 &p->contact_id, &p->busy_status, &p->sensitivity, &p->meeting_status,
1002 &p->uid, &p->organizer_name, &p->organizer_email, &p->original_event_id,
1003 &p->latitude, &p->longitude, &p->email_id, &p->created_time, &p->is_deleted,
1004 &p->last_mod, &p->freq, &p->range_type, &p->until.type, &arg_until,
1005 &p->count, &p->interval, &p->bysecond, &p->byminute, &p->byhour, &p->byday,
1006 &p->bymonthday, &p->byyearday, &p->byweekno, &p->bymonth, &p->bysetpos,
1007 &p->wkst, &p->recurrence_id, &p->rdate, &p->has_attendee, &p->has_alarm,
1008 &p->system_type, &p->updated, &p->sync_data1, &p->sync_data2, &p->sync_data3,
1009 &p->sync_data4, &p->start.type, &arg_start, &p->start_tzid, &p->end.type,
1010 &arg_end, &p->end_tzid, &p->is_allday);
1011 _gvariant_to_caltime(p->until.type, arg_until, &p->until);
1012 _gvariant_to_caltime(p->start.type, arg_start, &p->start);
1013 _gvariant_to_caltime(p->end.type, arg_end, &p->end);
1014 CAL_DBUS_GET_STRING(p->summary);
1015 CAL_DBUS_GET_STRING(p->description);
1016 CAL_DBUS_GET_STRING(p->location);
1017 CAL_DBUS_GET_STRING(p->categories);
1018 CAL_DBUS_GET_STRING(p->exdate);
1019 CAL_DBUS_GET_STRING(p->uid);
1020 CAL_DBUS_GET_STRING(p->organizer_name);
1021 CAL_DBUS_GET_STRING(p->organizer_email);
1022 CAL_DBUS_GET_STRING(p->bysecond);
1023 CAL_DBUS_GET_STRING(p->byminute);
1024 CAL_DBUS_GET_STRING(p->byhour);
1025 CAL_DBUS_GET_STRING(p->byday);
1026 CAL_DBUS_GET_STRING(p->bymonthday);
1027 CAL_DBUS_GET_STRING(p->byyearday);
1028 CAL_DBUS_GET_STRING(p->byweekno);
1029 CAL_DBUS_GET_STRING(p->bymonth);
1030 CAL_DBUS_GET_STRING(p->bysetpos);
1031 CAL_DBUS_GET_STRING(p->recurrence_id);
1032 CAL_DBUS_GET_STRING(p->rdate);
1033 CAL_DBUS_GET_STRING(p->sync_data1);
1034 CAL_DBUS_GET_STRING(p->sync_data2);
1035 CAL_DBUS_GET_STRING(p->sync_data3);
1036 CAL_DBUS_GET_STRING(p->sync_data4);
1037 CAL_DBUS_GET_STRING(p->start_tzid);
1038 CAL_DBUS_GET_STRING(p->end_tzid);
1040 *out_record = record;
1041 return CALENDAR_ERROR_NONE;
1044 static int _gvariant_to_value(GVariant *arg_value, cal_search_value_s *p)
1046 int type = p->property_id & CAL_PROPERTY_DATA_TYPE_MASK;
1047 GVariant *arg_caltime = NULL;
1049 case CAL_PROPERTY_DATA_TYPE_STR:
1050 g_variant_get(arg_value, "&s", &p->value.s);
1051 CAL_DBUS_GET_STRING(p->value.s);
1053 case CAL_PROPERTY_DATA_TYPE_INT:
1054 g_variant_get(arg_value, "i", &p->value.i);
1056 case CAL_PROPERTY_DATA_TYPE_DOUBLE:
1057 g_variant_get(arg_value, "d", &p->value.d);
1059 case CAL_PROPERTY_DATA_TYPE_LLI:
1060 g_variant_get(arg_value, "x", &p->value.lli);
1062 case CAL_PROPERTY_DATA_TYPE_CALTIME:
1063 g_variant_get(arg_value, "(iv)", &p->value.caltime.type, arg_caltime);
1064 _gvariant_to_caltime(p->value.caltime.type, arg_caltime, &p->value.caltime);
1067 ERR("Invalid parameter(0x%x)", type);
1070 return CALENDAR_ERROR_NONE;
1073 static int _gvariant_to_search(GVariant *arg_record, calendar_record_h *out_record)
1075 RETV_IF(NULL == arg_record, CALENDAR_ERROR_INVALID_PARAMETER);
1076 RETV_IF(NULL == out_record, CALENDAR_ERROR_INVALID_PARAMETER);
1079 char *view_uri = NULL;
1080 GVariant *arg_search = NULL;
1081 g_variant_get(arg_record, "(i&sv)", &count, &view_uri, &arg_search);
1083 calendar_record_h record = NULL;
1084 calendar_record_create(view_uri, &record);
1085 cal_search_s *p = (cal_search_s *)record;
1087 GVariantIter *iter_search = NULL;
1088 g_variant_get(arg_search, "a(iv)", &iter_search);
1090 for (i = 0; i < count; i++) {
1091 cal_search_value_s *value = calloc(1, sizeof(cal_search_value_s));
1092 if (NULL == value) {
1093 ERR("calloc() Fail");
1096 GVariant *arg_value = NULL;
1097 g_variant_iter_loop(iter_search, "(iv)", &value->property_id, &arg_value);
1098 _gvariant_to_value(arg_value, value);
1099 p->values = g_slist_append(p->values, value);
1102 *out_record = record;
1103 return CALENDAR_ERROR_NONE;
1106 static int _gvariant_to_extended(GVariant * arg_record, calendar_record_h *out_record)
1108 RETV_IF(NULL == arg_record, CALENDAR_ERROR_INVALID_PARAMETER);
1109 RETV_IF(NULL == out_record, CALENDAR_ERROR_INVALID_PARAMETER);
1111 calendar_record_h record = NULL;
1112 calendar_record_create(_calendar_extended_property._uri, &record);
1113 cal_extended_s *p = (cal_extended_s *)record;
1114 g_variant_get(arg_record, "(iii&s&s)",
1115 &p->id, &p->record_id, &p->record_type, &p->key, &p->value);
1116 CAL_DBUS_GET_STRING(p->key);
1117 CAL_DBUS_GET_STRING(p->value);
1119 *out_record = record;
1120 return CALENDAR_ERROR_NONE;
1123 static void _free_composite_filter(cal_composite_filter_s* filter)
1127 if (NULL == filter->filters)
1130 GSList *cursor = filter->filters;
1132 cal_filter_s *child_filter = (cal_filter_s*)cursor->data;
1133 if (NULL == child_filter) {
1134 cursor = g_slist_next(cursor);
1137 if (CAL_FILTER_COMPOSITE == child_filter->filter_type) {
1138 _free_composite_filter((cal_composite_filter_s *)child_filter);
1140 cal_attribute_filter_s *attr = (cal_attribute_filter_s *)child_filter;
1141 if (CAL_FILTER_STR == attr->filter_type)
1142 free(attr->value.s);
1144 cursor = g_slist_next(cursor);
1146 g_slist_free_full(filter->filters, free);
1148 if (filter->filter_ops)
1149 g_slist_free(filter->filter_ops);
1151 free(filter->view_uri);
1154 static void _get_attribute_filter(GVariantIter *iter_filter, cal_filter_type_e filter_type,
1155 cal_attribute_filter_s* filter)
1157 RET_IF(NULL == filter);
1159 GVariant *arg_caltime = NULL;
1160 filter->filter_type = filter_type;
1162 GVariant *arg_value = NULL;
1163 g_variant_iter_loop(iter_filter, "v", &arg_value);
1164 g_variant_get(arg_value, "i", &filter->property_id);
1165 g_variant_iter_loop(iter_filter, "v", &arg_value);
1166 g_variant_get(arg_value, "i", &filter->match);
1167 g_variant_iter_loop(iter_filter, "v", &arg_value);
1168 switch (filter_type) {
1169 case CAL_FILTER_STR:
1170 g_variant_get(arg_value, "&s", &filter->value.s);
1171 CAL_DBUS_GET_STRING(filter->value.s);
1173 case CAL_FILTER_INT:
1174 g_variant_get(arg_value, "i", &filter->value.i);
1176 case CAL_FILTER_DOUBLE:
1177 g_variant_get(arg_value, "d", &filter->value.d);
1179 case CAL_FILTER_LLI:
1180 g_variant_get(arg_value, "x", &filter->value.lli);
1182 case CAL_FILTER_CALTIME:
1183 g_variant_get(arg_value, "(iv)", &filter->value.caltime.type, &arg_caltime);
1184 _gvariant_to_caltime(filter->value.caltime.type, arg_caltime, &filter->value.caltime);
1187 ERR("Invalid filter_type(%d)", filter_type);
1192 static int _get_composite_filter(GVariantIter *iter_filter, cal_composite_filter_s* filter)
1194 RETV_IF(NULL == filter, CALENDAR_ERROR_INVALID_PARAMETER);
1196 filter->filter_type = CAL_FILTER_COMPOSITE;
1198 GVariant *arg_value = NULL;
1199 g_variant_iter_loop(iter_filter, "v", &arg_value);
1200 g_variant_get(arg_value, "&s", &filter->view_uri);
1201 CAL_DBUS_GET_STRING(filter->view_uri);
1203 int filter_count = 0;
1204 g_variant_iter_loop(iter_filter, "v", &arg_value);
1205 g_variant_get(arg_value, "i", &filter_count);
1207 for (i = 0; i < filter_count; i++) {
1208 int filter_type = 0;
1209 g_variant_iter_loop(iter_filter, "v", &arg_value);
1210 g_variant_get(arg_value, "i", &filter_type);
1211 if (CAL_FILTER_COMPOSITE == filter_type) {
1212 cal_composite_filter_s* com_filter = NULL;
1213 com_filter = calloc(1, sizeof(cal_composite_filter_s));
1214 if (NULL == com_filter) {
1215 ERR("calloc() Fail");
1216 _free_composite_filter(filter);
1217 return CALENDAR_ERROR_OUT_OF_MEMORY;
1219 _get_composite_filter(iter_filter, com_filter);
1220 filter->filters = g_slist_append(filter->filters, com_filter);
1222 cal_attribute_filter_s* attr_filter = NULL;
1223 attr_filter = calloc(1, sizeof(cal_attribute_filter_s));
1224 if (NULL == attr_filter) {
1225 ERR("calloc() Fail");
1226 _free_composite_filter(filter);
1227 return CALENDAR_ERROR_OUT_OF_MEMORY;
1229 _get_attribute_filter(iter_filter, filter_type, attr_filter);
1230 filter->filters = g_slist_append(filter->filters, attr_filter);
1234 g_variant_iter_loop(iter_filter, "v", &arg_value);
1235 g_variant_get(arg_value, "i", &ops_count);
1236 for (i = 0; i < ops_count; i++) {
1237 calendar_filter_operator_e op = 0;
1238 g_variant_iter_loop(iter_filter, "v", &arg_value);
1239 g_variant_get(arg_value, "i", &op);
1240 filter->filter_ops = g_slist_append(filter->filter_ops, (void*)op);
1243 filter->properties = (cal_property_info_s *)cal_view_get_property_info(filter->view_uri,
1244 &filter->property_count);
1245 return CALENDAR_ERROR_NONE;
1248 static int _gvariant_to_filter(GVariant *arg_filter, cal_query_s *q)
1250 calendar_filter_h filter = (calendar_filter_h)q->filter;
1251 calendar_filter_create(q->view_uri, &filter);
1252 q->filter = (cal_composite_filter_s*)filter;
1254 GVariantIter *iter_filter = NULL;
1255 g_variant_get(arg_filter, "av", &iter_filter);
1258 GVariant *arg_value = NULL;
1259 g_variant_iter_loop(iter_filter, "v", &arg_value);
1260 g_variant_get(arg_value, "i", &count);
1261 _get_composite_filter(iter_filter, q->filter);
1263 return CALENDAR_ERROR_NONE;
1266 static int _gvariant_to_projection(int count_projection, GVariant *arg_projection, cal_query_s *q)
1268 GVariantIter *iter_projection = NULL;
1269 g_variant_get(arg_projection, "au", &iter_projection);
1271 q->projection = calloc(count_projection, sizeof(unsigned int));
1272 if (NULL == q->projection) {
1273 ERR("calloc() Fail");
1274 return CALENDAR_ERROR_OUT_OF_MEMORY;
1277 for (i = 0; i < count_projection; i++)
1278 g_variant_iter_loop(iter_projection, "u", &q->projection[i]);
1280 q->projection_count = count_projection;
1282 return CALENDAR_ERROR_NONE;
1285 int cal_dbus_utils_gvariant_to_query(GVariant *arg_query, calendar_query_h *out_query)
1287 RETV_IF(NULL == arg_query, CALENDAR_ERROR_INVALID_PARAMETER);
1288 RETV_IF(NULL == out_query, CALENDAR_ERROR_INVALID_PARAMETER);
1290 char *view_uri = NULL;
1292 GVariant *arg_filter = NULL;
1293 int count_projection = 0;
1294 GVariant *arg_projection = NULL;
1295 int property_id = 0;
1297 int has_distinct = 0;
1299 g_variant_get(arg_query, "(&siviviii)",
1300 &view_uri, &has_filter, &arg_filter, &count_projection, &arg_projection,
1301 &property_id, &has_asc, &has_distinct);
1303 calendar_query_h query = NULL;
1304 calendar_query_create(view_uri, &query);
1306 cal_query_s *q = (cal_query_s *)query;
1309 _gvariant_to_filter(arg_filter, q);
1313 if (count_projection)
1314 _gvariant_to_projection(count_projection, arg_projection, q);
1316 q->projection = NULL;
1318 q->sort_property_id = property_id;
1319 q->properties = (cal_property_info_s *)cal_view_get_property_info(view_uri,
1320 &q->property_count);
1322 q->distinct = has_distinct;
1326 return CALENDAR_ERROR_NONE;
1329 int cal_dbus_utils_gvariant_to_ids(GVariant *arg_ids, int count, int **out_ids)
1331 GVariantIter *iter_ids = NULL;
1332 g_variant_get(arg_ids, "ai", &iter_ids);
1334 int *ids = calloc(count, sizeof(int));
1336 ERR("calloc() Fail");
1337 return CALENDAR_ERROR_OUT_OF_MEMORY;
1340 for (i = 0; i < count; i++)
1341 g_variant_iter_loop(iter_ids, "i", &ids[i]);
1344 return CALENDAR_ERROR_NONE;
1347 static int _gvariant_to_event(GVariant * arg_record, calendar_record_h *out_record)
1349 RETV_IF(NULL == arg_record, CALENDAR_ERROR_INVALID_PARAMETER);
1350 RETV_IF(NULL == out_record, CALENDAR_ERROR_INVALID_PARAMETER);
1352 GVariant *arg_only_event = NULL;
1353 int count_alarm = 0;
1354 GVariantIter *iter_alarm = NULL;
1355 int count_attendee = 0;
1356 GVariantIter *iter_attendee = NULL;
1357 int count_exception = 0;
1358 GVariantIter *iter_exception = NULL;
1359 int count_extended = 0;
1360 GVariantIter *iter_extended = NULL;
1361 g_variant_get(arg_record, "(viaviaviaviav)", &arg_only_event,
1362 &count_alarm, &iter_alarm, &count_attendee, &iter_attendee,
1363 &count_exception, &iter_exception, &count_extended, &iter_extended);
1365 calendar_record_h record = NULL;
1366 _gvariant_to_only_event(arg_only_event, &record);
1368 if (0 < count_alarm) {
1369 GVariant *arg_alarm = NULL;
1370 while (g_variant_iter_loop(iter_alarm, "v", &arg_alarm)) {
1371 calendar_record_h alarm = NULL;
1372 _gvariant_to_alarm(arg_alarm, &alarm);
1373 calendar_record_add_child_record(record, _calendar_event.calendar_alarm, alarm);
1379 if (0 < count_attendee) {
1380 GVariant *arg_attendee = NULL;
1381 while (g_variant_iter_loop(iter_attendee, "v", &arg_attendee)) {
1382 calendar_record_h attendee = NULL;
1383 _gvariant_to_attendee(arg_attendee, &attendee);
1384 calendar_record_add_child_record(record, _calendar_event.calendar_attendee, attendee);
1390 if (0 < count_exception) {
1391 GVariant *arg_exception = NULL;
1392 while (g_variant_iter_loop(iter_exception, "v", &arg_exception)) {
1393 calendar_record_h exception = NULL;
1394 _gvariant_to_only_event(arg_exception, &exception);
1395 calendar_record_add_child_record(record, _calendar_event.exception, exception);
1398 DBG("No exception");
1401 if (0 < count_extended) {
1402 GVariant *arg_extended = NULL;
1403 while (g_variant_iter_loop(iter_extended, "v", &arg_extended)) {
1404 calendar_record_h extended = NULL;
1405 _gvariant_to_extended(arg_extended, &extended);
1406 calendar_record_add_child_record(record, _calendar_event.extended, extended);
1412 *out_record = record;
1413 return CALENDAR_ERROR_NONE;
1416 static int _gvariant_to_only_todo(GVariant *arg_record, calendar_record_h *out_record)
1418 calendar_record_h record = NULL;
1419 calendar_record_create(_calendar_todo._uri, &record);
1420 cal_todo_s *p = (cal_todo_s *)record;
1422 GVariant *arg_until = NULL;
1423 GVariant *arg_start = NULL;
1424 GVariant *arg_due = NULL;
1426 g_variant_get(arg_record, "(ii&s&s&s&siii&sddxxiixiiivii&s&s&s&s&s&s&s&s&si"
1427 "iii&s&s&s&siv&siv&s&s&sii)",
1428 &p->index, &p->calendar_id,
1429 &p->summary, &p->description, &p->location, &p->categories, &p->todo_status,
1430 &p->priority, &p->sensitivity, &p->uid, &p->latitude, &p->longitude,
1431 &p->created_time, &p->completed_time, &p->progress, &p->is_deleted,
1432 &p->last_mod, &p->freq, &p->range_type, &p->until.type, &arg_until,
1433 &p->count, &p->interval, &p->bysecond, &p->byminute, &p->byhour, &p->byday,
1434 &p->bymonthday, &p->byyearday, &p->byweekno, &p->bymonth, &p->bysetpos,
1435 &p->wkst, &p->has_alarm, &p->system_type, &p->updated, &p->sync_data1,
1436 &p->sync_data2, &p->sync_data3, &p->sync_data4, &p->start.type, &arg_start,
1437 &p->start_tzid, &p->due.type, &arg_due, &p->due_tzid, &p->organizer_name,
1438 &p->organizer_email, &p->has_attendee, &p->is_allday);
1439 _gvariant_to_caltime(p->until.type, arg_until, &p->until);
1440 _gvariant_to_caltime(p->start.type, arg_start, &p->start);
1441 _gvariant_to_caltime(p->due.type, arg_due, &p->due);
1442 CAL_DBUS_GET_STRING(p->summary);
1443 CAL_DBUS_GET_STRING(p->description);
1444 CAL_DBUS_GET_STRING(p->location);
1445 CAL_DBUS_GET_STRING(p->categories);
1446 CAL_DBUS_GET_STRING(p->uid);
1447 CAL_DBUS_GET_STRING(p->bysecond);
1448 CAL_DBUS_GET_STRING(p->byminute);
1449 CAL_DBUS_GET_STRING(p->byhour);
1450 CAL_DBUS_GET_STRING(p->byday);
1451 CAL_DBUS_GET_STRING(p->bymonthday);
1452 CAL_DBUS_GET_STRING(p->byyearday);
1453 CAL_DBUS_GET_STRING(p->byweekno);
1454 CAL_DBUS_GET_STRING(p->bymonth);
1455 CAL_DBUS_GET_STRING(p->bysetpos);
1456 CAL_DBUS_GET_STRING(p->sync_data1);
1457 CAL_DBUS_GET_STRING(p->sync_data2);
1458 CAL_DBUS_GET_STRING(p->sync_data3);
1459 CAL_DBUS_GET_STRING(p->sync_data4);
1460 CAL_DBUS_GET_STRING(p->start_tzid);
1461 CAL_DBUS_GET_STRING(p->due_tzid);
1462 CAL_DBUS_GET_STRING(p->organizer_name);
1463 CAL_DBUS_GET_STRING(p->organizer_email);
1465 *out_record = record;
1466 return CALENDAR_ERROR_NONE;
1469 static int _gvariant_to_todo(GVariant * arg_record, calendar_record_h *out_record)
1471 RETV_IF(NULL == arg_record, CALENDAR_ERROR_INVALID_PARAMETER);
1472 RETV_IF(NULL == out_record, CALENDAR_ERROR_INVALID_PARAMETER);
1474 GVariant *arg_only_todo = NULL;
1475 int count_alarm = 0;
1476 GVariantIter *iter_alarm = NULL;
1477 int count_attendee = 0;
1478 GVariantIter *iter_attendee = NULL;
1479 int count_extended = 0;
1480 GVariantIter *iter_extended = NULL;
1481 g_variant_get(arg_record, "(viaviaviav)", &arg_only_todo,
1482 &count_alarm, &iter_alarm, &count_attendee, &iter_attendee,
1483 &count_extended, &iter_extended);
1485 calendar_record_h record = NULL;
1486 _gvariant_to_only_todo(arg_only_todo, &record);
1488 if (0 < count_alarm) {
1489 GVariant *arg_alarm = NULL;
1490 while (g_variant_iter_loop(iter_alarm, "v", &arg_alarm)) {
1491 calendar_record_h alarm = NULL;
1492 _gvariant_to_alarm(arg_alarm, &alarm);
1493 calendar_record_add_child_record(record, _calendar_todo.calendar_alarm, alarm);
1499 if (0 < count_attendee) {
1500 GVariant *arg_attendee = NULL;
1501 while (g_variant_iter_loop(iter_attendee, "v", &arg_attendee)) {
1502 calendar_record_h attendee = NULL;
1503 _gvariant_to_attendee(arg_attendee, &attendee);
1504 calendar_record_add_child_record(record, _calendar_todo.calendar_attendee, attendee);
1510 if (0 < count_extended) {
1511 GVariant *arg_extended = NULL;
1512 while (g_variant_iter_loop(iter_extended, "v", &arg_extended)) {
1513 calendar_record_h extended = NULL;
1514 _gvariant_to_extended(arg_extended, &extended);
1515 calendar_record_add_child_record(record, _calendar_todo.extended, extended);
1520 *out_record = record;
1522 return CALENDAR_ERROR_NONE;
1526 static int _gvariant_to_instance_utime(GVariant * arg_record, calendar_record_h *out_record)
1528 RETV_IF(NULL == arg_record, CALENDAR_ERROR_INVALID_PARAMETER);
1529 RETV_IF(NULL == out_record, CALENDAR_ERROR_INVALID_PARAMETER);
1531 calendar_record_h record = NULL;
1532 calendar_record_create(_calendar_instance_utime_calendar_book._uri, &record);
1533 GVariant *arg_start = NULL;
1534 GVariant *arg_end = NULL;
1535 cal_instance_utime_s *p = (cal_instance_utime_s *)record;
1536 g_variant_get(arg_record, "(iiiviv&s&s&siiiiiddiix&s)",
1537 &p->event_id, &p->calendar_id, &p->start.type, &arg_start, &p->end.type,
1538 &arg_end, &p->summary, &p->description, &p->location, &p->busy_status,
1539 &p->event_status, &p->priority, &p->sensitivity, &p->has_rrule, &p->latitude,
1540 &p->longitude, &p->has_alarm, &p->original_event_id, &p->last_mod,
1542 _gvariant_to_caltime(p->start.type, arg_start, &p->start);
1543 _gvariant_to_caltime(p->end.type, arg_end, &p->end);
1544 CAL_DBUS_GET_STRING(p->summary);
1545 CAL_DBUS_GET_STRING(p->description);
1546 CAL_DBUS_GET_STRING(p->location);
1547 CAL_DBUS_GET_STRING(p->sync_data1);
1549 *out_record = record;
1550 return CALENDAR_ERROR_NONE;
1553 static int _gvariant_to_instance_localtime(GVariant * arg_record, calendar_record_h *out_record)
1555 RETV_IF(NULL == arg_record, CALENDAR_ERROR_INVALID_PARAMETER);
1556 RETV_IF(NULL == out_record, CALENDAR_ERROR_INVALID_PARAMETER);
1558 calendar_record_h record = NULL;
1559 calendar_record_create(_calendar_instance_localtime_calendar_book._uri, &record);
1560 GVariant *arg_start = NULL;
1561 GVariant *arg_end = NULL;
1562 cal_instance_localtime_s *p = (cal_instance_localtime_s *)record;
1563 g_variant_get(arg_record, "(iiiviv&s&s&siiiiiddiix&si)",
1564 &p->event_id, &p->calendar_id, &p->start.type, &arg_start, &p->end.type,
1565 &arg_end, &p->summary, &p->description, &p->location, &p->busy_status,
1566 &p->event_status, &p->priority, &p->sensitivity, &p->has_rrule, &p->latitude,
1567 &p->longitude, &p->has_alarm, &p->original_event_id, &p->last_mod,
1568 &p->sync_data1, &p->is_allday);
1569 _gvariant_to_caltime(p->start.type, arg_start, &p->start);
1570 _gvariant_to_caltime(p->end.type, arg_end, &p->end);
1571 CAL_DBUS_GET_STRING(p->summary);
1572 CAL_DBUS_GET_STRING(p->description);
1573 CAL_DBUS_GET_STRING(p->location);
1574 CAL_DBUS_GET_STRING(p->sync_data1);
1576 *out_record = record;
1577 return CALENDAR_ERROR_NONE;
1580 static int _gvariant_to_instance_utime_extended(GVariant * arg_record, calendar_record_h *out_record)
1582 RETV_IF(NULL == arg_record, CALENDAR_ERROR_INVALID_PARAMETER);
1583 RETV_IF(NULL == out_record, CALENDAR_ERROR_INVALID_PARAMETER);
1585 calendar_record_h record = NULL;
1586 calendar_record_create(_calendar_instance_utime_calendar_book_extended._uri, &record);
1587 GVariant *arg_start = NULL;
1588 GVariant *arg_end = NULL;
1589 cal_instance_utime_extended_s *p = (cal_instance_utime_extended_s *)record;
1590 g_variant_get(arg_record, "(iiiviv&s&s&siiiiiddiix&s&si&s&s&s&s)",
1591 &p->event_id, &p->calendar_id, &p->start.type, &arg_start, &p->end.type,
1592 &arg_end, &p->summary, &p->description, &p->location, &p->busy_status,
1593 &p->event_status, &p->priority, &p->sensitivity, &p->has_rrule, &p->latitude,
1594 &p->longitude, &p->has_alarm, &p->original_event_id, &p->last_mod,
1595 &p->organizer_name, &p->categories, &p->has_attendee, &p->sync_data1,
1596 &p->sync_data2, &p->sync_data3, &p->sync_data4);
1597 _gvariant_to_caltime(p->start.type, arg_start, &p->start);
1598 _gvariant_to_caltime(p->end.type, arg_end, &p->end);
1599 CAL_DBUS_GET_STRING(p->summary);
1600 CAL_DBUS_GET_STRING(p->description);
1601 CAL_DBUS_GET_STRING(p->location);
1602 CAL_DBUS_GET_STRING(p->organizer_name);
1603 CAL_DBUS_GET_STRING(p->categories);
1604 CAL_DBUS_GET_STRING(p->sync_data1);
1605 CAL_DBUS_GET_STRING(p->sync_data2);
1606 CAL_DBUS_GET_STRING(p->sync_data3);
1607 CAL_DBUS_GET_STRING(p->sync_data4);
1609 *out_record = record;
1610 return CALENDAR_ERROR_NONE;
1613 static int _gvariant_to_instance_localtime_extended(GVariant * arg_record, calendar_record_h *out_record)
1615 RETV_IF(NULL == arg_record, CALENDAR_ERROR_INVALID_PARAMETER);
1616 RETV_IF(NULL == out_record, CALENDAR_ERROR_INVALID_PARAMETER);
1618 calendar_record_h record = NULL;
1619 calendar_record_create(_calendar_instance_localtime_calendar_book_extended._uri, &record);
1620 GVariant *arg_start = NULL;
1621 GVariant *arg_end = NULL;
1622 cal_instance_localtime_extended_s *p = (cal_instance_localtime_extended_s *)record;
1623 g_variant_get(arg_record, "(iiiviv&s&s&siiiiiddiix&s&si&s&s&s&s)",
1624 &p->event_id, &p->calendar_id, &p->start.type, &arg_start, &p->end.type,
1625 &arg_end, &p->summary, &p->description, &p->location, &p->busy_status,
1626 &p->event_status, &p->priority, &p->sensitivity, &p->has_rrule, &p->latitude,
1627 &p->longitude, &p->has_alarm, &p->original_event_id, &p->last_mod,
1628 &p->organizer_name, &p->categories, &p->has_attendee, &p->sync_data1,
1629 &p->sync_data2, &p->sync_data3, &p->sync_data4);
1630 _gvariant_to_caltime(p->start.type, arg_start, &p->start);
1631 _gvariant_to_caltime(p->end.type, arg_end, &p->end);
1632 CAL_DBUS_GET_STRING(p->summary);
1633 CAL_DBUS_GET_STRING(p->description);
1634 CAL_DBUS_GET_STRING(p->location);
1635 CAL_DBUS_GET_STRING(p->organizer_name);
1636 CAL_DBUS_GET_STRING(p->categories);
1637 CAL_DBUS_GET_STRING(p->sync_data1);
1638 CAL_DBUS_GET_STRING(p->sync_data2);
1639 CAL_DBUS_GET_STRING(p->sync_data3);
1640 CAL_DBUS_GET_STRING(p->sync_data4);
1642 *out_record = record;
1643 return CALENDAR_ERROR_NONE;
1646 static int _gvariant_to_updated_info(GVariant * arg_record, calendar_record_h *out_record)
1648 RETV_IF(NULL == arg_record, CALENDAR_ERROR_INVALID_PARAMETER);
1649 RETV_IF(NULL == out_record, CALENDAR_ERROR_INVALID_PARAMETER);
1651 calendar_record_h record = NULL;
1652 calendar_record_create(_calendar_updated_info._uri, &record);
1653 cal_updated_info_s *p = (cal_updated_info_s *)record;
1654 g_variant_get(arg_record, "(iiii)", &p->type, &p->id, &p->calendar_id, &p->version);
1655 *out_record = record;
1656 return CALENDAR_ERROR_NONE;
1659 static int _gvariant_to_record(int type, GVariant *arg_common, GVariant *arg_record, calendar_record_h *out_record)
1661 RETV_IF(NULL == arg_record, CALENDAR_ERROR_INVALID_PARAMETER);
1662 RETV_IF(NULL == out_record, CALENDAR_ERROR_INVALID_PARAMETER);
1664 calendar_record_h record = NULL;
1666 case CAL_RECORD_TYPE_BOOK:
1667 _gvariant_to_book(arg_record, &record);
1669 case CAL_RECORD_TYPE_EVENT:
1670 _gvariant_to_event(arg_record, &record);
1672 case CAL_RECORD_TYPE_TODO:
1673 _gvariant_to_todo(arg_record, &record);
1675 case CAL_RECORD_TYPE_ALARM:
1676 _gvariant_to_alarm(arg_record, &record);
1678 case CAL_RECORD_TYPE_ATTENDEE:
1679 _gvariant_to_attendee(arg_record, &record);
1681 case CAL_RECORD_TYPE_TIMEZONE:
1682 _gvariant_to_timezone(arg_record, &record);
1684 case CAL_RECORD_TYPE_INSTANCE_UTIME:
1685 _gvariant_to_instance_utime(arg_record, &record);
1687 case CAL_RECORD_TYPE_INSTANCE_LOCALTIME:
1688 _gvariant_to_instance_localtime(arg_record, &record);
1690 case CAL_RECORD_TYPE_INSTANCE_UTIME_EXTENDED:
1691 _gvariant_to_instance_utime_extended(arg_record, &record);
1693 case CAL_RECORD_TYPE_INSTANCE_LOCALTIME_EXTENDED:
1694 _gvariant_to_instance_localtime_extended(arg_record, &record);
1696 case CAL_RECORD_TYPE_UPDATED_INFO:
1697 _gvariant_to_updated_info(arg_record, &record);
1699 case CAL_RECORD_TYPE_SEARCH:
1700 _gvariant_to_search(arg_record, &record);
1702 case CAL_RECORD_TYPE_EXTENDED:
1703 _gvariant_to_extended(arg_record, &record);
1706 ERR("Invalid type(%d)", type);
1710 cal_dbus_utils_gvariant_to_common(arg_common, &record);
1711 *out_record = record;
1712 return CALENDAR_ERROR_NONE;
1715 int cal_dbus_utils_gvariant_to_record(GVariant *arg_record_pack, calendar_record_h *out_record)
1718 GVariant *arg_common = NULL;
1719 GVariant *arg_record = NULL;
1720 g_variant_get(arg_record_pack, "(ivv)", &type, &arg_common, &arg_record);
1721 _gvariant_to_record(type, arg_common, arg_record, out_record);
1722 return CALENDAR_ERROR_NONE;
1725 int cal_dbus_utils_gvariant_to_list(GVariant *arg_list_pack, calendar_list_h *out_list)
1728 GVariant *arg_list = NULL;
1729 g_variant_get(arg_list_pack, "(iv)", &has_list, &arg_list);
1731 calendar_list_h l = NULL;
1732 calendar_list_create(&l);
1734 if (1 == has_list) {
1735 GVariantIter *iter_value = NULL;
1736 g_variant_get(arg_list, "av", &iter_value);
1738 GVariant *arg_record = NULL;
1739 while (g_variant_iter_loop(iter_value, "v", &arg_record)) {
1740 calendar_record_h record = NULL;
1741 cal_dbus_utils_gvariant_to_record(arg_record, &record);
1742 calendar_list_add(l, record);
1747 return CALENDAR_ERROR_NONE;
1750 GVariant *cal_dbus_utils_stream_to_gvariant(int stream_size, char *stream)
1752 return g_variant_new("(is)", stream_size, CAL_DBUS_SET_STRING(stream));
1755 int cal_dbus_utils_gvariant_to_stream(GVariant *arg_stream, int *out_size, char **out_stream)
1758 char *stream = NULL;
1760 RETV_IF(NULL == out_size, CALENDAR_ERROR_INVALID_PARAMETER);
1761 RETV_IF(NULL == out_stream, CALENDAR_ERROR_INVALID_PARAMETER);
1763 g_variant_get(arg_stream, "(i&s)", &size, &stream);
1764 CAL_DBUS_GET_STRING(stream);
1766 *out_stream = cal_strdup(stream);
1767 return CALENDAR_ERROR_NONE;