4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Ja-young Gu <jygu@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
30 #include "user_request.h"
31 #include "core_object.h"
32 #include "co_phonebook.h"
34 struct private_object_data {
35 struct tcore_phonebook_operations *ops;
37 struct tel_phonebook_support_list support_list;
38 struct tel_phonebook_field_support_list field_support_list;
39 enum tel_phonebook_type selected;
42 static TReturn _dispatcher(CoreObject *o, UserRequest *ur)
44 enum tcore_request_command command;
45 struct private_object_data *po = NULL;
47 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PHONEBOOK, TCORE_RETURN_EINVAL);
49 po = tcore_object_ref_object(o);
51 return TCORE_RETURN_ENOSYS;
53 command = tcore_user_request_get_command(ur);
55 case TREQ_PHONEBOOK_GETCOUNT:
56 if (!po->ops->get_count)
57 return TCORE_RETURN_ENOSYS;
59 return po->ops->get_count(o, ur);
62 case TREQ_PHONEBOOK_GETMETAINFO:
63 if (!po->ops->get_info)
64 return TCORE_RETURN_ENOSYS;
66 return po->ops->get_info(o, ur);
69 case TREQ_PHONEBOOK_GETUSIMINFO:
70 if (!po->ops->get_usim_info)
71 return TCORE_RETURN_ENOSYS;
73 return po->ops->get_usim_info(o, ur);
76 case TREQ_PHONEBOOK_READRECORD:
77 if (!po->ops->read_record)
78 return TCORE_RETURN_ENOSYS;
80 return po->ops->read_record(o, ur);
83 case TREQ_PHONEBOOK_UPDATERECORD:
84 if (!po->ops->update_record)
85 return TCORE_RETURN_ENOSYS;
87 return po->ops->update_record(o, ur);
90 case TREQ_PHONEBOOK_DELETERECORD:
91 if (!po->ops->delete_record)
92 return TCORE_RETURN_ENOSYS;
94 return po->ops->delete_record(o, ur);
101 return TCORE_RETURN_SUCCESS;
104 static void _clone_hook(CoreObject *src, CoreObject *dest)
106 struct private_object_data *src_po = NULL;
107 struct private_object_data *dest_po = NULL;
112 dest_po = calloc(1, sizeof(struct private_object_data));
114 tcore_object_link_object(dest, NULL);
118 src_po = tcore_object_ref_object(src);
119 dest_po->ops = src_po->ops;
121 tcore_object_link_object(dest, dest_po);
124 static void _free_hook(CoreObject *o)
126 struct private_object_data *po = NULL;
128 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_PHONEBOOK);
130 po = tcore_object_ref_object(o);
133 tcore_object_link_object(o, NULL);
137 gboolean tcore_phonebook_get_status(CoreObject *o)
139 struct private_object_data *po = NULL;
140 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PHONEBOOK, FALSE);
141 po = tcore_object_ref_object(o);
145 gboolean tcore_phonebook_set_status(CoreObject *o, gboolean b_init)
147 struct private_object_data *po = NULL;
148 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PHONEBOOK, FALSE);
149 po = tcore_object_ref_object(o);
154 struct tel_phonebook_support_list* tcore_phonebook_get_support_list(CoreObject *o)
156 struct tel_phonebook_support_list *tmp;
157 struct private_object_data *po = NULL;
158 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PHONEBOOK, NULL);
159 po = tcore_object_ref_object(o);
160 tmp = calloc(1, sizeof(struct tel_phonebook_support_list));
163 memcpy(tmp, &po->support_list, sizeof(struct tel_phonebook_support_list));
167 gboolean tcore_phonebook_set_support_list(CoreObject *o, struct tel_phonebook_support_list *list)
169 struct private_object_data *po = NULL;
170 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PHONEBOOK, FALSE);
171 po = tcore_object_ref_object(o);
172 memcpy(&po->support_list, list, sizeof(struct tel_phonebook_support_list));
176 struct tel_phonebook_field_support_list* tcore_phonebook_get_field_support_list(CoreObject *o)
178 struct tel_phonebook_field_support_list *tmp;
179 struct private_object_data *po = NULL;
180 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PHONEBOOK, NULL);
181 po = tcore_object_ref_object(o);
182 tmp = calloc(1, sizeof(struct tel_phonebook_field_support_list));
185 memcpy(tmp, &po->field_support_list, sizeof(struct tel_phonebook_field_support_list));
189 gboolean tcore_phonebook_set_field_support_list(CoreObject *o, struct tel_phonebook_field_support_list *list)
191 struct private_object_data *po = NULL;
192 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PHONEBOOK, FALSE);
193 po = tcore_object_ref_object(o);
194 memcpy(&po->field_support_list, list, sizeof(struct tel_phonebook_field_support_list));
198 enum tel_phonebook_type tcore_phonebook_get_selected_type(CoreObject *o)
200 struct private_object_data *po = NULL;
201 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PHONEBOOK, PB_TYPE_UNKNOWNN);
202 po = tcore_object_ref_object(o);
206 gboolean tcore_phonebook_set_selected_type(CoreObject *o, enum tel_phonebook_type t)
208 struct private_object_data *po = NULL;
209 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PHONEBOOK, FALSE);
210 po = tcore_object_ref_object(o);
215 CoreObject *tcore_phonebook_new(TcorePlugin *p, const char *name,
216 struct tcore_phonebook_operations *ops, TcoreHal *hal)
218 CoreObject *o = NULL;
219 struct private_object_data *po = NULL;
224 o = tcore_object_new(p, name, hal);
228 po = calloc(1, sizeof(struct private_object_data));
230 tcore_object_free(o);
235 po->selected = PB_TYPE_UNKNOWNN;
237 tcore_object_set_type(o, CORE_OBJECT_TYPE_PHONEBOOK);
238 tcore_object_link_object(o, po);
239 tcore_object_set_free_hook(o, _free_hook);
240 tcore_object_set_clone_hook(o, _clone_hook);
241 tcore_object_set_dispatcher(o, _dispatcher);
246 void tcore_phonebook_free(CoreObject *o)
248 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_PHONEBOOK);
249 tcore_object_free(o);
252 void tcore_phonebook_set_ops(CoreObject *o, struct tcore_phonebook_operations *ops)
254 struct private_object_data *po = NULL;
256 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_PHONEBOOK);
258 po = (struct private_object_data *)tcore_object_ref_object(o);