2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <ui-gadget-module.h>
21 #include "ct-detail.h"
23 #include "ct-list-contact-view.h"
24 #include "ct-list-utils.h"
26 int ct_list_parse_bundle(service_h service, ct_list_data* clist_d)
31 service_get_extra_data(service, CT_UG_BUNDLE_TYPE, &val);
32 if (val) clist_d->ug_request = atoi(val);
33 PH_DBG("type = %d", clist_d->ug_request);
36 switch (clist_d->ug_request) {
37 case CT_UG_REQUEST_SELECT_GROUP:
38 case CT_UG_REQUEST_SELECT_GROUP_ADD_TO_HOME:
40 case CT_UG_REQUEST_LIST:
41 case CT_UG_REQUEST_LIST_WITH_BACK:
42 case CT_UG_REQUEST_SELECT_PERSON:
43 case CT_UG_REQUEST_SHARE_CONTACT_INFO:
44 case CT_UG_REQUEST_SELECT_VCARD:
46 service_get_extra_data(service, CT_UG_BUNDLE_ACCOUNTID, &val);
48 clist_d->list_op = CT_GET_LIST_PERSON_OF_ADDRBOOK_ID;
49 clist_d->base_ab = atoi(val);
54 case CT_UG_REQUEST_SELECT_NUMBER:
55 case CT_UG_REQUEST_SELECT_CONTACT_ADD_TO_HOME:
57 service_get_extra_data(service, CT_UG_BUNDLE_ACCOUNTID, &val);
59 clist_d->list_op = CT_GET_LIST_PERSON_HAD_NUMBER_OF_ADDRBOOK_ID;
60 clist_d->base_ab = atoi(val);
64 clist_d->list_op = CT_GET_LIST_ALL_PERSON_HAD_NUMBER;
67 case CT_UG_REQUEST_SELECT_EMAIL:
69 service_get_extra_data(service, CT_UG_BUNDLE_ACCOUNTID, &val);
71 clist_d->list_op = CT_GET_LIST_PERSON_HAD_EMAIL_OF_ADDRBOOK_ID;
72 clist_d->base_ab = atoi(val);
76 clist_d->list_op = CT_GET_LIST_ALL_PERSON_HAD_EMAIL;
79 case CT_UG_REQUEST_SELECT_NUMBER_OR_EMAIL:
81 service_get_extra_data(service, CT_UG_BUNDLE_ACCOUNTID, &val);
83 clist_d->list_op = CT_GET_LIST_PERSON_HAD_NUMBER_OR_EMAIL_OF_ADDRBOOK_ID;
84 clist_d->base_ab = atoi(val);
88 clist_d->list_op = CT_GET_LIST_ALL_PERSON_HAD_NUMBER_OR_EMAIL;
91 case CT_UG_REQUEST_UPDATE_CONTACT:
93 service_get_extra_data(service, CT_UG_BUNDLE_ACCOUNTID, &val);
95 clist_d->list_op = CT_GET_LIST_PERSON_OF_ADDRBOOK_ID;
96 clist_d->base_ab = atoi(val);
99 service_get_extra_data(service, CT_UG_BUNDLE_NUM, &clist_d->ug_data);
102 service_get_extra_data(service, CT_UG_BUNDLE_EMAIL, &clist_d->ug_data);
105 service_get_extra_data(service, CT_UG_BUNDLE_WEB, &clist_d->ug_data);
109 case CT_UG_REQUEST_UPDATE_WITH_NUM:
110 service_get_extra_data(service, CT_UG_BUNDLE_NUM, &clist_d->ug_data);
112 service_get_extra_data(service, CT_UG_BUNDLE_ACCOUNTID, &val);
114 clist_d->base_ab = atoi(val);
117 clist_d->list_op = CT_GET_LIST_PERSON_OF_WRITABLE_ADDRBOOK_ID;
119 case CT_UG_REQUEST_UPDATE_WITH_EMAIL:
120 service_get_extra_data(service, CT_UG_BUNDLE_EMAIL, &clist_d->ug_data);
122 service_get_extra_data(service, CT_UG_BUNDLE_ACCOUNTID, &val);
124 clist_d->base_ab = atoi(val);
127 clist_d->list_op = CT_GET_LIST_PERSON_OF_WRITABLE_ADDRBOOK_ID;
129 case CT_UG_REQUEST_UPDATE_WITH_WEB:
130 service_get_extra_data(service, CT_UG_BUNDLE_WEB, &clist_d->ug_data);
132 service_get_extra_data(service, CT_UG_BUNDLE_ACCOUNTID, &val);
134 clist_d->base_ab = atoi(val);
137 clist_d->list_op = CT_GET_LIST_PERSON_OF_WRITABLE_ADDRBOOK_ID;
139 case CT_UG_REQUEST_CHECK:
141 service_get_extra_data(service, CT_UG_BUNDLE_ACCOUNTID, &val);
143 clist_d->list_op = CT_GET_LIST_PERSON_OF_ADDRBOOK_ID;
144 clist_d->base_ab = atoi(val);
148 service_get_extra_data(service, CT_UG_BUNDLE_MAX, &val);
150 clist_d->cnt_max_check = atoi(val);
155 case CT_UG_REQUEST_CHECK_FOR_NUMBER:
157 service_get_extra_data(service, CT_UG_BUNDLE_ACCOUNTID, &val);
159 clist_d->list_op = CT_GET_LIST_PERSON_HAD_NUMBER_OF_ADDRBOOK_ID;
160 clist_d->base_ab = atoi(val);
164 clist_d->list_op = CT_GET_LIST_ALL_PERSON_HAD_NUMBER;
165 service_get_extra_data(service, CT_UG_BUNDLE_MAX, &val);
167 clist_d->cnt_max_check = atoi(val);
171 case CT_UG_REQUEST_CHECK_FOR_EMAIL:
173 service_get_extra_data(service, CT_UG_BUNDLE_ACCOUNTID, &val);
175 clist_d->list_op = CT_GET_LIST_PERSON_HAD_EMAIL_OF_ADDRBOOK_ID;
176 clist_d->base_ab = atoi(val);
180 clist_d->list_op = CT_GET_LIST_ALL_PERSON_HAD_EMAIL;
181 service_get_extra_data(service, CT_UG_BUNDLE_MAX, &val);
183 clist_d->cnt_max_check = atoi(val);
187 case CT_UG_REQUEST_CHECK_FOR_NUMBER_OR_EMAIL:
189 service_get_extra_data(service, CT_UG_BUNDLE_ACCOUNTID, &val);
191 clist_d->list_op = CT_GET_LIST_PERSON_HAD_NUMBER_OR_EMAIL_OF_ADDRBOOK_ID;
192 clist_d->base_ab = atoi(val);
196 clist_d->list_op = CT_GET_LIST_ALL_PERSON_HAD_NUMBER_OR_EMAIL;
197 service_get_extra_data(service, CT_UG_BUNDLE_MAX, &val);
199 clist_d->cnt_max_check = atoi(val);
204 case PH_UG_REQUEST_SET_WITH_IMG:
205 case PH_UG_REQUEST_SET_WITH_RINGTONE:
206 case CT_UG_REQUEST_SAVE_IMG:
207 case CT_UG_REQUEST_SAVE_RINGTONE:
208 service_get_extra_data(service, CT_UG_BUNDLE_PATH, &clist_d->ug_data);
209 if(CT_UG_REQUEST_SAVE_IMG == clist_d->ug_request)
210 clist_d->list_op = CT_GET_LIST_PERSON_OF_WRITABLE_ADDRBOOK_ID;
211 if (-1 == access(clist_d->ug_data, R_OK)) {
212 ERR("Invalid filepath(%s)", clist_d->ug_data);
217 ERR("Invalid request(%d)", clist_d->ug_request);
224 static void list_img_crop_result_for_add(ui_gadget_h ug,service_h service, void *data)
226 contacts_record_h record_image = NULL;
227 contacts_error_e err = CONTACTS_ERROR_NONE;
228 ct_detail_data *cdetail_d = data;
230 p_retm_if(NULL == ug || NULL == data, "ug or data is NULL");
236 service_get_extra_data(service, "crop_image_path", &normal);
237 p_retm_if(!normal, "return value is NULL.\n");
239 service_get_extra_data(service, "image_path", &full);
240 record_image = ctui_get_record_image(cdetail_d->contact);
242 err = contacts_record_set_str(record_image, _contacts_image.path, normal);
243 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_str() Failed(%d)", err);
248 cdetail_d->only_input = true;
249 ctui_create_input_view(cdetail_d);
252 static void list_destory_detail_child_ug(ui_gadget_h ug, void *priv)
254 ct_detail_data *cdetail_d = priv;
255 p_retm_if(NULL == ug, "ug is NULL");
258 p_retm_if(NULL == priv, "priv is NULL");
259 cdetail_d->child_ug = NULL;
262 void ct_list_destroy_child_ug(void *data)
264 ct_list_data *clist_d = (ct_list_data*)data;
265 clist_d->child_ug = NULL;
268 API void ctui_list_update_with_data(ph_view_info *view_info, void *data, int person_id, int grp_id, int ab_id)
271 ct_detail_data *cdetail_d;
272 contacts_error_e err = CONTACTS_ERROR_NONE;
273 contacts_record_h record = NULL;
274 struct ug_cbs cbs = {0};
276 cdetail_d = calloc(1, sizeof(ct_detail_data));
277 p_retm_if(!cdetail_d, "cdetail_d is NULL, Not enough memory");
279 cdetail_d->win = view_info->win;
280 cdetail_d->navi = view_info->navi;
281 cdetail_d->ug = view_info->ug;
282 cdetail_d->prev_navi_item = elm_naviframe_top_item_get(view_info->navi);
283 cdetail_d->prev_view_data = data;
284 cdetail_d->person_id = person_id;
285 cdetail_d->base_grp = grp_id;
286 cdetail_d->base_ab = ab_id;
287 cdetail_d->ug_request = view_info->ug_request;
290 Eina_List *list_contact;
291 err = contacts_db_get_record(_contacts_person._uri, person_id, &(cdetail_d->person));
292 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_db_get_record() Failed(%d)", err);
294 list_contact = ctui_person_get_writable_contact_list(person_id);
295 if (NULL == list_contact) {
296 err = contacts_record_create(_contacts_contact._uri, &(cdetail_d->contact));
297 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_create() Failed(%d)", err);
300 err = contacts_record_clone((contacts_record_h)list_contact->data, &(cdetail_d->contact));
301 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_clone() Failed(%d)", err);
302 ctui_free_record_list(list_contact);
306 if (NULL == cdetail_d->contact) {
307 err = contacts_record_create(_contacts_contact._uri, &(cdetail_d->contact));
308 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_create() Failed(%d)", err);
311 switch (view_info->ug_request) {
312 //case PH_UG_REQUEST_SET_WITH_NUM:
313 case CT_UG_REQUEST_UPDATE_WITH_NUM:
314 err = contacts_record_create(_contacts_number._uri, &record);
315 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_create() Failed(%d)", err);
317 err = contacts_record_set_str(record, _contacts_number.number, view_info->ug_data);
318 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_str() Failed(%d)", err);
320 err = contacts_record_set_int(record, _contacts_number.type, CONTACTS_NUMBER_TYPE_CELL);
321 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_int() Failed(%d)", err);
323 err = contacts_record_add_child_record(cdetail_d->contact, _contacts_contact.number, record);
324 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_add_child_record() Failed(%d)", err);
326 //case PH_UG_REQUEST_SET_WITH_EMAIL:
327 case CT_UG_REQUEST_UPDATE_WITH_EMAIL:
328 err = contacts_record_create(_contacts_email._uri, &record);
329 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_create() Failed(%d)", err);
331 err = contacts_record_set_str(record, _contacts_email.email, view_info->ug_data);
332 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_str() Failed(%d)", err);
334 err = contacts_record_add_child_record(cdetail_d->contact, _contacts_contact.email, record);
335 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_add_child_record() Failed(%d)", err);
337 //case PH_UG_REQUEST_SET_WITH_WEB:
338 case CT_UG_REQUEST_UPDATE_WITH_WEB:
339 err = contacts_record_create(_contacts_url._uri, &record);
340 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_create() Failed(%d)", err);
342 err = contacts_record_set_str(record, _contacts_url.url, view_info->ug_data);
343 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_str() Failed(%d)", err);
345 err = contacts_record_add_child_record(cdetail_d->contact, _contacts_contact.url, record);
346 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_add_child_record() Failed(%d)", err);
348 case CT_UG_REQUEST_UPDATE_CONTACT:
350 case PH_UG_REQUEST_SET_WITH_IMG:
351 case CT_UG_REQUEST_SAVE_IMG: //only handle for add
352 cbs.result_cb = list_img_crop_result_for_add;
353 cbs.destroy_cb = list_destory_detail_child_ug;
354 cbs.priv = cdetail_d;
355 cdetail_d->child_ug = phone_image_crop_ug(cdetail_d->ug, view_info->ug_data, &cbs);
357 case PH_UG_REQUEST_SET_WITH_RINGTONE:
358 case CT_UG_REQUEST_SAVE_RINGTONE: //only handle for add
359 err = contacts_record_set_str(cdetail_d->contact, _contacts_contact.ringtone_path, view_info->ug_data);
360 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_str() Failed(%d)", err);
363 ERR("Invalid type(%d)", view_info->ug_request);
366 cdetail_d->only_input = true;
367 ctui_create_input_view(cdetail_d);
371 void ct_list_call(void *data, Evas_Object *obj, void *event_info)
373 ct_list_data *clist_d;
374 ct_person_list *person_info = data;
375 p_retm_if(NULL == person_info, "parameter(person_info) is NULL");
376 p_retm_if(NULL == person_info->number || '\0' == *person_info->number, "number is NULL");
377 phone_launch_voice_call(person_info->id, person_info->number);
379 clist_d = (ct_list_data *)evas_object_data_get(obj, "clist_d");
381 ctui_list_set_unsweep(clist_d);
384 void ct_list_msg(void *data, Evas_Object *obj, void *event_info)
386 ct_list_data *clist_d;
387 ct_person_list *person_info = data;
389 p_retm_if(NULL == data, "parameter(person_info) is NULL");
390 p_retm_if(NULL == person_info->number || '\0' == *person_info->number, "number is NULL");
392 clist_d = (ct_list_data *)evas_object_data_get(obj, "clist_d");
393 p_retm_if(NULL == clist_d, "evas_object_data_get() return NULL");
395 clist_d->child_ug = ctui_msg_ug(clist_d->ug, person_info->number, person_info->id, NULL,
396 ct_list_destroy_child_ug, clist_d);
398 ctui_list_set_unsweep(clist_d);
401 void ct_list_popup_hide_cb(void *data, Evas_Object *obj, void *event_info)
403 ct_list_data *clist_d;
405 clist_d = evas_object_data_get(data, "clist_d");
406 p_retm_if(NULL == clist_d, "evas_object_data_get(clist_d) return NULL");
407 evas_object_del(clist_d->popup);
408 clist_d->popup = NULL;
411 static void list_sweep_delete_contact(void *data, Evas_Object *obj, void *event_info)
413 contacts_error_e err = CONTACTS_ERROR_NONE;
414 ct_list_data *clist_d;
415 contacts_record_h record = NULL;
418 PH_DBG("##### [TSP_TEST] list->sweep delete start#####");
420 clist_d = evas_object_data_get(obj, "clist_d");
421 p_retm_if(NULL == clist_d, "evas_object_data_get() return NULL");
422 evas_object_del(clist_d->popup);
423 clist_d->popup = NULL;
425 evas_object_data_set(clist_d->navi, "ct_list_update_ui", (void *)1);
427 err = contacts_db_get_record(_contacts_person._uri,(int)data,&record);
428 p_retm_if(err != CONTACTS_ERROR_NONE, "contacts_db_get_record() fail");
429 err = contacts_record_get_int(record,_contacts_person.display_contact_id,&contact_id);
430 p_retm_if(err != CONTACTS_ERROR_NONE, "contacts_record_get_int() fail");
431 err = contacts_db_delete_record(_contacts_person._uri, (int)data);
432 if (CONTACTS_ERROR_NONE == err)
433 phone_show_tickernoti(S_(PH_SYS_POP_DELETED));
435 phone_show_tickernoti(S_(PH_SYS_POP_FAILED));
439 void ct_list_sweep_del_cb(void *data, Evas_Object *obj, void *event_info)
442 ct_list_data *clist_d;
445 clist_d = evas_object_data_get(obj, "clist_d");
446 p_retm_if(NULL == clist_d, "evas_object_data_get() return NULL");
449 btn = phone_create_confirm_popup(&clist_d->popup, clist_d->win, S_(PH_SYS_POP_DELETE_Q), list_sweep_delete_contact, (void *)id);
450 evas_object_data_set(btn,"clist_d", clist_d);
452 ctui_list_set_unsweep(clist_d);
455 void ct_list_get_title(ct_list_data *clist_d, int list_op, int id_ab, int id_grp)
458 contacts_error_e err = CONTACTS_ERROR_NONE;
459 contacts_record_h record = NULL;
460 char* group_system_id = NULL;
464 case CT_GET_LIST_ALL_PERSON:
465 case CT_GET_LIST_PERSON_OF_WRITABLE_ADDRBOOK_ID:
466 case CT_GET_LIST_ALL_PERSON_HAD_EMAIL:
467 case CT_GET_LIST_ALL_PERSON_HAD_NUMBER:
469 char buf[PH_TEXT_SHORT_LEN];
470 snprintf(buf, sizeof(buf), "%s (%d)", T_(CT_GET_TEXT_BASIC, CTTEXT_ALL_CONTACTS), clist_d->cnt_list_total);
471 clist_d->title = strdup(buf);
474 case CT_GET_LIST_PERSON_OF_ADDRBOOK_ID:
475 case CT_GET_LIST_PERSON_HAD_NUMBER_OF_ADDRBOOK_ID:
476 case CT_GET_LIST_PERSON_HAD_EMAIL_OF_ADDRBOOK_ID:
478 char temp[PH_TEXT_MAX_LEN];
480 ctui_get_addressbook_name(id_ab, temp, sizeof(temp));
482 title = strdup(temp);
485 title = strdup(T_(CT_GET_TEXT_BASIC, CTTEXT_PHONE));
486 clist_d->sub_title = title;
487 clist_d->title = strdup(T_(CT_GET_TEXT_BASIC, CTTEXT_ALL_CONTACTS));
489 case CT_GET_LIST_PERSON_OF_GROUP_ID:
490 case CT_GET_LIST_PERSON_HAD_NUMBER_OF_GROUP_ID:
491 case CT_GET_LIST_PERSON_HAD_EMAIL_OF_GROUP_ID:
492 err = contacts_db_get_record(_contacts_group._uri, id_grp, &record);
493 p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_db_record_get() Failed(%d)", err);
495 err = contacts_record_get_str_p(record, _contacts_group.extra_data, &group_system_id);
496 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str_p() Failed(%d)", err);
497 if (group_system_id != NULL) {
498 if (strcmp(group_system_id,"friends")==0)
499 clist_d->title = SAFE_STRDUP(T_(CT_GET_TEXT_BASIC, CTTEXT_FRIENDS));
500 else if (strcmp(group_system_id,"family")==0)
501 clist_d->title = SAFE_STRDUP(T_(CT_GET_TEXT_BASIC, CTTEXT_FAMILY));
502 else if (strcmp(group_system_id,"coworkers")==0)
503 clist_d->title = SAFE_STRDUP(T_(CT_GET_TEXT_BASIC, CTTEXT_CO_WORKERS));
505 clist_d->title = SAFE_STRDUP(T_(CT_GET_TEXT_ERR, CTTEXT_NONAME));
507 err = contacts_record_get_str(record, _contacts_group.name, &(clist_d->title));
508 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str() Failed(%d)", err);
510 err = contacts_record_destroy(record, true);
511 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err);
514 char temp[PH_TEXT_MAX_LEN];
516 ctui_get_addressbook_name(id_ab, temp, sizeof(temp));
518 title = strdup(temp);
521 title = strdup(T_(CT_GET_TEXT_BASIC, CTTEXT_PHONE));
522 clist_d->sub_title = title;
524 case CT_GET_LIST_PERSON_NOT_ASSIGNED_OF_ADDRBOOK_ID:
525 case CT_GET_LIST_PERSON_NOT_ASSIGNED_HAD_NUMBER_OF_ADDRBOOK_ID:
526 case CT_GET_LIST_PERSON_NOT_ASSIGNED_HAD_EMAIL_OF_ADDRBOOK_ID:
527 clist_d->title = strdup(T_(CT_GET_TEXT_BASIC, CTTEXT_NOT_ASSIGNED));
529 char temp[PH_TEXT_MAX_LEN];
531 ctui_get_addressbook_name(id_ab, temp, sizeof(temp));
533 title = strdup(temp);
536 title = strdup(T_(CT_GET_TEXT_BASIC, CTTEXT_PHONE));
537 clist_d->sub_title = title;
543 static void __list_add_contacts_to_favorite(ct_list_data *clist_d);
545 static void __list_add_contacts_to_favorite_cb(int err, void *data)
547 ct_list_data *clist_d = data;
548 ph_progress_info *p_info = NULL;
550 p_retm_if(NULL == clist_d, "Invalid parameter(clist_d is NULL)");
551 p_info = clist_d->p_info;
552 p_retm_if(NULL == p_info, "Invalid parameter(p_info is NULL)");
554 if (p_info->update_list) {
555 contacts_list_destroy(p_info->update_list, true);
556 p_info->update_list = NULL;
559 if (CONTACTS_ERROR_NONE != err || p_info->alive == false) {
561 evas_object_del(p_info->popup);
562 p_info->popup = NULL;
564 phone_show_tickernoti(S_(PH_SYS_POP_FAILED));
566 clist_d->p_info = NULL;
567 clist_d->updating = false;
568 elm_naviframe_item_pop_to(evas_object_data_get(clist_d->navi, "navi_it_pop"));
571 else if (p_info->cnt == p_info->cnt_checked_total) {
573 evas_object_del(p_info->popup);
574 p_info->popup = NULL;
576 phone_show_tickernoti(S_(CT_SYS_POP_SUCCESS));
578 clist_d->p_info = NULL;
579 elm_naviframe_item_pop_to(evas_object_data_get(clist_d->navi, "navi_it_pop"));
583 __list_add_contacts_to_favorite(clist_d);
588 static void __list_add_contacts_to_favorite(ct_list_data *clist_d)
591 const int LIST_BULK_LENGTH = 50;
595 char percent_total[PH_TEXT_MAX_LEN+1] = {0, };
596 char percent[PH_TEXT_MAX_LEN+1] = {0, };
597 ph_progress_info *p_info = NULL;
598 contacts_record_h record = NULL;
599 contacts_list_h list = NULL;
600 contacts_error_e err = CONTACTS_ERROR_NONE;
602 ct_person_list *person_info;
604 p_retm_if(NULL == clist_d, "parameter(clist_d) is NULL");
605 p_info = clist_d->p_info;
606 p_retm_if(NULL == p_info, "parameter(p_info) is NULL");
608 err = contacts_list_create(&list);
609 p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_list_create() Failed(%d)", err);
611 EINA_LIST_FOREACH(clist_d->list, l, person_info) {
612 if (NULL == person_info) continue;
613 if (person_info->checked) {
614 if (base_count < p_info->cnt) {
619 err = contacts_db_get_record(_contacts_person._uri, person_info->id, &record);
620 if (CONTACTS_ERROR_NONE != err) {
621 ERR("contacts_db_get_record() Failed(%d)", err);
622 p_info->result = FALSE;
623 p_info->completed = true;
626 err = contacts_record_set_bool(record, _contacts_person.is_favorite, true);
627 if (CONTACTS_ERROR_NONE != err) {
628 ERR("contacts_record_set_bool() Failed(%d)", err);
629 p_info->result = FALSE;
630 p_info->completed = true;
634 err = contacts_list_add(list, record);
637 if (LIST_BULK_LENGTH == count || (count + p_info->cnt) == p_info->cnt_checked_total) {
638 p_info->cnt += count;
643 value = (double)p_info->cnt / (double)p_info->cnt_checked_total;
644 elm_progressbar_value_set(p_info->progressbar, value);
645 snprintf(percent, sizeof(percent), "%d%%", (int)(100.0 * (double)p_info->cnt/(double)p_info->cnt_checked_total));
646 snprintf(percent_total, sizeof(percent_total), "%d/%d", p_info->cnt, p_info->cnt_checked_total);
647 edje_object_part_text_set(elm_layout_edje_get(p_info->layout), "elm.text.subtext1", percent);
648 edje_object_part_text_set(elm_layout_edje_get(p_info->layout), "elm.text.subtext2", percent_total);
650 p_info->update_list = list;
651 contacts_db_update_records_async(list, __list_add_contacts_to_favorite_cb, clist_d);
655 void ct_list_add_contacts_to_favorite(Evas_Object *win, Evas_Object *navi, int cnt)
657 ct_list_data *clist_d;
658 ph_progress_info *p_info;
660 clist_d = evas_object_data_get(navi, "favor_list_d");
661 p_retm_if(NULL == clist_d, "evas_object_data_get return NULL");
663 p_retm_if(clist_d->p_info, "thread is running");
665 p_info = calloc(1, sizeof(ph_progress_info));
666 p_retm_if(NULL == p_info, "calloc return NULL");
668 clist_d->p_info = p_info;
669 p_info->cnt_checked_total = cnt;
670 p_info->alive = true;
671 p_info->result = TRUE;
672 p_info->popup = phone_progressbar_popup(win, p_info, T_(CT_GET_TEXT_BASIC, CTTEXT_ADDING_ING));
673 __list_add_contacts_to_favorite(clist_d);
676 static void __list_add_group_relation(int group_id, int person_id, contacts_list_h list_result)
678 contacts_record_h record_group = NULL;
679 contacts_list_h list = NULL;
680 contacts_filter_h filter = NULL;
681 contacts_query_h query = NULL;
682 contacts_error_e err = CONTACTS_ERROR_NONE;
684 p_retm_if(group_id <= 0, "Invalid parameter(group_id is %d)", group_id);
685 p_retm_if(person_id <= 0, "Invalid parameter(person_id is %d)", person_id);
686 p_retm_if(NULL == list_result, "Invalid parameter(list is NULL)");
689 int address_book_id = 0;
690 if (CONTACTS_ERROR_NONE != (err = contacts_db_get_record(_contacts_group._uri, group_id, &record_group))) break;
691 if (CONTACTS_ERROR_NONE != (err = contacts_record_get_int(record_group, _contacts_group.address_book_id, &address_book_id))) break;
693 if (CONTACTS_ERROR_NONE != (err = contacts_query_create(_contacts_contact._uri, &query))) break;
694 if (CONTACTS_ERROR_NONE != (err = contacts_filter_create(_contacts_contact._uri, &filter))) break;
695 if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_contact.address_book_id, CONTACTS_MATCH_EQUAL, address_book_id))) break;
696 if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND))) break;
697 if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_contact.person_id, CONTACTS_MATCH_EQUAL, person_id))) break;
698 if (CONTACTS_ERROR_NONE != (err = contacts_query_set_filter(query, filter))) break;
699 if (CONTACTS_ERROR_NONE != (err = contacts_db_get_records_with_query(query, 0, 0, &list))) break;
701 while (CONTACTS_ERROR_NONE == err) {
702 contacts_record_h record = NULL;
703 contacts_record_h record_clone = NULL;
704 contacts_record_h record_group_relation = NULL;
705 if (CONTACTS_ERROR_NONE != (err = contacts_list_get_current_record_p(list, &record))) break;
706 if (CONTACTS_ERROR_NONE != (err = contacts_record_clone(record, &record_clone))) {
707 ERR("contacts_record_clone() Failed(%d)", err);
710 if (CONTACTS_ERROR_NONE != (err = contacts_record_create(_contacts_group_relation._uri, &record_group_relation))) {
711 ERR("contacts_record_create() Failed(%d)", err);
714 contacts_record_set_int(record_group_relation, _contacts_group_relation.group_id, group_id);
715 contacts_record_add_child_record(record_clone, _contacts_contact.group_relation, record_group_relation);
716 contacts_list_add(list_result, record_clone);
718 err = contacts_list_next(list);
720 contacts_filter_destroy(filter);
721 contacts_query_destroy(query);
722 contacts_list_destroy(list, true);
723 contacts_record_destroy(record_group, true);
726 contacts_filter_destroy(filter);
727 contacts_query_destroy(query);
728 contacts_list_destroy(list, true);
729 contacts_record_destroy(record_group, true);
733 static void __list_add_contacts_to_group(ct_list_data *clist_d);
735 static void __list_add_contacts_to_group_cb(int err, void *data)
737 ct_list_data *clist_d = data;
738 ph_progress_info *p_info = NULL;
740 p_retm_if(NULL == clist_d, "Invalid parameter(clist_d is NULL)");
741 p_info = clist_d->p_info;
742 p_retm_if(NULL == p_info, "Invalid parameter(p_info is NULL)");
744 if (p_info->update_list) {
745 contacts_list_destroy(p_info->update_list, true);
746 p_info->update_list = NULL;
749 if (CONTACTS_ERROR_NONE != err || p_info->alive == false) {
750 char *err_msg = NULL;
752 evas_object_del(p_info->popup);
753 p_info->popup = NULL;
756 case CONTACTS_ERROR_DB:
757 err_msg = T_(CT_GET_TEXT_ERR, CTTEXT_ERR_DB_LOCKED);
759 case CONTACTS_ERROR_FILE_NO_SPACE:
760 err_msg = S_(CT_SYS_POP_NOT_ENOUGH_MEMORY);
763 err_msg = S_(PH_SYS_POP_FAILED);
767 phone_show_tickernoti(err_msg);
769 clist_d->p_info = NULL;
770 clist_d->updating = false;
771 elm_naviframe_item_pop_to(evas_object_data_get(clist_d->navi, "navi_it_pop"));
774 else if (p_info->cnt == p_info->cnt_checked_total) {
776 evas_object_del(p_info->popup);
777 p_info->popup = NULL;
779 phone_show_tickernoti(S_(CT_SYS_POP_SUCCESS));
781 clist_d->p_info = NULL;
782 elm_naviframe_item_pop_to(evas_object_data_get(clist_d->navi, "navi_it_pop"));
786 __list_add_contacts_to_group(clist_d);
791 static void __list_add_contacts_to_group(ct_list_data *clist_d)
794 const int LIST_BULK_LENGTH = 50;
798 char percent_total[PH_TEXT_MAX_LEN+1] = {0, };
799 char percent[PH_TEXT_MAX_LEN+1] = {0, };
801 contacts_list_h list = NULL;
802 contacts_error_e err = CONTACTS_ERROR_NONE;
803 ph_progress_info *p_info = NULL;
805 ct_person_list *person_info = NULL;
807 p_retm_if(NULL == clist_d, "parameter(clist_d) is NULL");
808 p_info = clist_d->p_info;
809 p_retm_if(NULL == p_info, "parameter(p_info) is NULL");
811 err = contacts_list_create(&list);
812 p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_list_create() Failed(%d)", err);
814 EINA_LIST_FOREACH(clist_d->list, l, person_info) {
815 if (NULL == person_info) continue;
817 if (person_info->checked) {
818 if (base_count < p_info->cnt) {
823 __list_add_group_relation(clist_d->base_grp, person_info->id, list);
826 if (LIST_BULK_LENGTH == count || (count + p_info->cnt) == p_info->cnt_checked_total) {
827 p_info->cnt += count;
833 value = (double)p_info->cnt / (double)p_info->cnt_checked_total;
834 elm_progressbar_value_set(p_info->progressbar, value);
835 snprintf(percent, sizeof(percent), "%d%%", (int)(100.0 * (double)p_info->cnt/(double)p_info->cnt_checked_total));
836 snprintf(percent_total, sizeof(percent_total), "%d/%d", p_info->cnt, p_info->cnt_checked_total);
837 edje_object_part_text_set(elm_layout_edje_get(p_info->layout), "elm.text.subtext1", percent);
838 edje_object_part_text_set(elm_layout_edje_get(p_info->layout), "elm.text.subtext2", percent_total);
840 p_info->update_list = list;
841 contacts_db_update_records_async(list, __list_add_contacts_to_group_cb, clist_d);
845 void ct_list_add_contacts_to_group(Evas_Object *win, Evas_Object *navi, int cnt)
848 ct_list_data *clist_d;
849 ph_progress_info *p_info;
851 clist_d = evas_object_data_get(navi, "gadd_list_d");
852 p_retm_if(NULL == clist_d, "evas_object_data_get return NULL");
854 p_retm_if(clist_d->p_info, "thread is running");
856 p_info = calloc(1, sizeof(ph_progress_info));
857 p_retm_if(NULL == p_info, "calloc return NULL");
859 clist_d->p_info = p_info;
860 p_info->cnt_checked_total = cnt;
861 p_info->alive = true;
862 p_info->result = TRUE;
863 p_info->popup = phone_progressbar_popup(win, p_info, T_(CT_GET_TEXT_BASIC, CTTEXT_ADDING_MEMBERS_TO_GROUP));
864 __list_add_contacts_to_group(clist_d);