2 * Copyright 2012-2013 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.
22 #include "smartsearch.h"
27 #include <calendar2.h>
30 #include <email-api-mail.h>
32 #include <favorites.h>
33 #include <media_content.h>
35 #include <msg_storage.h>
36 #include <msg_storage_types.h>
40 #include <unicode/ucal.h>
41 #include <unicode/ustring.h>
42 #include <unicode/ustdio.h>
43 #include <unicode/udat.h>
45 char* g_keyword = NULL;
47 struct search_cb_data {
48 struct search_content_object *obj;
51 struct search_genlist_info *result_info;
54 struct search_cb_data_browser {
55 struct search_content_object *obj;
58 struct search_genlist_info *result_info;
59 struct search_more_result *info;
63 struct media_cb_data {
68 int search_sql_stmt_init(sqlite3_stmt * sql_stmt)
74 rc = sqlite3_clear_bindings(sql_stmt);
75 if (rc != SQLITE_OK) {
76 SEARCH_DEBUG_ERROR("sqlite3_clear_bindings error");
77 return SEARCH_RET_FAIL;
80 rc = sqlite3_reset(sql_stmt);
81 if (rc != SQLITE_OK) {
82 SEARCH_DEBUG_ERROR("sqlite3_reset error");
83 return SEARCH_RET_FAIL;
88 return SEARCH_RET_SUCCESS;
91 int search_sql_stmt_finalize(sqlite3_stmt * stmt)
97 ret = sqlite3_finalize(stmt);
98 if (ret != SQLITE_OK) {
99 SEARCH_DEBUG_ERROR("sqlite3_finalize error : %d ", ret);
108 int search_sql_prepare_stmt(sqlite3 *db_handle, const char *query,
109 sqlite3_stmt ** stmt_out)
116 rc = sqlite3_prepare(db_handle, query, strlen(query), stmt_out, NULL);
117 if (rc != SQLITE_OK) {
118 SEARCH_DEBUG_ERROR("sql preapre error : %d / %s", rc, query);
119 ret = SEARCH_RET_FAIL;
121 ret = SEARCH_RET_SUCCESS;
129 int search_sql_bind_text(sqlite3* db_handle, sqlite3_stmt *sql_stmt, int col, char *data)
132 int ret = SEARCH_RET_SEARCH_NONE;
134 rc = sqlite3_bind_text(sql_stmt, col, data, strlen(data), SQLITE_STATIC);
135 if (rc != SQLITE_OK) {
136 SEARCH_DEBUG_ERROR("SQL BIND TEXT ERROR : %s(%d) / %s\n",
137 sqlite3_errmsg(db_handle),
140 ret = SEARCH_RET_SEARCH_FAIL;
146 int search_sql_bind_int(sqlite3* db_handle, sqlite3_stmt *sql_stmt, int col, int data)
149 int ret = SEARCH_RET_SEARCH_NONE;
151 rc = sqlite3_bind_int(sql_stmt, col, data);
152 if (rc != SQLITE_OK) {
153 SEARCH_DEBUG_ERROR("SQL BIND INT ERROR : %s(%d) / %d\n",
154 sqlite3_errmsg(db_handle),
157 ret = SEARCH_RET_SEARCH_FAIL;
162 int search_sql_contact_search_result_by_api(struct search_content_object *obj,
163 int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info)
167 struct appdata *ad = (struct appdata *)data;
170 contacts_query_h query = NULL;
171 contacts_filter_h filter = NULL;
172 contacts_list_h list = NULL;
174 unsigned int count = 0;
178 int search_ret = SEARCH_RET_SEARCH_NONE;
180 SEARCH_RETV_IF(ad == NULL, SEARCH_RET_SEARCH_FAIL);
182 ret = contacts_connect2();
183 if (ret != CONTACTS_ERROR_NONE) {
184 SEARCH_DEBUG_WARNING("contacts_connect2 : %d", ret);
188 ret = contacts_query_create(_contacts_person_number._uri, &query);
189 if (ret != CONTACTS_ERROR_NONE) {
190 SEARCH_DEBUG_WARNING("contacts_query_create : %d", ret);
194 ret = contacts_filter_create(_contacts_person_number._uri, &filter);
195 if (ret != CONTACTS_ERROR_NONE) {
196 SEARCH_DEBUG_WARNING("contacts_filter_create : %d", ret);
200 ret = contacts_filter_add_str(filter, _contacts_person_number.display_name, CONTACTS_MATCH_CONTAINS, keyword);
201 if (ret != CONTACTS_ERROR_NONE) {
202 SEARCH_DEBUG_WARNING("contacts_filter_add_str : %d", ret);
206 ret = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
207 if (ret != CONTACTS_ERROR_NONE) {
208 SEARCH_DEBUG_WARNING("contacts_filter_add_operator : %d", ret);
212 ret = contacts_filter_add_str(filter, _contacts_person_number.number, CONTACTS_MATCH_CONTAINS, keyword);
213 if (ret != CONTACTS_ERROR_NONE) {
214 SEARCH_DEBUG_WARNING("contacts_filter_add_str : %d", ret);
218 ret = contacts_query_set_filter(query, filter);
219 if (ret != CONTACTS_ERROR_NONE) {
220 SEARCH_DEBUG_WARNING("contacts_query_set_filter : %d", ret);
224 ret = contacts_query_set_sort(query, _contacts_person_number.display_name, true);
225 if (ret != CONTACTS_ERROR_NONE) {
226 SEARCH_DEBUG_WARNING("contacts_query_set_sort : %d", ret);
230 ret = contacts_db_get_count_with_query(query, &total_cnt);
231 if (ret != CONTACTS_ERROR_NONE) {
232 SEARCH_DEBUG_WARNING("contacts_db_get_count_with_query : %d", ret);
236 ret = contacts_db_get_records_with_query(query, offset, limit, &list);
237 if (ret != CONTACTS_ERROR_NONE) {
238 SEARCH_DEBUG_WARNING("contacts_db_get_records_with_query : %d", ret);
242 SEARCH_RETV_IF_WITH_ERRORV(ret != CONTACTS_ERROR_NONE, SEARCH_RET_SEARCH_FAIL, ret);
243 contacts_list_get_count(list, &count);
245 SEARCH_DEBUG_LOG("CONTACT COUNT: %d", count);
246 SEARCH_DEBUG_LOG("TOTAL COUNT: %d", total_cnt);
249 /* Set group title */
251 result_info->group = search_add_genlist_item(SEARCH_GENLIST_GROUP,
252 obj, ad->itc_grouptitle, obj, NULL);
256 struct search_item_sel *sel_mem_info = NULL;
257 struct search_genlist_item_info *gen_item = NULL;
258 Elm_Genlist_Item_Class *itc_style = NULL;
261 char *contact_img_path = NULL;
262 char *str_display = NULL;
263 char *num_display = NULL;
264 const char *text_1line = NULL;
265 const char *text_2line = NULL;
266 bool is_word_in_str = false;
267 char contact_id_str[MAX_LENGTH_PER_ID] = {0,};
269 sel_mem_info = (struct search_item_sel *)calloc(1, sizeof(struct search_item_sel));
272 SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", loop_cnt);
276 sel_mem_info->type = obj->contents_type;
278 contacts_record_h record;
279 contacts_list_get_current_record_p(list, &record);
280 contacts_record_get_str_p(record, _contacts_person.image_thumbnail_path, &contact_img_path);
282 if (contact_img_path != NULL) {
283 sel_mem_info->icon1 = strdup(contact_img_path);
285 else if (obj->obj_icon_path) {
286 sel_mem_info->icon1 = strdup(obj->obj_icon_path);
289 contacts_record_get_str_p(record, _contacts_person.display_name, &str_display);
290 contacts_record_get_str_p(record, _contacts_number.number, &num_display);
292 if (str_display != NULL) {
293 text_1line = str_display;
296 if (num_display != NULL) {
297 text_2line = num_display;
300 if (text_1line != NULL && text_2line != NULL) {
301 sel_mem_info->text1 = strdup(search_markup_keyword(str_display, keyword, &is_word_in_str));
302 sel_mem_info->text2 = strdup(search_markup_keyword(num_display, keyword, &is_word_in_str));
303 itc_style = ad->itc_pslist_2line_1icon;
306 sel_mem_info->text1 = strdup(search_markup_keyword(str_display, keyword, &is_word_in_str));
309 sel_mem_info->text2 = strdup(search_markup_keyword(num_display, keyword, &is_word_in_str));
311 itc_style = ad->itc_pslist_1line_1icon;
314 contacts_record_get_int(record, _contacts_person.id, &contact_id);
315 snprintf(contact_id_str, MAX_LENGTH_PER_ID - 1, "%d", contact_id);
316 sel_mem_info->launch_param= strdup(contact_id_str);
318 gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM,
319 obj, itc_style, sel_mem_info,
321 result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item);
325 if (loop_cnt == limit) {
328 }while (contacts_list_next(list) == CONTACTS_ERROR_NONE);
330 SEARCH_DEBUG_WARNING("No matched contacts data", ret);
331 search_ret = SEARCH_RET_SEARCH_NONE;
335 contacts_list_destroy(list, true);
337 /* Set more title to genlist (under 'search all') */
338 curr_cnt = offset + loop_cnt;
340 if (total_cnt > curr_cnt) {
341 struct search_item_more_sel *sel_mem_more = NULL;
343 obj->mr_info.next_point = offset + limit;
346 (struct search_item_more_sel *)calloc(1,
348 search_item_more_sel));
349 sel_mem_more->obj = obj;
351 result_info->more = search_add_genlist_item(SEARCH_GENLIST_MORE,
358 search_ret = SEARCH_RET_SEARCH_SUCCESS;
361 ret = contacts_disconnect2();
364 contacts_filter_destroy(filter);
368 contacts_query_destroy(query);
376 int search_sql_calendar_search_result_by_api(struct search_content_object *obj,
377 int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info)
381 struct appdata *ad = (struct appdata *)data;
382 struct search_item_sel *sel_mem_info = NULL;
383 struct search_item_more_sel *sel_mem_more = NULL;
384 struct search_genlist_item_info *gen_item = NULL;
390 int search_ret = SEARCH_RET_SEARCH_NONE;
393 SEARCH_RETV_IF(ad == NULL, SEARCH_RET_SEARCH_FAIL);
395 ret = calendar_connect();
396 SEARCH_RETV_IF_WITH_ERRORV(ret != CALENDAR_ERROR_NONE, SEARCH_RET_SEARCH_FAIL, ret);
398 calendar_query_h query = NULL;
399 calendar_filter_h visibility_filter = NULL;
400 calendar_list_h list = NULL;
402 ret = calendar_query_create(_calendar_event._uri, &query);
403 if (ret != CALENDAR_ERROR_NONE) {
404 SEARCH_DEBUG_WARNING("calendar_query_create : %d", ret);
408 ret = calendar_filter_create(_calendar_event._uri, &visibility_filter);
409 if (ret != CALENDAR_ERROR_NONE) {
410 SEARCH_DEBUG_WARNING("calendar_filter_create : %d", ret);
414 ret = calendar_filter_add_str(visibility_filter, _calendar_event.summary, CALENDAR_MATCH_CONTAINS, keyword);
415 if (ret != CALENDAR_ERROR_NONE) {
416 SEARCH_DEBUG_WARNING("calendar_filter_add_str : %d", ret);
420 ret = calendar_filter_add_operator(visibility_filter, CALENDAR_FILTER_OPERATOR_AND);
421 if (ret != CALENDAR_ERROR_NONE) {
422 SEARCH_DEBUG_WARNING("calendar_filter_add_operator : %d", ret);
426 ret = calendar_query_set_filter(query, visibility_filter);
427 if (ret != CALENDAR_ERROR_NONE) {
428 SEARCH_DEBUG_WARNING("calendar_query_set_filter : %d", ret);
432 ret = calendar_query_set_sort(query, _calendar_event.summary, true);
433 if (ret != CALENDAR_ERROR_NONE) {
434 SEARCH_DEBUG_WARNING("calendar_query_set_sort : %d", ret);
438 ret = calendar_db_get_count_with_query(query, &total_cnt);
439 if (ret != CALENDAR_ERROR_NONE) {
440 SEARCH_DEBUG_WARNING("calendar_db_get_count_with_query : %d", ret);
444 ret = calendar_db_get_records_with_query(query, offset, limit, &list);
445 if (ret != CALENDAR_ERROR_NONE) {
446 SEARCH_DEBUG_WARNING("calendar_db_get_records_with_query : %d", ret);
450 calendar_list_get_count(list, &count);
452 SEARCH_DEBUG_LOG("CALENDAR COUNT : %d", count);
453 SEARCH_DEBUG_LOG("TOTAL COUNT : %d", total_cnt);
456 /* Set group title */
458 result_info->group = search_add_genlist_item(SEARCH_GENLIST_GROUP,
467 char *summary = NULL;
468 bool is_word_in_str = false;
469 char format_val[MAX_LENGTH_PER_LINE] = {0,};
470 char calendar_id_str[MAX_LENGTH_PER_ID] = {0,};
472 calendar_record_h record;
474 calendar_list_get_current_record_p(list, &record);
476 sel_mem_info = (struct search_item_sel *)calloc(1,sizeof(struct search_item_sel));
479 SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", loop_cnt);
483 sel_mem_info->type = obj->contents_type;
485 /* Set Thumbnail Image */
486 if (obj->obj_icon_path) {
487 sel_mem_info->icon1 = strdup(obj->obj_icon_path);
490 /* Set text 1line - Summary */
491 calendar_record_get_str_p(record, _calendar_event.summary, &summary);
492 if ((summary) && (strlen(summary) > 0)) {
493 sel_mem_info->text1 = strdup(search_markup_keyword(summary, keyword, &is_word_in_str));
496 /* Set text 2line - Date */
497 calendar_record_get_caltime(record, _calendar_event.start_time, &cal);
499 if (cal.type == CALENDAR_TIME_UTIME) {
500 search_util_date_time_format_get_val(cal.time.utime, format_val, SEARCH_DATE_TYPE_YYMMDD);
502 search_util_date_time_format_get_val(cal.time.utime, format_val, SEARCH_DATE_TYPE_YYMM);
504 sel_mem_info->text2 = strdup(format_val);
506 /* Set id for launching caledar contents */
507 calendar_record_get_int (record, _calendar_event.id, &main_id);
508 snprintf(calendar_id_str, MAX_LENGTH_PER_ID - 1, "%d", main_id);
509 sel_mem_info->launch_param = strdup(calendar_id_str);
511 gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM, obj, ad->itc_pslist_2line_1icon,
512 sel_mem_info, obj->gl_result_grp);
513 result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item);
517 if (loop_cnt == limit) {
520 } while (calendar_list_next(list) == CALENDAR_ERROR_NONE);
522 SEARCH_DEBUG_WARNING("No Matched calendar data: %d", count);
524 search_ret = SEARCH_RET_SEARCH_NONE;
528 curr_cnt = offset + loop_cnt;
530 /* Set more title to genlist (under 'search all') */
531 if (total_cnt > curr_cnt) {
532 obj->mr_info.next_point = offset + limit;
535 (struct search_item_more_sel *)calloc(1,
537 search_item_more_sel));
538 sel_mem_more->obj = obj;
540 result_info->more = search_add_genlist_item(SEARCH_GENLIST_MORE,
546 search_ret = SEARCH_RET_SEARCH_SUCCESS;
549 ret = calendar_disconnect();
551 if (visibility_filter) {
552 calendar_filter_destroy(visibility_filter);
556 calendar_query_destroy(query);
563 static void __search_sql_memo_search_result_cb(memo_data_t * value,
568 struct search_cb_data *scd = (struct search_cb_data *)user_data;
569 struct appdata *ad = NULL;
570 struct search_content_object *obj = NULL;
571 struct search_genlist_info *result_info = NULL;
573 struct search_genlist_item_info *gen_item = NULL;
574 struct search_item_sel *sel_mem_info = NULL;
575 struct search_item_more_sel *sel_mem_more = NULL;
577 char *keyword = scd->keyword;
578 bool is_word_in_str = false;
579 char memo_id_str[MAX_LENGTH_PER_ID] = {0,};
580 char format_val[MAX_LENGTH_PER_LINE] = {0,};
582 SEARCH_RET_IF(scd == NULL);
585 result_info = scd->result_info;
587 SEARCH_RET_IF(ad == NULL);
588 SEARCH_RET_IF(value == NULL);
590 if (obj->mr_info.next_point == 0) {
591 /* Set group title */
592 result_info->group = search_add_genlist_item(SEARCH_GENLIST_GROUP,
599 if (obj->mr_info.next_point <
600 obj->mr_info.offset + SEARCH_CATEGORY_LIST_MORE_CNT) {
601 sel_mem_info = (struct search_item_sel*)calloc(1, sizeof(struct search_item_sel));
604 SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", obj->mr_info.next_point);
608 sel_mem_info->type = obj->contents_type;
610 /********** START : set search result to sel_mem_info buf ************/
612 if (obj->obj_icon_path) {
613 sel_mem_info->icon1 = strdup(obj->obj_icon_path);
616 /* First, We should check comment field. It means drawing memo
617 * If comment field is NULL, then we check content field */
618 if ((value->comment) && (strlen(value->comment) > 0)) {
619 sel_mem_info->text1 = strdup(search_markup_keyword(value->comment, keyword, &is_word_in_str));
620 } else if ((value->content) && (strlen(value->content) > 0)) {
621 sel_mem_info->text1 = strdup(search_markup_keyword(value->content, keyword, &is_word_in_str));
624 search_util_date_time_format_get_val(value->modi_time, format_val, SEARCH_DATE_TYPE_YYMM);
625 sel_mem_info->text2 = strdup(format_val);
627 snprintf(memo_id_str, MAX_LENGTH_PER_ID - 1, "%d", value->id);
628 sel_mem_info->launch_param = strdup(memo_id_str);
630 /********** END : set search result to sel_mem_info buf *************/
632 gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM, obj, ad->itc_pslist_2line_1icon,
633 sel_mem_info, obj->gl_result_grp);
634 result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item);
636 obj->mr_info.next_point++;
637 } else if (obj->mr_info.next_point ==
638 obj->mr_info.offset + SEARCH_CATEGORY_LIST_MORE_CNT) {
639 /* Set more title to genlist (under 'search all') */
641 (struct search_item_more_sel *)calloc(1,
643 search_item_more_sel));
644 sel_mem_more->obj = obj;
646 result_info->more = search_add_genlist_item(SEARCH_GENLIST_MORE,
653 ("__search_sql_memo_search_result_cb wrong index : %d",
654 obj->mr_info.next_point);
662 int search_sql_memo_search_result_by_api(struct search_content_object *obj,
663 int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info)
667 struct appdata *ad = (struct appdata *)data;
668 struct search_cb_data scd = {obj, ad, keyword, result_info};
670 SEARCH_RETV_IF(ad == NULL, SEARCH_RET_SEARCH_FAIL);
672 memo_search_data(keyword,
675 __search_sql_memo_search_result_cb,
678 if (obj->mr_info.next_point == 0) {
679 SEARCH_DEBUG_WARNING("no memo search result");
680 return SEARCH_RET_SEARCH_NONE;
684 return SEARCH_RET_SEARCH_SUCCESS;
687 int search_sql_email_search_result_by_api(struct search_content_object *obj,
688 int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info)
692 struct appdata *ad = (struct appdata *)data;
694 int ret = EMAIL_ERROR_NONE;
696 email_mail_list_item_t *mail_list = NULL;
697 email_list_filter_t *filter_list = NULL;
698 email_list_sorting_rule_t *sorting_rule_list = NULL;
700 int filter_list_count = 5;
701 int sorting_rule_list_count = 1;
703 int total_mail_cnt = -1;
704 int unseen_mail_cnt = -1;
706 struct search_genlist_item_info *gen_item = NULL;
707 struct search_item_sel *sel_mem_info = NULL;
708 struct search_item_more_sel *sel_mem_more = NULL;
709 bool is_word_in_str = false;
711 SEARCH_RETV_IF(ad == NULL, SEARCH_RET_SEARCH_FAIL);
713 int search_ret = SEARCH_RET_SEARCH_FAIL;
715 filter_list = (email_list_filter_t *)malloc(sizeof(email_list_filter_t) * filter_list_count);
716 memset(filter_list, 0 , sizeof(email_list_filter_t) * filter_list_count);
718 filter_list[0].list_filter_item_type = EMAIL_LIST_FILTER_ITEM_RULE;
719 filter_list[0].list_filter_item.rule.target_attribute = EMAIL_MAIL_ATTRIBUTE_SUBJECT;
720 filter_list[0].list_filter_item.rule.rule_type = EMAIL_LIST_FILTER_RULE_INCLUDE;
721 filter_list[0].list_filter_item.rule.key_value.string_type_value = keyword;
722 filter_list[0].list_filter_item.rule.case_sensitivity = EMAIL_CASE_INSENSITIVE;
724 filter_list[1].list_filter_item_type = EMAIL_LIST_FILTER_ITEM_OPERATOR;
725 filter_list[1].list_filter_item.operator_type = EMAIL_LIST_FILTER_OPERATOR_OR;
727 filter_list[2].list_filter_item_type = EMAIL_LIST_FILTER_ITEM_RULE;
728 filter_list[2].list_filter_item.rule.target_attribute = EMAIL_MAIL_ATTRIBUTE_TO;
729 filter_list[2].list_filter_item.rule.rule_type = EMAIL_LIST_FILTER_RULE_INCLUDE;
730 filter_list[2].list_filter_item.rule.key_value.string_type_value = keyword;
731 filter_list[2].list_filter_item.rule.case_sensitivity = EMAIL_CASE_INSENSITIVE;
733 filter_list[3].list_filter_item_type = EMAIL_LIST_FILTER_ITEM_OPERATOR;
734 filter_list[3].list_filter_item.operator_type = EMAIL_LIST_FILTER_OPERATOR_OR;
736 filter_list[4].list_filter_item_type = EMAIL_LIST_FILTER_ITEM_RULE;
737 filter_list[4].list_filter_item.rule.target_attribute = EMAIL_MAIL_ATTRIBUTE_FROM;
738 filter_list[4].list_filter_item.rule.rule_type = EMAIL_LIST_FILTER_RULE_INCLUDE;
739 filter_list[4].list_filter_item.rule.key_value.string_type_value = keyword;
740 filter_list[4].list_filter_item.rule.case_sensitivity = EMAIL_CASE_INSENSITIVE;
742 sorting_rule_list = (email_list_sorting_rule_t *)malloc(sizeof(email_list_sorting_rule_t) * sorting_rule_list_count);
743 memset(sorting_rule_list, 0, sizeof(email_list_sorting_rule_t) * sorting_rule_list_count);
745 sorting_rule_list[0].target_attribute = EMAIL_MAIL_ATTRIBUTE_SUBJECT;
746 sorting_rule_list[0].sort_order = EMAIL_SORT_ORDER_ASCEND;
748 ret = email_count_mail(filter_list, filter_list_count, &total_mail_cnt, &unseen_mail_cnt);
749 if (ret != EMAIL_ERROR_NONE) {
750 SEARCH_DEBUG_WARNING("Fail to call email_count_mail");
754 ret = email_get_mail_list_ex(filter_list, filter_list_count, sorting_rule_list, sorting_rule_list_count,
755 offset, limit, &mail_list, &mail_count);
759 if (ret != EMAIL_ERROR_NONE) {
760 SEARCH_DEBUG_WARNING("Fail to call email_get_mail_list_ex");
764 SEARCH_DEBUG_LOG("EMAIL TOTAL COUNT : %d UNSEEN : %d", total_mail_cnt, unseen_mail_cnt);
765 SEARCH_DEBUG_LOG("EMAIL COUNT : %d", mail_count);
767 if(mail_list == NULL) {
768 SEARCH_DEBUG_WARNING("mail_list is null");
769 search_ret = SEARCH_RET_SEARCH_NONE;
773 if (mail_count == 0) {
774 SEARCH_DEBUG_WARNING("no email search result");
775 search_ret = SEARCH_RET_SEARCH_NONE;
779 /* Set group title */
781 result_info->group = search_add_genlist_item(SEARCH_GENLIST_GROUP,
788 /* Set search result to genlist */
789 for(i = 0 ; i < mail_count ; i++) {
790 char email_id_str[MAX_LENGTH_PER_ID] = {0,};
791 char email_path_str[MAX_LENGTH_PER_PATH] = {0,};
793 sel_mem_info = (struct search_item_sel*)calloc(1, sizeof(struct search_item_sel));
796 SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", i);
800 sel_mem_info->type = obj->contents_type;
802 if (obj->obj_icon_path) {
803 sel_mem_info->icon1 = strdup(obj->obj_icon_path);
807 snprintf(email_id_str, MAX_LENGTH_PER_ID - 1, "%d", mail_list[i].mail_id);
808 sel_mem_info->launch_param = strdup(email_id_str);
811 snprintf(email_path_str, MAX_LENGTH_PER_PATH - 1, "%d %d %d",
812 mail_list[i].account_id, mail_list[i].mail_id, mail_list[i].mailbox_id);
813 sel_mem_info->launch_path = strdup(email_path_str);
815 if(strlen(mail_list[i].subject) > 0) {
816 sel_mem_info->text1 = strdup(search_markup_keyword(mail_list[i].subject, ad->search_word, &is_word_in_str));
819 if(strlen(mail_list[i].full_address_from) > 0) {
820 sel_mem_info->text2 = strdup(search_markup_keyword(mail_list[i].full_address_from, ad->search_word, &is_word_in_str));
823 if(is_word_in_str == false && (strlen(mail_list[i].email_address_recipient) > 0)) {
824 sel_mem_info->text2 = strdup(search_markup_keyword(mail_list[i].email_address_recipient, ad->search_word, &is_word_in_str));
827 gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM, obj, ad->itc_pslist_2line_1icon, sel_mem_info, obj->gl_result_grp);
828 result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item);
831 /* Set more title to genlist (under 'search all') */
832 if (i < total_mail_cnt) {
833 obj->mr_info.next_point = offset + i;
836 (struct search_item_more_sel *)calloc(1,
837 sizeof(struct search_item_more_sel));
838 sel_mem_more->obj = obj;
840 result_info->more = search_add_genlist_item(SEARCH_GENLIST_MORE,
846 search_ret = SEARCH_RET_SEARCH_SUCCESS;
849 SEARCH_FREE(filter_list);
850 SEARCH_FREE(sorting_rule_list);
851 SEARCH_FREE(mail_list);
857 static bool __search_media_info_cb(media_info_h media, void *user_data)
859 char *media_id = NULL;
860 char *media_name = NULL;
861 char *media_path = NULL;
862 char *media_thumbnail = NULL;
864 struct search_item_sel *sel_mem_info = NULL;
865 Elm_Genlist_Item_Class *itc_style = NULL;
866 bool is_word_in_str = false;
868 struct search_cb_data *scd = (struct search_cb_data*)user_data;
869 struct appdata *ad = NULL;
870 struct search_content_object *obj = NULL;
871 struct search_genlist_info *result_info = NULL;
872 char *keyword = NULL;
874 struct search_genlist_item_info *gen_item = NULL;
875 char media_id_str[MAX_LENGTH_PER_PATH] = {0,};
877 SEARCH_RETV_IF(scd == NULL, true);
880 result_info = scd->result_info;
881 keyword = scd->keyword;
883 SEARCH_RETV_IF(ad == NULL, true);
885 media_info_get_media_id(media, &media_id);
886 media_info_get_display_name(media, &media_name);
887 media_info_get_file_path(media, &media_path);
888 media_info_get_thumbnail_path(media, &media_thumbnail);
890 sel_mem_info = (struct search_item_sel*)calloc(1, sizeof(struct search_item_sel));
893 SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", media_id);
897 sel_mem_info->type = obj->contents_type;
899 if ((media_thumbnail) && ecore_file_exists(media_thumbnail) == EINA_TRUE) {
900 sel_mem_info->icon1 = strdup(media_thumbnail);
901 } else if (obj->obj_icon_path) {
902 sel_mem_info->icon1 = strdup(obj->obj_icon_path);
905 if (media_name && strlen(media_name)) {
906 sel_mem_info->text1 = strdup(search_markup_keyword(media_name, keyword, &is_word_in_str));
910 snprintf(media_id_str, MAX_LENGTH_PER_ID, "%s", media_id);
911 sel_mem_info->launch_param = strdup(media_id_str);
915 sel_mem_info->launch_path = strdup(media_path);
918 itc_style = ad->itc_pslist_1line_1icon;
920 /* Add Info to genlist */
921 gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM,
926 result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item);
928 SEARCH_FREE(media_id);
929 SEARCH_FREE(media_name);
930 SEARCH_FREE(media_thumbnail);
931 SEARCH_FREE(media_path);
936 static bool __search_sql_music_info_cb(media_info_h media, void *user_data)
938 char *media_id = NULL;
939 char *media_path = NULL;
940 char *media_thumbnail = NULL;
946 audio_meta_h a_handle = NULL;
948 media_content_storage_e storage_type = MEDIA_CONTENT_STORAGE_INTERNAL;
950 struct search_item_sel *sel_mem_info = NULL;
951 Elm_Genlist_Item_Class *itc_style = NULL;
952 bool is_word_in_str = false;
954 struct search_cb_data *scd = (struct search_cb_data*)user_data;
955 struct appdata *ad = NULL;
956 struct search_content_object *obj = NULL;
957 struct search_genlist_info *result_info = NULL;
958 char *keyword = NULL;
960 struct search_genlist_item_info *gen_item = NULL;
961 char music_id_str[MAX_LENGTH_PER_PATH] = {0,};
963 SEARCH_RETV_IF(scd == NULL, true);
966 result_info = scd->result_info;
967 keyword = scd->keyword;
969 SEARCH_RETV_IF(ad == NULL, true);
971 media_info_get_media_id(media, &media_id);
972 media_info_get_file_path(media, &media_path);
973 media_info_get_storage_type(media, &storage_type);
974 media_info_get_thumbnail_path(media, &media_thumbnail);
976 ret = media_info_get_audio(media, &a_handle);
978 if(ret != MEDIA_CONTENT_ERROR_NONE) {
979 SEARCH_DEBUG_WARNING("Fail to get audio info!");
982 ret = audio_meta_get_title(a_handle, &title);
983 if (ret != MEDIA_CONTENT_ERROR_NONE) {
984 SEARCH_DEBUG_WARNING("Fail to get title info!");
987 ret = audio_meta_get_album(a_handle, &album);
988 if (ret != MEDIA_CONTENT_ERROR_NONE) {
989 SEARCH_DEBUG_WARNING("Fail to get album info!");
992 ret = audio_meta_get_artist(a_handle, &artist);
993 if (ret != MEDIA_CONTENT_ERROR_NONE) {
994 SEARCH_DEBUG_WARNING("Fail to get artist info!");
999 audio_meta_destroy(a_handle);
1001 sel_mem_info = (struct search_item_sel *)calloc(1, sizeof(struct search_item_sel));
1003 if (!sel_mem_info) {
1004 SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", media_id);
1008 sel_mem_info->type = obj->contents_type;;
1010 if ((media_thumbnail) && ecore_file_exists(media_thumbnail) == EINA_TRUE) {
1011 sel_mem_info->icon1 = strdup(media_thumbnail);
1012 } else if(obj->obj_icon_path) {
1013 sel_mem_info->icon1 = strdup(obj->obj_icon_path);
1016 if ((title) && (strlen(title) > 0)) {
1017 sel_mem_info->text1 = strdup(search_markup_keyword(title, keyword, &is_word_in_str));
1020 if (is_word_in_str) {
1021 if ((artist) && (strlen(artist) > 0)) {
1022 sel_mem_info->text2 = strdup(search_markup_keyword(artist, keyword, &is_word_in_str));
1025 if ((artist) && (strlen(artist) > 0)) {
1026 sel_mem_info->text2 = strdup(search_markup_keyword(artist, keyword, &is_word_in_str));
1029 if (is_word_in_str == false && (album) && (strlen(album) > 0)) {
1030 sel_mem_info->text2 = strdup(search_markup_keyword(album, keyword, &is_word_in_str));
1033 if (is_word_in_str == false) {
1034 SEARCH_DEBUG_LOG("search_result is 0. No match keyword in title,album,artist string");
1038 if (storage_type == MEDIA_CONTENT_STORAGE_EXTERNAL) {
1039 itc_style = ad->itc_pslist_2line_2icon;
1040 sel_mem_info->icon2 = strdup(SEARCH_SDCARD_ICON);
1043 itc_style = ad->itc_pslist_2line_1icon;
1047 snprintf(music_id_str, MAX_LENGTH_PER_ID - 1, "%s", media_id);
1048 sel_mem_info->launch_param = strdup(music_id_str);
1052 sel_mem_info->launch_path = strdup(media_path);
1055 /* Add Information to genlist */
1056 gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM, obj, itc_style, sel_mem_info,
1057 obj->gl_result_grp);
1058 result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item);
1060 SEARCH_FREE(media_id);
1061 SEARCH_FREE(media_path);
1062 SEARCH_FREE(media_thumbnail);
1064 SEARCH_FREE(artist);
1070 static int __search_sql_media_search_result_by_api(struct search_content_object *obj,
1071 int offset, int limit,
1074 media_info_cb func_cb,
1076 struct search_genlist_info *result_info,
1081 struct appdata *ad = (struct appdata *)data;
1082 struct search_cb_data scd = {obj, ad, keyword, result_info};
1086 int func_ret = SEARCH_RET_SEARCH_SUCCESS;
1089 struct search_item_more_sel *sel_mem_more = NULL;
1091 SEARCH_RETV_IF(ad == NULL, SEARCH_RET_SEARCH_FAIL);
1093 media_info_get_media_count_from_db(filter, &result_cnt);
1095 if (result_cnt != 0) {
1096 /* Set group title */
1097 if (obj->mr_info.offset== 0) {
1098 result_info->group = search_add_genlist_item(SEARCH_GENLIST_GROUP,
1105 ret = media_info_foreach_media_from_db(filter, func_cb, &scd);
1107 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1108 SEARCH_DEBUG_WARNING("media_info_foreach_media_from_db failed : %d\n", ret);
1109 func_ret = SEARCH_RET_SEARCH_FAIL;
1113 curr_cnt = offset + result_cnt;
1115 /* Set more title to genlist (under 'search all') */
1116 if (total_cnt > curr_cnt) {
1117 obj->mr_info.next_point = offset + result_cnt;
1120 (struct search_item_more_sel *)calloc(1,
1121 sizeof(struct search_item_more_sel));
1122 sel_mem_more->obj = obj;
1124 result_info->more = search_add_genlist_item(SEARCH_GENLIST_MORE,
1128 obj->gl_result_grp);
1131 func_ret = SEARCH_RET_SEARCH_NONE;
1141 int search_sql_image_search_result_by_api(struct search_content_object *obj,
1142 int offset, int limit,
1145 struct search_genlist_info *result_info)
1149 int ret = SEARCH_RET_SEARCH_SUCCESS;
1153 char *search_query = NULL;
1154 char *escape_added_keyword = NULL;
1156 const char *image_query = "(MEDIA_TYPE=0 and (MEDIA_DISPLAY_NAME like \"%%%s%%\" ESCAPE (\"%s\")))";
1158 SEARCH_MALLOC(escape_added_keyword, strlen(keyword)*2+5, char);
1159 memset(escape_added_keyword, 0x0, strlen(keyword)*2+5);
1160 search_sql_make_keyword_bind_value(keyword, escape_added_keyword, SEARCH_SQL_BIND_TYPE_DUPLEX);
1162 len = strlen(escape_added_keyword) + strlen(DB_ESCAPE_CHAR) + strlen(image_query) + 1;
1163 search_query = (char*)calloc(1, len);
1165 snprintf(search_query, len, image_query, escape_added_keyword, "%");
1169 ret = media_filter_create(&filter);
1170 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1171 SEARCH_DEBUG_WARNING("media_filter_create failed : %d\n", ret);
1172 ret = SEARCH_RET_SEARCH_FAIL;
1176 ret = media_filter_set_condition(filter, search_query, MEDIA_CONTENT_COLLATE_DEFAULT);
1177 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1178 SEARCH_DEBUG_WARNING("media_filter_set_condition failed : %d\n", ret);
1179 ret = SEARCH_RET_SEARCH_FAIL;
1183 ret = media_filter_set_order(filter, MEDIA_CONTENT_ORDER_ASC, MEDIA_DISPLAY_NAME, MEDIA_CONTENT_COLLATE_DEFAULT);
1184 if(ret != MEDIA_CONTENT_ERROR_NONE) {
1185 SEARCH_DEBUG_WARNING("media_filter_set_order failed : %d\n", ret);
1186 ret = SEARCH_RET_SEARCH_FAIL;
1190 media_info_get_media_count_from_db(filter, &total_cnt);
1191 SEARCH_DEBUG_LOG("Matched Image Total Cnt : %d", total_cnt);
1193 ret = media_filter_set_offset(filter, offset, limit);
1194 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1195 SEARCH_DEBUG_WARNING("media_filter_set_offset failed : %d\n", ret);
1196 ret = SEARCH_RET_SEARCH_FAIL;
1201 ret = __search_sql_media_search_result_by_api(obj,
1206 __search_media_info_cb,
1212 SEARCH_FREE(search_query);
1213 SEARCH_FREE(escape_added_keyword);
1214 media_filter_destroy(filter);
1221 int search_sql_video_search_result_by_api(struct search_content_object *obj,
1222 int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info)
1226 int ret = SEARCH_RET_SEARCH_SUCCESS;
1228 char *search_query = NULL;
1229 char *escape_added_keyword = NULL;
1232 const char *video_query = "(MEDIA_TYPE=1 and (MEDIA_DISPLAY_NAME LIKE \"%%%s%%\" ESCAPE (\"%s\")))";
1234 SEARCH_MALLOC(escape_added_keyword, strlen(keyword)*2+5, char);
1235 memset(escape_added_keyword, 0x0, strlen(keyword)*2+5);
1236 search_sql_make_keyword_bind_value(keyword, escape_added_keyword, SEARCH_SQL_BIND_TYPE_DUPLEX);
1238 len = strlen(escape_added_keyword) + strlen(DB_ESCAPE_CHAR) + strlen(video_query) + 1;
1239 search_query = (char*)calloc(1, len);
1241 snprintf(search_query, len, video_query, escape_added_keyword, DB_ESCAPE_CHAR);
1245 ret = media_filter_create(&filter);
1246 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1247 SEARCH_DEBUG_WARNING("media_filter_create failed : %d\n", ret);
1248 ret = SEARCH_RET_SEARCH_FAIL;
1252 ret = media_filter_set_offset(filter, offset, limit);
1253 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1254 SEARCH_DEBUG_WARNING("media_filter_set_offset failed : %d\n", ret);
1255 ret = SEARCH_RET_SEARCH_FAIL;
1259 ret = media_filter_set_condition(filter, search_query, MEDIA_CONTENT_COLLATE_DEFAULT);
1260 if(ret != MEDIA_CONTENT_ERROR_NONE) {
1261 SEARCH_DEBUG_WARNING("media_filter_set_condition failed : %d\n", ret);
1262 ret = SEARCH_RET_SEARCH_FAIL;
1266 ret = media_filter_set_order(filter, MEDIA_CONTENT_ORDER_ASC, MEDIA_DISPLAY_NAME, MEDIA_CONTENT_COLLATE_DEFAULT);
1267 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1268 SEARCH_DEBUG_WARNING("media_filter_set_order failed : %d\n", ret);
1269 ret = SEARCH_RET_SEARCH_FAIL;
1273 media_info_get_media_count_from_db(filter, &total_cnt);
1274 SEARCH_DEBUG_LOG("Matched Video Total cnt : %d", total_cnt);
1276 ret = media_filter_set_offset(filter, offset, limit);
1277 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1278 SEARCH_DEBUG_WARNING("media_filter_set_offset failed : %d\n", ret);
1279 ret = SEARCH_RET_SEARCH_FAIL;
1283 ret = __search_sql_media_search_result_by_api(obj,
1288 __search_media_info_cb,
1295 SEARCH_FREE(search_query);
1296 SEARCH_FREE(escape_added_keyword);
1297 media_filter_destroy(filter);
1304 int search_sql_music_search_result_by_api(struct search_content_object *obj,
1305 int offset, int limit,
1308 struct search_genlist_info *result_info)
1312 int ret = SEARCH_RET_SEARCH_SUCCESS;
1314 char *search_query = NULL;
1315 char *escape_added_keyword = NULL;
1318 const char *music_query = "(MEDIA_TYPE=3 and (MEDIA_TITLE LIKE \"%%%s%%\" or MEDIA_ALBUM LIKE \"%%%s%%\" or MEDIA_ARTIST LIKE \"%%%s%%\" ESCAPE (\"%s\")))";
1320 SEARCH_MALLOC(escape_added_keyword, strlen(keyword)*2+5, char);
1321 memset(escape_added_keyword, 0x0, strlen(keyword)*2+5);
1322 search_sql_make_keyword_bind_value(keyword, escape_added_keyword, SEARCH_SQL_BIND_TYPE_DUPLEX);
1324 len = strlen(escape_added_keyword) + strlen(DB_ESCAPE_CHAR) + strlen(music_query) + 1;
1325 search_query = (char*)calloc(1, len);
1327 snprintf(search_query, len, music_query, escape_added_keyword,
1328 escape_added_keyword, escape_added_keyword, DB_ESCAPE_CHAR);
1332 ret = media_filter_create(&filter);
1333 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1334 SEARCH_DEBUG_WARNING("media_filter_create failed : %d\n", ret);
1335 ret = SEARCH_RET_SEARCH_FAIL;
1341 ret = media_filter_set_condition(filter, search_query, MEDIA_CONTENT_COLLATE_DEFAULT);
1342 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1343 SEARCH_DEBUG_WARNING("media_filter_set_condition failed : %d\n", ret);
1344 ret = SEARCH_RET_SEARCH_FAIL;
1348 ret = media_filter_set_order(filter, MEDIA_CONTENT_ORDER_ASC, MEDIA_TITLE, MEDIA_CONTENT_COLLATE_DEFAULT);
1349 if(ret != MEDIA_CONTENT_ERROR_NONE) {
1350 SEARCH_DEBUG_WARNING("media_filter_set_order failed : %d\n", ret);
1351 ret = SEARCH_RET_SEARCH_FAIL;
1355 media_info_get_media_count_from_db(filter, &total_cnt);
1356 SEARCH_DEBUG_LOG("Matched Music Total cnt : %d", total_cnt);
1358 ret = media_filter_set_offset(filter, offset, limit);
1359 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1360 SEARCH_DEBUG_WARNING("media_filter_set_offset failed : %d\n", ret);
1361 ret = SEARCH_RET_SEARCH_FAIL;
1365 ret = __search_sql_media_search_result_by_api(obj,
1370 __search_sql_music_info_cb,
1377 SEARCH_FREE(search_query);
1378 SEARCH_FREE(escape_added_keyword);
1379 media_filter_destroy(filter);
1386 ail_cb_ret_e __search_sql_menu_search_result_cb(
1387 const ail_appinfo_h appinfo,
1392 struct search_cb_data *scd = (struct search_cb_data*)data;
1393 struct appdata *ad = scd->ad;
1394 struct search_content_object* obj = scd->obj;
1395 struct search_genlist_info *result_info = scd->result_info;
1396 char *keyword = scd->keyword;
1398 struct search_genlist_item_info *gen_item = NULL;
1399 struct search_item_sel *sel_mem_info = NULL;
1400 struct search_item_more_sel *sel_mem_more = NULL;
1402 bool is_word_in_str;
1405 if (obj->mr_info.loop_cnt < obj->mr_info.next_point) {
1406 obj->mr_info.loop_cnt++;
1407 return AIL_CB_RET_CONTINUE;
1410 if(obj->mr_info.next_point <
1411 obj->mr_info.offset + SEARCH_CATEGORY_LIST_MORE_CNT) {
1413 sel_mem_info = (struct search_item_sel *)calloc(1, sizeof(struct search_item_sel));
1415 if (!sel_mem_info) {
1416 SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", obj->mr_info.loop_cnt);
1417 return AIL_CB_RET_CONTINUE;
1420 sel_mem_info->type = obj->contents_type;;
1422 /********** START : set search result to sel_mem_info buf ************/
1425 char *package = NULL;
1428 ail_appinfo_get_str(appinfo, AIL_PROP_ICON_STR, &icon);
1431 sel_mem_info->icon1 = strdup(icon);
1434 ail_appinfo_get_str(appinfo, AIL_PROP_PACKAGE_STR, &package);
1435 if ((package) && (strlen(package) > 0)) {
1437 if(strcmp(package, "org.tizen.smartsearch") == 0) {
1438 SEARCH_DEBUG_LOG("'smartsearch' does not appended");
1439 obj->mr_info.loop_cnt++;
1440 obj->mr_info.next_point++;
1441 SEARCH_FREE(sel_mem_info);
1442 return AIL_CB_RET_CONTINUE;
1445 sel_mem_info->launch_path = strdup(package);
1447 SEARCH_DEBUG_WARNING("package : null");
1450 ail_appinfo_get_str(appinfo, AIL_PROP_NAME_STR, &name);
1451 if ((name) && (strlen(name) > 0)) {
1452 sel_mem_info->text1 = strdup(search_markup_keyword(name, keyword, &is_word_in_str));
1454 SEARCH_DEBUG_WARNING("name : null");
1457 if(obj->mr_info.next_point == 0) {
1458 /* Set group title */
1459 result_info->group = search_add_genlist_item(SEARCH_GENLIST_GROUP,
1466 /********** END : set search result to sel_mem_info buf *************/
1468 gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM,
1470 ad->itc_pslist_1line_1icon,
1472 obj->gl_result_grp);
1473 result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item);
1474 obj->mr_info.next_point++;
1475 obj->mr_info.loop_cnt++;
1477 ret = AIL_CB_RET_CONTINUE;
1479 } else if (obj->mr_info.next_point ==
1480 obj->mr_info.offset + SEARCH_CATEGORY_LIST_MORE_CNT) {
1482 /* Check that only "SMARTSEARCH" is left in more result */
1483 if(obj->mr_info.next_point == obj->mr_info.result_cnt-1) {
1485 char *package = NULL;
1487 ail_appinfo_get_str(appinfo, AIL_PROP_PACKAGE_STR, &package);
1488 if ((package) && (strlen(package) > 0) && (strcmp(package, "org.tizen.smartsearch") == 0)) {
1489 SEARCH_DEBUG_LOG("Only 'SMARTSEARCH' is left in more result");
1490 return AIL_CB_RET_CANCEL;
1494 /* Set more title to genlist (under 'search all') */
1495 sel_mem_more = (struct search_item_more_sel *)calloc(1, sizeof(struct search_item_more_sel));
1496 sel_mem_more->obj = obj;
1498 result_info->more = search_add_genlist_item(SEARCH_GENLIST_MORE,
1502 obj->gl_result_grp);
1504 ret = AIL_CB_RET_CANCEL;
1506 SEARCH_DEBUG_WARNING
1507 ("__search_sql_menu_search_result_cb wrong index : %d",
1508 obj->mr_info.next_point);
1510 ret = AIL_CB_RET_CANCEL;
1518 int search_sql_menu_search_result_by_api(struct search_content_object *obj,
1519 int offset, int limit,
1522 struct search_genlist_info *result_info)
1526 struct appdata *ad = (struct appdata *)data;
1527 struct search_cb_data scd = {obj, ad, keyword, result_info};
1532 ail_filter_h filter = NULL;
1535 char *escape_added_keyword = NULL;
1536 SEARCH_MALLOC(escape_added_keyword, strlen(keyword)*2+5, char);
1537 memset(escape_added_keyword, 0x0, strlen(keyword)*2+5);
1538 search_sql_make_keyword_bind_value(keyword, escape_added_keyword, SEARCH_SQL_BIND_TYPE_DUPLEX);
1540 rc = ail_filter_new(&filter);
1541 if (rc != AIL_ERROR_OK) {
1542 SEARCH_DEBUG_WARNING("menu search - ail_filter_new error : %d", rc);
1543 ret = SEARCH_RET_SEARCH_FAIL;
1547 rc = ail_filter_add_str(filter, AIL_PROP_NAME_STR, escape_added_keyword);
1548 if (rc != AIL_ERROR_OK) {
1549 SEARCH_DEBUG_WARNING("menu search - ail_filter_add_str error : %d", rc);
1550 ret = SEARCH_RET_SEARCH_FAIL;
1554 rc = ail_filter_add_bool(filter, AIL_PROP_NODISPLAY_BOOL, false);
1555 if (rc != AIL_ERROR_OK) {
1556 SEARCH_DEBUG_WARNING("menu search - ail_filter_add_bool error : %d", rc);
1557 ret = SEARCH_RET_SEARCH_FAIL;
1561 rc = ail_filter_count_appinfo(filter, &cnt);
1562 if( rc != AIL_ERROR_OK) {
1563 SEARCH_DEBUG_WARNING("menu search - ail_filter_count_appinfo error : %d", rc);
1564 ret = SEARCH_RET_SEARCH_FAIL;
1568 SEARCH_DEBUG_LOG("ail search result : %d", cnt);
1569 obj->mr_info.result_cnt = cnt;
1572 obj->mr_info.loop_cnt = 0;
1573 rc = ail_filter_list_appinfo_foreach(filter, __search_sql_menu_search_result_cb, &scd);
1574 if( rc != AIL_ERROR_OK) {
1575 SEARCH_DEBUG_WARNING("menu search - ail_filter_list_appinfo_foreach error : %d", rc);
1576 ret = SEARCH_RET_SEARCH_FAIL;
1580 if (obj->mr_info.next_point == 0) {
1581 ret = SEARCH_RET_SEARCH_NONE;
1583 ret = SEARCH_RET_SEARCH_SUCCESS;
1586 ret = SEARCH_RET_SEARCH_NONE;
1591 ail_filter_destroy(filter);
1594 SEARCH_FREE(escape_added_keyword);
1600 bool __search_sql_browser_bookmark_result_cb(favorites_bookmark_entry_s *item, void *user_data)
1603 struct search_item_sel *sel_mem_info = NULL;
1606 bool is_word_in_str_main = false;
1607 bool is_word_in_str_sub = false;
1609 char* match_str_title = NULL;
1610 char* match_str_addr = NULL;
1612 struct search_cb_data_browser *scd = (struct search_cb_data_browser*)user_data;
1613 struct appdata *ad = scd->ad;
1614 struct search_content_object *obj = scd->obj;
1615 struct search_genlist_info *result_info = scd->result_info;
1616 char *keyword = scd->keyword;
1618 struct search_genlist_item_info *gen_item = NULL;
1619 struct search_more_result *info = scd->info;
1621 if (info->loop_cnt < info->next_point) {
1626 if (info->next_point < info->offset + SEARCH_CATEGORY_LIST_MORE_CNT) {
1627 char bookmark_id_str[MAX_LENGTH_PER_PATH] = {0,};
1629 /********** START : set search result to sel_mem_info buf ************/
1631 if (item != NULL && item->title) {
1632 match_str_title = strdup(search_markup_keyword(item->title, keyword, &is_word_in_str_main));
1635 if (item != NULL && item->address) {
1636 match_str_addr = strdup(search_markup_keyword(item->address, keyword, &is_word_in_str_sub));
1639 if (is_word_in_str_main == true || is_word_in_str_sub == true) {
1640 if (obj->gl_result_grp == NULL && result_info->group == NULL) {
1641 /* Set group title */
1642 result_info->group = search_add_genlist_item(SEARCH_GENLIST_GROUP,
1649 sel_mem_info = (struct search_item_sel *)calloc(1, sizeof(struct search_item_sel));
1651 if (!sel_mem_info) {
1652 SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", info->loop_cnt);
1656 sel_mem_info->type = obj->contents_type;
1657 snprintf(bookmark_id_str, MAX_LENGTH_PER_ID - 1, "%d", item->id);
1658 sel_mem_info->launch_param = strdup(bookmark_id_str);
1660 if (match_str_title) {
1661 sel_mem_info->text1 = strdup(match_str_title);
1664 if (match_str_addr) {
1665 sel_mem_info->text2 = strdup(match_str_addr);
1666 sel_mem_info->launch_path= strdup(item->address);
1669 if (obj->obj_icon_path) {
1670 sel_mem_info->icon1 = strdup(obj->obj_icon_path);
1673 sel_mem_info->icon2 = strdup(SEARCH_FAVORITE_ICON);
1674 gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM,
1676 ad->itc_pslist_2line_2icon_browser_bookmark,
1678 obj->gl_result_grp);
1679 result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item);
1680 scd->search_ret = true;
1683 SEARCH_FREE(match_str_title);
1684 SEARCH_FREE(match_str_addr);
1686 /********** END : set search result to sel_mem_info buf *************/
1691 } else if (info->next_point ==
1692 info->offset + SEARCH_CATEGORY_LIST_MORE_CNT) {
1693 info->offset = info->next_point;
1696 SEARCH_DEBUG_WARNING
1697 ("__search_sql_browser_bookmark_result_cb wrong index : %d",
1707 bool __search_sql_browser_history_result_cb(favorites_history_entry_s *item, void *user_data)
1710 struct search_item_sel *sel_mem_info = NULL;
1713 bool is_word_in_str_main = false;
1715 const char* match_str = NULL;
1717 struct search_cb_data_browser *scd = (struct search_cb_data_browser*)user_data;
1718 struct appdata *ad = scd->ad;
1719 struct search_content_object *obj = scd->obj;
1720 struct search_genlist_info *result_info = scd->result_info;
1721 char *keyword = scd->keyword;
1723 struct search_more_result *info = scd->info;
1724 struct search_genlist_item_info *gen_item = NULL;
1726 if (info->loop_cnt < info->next_point) {
1731 if (info->next_point < info->offset + SEARCH_CATEGORY_LIST_MORE_CNT) {
1732 char history_id_str[MAX_LENGTH_PER_PATH] = {0,};
1734 /********** START : set search result to sel_mem_info buf ************/
1736 if (item != NULL && item->address) {
1737 match_str = search_markup_keyword(item->address, keyword, &is_word_in_str_main);
1740 if (is_word_in_str_main != false ) {
1741 if (obj->gl_result_grp == NULL && result_info->group == NULL ) {
1742 /* Set group title */
1743 result_info->group = search_add_genlist_item(SEARCH_GENLIST_GROUP,
1750 sel_mem_info = (struct search_item_sel *)calloc(1, sizeof(struct search_item_sel));
1752 if (!sel_mem_info) {
1753 SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", info->loop_cnt);
1757 sel_mem_info->type = obj->contents_type;
1758 snprintf(history_id_str, MAX_LENGTH_PER_ID - 1, "%d", item->id);
1759 sel_mem_info->launch_param = strdup(history_id_str);
1761 if (obj->obj_icon_path) {
1762 sel_mem_info->icon1 = strdup(obj->obj_icon_path);
1765 if (item->address) {
1766 sel_mem_info->launch_path = strdup(item->address);
1769 sel_mem_info->text1 = strdup(match_str);
1771 gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM,
1773 ad->itc_pslist_1line_1icon_browser_history,
1775 obj->gl_result_grp);
1776 result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item);
1777 scd->search_ret = true;
1785 } else if (info->next_point ==
1786 info->offset + SEARCH_CATEGORY_LIST_MORE_CNT) {
1787 info->offset = info->next_point;
1790 SEARCH_DEBUG_WARNING
1791 ("__search_sql_browser_history_result_cb wrong index : %d",
1801 int search_sql_browser_search_result_by_api(struct search_content_object *obj,
1802 int offset, int limit,
1805 struct search_genlist_info *result_info)
1809 struct appdata *ad = (struct appdata *)data;
1810 struct search_cb_data_browser scd_browser = {obj, ad, keyword, result_info, NULL, false};
1811 struct search_cb_data_browser scd_history = {obj, ad, keyword, result_info, NULL, false};
1813 static struct search_more_result browser_result[2];
1814 struct search_item_more_sel *sel_mem_more = NULL;
1817 int bookmark_cnt = 0, history_cnt = 0;
1818 int bookmark_ret = 0, history_ret = 0;
1821 /* offset 0 means first search result, so we initialize struct */
1822 memset(browser_result, 0x0, sizeof(browser_result));
1824 favorites_bookmark_get_count(&browser_result[0].result_cnt);
1825 favorites_history_get_count(&browser_result[1].result_cnt);
1827 bookmark_cnt = browser_result[0].result_cnt;
1828 history_cnt = browser_result[1].result_cnt;
1829 browser_result[0].ad = browser_result[1].ad = ad;
1830 obj->gl_result_grp = NULL;
1832 if ( bookmark_cnt <= 0 && history_cnt <= 0 )
1833 return SEARCH_RET_SEARCH_NONE;
1835 bookmark_cnt = browser_result[0].result_cnt;
1836 history_cnt = browser_result[1].result_cnt;
1837 browser_result[0].loop_cnt = 0;
1838 browser_result[1].loop_cnt = 0;
1841 if (offset >= bookmark_cnt + history_cnt) {
1842 /* We need not to search */
1843 return SEARCH_RET_SEARCH_NONE;
1846 scd_browser.info = &browser_result[0];
1847 scd_history.info = &browser_result[1];
1850 if (bookmark_cnt > browser_result[0].next_point )
1851 bookmark_ret = favorites_bookmark_foreach(__search_sql_browser_bookmark_result_cb,
1853 if (history_cnt > browser_result[1].next_point && g_list_length(result_info->itemlist) < SEARCH_CATEGORY_LIST_MORE_CNT)
1854 history_ret = favorites_history_foreach(__search_sql_browser_history_result_cb,
1857 if (bookmark_ret == FAVORITES_ERROR_DB_FAILED
1858 && history_ret == FAVORITES_ERROR_DB_FAILED ) {
1859 ret = SEARCH_RET_SEARCH_FAIL;
1861 else if (scd_browser.search_ret == false && scd_history.search_ret == false){
1862 /* It means we can't get matched results */
1863 ret = SEARCH_RET_SEARCH_NONE;
1866 /* Make More button */
1867 if (browser_result[0].next_point < bookmark_cnt
1868 || browser_result[1].next_point < history_cnt) {
1869 sel_mem_more = (struct search_item_more_sel *)calloc(1, sizeof(struct search_item_more_sel));
1870 sel_mem_more->obj = obj;
1872 result_info->more = search_add_genlist_item(SEARCH_GENLIST_MORE,
1876 obj->gl_result_grp);
1880 obj->mr_info.next_point = browser_result[0].next_point
1881 + browser_result[1].next_point;
1882 ret = SEARCH_RET_SEARCH_SUCCESS;
1890 int search_sql_msg_search_result_by_api(struct search_content_object *obj,
1891 int offset, int limit,
1894 struct search_genlist_info *result_info)
1898 int ret = SEARCH_RET_SEARCH_FAIL;
1900 struct search_item_sel *sel_mem_info = NULL;
1901 struct search_item_more_sel *sel_mem_more = NULL;
1902 struct appdata *ad = (struct appdata *)data;
1903 struct search_genlist_item_info *gen_item = NULL;
1905 bool is_word_in_str;
1909 bool is_word_in_title = false;
1911 msg_error_t err = MSG_SUCCESS;
1913 msg_struct_list_s total_msgList;
1914 msg_struct_list_s msgList;
1915 msg_struct_t search_s = NULL;
1916 msg_struct_list_s *addr_list = NULL;
1918 search_s = msg_create_struct(MSG_STRUCT_SEARCH_CONDITION);
1920 err = msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_ALLBOX_ID);
1921 if (err != MSG_SUCCESS) {
1922 SEARCH_DEBUG_WARNING("Fail to make search struct : MSG_SEARCH_CONDITION_FOLDERID_INT");
1926 err = msg_set_int_value(search_s, MSG_SEARCH_CONDITION_MSGTYPE_INT, MSG_TYPE_INVALID);
1927 if (err != MSG_SUCCESS) {
1928 SEARCH_DEBUG_WARNING("Fail to make search struct : MSG_SEARCH_CONDITION_MSGTYPE_INT");
1932 err = msg_set_str_value(search_s, MSG_SEARCH_CONDITION_SEARCH_VALUE_STR, keyword, strlen(keyword));
1933 if (err != MSG_SUCCESS) {
1934 SEARCH_DEBUG_WARNING("Fail to make search struct : MSG_SEARCH_CONDITION_SEARCH_VALUE_STR");
1938 err = msg_search_message(ad->msg_handle, search_s, 0, 0, &total_msgList);
1939 if (err != MSG_SUCCESS && err != MSG_ERR_DB_NORECORD) {
1940 SEARCH_DEBUG_WARNING("msg_search_message is failed : %d", err);
1944 err = msg_search_message(ad->msg_handle, search_s, offset, limit, &msgList);
1946 if (err != MSG_SUCCESS && err != MSG_ERR_DB_NORECORD) {
1947 SEARCH_DEBUG_WARNING("msg_search_message is failed : %d", err);
1951 SEARCH_DEBUG_LOG("Matched Total Message : %d", total_msgList.nCount);
1952 SEARCH_DEBUG_LOG("Message Count : %d", msgList.nCount);
1954 if (msgList.nCount <= 0) {
1955 SEARCH_DEBUG_WARNING("no msg search result");
1956 ret = SEARCH_RET_SEARCH_NONE;
1959 /* Set group title */
1961 /* Set group title */
1962 result_info->group = search_add_genlist_item(SEARCH_GENLIST_GROUP,
1969 /********** START : set search result to sel_mem_info buf ************/
1971 for (i = 0; i < msgList.nCount; i++) {
1972 const char *text_1line = NULL;
1973 const char *markup_keyword = NULL;
1974 char *img_path = NULL;
1977 int contact_id = -1;
1978 int message_id = -1;
1980 char subject[MAX_SUBJECT_LEN] = {0};
1981 char str_number[MAX_ADDRESS_VAL_LEN] = {0,};
1982 char str_name[MAX_DISPLAY_NAME_LEN] = {0,};
1983 char msg_text[MAX_MSG_TEXT_LEN] = {0,};
1984 char msg_id_str[MAX_LENGTH_PER_PATH] = {0,};
1986 err = msg_get_int_value(msgList.msg_struct_info[i], MSG_MESSAGE_TYPE_INT, &msg_type);
1987 if (err != MSG_SUCCESS) {
1988 SEARCH_DEBUG_WARNING("Fail to make search struct : MSG_MESSAGE_TYPE_INT %d", err);
1992 SEARCH_DEBUG_LOG("mms : %d", msg_type);
1995 sel_mem_info = (struct search_item_sel *)calloc(1,sizeof(struct search_item_sel));
1996 if (!sel_mem_info) {
1997 SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", i);
2001 sel_mem_info->type = obj->contents_type;;
2003 err = msg_get_int_value(msgList.msg_struct_info[i], MSG_MESSAGE_ID_INT, &message_id);
2004 if (err != MSG_SUCCESS) {
2005 SEARCH_DEBUG_WARNING("Fail to make search struct : MSG_MESSAGE_ID_INT %d", err);
2009 snprintf(msg_id_str, MAX_LENGTH_PER_ID - 1, "%d", message_id);
2010 sel_mem_info->launch_param= strdup(msg_id_str);
2012 /* Set 1st line string */
2013 if (msg_type == MSG_TYPE_MMS || msg_type == MSG_TYPE_MMS_JAVA || msg_type == MSG_TYPE_MMS_NOTI) {
2015 err = msg_get_str_value(msgList.msg_struct_info[i], MSG_MESSAGE_SUBJECT_STR,
2016 subject, MAX_SUBJECT_LEN);
2018 if (err != MSG_SUCCESS) {
2019 SEARCH_DEBUG_WARNING("Fail to get sms context %d", err);
2023 text_1line = subject;
2024 markup_keyword = search_markup_keyword(text_1line, keyword,&is_word_in_title);
2026 if (!is_word_in_title) {
2027 memset(msg_text, 0x00, sizeof(msg_text));
2028 err = msg_get_str_value(msgList.msg_struct_info[i],
2029 MSG_MESSAGE_MMS_TEXT_STR,
2033 if (err != MSG_SUCCESS) {
2034 SEARCH_DEBUG_WARNING("Fail to get mms context %d", err);
2038 text_1line = msg_text;
2040 markup_keyword = search_markup_keyword(text_1line,
2045 if ((text_1line) && (strlen(text_1line) > 0 )) {
2046 sel_mem_info->text1 = strdup(markup_keyword);
2048 sel_mem_info->text1 = strdup("Unknown");
2050 } else if(msg_type == MSG_TYPE_SMS) {
2052 err = msg_get_str_value(msgList.msg_struct_info[i],
2053 MSG_MESSAGE_SMS_DATA_STR,
2057 if (err != MSG_SUCCESS) {
2058 SEARCH_DEBUG_WARNING("Fail to get sms context %d", err);
2062 text_1line = msg_text;
2064 markup_keyword = search_markup_keyword(text_1line,
2067 SEARCH_DEBUG_LOG("1st string : %s", text_1line);
2069 if ((text_1line) && (strlen(text_1line) > 0)) {
2070 sel_mem_info->text1 = strdup(markup_keyword);
2074 err = msg_get_list_handle(msgList.msg_struct_info[i],
2075 MSG_MESSAGE_ADDR_LIST_STRUCT,
2076 (void **)&addr_list);
2078 if (err != MSG_SUCCESS) {
2079 SEARCH_DEBUG_WARNING("Fail to get address list handle! %d", err);
2083 /* Set 2nd line string */
2084 for ( j=0; j<addr_list->nCount; j++) {
2085 memset(str_number, 0, sizeof(str_number));
2086 memset(str_name, 0, sizeof(str_name));
2088 is_word_in_str = false;
2090 /* First We set text_2line to first address data */
2091 err = msg_get_str_value(addr_list->msg_struct_info[j],
2092 MSG_ADDRESS_INFO_ADDRESS_VALUE_STR,
2094 MAX_ADDRESS_VAL_LEN);
2096 if (err != MSG_SUCCESS) {
2097 SEARCH_DEBUG_WARNING("Fail to get data! : MSG_ADDRESS_INFO_DISPLAYNAME_STR %d", err);
2101 err = msg_get_str_value(addr_list->msg_struct_info[j],
2102 MSG_ADDRESS_INFO_DISPLAYNAME_STR,
2104 MAX_DISPLAY_NAME_LEN);
2106 if (err != MSG_SUCCESS) {
2107 SEARCH_DEBUG_WARNING("Fail to get data! : MSG_ADDRESS_INFO_ADDRESS_VALUE_STR %d", err);
2111 err = msg_get_int_value(addr_list->msg_struct_info[j],
2112 MSG_ADDRESS_INFO_CONTACT_ID_INT,
2115 if (err != MSG_SUCCESS) {
2116 SEARCH_DEBUG_WARNING("Fail to get data! : MSG_ADDRESS_INFO_CONTACT_ID_INT %d", err);
2120 /* Set text_2line */
2121 markup_keyword = search_markup_keyword(str_number, keyword, &is_word_in_str);
2123 if (strlen(str_name) > 0) {
2124 sel_mem_info->text2 = strdup(str_name);
2125 } else if(strlen(str_number) > 0) {
2126 sel_mem_info->text2 = strdup(markup_keyword);
2128 sel_mem_info->text2 = strdup("Unknown");
2131 /* Check Whether Thumbnail Image exist or not */
2132 if (contact_id > -1) {
2133 contacts_query_h query = NULL;
2134 contacts_filter_h filter = NULL;
2135 contacts_list_h list = NULL;
2137 unsigned int count = 0;
2138 ret = contacts_connect2();
2140 if (ret != CONTACTS_ERROR_NONE) {
2141 SEARCH_DEBUG_WARNING("Fail to connect contact service!");
2142 if (obj->obj_icon_path != NULL) {
2143 sel_mem_info->icon1 = strdup(obj->obj_icon_path);
2147 contacts_query_create(_contacts_person_number._uri, &query);
2148 contacts_filter_create(_contacts_person_number._uri, &filter);
2149 contacts_filter_add_int(filter, _contacts_person.id, CONTACTS_MATCH_EQUAL,
2151 contacts_query_set_filter(query, filter);
2152 contacts_db_get_records_with_query(query, 0, 0, &list);
2153 contacts_list_get_count(list, &count);
2156 contacts_record_h record;
2157 contacts_list_get_current_record_p(list, &record);
2158 contacts_record_get_str_p(record, _contacts_person.image_thumbnail_path, &img_path);
2161 if (img_path != NULL) {
2162 sel_mem_info->icon1 = strdup(img_path);
2163 } else if (obj->obj_icon_path != NULL) {
2164 sel_mem_info->icon1 = strdup(obj->obj_icon_path);
2167 contacts_filter_destroy(filter);
2171 contacts_query_destroy(query);
2174 contacts_list_destroy(list, true);
2177 ret = contacts_disconnect2();
2180 if (obj->obj_icon_path) {
2181 sel_mem_info->icon1 = strdup(obj->obj_icon_path);
2185 if ((is_word_in_title) || (is_word_in_str)) {
2190 gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM,
2192 ad->itc_pslist_2line_1icon,
2194 obj->gl_result_grp);
2196 result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item);
2199 msg_release_list_struct(&msgList);
2200 msg_release_list_struct(&total_msgList);
2202 /* Set more title to genlist (under 'search all') */
2203 if (total_msgList.nCount > offset + i) {
2204 obj->mr_info.next_point = offset + i;
2206 sel_mem_more = (struct search_item_more_sel *)
2207 calloc(1,sizeof(struct search_item_more_sel));
2208 sel_mem_more->obj = obj;
2210 result_info->more = search_add_genlist_item(SEARCH_GENLIST_MORE,
2214 obj->gl_result_grp);
2217 ret = SEARCH_RET_SEARCH_SUCCESS;
2221 if (search_s != NULL) {
2222 msg_release_struct(&search_s);
2228 void search_sql_update_result_object(struct search_content_object* result_obj, sqlite3* db_handle, sqlite3_stmt** db_sql)
2234 sqlite3_stmt *sql_stmt = db_sql[SEARCH_STMT_UPDATE_OBJECT_INFO];
2235 SEARCH_RET_IF(sql_stmt==NULL);
2237 search_sql_bind_text(db_handle, sql_stmt, 1, result_obj->name);
2238 search_sql_bind_int(db_handle, sql_stmt, 2, result_obj->string_type);
2239 search_sql_bind_int(db_handle, sql_stmt, 3, result_obj->visible);
2240 search_sql_bind_int(db_handle, sql_stmt, 4, result_obj->order);
2241 search_sql_bind_int(db_handle, sql_stmt, 5, result_obj->contents_type);
2242 search_sql_bind_int(db_handle, sql_stmt, 6, result_obj->category_type);
2243 search_sql_bind_text(db_handle, sql_stmt, 7, result_obj->def_pkg_name);
2244 search_sql_bind_int(db_handle, sql_stmt, 8, result_obj->contents_type);
2246 rc = sqlite3_step(sql_stmt);
2248 if (rc == SQLITE_OK)
2249 SEARCH_DEBUG_LOG("INSERT STEP SUCCESS");
2251 search_sql_stmt_init(sql_stmt);