4 * Copyright (c) 2012 - 2013 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.
19 #include <stdlib.h> //calloc
20 #include <stdbool.h> //bool
23 #include "cal_internal.h"
24 #include "cal_typedef.h"
27 #include "cal_record.h"
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 );
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,
48 .get_lli = __cal_record_alarm_get_lli,
50 .set_str = __cal_record_alarm_set_str,
51 .set_int = __cal_record_alarm_set_int,
53 .set_lli = __cal_record_alarm_set_lli,
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
62 static void __cal_record_alarm_struct_init(cal_alarm_s *record)
64 memset(record,0,sizeof(cal_alarm_s));
67 static int __cal_record_alarm_create(calendar_record_h* out_record )
69 cal_alarm_s *temp = NULL;
70 int ret= CALENDAR_ERROR_NONE, type = 0;
72 type = CAL_RECORD_TYPE_ALARM;
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);
77 __cal_record_alarm_struct_init(temp);
79 *out_record = (calendar_record_h)temp;
84 static void __cal_record_alarm_struct_free(cal_alarm_s *record)
86 CAL_FREE(record->alarm_tone);
87 CAL_FREE(record->alarm_description);
91 static int __cal_record_alarm_destroy( calendar_record_h record, bool delete_child )
93 int ret = CALENDAR_ERROR_NONE;
95 cal_alarm_s *temp = (cal_alarm_s*)(record);
97 __cal_record_alarm_struct_free(temp);
102 static int __cal_record_alarm_clone( calendar_record_h record, calendar_record_h* out_record )
104 cal_alarm_s *out_data = NULL;
105 cal_alarm_s *src_data = NULL;
107 src_data = (cal_alarm_s*)(record);
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);
112 CAL_RECORD_COPY_COMMON(&(out_data->common), &(src_data->common));
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);
124 *out_record = (calendar_record_h)out_data;
126 return CALENDAR_ERROR_NONE;
129 static int __cal_record_alarm_get_str( calendar_record_h record, unsigned int property_id, char** out_str )
131 cal_alarm_s *rec = (cal_alarm_s*)(record);
132 switch( property_id )
134 case CAL_PROPERTY_ALARM_TONE:
135 *out_str = SAFE_STRDUP(rec->alarm_tone);
137 case CAL_PROPERTY_ALARM_DESCRIPTION:
138 *out_str = SAFE_STRDUP(rec->alarm_description);
141 ASSERT_NOT_REACHED("invalid parameter (property:%d)",property_id);
142 return CALENDAR_ERROR_INVALID_PARAMETER;
145 return CALENDAR_ERROR_NONE;
148 static int __cal_record_alarm_get_str_p( calendar_record_h record, unsigned int property_id, char** out_str )
150 cal_alarm_s *rec = (cal_alarm_s*)(record);
151 switch( property_id )
153 case CAL_PROPERTY_ALARM_TONE:
154 *out_str = (rec->alarm_tone);
156 case CAL_PROPERTY_ALARM_DESCRIPTION:
157 *out_str = (rec->alarm_description);
160 ASSERT_NOT_REACHED("invalid parameter (property:%d)",property_id);
161 return CALENDAR_ERROR_INVALID_PARAMETER;
164 return CALENDAR_ERROR_NONE;
167 static int __cal_record_alarm_get_int( calendar_record_h record, unsigned int property_id, int* out_value )
169 cal_alarm_s *rec = (cal_alarm_s*)(record);
170 switch( property_id )
172 case CAL_PROPERTY_ALARM_TYPE:
173 *out_value = (rec->alarm_type);
175 case CAL_PROPERTY_ALARM_TICK:
176 *out_value = (rec->remind_tick);
178 case CAL_PROPERTY_ALARM_TICK_UNIT:
179 *out_value = (rec->remind_tick_unit);
181 case CAL_PROPERTY_ALARM_ID:
182 *out_value = (rec->alarm_id);
184 case CAL_PROPERTY_ALARM_EVENT_TODO_ID:
185 *out_value = (rec->event_id);
188 ASSERT_NOT_REACHED("invalid parameter (property:%d)",property_id);
189 return CALENDAR_ERROR_INVALID_PARAMETER;
192 return CALENDAR_ERROR_NONE;
195 static int __cal_record_alarm_get_lli( calendar_record_h record, unsigned int property_id, long long int* out_value )
197 cal_alarm_s *rec = (cal_alarm_s*)(record);
198 switch( property_id )
200 case CAL_PROPERTY_ALARM_TIME:
201 *out_value = (rec->alarm_time);
204 ASSERT_NOT_REACHED("invalid parameter (property:%d)",property_id);
205 return CALENDAR_ERROR_INVALID_PARAMETER;
208 return CALENDAR_ERROR_NONE;
211 static int __cal_record_alarm_set_str( calendar_record_h record, unsigned int property_id, const char* value )
213 cal_alarm_s *rec = (cal_alarm_s*)(record);
214 switch( property_id )
216 case CAL_PROPERTY_ALARM_TONE:
217 CAL_FREE(rec->alarm_tone);
218 rec->alarm_tone = SAFE_STRDUP(value);
220 case CAL_PROPERTY_ALARM_DESCRIPTION:
221 CAL_FREE(rec->alarm_description);
222 rec->alarm_description = SAFE_STRDUP(value);
225 ASSERT_NOT_REACHED("invalid parameter (property:%d)",property_id);
226 return CALENDAR_ERROR_INVALID_PARAMETER;
229 return CALENDAR_ERROR_NONE;
232 static int __cal_record_alarm_set_int( calendar_record_h record, unsigned int property_id, int value )
234 cal_alarm_s *rec = (cal_alarm_s*)(record);
235 switch( property_id )
237 case CAL_PROPERTY_ALARM_TYPE:
238 (rec->alarm_type)=value;
240 case CAL_PROPERTY_ALARM_TICK:
241 (rec->remind_tick)=value;
243 case CAL_PROPERTY_ALARM_TICK_UNIT:
244 (rec->remind_tick_unit)=value;
246 case CAL_PROPERTY_ALARM_ID:
247 (rec->alarm_id) = value;
249 case CAL_PROPERTY_ALARM_EVENT_TODO_ID:
250 (rec->event_id) = value;
253 ASSERT_NOT_REACHED("invalid parameter (property:%d)",property_id);
254 return CALENDAR_ERROR_INVALID_PARAMETER;
257 return CALENDAR_ERROR_NONE;
260 static int __cal_record_alarm_set_lli( calendar_record_h record, unsigned int property_id, long long int value )
262 cal_alarm_s *rec = (cal_alarm_s*)(record);
263 switch( property_id )
265 case CAL_PROPERTY_ALARM_TIME:
266 (rec->alarm_time) = value;
269 ASSERT_NOT_REACHED("invalid parameter (property:%d)",property_id);
270 return CALENDAR_ERROR_INVALID_PARAMETER;
273 return CALENDAR_ERROR_NONE;