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.
24 #include "calendar_list.h"
25 #include "cal_internal.h"
26 #include "cal_typedef.h"
29 #include "cal_record.h"
30 #include "cal_utils.h"
32 static int _cal_record_todo_create(calendar_record_h* out_record);
33 static int _cal_record_todo_destroy(calendar_record_h record, bool delete_child);
34 static int _cal_record_todo_clone(calendar_record_h record, calendar_record_h* out_record);
35 static int _cal_record_todo_get_str(calendar_record_h record, unsigned int property_id, char** out_str);
36 static int _cal_record_todo_get_str_p(calendar_record_h record, unsigned int property_id, char** out_str);
37 static int _cal_record_todo_get_int(calendar_record_h record, unsigned int property_id, int* out_value);
38 static int _cal_record_todo_get_double(calendar_record_h record, unsigned int property_id, double* out_value);
39 static int _cal_record_todo_get_lli(calendar_record_h record, unsigned int property_id, long long int* out_value);
40 static int _cal_record_todo_get_caltime(calendar_record_h record, unsigned int property_id, calendar_time_s* out_value);
41 static int _cal_record_todo_set_str(calendar_record_h record, unsigned int property_id, const char* value);
42 static int _cal_record_todo_set_int(calendar_record_h record, unsigned int property_id, int value);
43 static int _cal_record_todo_set_double(calendar_record_h record, unsigned int property_id, double value);
44 static int _cal_record_todo_set_lli(calendar_record_h record, unsigned int property_id, long long int value);
45 static int _cal_record_todo_set_caltime(calendar_record_h record, unsigned int property_id, calendar_time_s value);
46 static int _cal_record_todo_add_child_record(calendar_record_h record, unsigned int property_id, calendar_record_h child_record);
47 static int _cal_record_todo_remove_child_record(calendar_record_h record, unsigned int property_id, calendar_record_h child_record);
48 static int _cal_record_todo_get_child_record_count(calendar_record_h record, unsigned int property_id, unsigned int* count);
49 static int _cal_record_todo_get_child_record_at_p(calendar_record_h record, unsigned int property_id, int index, calendar_record_h* child_record);
50 static int _cal_record_todo_clone_child_record_list(calendar_record_h record, unsigned int property_id, calendar_list_h* out_list);
52 cal_record_plugin_cb_s cal_record_todo_plugin_cb = {
53 .create = _cal_record_todo_create,
54 .destroy = _cal_record_todo_destroy,
55 .clone = _cal_record_todo_clone,
56 .get_str = _cal_record_todo_get_str,
57 .get_str_p = _cal_record_todo_get_str_p,
58 .get_int = _cal_record_todo_get_int,
59 .get_double = _cal_record_todo_get_double,
60 .get_lli = _cal_record_todo_get_lli,
61 .get_caltime = _cal_record_todo_get_caltime,
62 .set_str = _cal_record_todo_set_str,
63 .set_int = _cal_record_todo_set_int,
64 .set_double = _cal_record_todo_set_double,
65 .set_lli = _cal_record_todo_set_lli,
66 .set_caltime = _cal_record_todo_set_caltime,
67 .add_child_record = _cal_record_todo_add_child_record,
68 .remove_child_record = _cal_record_todo_remove_child_record,
69 .get_child_record_count = _cal_record_todo_get_child_record_count,
70 .get_child_record_at_p = _cal_record_todo_get_child_record_at_p,
71 .clone_child_record_list = _cal_record_todo_clone_child_record_list
74 static void _cal_record_todo_struct_init(cal_todo_s *record)
76 memset(record, 0, sizeof(cal_todo_s));
78 record->todo_status = CALENDAR_TODO_STATUS_NONE;
79 record->calendar_id = DEFAULT_TODO_CALENDAR_BOOK_ID;
81 record->index = CAL_INVALID_ID;
82 record->summary = NULL;
83 record->description = NULL;
84 record->location = NULL;
85 record->categories = NULL;
87 record->is_deleted = 0;
88 record->latitude = CALENDAR_RECORD_NO_COORDINATE; /* set default 1000 out of range(-180 ~ 180) */
89 record->longitude = CALENDAR_RECORD_NO_COORDINATE; /* set default 1000 out of range(-180 ~ 180) */
90 record->priority = CALENDAR_TODO_PRIORITY_NONE;
91 record->freq = CALENDAR_RECURRENCE_NONE;
92 record->start.time.utime = CALENDAR_TODO_NO_START_DATE;
93 record->due.time.utime = CALENDAR_TODO_NO_DUE_DATE;
94 record->until.time.utime = CALENDAR_RECORD_NO_UNTIL;
96 record->alarm_list = calloc(1, sizeof(cal_list_s));
97 record->attendee_list = calloc(1, sizeof(cal_list_s));
98 record->extended_list = calloc(1, sizeof(cal_list_s));
103 static int _cal_record_todo_create(calendar_record_h* out_record)
105 cal_todo_s *temp = NULL;
106 int ret = CALENDAR_ERROR_NONE;
108 temp = calloc(1, sizeof(cal_todo_s));
109 RETVM_IF(NULL == temp, CALENDAR_ERROR_OUT_OF_MEMORY, "calloc() Fail");
111 _cal_record_todo_struct_init(temp);
113 *out_record = (calendar_record_h)temp;
118 static void _cal_record_todo_struct_free(cal_todo_s *record, bool delete_child)
120 CAL_FREE(record->summary);
121 CAL_FREE(record->description);
122 CAL_FREE(record->location);
123 CAL_FREE(record->categories);
124 CAL_FREE(record->uid);
125 CAL_FREE(record->start_tzid);
126 CAL_FREE(record->due_tzid);
128 CAL_FREE(record->bysecond);
129 CAL_FREE(record->byminute);
130 CAL_FREE(record->byhour);
131 CAL_FREE(record->byday);
132 CAL_FREE(record->bymonthday);
133 CAL_FREE(record->byyearday);
134 CAL_FREE(record->byweekno);
135 CAL_FREE(record->bymonth);
136 CAL_FREE(record->bysetpos);
138 CAL_FREE(record->sync_data1);
139 CAL_FREE(record->sync_data2);
140 CAL_FREE(record->sync_data3);
141 CAL_FREE(record->sync_data4);
143 CAL_FREE(record->organizer_name);
144 CAL_FREE(record->organizer_email);
146 calendar_list_destroy((calendar_list_h)record->alarm_list, delete_child);
147 calendar_list_destroy((calendar_list_h)record->attendee_list, delete_child);
148 calendar_list_destroy((calendar_list_h)record->extended_list, delete_child);
153 static int _cal_record_todo_destroy(calendar_record_h record, bool delete_child)
155 int ret = CALENDAR_ERROR_NONE;
157 cal_todo_s *temp = (cal_todo_s*)(record);
159 _cal_record_todo_struct_free(temp, delete_child);
164 static int _cal_record_todo_clone(calendar_record_h record, calendar_record_h* out_record)
166 cal_todo_s *out_data = NULL;
167 cal_todo_s *src_data = NULL;
169 src_data = (cal_todo_s*)(record);
171 out_data = calloc(1, sizeof(cal_todo_s));
172 RETVM_IF(NULL == out_data, CALENDAR_ERROR_OUT_OF_MEMORY, "calloc() Fail");
174 CAL_RECORD_COPY_COMMON(&(out_data->common), &(src_data->common));
176 out_data->index = src_data->index;
177 out_data->summary = cal_strdup(src_data->summary);
178 out_data->description = cal_strdup(src_data->description);
179 out_data->location = cal_strdup(src_data->location);
180 out_data->categories = cal_strdup(src_data->categories);
182 out_data->todo_status = src_data->todo_status;
183 out_data->priority = src_data->priority;
184 out_data->sensitivity = src_data->sensitivity;
186 out_data->uid = cal_strdup(src_data->uid);
188 out_data->calendar_id = src_data->calendar_id;
189 out_data->latitude = src_data->latitude;
190 out_data->longitude = src_data->longitude;
192 out_data->created_time = src_data->created_time;
193 out_data->completed_time = src_data->completed_time;
194 out_data->progress = src_data->progress;
195 out_data->is_deleted = src_data->is_deleted;
196 out_data->last_mod = src_data->last_mod;
198 out_data->freq = src_data->freq;
199 out_data->range_type = src_data->range_type;
200 out_data->until = src_data->until;
201 out_data->count = src_data->count;
202 out_data->interval = src_data->interval;
203 out_data->bysecond = cal_strdup(src_data->bysecond);
204 out_data->byminute = cal_strdup(src_data->byminute);
205 out_data->byhour = cal_strdup(src_data->byhour);
206 out_data->byday = cal_strdup(src_data->byday);
207 out_data->bymonthday = cal_strdup(src_data->bymonthday);
208 out_data->byyearday = cal_strdup(src_data->byyearday);
209 out_data->byweekno = cal_strdup(src_data->byweekno);
210 out_data->bymonth = cal_strdup(src_data->bymonth);
211 out_data->bysetpos = cal_strdup(src_data->bysetpos);
212 out_data->wkst = src_data->wkst;
213 out_data->has_alarm = src_data->has_alarm;
214 out_data->updated = src_data->updated;
216 out_data->sync_data1 = cal_strdup(src_data->sync_data1);
217 out_data->sync_data2 = cal_strdup(src_data->sync_data2);
218 out_data->sync_data3 = cal_strdup(src_data->sync_data3);
219 out_data->sync_data4 = cal_strdup(src_data->sync_data4);
221 out_data->start = src_data->start;
222 out_data->start_tzid = cal_strdup(src_data->start_tzid);
223 out_data->due = src_data->due;
224 out_data->due_tzid = cal_strdup(src_data->due_tzid);
226 out_data->organizer_name = cal_strdup(src_data->organizer_name);
227 out_data->organizer_email = cal_strdup(src_data->organizer_email);
228 out_data->has_attendee = src_data->has_attendee;
230 cal_list_clone((calendar_list_h)src_data->alarm_list, (calendar_list_h *)&out_data->alarm_list);
231 cal_list_clone((calendar_list_h)src_data->attendee_list, (calendar_list_h *)&out_data->attendee_list);
232 cal_list_clone((calendar_list_h)src_data->extended_list, (calendar_list_h *)&out_data->extended_list);
234 *out_record = (calendar_record_h)out_data;
236 return CALENDAR_ERROR_NONE;
239 static int _cal_record_todo_get_str(calendar_record_h record, unsigned int property_id, char** out_str)
241 cal_todo_s *rec = (cal_todo_s*)(record);
242 switch (property_id) {
243 case CAL_PROPERTY_TODO_SUMMARY:
244 *out_str = cal_strdup(rec->summary);
246 case CAL_PROPERTY_TODO_DESCRIPTION:
247 *out_str = cal_strdup(rec->description);
249 case CAL_PROPERTY_TODO_LOCATION:
250 *out_str = cal_strdup(rec->location);
252 case CAL_PROPERTY_TODO_CATEGORIES:
253 *out_str = cal_strdup(rec->categories);
255 case CAL_PROPERTY_TODO_UID:
256 *out_str = cal_strdup(rec->uid);
258 case CAL_PROPERTY_TODO_BYSECOND:
259 *out_str = cal_strdup(rec->bysecond);
261 case CAL_PROPERTY_TODO_BYMINUTE:
262 *out_str = cal_strdup(rec->byminute);
264 case CAL_PROPERTY_TODO_BYHOUR:
265 *out_str = cal_strdup(rec->byhour);
267 case CAL_PROPERTY_TODO_BYDAY:
268 *out_str = cal_strdup(rec->byday);
270 case CAL_PROPERTY_TODO_BYMONTHDAY:
271 *out_str = cal_strdup(rec->bymonthday);
273 case CAL_PROPERTY_TODO_BYYEARDAY:
274 *out_str = cal_strdup(rec->byyearday);
276 case CAL_PROPERTY_TODO_BYWEEKNO:
277 *out_str = cal_strdup(rec->byweekno);
279 case CAL_PROPERTY_TODO_BYMONTH:
280 *out_str = cal_strdup(rec->bymonth);
282 case CAL_PROPERTY_TODO_BYSETPOS:
283 *out_str = cal_strdup(rec->bysetpos);
285 case CAL_PROPERTY_TODO_SYNC_DATA1:
286 *out_str = cal_strdup(rec->sync_data1);
288 case CAL_PROPERTY_TODO_SYNC_DATA2:
289 *out_str = cal_strdup(rec->sync_data2);
291 case CAL_PROPERTY_TODO_SYNC_DATA3:
292 *out_str = cal_strdup(rec->sync_data3);
294 case CAL_PROPERTY_TODO_SYNC_DATA4:
295 *out_str = cal_strdup(rec->sync_data4);
297 case CAL_PROPERTY_TODO_START_TZID:
298 *out_str = cal_strdup(rec->start_tzid);
300 case CAL_PROPERTY_TODO_DUE_TZID:
301 *out_str = cal_strdup(rec->due_tzid);
303 case CAL_PROPERTY_TODO_ORGANIZER_NAME:
304 *out_str = cal_strdup(rec->organizer_name);
306 case CAL_PROPERTY_TODO_ORGANIZER_EMAIL:
307 *out_str = cal_strdup(rec->organizer_email);
310 ERR("invalid parameter (property:0x%x)", property_id);
311 return CALENDAR_ERROR_INVALID_PARAMETER;
314 return CALENDAR_ERROR_NONE;
317 static int _cal_record_todo_get_str_p(calendar_record_h record, unsigned int property_id, char** out_str)
319 cal_todo_s *rec = (cal_todo_s*)(record);
320 switch (property_id) {
321 case CAL_PROPERTY_TODO_SUMMARY:
322 *out_str = (rec->summary);
324 case CAL_PROPERTY_TODO_DESCRIPTION:
325 *out_str = (rec->description);
327 case CAL_PROPERTY_TODO_LOCATION:
328 *out_str = (rec->location);
330 case CAL_PROPERTY_TODO_CATEGORIES:
331 *out_str = (rec->categories);
333 case CAL_PROPERTY_TODO_UID:
334 *out_str = (rec->uid);
336 case CAL_PROPERTY_TODO_BYSECOND:
337 *out_str = (rec->bysecond);
339 case CAL_PROPERTY_TODO_BYMINUTE:
340 *out_str = (rec->byminute);
342 case CAL_PROPERTY_TODO_BYHOUR:
343 *out_str = (rec->byhour);
345 case CAL_PROPERTY_TODO_BYDAY:
346 *out_str = (rec->byday);
348 case CAL_PROPERTY_TODO_BYMONTHDAY:
349 *out_str = (rec->bymonthday);
351 case CAL_PROPERTY_TODO_BYYEARDAY:
352 *out_str = (rec->byyearday);
354 case CAL_PROPERTY_TODO_BYWEEKNO:
355 *out_str = (rec->byweekno);
357 case CAL_PROPERTY_TODO_BYMONTH:
358 *out_str = (rec->bymonth);
360 case CAL_PROPERTY_TODO_BYSETPOS:
361 *out_str = (rec->bysetpos);
363 case CAL_PROPERTY_TODO_SYNC_DATA1:
364 *out_str = (rec->sync_data1);
366 case CAL_PROPERTY_TODO_SYNC_DATA2:
367 *out_str = (rec->sync_data2);
369 case CAL_PROPERTY_TODO_SYNC_DATA3:
370 *out_str = (rec->sync_data3);
372 case CAL_PROPERTY_TODO_SYNC_DATA4:
373 *out_str = (rec->sync_data4);
375 case CAL_PROPERTY_TODO_START_TZID:
376 *out_str = (rec->start_tzid);
378 case CAL_PROPERTY_TODO_DUE_TZID:
379 *out_str = (rec->due_tzid);
381 case CAL_PROPERTY_TODO_ORGANIZER_NAME:
382 *out_str = (rec->organizer_name);
384 case CAL_PROPERTY_TODO_ORGANIZER_EMAIL:
385 *out_str = (rec->organizer_email);
388 ERR("invalid parameter (property:0x%x)", property_id);
389 return CALENDAR_ERROR_INVALID_PARAMETER;
392 return CALENDAR_ERROR_NONE;
395 static int _cal_record_todo_get_int(calendar_record_h record, unsigned int property_id, int* out_value)
397 cal_todo_s *rec = (cal_todo_s*)(record);
398 switch (property_id) {
399 case CAL_PROPERTY_TODO_ID:
400 *out_value = (rec->index);
402 case CAL_PROPERTY_TODO_CALENDAR_ID:
403 *out_value = (rec->calendar_id);
405 case CAL_PROPERTY_TODO_TODO_STATUS:
406 *out_value = (rec->todo_status);
408 case CAL_PROPERTY_TODO_PRIORITY:
409 *out_value = (rec->priority);
411 case CAL_PROPERTY_TODO_SENSITIVITY:
412 *out_value = (rec->sensitivity);
414 case CAL_PROPERTY_TODO_PROGRESS:
415 *out_value = (rec->progress);
417 case CAL_PROPERTY_TODO_IS_DELETED:
418 *out_value = (rec->is_deleted);
420 case CAL_PROPERTY_TODO_FREQ:
421 *out_value = (rec->freq);
423 case CAL_PROPERTY_TODO_RANGE_TYPE:
424 *out_value = (rec->range_type);
426 case CAL_PROPERTY_TODO_COUNT:
427 *out_value = (rec->count);
429 case CAL_PROPERTY_TODO_INTERVAL:
430 *out_value = (rec->interval);
432 case CAL_PROPERTY_TODO_WKST:
433 *out_value = (rec->wkst);
435 case CAL_PROPERTY_TODO_HAS_ALARM:
436 *out_value = (rec->has_alarm);
438 case CAL_PROPERTY_TODO_HAS_ATTENDEE:
439 *out_value = (rec->has_attendee);
441 case CAL_PROPERTY_TODO_IS_ALLDAY:
442 *out_value = (rec->is_allday);
445 ERR("invalid parameter (property:0x%x)", property_id);
446 return CALENDAR_ERROR_INVALID_PARAMETER;
449 return CALENDAR_ERROR_NONE;
452 static int _cal_record_todo_get_double(calendar_record_h record, unsigned int property_id, double* out_value)
454 cal_todo_s *rec = (cal_todo_s*)(record);
455 switch (property_id) {
456 case CAL_PROPERTY_TODO_LATITUDE:
457 *out_value = (rec->latitude);
459 case CAL_PROPERTY_TODO_LONGITUDE:
460 *out_value = (rec->longitude);
463 ERR("invalid parameter (property:0x%x)", property_id);
464 return CALENDAR_ERROR_INVALID_PARAMETER;
467 return CALENDAR_ERROR_NONE;
470 static int _cal_record_todo_get_lli(calendar_record_h record, unsigned int property_id, long long int* out_value)
472 cal_todo_s *rec = (cal_todo_s*)(record);
473 switch (property_id) {
474 case CAL_PROPERTY_TODO_CREATED_TIME:
475 *out_value = (rec->created_time);
477 case CAL_PROPERTY_TODO_LAST_MODIFIED_TIME:
478 *out_value = (rec->last_mod);
480 case CAL_PROPERTY_TODO_COMPLETED_TIME:
481 *out_value = (rec->completed_time);
484 ERR("invalid parameter (property:0x%x)", property_id);
485 return CALENDAR_ERROR_INVALID_PARAMETER;
488 return CALENDAR_ERROR_NONE;
491 static int _cal_record_todo_get_caltime(calendar_record_h record, unsigned int property_id, calendar_time_s* out_value)
493 cal_todo_s *rec = (cal_todo_s*)(record);
494 switch (property_id) {
495 case CAL_PROPERTY_TODO_START:
496 *out_value = rec->start;
498 case CAL_PROPERTY_TODO_DUE:
499 *out_value = rec->due;
501 case CAL_PROPERTY_TODO_UNTIL:
502 *out_value = rec->until;
505 ERR("invalid parameter (property:0x%x)", property_id);
506 return CALENDAR_ERROR_INVALID_PARAMETER;
509 return CALENDAR_ERROR_NONE;
512 static int _cal_record_todo_set_str(calendar_record_h record, unsigned int property_id, const char* value)
514 cal_todo_s *rec = (cal_todo_s*)(record);
515 switch (property_id) {
516 case CAL_PROPERTY_TODO_SUMMARY:
517 CAL_FREE(rec->summary);
518 rec->summary = cal_strdup(value);
520 case CAL_PROPERTY_TODO_DESCRIPTION:
521 CAL_FREE(rec->description);
522 rec->description = cal_strdup(value);
524 case CAL_PROPERTY_TODO_LOCATION:
525 CAL_FREE(rec->location);
526 rec->location = cal_strdup(value);
528 case CAL_PROPERTY_TODO_CATEGORIES:
529 CAL_FREE(rec->categories);
530 rec->categories = cal_strdup(value);
532 case CAL_PROPERTY_TODO_UID:
534 rec->uid = cal_strdup(value);
536 case CAL_PROPERTY_TODO_BYSECOND:
537 CAL_FREE(rec->bysecond);
538 rec->bysecond = cal_strdup(value);
540 case CAL_PROPERTY_TODO_BYMINUTE:
541 CAL_FREE(rec->byminute);
542 rec->byminute = cal_strdup(value);
544 case CAL_PROPERTY_TODO_BYHOUR:
545 CAL_FREE(rec->byhour);
546 rec->byhour = cal_strdup(value);
548 case CAL_PROPERTY_TODO_BYDAY:
549 CAL_FREE(rec->byday);
550 rec->byday = cal_strdup(value);
552 case CAL_PROPERTY_TODO_BYMONTHDAY:
553 CAL_FREE(rec->bymonthday);
554 rec->bymonthday = cal_strdup(value);
556 case CAL_PROPERTY_TODO_BYYEARDAY:
557 CAL_FREE(rec->byyearday);
558 rec->byyearday = cal_strdup(value);
560 case CAL_PROPERTY_TODO_BYWEEKNO:
561 CAL_FREE(rec->byweekno);
562 rec->byweekno = cal_strdup(value);
564 case CAL_PROPERTY_TODO_BYMONTH:
565 CAL_FREE(rec->bymonth);
566 rec->bymonth = cal_strdup(value);
568 case CAL_PROPERTY_TODO_BYSETPOS:
569 CAL_FREE(rec->bysetpos);
570 rec->bysetpos = cal_strdup(value);
572 case CAL_PROPERTY_TODO_SYNC_DATA1:
573 CAL_FREE(rec->sync_data1);
574 rec->sync_data1 = cal_strdup(value);
576 case CAL_PROPERTY_TODO_SYNC_DATA2:
577 CAL_FREE(rec->sync_data2);
578 rec->sync_data2 = cal_strdup(value);
580 case CAL_PROPERTY_TODO_SYNC_DATA3:
581 CAL_FREE(rec->sync_data3);
582 rec->sync_data3 = cal_strdup(value);
584 case CAL_PROPERTY_TODO_SYNC_DATA4:
585 CAL_FREE(rec->sync_data4);
586 rec->sync_data4 = cal_strdup(value);
588 case CAL_PROPERTY_TODO_START_TZID:
589 CAL_FREE(rec->start_tzid);
590 rec->start_tzid = cal_strdup(value);
592 case CAL_PROPERTY_TODO_DUE_TZID:
593 CAL_FREE(rec->due_tzid);
594 rec->due_tzid = cal_strdup(value);
596 case CAL_PROPERTY_TODO_ORGANIZER_NAME:
597 CAL_FREE(rec->organizer_name);
598 rec->organizer_name = cal_strdup(value);
600 case CAL_PROPERTY_TODO_ORGANIZER_EMAIL:
601 CAL_FREE(rec->organizer_email);
602 rec->organizer_email = cal_strdup(value);
605 return CALENDAR_ERROR_INVALID_PARAMETER;
608 return CALENDAR_ERROR_NONE;
611 static int _cal_record_todo_set_int(calendar_record_h record, unsigned int property_id, int value)
613 cal_todo_s *rec = (cal_todo_s*)(record);
614 switch (property_id) {
615 case CAL_PROPERTY_TODO_ID:
616 (rec->index) = value;
618 case CAL_PROPERTY_TODO_CALENDAR_ID:
619 (rec->calendar_id) = value;
621 case CAL_PROPERTY_TODO_TODO_STATUS:
623 case CALENDAR_TODO_STATUS_NONE:
624 case CALENDAR_TODO_STATUS_NEEDS_ACTION:
625 case CALENDAR_TODO_STATUS_COMPLETED:
626 case CALENDAR_TODO_STATUS_IN_PROCESS:
627 case CALENDAR_TODO_STATUS_CANCELED:
628 (rec->todo_status) = value;
631 ERR("invalid parameter (value:%d)", value);
632 return CALENDAR_ERROR_INVALID_PARAMETER;
635 case CAL_PROPERTY_TODO_PRIORITY:
637 case CALENDAR_TODO_PRIORITY_NONE:
638 case CALENDAR_TODO_PRIORITY_LOW:
639 case CALENDAR_TODO_PRIORITY_NORMAL:
640 case CALENDAR_TODO_PRIORITY_HIGH:
641 (rec->priority) = value;
644 ERR("invalid parameter (value:%d)", value);
645 return CALENDAR_ERROR_INVALID_PARAMETER;
648 case CAL_PROPERTY_TODO_SENSITIVITY:
649 (rec->sensitivity) = value;
651 case CAL_PROPERTY_TODO_PROGRESS:
652 (rec->progress) = value;
654 case CAL_PROPERTY_TODO_IS_DELETED:
655 (rec->is_deleted) = value;
657 case CAL_PROPERTY_TODO_FREQ:
659 case CALENDAR_RECURRENCE_NONE:
660 case CALENDAR_RECURRENCE_DAILY:
661 case CALENDAR_RECURRENCE_WEEKLY:
662 case CALENDAR_RECURRENCE_MONTHLY:
663 case CALENDAR_RECURRENCE_YEARLY:
667 ERR("invalid parameter (value:%d)", value);
668 return CALENDAR_ERROR_INVALID_PARAMETER;
671 case CAL_PROPERTY_TODO_RANGE_TYPE:
673 case CALENDAR_RANGE_UNTIL:
674 case CALENDAR_RANGE_COUNT:
675 case CALENDAR_RANGE_NONE:
676 (rec->range_type) = value;
679 ERR("invalid parameter (value:%d)", value);
680 return CALENDAR_ERROR_INVALID_PARAMETER;
683 case CAL_PROPERTY_TODO_COUNT:
684 (rec->count) = value;
686 case CAL_PROPERTY_TODO_INTERVAL:
687 (rec->interval) = value;
689 case CAL_PROPERTY_TODO_WKST:
692 DBG("set wkst as default");
693 case CALENDAR_SUNDAY:
694 case CALENDAR_MONDAY:
695 case CALENDAR_TUESDAY:
696 case CALENDAR_WEDNESDAY:
697 case CALENDAR_THURSDAY:
698 case CALENDAR_FRIDAY:
699 case CALENDAR_SATURDAY:
703 ERR("invalid parameter (value:%d)", value);
704 return CALENDAR_ERROR_INVALID_PARAMETER;
707 case CAL_PROPERTY_TODO_HAS_ALARM:
708 (rec->has_alarm) = value;
710 case CAL_PROPERTY_TODO_HAS_ATTENDEE:
711 (rec->has_attendee) = value;
713 case CAL_PROPERTY_TODO_IS_ALLDAY:
714 (rec->is_allday) = value;
717 ERR("invalid parameter (property:0x%x)", property_id);
718 return CALENDAR_ERROR_INVALID_PARAMETER;
721 return CALENDAR_ERROR_NONE;
724 static int _cal_record_todo_set_double(calendar_record_h record, unsigned int property_id, double value)
726 cal_todo_s *rec = (cal_todo_s*)(record);
727 switch (property_id) {
728 case CAL_PROPERTY_TODO_LATITUDE:
729 (rec->latitude) = value;
731 case CAL_PROPERTY_TODO_LONGITUDE:
732 (rec->longitude) = value;
735 ERR("invalid parameter (property:0x%x)", property_id);
736 return CALENDAR_ERROR_INVALID_PARAMETER;
739 return CALENDAR_ERROR_NONE;
742 static int _cal_record_todo_set_lli(calendar_record_h record, unsigned int property_id, long long int value)
744 cal_todo_s *rec = (cal_todo_s*)(record);
745 switch (property_id) {
746 case CAL_PROPERTY_TODO_COMPLETED_TIME:
747 (rec->completed_time) = value;
749 case CAL_PROPERTY_TODO_CREATED_TIME:
750 (rec->created_time) = value;
753 ERR("invalid parameter (property:0x%x)", property_id);
754 return CALENDAR_ERROR_INVALID_PARAMETER;
757 return CALENDAR_ERROR_NONE;
760 static int _cal_record_todo_set_caltime(calendar_record_h record, unsigned int property_id, calendar_time_s value)
762 cal_todo_s *rec = (cal_todo_s*)(record);
763 switch (property_id) {
764 case CAL_PROPERTY_TODO_START:
765 (rec->start) = value;
767 case CAL_PROPERTY_TODO_DUE:
770 case CAL_PROPERTY_TODO_UNTIL:
771 (rec->until) = value;
774 ERR("invalid parameter (property:0x%x)", property_id);
775 return CALENDAR_ERROR_INVALID_PARAMETER;
778 return CALENDAR_ERROR_NONE;
781 static int _cal_record_todo_reset_child_record_id(calendar_record_h child_record)
783 cal_record_s *record = (cal_record_s*)child_record;
784 RETV_IF(NULL == record, CALENDAR_ERROR_INVALID_PARAMETER);
786 switch (record->type) {
787 case CAL_RECORD_TYPE_ALARM:
788 ((cal_alarm_s *)record)->id = 0;
790 case CAL_RECORD_TYPE_ATTENDEE:
791 ((cal_attendee_s *)record)->id = 0;
793 case CAL_RECORD_TYPE_EXTENDED:
794 ((cal_extended_s *)record)->id = 0;
797 ERR("Invalid child record type (%d)", record->type);
798 return CALENDAR_ERROR_INVALID_PARAMETER;
800 return CALENDAR_ERROR_NONE;
804 static int _cal_record_todo_add_child_record(calendar_record_h record, unsigned int property_id, calendar_record_h child_record)
806 int ret = CALENDAR_ERROR_NONE;
807 cal_todo_s *rec = (cal_todo_s*)(record);
808 _cal_record_todo_reset_child_record_id(child_record);
810 switch (property_id) {
811 case CAL_PROPERTY_TODO_CALENDAR_ALARM:
812 ret = calendar_list_add((calendar_list_h)rec->alarm_list, child_record);
815 case CAL_PROPERTY_TODO_CALENDAR_ATTENDEE:
816 ret = calendar_list_add((calendar_list_h)rec->attendee_list, child_record);
817 rec->has_attendee = 1;
819 case CAL_PROPERTY_TODO_EXTENDED:
820 ret = calendar_list_add((calendar_list_h)rec->extended_list, child_record);
823 ERR("invalid parameter (property:0x%x)", property_id);
824 return CALENDAR_ERROR_INVALID_PARAMETER;
829 static int _cal_record_todo_remove_child_record(calendar_record_h record, unsigned int property_id, calendar_record_h child_record)
831 int ret = CALENDAR_ERROR_NONE;
832 cal_todo_s *rec = (cal_todo_s *)record;
834 switch (property_id) {
835 case CAL_PROPERTY_TODO_CALENDAR_ALARM:
836 ret = calendar_list_remove((calendar_list_h)rec->alarm_list, child_record);
837 if (rec->alarm_list->count == 0)
840 case CAL_PROPERTY_TODO_CALENDAR_ATTENDEE:
841 ret = calendar_list_remove((calendar_list_h)rec->attendee_list, child_record);
842 if (rec->attendee_list->count == 0)
843 rec->has_attendee = 0;
845 case CAL_PROPERTY_TODO_EXTENDED:
846 ret = calendar_list_remove((calendar_list_h)rec->extended_list, child_record);
849 ERR("invalid parameter (property:0x%x)", property_id);
850 return CALENDAR_ERROR_INVALID_PARAMETER;
855 static int _cal_record_todo_get_child_record_count(calendar_record_h record, unsigned int property_id , unsigned int* count)
857 int ret = CALENDAR_ERROR_NONE;
858 cal_todo_s *rec = (cal_todo_s *)record;
860 RETV_IF(NULL == count, CALENDAR_ERROR_INVALID_PARAMETER);
863 switch (property_id) {
864 case CAL_PROPERTY_TODO_CALENDAR_ALARM:
865 ret = calendar_list_get_count((calendar_list_h)rec->alarm_list, (int *)count);
867 case CAL_PROPERTY_TODO_CALENDAR_ATTENDEE:
868 ret = calendar_list_get_count((calendar_list_h)rec->attendee_list, (int *)count);
870 case CAL_PROPERTY_TODO_EXTENDED:
871 ret = calendar_list_get_count((calendar_list_h)rec->extended_list, (int *)count);
874 ERR("invalid parameter (property:0x%x)", property_id);
875 return CALENDAR_ERROR_INVALID_PARAMETER;
880 static int _cal_record_todo_get_child_record_at_p(calendar_record_h record, unsigned int property_id, int index, calendar_record_h* child_record)
883 cal_todo_s *rec = (cal_todo_s*)(record);
885 RETV_IF(NULL == child_record, CALENDAR_ERROR_INVALID_PARAMETER);
886 *child_record = NULL;
888 switch (property_id) {
889 case CAL_PROPERTY_TODO_CALENDAR_ALARM:
890 ret = cal_list_get_nth_record_p(rec->alarm_list, index, child_record);
892 case CAL_PROPERTY_TODO_CALENDAR_ATTENDEE:
893 ret = cal_list_get_nth_record_p(rec->attendee_list, index, child_record);
895 case CAL_PROPERTY_TODO_EXTENDED:
896 ret = cal_list_get_nth_record_p(rec->extended_list, index, child_record);
899 ERR("invalid parameter (property:0x%x)", property_id);
900 return CALENDAR_ERROR_INVALID_PARAMETER;
905 static int _cal_record_todo_clone_child_record_list(calendar_record_h record, unsigned int property_id, calendar_list_h* out_list)
908 cal_todo_s *rec = (cal_todo_s*)(record);
910 RETV_IF(NULL == out_list, CALENDAR_ERROR_INVALID_PARAMETER);
913 switch (property_id) {
914 case CAL_PROPERTY_TODO_CALENDAR_ALARM:
915 ret = cal_list_clone((calendar_list_h)rec->alarm_list, out_list);
917 case CAL_PROPERTY_TODO_CALENDAR_ATTENDEE:
918 ret = cal_list_clone((calendar_list_h)rec->attendee_list, out_list);
920 case CAL_PROPERTY_TODO_EXTENDED:
921 ret = cal_list_clone((calendar_list_h)rec->extended_list, out_list);
924 ERR("invalid parameter (property:0x%x)", property_id);
925 return CALENDAR_ERROR_INVALID_PARAMETER;