Tizen 2.1 base
[framework/pim/calendar-service.git] / common / cal_record_alarm.c
1 /*
2  * Calendar Service
3  *
4  * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
5  *
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
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  *
18  */
19 #include <stdlib.h>             //calloc
20 #include <stdbool.h>            //bool
21 #include <string.h>
22
23 #include "cal_internal.h"
24 #include "cal_typedef.h"
25 #include "cal_view.h"
26
27 #include "cal_record.h"
28
29 static int __cal_record_alarm_create( calendar_record_h* out_record );
30 static int __cal_record_alarm_destroy( calendar_record_h record, bool delete_child );
31 static int __cal_record_alarm_clone( calendar_record_h record, calendar_record_h* out_record );
32 static int __cal_record_alarm_get_str( calendar_record_h record, unsigned int property_id, char** out_str );
33 static int __cal_record_alarm_get_str_p( calendar_record_h record, unsigned int property_id, char** out_str );
34 static int __cal_record_alarm_get_int( calendar_record_h record, unsigned int property_id, int* out_value );
35 static int __cal_record_alarm_get_lli( calendar_record_h record, unsigned int property_id, long long int* out_value );
36 static int __cal_record_alarm_set_str( calendar_record_h record, unsigned int property_id, const char* value );
37 static int __cal_record_alarm_set_int( calendar_record_h record, unsigned int property_id, int value );
38 static int __cal_record_alarm_set_lli( calendar_record_h record, unsigned int property_id, long long int value );
39
40 cal_record_plugin_cb_s _cal_record_alarm_plugin_cb = {
41         .create = __cal_record_alarm_create,
42         .destroy = __cal_record_alarm_destroy,
43         .clone = __cal_record_alarm_clone,
44         .get_str = __cal_record_alarm_get_str,
45         .get_str_p = __cal_record_alarm_get_str_p,
46         .get_int = __cal_record_alarm_get_int,
47         .get_double = NULL,
48         .get_lli = __cal_record_alarm_get_lli,
49         .get_caltime = NULL,
50         .set_str = __cal_record_alarm_set_str,
51         .set_int = __cal_record_alarm_set_int,
52         .set_double = NULL,
53         .set_lli = __cal_record_alarm_set_lli,
54         .set_caltime = NULL,
55         .add_child_record = NULL,
56         .remove_child_record = NULL,
57         .get_child_record_count = NULL,
58         .get_child_record_at_p = NULL,
59         .clone_child_record_list = NULL
60 };
61
62 static void __cal_record_alarm_struct_init(cal_alarm_s *record)
63 {
64         memset(record,0,sizeof(cal_alarm_s));
65 }
66
67 static int __cal_record_alarm_create(calendar_record_h* out_record )
68 {
69         cal_alarm_s *temp = NULL;
70         int ret= CALENDAR_ERROR_NONE, type = 0;
71
72         type = CAL_RECORD_TYPE_ALARM;
73
74         temp = (cal_alarm_s*)calloc(1,sizeof(cal_alarm_s));
75         retvm_if(NULL == temp, CALENDAR_ERROR_OUT_OF_MEMORY, "malloc(cal_alarm_s:sch) Failed(%d)", CALENDAR_ERROR_OUT_OF_MEMORY);
76
77         __cal_record_alarm_struct_init(temp);
78
79         *out_record = (calendar_record_h)temp;
80
81         return ret;
82 }
83
84 static void __cal_record_alarm_struct_free(cal_alarm_s *record)
85 {
86         CAL_FREE(record->alarm_tone);
87         CAL_FREE(record->alarm_description);
88         CAL_FREE(record);
89 }
90
91 static int __cal_record_alarm_destroy( calendar_record_h record, bool delete_child )
92 {
93     int ret = CALENDAR_ERROR_NONE;
94
95     cal_alarm_s *temp = (cal_alarm_s*)(record);
96
97     __cal_record_alarm_struct_free(temp);
98
99         return ret;
100 }
101
102 static int __cal_record_alarm_clone( calendar_record_h record, calendar_record_h* out_record )
103 {
104         cal_alarm_s *out_data = NULL;
105         cal_alarm_s *src_data = NULL;
106
107         src_data = (cal_alarm_s*)(record);
108
109         out_data = calloc(1, sizeof(cal_alarm_s));
110         retvm_if(NULL == out_data, CALENDAR_ERROR_OUT_OF_MEMORY, "calloc(cal_alarm_s) Failed(%d)", CALENDAR_ERROR_OUT_OF_MEMORY);
111
112         CAL_RECORD_COPY_COMMON(&(out_data->common), &(src_data->common));
113
114         out_data->alarm_id = src_data->alarm_id;
115         out_data->event_id = src_data->event_id;
116         out_data->alarm_type = src_data->alarm_type;
117         out_data->is_deleted = src_data->is_deleted;
118         out_data->alarm_time = src_data->alarm_time;
119         out_data->remind_tick = src_data->remind_tick;
120         out_data->remind_tick_unit = src_data->remind_tick_unit;
121         out_data->alarm_tone = SAFE_STRDUP(src_data->alarm_tone);
122         out_data->alarm_description = SAFE_STRDUP(src_data->alarm_description);
123
124     *out_record = (calendar_record_h)out_data;
125
126         return CALENDAR_ERROR_NONE;
127 }
128
129 static int __cal_record_alarm_get_str( calendar_record_h record, unsigned int property_id, char** out_str )
130 {
131         cal_alarm_s *rec = (cal_alarm_s*)(record);
132         switch( property_id )
133         {
134         case CAL_PROPERTY_ALARM_TONE:
135                 *out_str = SAFE_STRDUP(rec->alarm_tone);
136                 break;
137         case CAL_PROPERTY_ALARM_DESCRIPTION:
138                 *out_str = SAFE_STRDUP(rec->alarm_description);
139                 break;
140         default:
141             ASSERT_NOT_REACHED("invalid parameter (property:%d)",property_id);
142                 return CALENDAR_ERROR_INVALID_PARAMETER;
143         }
144
145         return CALENDAR_ERROR_NONE;
146 }
147
148 static int __cal_record_alarm_get_str_p( calendar_record_h record, unsigned int property_id, char** out_str )
149 {
150         cal_alarm_s *rec = (cal_alarm_s*)(record);
151         switch( property_id )
152         {
153         case CAL_PROPERTY_ALARM_TONE:
154                 *out_str = (rec->alarm_tone);
155                 break;
156         case CAL_PROPERTY_ALARM_DESCRIPTION:
157                 *out_str = (rec->alarm_description);
158                 break;
159         default:
160             ASSERT_NOT_REACHED("invalid parameter (property:%d)",property_id);
161                 return CALENDAR_ERROR_INVALID_PARAMETER;
162         }
163
164         return CALENDAR_ERROR_NONE;
165 }
166
167 static int __cal_record_alarm_get_int( calendar_record_h record, unsigned int property_id, int* out_value )
168 {
169         cal_alarm_s *rec = (cal_alarm_s*)(record);
170         switch( property_id )
171         {
172         case CAL_PROPERTY_ALARM_TYPE:
173                 *out_value = (rec->alarm_type);
174                 break;
175         case CAL_PROPERTY_ALARM_TICK:
176                 *out_value = (rec->remind_tick);
177                 break;
178         case CAL_PROPERTY_ALARM_TICK_UNIT:
179                 *out_value = (rec->remind_tick_unit);
180                 break;
181         case CAL_PROPERTY_ALARM_ID:
182                 *out_value = (rec->alarm_id);
183                 break;
184         case CAL_PROPERTY_ALARM_EVENT_TODO_ID:
185             *out_value = (rec->event_id);
186             break;
187         default:
188             ASSERT_NOT_REACHED("invalid parameter (property:%d)",property_id);
189                 return CALENDAR_ERROR_INVALID_PARAMETER;
190         }
191
192         return CALENDAR_ERROR_NONE;
193 }
194
195 static int __cal_record_alarm_get_lli( calendar_record_h record, unsigned int property_id, long long int* out_value )
196 {
197         cal_alarm_s *rec = (cal_alarm_s*)(record);
198         switch( property_id )
199         {
200         case CAL_PROPERTY_ALARM_TIME:
201                 *out_value = (rec->alarm_time);
202                 break;
203         default:
204             ASSERT_NOT_REACHED("invalid parameter (property:%d)",property_id);
205                 return CALENDAR_ERROR_INVALID_PARAMETER;
206         }
207
208         return CALENDAR_ERROR_NONE;
209 }
210
211 static int __cal_record_alarm_set_str( calendar_record_h record, unsigned int property_id, const char* value )
212 {
213         cal_alarm_s *rec = (cal_alarm_s*)(record);
214         switch( property_id )
215         {
216         case CAL_PROPERTY_ALARM_TONE:
217                 CAL_FREE(rec->alarm_tone);
218                 rec->alarm_tone = SAFE_STRDUP(value);
219                 break;
220         case CAL_PROPERTY_ALARM_DESCRIPTION:
221                 CAL_FREE(rec->alarm_description);
222                 rec->alarm_description = SAFE_STRDUP(value);
223                 break;
224         default:
225             ASSERT_NOT_REACHED("invalid parameter (property:%d)",property_id);
226                 return CALENDAR_ERROR_INVALID_PARAMETER;
227         }
228
229         return CALENDAR_ERROR_NONE;
230 }
231
232 static int __cal_record_alarm_set_int( calendar_record_h record, unsigned int property_id, int value )
233 {
234         cal_alarm_s *rec = (cal_alarm_s*)(record);
235         switch( property_id )
236         {
237         case CAL_PROPERTY_ALARM_TYPE:
238                 (rec->alarm_type)=value;
239                 break;
240         case CAL_PROPERTY_ALARM_TICK:
241                 (rec->remind_tick)=value;
242                 break;
243         case CAL_PROPERTY_ALARM_TICK_UNIT:
244                 (rec->remind_tick_unit)=value;
245                 break;
246         case CAL_PROPERTY_ALARM_ID:
247                 (rec->alarm_id) = value;
248                 break;
249     case CAL_PROPERTY_ALARM_EVENT_TODO_ID:
250         (rec->event_id) = value;
251         break;
252         default:
253             ASSERT_NOT_REACHED("invalid parameter (property:%d)",property_id);
254                 return CALENDAR_ERROR_INVALID_PARAMETER;
255         }
256
257         return CALENDAR_ERROR_NONE;
258 }
259
260 static int __cal_record_alarm_set_lli( calendar_record_h record, unsigned int property_id, long long int value )
261 {
262         cal_alarm_s *rec = (cal_alarm_s*)(record);
263         switch( property_id )
264         {
265         case CAL_PROPERTY_ALARM_TIME:
266                 (rec->alarm_time) = value;
267                 break;
268         default:
269             ASSERT_NOT_REACHED("invalid parameter (property:%d)",property_id);
270                 return CALENDAR_ERROR_INVALID_PARAMETER;
271         }
272
273         return CALENDAR_ERROR_NONE;
274 }