From 5d2b6487b69b0ec4b725ba0747751b801dadc52b Mon Sep 17 00:00:00 2001 From: Sehong Na Date: Sat, 31 May 2014 12:56:02 +0900 Subject: Initialize Tizen 2.3 --- AUTHORS | 2 + CMakeLists.txt | 111 ++ LICENSE.Flora | 206 +++ NOTICE | 5 + data/groups/search_custom_ctxpopup_item.edc | 256 +++ data/groups/search_custom_style.edc | 82 + data/groups/search_result.edc | 177 +++ data/images/B10_btn_icon_Phone.png | Bin 0 -> 3330 bytes data/images/B10_btn_icon_Phone_press.png | Bin 0 -> 3330 bytes data/images/B10_icon_list_favorite.png | Bin 0 -> 3631 bytes data/images/B10_icon_list_memorycard.png | Bin 0 -> 3393 bytes data/images/org.tizen.smartsearch.png | Bin 0 -> 15506 bytes data/org.tizen.smartsearch.xml | 67 + data/smartsearch-color.edc | 21 + data/smartsearch.edc | 26 + data/smartsearch.ini | 2 + debian/changelog | 17 + debian/compat | 1 + debian/control | 44 + debian/copyright | 0 debian/org.tizen.smartsearch.install.in | 4 + debian/org.tizen.smartsearch.postinst.in | 26 + debian/rules | 122 ++ include/common_util.h | 32 + include/ps_app_interface.h | 39 + include/ps_debug_util.h | 201 +++ include/ps_makeupviews.h | 41 + include/ps_searcher.h | 68 + include/search_bar.h | 42 + include/smartsearch.h | 173 ++ include/smartsearch_define.h | 204 +++ org.tizen.smartsearch.manifest | 11 + org.tizen.smartsearch.rule | 204 +++ packaging/org.tizen.smartsearch.spec | 100 ++ po/CMakeLists.txt | 76 + po/POTFILES.in | 10 + po/ar.po | 15 + po/az.po | 15 + po/bg.po | 15 + po/ca.po | 15 + po/cs.po | 15 + po/da.po | 15 + po/de_DE.po | 15 + po/el_GR.po | 15 + po/en.po | 15 + po/en_PH.po | 15 + po/en_US.po | 15 + po/es_ES.po | 15 + po/es_MX.po | 15 + po/es_US.po | 15 + po/et.po | 15 + po/eu.po | 15 + po/fi.po | 15 + po/fr_CA.po | 15 + po/fr_FR.po | 15 + po/ga.po | 15 + po/gl.po | 15 + po/hi.po | 15 + po/hr.po | 15 + po/hu.po | 15 + po/hy.po | 15 + po/is.po | 15 + po/it_IT.po | 15 + po/ja_JP.po | 15 + po/ka.po | 15 + po/kk.po | 15 + po/ko_KR.po | 15 + po/lt.po | 15 + po/lv.po | 15 + po/mk.po | 15 + po/nb.po | 15 + po/nl_NL.po | 15 + po/pl.po | 15 + po/pt_BR.po | 15 + po/pt_PT.po | 15 + po/ro.po | 15 + po/ru_RU.po | 15 + po/sk.po | 15 + po/sl.po | 15 + po/sr.po | 15 + po/sv.po | 15 + po/tr_TR.po | 15 + po/uk.po | 15 + po/uz.po | 15 + po/zh_CN.po | 15 + po/zh_HK.po | 15 + po/zh_SG.po | 15 + po/zh_TW.po | 15 + src/common_util.cpp | 433 +++++ src/ps_app_interface.cpp | 761 +++++++++ src/ps_makeupviews.cpp | 1245 +++++++++++++++ src/ps_searcher.cpp | 2256 +++++++++++++++++++++++++++ src/search_bar.cpp | 573 +++++++ src/smartsearch.cpp | 853 ++++++++++ 94 files changed, 9271 insertions(+) create mode 100755 AUTHORS create mode 100755 CMakeLists.txt create mode 100755 LICENSE.Flora create mode 100755 NOTICE create mode 100755 data/groups/search_custom_ctxpopup_item.edc create mode 100755 data/groups/search_custom_style.edc create mode 100755 data/groups/search_result.edc create mode 100644 data/images/B10_btn_icon_Phone.png create mode 100755 data/images/B10_btn_icon_Phone_press.png create mode 100755 data/images/B10_icon_list_favorite.png create mode 100755 data/images/B10_icon_list_memorycard.png create mode 100755 data/images/org.tizen.smartsearch.png create mode 100755 data/org.tizen.smartsearch.xml create mode 100755 data/smartsearch-color.edc create mode 100755 data/smartsearch.edc create mode 100755 data/smartsearch.ini create mode 100755 debian/changelog create mode 100755 debian/compat create mode 100755 debian/control create mode 100644 debian/copyright create mode 100755 debian/org.tizen.smartsearch.install.in create mode 100755 debian/org.tizen.smartsearch.postinst.in create mode 100755 debian/rules create mode 100755 include/common_util.h create mode 100755 include/ps_app_interface.h create mode 100755 include/ps_debug_util.h create mode 100755 include/ps_makeupviews.h create mode 100755 include/ps_searcher.h create mode 100755 include/search_bar.h create mode 100755 include/smartsearch.h create mode 100755 include/smartsearch_define.h create mode 100644 org.tizen.smartsearch.manifest create mode 100644 org.tizen.smartsearch.rule create mode 100755 packaging/org.tizen.smartsearch.spec create mode 100755 po/CMakeLists.txt create mode 100755 po/POTFILES.in create mode 100755 po/ar.po create mode 100755 po/az.po create mode 100755 po/bg.po create mode 100755 po/ca.po create mode 100755 po/cs.po create mode 100755 po/da.po create mode 100755 po/de_DE.po create mode 100755 po/el_GR.po create mode 100755 po/en.po create mode 100755 po/en_PH.po create mode 100755 po/en_US.po create mode 100755 po/es_ES.po create mode 100755 po/es_MX.po create mode 100755 po/es_US.po create mode 100755 po/et.po create mode 100755 po/eu.po create mode 100755 po/fi.po create mode 100755 po/fr_CA.po create mode 100755 po/fr_FR.po create mode 100755 po/ga.po create mode 100755 po/gl.po create mode 100755 po/hi.po create mode 100755 po/hr.po create mode 100755 po/hu.po create mode 100755 po/hy.po create mode 100755 po/is.po create mode 100755 po/it_IT.po create mode 100755 po/ja_JP.po create mode 100755 po/ka.po create mode 100755 po/kk.po create mode 100755 po/ko_KR.po create mode 100755 po/lt.po create mode 100755 po/lv.po create mode 100755 po/mk.po create mode 100755 po/nb.po create mode 100755 po/nl_NL.po create mode 100755 po/pl.po create mode 100755 po/pt_BR.po create mode 100755 po/pt_PT.po create mode 100755 po/ro.po create mode 100755 po/ru_RU.po create mode 100755 po/sk.po create mode 100755 po/sl.po create mode 100755 po/sr.po create mode 100755 po/sv.po create mode 100755 po/tr_TR.po create mode 100755 po/uk.po create mode 100755 po/uz.po create mode 100755 po/zh_CN.po create mode 100755 po/zh_HK.po create mode 100755 po/zh_SG.po create mode 100755 po/zh_TW.po create mode 100755 src/common_util.cpp create mode 100755 src/ps_app_interface.cpp create mode 100755 src/ps_makeupviews.cpp create mode 100755 src/ps_searcher.cpp create mode 100755 src/search_bar.cpp create mode 100755 src/smartsearch.cpp diff --git a/AUTHORS b/AUTHORS new file mode 100755 index 0000000..c7aa2f2 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,2 @@ +Junghyun Kim +Mijin Hwang diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 0000000..8c25cef --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,111 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(smartsearch CXX) + +SET(SMARTSEARCH_PKG_NAME org.tizen.smartsearch) +SET(DATADIR "/opt/apps/${SMARTSEARCH_PKG_NAME}/data") + +SET(SRCS + src/search_bar.cpp + src/smartsearch.cpp + src/ps_searcher.cpp + src/ps_makeupviews.cpp + src/ps_app_interface.cpp + src/common_util.cpp +) + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include ) + +INCLUDE(FindPkgConfig) +pkg_check_modules(pkgs REQUIRED + appcore-efl + aul + db-util + dlog + elementary + ecore + ecore-imf + ecore-input + ecore-x + ui-gadget-1 + utilX + x11 + memo + icu-i18n + email-service + msg-service + libsoup-2.4 + json-glib-1.0 + glib-2.0 + capi-appfw-application + capi-appfw-app-manager + capi-web-favorites + capi-content-media-content + contacts-service2 + calendar-service2 + libxml-2.0 +) + + +FOREACH(flag ${pkgs_CFLAGS}) + SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} ${flag}") +ENDFOREACH(flag) + +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXXFLAGS} -fpie -Wall") +SET(PREFIX ${CMAKE_INSTALL_PREFIX}) +SET(BINDIR "${PREFIX}/bin") +SET(RESDIR "${PREFIX}/res") +SET(DATADIR "/opt/usr/apps/${SMARTSEARCH_PKG_NAME}/data") +SET(DBDIR "${DATADIR}") +SET(LOCALEDIR "${RESDIR}/locale") +SET(ICONDIR "/usr/share/icons/default/small") +SET(EDJDIR "${RESDIR}/edje") + +ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"") +ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"") +ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"") +ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"") +ADD_DEFINITIONS("-DICONDIR=\"${ICONDIR}\"") +ADD_DEFINITIONS("-DEDJDIR=\"${EDJDIR}\"") +ADD_DEFINITIONS("-DDBDIR=\"${DATADIR}\"") +ADD_DEFINITIONS("-DSEARCHPKG=\"${SMARTSEARCH_PKG_NAME}\"") + +ADD_DEFINITIONS("-D__ENABLE_DEBUG_UTIL") +ADD_DEFINITIONS("-D__ENABLE_PLATFORM_DEBUG") +#ADD_DEFINITIONS("-D__ENABLE_TOP_BACK_BTN") + +FIND_PROGRAM(UNAME NAMES uname) +EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH") +IF("${ARCH}" STREQUAL "arm") + ADD_DEFINITIONS("-DTARGET") + MESSAGE("add -DTARGET") +ENDIF("${ARCH}" STREQUAL "arm") + +SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie") + +ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS}) +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS}) + +ADD_CUSTOM_TARGET(${PROJECT_NAME}.edj + COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/data/images + ${CMAKE_SOURCE_DIR}/data/${PROJECT_NAME}.edc ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.edj + DEPENDS ${CMAKE_SOURCE_DIR}/data/${PROJECT_NAME}.edc +) +ADD_DEPENDENCIES(${PROJECT_NAME} ${PROJECT_NAME}.edj) + +INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin) +INSTALL(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.edj DESTINATION res/edje) +INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/images/ DESTINATION res/icons FILES_MATCHING PATTERN "*.png") +INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/images/ DESTINATION res/icons FILES_MATCHING PATTERN "*.jpg") + +# install desktop file & icon +SET(PREFIX ${CMAKE_INSTALL_PREFIX}) +#CONFIGURE_FILE(data/${SMARTSEARCH_PKG_NAME}.desktop.in ${SMARTSEARCH_PKG_NAME}.desktop) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/data/${SMARTSEARCH_PKG_NAME}.xml DESTINATION /usr/share/packages/) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/data/images/${SMARTSEARCH_PKG_NAME}.png DESTINATION ${ICONDIR}) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/org.tizen.smartsearch.rule DESTINATION /opt/etc/smack/accesses.d) + +#install application HOME directory +INSTALL(DIRECTORY DESTINATION ${DATADIR}) + +# i18n +ADD_SUBDIRECTORY(po) diff --git a/LICENSE.Flora b/LICENSE.Flora new file mode 100755 index 0000000..571fe79 --- /dev/null +++ b/LICENSE.Flora @@ -0,0 +1,206 @@ +Flora License + +Version 1.1, April, 2013 + +http://floralicense.org/license/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, +and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by +the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and +all other entities that control, are controlled by, or are +under common control with that entity. For the purposes of +this definition, "control" means (i) the power, direct or indirect, +to cause the direction or management of such entity, +whether by contract or otherwise, or (ii) ownership of fifty percent (50%) +or more of the outstanding shares, or (iii) beneficial ownership of +such entity. + +"You" (or "Your") shall mean an individual or Legal Entity +exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation source, +and configuration files. + +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but +not limited to compiled object code, generated documentation, +and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, +made available under the License, as indicated by a copyright notice +that is included in or attached to the work (an example is provided +in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, +that is based on (or derived from) the Work and for which the editorial +revisions, annotations, elaborations, or other modifications represent, +as a whole, an original work of authorship. For the purposes of this License, +Derivative Works shall not include works that remain separable from, +or merely link (or bind by name) to the interfaces of, the Work and +Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original +version of the Work and any modifications or additions to that Work or +Derivative Works thereof, that is intentionally submitted to Licensor +for inclusion in the Work by the copyright owner or by an individual or +Legal Entity authorized to submit on behalf of the copyright owner. +For the purposes of this definition, "submitted" means any form of +electronic, verbal, or written communication sent to the Licensor or +its representatives, including but not limited to communication on +electronic mailing lists, source code control systems, and issue +tracking systems that are managed by, or on behalf of, the Licensor +for the purpose of discussing and improving the Work, but excluding +communication that is conspicuously marked or otherwise designated +in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity +on behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +"Tizen Certified Platform" shall mean a software platform that complies +with the standards set forth in the Tizen Compliance Specification +and passes the Tizen Compliance Tests as defined from time to time +by the Tizen Technical Steering Group and certified by the Tizen +Association or its designated agent. + +2. Grant of Copyright License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the +Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +(except as stated in this section) patent license to make, have made, +use, offer to sell, sell, import, and otherwise transfer the Work +solely as incorporated into a Tizen Certified Platform, where such +license applies only to those patent claims licensable by such +Contributor that are necessarily infringed by their Contribution(s) +alone or by combination of their Contribution(s) with the Work solely +as incorporated into a Tizen Certified Platform to which such +Contribution(s) was submitted. If You institute patent litigation +against any entity (including a cross-claim or counterclaim +in a lawsuit) alleging that the Work or a Contribution incorporated +within the Work constitutes direct or contributory patent infringement, +then any patent licenses granted to You under this License for that +Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the +Work or Derivative Works thereof pursuant to the copyright license +above, in any medium, with or without modifications, and in Source or +Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works + a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating + that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that + You distribute, all copyright, patent, trademark, and attribution + notices from the Source form of the Work, excluding those notices + that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "NOTICE" text file as part of its distribution, + then any Derivative Works that You distribute must include a readable + copy of the attribution notices contained within such NOTICE file, + excluding those notices that do not pertain to any part of + the Derivative Works, in at least one of the following places: + within a NOTICE text file distributed as part of the Derivative Works; + within the Source form or documentation, if provided along with the + Derivative Works; or, within a display generated by the Derivative Works, + if and wherever such third-party notices normally appear. + The contents of the NOTICE file are for informational purposes only + and do not modify the License. You may add Your own attribution notices + within Derivative Works that You distribute, alongside or as an addendum + to the NOTICE text from the Work, provided that such additional attribution + notices cannot be construed as modifying the License. You may add Your own + copyright statement to Your modifications and may provide additional or + different license terms and conditions for use, reproduction, or + distribution of Your modifications, or for any such Derivative Works + as a whole, provided Your use, reproduction, and distribution of + the Work otherwise complies with the conditions stated in this License + and your own copyright statement or terms and conditions do not conflict + the conditions stated in the License including section 3. + +5. Submission of Contributions. Unless You explicitly state otherwise, +any Contribution intentionally submitted for inclusion in the Work +by You to the Licensor shall be under the terms and conditions of +this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify +the terms of any separate license agreement you may have executed +with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, +except as required for reasonable and customary use in describing the +origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or +agreed to in writing, Licensor provides the Work (and each +Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied, including, without limitation, any warranties or conditions +of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any +risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, +whether in tort (including negligence), contract, or otherwise, +unless required by applicable law (such as deliberate and grossly +negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, +incidental, or consequential damages of any character arising as a +result of this License or out of the use or inability to use the +Work (including but not limited to damages for loss of goodwill, +work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses), even if such Contributor +has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing +the Work or Derivative Works thereof, You may choose to offer, +and charge a fee for, acceptance of support, warranty, indemnity, +or other liability obligations and/or rights consistent with this +License. However, in accepting such obligations, You may act only +on Your own behalf and on Your sole responsibility, not on behalf +of any other Contributor, and only if You agree to indemnify, +defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason +of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Flora License to your work + +To apply the Flora License to your work, attach the following +boilerplate notice, with the fields enclosed by brackets "[]" +replaced with your own identifying information. (Don't include +the brackets!) The text should be enclosed in the appropriate +comment syntax for the file format. We also recommend that a +file or class name and description of purpose be included on the +same "printed page" as the copyright notice for easier +identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Flora License, Version 1.1 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://floralicense.org/license/ + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/NOTICE b/NOTICE new file mode 100755 index 0000000..01a38b4 --- /dev/null +++ b/NOTICE @@ -0,0 +1,5 @@ +Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. +Except as noted, this software is licensed under Flora License, Version 1.1 +Please, see the LICENSE file for Flora License, Version 1.1 terms and conditions. + + diff --git a/data/groups/search_custom_ctxpopup_item.edc b/data/groups/search_custom_ctxpopup_item.edc new file mode 100755 index 0000000..ebf1724 --- /dev/null +++ b/data/groups/search_custom_ctxpopup_item.edc @@ -0,0 +1,256 @@ +/* + * Copyright 2012-2013 Samsung Electronics Co., Ltd/ + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +/////////////////////////////////////////////////////////////////////////////////////// +// +// ctxpopup +// +/////////////////////////////////////////////////////////////////////////////////////// + +#define CTXPOPUP_SHADOW_PADDING 10 +#define CTXPOPUP_FRAME_CORNER_SIZE 4 4 +#define CTXPOPUP_FONT_COLOR 0 0 0 255 +#define CTXPOPUP_CLICKED_FONT_COLOR 255 255 255 255 +#define CTXPOPUP_ITEM_DISABLED_COLOR 200 200 200 127 +#define CTXPOPUP_LIST_PADDING 10 +#define CTXPOPUP_LIST_SHADOW_PADDING 3 + +#define CTXPOPUP_WIDTH_MIN_INC 386 +#define CTXPOPUP_CONTENT_PADDING 4 +#define CTXPOPUP_FRAME_CORNER_ARROW_PADDING 20 +#define CTXPOPUP_BG_COLOR_INC 0 0 0 0 +#define CTXPOPUP_BG_PRESS_COLOR_INC 42 137 194 255 +#define CTXPOPUP_SEPARATOR_PXLINE_SIZE_INC 1 +#define CTXPOPUP_SEPARATOR_PADDING_INC 20 +#define CTXPOPUP_SEPARATOR_COLOR_INC 45 45 45 255 +#define CTXPOPUP_SEPARATOR2_COLOR_INC 91 91 91 255 +#define CTXPOPUP_HORIZONTAL_SEPARATOR_1_COLOR_INC 45 45 45 255 +#define CTXPOPUP_HORIZONTAL_SEPARATOR_2_COLOR_INC 91 91 91 255 +#define CTXPOPUP_HORIZONTAL_SEPARATOR_MIN_SIZE_INC 1 74 +#define CTXPOPUP_HORIZONTAL_SEPARATOR_MAX_SIZE_INC 1 74 +#define CTXPOPUP_TP_BG_COLOR_INC 7 180 211 255 +#define CTXPOPUP_ITEM_TEXT_SIZE_INC 40 +#define CTXPOPUP_ITEM_MAIN_TEXT_SIZE_INC 32 +#define CTXPOPUP_ITEM_HEIGHT_INC 110 +#define CTXPOPUP_ITEM_HORIZONTAL_WIDTH_INC 128 +#define CTXPOPUP_ITEM_HORIZONTAL_HEIGHT_INC 96 +#define CTXPOPUP_ICON_WIDTH_INC 64 +#define CTXPOPUP_ICON_HEIGHT_INC 64 +#define CTXPOPUP_ICON_HORIZONTAL_WIDTH_INC 128 +#define CTXPOPUP_ICON_HORIZONTAL_HEIGHT_INC 96 +#define CTXPOPUP_ARROW_SIZE_INC 48 48 +#define CTXPOPUP_VERTICAL_ARROW_SIZE_INC 40 30 +#define CTXPOPUP_HORIZONTAL_ARROW_SIZE_INC 30 40 +#define CTXPOPUP_ITEM_TEXT_PADDING_INC 20 +#define CTXPOPUP_ITEM_ICON_PADDING_INC 16 + + +/////////////////////////////////////////////////////////////////////////////// + group { + name: "elm/ctxpopup/icon_style_item/default"; + parts { + part { + name: "event_blocker"; + mouse_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + part { + name: "bg"; + scale: 1; + mouse_events: 0; + type: RECT; + description { + state: "default" 0.0; + color: CTXPOPUP_BG_COLOR_INC; + visible: 1; + min: CTXPOPUP_ITEM_HORIZONTAL_WIDTH_INC (CTXPOPUP_ITEM_HORIZONTAL_HEIGHT_INC-(CTXPOPUP_CONTENT_PADDING*2)); + max: CTXPOPUP_ITEM_HORIZONTAL_WIDTH_INC (CTXPOPUP_ITEM_HORIZONTAL_HEIGHT_INC-(CTXPOPUP_CONTENT_PADDING*2)); + } + description { + state: "clicked" 0.0; + color: CTXPOPUP_BG_PRESS_COLOR_INC; + visible: 1; + } + } + part { + name: "left_padding"; + scale: 1; + description { + min: ((CTXPOPUP_ITEM_HORIZONTAL_WIDTH_INC-CTXPOPUP_ICON_HORIZONTAL_WIDTH_INC)/2) (CTXPOPUP_ITEM_HORIZONTAL_HEIGHT_INC-(CTXPOPUP_CONTENT_PADDING*2)); + max: ((CTXPOPUP_ITEM_HORIZONTAL_WIDTH_INC-CTXPOPUP_ICON_HORIZONTAL_WIDTH_INC)/2) (CTXPOPUP_ITEM_HORIZONTAL_HEIGHT_INC-(CTXPOPUP_CONTENT_PADDING*2)); + visible: 1; + align: 0 0; + color: 0 255 0 255; + fixed: 1 1; + } + } + part { + name: "separator1"; + mouse_events: 0; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: CTXPOPUP_SEPARATOR_COLOR_INC; + align: 0 0.5; + min: CTXPOPUP_HORIZONTAL_SEPARATOR_MIN_SIZE_INC; + max: CTXPOPUP_HORIZONTAL_SEPARATOR_MAX_SIZE_INC; + visible: 1; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "separator2"; + mouse_events: 1; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: CTXPOPUP_SEPARATOR2_COLOR_INC; + rel1 { relative: 1.0 0.0; to_x: "separator1"; } + align: 0 0.5; + min: CTXPOPUP_HORIZONTAL_SEPARATOR_MIN_SIZE_INC; + max: CTXPOPUP_HORIZONTAL_SEPARATOR_MAX_SIZE_INC; + visible: 0; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "elm.swallow.icon"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + min: CTXPOPUP_ICON_HORIZONTAL_WIDTH_INC CTXPOPUP_ICON_HORIZONTAL_HEIGHT_INC; + max: CTXPOPUP_ICON_HORIZONTAL_WIDTH_INC CTXPOPUP_ICON_HORIZONTAL_HEIGHT_INC; + align: 0.5 0.5; + aspect: 1.0 1.0; + rel1 { relative: 1 0; to_x: "left_padding"; } + rel2 { relative: 0 1; to_x: "right_padding"; } + } + } + part { + name: "right_padding"; + scale: 1; + description { + min: ((CTXPOPUP_ITEM_HORIZONTAL_WIDTH_INC-CTXPOPUP_ICON_HORIZONTAL_WIDTH_INC)/2) (CTXPOPUP_ITEM_HORIZONTAL_HEIGHT_INC-(CTXPOPUP_CONTENT_PADDING*2)); + max: ((CTXPOPUP_ITEM_HORIZONTAL_WIDTH_INC-CTXPOPUP_ICON_HORIZONTAL_WIDTH_INC)/2) (CTXPOPUP_ITEM_HORIZONTAL_HEIGHT_INC-(CTXPOPUP_CONTENT_PADDING*2)); + visible: 1; + color: 0 0 255 255; + align: 1 1; + fixed: 1 1; + } + } + part { + name: "over1"; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + } + } + part { + name: "over2"; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + } + } + part { + name: "disclip"; + type: RECT; + description { + state: "default" 0.0; + visible: 0; + } + description { + state: "disabled" 0.0; + visible: 1; + color: CTXPOPUP_ITEM_DISABLED_COLOR; + } + } + } + programs { + program { + name: "default"; + signal: "elm,state,default"; + source: "elm"; + script { + set_state(PART:"separator1", "default", 0.0); + set_state(PART:"separator2", "default", 0.0); + } + } + program { + name: "separator"; + signal: "elm,state,separator"; + source: "elm"; + script { + set_state(PART:"separator1", "visible", 0.0); + set_state(PART:"separator2", "visible", 0.0); + } + } + program { + name: "item_unclick"; + signal: "mouse,clicked,1"; + source: "over1"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + program { + name: "disable"; + signal: "elm,state,disabled"; + source: "elm"; + action: STATE_SET "disabled" 0.0; + target: "disclip"; + } + program { + name: "enable"; + signal: "elm,state,enabled"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "disclip"; + } + program { + name: "item_click2"; + signal: "mouse,down,1"; + source: "over2"; + script { + set_state(PART:"bg", "clicked", 0.0); + } + } + program { + name: "item_unclick2"; + signal: "mouse,up,1"; + source: "over2"; + script { + set_state(PART:"bg", "default", 0.0); + } + } + } + } + diff --git a/data/groups/search_custom_style.edc b/data/groups/search_custom_style.edc new file mode 100755 index 0000000..549570c --- /dev/null +++ b/data/groups/search_custom_style.edc @@ -0,0 +1,82 @@ +/* + * Copyright 2012-2013 Samsung Electronics Co., Ltd/ + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +group { + name: "smartsearch/custom_image_button"; + parts { + part { + name: "bg"; + mouse_events: 0; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + rel1 { relative: 0.0 0.0;} + rel2 { relative: 1.0 1.0;} + color: 0 0 0 0; + } + } + part { + name: "image_rect"; + mouse_events: 1; + type: RECT; + scale: 1; + description { + fixed: 0 0; + align: 0.0 0.0; + visible: 0; + state: "default" 0.0; + visible: 1; + rel1 { relative: 0.0 0.0;} + rel2 { relative: 1.0 1.0;} + color: 0 0 0 0; + } + } + part { + name: "image"; + mouse_events: 1; + type: SWALLOW; + scale: 1; + description { + min: 48 48; + max: 48 48; + fixed: 1 1; + align: 0.5 0.5; + state: "default" 0.0; + visible: 1; + rel1 { relative: 0.0 0.0;} + rel2 { relative: 1.0 1.0;} + } + } + } //end parts + + program { + name: "send.custom.image.clicked.signal"; + signal: "mouse,down,1"; + source: "image_rect"; + action: SIGNAL_EMIT "signal.search.image.clicked" "image"; + } + + program { + name: "send.custom.image.unclicked.signal"; + signal: "mouse,up,1"; + source: "image_rect"; + action: SIGNAL_EMIT "signal.search.image.unclicked" "image"; + } +} //end group + diff --git a/data/groups/search_result.edc b/data/groups/search_result.edc new file mode 100755 index 0000000..f398d29 --- /dev/null +++ b/data/groups/search_result.edc @@ -0,0 +1,177 @@ +/* + * Copyright 2012-2013 Samsung Electronics Co., Ltd/ + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + +group { + name: "smartsearch/search_result"; + parts { + part { + name: "bg"; + mouse_events: 0; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + rel1 { relative: 0.0 0.0;} + rel2 { relative: 1.0 1.0;} + color: SEARCHBAR_BACKGROUND_COLOR_DEFAULT; + } + } + part { + name: "searchbar_area_category_pad_left"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 26 0; + fixed: 1 0; + align: 0.0 0.5; + rel1 { relative: 0.0 0.0; to: "bg";} + rel2 { relative: 0.0 1.0; to: "bg";} + color: SEARCHBAR_BACKGROUND_COLOR_DEFAULT; + } + } + + part { + name: "searchbar_area_category_top"; + type: RECT; + mouse_events: 1; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 74 16; + fixed: 1 1; + align: 0.0 0.0; + rel1 { relative: 1.0 0.0; to: "searchbar_area_category_pad_left";} + rel2 { relative: 1.0 0.0; to: "searchbar_area_category_pad_left";} + color: SEARCHBAR_BACKGROUND_COLOR_DEFAULT; + } + } + + part { + name: "searchbar_area_category_bottom"; + type: RECT; + mouse_events: 1; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 74 16; + fixed: 1 1; + align: 0.0 1.0; + rel1 { relative: 1.0 1.0; to: "searchbar_area_category_pad_left";} + rel2 { relative: 1.0 1.0; to: "searchbar_area_category_pad_left";} + color: SEARCHBAR_BACKGROUND_COLOR_DEFAULT; + } + } + + part { + name: "searchbar_area_category"; + type: SWALLOW; + mouse_events: 1; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 74 74; + max: 74 74; + fixed: 1 1; + align: 0.0 0.0; + rel1 { relative: 1.0 1.0; + to_x: "searchbar_area_category_pad_left"; + to_y: "searchbar_area_category_top";} + rel2 { relative: 1.0 0.0; + to_x: "searchbar_area_category_pad_left"; + to_y: "searchbar_area_category_bottom";} + } + } + + part { + name: "searchbar_area_entry"; + type: SWALLOW; + mouse_events: 1; + scale: 1; + description { + state: "default" 0.0; + min: 620 107; + max: 99999 107; + align: 0.0 0.0; + rel1 { relative: 1.0 0.0; + to_x: "searchbar_area_category"; + to_y: "bg"; + } + rel2 { relative: 1.0 1.0; + to_x: "bg"; + to_y: "bg";} + } + } + + part { + name: "result_bg"; + type: RECT; + mouse_events: 1; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 0 0; + fixed: 0 1; + rel1 { relative: 0.0 1.0; + to_x: "bg"; + to_y: "searchbar_area_entry";} + rel2 { relative: 1.0 1.0; + to_x: "bg"; + to_y: "bg";} + color: SEARCHBAR_BACKGROUND_COLOR_DEFAULT; + } + } + + part { + name: "list"; + type: SWALLOW; + mouse_events: 1; + scale: 1; + description { + state: "default" 0.0; + //min: 720 1024; + align: 0.0 0.0; + rel1 { relative: 0.0 0.0; to: "result_bg"; } + rel2 { relative: 1.0 1.0; to: "result_bg"; } + } + } + part { + name: "list_noresult"; + type: SWALLOW; + mouse_events: 1; + scale: 1; + description { + state: "default" 0.0; + //min: 720 1024; + align: 0.0 0.0; + rel1 { relative: 0.0 0.0; to: "result_bg"; } + rel2 { relative: 1.0 1.0; to: "result_bg"; } + } + } + } //end parts +} //end group + diff --git a/data/images/B10_btn_icon_Phone.png b/data/images/B10_btn_icon_Phone.png new file mode 100644 index 0000000..5e7b413 Binary files /dev/null and b/data/images/B10_btn_icon_Phone.png differ diff --git a/data/images/B10_btn_icon_Phone_press.png b/data/images/B10_btn_icon_Phone_press.png new file mode 100755 index 0000000..5e7b413 Binary files /dev/null and b/data/images/B10_btn_icon_Phone_press.png differ diff --git a/data/images/B10_icon_list_favorite.png b/data/images/B10_icon_list_favorite.png new file mode 100755 index 0000000..6626b5b Binary files /dev/null and b/data/images/B10_icon_list_favorite.png differ diff --git a/data/images/B10_icon_list_memorycard.png b/data/images/B10_icon_list_memorycard.png new file mode 100755 index 0000000..836dfc1 Binary files /dev/null and b/data/images/B10_icon_list_memorycard.png differ diff --git a/data/images/org.tizen.smartsearch.png b/data/images/org.tizen.smartsearch.png new file mode 100755 index 0000000..6e164de Binary files /dev/null and b/data/images/org.tizen.smartsearch.png differ diff --git a/data/org.tizen.smartsearch.xml b/data/org.tizen.smartsearch.xml new file mode 100755 index 0000000..ee8bb02 --- /dev/null +++ b/data/org.tizen.smartsearch.xml @@ -0,0 +1,67 @@ + + + + Junghyun Kim + Search Application + + org.tizen.smartsearch.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/smartsearch-color.edc b/data/smartsearch-color.edc new file mode 100755 index 0000000..a6fa558 --- /dev/null +++ b/data/smartsearch-color.edc @@ -0,0 +1,21 @@ +/* + * Copyright 2012-2013 Samsung Electronics Co., Ltd/ + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define SEARCHBAR_BACKGROUND_COLOR_DEFAULT 248 246 239 255 +#define SEARCHBAR_BACKGROUND_COLOR_BLACK 36 36 36 255 +#define SEARCHBAR_BACKGROUND_COLOR_BLUE 17 23 27 255 +#define SEARCHBAR_BACKGROUND_COLOR_WHITE 215 225 232 255 +#define SEARCHBAR_BACKGROUND_COLOR_NEW_THEME 248 246 239 255 diff --git a/data/smartsearch.edc b/data/smartsearch.edc new file mode 100755 index 0000000..23ffa8e --- /dev/null +++ b/data/smartsearch.edc @@ -0,0 +1,26 @@ +/* + * Copyright 2012-2013 Samsung Electronics Co., Ltd/ + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + +collections { +#include "smartsearch-color.edc" +#include "groups/search_result.edc" +#include "groups/search_custom_ctxpopup_item.edc" +#include "groups/search_custom_style.edc" +} diff --git a/data/smartsearch.ini b/data/smartsearch.ini new file mode 100755 index 0000000..5abbace --- /dev/null +++ b/data/smartsearch.ini @@ -0,0 +1,2 @@ +[ProcessSetting] +BG_SCHEDULE=true diff --git a/debian/changelog b/debian/changelog new file mode 100755 index 0000000..4f1eb61 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,17 @@ +smartsearch (0.3.16-1) unstable; urgency=low + + * Apply changed feature + * Git: magnolia/apps/home/smartsearch + * Tag: smartsearch_0.3.16-1 + + -- Junghyun Kim Sat, 11 Aug 2012 01:01:42 +0900 + +smartsearch (0.3.15-1) unstable; urgency=low + + * Fix keyword bug + * Fix tag string issue + * Update search icon + * Git: pkgs/s/smartsearch + * Tag: smartsearch_0.3.15-1 + + -- Junghyun Kim Sat, 21 Apr 2012 15:54:43 +0900 diff --git a/debian/compat b/debian/compat new file mode 100755 index 0000000..7ed6ff8 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +5 diff --git a/debian/control b/debian/control new file mode 100755 index 0000000..b1d0d3c --- /dev/null +++ b/debian/control @@ -0,0 +1,44 @@ +Source: smartsearch +Section: main +Priority: extra +Maintainer: Junghyun Kim , Mijin Hwang +Uploaders: Junghyun Kim , Mijin Hwang +Build-Depends: debhelper (>= 5), + libglib2.0-dev, + libappcore-efl-dev, + libelm-dev, + libui-gadget-dev, + libaul-1-dev, + libslp-utilx-dev, + libx11-dev, + dlog-dev, + libslp-db-util-dev, + libecore-dev, + libug-contacts-dev, + libcontacts-service-dev, + libslp-calendar-dev, + libslp-memo-dev, + libicu-dev, + email-service-dev, + libail-0-dev, + libslp-msg-service-dev, + libsoup2.4-dev, + libjson-glib-dev, + libxml2-dev, + capi-appfw-application-dev, + capi-appfw-app-manager, + capi-web-favorites-dev, + capi-content-media-content-dev, +Standards-Version: 0.1.0 + +Package: org.tizen.smartsearch +Section: main +Architecture: any +Depends: ${shlibs:Depends}, ${devel:Depends}, libappcore-efl-0, libelm-bin +Description: Smartsearch Application + +Package: org.tizen.smartsearch-dbg +Section: debug +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, org.tizen.smartsearch (= ${Source-Version}) +Description: debug package for smartsearch diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..e69de29 diff --git a/debian/org.tizen.smartsearch.install.in b/debian/org.tizen.smartsearch.install.in new file mode 100755 index 0000000..d693a62 --- /dev/null +++ b/debian/org.tizen.smartsearch.install.in @@ -0,0 +1,4 @@ +@PREFIX@/bin/* +@PREFIX@/res/* +@PREFIX@/data +/opt/share/applications/* diff --git a/debian/org.tizen.smartsearch.postinst.in b/debian/org.tizen.smartsearch.postinst.in new file mode 100755 index 0000000..61b094c --- /dev/null +++ b/debian/org.tizen.smartsearch.postinst.in @@ -0,0 +1,26 @@ +#!/bin/sh + +SEARCHPKG="org.tizen.smartsearch" + +# create db +if [ ! -f /opt/apps/$SEARCHPKG/data/.search.db ] +then + sqlite3 /opt/apps/$SEARCHPKG/data/.search.db 'PRAGMA journal_mode = PERSIST; + CREATE TABLE IF NOT EXISTS search_history (category int, keyword text not null, date TEXT, UNIQUE(category, keyword));' +fi + +# owner & permission + +if [ ${USER} == "root" ] +then + chown -R 5000:5000 /opt/apps/$SEARCHPKG/data + chown -R 5000:5000 /opt/apps/$SEARCHPKG/data/.search.db + chown -R 5000:5000 /opt/apps/$SEARCHPKG/data/.search.db-journal +fi + +chmod 660 /opt/apps/$SEARCHPKG/data/.search.db +chmod 660 /opt/apps/$SEARCHPKG/data/.search.db-journal + +#set default vconf key value +vconftool set -t int db/smartsearch/category 0 -u 5000 -g 5000 +vconftool set -t string db/smartsearch/keyword '' -u 5000 -g 5000 diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..ce445ce --- /dev/null +++ b/debian/rules @@ -0,0 +1,122 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +CFLAGS ?= -Wall -g -fpie +CXXFLAGS ?= -Wall -g +LDFLAGS ?= +PREFIX ?= /opt/apps/org.tizen.smartsearch +RESDIR ?= /opt/apps/org.tizen.smartsearch/res +DATADIR ?= /opt/apps/org.tizen.smartsearch/data + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 + CXXFLAGS += -O0 +else + CFLAGS += -O2 + CXXFLAGS += -O2 +endif + +CFLAGS += -Wall -fPIC +CXXFLAGS += -fPIC +LDFLAGS += -pie -Wl,--rpath=$(PREFIX)/lib -Wl,--as-needed + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" LDFLAGS="$(LDFLAGS)" cmake . -DCMAKE_INSTALL_PREFIX=$(PREFIX) + + touch configure-stamp + +build: build-stamp + +build-stamp: configure-stamp + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + #docbook-to-man debian/wavplayer.sgml > wavplayer.1 + + for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ + cat $$f > $${f%.in}; \ + sed -i -e "s#@PREFIX@#$(PREFIX)#g" $${f%.in}; \ + sed -i -e "s#@PREFIX@#$(RESDIR)#g" $${f%.in}; \ + sed -i -e "s#@DATADIR@#$(DATADIR)#g" $${f%.in}; \ + done + + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + -$(MAKE) clean + rm -rf CMakeCache.txt + rm -rf CMakeFiles + rm -rf cmake_install.cmake + rm -rf Makefile + rm -rf install_manifest.txt + + rm -rf po/CMakeCache.txt + rm -rf po/CMakeFiles + rm -rf po/cmake_install.cmake + rm -rf po/Makefile + rm -rf po/install_manifest.txt + + rm -rf beat_winset_test.desktop + rm -rf org.tizen.smartsearch.desktop + rm -rf *.so + rm -rf *.edj + + for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ + rm -f $${f%.in}; \ + done + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/wavplayer. + $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples + dh_install --sourcedir=debian/tmp + dh_installman + dh_link + dh_compress + dh_fixperms + dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/include/common_util.h b/include/common_util.h new file mode 100755 index 0000000..a05b17c --- /dev/null +++ b/include/common_util.h @@ -0,0 +1,32 @@ +/* + * Copyright 2012-2013 Samsung Electronics Co., Ltd/ + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + +#define CHECK_VALIDATE_UTF8 0 + +void search_util_date_time_format_init(); +void search_util_date_time_format_deinit(); +void search_region_format_cb(void *data); +void search_util_date_time_format_get_val(time_t time, + char *format_val, int type); +void search_sql_make_keyword_bind_value(char *src, char *dest, int type); +void search_get_date_string(char *date_string); +const char *search_markup_keyword(const char *string, char *searchword, + bool *result); +char *search_get_main_window_name(void); diff --git a/include/ps_app_interface.h b/include/ps_app_interface.h new file mode 100755 index 0000000..b81a81d --- /dev/null +++ b/include/ps_app_interface.h @@ -0,0 +1,39 @@ +/* + * Copyright 2012-2013 Samsung Electronics Co., Ltd/ + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + +#ifndef __DEF_PS_APP_INTERFACE_H__ +#define __DEF_PS_APP_INTERFACE_H__ + +void search_launch_contact_view(void *data, void *record_info); +void search_launch_msg_view(void *data, void *record_info); +void search_launch_msg_view(void *data, void *record_info); +void search_launch_email_view(void *data, void *record_info); +void search_launch_image_view(void *data, void *record_info); +void search_launch_video_view(void *data, void *record_info); +void search_launch_music_view(void *data, void *record_info); +void search_launch_document_view(void *data, void *record_info); +void search_launch_calendar_view(void *data, void *record_info); +void search_launch_memo_view(void *data, void *record_info); +void search_launch_menu_view(void *data, void *record_info); +void search_launch_browser_view(void *data, void *record_info); +void search_launch_popup_error(int error_type, void *data); +#endif diff --git a/include/ps_debug_util.h b/include/ps_debug_util.h new file mode 100755 index 0000000..9fd0e3d --- /dev/null +++ b/include/ps_debug_util.h @@ -0,0 +1,201 @@ +/* + * Copyright 2012-2013 Samsung Electronics Co., Ltd/ + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + +#ifndef __DEF_PS_DEBUG_UTIL_H__ +#define __DEF_PS_DEBUG_UTIL_H__ + +#ifdef __ENABLE_DEBUG_UTIL + +#include + +#ifdef __ENABLE_PLATFORM_DEBUG + +#include + +#ifdef LOG_TAG +#undef LOG_TAG +#endif +#define LOG_TAG "SEARCH" + +#define SEARCH_FUNC_START \ + do {\ + LOGD("[%s() START ----->]\n", __FUNCTION__);\ + }while(0) + +#define SEARCH_FUNC_END \ + do {\ + LOGD("[%s() <----- END]\n", __FUNCTION__);\ + }while(0) + +#define SEARCH_FUNC_LINE \ + do {\ + LOGD("[%s() \t%s:%d]\n", __FUNCTION__, strrchr(__FILE__, '/')+1, __LINE__);\ + }while(0) + +#define SEARCH_DEBUG_LOG(fmt, arg...) \ + do {\ + LOGD("\x1b[32m[SEARCH][D][" fmt "]\x1b[0m\n", ##arg);\ + }while(0) + +#define SEARCH_DEBUG_WARNING(fmt, arg...) \ + do {\ + LOGW("\x1b[33m[SEARCH][W][" fmt "]\x1b[0m\n", ##arg);\ + }while(0) + +#define SEARCH_DEBUG_ERROR(fmt, arg...) \ + do {\ + LOGE("\x1b[31m[SEARCH][E][" fmt "]\x1b[0m\n", ##arg);\ + }while(0) + +#define SEARCH_ASSERT_IF(cond) \ + do {\ + if(cond) {\ + LOGE("\x1b[31m[%s() \t%s:%d][ASSERT]\x1b[0m",__FUNCTION__, strrchr(__FILE__, '/')+1, __LINE__);\ + assert(0);\ + }\ + }while(0) + +#define SEARCH_RETV_IF(cond,ret) \ + do {\ + if(cond) {\ + LOGW("\x1b[33m[%s() \t%s:%d][RET_IF]\x1b[0m",__FUNCTION__, strrchr(__FILE__, '/')+1, __LINE__);\ + return ret;\ + }\ + }while(0) + +#define SEARCH_RETV_IF_WITH_ERRORV(cond,ret,errorv) \ + do {\ + if(cond) {\ + LOGW("\x1b[33m[%s() \t%s:%d][RET_IF]\x1b[0m error value = %d",__FUNCTION__, strrchr(__FILE__, '/')+1, __LINE__, errorv);\ + return ret;\ + }\ + }while(0) + +#define SEARCH_RET_IF(cond) \ + do {\ + if(cond) {\ + LOGW("\x1b[33m[%s() \t%s:%d][RET_IF]\x1b[0m",__FUNCTION__, strrchr(__FILE__, '/')+1, __LINE__);\ + return;\ + }\ + }while(0) + +#define SEARCH_RET_IF_STR_INVALID(str,ret) \ + do {\ + if((str == NULL) || strlen(str) == 0) {\ + LOGW("\x1b[33m[%s() \t%s:%d][RET_STR_IF]\x1b[0m",__FUNCTION__, strrchr(__FILE__, '/')+1, __LINE__);\ + return ret;\ + }\ + }while(0) + +#else + +#include + +#define SEARCH_FUNC_START \ + do {\ + fprintf(stderr, "[SEARCH][%s() START ----->]\n", __FUNCTION__);\ + }while(0) + +#define SEARCH_FUNC_END \ + do {\ + fprintf("[SEARCH][%s() <----- END]\n", __FUNCTION__);\ + }while(0) + +#define SEARCH_FUNC_LINE \ + do {\ + fprintf("[SEARCH][%s() \t%s:%d]\n", __FUNCTION__, strrchr(__FILE__, '/')+1, __LINE__);\ + }while(0) + +#define SEARCH_DEBUG_LOG(fmt, arg...) \ + do {\ + fprintf(stderr, "[SEARCH][D][" fmt "\n", ##arg);\ + }while(0) + +#define SEARCH_DEBUG_WARNING(fmt, arg...) \ + do {\ + fprintf(stderr, "[SEARCH][W][" fmt "\n", ##arg);\ + }while(0) + +#define SEARCH_DEBUG_ERROR(fmt, arg...) \ + do {\ + fprintf(stderr, "[SEARCH][E][" fmt "\n", ##arg);\ + }while(0) + +#define SEARCH_ASSERT_IF(cond) \ + do {\ + if(cond) {\ + fprintf(stderr, "[%s() \t%s:%d][ASSERT]",__FUNCTION__, strrchr(__FILE__, '/')+1, __LINE__);\ + assert(0);\ + }\ + }while(0) + +#define SEARCH_RETV_IF(cond,ret) \ + do {\ + if(cond) {\ + fprintf(stderr, "[%s() \t%s:%d][RET_IF]",__FUNCTION__, strrchr(__FILE__, '/')+1, __LINE__);\ + return ret;\ + }\ + }while(0) + +#define SEARCH_RETV_IF_WITH_ERRORV(cond,ret,errorv) \ + do {\ + if(cond) {\ + fprintf(stderr, "[%s() \t%s:%d][RET_IF] error_value = %d",__FUNCTION__, strrchr(__FILE__, '/')+1, __LINE__, errorv);\ + return ret;\ + }\ + }while(0) + +#define SEARCH_RET_IF(cond) \ + do {\ + if(cond) {\ + fprintf(stderr, "[%s() \t%s:%d][RET_IF]",__FUNCTION__, strrchr(__FILE__, '/')+1, __LINE__);\ + return;\ + }\ + }while(0) + +#define SEARCH_RET_IF_STR_INVALID(str,ret) \ + do {\ + if((str == NULL) || strlen(str) == 0) {\ + fprintf("\x1b[33m[%s() \t%s:%d][RET_STR_IF]\x1b[0m",__FUNCTION__, strrchr(__FILE__, '/')+1, __LINE__);\ + return ret;\ + }\ + }while(0) + +#endif + +#else + +#define SEARCH_FUNC_START +#define SEARCH_FUNC_END +#define SEARCH_FUNC_LINE +#define SEARCH_DEBUG_LOG(fmt, arg...) +#define SEARCH_DEBUG_WARNING(fmt, arg...) +#define SEARCH_DEBUG_ERROR(fmt, arg...) +#define SEARCH_ASSERT_IF(cond) +#define SEARCH_RETV_IF(cond,ret) +#define SEARCH_RETV_IF_WITH_ERRORV(cond,ret,errorv) +#define SEARCH_RET_IF(cond) +#define SEARCH_RET_IF_STR_INVALID(str,ret) + +#endif // __ENABLE_DEBUG_UTIL + +#endif // __DEF_PS_DEBUG_UTIL_H__ diff --git a/include/ps_makeupviews.h b/include/ps_makeupviews.h new file mode 100755 index 0000000..1a9711d --- /dev/null +++ b/include/ps_makeupviews.h @@ -0,0 +1,41 @@ +/* + * Copyright 2012-2013 Samsung Electronics Co., Ltd/ + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + +#ifndef __DEF_PS_MAKEUPVIEWS_H__ +#define __DEF_PS_MAKEUPVIEWS_H__ + +void search_result_gl_init(void *data); +void search_result_gl_deinit(void *data); +void search_gl_phone_result_sel(void *data, Evas_Object * obj, void *event_info); +void search_gl_result_more_item_append_cb(void *data, Evas_Object * obj, void *event_info); +int search_app_connect(void *data); +int search_app_disconnect(void *data); +void search_set_result_list(void *data); +void search_stop_search(void *data); +void search_layout_set_search_list(void* data); +void search_layout_set_search_no_result(void* data); +int search_layout_get_content_list_set_status(void* data); +Ecore_Thread* search_make_result_thread(void *data); +struct search_genlist_item_info* search_add_genlist_item(int type, + struct search_content_object *obj, Elm_Genlist_Item_Class *itc_style, void *data, + Elm_Object_Item *parent); +#endif // __DEF_PS_MAKEUPVIEWS_H__ diff --git a/include/ps_searcher.h b/include/ps_searcher.h new file mode 100755 index 0000000..0bc21a1 --- /dev/null +++ b/include/ps_searcher.h @@ -0,0 +1,68 @@ +/* + * Copyright 2012-2013 Samsung Electronics Co., Ltd/ + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#ifndef __SEARCHSEARCHER_HEADER_H__ +#define __SEARCHSEARCHER_HEADER_H__ + +#include "smartsearch.h" + +int search_sql_stmt_init(sqlite3_stmt * sql_stmt); + +int search_sql_stmt_finalize(sqlite3_stmt * stmt); + +int search_sql_prepare_stmt(sqlite3 *db_handle, const char *query, + sqlite3_stmt ** stmt_out); + +int search_sql_bind_text(sqlite3 *db_handle, sqlite3_stmt *sql_stmt, int col, char *data); + +int search_sql_bind_int(sqlite3 *db_handle, sqlite3_stmt *sql_stmt, int col, int data); + +int search_sql_contact_search_result_by_api(struct search_content_object *obj, + int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info); + +int search_sql_msg_search_result_by_api(struct search_content_object *obj, + int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info); + +int search_sql_email_search_result_by_api(struct search_content_object *obj, + int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info); + +int search_sql_calendar_search_result_by_api(struct search_content_object *obj, + int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info); + +int search_sql_memo_search_result_by_api(struct search_content_object *obj, + int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info); + +int search_sql_image_search_result_by_api(struct search_content_object *obj, + int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info); + +int search_sql_video_search_result_by_api(struct search_content_object *obj, + int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info); + +int search_sql_music_search_result_by_api(struct search_content_object *obj, + int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info); + +int search_sql_menu_search_result_by_api(struct search_content_object *obj, + int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info); + +int search_sql_browser_search_result_by_api(struct search_content_object *obj, + int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info); + + +void search_sql_update_result_object(struct search_content_object* result_obj, sqlite3* db_handle, sqlite3_stmt** db_sql); + +#endif // __SEARCHSERVER_HEADER_H__ diff --git a/include/search_bar.h b/include/search_bar.h new file mode 100755 index 0000000..3283706 --- /dev/null +++ b/include/search_bar.h @@ -0,0 +1,42 @@ +/* + * Copyright 2012-2013 Samsung Electronics Co., Ltd/ + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + +#ifndef __DEF_SEARCH_BAR_H__ +#define __DEF_SEARCH_BAR_H__ + +#include + +void search_searchbar_cb(void *data, Evas_Object * obj, void *event_info); + +void search_searchbar_entry_changed_cb(void *data, Evas_Object * obj, + void *event_info); +Evas_Object *search_category_custom_layout_add(Evas_Object *parent); +Evas_Object *search_category_image_add(char* imgpath, Evas_Object *parent, int width, int height, bool resize); +Evas_Object *search_searchbar_category_icon_add(char *img, Evas_Object *parent, int width, int height, bool resize); +void search_create_searchbar_layout(Evas_Object *parent, void *data); +void search_delete_searchbar_layout(void *data); +Evas_Object *search_create_layout(Evas_Object *parent, const char *file, const char *group); +Evas_Object *search_create_category_button(Evas_Object *parent, void *data); +Evas_Object *search_create_search_bar(Evas_Object *parent); +Evas_Object *search_create_search_cancel_btn(Evas_Object *parent); +Evas_Object *search_create_search_entry(Evas_Object *parent, void *data); +#endif /* __DEF_SEARCH_BAR_H__ */ diff --git a/include/smartsearch.h b/include/smartsearch.h new file mode 100755 index 0000000..c003ccf --- /dev/null +++ b/include/smartsearch.h @@ -0,0 +1,173 @@ +/* + * Copyright 2012-2013 Samsung Electronics Co., Ltd/ + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + +#ifndef __DEF_SMARTSEARCH_H__ +#define __DEF_SMARTSEARCH_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "smartsearch_define.h" +#include "ps_debug_util.h" +#include "search_bar.h" +#include "ps_makeupviews.h" +#include "ps_app_interface.h" +#include "common_util.h" +#include "util-func.h" + +#define _EDJ(x) elm_layout_edje_get(x) + +struct search_more_result{ + int next_point; + int offset; + int loop_cnt; + int result_cnt; + struct appdata *ad; +}; + +struct search_content_object { + int order; + Eina_Bool visible; + char *name; + int string_type; + int contents_type; + int category_type; + char *def_pkg_name; + char *obj_icon_path; + Elm_Object_Item *gl_result_grp; + struct search_more_result mr_info; +}; + +struct search_category_info { + char *btn_icon_path; + char *btn_icon_press_path; + char *popup_icon_path; + char *popup_press_icon_path; +}; + +struct search_genlist_item_info { + int type; + struct search_content_object *obj; + Elm_Genlist_Item_Class *itc_style; + void *data; + Elm_Object_Item *parent; +}; + +struct search_genlist_info { + struct search_genlist_item_info *group; + GList *itemlist; + struct search_genlist_item_info *more; +}; + +struct search_pipe_data { + int cmd; + struct search_genlist_info *result_list; + int search_ret; + struct search_content_object *obj; +}; + +struct search_item_sel { + int type; + char *launch_path; + char *launch_param; + char *text1; + char *text2; + char *icon1; + char *icon2; +}; + +struct search_item_more_sel { + struct search_content_object *obj; +}; + +struct appdata { + Evas_Object *win_main; + Evas_Object *bg; + Evas_Object *conformant; + Evas_Object *layout_main; + Evas_Object *navi_bar; + Elm_Object_Item *navi_it; + + double scale_factor; + + Evas_Object *search_entry; + Evas_Object *search_bar; + Evas_Object *search_cancel_btn; + Evas_Object *search_gl; + Evas_Object *noresult_view; + Evas_Object *sb_layout; + Evas_Object *back_btn; + + Evas_Object *ctxpopup; + Evas_Object *cate_ctxpopup; + + Evas_Object *cate_btn; + Ecore_Idler *idler_create_ui; + Ecore_Timer *search_timer; + + int touch_x; + int touch_y; + + Elm_Genlist_Item_Class *itc_pslist_1line; + Elm_Genlist_Item_Class *itc_pslist_1line_1icon; + Elm_Genlist_Item_Class *itc_pslist_1line_1icon_browser_history; + Elm_Genlist_Item_Class *itc_pslist_1line_2icon; + Elm_Genlist_Item_Class *itc_pslist_2line_1icon; + Elm_Genlist_Item_Class *itc_pslist_2line_2icon; + Elm_Genlist_Item_Class *itc_pslist_2line_2icon_browser_bookmark; + Elm_Genlist_Item_Class *itc_grouptitle; + Elm_Genlist_Item_Class *itc_listmore; + + Ecore_Pipe *pipe; + Ecore_Thread *search_thread; + Eina_Condition condition; + Eina_Lock mutex; + + bool first_search; + char *search_word; + char *not_markup_search_word; + + int back_btn_type; + int search_category; + + ui_gadget_h detail_ug; + + sqlite3 *search_db_hd; + sqlite3_stmt *search_db_sql[SEARCH_STMT_MAX]; + struct search_content_object result_obj[SEARCH_CONT_MAX]; + struct search_category_info category_info[SEARCH_CATE_MAX]; + + /* Handle List */ + msg_handle_t msg_handle; +}; + +#endif diff --git a/include/smartsearch_define.h b/include/smartsearch_define.h new file mode 100755 index 0000000..a180a2c --- /dev/null +++ b/include/smartsearch_define.h @@ -0,0 +1,204 @@ +/* + * Copyright 2012-2013 Samsung Electronics Co., Ltd/ + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#ifndef __DEF_SMARTSEARCH_DEFINE_H__ +#define __DEF_SMARTSEARCH_DEFINE_H__ + + +enum { + SEARCH_OBJ_PHONE_CONTENTS = 0, + SEARCH_OBJ_APPLICATION, + SEARCH_OBJ_TYPE_MAX +}; + +enum { + SEARCH_CONT_PHONE_MIN = 0, + SEARCH_CONT_PHONE_CONTACTS = SEARCH_CONT_PHONE_MIN, + SEARCH_CONT_PHONE_MSG, + SEARCH_CONT_PHONE_EMAIL, + SEARCH_CONT_PHONE_IMAGES, + SEARCH_CONT_PHONE_MUSIC, + SEARCH_CONT_PHONE_VIDEO, + SEARCH_CONT_PHONE_CALENDAR, + SEARCH_CONT_PHONE_MEMO, + SEARCH_CONT_PHONE_MENU, + SEARCH_CONT_PHONE_BROWSER, + SEARCH_CONT_PHONE_MAX = SEARCH_CONT_PHONE_BROWSER, + SEARCH_CONT_MAX +}; + +enum { + SEARCH_CATE_PHONE = 0, + SEARCH_CATE_MAX +}; + +enum { + SEARCH_GENLIST_GROUP = 0, + SEARCH_GENLIST_ITEM, + SEARCH_GENLIST_MORE +}; + +enum { + LAUNCH_ERROR_FILE_NOT_FOUND = 1, + LAUNCH_ERROR_AUL_LAUNCH, + LAUNCH_ERROR_APPSVC, + LAUNCH_ERROR_MAX +}; + +enum { + BACK_BTN_TYPE_LOWER, + BACK_BTN_TYPE_CLOSE +}; + +enum { + SEARCH_RET_SEARCH_FAIL = -1, + SEARCH_RET_SEARCH_NONE, + SEARCH_RET_SEARCH_SUCCESS +}; + +enum { + SEARCH_RET_FAIL = -1, + SEARCH_RET_SUCCESS +}; + +enum { + SEARCH_STMT_GET_CATEGORY_LIST_ALL = 0, + SEARCH_STMT_INSERT_OBJECT_INFO, + SEARCH_STMT_UPDATE_OBJECT_INFO, + SEARCH_STMT_MAX +}; + +enum { + SEARCH_SQL_BIND_TYPE_SIMPLEX = 0, + SEARCH_SQL_BIND_TYPE_DUPLEX +}; + +enum { + SEARCH_PIPE_CMD_CLEAR_GENLIST = 0, + SEARCH_PIPE_CMD_ADD_GENLIST_PHONE, + SEARCH_PIPE_CMD_SET_LAYOUT, +}; + +enum { + SEARCH_STR_TYPE_APP_STRING = 0, + SEARCH_STR_TYPE_SYSTEM_STRING, +}; + +enum { + SEARCH_DATE_TYPE_YYMMDD = 0, + SEARCH_DATE_TYPE_YYMM, +}; + +//============================================================================================================================== + +#define SEARCH_PACKAGE "smartsearch" +#define SEARCH_ICON_PATH RESDIR"/icons/" +#define SEARCH_EDJ EDJDIR"/smartsearch.edj" +#define SEARCH_SEARCHBAR_GROUP_NORMAL "smartsearch/search_result" +#define SEARCH_DB_PATH DBDIR"/.search.db" + +#define SEARCH_FAVORITE_ICON SEARCH_ICON_PATH"B10_icon_list_favorite.png" +#define SEARCH_SDCARD_ICON SEARCH_ICON_PATH"B10_icon_list_memorycard.png" + +#define SEARCH_THUMBNAIL_SIZE 72 +#define SEARCH_ICON_SIZE 64 + +#define SEARCH_CATEGORY_BTN_ICON_SIZE_WIDTH 44 +#define SEARCH_CATEGORY_BTN_ICON_SIZE_HEIGHT 44 + +#define SEARCH_CATEGORY_POPUPBTN_ICON_SIZE_WIDTH 48 +#define SEARCH_CATEGORY_POPUPBTN_ICON_SIZE_HEIGHT 48 + +#define DEF_BUF_LEN (512) +#define MAX_LENGTH_PER_LINE (512) +#define MAX_LENGTH_PER_PATH (512) +#define MAX_LENGTH_PER_ID (10) +#define MAX_SEARCH_WORD_SIZE (128) +#define DB_QUERY_LEN (512) + +#define SEARCH_MAX_UCHAR_SIZE 64 +#define SEARCH_MAX_CHAR_SIZE 128 + +#define SMARTSEARCH_KEY_KEYWORD "file/private/org.tizen.smartsearch/keyword" + +#define PHONE_CATEGORY_LIST_CNT (SEARCH_CONT_PHONE_MAX) + + +#define NO_RESULT_BODY_LEN 7 + +#define SEARCH_CATEGORY_LIST_MORE_CNT (100) + +#define DB_ESCAPE_CHAR "|" + +#define SEARCH_DB_SQL_GET_CATEGORY_LIST_ALL "SELECT item_name, item_string, item_visible, item_order, item_contents_type, item_object_type, " \ + "def_pkg_name FROM search_category ORDER by item_order asc;" +#define SEARCH_DB_SQL_INSERT_OBJECT_IFNO "REPLACE INTO search_category" \ + "(item_name, item_string, item_visible, item_order, item_contents_type, item_object_type, def_pkg_name) " \ + "VALUES(?,?,?,?,?,?,?);" + +#define SEARCH_DB_SQL_UPDATE_OBJECT_INFO "UPDATE search_category SET " \ + "item_name = ?, item_string = ?, item_visible = ?, item_order = ?, item_contents_type = ?, item_object_type = ?, " \ + "def_pkg_name = ? WHERE item_contents_type = ?;" + + +//============================================================================================================================== + +#define PART_IMAGE "image" +#define SIGNAL_SEARCH_CUSTOM_IMAGE_CLICKED "signal.search.image.clicked" +#define SIGNAL_SEARCH_CUSTOM_IMAGE_UNCLICKED "signal.search.image.unclicked" + +//============================================================================================================================== +#define SEARCH_FREE(ptr) \ + do { \ + if(ptr != NULL) \ + { \ + free(ptr); \ + ptr = NULL; \ + } \ + }while(0); + +#define SEARCH_MALLOC(ptr, size, type) \ + do { \ + if(size > 0) { \ + ptr = (type *)malloc(size); \ + if(ptr == NULL) \ + assert(0); \ + } else { \ + assert(0); \ + } \ + } while(0); + +#define SEARCH_EVAS_OBJECT_FREE(ptr) \ + do { \ + if(ptr != NULL) \ + { \ + evas_object_del(ptr); \ + ptr = NULL; \ + } \ + }while(0); + +/* Gives comparison result of two strings and returns -1 if any of two is NULL */ +#define SEARCH_STRCMP(str1, str2) ((str1 && str2) ? strcmp(str1, str2) : -1) + +/* Returns string length of src and 0 if it is NULL */ +#define SEARCH_STRLEN(src) ((src != NULL)? strlen(src): 0) + +#define SEARCH_SCALABLED_SIZE(size, _scale_factor) (int)((size) * (_scale_factor)) + +#endif + diff --git a/org.tizen.smartsearch.manifest b/org.tizen.smartsearch.manifest new file mode 100644 index 0000000..116c6bc --- /dev/null +++ b/org.tizen.smartsearch.manifest @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/org.tizen.smartsearch.rule b/org.tizen.smartsearch.rule new file mode 100644 index 0000000..4b1c612 --- /dev/null +++ b/org.tizen.smartsearch.rule @@ -0,0 +1,204 @@ + +org.tizen.smartsearch ail::db rw--- +org.tizen.smartsearch appsvc::db rw--- +org.tizen.smartsearch calendar-service rwx-- +org.tizen.smartsearch calendar-service::db rw--- +org.tizen.smartsearch calendar-service::svc rw--- +org.tizen.smartsearch org.tizen.browser rwx-- +org.tizen.smartsearch org.tizen.browser::db_external rw--- +org.tizen.smartsearch contacts-service rwx-- +org.tizen.smartsearch contacts-service::db rwx-- +org.tizen.smartsearch contacts-service::svc rw--- +org.tizen.smartsearch contacts-service::phonelog rw--- +org.tizen.smartsearch data-provider-master rw--- +org.tizen.smartsearch dbus rwxat +org.tizen.smartsearch efreet r-x-- +org.tizen.smartsearch email-service rwx-- +org.tizen.smartsearch email-service::db rw--- +org.tizen.smartsearch isf rwx-- +org.tizen.smartsearch media-data::db rw--- +org.tizen.smartsearch msg-service rwx-- +org.tizen.smartsearch msg-service::db rw--- +org.tizen.smartsearch msg-service::wappush rw--- +org.tizen.smartsearch pkgmgr r---- +org.tizen.smartsearch pulseaudio rwxat +org.tizen.smartsearch syspopup::db rwx-- +org.tizen.smartsearch system::homedir rwxat +org.tizen.smartsearch system::media rwxat +org.tizen.smartsearch system::share rwxat +org.tizen.smartsearch system::use_internet rwxat +org.tizen.smartsearch system::vconf rwxat +org.tizen.smartsearch system::vconf_setting rwxat +org.tizen.smartsearch system::vconf_inhouse rwxat +org.tizen.smartsearch system::vconf_privacy r---- +org.tizen.smartsearch system::vconf_system rw--- +org.tizen.smartsearch system::vconf_multimedia rw--- +org.tizen.smartsearch system::vconf_network rw--- +org.tizen.smartsearch system::vconf_misc r---- +org.tizen.smartsearch thumb-server r---- +org.tizen.smartsearch worldclock::db rw--- +org.tizen.smartsearch xorg rwx-- +org.tizen.smartsearch sys-assert::core rwxat +org.tizen.smartsearch browser-provider -w--- +org.tizen.smartsearch org.tizen.smartsearch::vconf rw--- +org.tizen.smartsearch org.tizen.voice-input-control rw--- +org.tizen.smartsearch browser-provider::bookmark r---- +org.tizen.app-tray org.tizen.smartsearch r-x-- +e17 org.tizen.smartsearch rw--- +system::use_internet org.tizen.smartsearch -w--- +org.tizen.data-provider-slave org.tizen.smartsearch r-x-- +org.tizen.data-provider-slave org.tizen.smartsearch r-x-- +stt-server org.tizen.smartsearch rw--- +org.tizen.voice-input-control org.tizen.smartsearch rw--- +org.tizen.smartsearch csc-manager rwx-- +org.tizen.smartsearch system::home rwxat +org.tizen.smartsearch device::app_logging -w--- +org.tizen.smartsearch org.tizen.gallery::web-media.db rwx-- +org.tizen.smartsearch org.tizen.gallery::gallery-media.db rwx-- +org.tizen.smartsearch org.tizen.indicator rwx-- +org.tizen.smartsearch org.tizen.gallery rwxa- +org.tizen.smartsearch org.tizen.gallery-service rwx-- +org.tizen.smartsearch org.tizen.contacts rwx-- +org.tizen.smartsearch org.tizen.cluster-home rwx-- +org.tizen.smartsearch media-server rwx-- +org.tizen.smartsearch ug-image-viewer-efl rwxat +org.tizen.smartsearch download-provider rw--- +org.tizen.smartsearch drmfw rw--- +org.tizen.smartsearch cbhm rwx-- +org.tizen.smartsearch data-provider-master::shortcut rw--- +org.tizen.smartsearch data-provider-master::utility rw--- +org.tizen.smartsearch data-provider-master::notification rw--- +org.tizen.smartsearch allshare::svc rwx-- +org.tizen.smartsearch sound_server rwx-- +org.tizen.smartsearch net-config r-x-- +org.tizen.smartsearch system-server rwxa- +org.tizen.smartsearch deviced rwxa- +org.tizen.smartsearch org.tizen.setting rwx-- +org.tizen.smartsearch org.tizen.myfile rw--- +org.tizen.smartsearch dali rwxat +org.tizen.smartsearch crash-worker --x-- +org.tizen.smartsearch cloud-content-sync::db rw--- +org.tizen.smartsearch cloud-content-sync rwx-- +org.tizen.smartsearch device::video rw--- +org.tizen.smartsearch device::hwcodec rw--- +org.tizen.smartsearch org.tizen.gallery::face-svc.db rwx-- +org.tizen.smartsearch ug-email-viewer-efl rwx-- +org.tizen.smartsearch ug-email-docsearch-efl --x-- +org.tizen.smartsearch camera-external-engine rw--- +org.tizen.smartsearch system::vconf_inouse r---- +aul org.tizen.smartsearch rwx-- +isf org.tizen.smartsearch r---- +org.tizen.gallery-service org.tizen.smartsearch rwx-- +org.tizen.cluster-home ug-image-viewer-efl r-x-- +org.tizen.lockscreen ug-image-viewer-efl r-x-- +org.tizen.smartsearch xorg::screencapture r---- +org.tizen.smartsearch org.tizen.smemo rwx-- +org.tizen.smartsearch ims-service::db rw--- +org.tizen.smartsearch app-svc::db rw--- +org.tizen.smartsearch org.tizen.message rwx-- +org.tizen.smartsearch mdm-server rwx-- +org.tizen.smartsearch ug-msg-composer-efl rwxat +media-server org.tizen.smartsearch -w--- +org.tizen.smartsearch msg-service::read rw--- +org.tizen.smartsearch msg-service::write rw--- +org.tizen.smartsearch telephony_framework::api_manager r---- +org.tizen.smartsearch telephony_framework::api_modem -w--- +org.tizen.smartsearch smemo::db rw--- +org.tizen.smartsearch org.tizen.image-editor r---- +org.tizen.smartsearch org.tizen.email rwx-- +org.tizen.smartsearch org.tizen.calendar rwx-- +org.tizen.smartsearch device::sys_logging -w--- +org.tizen.smartsearch webkit2-efl r-x-- +org.tizen.smartsearch data-provider-master::badge rw--- +org.tizen.smartsearch resman::db rw--- +org.tizen.smartsearch map-efl rwxat +org.tizen.smartsearch ug-email-composer-efl rwxat +org.tizen.smartsearch ui-gadget::client --x-- +org.tizen.smartsearch secure-storage::pkcs12 r---- +org.tizen.smartsearch email-service::write rw--- +org.tizen.smartsearch ug_bluetooth r-x-- +org.tizen.smartsearch bt-service::admin -w--- +org.tizen.smartsearch bt-service::gap -w--- +org.tizen.smartsearch bt-service::manager -w--- +org.tizen.smartsearch system::app_logging -w--- +org.tizen.smartsearch svi-data rwxat +org.tizen.smartsearch immvibed rwx-- +org.tizen.smartsearch libaccounts-svc::db rw--- +org.tizen.smartsearch org.tizen.volume rwx-- +org.tizen.smartsearch org.tizen.setting::default-resources r-x-- +org.tizen.smartsearch device::camera rw--- +org.tizen.smartsearch device::mdnie rw--- +org.tizen.smartsearch pkgmer::db r---- +org.tizen.smartsearch power_manager rwx-- +org.tizen.smartsearch stt-server rwx-- +org.tizen.smartsearch tts-server rwx-- +org.tizen.smartsearch ug-camera-efl rwxat +org.tizen.smartsearch vcs-server rwx-- +org.tizen.smartsearch image-filter-d::db rw--- +org.tizen.smartsearch location_fw::db rw--- +org.tizen.smartsearch pkgmgr::db rw--- +org.tizen.smartsearch org.tizen.svoice rwx-- +org.tizen.smartsearch org.tizen.dropbox r-x-- +org.tizen.smartsearch org.tizen.facebook r-x-- +org.tizen.smartsearch oma-ds-agent rwx-- +oma-ds-agent org.tizen.smartsearch rwx-- +org.tizen.smartsearch oma-ds-agent::cfg rwxat +org.tizen.setting org.tizen.smartsearch r-x-- +org.tizen.setting oma-ds-agent::cfg rwx-- +system::use_internet oma-ds-agent rwx-- +oma-ds-agent system::use_internet rwx-- +org.tizen.smartsearch syslogd rwx-- +org.tizen.smartsearch e17 r-x-- +org.tizen.smartsearch dlogutil r-x-- +org.tizen.smartsearch telephony_framework r-x-- +org.tizen.smartsearch aul r-x-- +org.tizen.smartsearch ode r-x-- +org.tizen.smartsearch sensor-framework r-x-- +org.tizen.smartsearch secure-storage r-x-- +org.tizen.smartsearch starter r-x-- +org.tizen.smartsearch osp-app-service r-x-- +org.tizen.smartsearch osp-security-service r-x-- +org.tizen.smartsearch osp-channel-service r-x-- +org.tizen.smartsearch org.tizen.app-tray r-x-- +org.tizen.smartsearch org.tizen.quickpanel r-x-- +org.tizen.smartsearch connman rwx-- +org.tizen.smartsearch mobicore-daemon r-x-- +org.tizen.smartsearch alarm-server rwx-- +org.tizen.smartsearch brcm_daemon r-x-- +org.tizen.smartsearch resman r-x-- +org.tizen.smartsearch osp-connectivity-service rwx-- +org.tizen.smartsearch push-service rwx-- +org.tizen.smartsearch eas-engine rwx-- +org.tizen.smartsearch org.tizen.data-provider-slave rwx-- +org.tizen.smartsearch org.tizen.data-provider-slave rwx-- +org.tizen.smartsearch usb-server rwx-- +org.tizen.smartsearch mtp-responder rwx-- +org.tizen.smartsearch sdbd rwx-- +ui-gadget::client oma-ds-agent::svc rw--- +org.tizen.smartsearch samsung-account-front r-x-- +org.tizen.smartsearch data-provider-master::shortcut.shortcut -w--- +org.tizen.smartsearch data-provider-master::notification.client -w--- +context-service org.tizen.smartsearch r-x-- +org.tizen.smartsearch location_fw::client rwx-- +org.tizen.smartsearch org.tizen.smartsearch --x-- +org.tizen.smartsearch ug-map-efl rwxat +org.tizen.smartsearch obexd r-x-- +org.tizen.smartsearch phone-misc::db rw--- +org.tizen.smartsearch ug-msg-viewer-efl rwxat +org.tizen.smartsearch org.tizen.fileshare-service rwxat +org.tizen.smartsearch wifi_direct_manager rw--- +org.tizen.fileshare-service org.tizen.smartsearch r-x-- +org.tizen.smartsearch nfc-manager rwx-- +org.tizen.smartsearch nfc-manager::p2p rwx-- +org.tizen.smartsearch nfc-manager::admin rwx-- +org.tizen.smartsearch ug-setting-gallery-efl rwxat +org.tizen.smartsearch org.tizen.music-player --x-- +org.tizen.cluster-home org.tizen.smartsearch r-x-- +org.tizen.smartsearch org.tizen.pwlock r---- +org.tizen.smartsearch ug-worldclock-efl r---- +org.tizen.smartsearch org.tizen.camera-app r---- +org.tizen.smartsearch app-selector --x-- +org.tizen.app-selector org.tizen.smartsearch --x-- +org.tizen.add-viewer org.tizen.smartsearch rwx-- +org.tizen.data-provider-slave org.tizen.smartsearch::vconf r---- +org.tizen.data-provider-slave org.tizen.smartsearch::vconf r---- diff --git a/packaging/org.tizen.smartsearch.spec b/packaging/org.tizen.smartsearch.spec new file mode 100755 index 0000000..22ca19b --- /dev/null +++ b/packaging/org.tizen.smartsearch.spec @@ -0,0 +1,100 @@ +Name: org.tizen.smartsearch +Summary: Smartsearch Application +Version: 0.3.16 +Release: 1 +Group: main +License: Flora Software License +Source0: %{name}-%{version}.tar.gz +Requires: elementary-bin libslp-memo +BuildRequires: pkgconfig(appcore-efl) +BuildRequires: pkgconfig(aul) +BuildRequires: pkgconfig(db-util) +BuildRequires: pkgconfig(dlog) +BuildRequires: pkgconfig(ecore) +BuildRequires: pkgconfig(ecore-imf) +BuildRequires: pkgconfig(ecore-input) +BuildRequires: pkgconfig(ecore-x) +BuildRequires: pkgconfig(elementary) +BuildRequires: pkgconfig(email-service) +BuildRequires: pkgconfig(glib-2.0) +BuildRequires: pkgconfig(icu-i18n) +BuildRequires: pkgconfig(json-glib-1.0) +BuildRequires: pkgconfig(libsoup-2.4) +BuildRequires: pkgconfig(memo) +BuildRequires: pkgconfig(msg-service) +BuildRequires: pkgconfig(ui-gadget-1) +BuildRequires: pkgconfig(utilX) +BuildRequires: pkgconfig(x11) +BuildRequires: pkgconfig(capi-content-media-content) +BuildRequires: pkgconfig(capi-appfw-application) +BuildRequires: pkgconfig(capi-appfw-app-manager) +BuildRequires: pkgconfig(capi-web-favorites) +BuildRequires: libug-contacts-devel +BuildRequires: pkgconfig(cert-svc) +BuildRequires: pkgconfig(cert-svc-vcore) +BuildRequires: pkgconfig(contacts-service2) +BuildRequires: pkgconfig(calendar-service2) + +BuildRequires: cmake +BuildRequires: edje-tools +BuildRequires: gettext-devel + +Requires: libug-worldclock-efl libug-phone-efl + +%description +Smartsearch Application. + +%prep +%setup -q + +%build + +%define PREFIX "/usr/apps/org.tizen.smartsearch" +%define RESDIR "/usr/apps/org.tizen.smartsearch/res" +%define DATADIR "/opt/usr/apps/org.tizen.smartsearch/data" + +cmake . -DCMAKE_INSTALL_PREFIX=%{PREFIX} +make %{?jobs:-j%jobs} + +%install +%make_install + +touch %{buildroot}/opt/usr/apps/org.tizen.smartsearch/data/.search.db +touch %{buildroot}/opt/usr/apps/org.tizen.smartsearch/data/.search.db-journal + +mkdir -p %{buildroot}/usr/share/license +install LICENSE.Flora %{buildroot}/usr/share/license/%{name} + +%post +SEARCHPKG="org.tizen.smartsearch" + +# create db +if [ ! -s /opt/usr/apps/$SEARCHPKG/data/.search.db ] +then + sqlite3 /opt/usr/apps/org.tizen.smartsearch/data/.search.db 'PRAGMA journal_mode = PERSIST; + CREATE TABLE IF NOT EXISTS search_category (item_name text not null, item_string int, item_visible int, item_order int, item_contents_type int, item_object_type int, def_pkg_name text);' + +fi + +# owner & permission +chown -R 5000:5000 /opt/usr/apps/$SEARCHPKG/data +chown -R 5000:5000 /opt/usr/apps/$SEARCHPKG/data/.search.db +chown -R 5000:5000 /opt/usr/apps/$SEARCHPKG/data/.search.db-journal + +chmod 660 /opt/usr/apps/$SEARCHPKG/data/.search.db +chmod 660 /opt/usr/apps/$SEARCHPKG/data/.search.db-journal + +vconftool set -t int file/private/org.tizen.smartsearch/category 0 -u 5000 -g 5000 2> /dev/null +vconftool set -t string file/private/org.tizen.smartsearch/keyword '' -u 5000 -g 5000 2> /dev/null + +%files +%manifest org.tizen.smartsearch.manifest +/usr/share/packages/* +/usr/share/icons/default/small/* +/usr/apps/org.tizen.smartsearch/bin/* +/usr/apps/org.tizen.smartsearch/res/* +/usr/share/license/%{name} +%attr(-,inhouse,inhouse) /opt/usr/apps/org.tizen.smartsearch/data/ +%config(noreplace,missingok) /opt/usr/apps/org.tizen.smartsearch/data/.search.db +%config(noreplace,missingok) /opt/usr/apps/org.tizen.smartsearch/data/.search.db-journal +/opt/etc/smack/accesses.d/org.tizen.smartsearch.rule diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt new file mode 100755 index 0000000..d8183e0 --- /dev/null +++ b/po/CMakeLists.txt @@ -0,0 +1,76 @@ +# for i18n + +SET(POFILES + hy.po + az.po + eu.po + bg.po + ca.po + zh_CN.po + zh_HK.po + zh_TW.po + hr.po + cs.po + da.po + nl_NL.po + en.po + en_US.po + et.po + fi.po + fr_FR.po + gl.po + ka.po + de_DE.po + el_GR.po + hu.po + is.po + ga.po + it_IT.po + ja_JP.po + kk.po + ko_KR.po + lv.po + lt.po + mk.po + nb.po + pl.po + pt_PT.po + pt_BR.po + ro.po + ru_RU.po + sr.po + sk.po + sl.po + es_ES.po + es_MX.po + sv.po + tr_TR.po + uk.po + uz.po + ar.po + zh_SG.po + hi.po + en_PH.po + fr_CA.po +) + +SET(MSGFMT "/usr/bin/msgfmt") + +FOREACH(pofile ${POFILES}) + SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile}) + MESSAGE("PO: ${pofile}") + GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE) + GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE) + SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo) + ADD_CUSTOM_COMMAND( + OUTPUT ${moFile} + COMMAND ${MSGFMT} -o ${moFile} ${absPofile} + DEPENDS ${absPofile} + ) + INSTALL(FILES ${moFile} + DESTINATION ${LOCALEDIR}/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo) + SET(moFiles ${moFiles} ${moFile}) +ENDFOREACH(pofile) + +MESSAGE(".mo files: ${moFiles}") +ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles}) diff --git a/po/POTFILES.in b/po/POTFILES.in new file mode 100755 index 0000000..3263667 --- /dev/null +++ b/po/POTFILES.in @@ -0,0 +1,10 @@ +# List of source files containing translatable strings. +src/noresult_view.cpp +src/ps_makeupviews.cpp +src/ps_searchutil.cpp +src/search_bar.cpp +src/change_category.cpp +src/ps_lucenesearcher.cpp +src/ps_mfw.cpp +src/ps_ui_gadget_interface.cpp +src/smartsearch.cpp diff --git a/po/ar.po b/po/ar.po new file mode 100755 index 0000000..0a739da --- /dev/null +++ b/po/ar.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "جاري التحديث..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "يتعذر تشغيل التطبيق" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "البيانات المحددة غير موجودة" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "الهاتف" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "مزيد من النتائج" + diff --git a/po/az.po b/po/az.po new file mode 100755 index 0000000..9b57d73 --- /dev/null +++ b/po/az.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Yenilənir..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Proqramı başlatmaq mümkün deyil" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Seçilmiş məlumat mövcud deyil" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefon" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Daha çox nəticələr" + diff --git a/po/bg.po b/po/bg.po new file mode 100755 index 0000000..d72530e --- /dev/null +++ b/po/bg.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Актуализиране..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Приложението не може да се стартира" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Избраните данни не съществуват" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Телефон" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Още резултати" + diff --git a/po/ca.po b/po/ca.po new file mode 100755 index 0000000..9a447d4 --- /dev/null +++ b/po/ca.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Actualitzant..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "No es pot iniciar l'aplicació" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Les dades seleccionades no existeixen" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telèfon" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Més resultats" + diff --git a/po/cs.po b/po/cs.po new file mode 100755 index 0000000..2c0fc1c --- /dev/null +++ b/po/cs.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Aktualizace..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Aplikaci se nepodařilo spustit" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Vybraná data neexistují" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefon" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Další výsledky" + diff --git a/po/da.po b/po/da.po new file mode 100755 index 0000000..72a8f7f --- /dev/null +++ b/po/da.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Opdaterer ..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Kan ikke starte program" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Valgte data findes ikke" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefon" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Flere resultater" + diff --git a/po/de_DE.po b/po/de_DE.po new file mode 100755 index 0000000..a502661 --- /dev/null +++ b/po/de_DE.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Aktualisierung..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Anwendung kann nicht gestartet werden" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Ausgewählte Daten sind nicht vorhanden" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefon" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Mehr Ergebnisse" + diff --git a/po/el_GR.po b/po/el_GR.po new file mode 100755 index 0000000..95ef07a --- /dev/null +++ b/po/el_GR.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Ενημέρωση..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Αδύνατη η εκκίνηση της εφαρμογής" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Τα επιλεγμένα δεδομένα δεν υπάρχουν" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Τηλέφωνο" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Περισσότερα αποτελέσματα" + diff --git a/po/en.po b/po/en.po new file mode 100755 index 0000000..336e2dd --- /dev/null +++ b/po/en.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Updating..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Unable to launch application" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Selected data does not exist" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Phone" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "More results" + diff --git a/po/en_PH.po b/po/en_PH.po new file mode 100755 index 0000000..336e2dd --- /dev/null +++ b/po/en_PH.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Updating..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Unable to launch application" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Selected data does not exist" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Phone" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "More results" + diff --git a/po/en_US.po b/po/en_US.po new file mode 100755 index 0000000..336e2dd --- /dev/null +++ b/po/en_US.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Updating..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Unable to launch application" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Selected data does not exist" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Phone" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "More results" + diff --git a/po/es_ES.po b/po/es_ES.po new file mode 100755 index 0000000..8b5a72d --- /dev/null +++ b/po/es_ES.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Actualizando..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "No se puede iniciar aplicación" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Los datos seleccionados no existen" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Teléfono" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Más resultados" + diff --git a/po/es_MX.po b/po/es_MX.po new file mode 100755 index 0000000..8b5a72d --- /dev/null +++ b/po/es_MX.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Actualizando..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "No se puede iniciar aplicación" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Los datos seleccionados no existen" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Teléfono" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Más resultados" + diff --git a/po/es_US.po b/po/es_US.po new file mode 100755 index 0000000..8b5a72d --- /dev/null +++ b/po/es_US.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Actualizando..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "No se puede iniciar aplicación" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Los datos seleccionados no existen" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Teléfono" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Más resultados" + diff --git a/po/et.po b/po/et.po new file mode 100755 index 0000000..4e70a1e --- /dev/null +++ b/po/et.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Värskendamine..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Rakendust ei saa käivitada" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Valitud andmeid pole olemas" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefon" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Rohkem tulemusi" + diff --git a/po/eu.po b/po/eu.po new file mode 100755 index 0000000..5646274 --- /dev/null +++ b/po/eu.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Eguneratzen..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Ezin da aplikazioa abiarazi" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Aukeratutako datuak ez dira existitzen" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefonoa" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Emaitza gehiago" + diff --git a/po/fi.po b/po/fi.po new file mode 100755 index 0000000..b5ef2a7 --- /dev/null +++ b/po/fi.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Päivitetään..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Sovellusta ei voi käynnistää" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Valittuja tietoja ei ole olemassa" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Puhelin" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Lisää tuloksia" + diff --git a/po/fr_CA.po b/po/fr_CA.po new file mode 100755 index 0000000..256cca7 --- /dev/null +++ b/po/fr_CA.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Mise à jour..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Impossible de lancer l'application" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Les données sélectionnées n'existent pas" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Téléphone" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Autres résultats" + diff --git a/po/fr_FR.po b/po/fr_FR.po new file mode 100755 index 0000000..e4f33da --- /dev/null +++ b/po/fr_FR.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Mise à jour..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Impossible de lancer l'application" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Les données sélectionnées n'existent pas" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Téléphone" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Plus de résultats" + diff --git a/po/ga.po b/po/ga.po new file mode 100755 index 0000000..0f55ee7 --- /dev/null +++ b/po/ga.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Ag nuashonrú..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Ní féidir feidhmchlár a lainseáil" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Níl na sonraí a roghnaíodh ann" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Fón" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Tuilleadh torthaí" + diff --git a/po/gl.po b/po/gl.po new file mode 100755 index 0000000..2c58474 --- /dev/null +++ b/po/gl.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Actualizando..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Non se pode iniciar a aplicación" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Os datos seleccionados non existen" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Teléfono" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Máis resultados" + diff --git a/po/hi.po b/po/hi.po new file mode 100755 index 0000000..6ca2386 --- /dev/null +++ b/po/hi.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "अपडेट हो रहा है..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "अनुप्रयोग लॉन्च करने में अक्षम" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "चयनित डेटा मौजूद नहीं है" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "फ़ोन" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "और परिणाम" + diff --git a/po/hr.po b/po/hr.po new file mode 100755 index 0000000..4242ada --- /dev/null +++ b/po/hr.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Aktualiziranje..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Nemoguće pokrenuti aplikaciju" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Nema odabranih podataka" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefon" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Više rezultata" + diff --git a/po/hu.po b/po/hu.po new file mode 100755 index 0000000..75a720a --- /dev/null +++ b/po/hu.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Frissítés..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Az alkalmazás nem indítható el" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "A kijelölt adatok nem léteznek" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefon" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "További eredmények" + diff --git a/po/hy.po b/po/hy.po new file mode 100755 index 0000000..6f080a0 --- /dev/null +++ b/po/hy.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Թարմացնում է..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Անհնար է գործարկել ծրագիրը" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Ընտրված տվյալները գոյություն չունեն" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Հեռախոս" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Այլ արդյունքներ" + diff --git a/po/is.po b/po/is.po new file mode 100755 index 0000000..61ee235 --- /dev/null +++ b/po/is.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Verið er að uppfæra..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Mistókst að ræsa forrit" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Völdu gögnin eru ekki til" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Í síma" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Fleiri niðurstöður" + diff --git a/po/it_IT.po b/po/it_IT.po new file mode 100755 index 0000000..42251c6 --- /dev/null +++ b/po/it_IT.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Aggiornamento..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Impossibile avviare applicazione" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "I dati selezionati non esistono" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefono" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Altri risultati" + diff --git a/po/ja_JP.po b/po/ja_JP.po new file mode 100755 index 0000000..243b646 --- /dev/null +++ b/po/ja_JP.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "更新中..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "アプリケーションを起動できません。" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "選択したデータは存在しません" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "電話" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "他の結果" + diff --git a/po/ka.po b/po/ka.po new file mode 100755 index 0000000..effe055 --- /dev/null +++ b/po/ka.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "განახლება..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "პროგრამის ჩართვა შეუძლებელია" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "არჩეული მონაცემები არ არსებობს" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "ტელეფონი" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "სხვა შედეგები" + diff --git a/po/kk.po b/po/kk.po new file mode 100755 index 0000000..fe00135 --- /dev/null +++ b/po/kk.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Жаңартуда..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Бағдарламаны ашу мүмкін емес" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Таңдалған деректер жоқ" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Телефон" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Қосымша нәтижелер" + diff --git a/po/ko_KR.po b/po/ko_KR.po new file mode 100755 index 0000000..45109d8 --- /dev/null +++ b/po/ko_KR.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "업데이트 중..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "애플리케이션을 실행할 수 없습니다" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "존재하지 않는 데이터입니다" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "휴대폰" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "결과 더보기" + diff --git a/po/lt.po b/po/lt.po new file mode 100755 index 0000000..d0aa8df --- /dev/null +++ b/po/lt.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Atnaujinama..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Neįmanoma paleisti programos" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Pasirinktų duomenų nėra" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefonas" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Daugiau rezultatų" + diff --git a/po/lv.po b/po/lv.po new file mode 100755 index 0000000..f8eda64 --- /dev/null +++ b/po/lv.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Atjaunina..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Nevar palaist programmu" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Izvēlētie dati nepastāv" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Tālrunis" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Citi rezultāti" + diff --git a/po/mk.po b/po/mk.po new file mode 100755 index 0000000..14be0d0 --- /dev/null +++ b/po/mk.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Се ажурира..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Не може да се отвори апликацијата" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Избраните податоци не постојат" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Телефон" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Уште резултати" + diff --git a/po/nb.po b/po/nb.po new file mode 100755 index 0000000..6174f4f --- /dev/null +++ b/po/nb.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Oppdaterer..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Kan ikke starte program" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Valgte data finnes ikke" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefon" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Flere resultater" + diff --git a/po/nl_NL.po b/po/nl_NL.po new file mode 100755 index 0000000..eae97ea --- /dev/null +++ b/po/nl_NL.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Bijwerken..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Kan applicatie niet starten" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Geselecteerde gegevens bestaan niet" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefoon" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Meer resultaten" + diff --git a/po/pl.po b/po/pl.po new file mode 100755 index 0000000..103a9dc --- /dev/null +++ b/po/pl.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Aktualizacja..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Nie można uruchomić aplikacji" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Wybrane dane nie istnieją" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefon" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Więcej wyników" + diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100755 index 0000000..b73a946 --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Atualizando…" + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Impossível iniciar aplicação" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Os dados selecionados não existem" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefone" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Mais resultados" + diff --git a/po/pt_PT.po b/po/pt_PT.po new file mode 100755 index 0000000..819ab0a --- /dev/null +++ b/po/pt_PT.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "A actualizar..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Impossível iniciar aplicação" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Os dados seleccionados não existem" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefone" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Mais resultados" + diff --git a/po/ro.po b/po/ro.po new file mode 100755 index 0000000..55ae84c --- /dev/null +++ b/po/ro.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Actualizare..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Imposibil de lansat aplicaţia" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Datele selectate nu există" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefon" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Mai multe rezultate" + diff --git a/po/ru_RU.po b/po/ru_RU.po new file mode 100755 index 0000000..6da5b3e --- /dev/null +++ b/po/ru_RU.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Обновление..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Не удается запустить приложение" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Выбранные данные не существуют" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Телефон" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Другие результаты" + diff --git a/po/sk.po b/po/sk.po new file mode 100755 index 0000000..2655fc7 --- /dev/null +++ b/po/sk.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Aktualizácia..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Aplikácia sa nedá spustiť" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Vybraté údaje neexistujú" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefón" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Ďalšie výsledky" + diff --git a/po/sl.po b/po/sl.po new file mode 100755 index 0000000..58bb5b6 --- /dev/null +++ b/po/sl.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Posodabljam..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Programa ni mogoče zagnati" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Izbrani podatki ne obstajajo" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefon" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Več rezultatov" + diff --git a/po/sr.po b/po/sr.po new file mode 100755 index 0000000..dc8a2aa --- /dev/null +++ b/po/sr.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Ažuriranje..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Nemoguće pokrenuti aplikaciju" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Izabrani podaci ne postoje" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefon" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Još rezultata" + diff --git a/po/sv.po b/po/sv.po new file mode 100755 index 0000000..76a6612 --- /dev/null +++ b/po/sv.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Uppdaterar..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Det går inte att starta programmet" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Valda data finns inte" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefon" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Fler resultat" + diff --git a/po/tr_TR.po b/po/tr_TR.po new file mode 100755 index 0000000..4140282 --- /dev/null +++ b/po/tr_TR.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Güncelleniyor..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Uygulama başlatılamıyor" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Seçilen veriler mevcut değil" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefon" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Diğer sonuçlar" + diff --git a/po/uk.po b/po/uk.po new file mode 100755 index 0000000..2aa75a8 --- /dev/null +++ b/po/uk.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Оновлення..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Неможливо запустити програму" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Вибрані дані не існують" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Телефон" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Інші результати" + diff --git a/po/uz.po b/po/uz.po new file mode 100755 index 0000000..32ed156 --- /dev/null +++ b/po/uz.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "Yangilanmoqda..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "Ilovani ishga tushirib bo‘lmaydi" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "Ma’lumotlar mavjud emas" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "Telefon" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "Boshqa natijalar" + diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100755 index 0000000..1088649 --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "正在更新" + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "无法启动应用程序" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "选择的数据不存在" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "手机" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "更多结果" + diff --git a/po/zh_HK.po b/po/zh_HK.po new file mode 100755 index 0000000..f35f59b --- /dev/null +++ b/po/zh_HK.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "正在更新..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "無法啟動應用程式" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "已選資料不存在" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "手機" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "更多結果" + diff --git a/po/zh_SG.po b/po/zh_SG.po new file mode 100755 index 0000000..670b9af --- /dev/null +++ b/po/zh_SG.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "更新中…" + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "无法启动应用程序" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "选择的数据不存在" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "手机" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "更多结果" + diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100755 index 0000000..b0b2308 --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,15 @@ +msgid "IDS_SSEARCH_POP_UPDATING_ING" +msgstr "正在更新..." + +msgid "IDS_SSEARCH_POP_UNABLE_TO_LAUNCH_APPLICATION" +msgstr "無法執行應用程式" + +msgid "IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST" +msgstr "選定的數據不存在" + +msgid "IDS_SSEARCH_HEADER_PHONE_ABB" +msgstr "電話" + +msgid "IDS_SSEARCH_BODY_MORE_RESULTS" +msgstr "更多結果" + diff --git a/src/common_util.cpp b/src/common_util.cpp new file mode 100755 index 0000000..3a7c30f --- /dev/null +++ b/src/common_util.cpp @@ -0,0 +1,433 @@ +/* + * Copyright 2012-2013 Samsung Electronics Co., Ltd/ + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + +#include +#include +#include +#include + +#include +#include +#include +#include + +static UDateTimePatternGenerator *search_pattern_generator = NULL; +static UDateFormat *search_formatter_yymmdd_12th; +static UDateFormat *search_formatter_yymmdd_24th; + +static UDateFormat *search_formatter_yymmdd; +static UDateFormat *search_formatter_yymm; + +UDateFormat *__search_util_make_date_format(const char *skeleton) +{ + SEARCH_FUNC_START; + + UDateFormat *formatter = NULL; + UChar customSkeleton[SEARCH_MAX_UCHAR_SIZE] = { '\0' }; + int32_t bestPatternCapacity, bestPatternLength; + UChar bestPattern[SEARCH_MAX_UCHAR_SIZE] = { 0, }; + UErrorCode status = U_ZERO_ERROR; + const char *locale = NULL; + + /* Pattern Generator */ + if (search_pattern_generator) { + udatpg_close(search_pattern_generator); + search_pattern_generator = NULL; + } + + uloc_setDefault(getenv("LC_TIME"), &status); + + locale = uloc_getDefault(); + + search_pattern_generator = udatpg_open(uloc_getDefault(), &status); + + if (!search_pattern_generator) { + SEARCH_DEBUG_WARNING + ("pattern_generator / udatpg_open fail : %s", + u_errorName(status)); + return NULL; + } + + SEARCH_DEBUG_LOG("skeleton : %s", skeleton); + + u_uastrncpy(customSkeleton, skeleton, strlen(skeleton)); + + bestPatternCapacity = + (int32_t) (sizeof(bestPattern) / sizeof((bestPattern)[0])); + bestPatternLength = + udatpg_getBestPattern(search_pattern_generator, customSkeleton, + u_strlen(customSkeleton), bestPattern, + bestPatternCapacity, &status); + + if (bestPatternLength == 0) { + SEARCH_DEBUG_WARNING("udatpg_getBestPattern fail"); + return NULL; + } + + formatter = + udat_open(UDAT_IGNORE, UDAT_IGNORE, locale, NULL, -1, bestPattern, + -1, &status); + + SEARCH_FUNC_END; + + return formatter; + } + + +void search_util_date_time_format_init() +{ + SEARCH_FUNC_START; + + /* Date Time Format From Skeletons */ + enum appcore_time_format timeformat; + int ret; + char *skeleton = NULL; + + ret = appcore_get_timeformat(&timeformat); + if (ret == -1) { + SEARCH_DEBUG_WARNING("Fail to get time format!"); + return; + } + + SEARCH_MALLOC(skeleton, SEARCH_MAX_CHAR_SIZE, char); + snprintf(skeleton, SEARCH_MAX_CHAR_SIZE, "%s%s", UDAT_YEAR_MONTH_DAY, UDAT_HOUR_MINUTE); + search_formatter_yymmdd_12th = __search_util_make_date_format(skeleton); + snprintf(skeleton, SEARCH_MAX_CHAR_SIZE, "%s%s", UDAT_YEAR_MONTH_DAY, UDAT_HOUR24_MINUTE); + search_formatter_yymmdd_24th = __search_util_make_date_format(skeleton); + snprintf(skeleton, SEARCH_MAX_CHAR_SIZE, "%s", UDAT_YEAR_MONTH_DAY); + search_formatter_yymm = __search_util_make_date_format(skeleton); + SEARCH_FREE(skeleton); + + if (timeformat == APPCORE_TIME_FORMAT_24) { + search_formatter_yymmdd = search_formatter_yymmdd_24th; + } else if (timeformat == APPCORE_TIME_FORMAT_12) { + search_formatter_yymmdd = search_formatter_yymmdd_12th; + } else { + SEARCH_DEBUG_WARNING("appcore_get_timeformat unknown error"); + return; + } + + SEARCH_FUNC_END; + + return; + } + +void search_region_format_cb(void *data) +{ + SEARCH_FUNC_START; + + enum appcore_time_format timeformat; + int ret; + + ret = appcore_get_timeformat(&timeformat); + + if (ret == -1) { + SEARCH_DEBUG_WARNING("Fail to get time format!"); + return; + } + + if (timeformat == APPCORE_TIME_FORMAT_24) { + search_formatter_yymmdd = search_formatter_yymmdd_24th; + } else if (timeformat == APPCORE_TIME_FORMAT_12) { + search_formatter_yymmdd = search_formatter_yymmdd_12th; + } else { + SEARCH_DEBUG_WARNING("appcore_get_timeformat unknown error"); + return; +} + + SEARCH_FUNC_END; +} + +void search_util_date_time_format_deinit() +{ + SEARCH_FUNC_START; + + if (search_pattern_generator) { + udatpg_close(search_pattern_generator); + search_pattern_generator = NULL; + } + + if (search_formatter_yymmdd_12th) { + udat_close(search_formatter_yymmdd_12th); + search_formatter_yymmdd_12th = NULL; + } + + if (search_formatter_yymmdd_24th) { + udat_close(search_formatter_yymmdd_24th); + search_formatter_yymmdd_24th = NULL; + } + + if (search_formatter_yymm) { + udat_close(search_formatter_yymm); + search_formatter_yymm = NULL; + } + + SEARCH_FUNC_END; + + return; +} + +void search_util_date_time_format_get_val(time_t time, char *format_val, int type) +{ + SEARCH_FUNC_START; + + UDate date; + UChar formatted[SEARCH_MAX_UCHAR_SIZE] = { 0, }; + int32_t formattedCapacity, formattedLength; + UErrorCode status = U_ZERO_ERROR; + char formattedString[SEARCH_MAX_CHAR_SIZE] = { 0, }; + + date = (UDate) time *1000; + + formattedCapacity = + (int32_t) (sizeof(formatted) / sizeof((formatted)[0])); + + switch(type) { + case SEARCH_DATE_TYPE_YYMMDD: + if (search_formatter_yymmdd) { + formattedLength = + udat_format(search_formatter_yymmdd, date, formatted, formattedCapacity, + NULL, &status); + if (formattedLength == -1) { + SEARCH_DEBUG_WARNING("udat_format fail"); + return; + } + } + break; + case SEARCH_DATE_TYPE_YYMM: + if (search_formatter_yymm) { + formattedLength = + udat_format(search_formatter_yymm, date, formatted, formattedCapacity, + NULL, &status); + if (formattedLength == -1) { + SEARCH_DEBUG_WARNING("udat_format fail"); + return; + } + } + break; + } + + + u_austrncpy(formattedString, formatted, SEARCH_MAX_CHAR_SIZE); + + SEARCH_DEBUG_LOG("formattedString : %s", formattedString); + + snprintf(format_val, MAX_LENGTH_PER_LINE, "%s", formattedString); + + SEARCH_FUNC_END; +} + +void search_sql_make_keyword_bind_value(char *src, char *dest, int type) +{ + char *tmp; + + if(type == SEARCH_SQL_BIND_TYPE_DUPLEX) { + *dest = '%'; + ++dest; + } + + for (tmp = src; *tmp; ++tmp, ++dest) { + if ((*tmp == '%') || (*tmp == '_') || (*tmp == *DB_ESCAPE_CHAR)) { + *dest = *DB_ESCAPE_CHAR; + ++dest; + } + + *dest = *tmp; + } + + *dest = '%'; +} + +void search_get_date_string(char *date_string) +{ + struct tm *time_tm = NULL; + + unsigned long seconds; + seconds = atol(date_string); + + time_tm = gmtime((time_t *) & seconds); + sprintf(date_string, "%4d-%02d-%02d %02d:%02d:%02d", time_tm->tm_year + + 1900, time_tm->tm_mon + 1, time_tm->tm_mday, time_tm->tm_hour, + time_tm->tm_min, time_tm->tm_sec); +} + + +#if (!CHECK_VALIDATE_UTF8) +const char *search_markup_keyword(const char *string, char *searchword, + bool *result) +{ + char pstr[DEF_BUF_LEN + 1] = {0,}; + char result_str[DEF_BUF_LEN + 1] = {0,}; + char start_str[DEF_BUF_LEN + 1] = {0,}; + static char return_string[DEF_BUF_LEN + 1] = { 0, }; + int word_len = 0; + int search_len = 0; + int i = 0; + bool found = false; + + SEARCH_RET_IF_STR_INVALID(string, return_string); + SEARCH_RET_IF_STR_INVALID(searchword, return_string); + + strncpy(pstr, string, DEF_BUF_LEN); + + word_len = strlen(pstr); + search_len = strlen(searchword); + + for (i = 0; i < word_len; i++) { + if (!strncasecmp(searchword, &pstr[i], search_len)) { + found = true; + break; + } + } + + *result = found; + + if (found) { + if (i == 0) { + strncpy(result_str, &pstr[i], search_len); + result_str[search_len] = '\0'; + snprintf(return_string, 128, + "%s%s", &result_str[0], + &pstr[search_len]); + } else if (i > 0) { + strncpy(start_str, &pstr[0], i); + start_str[i + 1] = '\0'; + strncpy(result_str, &pstr[i], search_len); + result_str[search_len] = '\0'; + snprintf(return_string, 128, + "%s%s%s", &start_str[0], + &result_str[0], &pstr[i + search_len]); + } + } else { + snprintf(return_string, 128, "%s", pstr); + } + + return return_string; +} + + +#else +const char *search_markup_keyword(const char *string, char *searchword, + bool *result) +{ + char pstr[DEF_BUF_LEN + 1] = {0,}; + static char return_string[DEF_BUF_LEN + 1] = { 0, }; + int word_len = 0; + int search_len = 0; + int i = 0; + bool found = false; + gchar* markup_text_start; + gchar* markup_text_end; + gchar* markup_text; + + SEARCH_RET_IF_STR_INVALID(string, return_string); + SEARCH_RET_IF_STR_INVALID(searchword, return_string); + + if(g_utf8_validate(string,-1,NULL)) { + + strncpy(pstr, string, DEF_BUF_LEN); + + word_len = strlen(pstr); + search_len = strlen(searchword); + + for (i = 0; i < word_len; i++) { + if (!strncasecmp(searchword, &pstr[i], search_len)) { + found = true; + break; + } + } + + *result = found; + memset(return_string, 0x00, DEF_BUF_LEN); + + if (found) { + if (i == 0) { + markup_text = g_markup_escape_text(&pstr[0], search_len); + markup_text_end = g_markup_escape_text(&pstr[search_len], word_len-search_len); + snprintf(return_string, + DEF_BUF_LEN, + "%s%s", + markup_text, + (char*)markup_text_end); + g_free(markup_text); + g_free(markup_text_end); + } else { + markup_text_start = g_markup_escape_text(&pstr[0], i); + markup_text = g_markup_escape_text(&pstr[i], search_len); + markup_text_end = g_markup_escape_text(&pstr[i+search_len], word_len-(i+search_len)); + snprintf(return_string, + DEF_BUF_LEN, + "%s%s%s", + (char*)markup_text_start, + markup_text, + (char*)markup_text_end); + g_free(markup_text); + g_free(markup_text_start); + g_free(markup_text_end); + } + } else { + snprintf(return_string, 128, "%s", pstr); + } + } + + return return_string; +} +#endif + +char *search_get_main_window_name() +{ + SEARCH_FUNC_START; + + XTextProperty tp; + int count = 0, i, ret; + char **list = NULL; + char return_win_name[256] = { 0, }; + int revert_to; + Window focus_win; + Display *dpy; + int screen = 0; + + dpy = XOpenDisplay(0); + screen = DefaultScreen(dpy); + + XGetInputFocus(dpy, &focus_win, &revert_to); + + if (focus_win) { + XGetWMName(dpy, focus_win, &tp); + if (tp.nitems > 0) { + ret = + XmbTextPropertyToTextList(dpy, &tp, &list, &count); + if ((ret == Success || ret > 0) && list != NULL) { + for (i = 0; i < count; i++) + strncpy(return_win_name, list[i], + strlen(list[i])); + XFreeStringList(list); + } + } + } else { + return NULL; + } + + SEARCH_FUNC_END; + + return strdup(return_win_name); +} diff --git a/src/ps_app_interface.cpp b/src/ps_app_interface.cpp new file mode 100755 index 0000000..0aa34b2 --- /dev/null +++ b/src/ps_app_interface.cpp @@ -0,0 +1,761 @@ +/* + * Copyright 2012-2013 Samsung Electronics Co., Ltd/ + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + +#include "smartsearch.h" +#include "ps_app_interface.h" +#include "ps_searcher.h" +#include +#include +#include +#include +#include +#include + +static void __search_ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, + void *priv) +{ + SEARCH_FUNC_START; + + Evas_Object *base = NULL; (Evas_Object *) ug_get_layout(ug); + Evas_Object *win = NULL; + + SEARCH_RET_IF(ug == NULL || priv == NULL); + + base = (Evas_Object *)ug_get_layout(ug); + win = (Evas_Object *)ug_get_window(); + + SEARCH_RET_IF(base == NULL); + SEARCH_RET_IF(win == NULL); + + switch (mode) { + case UG_MODE_FULLVIEW: + evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, base); + evas_object_show(base); + break; + default: + break; + } + + SEARCH_FUNC_END; +} + +static void __search_ug_closed_cb(ui_gadget_h ug, void *priv) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)priv; + + SEARCH_RET_IF(ug == NULL); + SEARCH_RET_IF(ad == NULL); + + ug_destroy(ug); + ad->detail_ug = NULL; + + elm_genlist_select_mode_set(ad->search_gl, ELM_OBJECT_SELECT_MODE_DEFAULT); + + if (elm_object_scroll_freeze_get(ad->search_gl) > 0) { + elm_object_scroll_freeze_pop(ad->search_gl); + } + + SEARCH_FUNC_END; +} + +void search_launch_contact_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = (struct search_item_sel *)record_info; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + service_h service = NULL; + int ret = 0; + bool err_popup_show = true; + + Ecore_X_Window win_id = -1; + + win_id = elm_win_xwindow_get(ad->win_main); + + ret = service_create(&service); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_create"); + goto out_func; + } + + ret = service_set_app_id(service, "contacts-details-efl"); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_set_app_id!"); + goto out_func; + } + + ret = service_set_window(service, win_id); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_set_window!"); + goto out_func; + } + + ret = service_add_extra_data(service, "type", "0");; + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_add_extra_data : type!"); + goto out_func; + } + + ret = service_add_extra_data(service, "person_id", cur_category_mem->launch_param); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_add_extra_data : person_id"); + goto out_func; + } + + ret = service_send_launch_request(service, NULL, NULL); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_send_launch_request"); + goto out_func; + } else { + err_popup_show = false; + } + +out_func: + if (err_popup_show == true) { + search_launch_popup_error(LAUNCH_ERROR_AUL_LAUNCH, ad); + } + + if (service != NULL) { + service_destroy(service); + } + + SEARCH_FUNC_END; +} + +void search_launch_msg_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = (struct search_item_sel *)record_info; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + service_h service = NULL; + int ret = 0; + bool err_popup_show = true; + + ret = service_create(&service); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_create"); + goto out_func; + } + + ret = service_set_package(service, "org.tizen.message"); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_set_package!"); + goto out_func; + } + + ret = service_add_extra_data(service, "type", "msg_id"); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_set_extra_data : msg_id"); + goto out_func; + } + + ret = service_add_extra_data(service, "msgId", cur_category_mem->launch_param); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_set_extra_data : msgId parameter!"); + goto out_func; + } + + ret = service_send_launch_request(service, NULL, NULL); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_send_launch_request"); + goto out_func; + } else { + err_popup_show = false; + } + +out_func: + if (err_popup_show == true) { + search_launch_popup_error(LAUNCH_ERROR_AUL_LAUNCH, ad); + } + + if (service != NULL) { + service_destroy(service); + } + + SEARCH_FUNC_END; +} + +void search_launch_email_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + char *token_param = NULL; + char *saveptr1; + int i = 0; + int ret = 0; + bool err_popup_show = true; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = (struct search_item_sel *)record_info; + + char temp_path[MAX_LENGTH_PER_PATH] = { 0, }; + + service_h service = NULL; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + ret = service_create(&service); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to create service handle!"); + goto out_func; + } + + snprintf(temp_path, MAX_LENGTH_PER_PATH - 1, "%s", cur_category_mem->launch_path); + token_param = strtok_r(temp_path, " ", &saveptr1); + + while (token_param != NULL) { + SEARCH_DEBUG_LOG("PARAMETER (%d) : %s", i, token_param); + if (i == 0) { + ret = service_add_extra_data(service, "ACCOUNT_ID", token_param); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to add extra data : ACCOUND_ID!"); + goto out_func; + } + } else if (i == 1) { + ret = service_add_extra_data(service, "MAIL_ID", token_param); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to add extra data : MAIL_ID!"); + goto out_func; + } + } else if (i == 2) { + ret = service_add_extra_data(service, "MAILBOX_ID", token_param); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to add extra data : MAILBOX_ID!"); + goto out_func; + } + } else { + break; + } + + i++; + token_param = strtok_r(NULL, " ", &saveptr1); + } + + ret = service_add_extra_data(service, "RUN_TYPE", "7"); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to add extra data : RUN_TYPE!"); + goto out_func; + } + + ret = service_set_package(service, "org.tizen.email"); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to set package!"); + goto out_func; + } + + ret = service_send_launch_request(service, NULL, NULL); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to send service!"); + goto out_func; + } + err_popup_show = false; + +out_func: + if (err_popup_show == true) { + search_launch_popup_error(LAUNCH_ERROR_APPSVC, ad); + } + + if (service != NULL) { + ret = service_destroy(service); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to destroy service header : [%d]", ret); + } + } + + SEARCH_FUNC_END; +} + +void search_launch_image_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = (struct search_item_sel *)record_info; + int ret; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + if (access(cur_category_mem->launch_path, F_OK) != 0) { + SEARCH_DEBUG_ERROR("image access error : %s", + cur_category_mem->launch_path); + search_launch_popup_error(LAUNCH_ERROR_FILE_NOT_FOUND, + ad); + } else { + SEARCH_DEBUG_LOG("cur_category_mem->launch_path : %s", + cur_category_mem->launch_path); + + service_h service; + ret = service_create(&service); + + if (ret == 0) { + service_set_operation(service, SERVICE_OPERATION_VIEW); + service_set_uri(service, cur_category_mem->launch_path); + ret = service_send_launch_request(service, NULL, NULL); + + if (ret != 0) { + SEARCH_DEBUG_ERROR("image app service launching error(%d)", ret); + search_launch_popup_error(LAUNCH_ERROR_APPSVC, + ad); + } + service_destroy(service); + } + } + + SEARCH_FUNC_END; +} + +void search_launch_video_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = (struct search_item_sel *)record_info; + int ret; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + if (access(cur_category_mem->launch_path, F_OK) != 0) { + SEARCH_DEBUG_ERROR("video access error : %s", + cur_category_mem->launch_path); + search_launch_popup_error(LAUNCH_ERROR_FILE_NOT_FOUND, ad); + } else { + SEARCH_DEBUG_LOG("cur_category_mem->launch_path : %s", + cur_category_mem->launch_path); + + service_h service; + ret = service_create(&service); + + if (ret == 0) { + service_set_operation(service, SERVICE_OPERATION_VIEW); + service_set_uri(service, cur_category_mem->launch_path); + ret = service_send_launch_request(service, NULL, NULL); + + if (ret != 0) { + SEARCH_DEBUG_ERROR("video app service launching error(%d)", ret); + search_launch_popup_error(LAUNCH_ERROR_APPSVC, + ad); + } + service_destroy(service); + } + } + + SEARCH_FUNC_END; +} + +void search_launch_music_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = (struct search_item_sel *)record_info; + int ret; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + if (access(cur_category_mem->launch_path, F_OK) != 0) { + SEARCH_DEBUG_ERROR("music file access error : %s", + cur_category_mem->launch_path); + search_launch_popup_error(LAUNCH_ERROR_FILE_NOT_FOUND, ad); + } else { + SEARCH_DEBUG_LOG("cur_category_mem->launch_path : %s", + cur_category_mem->launch_path); + + service_h service; + ret = service_create(&service); + + if (ret == 0) { + service_set_operation(service, SERVICE_OPERATION_VIEW); + service_set_uri(service, cur_category_mem->launch_path); + ret = service_send_launch_request(service, NULL, NULL); + + if (ret != 0) { + SEARCH_DEBUG_ERROR("music app service launching error(%d)", ret); + search_launch_popup_error(LAUNCH_ERROR_APPSVC, + ad); + } + service_destroy(service); + } + } + + SEARCH_FUNC_END; +} + +void search_launch_calendar_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = (struct search_item_sel *)record_info; + ui_gadget_h ug = NULL; + struct ug_cbs cbs = { 0, }; + int ret = 0; + bool err_popup_show = true; + service_h service = NULL; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + if (strlen(cur_category_mem->launch_param) <= 0) { + SEARCH_DEBUG_ERROR("Selected item does not have data!"); + goto out_func; + } else { + ret = service_create(&service); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to create service handle!"); + goto out_func; + } + + ret = service_add_extra_data(service, "itemType", "event"); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to add service extra data : parameter 1!"); + goto out_func; + } + + ret = service_add_extra_data(service, "eventId", cur_category_mem->launch_param); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to add service extra data : parameter 2!"); + goto out_func; + } + + cbs.destroy_cb = __search_ug_closed_cb; + cbs.layout_cb = __search_ug_layout_cb; + cbs.result_cb = NULL; + cbs.priv = ad; + + ug = ug_create(NULL, "calendar-detail-efl", UG_MODE_FULLVIEW, service, &cbs); + + if (!ug) { + SEARCH_DEBUG_ERROR("... create_ug_calendar : failed !!!"); + goto out_func; + } + + ad->detail_ug = ug; + err_popup_show = false; + } + +out_func: + if (err_popup_show == true) { + search_launch_popup_error(LAUNCH_ERROR_AUL_LAUNCH, ad); + } + + if (service != NULL) { + service_destroy(service); + } + + SEARCH_FUNC_END; +} + +void search_launch_memo_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = (struct search_item_sel *)record_info; + ui_gadget_h ug = NULL; + struct ug_cbs cbs = { 0, }; + + int ret = 0; + bool err_popup_show = true; + + service_h service = NULL; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + if (strlen(cur_category_mem->launch_param) <= 0) { + SEARCH_DEBUG_ERROR("Selected item does not have data!"); + goto out_func; + } else { + if (ad->detail_ug) { + SEARCH_DEBUG_WARNING("prev ug is exist. destroy prev ug"); + ug_destroy(ug); + ad->detail_ug = NULL; + } + + ret = service_create(&service); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to create service handle!"); + goto out_func; + } + + ret = service_add_extra_data(service, "index", cur_category_mem->launch_param); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to add service extra data : parameter 1!"); + goto out_func; + } + + cbs.layout_cb = __search_ug_layout_cb; + cbs.result_cb = NULL; + cbs.destroy_cb = __search_ug_closed_cb; + cbs.priv = ad; + + ug = ug_create(NULL, "memo-efl", UG_MODE_FULLVIEW, service, &cbs); + + if (!ug) { + SEARCH_DEBUG_ERROR("... create_ug_email : failed !!!"); + goto out_func; + } + + ad->detail_ug = ug; + err_popup_show = false; + } + +out_func: + if (err_popup_show == true) { + search_launch_popup_error(LAUNCH_ERROR_AUL_LAUNCH, ad); + } + + if (service != NULL) { + service_destroy(service); + } + + SEARCH_FUNC_END; +} + +void search_launch_menu_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = + (struct search_item_sel *)record_info; + char *pkg_name = NULL; + bool is_running = false; + app_context_h app_h; + + bool err_popup_show = true; + int ret; + service_h service = NULL; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + pkg_name = cur_category_mem->launch_path; + + if (pkg_name != NULL && strlen(pkg_name)) { + ret = app_manager_is_running(pkg_name, &is_running); + + if (ret != APP_MANAGER_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to get info : app_manager_is_running [%d]", ret); + goto out_func; + } + + if (is_running == true) { + ret = app_manager_get_app_context(pkg_name, &app_h); + if (ret != APP_MANAGER_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to get info : app_manager_get_app_context [%d]", ret); + goto out_func; + } + + ret = app_manager_resume_app(app_h); + + if (ret != APP_MANAGER_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to get info : app_manager_resume_app [%d]", ret); + goto out_func; + } + err_popup_show = false; + } else { + ret = service_create(&service); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to create service header : [%d]", ret); + goto out_func; + } + + ret = service_set_operation(service, SERVICE_OPERATION_DEFAULT); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to set operation : [%d]", ret); + goto out_func; + } + + ret = service_set_package(service, pkg_name); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to set package : [%d]", ret); + goto out_func; + } + + ret = service_send_launch_request(service, NULL, NULL); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to send launch request : [%d]", ret); + goto out_func; + } + err_popup_show = false; + } + } else { + SEARCH_DEBUG_ERROR("Pkg name is NULL!"); + } + +out_func: + if (err_popup_show == true) + search_launch_popup_error(LAUNCH_ERROR_APPSVC, ad); + + if (service != NULL) { + ret = service_destroy(service); + + if (ret != SERVICE_ERROR_NONE) + SEARCH_DEBUG_ERROR("Fail to destroy service header : [%d]", ret); + } + + SEARCH_FUNC_END; +} + +void search_launch_browser_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = + (struct search_item_sel *)record_info; + int ret; + service_h service; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + SEARCH_DEBUG_LOG("cur_category_mem->launch_path : %s", cur_category_mem->launch_path); + + ret = service_create(&service); + + if (ret == 0 && strlen(cur_category_mem->launch_path) > 0 ) { + service_set_operation(service, SERVICE_OPERATION_VIEW); + service_set_uri(service, cur_category_mem->launch_path); + ret = service_send_launch_request(service, NULL, NULL); + + if (ret != 0) { + SEARCH_DEBUG_ERROR("browser app service launching error(%d)", ret); + search_launch_popup_error(LAUNCH_ERROR_APPSVC, + ad); + } + service_destroy(service); + } + +} + +static void __search_launch_popup_error_response_cb(void *data, + Evas_Object * obj, + void *event_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + SEARCH_RET_IF(ad == NULL); + + evas_object_del(ad->ctxpopup); + ad->ctxpopup = NULL; + + SEARCH_FUNC_END; +} + +void search_launch_popup_error(int error_type, void *data) +{ + Evas_Object *popup; + Evas_Object *btn1; + + struct appdata *ad = (struct appdata *)data; + + SEARCH_RET_IF(ad == NULL); + + if (error_type >= LAUNCH_ERROR_MAX) { + SEARCH_DEBUG_ERROR("wrong error_type : %d", error_type); + } + + if (ad->ctxpopup) { + evas_object_del(ad->ctxpopup); + ad->ctxpopup = NULL; + } + + elm_genlist_select_mode_set(ad->search_gl, ELM_OBJECT_SELECT_MODE_DEFAULT); + + if (elm_object_scroll_freeze_get(ad->search_gl) > 0) { + elm_object_scroll_freeze_pop(ad->search_gl); + } + + popup = elm_popup_add(ad->win_main); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + + switch(error_type) { + case LAUNCH_ERROR_FILE_NOT_FOUND: + elm_object_text_set(popup, + dgettext("sys_string", + "IDS_COM_POP_FILE_NOT_FOUND")); + break; + case LAUNCH_ERROR_AUL_LAUNCH: + /* This Message String enable to be another string in the future */ + elm_object_text_set(popup, + gettext("IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST")); + break; + case LAUNCH_ERROR_APPSVC: + elm_object_text_set(popup, + gettext("IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST")); + break; + } + + btn1 = elm_button_add(popup); + elm_object_style_set(btn1, "popup_button/default"); + + elm_object_text_set(btn1, + dgettext("sys_string","IDS_COM_POP_CLOSE")); + evas_object_smart_callback_add(btn1, "clicked", + __search_launch_popup_error_response_cb, + ad); + + elm_object_part_content_set(popup, "button1", btn1); + + elm_popup_timeout_set(popup, 3.0); + + evas_object_smart_callback_add(popup, "timeout", + __search_launch_popup_error_response_cb, + ad); + evas_object_smart_callback_add(popup, "block,clicked", + __search_launch_popup_error_response_cb, + ad); + evas_object_show(popup); + + ad->ctxpopup = popup; +} + diff --git a/src/ps_makeupviews.cpp b/src/ps_makeupviews.cpp new file mode 100755 index 0000000..6bcbc64 --- /dev/null +++ b/src/ps_makeupviews.cpp @@ -0,0 +1,1245 @@ +/* + * Copyright 2012-2013 Samsung Electronics Co., Ltd/ + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include "smartsearch.h" +#include "ps_searcher.h" +#include "ps_app_interface.h" +#include +#include +#include +#include +#include +#include +#include +#include + +struct search_thread_data { + struct appdata *ad; + char *keyword; + int is_search_result; +}; + +struct search_genlist_item_info* search_add_genlist_item(int type, + struct search_content_object *obj, Elm_Genlist_Item_Class *itc_style, void *data, + Elm_Object_Item *parent) +{ + struct search_genlist_item_info *item = (struct search_genlist_item_info *) + calloc(1, + sizeof(struct search_genlist_item_info)); + + if (item) { + item->type = type; + item->obj = obj; + item->itc_style = itc_style; + item->data = data; + item->parent = parent; + } + + return item; +} + +static void +ecore_exe_pipe_cb(void *data, void *buf, unsigned int size) +{ + SEARCH_FUNC_START; + + + struct appdata *ad = (struct appdata *)data; + struct search_pipe_data *pipe_data = *((struct search_pipe_data**)buf); + + struct search_content_object *obj = NULL; + struct search_genlist_item_info *item = NULL; + struct search_genlist_info *result_info = NULL; + + int cmd = 0; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(pipe_data == NULL); + + result_info = pipe_data->result_list; + cmd = pipe_data->cmd; + + SEARCH_DEBUG_LOG("Pipe Command : %d ret : %d", cmd, pipe_data->search_ret); + + switch (cmd) { + case SEARCH_PIPE_CMD_CLEAR_GENLIST: + elm_genlist_clear(ad->search_gl); + break; + case SEARCH_PIPE_CMD_SET_LAYOUT: + if (pipe_data->search_ret == SEARCH_RET_SEARCH_SUCCESS) + search_layout_set_search_list(ad); + else + search_layout_set_search_no_result(ad); + break; + case SEARCH_PIPE_CMD_ADD_GENLIST_PHONE: + if (result_info) { + if (result_info->group) { + item = result_info->group; + obj = item->obj; + + obj->gl_result_grp = elm_genlist_item_append(ad->search_gl, + item->itc_style, + item->data, + NULL, + ELM_GENLIST_ITEM_GROUP, + NULL, + NULL); + elm_genlist_item_select_mode_set(obj->gl_result_grp, + ELM_OBJECT_SELECT_MODE_NONE); + SEARCH_FREE(item); + } + + if (result_info->itemlist) { + GList *node = g_list_first(result_info->itemlist); + + while (node != NULL) { + item = (struct search_genlist_item_info *)node->data; + if (item) { + obj = item->obj; + elm_genlist_item_append(ad->search_gl, + item->itc_style, + item->data, + obj->gl_result_grp, + ELM_GENLIST_ITEM_NONE, + search_gl_phone_result_sel, + ad); + SEARCH_FREE(item); + } + node = g_list_next(node); + } + g_list_free(result_info->itemlist); + result_info->itemlist = NULL; + } + + if (result_info->more) { + item = result_info->more; + obj = item->obj; + elm_genlist_item_append(ad->search_gl, + item->itc_style, + item->data, + obj->gl_result_grp, + ELM_GENLIST_ITEM_NONE, + search_gl_result_more_item_append_cb, + ad); + SEARCH_FREE(item); + } + + SEARCH_FREE(result_info); + } + break; + } + + SEARCH_FREE(pipe_data); + SEARCH_FUNC_END; +} + +static Evas_Object *__search_gl_content_get_genlist_item_type(void *data, Evas_Object *obj, const char *part) + { + Evas_Object *icon = NULL; + int icon_size = 0; + char *icon1_path = NULL; + char *icon2_path = NULL; + + struct search_item_sel *sel_mem_info = (struct search_item_sel *)data; + double scale = elm_config_scale_get(); + + SEARCH_RETV_IF(sel_mem_info == NULL, NULL); + + if (!SEARCH_STRCMP(part, "elm.icon") || !SEARCH_STRCMP(part, "elm.icon.1")) { + icon1_path = sel_mem_info->icon1; + if (icon1_path && strlen(icon1_path) > 0 ) { + icon = elm_icon_add(obj); + icon_size = (int)(SEARCH_THUMBNAIL_SIZE * scale); + elm_image_prescale_set(icon, icon_size); + elm_image_file_set(icon, icon1_path, NULL); + evas_object_size_hint_min_set(icon, + SEARCH_THUMBNAIL_SIZE * scale, SEARCH_THUMBNAIL_SIZE * scale); + evas_object_size_hint_max_set(icon, + SEARCH_THUMBNAIL_SIZE * scale, SEARCH_THUMBNAIL_SIZE * scale); + evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + } + } else if(!strcmp(part, "elm.icon.2")) { + icon2_path = sel_mem_info->icon2; + + if (icon2_path && strlen(icon2_path) > 0 ) { + icon = elm_icon_add(obj); + icon_size = (int)(SEARCH_ICON_SIZE * scale); + elm_image_prescale_set(icon, icon_size); + elm_image_file_set(icon, icon2_path, NULL); + evas_object_size_hint_min_set(icon, + SEARCH_ICON_SIZE * scale, SEARCH_ICON_SIZE * scale); + evas_object_size_hint_max_set(icon, + SEARCH_ICON_SIZE * scale, SEARCH_ICON_SIZE * scale); + evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + } + } + + return icon; +} + +static Evas_Object *__search_gl_content_get_genlist_bookmark_item_type(void *data, Evas_Object *obj, const char *part) +{ + Evas_Object *icon = NULL; + int icon_size = 0; + int id = 0; + char *icon2_path = NULL; + + struct search_item_sel *sel_mem_info = (struct search_item_sel *)data; + SEARCH_RETV_IF(sel_mem_info == NULL, NULL); + + double scale = elm_config_scale_get(); + + if (!SEARCH_STRCMP(part, "elm.icon") || !SEARCH_STRCMP(part, "elm.icon.1")) { + if (sel_mem_info->launch_param) { + id = atoi(sel_mem_info->launch_param); + favorites_bookmark_get_favicon(id, evas_object_evas_get(obj), &icon); + } + + if (!icon && sel_mem_info->icon1) { + icon = elm_icon_add(obj); + icon_size = (int)(SEARCH_ICON_SIZE * scale); + elm_image_prescale_set(icon, icon_size); + elm_image_file_set(icon, sel_mem_info->icon1, NULL); + } + + if (icon) { + evas_object_size_hint_min_set(icon, + SEARCH_THUMBNAIL_SIZE * scale, SEARCH_THUMBNAIL_SIZE * scale); + evas_object_size_hint_max_set(icon, + SEARCH_THUMBNAIL_SIZE * scale, SEARCH_THUMBNAIL_SIZE * scale); + evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + } + } else if(!strcmp(part, "elm.icon.2")) { + icon2_path = sel_mem_info->icon2; + + if (icon2_path && strlen(icon2_path) > 0 ) { + icon = elm_icon_add(obj); + icon_size = (int)(SEARCH_ICON_SIZE * scale); + elm_image_prescale_set(icon, icon_size); + elm_image_file_set(icon, icon2_path, NULL); + evas_object_size_hint_min_set(icon, + SEARCH_ICON_SIZE * scale, SEARCH_ICON_SIZE * scale); + evas_object_size_hint_max_set(icon, + SEARCH_ICON_SIZE * scale, SEARCH_ICON_SIZE * scale); + evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + } + } + return icon; + } + +static Evas_Object *__search_gl_content_get_genlist_history_item_type(void *data, Evas_Object *obj, const char *part) +{ + Evas_Object *icon = NULL; + int icon_size = 0; + char *icon2_path = NULL; + int id = 0; + + struct search_item_sel *sel_mem_info = (struct search_item_sel *)data; + SEARCH_RETV_IF(sel_mem_info == NULL, NULL); + + double scale = elm_config_scale_get(); + + if (!SEARCH_STRCMP(part, "elm.icon") || !SEARCH_STRCMP(part, "elm.icon.1")) { + if (sel_mem_info->launch_param) { + id = atoi(sel_mem_info->launch_param); + favorites_history_get_favicon(id, evas_object_evas_get(obj), &icon); + } + + if (!icon && sel_mem_info->icon1) { + icon = elm_icon_add(obj); + icon_size = (int)(SEARCH_ICON_SIZE * scale); + elm_image_prescale_set(icon, icon_size); + elm_image_file_set(icon, sel_mem_info->icon1, NULL); + } + + if (icon) { + evas_object_size_hint_min_set(icon, + SEARCH_THUMBNAIL_SIZE * scale, SEARCH_THUMBNAIL_SIZE * scale); + evas_object_size_hint_max_set(icon, + SEARCH_THUMBNAIL_SIZE * scale, SEARCH_THUMBNAIL_SIZE * scale); + evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + } + } else if(!strcmp(part, "elm.icon.2")) { + icon2_path = (char*)sel_mem_info->icon2; + + if (icon2_path && strlen(icon2_path) > 0 ) { + icon = elm_icon_add(obj); + icon_size = (int)(SEARCH_ICON_SIZE * scale); + elm_image_prescale_set(icon, icon_size); + elm_image_file_set(icon, icon2_path, NULL); + evas_object_size_hint_min_set(icon, + SEARCH_ICON_SIZE * scale, SEARCH_ICON_SIZE * scale); + evas_object_size_hint_max_set(icon, + SEARCH_ICON_SIZE * scale, SEARCH_ICON_SIZE * scale); + evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + } + } + + return icon; +} + +static Eina_Bool __search_gl_state_get(void *data, Evas_Object * obj, + const char *part) +{ + return EINA_FALSE; +} + +static char *__search_gl_label_get_genlist_item_type(void *data, Evas_Object * obj, + const char *part) +{ + char *buf = NULL; + struct search_item_sel *sel_mem_info = (struct search_item_sel *)data; + SEARCH_RETV_IF(sel_mem_info == NULL, g_strdup("")); + + if (!SEARCH_STRCMP(part, "elm.text") || !SEARCH_STRCMP(part, "elm.text.1")) { + buf = g_strdup(sel_mem_info->text1); + } else if (!SEARCH_STRCMP(part, "elm.text.sub") || !SEARCH_STRCMP(part, "elm.text.2")) { + buf = g_strdup(sel_mem_info->text2); + } else { + buf = NULL; + } + + return buf; +} + +static char *__search_gl_label_get_normal_type(void *data, Evas_Object * obj, + const char *part) +{ + char *title_string = (char*)data; + if(title_string) + return strdup(title_string); + else + return strdup(""); +} + +static char *__search_gl_label_get_group(void *data, Evas_Object * obj, + const char *part) +{ + struct search_content_object *object = (struct search_content_object*)data; + SEARCH_RETV_IF(object == NULL, strdup("")); + + if (object->string_type == SEARCH_STR_TYPE_APP_STRING) { + return strdup(gettext(object->name)); + } else { + return strdup(dgettext("sys_string", object->name)); + } +} + +static char *__search_gl_label_get_more(void *data, Evas_Object * obj, + const char *part) +{ + return strdup(gettext("IDS_SSEARCH_BODY_MORE_RESULTS")); +} + +static void __search_gl_del_grouptitle(void *data, Evas_Object * obj) +{ + SEARCH_FUNC_START; + + SEARCH_FUNC_END; + return; +} + +static void __search_gl_del(void *data, Evas_Object * obj) +{ + struct search_item_sel *sel_mem_info = (struct search_item_sel *)data; + SEARCH_RET_IF(sel_mem_info == NULL); + + SEARCH_FREE(sel_mem_info->icon1); + SEARCH_FREE(sel_mem_info->icon2); + SEARCH_FREE(sel_mem_info->text1); + SEARCH_FREE(sel_mem_info->text2); + SEARCH_FREE(sel_mem_info->launch_path); + SEARCH_FREE(sel_mem_info->launch_param); + SEARCH_FREE(sel_mem_info); + + return; +} + +static void __search_gl_del_more_button(void *data, Evas_Object * obj) +{ + struct search_item_more_sel *sel_mem_more = (struct search_item_more_sel *)data; + SEARCH_RET_IF(sel_mem_more == NULL); + + SEARCH_FREE(sel_mem_more); + + return; +} + +int search_app_connect(void *data) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + + int rc = 0, conn_ret = 0; + int ret = SEARCH_RET_SUCCESS; + int i = 0; + + SEARCH_RETV_IF(ad == NULL, SEARCH_RET_FAIL); + + for (i = 0; i < SEARCH_CONT_MAX ; ++i) { + switch (ad->result_obj[i].contents_type) { + /* Contact-service should be conneted for display Message result. + Because We should display message with contact photo + if user have contact photo which have matched to tel-number of sender or receiver */ + case SEARCH_CONT_PHONE_MSG: + { + msg_error_t err = MSG_SUCCESS; + + if (ad->result_obj[i].visible == EINA_TRUE) { + + /* Connect Contact-service if contact category status is invisible */ + if (ad->result_obj[SEARCH_CONT_PHONE_CONTACTS].visible == EINA_FALSE) { + rc = contacts_connect2(); + if (rc != CONTACTS_ERROR_NONE) { + /* If we fail to connect contact-service, display message-app icon */ + SEARCH_DEBUG_WARNING("Fail to connect contact service : %d",rc); + } + } + + /* Connect Message-Service */ + err = msg_open_msg_handle(&ad->msg_handle); + + if (err != MSG_SUCCESS) { + SEARCH_DEBUG_WARNING("msg_open_msg_handle error : %d", err); + ad->msg_handle = NULL; + } + } else { + /* Disconnect Contact-service if contact category status is invisible */ + if (ad->result_obj[SEARCH_CONT_PHONE_CONTACTS].visible == EINA_FALSE) { + rc = contacts_disconnect2(); + if (rc != CONTACTS_ERROR_NONE) + SEARCH_DEBUG_WARNING("Fail to disconnect contact service : %d",rc); + } + + /* Disconnect Message-Service */ + if (ad->msg_handle != NULL ) { + err = msg_close_msg_handle(&ad->msg_handle); + + if (err != MSG_SUCCESS) + SEARCH_DEBUG_WARNING("msg_close_msg_handle error : %d", err); + ad->msg_handle = NULL; + } + } + } + break; + case SEARCH_CONT_PHONE_EMAIL: + break; + /* IMAGE, MUSIC, VIDEO use common handle */ + case SEARCH_CONT_PHONE_IMAGES: + case SEARCH_CONT_PHONE_MUSIC: + case SEARCH_CONT_PHONE_VIDEO: + { + if (ad->result_obj[SEARCH_CONT_PHONE_IMAGES].visible == EINA_TRUE + || ad->result_obj[SEARCH_CONT_PHONE_MUSIC].visible == EINA_TRUE + || ad->result_obj[SEARCH_CONT_PHONE_VIDEO].visible == EINA_TRUE ) { + conn_ret = media_content_connect(); + + if (conn_ret != 0) + SEARCH_DEBUG_WARNING("media_content_connect failed : %d\n", conn_ret); + } else { + conn_ret = media_content_disconnect(); + + if(conn_ret < 0) + SEARCH_DEBUG_WARNING("media_content_disconnect failed : %d\n", conn_ret); + } + } + break; + case SEARCH_CONT_PHONE_MEMO: + { + if (ad->result_obj[i].visible == EINA_TRUE) { + rc = memo_init(NULL); + if (rc == -1) { + SEARCH_DEBUG_WARNING + ("memo svc connect fail : %d", rc); + } + } else + memo_fini(); + } + break; + } + } + + SEARCH_FUNC_END; + + return ret; +} + +int search_app_disconnect(void *data) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + + int conn_ret = 0; + int i = 0; + + SEARCH_RETV_IF(ad == NULL, SEARCH_RET_FAIL); + + for (i = 0; i < SEARCH_CONT_MAX ; ++i) { + switch (ad->result_obj[i].contents_type) { + case SEARCH_CONT_PHONE_MSG: + { + if (ad->msg_handle != NULL ) { + msg_error_t err = MSG_SUCCESS; + err = msg_close_msg_handle(&ad->msg_handle); + + if (err != MSG_SUCCESS) { + SEARCH_DEBUG_WARNING("msg_close_msg_handle error : %d", err); + } + + ad->msg_handle = NULL; + } + } + break; + case SEARCH_CONT_PHONE_EMAIL: + break; + case SEARCH_CONT_PHONE_IMAGES: + case SEARCH_CONT_PHONE_MUSIC: + case SEARCH_CONT_PHONE_VIDEO: + { + conn_ret = media_content_disconnect(); + if(conn_ret != 0) + SEARCH_DEBUG_WARNING("media_content_disconnect failed : %d\n", conn_ret); + } + break; + case SEARCH_CONT_PHONE_MEMO: + { + memo_fini(); + } + break; + } + } + + SEARCH_FUNC_END; + + return 0; +} + +void search_gl_phone_result_sel(void *data, Evas_Object * obj, void *event_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem; + Elm_Object_Item *it = (Elm_Object_Item *) event_info; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(it == NULL); + + cur_category_mem = (struct search_item_sel *)elm_object_item_data_get(it); + SEARCH_RET_IF(cur_category_mem == NULL); + + SEARCH_DEBUG_LOG("cur_category_mem->type : %d", cur_category_mem->type); + + elm_genlist_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE); + elm_object_scroll_freeze_push(obj); + + switch (cur_category_mem->type) { + case SEARCH_CONT_PHONE_CONTACTS: + search_launch_contact_view(ad, cur_category_mem); + break; + + case SEARCH_CONT_PHONE_MSG: + search_launch_msg_view(ad, cur_category_mem); + break; + + case SEARCH_CONT_PHONE_EMAIL: + search_launch_email_view(ad, cur_category_mem); + break; + + case SEARCH_CONT_PHONE_IMAGES: + search_launch_image_view(ad, cur_category_mem); + break; + + case SEARCH_CONT_PHONE_VIDEO: + search_launch_video_view(ad, cur_category_mem); + break; + + case SEARCH_CONT_PHONE_MUSIC: + search_launch_music_view(ad, cur_category_mem); + break; + + case SEARCH_CONT_PHONE_CALENDAR: + search_launch_calendar_view(ad, cur_category_mem); + break; + + case SEARCH_CONT_PHONE_MEMO: + search_launch_memo_view(ad, cur_category_mem); + break; + + case SEARCH_CONT_PHONE_MENU: + search_launch_menu_view(ad, cur_category_mem); + break; + + case SEARCH_CONT_PHONE_BROWSER: + search_launch_browser_view(ad, cur_category_mem); + + default: + break; + } + + elm_genlist_item_selected_set(it, EINA_FALSE); + + SEARCH_FUNC_END; +} + +static int __search_gl_set_phone_search_result(struct search_content_object *obj, + int offset, + char *keyword, + void *data, + struct search_genlist_info *result_info) +{ + SEARCH_FUNC_START; + + int sel_cnt = SEARCH_CATEGORY_LIST_MORE_CNT; + int func_ret = SEARCH_RET_SEARCH_NONE; + + struct appdata *ad = (struct appdata *)data; + SEARCH_RETV_IF(ad == NULL, SEARCH_RET_SEARCH_FAIL); + + obj->mr_info.offset = offset; + + if (obj->mr_info.offset == 0) { + obj->mr_info.next_point = 0; + } + + SEARCH_DEBUG_LOG("offset : %d, limit : %d keyword : %s", offset, sel_cnt, keyword); + + if (obj->visible == EINA_TRUE ) { + switch (obj->contents_type) { + case SEARCH_CONT_PHONE_CONTACTS: + { + func_ret = + search_sql_contact_search_result_by_api(obj, + offset, + sel_cnt, + keyword, + ad, + result_info); + } + break; + + case SEARCH_CONT_PHONE_MSG: + { + if (ad->msg_handle != NULL) { + func_ret = + search_sql_msg_search_result_by_api(obj, + offset, + sel_cnt, + keyword, + ad, + result_info); + } + } + break; + + case SEARCH_CONT_PHONE_EMAIL: + { + func_ret = + search_sql_email_search_result_by_api(obj, + offset, + sel_cnt, + keyword, + ad, + result_info); + } + break; + case SEARCH_CONT_PHONE_IMAGES: + { + func_ret = + search_sql_image_search_result_by_api(obj, + offset, + sel_cnt, + keyword, + ad, + result_info); + } + break; + case SEARCH_CONT_PHONE_MUSIC: + { + func_ret = + search_sql_music_search_result_by_api(obj, + offset, + sel_cnt, + keyword, + ad, + result_info); + } + break; + case SEARCH_CONT_PHONE_VIDEO: + { + func_ret = + search_sql_video_search_result_by_api(obj, + offset, + sel_cnt, + keyword, + ad, + result_info); + } + break; + case SEARCH_CONT_PHONE_CALENDAR: + { + func_ret = + search_sql_calendar_search_result_by_api(obj, + offset, + sel_cnt, + keyword, + ad, + result_info); + } + break; + case SEARCH_CONT_PHONE_MEMO: + { + func_ret = + search_sql_memo_search_result_by_api(obj, + offset, + sel_cnt, + keyword, + ad, + result_info); + } + break; + case SEARCH_CONT_PHONE_MENU: + { + func_ret = + search_sql_menu_search_result_by_api(obj, + offset, + sel_cnt, + keyword, + ad, + result_info); + } + break; + case SEARCH_CONT_PHONE_BROWSER: + { + func_ret = + search_sql_browser_search_result_by_api(obj, + offset, + sel_cnt, + keyword, + ad, + result_info); + } + } + } + + SEARCH_FUNC_END; + return func_ret; +} + +static void __search_thread_heavy_cb(void *data, Ecore_Thread *th) +{ + SEARCH_FUNC_START; + + struct search_thread_data *thread_data = (struct search_thread_data*)data; + struct appdata *ad = NULL; + struct search_content_object *obj = NULL; + struct search_genlist_info *result_info = NULL; + + int ret = 0; + + int i = SEARCH_CONT_PHONE_MIN; + int category_type = 0; + + SEARCH_RET_IF(thread_data == NULL); + ad = thread_data->ad; + SEARCH_RET_IF(ad == NULL); + + SEARCH_DEBUG_LOG("Thread ID : %p Keyword : %s", th, thread_data->keyword); + + thread_data->is_search_result = SEARCH_RET_SEARCH_NONE; + + while (i <= SEARCH_CONT_PHONE_MAX) { + int offset = 0; + obj = &ad->result_obj[i]; + category_type = obj->category_type; + + if (category_type == SEARCH_OBJ_PHONE_CONTENTS) { + if (ecore_thread_check(th) != EINA_TRUE) { + result_info = (struct search_genlist_info *)calloc(1, sizeof(struct search_genlist_info)); + ret = __search_gl_set_phone_search_result(obj, + offset, + thread_data->keyword, + ad, + result_info); + + if (ret == SEARCH_RET_SEARCH_SUCCESS) { + SEARCH_DEBUG_LOG("Matched result : %s %d", obj->name, ret); + thread_data->is_search_result = SEARCH_RET_SEARCH_SUCCESS; + ecore_thread_feedback(th, result_info); + } else { + SEARCH_FREE(result_info); + } + } + } + i++; + } + SEARCH_FUNC_END; +} + + +static void __search_thread_feedback_cb(void *data, Ecore_Thread *th, void *msg_data) +{ + SEARCH_FUNC_START; + + struct search_thread_data *thread_data = (struct search_thread_data *)data; + struct appdata *ad = NULL; + struct search_genlist_info *result_list = (struct search_genlist_info *)msg_data; + struct search_pipe_data *pdata = NULL; + + SEARCH_RET_IF(thread_data == NULL); + SEARCH_RET_IF(result_list == NULL); + ad = thread_data->ad; + SEARCH_RET_IF(ad == NULL); + + if (ecore_thread_check(th) == EINA_TRUE) + return; + + pdata = (struct search_pipe_data *)calloc(1,sizeof(struct search_pipe_data)); + pdata->cmd = SEARCH_PIPE_CMD_ADD_GENLIST_PHONE; + pdata->obj = NULL; + pdata->result_list = result_list; + pdata->search_ret = thread_data->is_search_result; + + ecore_pipe_write(ad->pipe, &pdata, sizeof(struct search_pipe_data)); + + SEARCH_FUNC_END; +} + +static void __search_thread_end_cb(void *data, Ecore_Thread *th) +{ + SEARCH_FUNC_START; + + struct search_thread_data *thread_data = (struct search_thread_data *)data; + struct appdata *ad = NULL; + struct search_pipe_data *pdata = NULL; + + SEARCH_RET_IF(thread_data == NULL); + ad = thread_data->ad; + SEARCH_RET_IF(ad == NULL); + + pdata = (struct search_pipe_data *)calloc(1,sizeof(struct search_pipe_data)); + pdata->cmd = SEARCH_PIPE_CMD_SET_LAYOUT; + pdata->search_ret = thread_data->is_search_result; + + if (ecore_thread_check(th) == EINA_TRUE) + return; + + ecore_pipe_write(ad->pipe, &pdata, sizeof(struct search_pipe_data)); + + SEARCH_FREE(thread_data->keyword); + SEARCH_FREE(thread_data); + + SEARCH_FUNC_END; +} + +static void __search_thread_cancel_cb(void *data, Ecore_Thread *th) +{ + SEARCH_FUNC_START; + + struct search_thread_data *thread_data = (struct search_thread_data *)data; + SEARCH_RET_IF(thread_data == NULL); + + SEARCH_FREE(thread_data->keyword); + SEARCH_FREE(thread_data); + + SEARCH_FUNC_END; +} + +void search_stop_search(void *data) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + + SEARCH_RET_IF(ad == NULL); + + if (ad->search_thread) { + ecore_thread_cancel(ad->search_thread); + ad->search_thread = NULL; + } + + if (ad->search_timer) { + ecore_timer_del(ad->search_timer); + ad->search_timer = NULL; + } + + SEARCH_FUNC_END; +} + +Ecore_Thread* search_make_result_thread(void *data) +{ + SEARCH_FUNC_START; + + Ecore_Thread *th = NULL; + struct appdata *ad = (struct appdata *)data; + struct search_thread_data *thread_data = NULL; + + SEARCH_RETV_IF(ad == NULL, NULL); + + /* Create Thread for Phone Search */ + thread_data = (struct search_thread_data *)calloc(1, sizeof(struct search_thread_data)); + thread_data->ad = ad; + thread_data->is_search_result = SEARCH_RET_SEARCH_NONE; + thread_data->keyword = strdup(ad->search_word); + + th = ecore_thread_feedback_run(__search_thread_heavy_cb, + __search_thread_feedback_cb, + __search_thread_end_cb, + __search_thread_cancel_cb, + thread_data, + EINA_TRUE); + + SEARCH_FUNC_END; + return th; +} + + +void search_result_gl_init(void *data) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + + ad->pipe = ecore_pipe_add(ecore_exe_pipe_cb, ad); + eina_lock_new(&ad->mutex); + eina_condition_new(&ad->condition, &ad->mutex); + + Evas_Object *genlist; + + if (ad->itc_pslist_1line == NULL) { + ad->itc_pslist_1line = elm_genlist_item_class_new(); + ad->itc_pslist_1line->item_style = "1text.tb"; + ad->itc_pslist_1line->func.text_get = __search_gl_label_get_genlist_item_type; + ad->itc_pslist_1line->func.content_get = __search_gl_content_get_genlist_item_type; + ad->itc_pslist_1line->func.state_get = __search_gl_state_get; + ad->itc_pslist_1line->func.del = __search_gl_del; + } + + if (ad->itc_pslist_1line_1icon == NULL) { + ad->itc_pslist_1line_1icon = elm_genlist_item_class_new(); + ad->itc_pslist_1line_1icon->item_style = "1text.1icon.2.tb"; + ad->itc_pslist_1line_1icon->func.text_get = __search_gl_label_get_genlist_item_type; + ad->itc_pslist_1line_1icon->func.content_get = __search_gl_content_get_genlist_item_type; + ad->itc_pslist_1line_1icon->func.state_get = __search_gl_state_get; + ad->itc_pslist_1line_1icon->func.del = __search_gl_del; + } + + if (ad->itc_pslist_1line_1icon_browser_history== NULL) { + ad->itc_pslist_1line_1icon_browser_history = elm_genlist_item_class_new(); + ad->itc_pslist_1line_1icon_browser_history->item_style = "1text.1icon.2.tb"; + ad->itc_pslist_1line_1icon_browser_history->func.text_get = __search_gl_label_get_genlist_item_type; + ad->itc_pslist_1line_1icon_browser_history->func.content_get = __search_gl_content_get_genlist_history_item_type; + ad->itc_pslist_1line_1icon_browser_history->func.state_get = __search_gl_state_get; + ad->itc_pslist_1line_1icon_browser_history->func.del = __search_gl_del; + } + + if (ad->itc_pslist_1line_2icon == NULL) { + ad->itc_pslist_1line_2icon = elm_genlist_item_class_new(); + ad->itc_pslist_1line_2icon->item_style = "1text.2icon.6.tb"; + ad->itc_pslist_1line_2icon->func.text_get = __search_gl_label_get_genlist_item_type; + ad->itc_pslist_1line_2icon->func.content_get = __search_gl_content_get_genlist_item_type; + ad->itc_pslist_1line_2icon->func.state_get = __search_gl_state_get; + ad->itc_pslist_1line_2icon->func.del = __search_gl_del; + } + + if (ad->itc_pslist_2line_1icon == NULL) { + ad->itc_pslist_2line_1icon = elm_genlist_item_class_new(); + ad->itc_pslist_2line_1icon->item_style = "2text.1icon.4.tb"; + ad->itc_pslist_2line_1icon->func.text_get = __search_gl_label_get_genlist_item_type; + ad->itc_pslist_2line_1icon->func.content_get = __search_gl_content_get_genlist_item_type; + ad->itc_pslist_2line_1icon->func.state_get = __search_gl_state_get; + ad->itc_pslist_2line_1icon->func.del = __search_gl_del; + } + + if (ad->itc_pslist_2line_2icon == NULL) { + ad->itc_pslist_2line_2icon = elm_genlist_item_class_new(); + ad->itc_pslist_2line_2icon->item_style = "2text.2icon.4.tb"; + ad->itc_pslist_2line_2icon->func.text_get = __search_gl_label_get_genlist_item_type; + ad->itc_pslist_2line_2icon->func.content_get = __search_gl_content_get_genlist_item_type; + ad->itc_pslist_2line_2icon->func.state_get = __search_gl_state_get; + ad->itc_pslist_2line_2icon->func.del = __search_gl_del; + } + + if (ad->itc_pslist_2line_2icon_browser_bookmark == NULL) { + ad->itc_pslist_2line_2icon_browser_bookmark = elm_genlist_item_class_new(); + ad->itc_pslist_2line_2icon_browser_bookmark->item_style = "2text.2icon.4.tb"; + ad->itc_pslist_2line_2icon_browser_bookmark->func.text_get = __search_gl_label_get_genlist_item_type; + ad->itc_pslist_2line_2icon_browser_bookmark->func.state_get = __search_gl_state_get; + ad->itc_pslist_2line_2icon_browser_bookmark->func.content_get = __search_gl_content_get_genlist_bookmark_item_type; + ad->itc_pslist_2line_2icon_browser_bookmark->func.del = __search_gl_del; + } + + + if (ad->itc_grouptitle == NULL) { + ad->itc_grouptitle = elm_genlist_item_class_new(); + ad->itc_grouptitle->item_style = "groupindex"; + ad->itc_grouptitle->func.text_get = __search_gl_label_get_group; + ad->itc_grouptitle->func.state_get = __search_gl_state_get; + ad->itc_grouptitle->func.del = __search_gl_del_grouptitle; + } + + if (ad->itc_listmore == NULL) { + ad->itc_listmore = elm_genlist_item_class_new(); + ad->itc_listmore->item_style = "1text.tb"; + ad->itc_listmore->func.text_get = __search_gl_label_get_more; + ad->itc_listmore->func.state_get = __search_gl_state_get; + ad->itc_listmore->func.del = __search_gl_del_more_button; + } + + ad->search_gl = NULL; + + genlist = elm_genlist_add(ad->conformant); + + // To use multiline textblock/entry/editfield in genlist, set height_for_width mode + // then the item's height is calculated while the item's width fits to genlist width. + elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS); + elm_genlist_tree_effect_enabled_set(genlist, EINA_TRUE); + + ad->search_gl = genlist; + + evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, + EVAS_HINT_FILL); + SEARCH_FUNC_END; +} + +void search_result_gl_deinit(void *data) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + SEARCH_RET_IF(ad == NULL); + + ecore_pipe_del(ad->pipe); + eina_condition_free(&ad->condition); + eina_lock_free(&ad->mutex); + + if (ad->itc_pslist_1line != NULL) + elm_genlist_item_class_free(ad->itc_pslist_1line); + + if (ad->itc_pslist_1line_1icon != NULL) + elm_genlist_item_class_free(ad->itc_pslist_1line_1icon); + + if (ad->itc_pslist_1line_1icon_browser_history != NULL) + elm_genlist_item_class_free(ad->itc_pslist_1line_1icon_browser_history); + + if (ad->itc_pslist_1line_2icon != NULL) + elm_genlist_item_class_free(ad->itc_pslist_1line_2icon); + + if (ad->itc_pslist_2line_1icon != NULL) + elm_genlist_item_class_free(ad->itc_pslist_2line_1icon); + + if (ad->itc_pslist_2line_2icon != NULL) + elm_genlist_item_class_free(ad->itc_pslist_2line_2icon); + + if (ad->itc_pslist_2line_2icon_browser_bookmark != NULL) + elm_genlist_item_class_free(ad->itc_pslist_2line_2icon_browser_bookmark); + + if (ad->itc_grouptitle != NULL) + elm_genlist_item_class_free(ad->itc_grouptitle); + + if (ad->itc_listmore != NULL) + elm_genlist_item_class_free(ad->itc_listmore); + + SEARCH_FUNC_END; +} + + +void search_gl_result_more_item_append_cb(void *data, Evas_Object * obj, + void *event_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + Elm_Object_Item *it = (Elm_Object_Item *) event_info; + struct search_pipe_data *pdata = NULL; + struct search_genlist_info *result_info = NULL; + struct search_item_more_sel *sel_more = + (search_item_more_sel *)elm_object_item_data_get(it); + + struct search_content_object *content_obj = sel_more->obj; + int offset = content_obj->mr_info.next_point; + int ret = SEARCH_RET_SEARCH_NONE; + + elm_object_item_del(it); + + result_info = (struct search_genlist_info *)calloc(1, sizeof(struct search_genlist_info)); + ret = __search_gl_set_phone_search_result(content_obj, + offset, + ad->search_word, + ad, + result_info); + + pdata = (struct search_pipe_data *)calloc(1,sizeof(struct search_pipe_data)); + pdata->cmd = SEARCH_PIPE_CMD_ADD_GENLIST_PHONE; + pdata->obj = NULL; + pdata->result_list = result_info; + pdata->search_ret = ret; + ecore_pipe_write(ad->pipe, &pdata, sizeof(struct search_pipe_data)); + + pdata = (struct search_pipe_data *)calloc(1,sizeof(struct search_pipe_data)); + pdata->cmd = SEARCH_PIPE_CMD_SET_LAYOUT; + pdata->search_ret = ret; + ecore_pipe_write(ad->pipe, &pdata, sizeof(struct search_pipe_data)); + + SEARCH_FUNC_END; +} + +void search_set_result_list(void *data) +{ + SEARCH_FUNC_START; + struct appdata *ad = (struct appdata *)data; + + int category = 0; + int ret = SEARCH_RET_SEARCH_NONE; + + bool is_input_keyword = false; + struct search_pipe_data *pipe_data = NULL; + char *text = NULL; + + SEARCH_RET_IF(ad == NULL); + + category = ad->search_category; + search_stop_search(ad); + + text = elm_entry_markup_to_utf8(elm_object_text_get(ad->search_entry)); + SEARCH_FREE(ad->not_markup_search_word); + SEARCH_FREE(ad->search_word); + + if((text) && (strlen(text) > 0)) { + if (ad->first_search == true) { + search_result_gl_init(ad); + search_util_date_time_format_init(); + search_app_connect(ad); + ad->first_search = false; + } + + ad->not_markup_search_word = strdup(elm_object_text_get(ad->search_entry)); + ad->search_word = text; + is_input_keyword = true; + + /* set keyword to vconf for save last search histroy */ + ret = vconf_set_str(SMARTSEARCH_KEY_KEYWORD, ad->not_markup_search_word); + + if (ret < 0) + SEARCH_DEBUG_WARNING("Error : set keyword to vconf"); + } else { + if (category == SEARCH_CATE_PHONE) { + pipe_data = (struct search_pipe_data *)calloc(1, sizeof(struct search_pipe_data)); + pipe_data->cmd = SEARCH_PIPE_CMD_SET_LAYOUT; + pipe_data->search_ret = SEARCH_RET_SEARCH_NONE; + ecore_pipe_write(ad->pipe, &pipe_data, sizeof(struct search_pipe_data)); + } + /* set keyword to vconf for save last search histroy */ + ret = vconf_set_str(SMARTSEARCH_KEY_KEYWORD, ""); + + if (ret < 0) { + SEARCH_DEBUG_WARNING("Error : set keyword to vconf"); + } + + SEARCH_FREE(text); + } + + /* If category is Phone, make a thread for search */ + pipe_data = (struct search_pipe_data *)calloc(1, sizeof(struct search_pipe_data)); + pipe_data->cmd = SEARCH_PIPE_CMD_CLEAR_GENLIST; + ecore_pipe_write(ad->pipe, &pipe_data, sizeof(struct search_pipe_data)); + + switch(category) { + case SEARCH_CATE_PHONE: + if (is_input_keyword) { + ad->search_thread = search_make_result_thread(ad); + } + break; + } + SEARCH_FUNC_END; +} + +void search_layout_set_search_list(void* data) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + SEARCH_RET_IF(ad == NULL); + + if (elm_object_part_content_get(ad->sb_layout,"list_noresult")) { + elm_object_part_content_unset(ad->sb_layout,"list_noresult"); + evas_object_hide(ad->noresult_view); + + if (ad->search_gl) { + elm_object_part_content_set(ad->sb_layout, "list", ad->search_gl); + evas_object_show(ad->search_gl); + } + } + + if (ad->search_gl) { + elm_genlist_item_show(elm_genlist_first_item_get(ad->search_gl), ELM_GENLIST_ITEM_SCROLLTO_TOP); + } + + SEARCH_FUNC_END; + + return; +} + +void search_layout_set_search_no_result(void* data) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + SEARCH_RET_IF(ad == NULL); + + if (elm_object_part_content_get(ad->sb_layout,"list")) { + elm_object_part_content_unset(ad->sb_layout, "list"); + + if (ad->search_gl) { + evas_object_hide(ad->search_gl); + } + + elm_object_part_content_set(ad->sb_layout,"list_noresult", ad->noresult_view); + evas_object_show(ad->noresult_view); + } + + SEARCH_FUNC_END; + + return; +} + +int search_layout_get_content_list_set_status(void* data) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + int ret = SEARCH_RET_FAIL; + + SEARCH_RETV_IF(ad == NULL, ret); + + if (elm_object_part_content_get(ad->sb_layout,"list")) { + ret = SEARCH_RET_SUCCESS; + } else { + ret = SEARCH_RET_FAIL; + } + + SEARCH_FUNC_END; + + return ret; +} + + diff --git a/src/ps_searcher.cpp b/src/ps_searcher.cpp new file mode 100755 index 0000000..787e22e --- /dev/null +++ b/src/ps_searcher.cpp @@ -0,0 +1,2256 @@ +/* + * Copyright 2012-2013 Samsung Electronics Co., Ltd/ + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + +#include "smartsearch.h" + +#include + +#include +#include +#include + +#include + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +char* g_keyword = NULL; + +struct search_cb_data { + struct search_content_object *obj; + struct appdata *ad; + char *keyword; + struct search_genlist_info *result_info; +}; + +struct search_cb_data_browser { + struct search_content_object *obj; + struct appdata *ad; + char *keyword; + struct search_genlist_info *result_info; + struct search_more_result *info; + bool search_ret; +}; + +struct media_cb_data { + bool is_sdcard; + char *dirname; +}; + +int search_sql_stmt_init(sqlite3_stmt * sql_stmt) +{ + SEARCH_FUNC_START; + + int rc = 0; + + rc = sqlite3_clear_bindings(sql_stmt); + if (rc != SQLITE_OK) { + SEARCH_DEBUG_ERROR("sqlite3_clear_bindings error"); + return SEARCH_RET_FAIL; + } + + rc = sqlite3_reset(sql_stmt); + if (rc != SQLITE_OK) { + SEARCH_DEBUG_ERROR("sqlite3_reset error"); + return SEARCH_RET_FAIL; + } + + SEARCH_FUNC_END; + + return SEARCH_RET_SUCCESS; +} + +int search_sql_stmt_finalize(sqlite3_stmt * stmt) +{ + SEARCH_FUNC_START; + + int ret; + + ret = sqlite3_finalize(stmt); + if (ret != SQLITE_OK) { + SEARCH_DEBUG_ERROR("sqlite3_finalize error : %d ", ret); + return -1; + } + + SEARCH_FUNC_END; + + return 0; +} + +int search_sql_prepare_stmt(sqlite3 *db_handle, const char *query, + sqlite3_stmt ** stmt_out) +{ + SEARCH_FUNC_START; + + int rc = 0; + int ret = 0; + + rc = sqlite3_prepare(db_handle, query, strlen(query), stmt_out, NULL); + if (rc != SQLITE_OK) { + SEARCH_DEBUG_ERROR("sql preapre error : %d / %s", rc, query); + ret = SEARCH_RET_FAIL; + } else { + ret = SEARCH_RET_SUCCESS; + } + + SEARCH_FUNC_END; + + return ret; +} + +int search_sql_bind_text(sqlite3* db_handle, sqlite3_stmt *sql_stmt, int col, char *data) +{ + int rc = 0; + int ret = SEARCH_RET_SEARCH_NONE; + + rc = sqlite3_bind_text(sql_stmt, col, data, strlen(data), SQLITE_STATIC); + if (rc != SQLITE_OK) { + SEARCH_DEBUG_ERROR("SQL BIND TEXT ERROR : %s(%d) / %s\n", + sqlite3_errmsg(db_handle), + rc, + data); + ret = SEARCH_RET_SEARCH_FAIL; + } + + return ret; +} + +int search_sql_bind_int(sqlite3* db_handle, sqlite3_stmt *sql_stmt, int col, int data) +{ + int rc = 0; + int ret = SEARCH_RET_SEARCH_NONE; + + rc = sqlite3_bind_int(sql_stmt, col, data); + if (rc != SQLITE_OK) { + SEARCH_DEBUG_ERROR("SQL BIND INT ERROR : %s(%d) / %d\n", + sqlite3_errmsg(db_handle), + rc, + data); + ret = SEARCH_RET_SEARCH_FAIL; + } + return ret; +} + +int search_sql_contact_search_result_by_api(struct search_content_object *obj, + int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + int ret = 0; + + contacts_query_h query = NULL; + contacts_filter_h filter = NULL; + contacts_list_h list = NULL; + + unsigned int count = 0; + int total_cnt = -1; + int curr_cnt = -1; + int loop_cnt = 0; + int search_ret = SEARCH_RET_SEARCH_NONE; + + SEARCH_RETV_IF(ad == NULL, SEARCH_RET_SEARCH_FAIL); + + ret = contacts_connect2(); + if (ret != CONTACTS_ERROR_NONE) { + SEARCH_DEBUG_WARNING("contacts_connect2 : %d", ret); + goto out_func; + } + + ret = contacts_query_create(_contacts_person_number._uri, &query); + if (ret != CONTACTS_ERROR_NONE) { + SEARCH_DEBUG_WARNING("contacts_query_create : %d", ret); + goto out_func; + } + + ret = contacts_filter_create(_contacts_person_number._uri, &filter); + if (ret != CONTACTS_ERROR_NONE) { + SEARCH_DEBUG_WARNING("contacts_filter_create : %d", ret); + goto out_func; + } + + ret = contacts_filter_add_str(filter, _contacts_person_number.display_name, CONTACTS_MATCH_CONTAINS, keyword); + if (ret != CONTACTS_ERROR_NONE) { + SEARCH_DEBUG_WARNING("contacts_filter_add_str : %d", ret); + goto out_func; + } + + ret = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR); + if (ret != CONTACTS_ERROR_NONE) { + SEARCH_DEBUG_WARNING("contacts_filter_add_operator : %d", ret); + goto out_func; + } + + ret = contacts_filter_add_str(filter, _contacts_person_number.number, CONTACTS_MATCH_CONTAINS, keyword); + if (ret != CONTACTS_ERROR_NONE) { + SEARCH_DEBUG_WARNING("contacts_filter_add_str : %d", ret); + goto out_func; + } + + ret = contacts_query_set_filter(query, filter); + if (ret != CONTACTS_ERROR_NONE) { + SEARCH_DEBUG_WARNING("contacts_query_set_filter : %d", ret); + goto out_func; + } + + ret = contacts_query_set_sort(query, _contacts_person_number.display_name, true); + if (ret != CONTACTS_ERROR_NONE) { + SEARCH_DEBUG_WARNING("contacts_query_set_sort : %d", ret); + goto out_func; + } + + ret = contacts_db_get_count_with_query(query, &total_cnt); + if (ret != CONTACTS_ERROR_NONE) { + SEARCH_DEBUG_WARNING("contacts_db_get_count_with_query : %d", ret); + goto out_func; + } + + ret = contacts_db_get_records_with_query(query, offset, limit, &list); + if (ret != CONTACTS_ERROR_NONE) { + SEARCH_DEBUG_WARNING("contacts_db_get_records_with_query : %d", ret); + goto out_func; + } + + SEARCH_RETV_IF_WITH_ERRORV(ret != CONTACTS_ERROR_NONE, SEARCH_RET_SEARCH_FAIL, ret); + contacts_list_get_count(list, &count); + + SEARCH_DEBUG_LOG("CONTACT COUNT: %d", count); + SEARCH_DEBUG_LOG("TOTAL COUNT: %d", total_cnt); + + if (count > 0) { + /* Set group title */ + if (offset == 0) { + result_info->group = search_add_genlist_item(SEARCH_GENLIST_GROUP, + obj, ad->itc_grouptitle, obj, NULL); + } + + do { + struct search_item_sel *sel_mem_info = NULL; + struct search_genlist_item_info *gen_item = NULL; + Elm_Genlist_Item_Class *itc_style = NULL; + + int contact_id = -1; + char *contact_img_path = NULL; + char *str_display = NULL; + char *num_display = NULL; + const char *text_1line = NULL; + const char *text_2line = NULL; + bool is_word_in_str = false; + char contact_id_str[MAX_LENGTH_PER_ID] = {0,}; + + sel_mem_info = (struct search_item_sel *)calloc(1, sizeof(struct search_item_sel)); + + if (!sel_mem_info) { + SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", loop_cnt); + continue; + } + + sel_mem_info->type = obj->contents_type; + + contacts_record_h record; + contacts_list_get_current_record_p(list, &record); + contacts_record_get_str_p(record, _contacts_person.image_thumbnail_path, &contact_img_path); + + if (contact_img_path != NULL) { + sel_mem_info->icon1 = strdup(contact_img_path); + } + else if (obj->obj_icon_path) { + sel_mem_info->icon1 = strdup(obj->obj_icon_path); + } + + contacts_record_get_str_p(record, _contacts_person.display_name, &str_display); + contacts_record_get_str_p(record, _contacts_number.number, &num_display); + + if (str_display != NULL) { + text_1line = str_display; + } + + if (num_display != NULL) { + text_2line = num_display; + } + + if (text_1line != NULL && text_2line != NULL) { + sel_mem_info->text1 = strdup(search_markup_keyword(str_display, keyword, &is_word_in_str)); + sel_mem_info->text2 = strdup(search_markup_keyword(num_display, keyword, &is_word_in_str)); + itc_style = ad->itc_pslist_2line_1icon; + } else { + if (text_1line) { + sel_mem_info->text1 = strdup(search_markup_keyword(str_display, keyword, &is_word_in_str)); + } + else { + sel_mem_info->text2 = strdup(search_markup_keyword(num_display, keyword, &is_word_in_str)); + } + itc_style = ad->itc_pslist_1line_1icon; + } + + contacts_record_get_int(record, _contacts_person.id, &contact_id); + snprintf(contact_id_str, MAX_LENGTH_PER_ID - 1, "%d", contact_id); + sel_mem_info->launch_param= strdup(contact_id_str); + + gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM, + obj, itc_style, sel_mem_info, + obj->gl_result_grp); + result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item); + + loop_cnt++; + + if (loop_cnt == limit) { + break; + } + }while (contacts_list_next(list) == CONTACTS_ERROR_NONE); + } else { + SEARCH_DEBUG_WARNING("No matched contacts data", ret); + search_ret = SEARCH_RET_SEARCH_NONE; + goto out_func; + } + + contacts_list_destroy(list, true); + + /* Set more title to genlist (under 'search all') */ + curr_cnt = offset + loop_cnt; + + if (total_cnt > curr_cnt) { + struct search_item_more_sel *sel_mem_more = NULL; + + obj->mr_info.next_point = offset + limit; + + sel_mem_more = + (struct search_item_more_sel *)calloc(1, + sizeof(struct + search_item_more_sel)); + sel_mem_more->obj = obj; + + result_info->more = search_add_genlist_item(SEARCH_GENLIST_MORE, + obj, + ad->itc_listmore, + sel_mem_more, + obj->gl_result_grp); + } + + search_ret = SEARCH_RET_SEARCH_SUCCESS; + +out_func: + ret = contacts_disconnect2(); + + if (filter) { + contacts_filter_destroy(filter); + } + + if (query) { + contacts_query_destroy(query); + } + + SEARCH_FUNC_END; + + return search_ret; +} + +int search_sql_calendar_search_result_by_api(struct search_content_object *obj, + int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *sel_mem_info = NULL; + struct search_item_more_sel *sel_mem_more = NULL; + struct search_genlist_item_info *gen_item = NULL; + + int loop_cnt = 0; + int count = -1; + int total_cnt = -1; + int ret = 0; + int search_ret = SEARCH_RET_SEARCH_NONE; + int curr_cnt = 0; + + SEARCH_RETV_IF(ad == NULL, SEARCH_RET_SEARCH_FAIL); + + ret = calendar_connect(); + SEARCH_RETV_IF_WITH_ERRORV(ret != CALENDAR_ERROR_NONE, SEARCH_RET_SEARCH_FAIL, ret); + + calendar_query_h query = NULL; + calendar_filter_h visibility_filter = NULL; + calendar_list_h list = NULL; + + ret = calendar_query_create(_calendar_event._uri, &query); + if (ret != CALENDAR_ERROR_NONE) { + SEARCH_DEBUG_WARNING("calendar_query_create : %d", ret); + goto out_func; + } + + ret = calendar_filter_create(_calendar_event._uri, &visibility_filter); + if (ret != CALENDAR_ERROR_NONE) { + SEARCH_DEBUG_WARNING("calendar_filter_create : %d", ret); + goto out_func; + } + + ret = calendar_filter_add_str(visibility_filter, _calendar_event.summary, CALENDAR_MATCH_CONTAINS, keyword); + if (ret != CALENDAR_ERROR_NONE) { + SEARCH_DEBUG_WARNING("calendar_filter_add_str : %d", ret); + goto out_func; + } + + ret = calendar_filter_add_operator(visibility_filter, CALENDAR_FILTER_OPERATOR_AND); + if (ret != CALENDAR_ERROR_NONE) { + SEARCH_DEBUG_WARNING("calendar_filter_add_operator : %d", ret); + goto out_func; + } + + ret = calendar_query_set_filter(query, visibility_filter); + if (ret != CALENDAR_ERROR_NONE) { + SEARCH_DEBUG_WARNING("calendar_query_set_filter : %d", ret); + goto out_func; + } + + ret = calendar_query_set_sort(query, _calendar_event.summary, true); + if (ret != CALENDAR_ERROR_NONE) { + SEARCH_DEBUG_WARNING("calendar_query_set_sort : %d", ret); + goto out_func; + } + + ret = calendar_db_get_count_with_query(query, &total_cnt); + if (ret != CALENDAR_ERROR_NONE) { + SEARCH_DEBUG_WARNING("calendar_db_get_count_with_query : %d", ret); + goto out_func; + } + + ret = calendar_db_get_records_with_query(query, offset, limit, &list); + if (ret != CALENDAR_ERROR_NONE) { + SEARCH_DEBUG_WARNING("calendar_db_get_records_with_query : %d", ret); + goto out_func; + } + + calendar_list_get_count(list, &count); + + SEARCH_DEBUG_LOG("CALENDAR COUNT : %d", count); + SEARCH_DEBUG_LOG("TOTAL COUNT : %d", total_cnt); + + if (count > 0) { + /* Set group title */ + if (offset == 0) { + result_info->group = search_add_genlist_item(SEARCH_GENLIST_GROUP, + obj, + ad->itc_grouptitle, + obj, + NULL); + } + + do { + int main_id = -1; + char *summary = NULL; + bool is_word_in_str = false; + char format_val[MAX_LENGTH_PER_LINE] = {0,}; + char calendar_id_str[MAX_LENGTH_PER_ID] = {0,}; + + calendar_record_h record; + calendar_time_s cal; + calendar_list_get_current_record_p(list, &record); + + sel_mem_info = (struct search_item_sel *)calloc(1,sizeof(struct search_item_sel)); + + if (!sel_mem_info) { + SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", loop_cnt); + continue; + } + + sel_mem_info->type = obj->contents_type; + + /* Set Thumbnail Image */ + if (obj->obj_icon_path) { + sel_mem_info->icon1 = strdup(obj->obj_icon_path); + } + + /* Set text 1line - Summary */ + calendar_record_get_str_p(record, _calendar_event.summary, &summary); + if ((summary) && (strlen(summary) > 0)) { + sel_mem_info->text1 = strdup(search_markup_keyword(summary, keyword, &is_word_in_str)); + } + + /* Set text 2line - Date */ + calendar_record_get_caltime(record, _calendar_event.start_time, &cal); + + if (cal.type == CALENDAR_TIME_UTIME) { + search_util_date_time_format_get_val(cal.time.utime, format_val, SEARCH_DATE_TYPE_YYMMDD); + } else { + search_util_date_time_format_get_val(cal.time.utime, format_val, SEARCH_DATE_TYPE_YYMM); + } + sel_mem_info->text2 = strdup(format_val); + + /* Set id for launching caledar contents */ + calendar_record_get_int (record, _calendar_event.id, &main_id); + snprintf(calendar_id_str, MAX_LENGTH_PER_ID - 1, "%d", main_id); + sel_mem_info->launch_param = strdup(calendar_id_str); + + gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM, obj, ad->itc_pslist_2line_1icon, + sel_mem_info, obj->gl_result_grp); + result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item); + + loop_cnt++; + + if (loop_cnt == limit) { + break; + } + } while (calendar_list_next(list) == CALENDAR_ERROR_NONE); + } else { + SEARCH_DEBUG_WARNING("No Matched calendar data: %d", count); + + search_ret = SEARCH_RET_SEARCH_NONE; + goto out_func; + } + + curr_cnt = offset + loop_cnt; + + /* Set more title to genlist (under 'search all') */ + if (total_cnt > curr_cnt) { + obj->mr_info.next_point = offset + limit; + + sel_mem_more = + (struct search_item_more_sel *)calloc(1, + sizeof(struct + search_item_more_sel)); + sel_mem_more->obj = obj; + + result_info->more = search_add_genlist_item(SEARCH_GENLIST_MORE, + obj, + ad->itc_listmore, + sel_mem_more, + obj->gl_result_grp); + } + search_ret = SEARCH_RET_SEARCH_SUCCESS; + +out_func: + ret = calendar_disconnect(); + + if (visibility_filter) { + calendar_filter_destroy(visibility_filter); + } + + if (query) { + calendar_query_destroy(query); + } + + SEARCH_FUNC_END; + return search_ret; +} + +static void __search_sql_memo_search_result_cb(memo_data_t * value, + void *user_data) +{ + SEARCH_FUNC_START; + + struct search_cb_data *scd = (struct search_cb_data *)user_data; + struct appdata *ad = NULL; + struct search_content_object *obj = NULL; + struct search_genlist_info *result_info = NULL; + + struct search_genlist_item_info *gen_item = NULL; + struct search_item_sel *sel_mem_info = NULL; + struct search_item_more_sel *sel_mem_more = NULL; + + char *keyword = scd->keyword; + bool is_word_in_str = false; + char memo_id_str[MAX_LENGTH_PER_ID] = {0,}; + char format_val[MAX_LENGTH_PER_LINE] = {0,}; + + SEARCH_RET_IF(scd == NULL); + ad = scd->ad; + obj = scd->obj; + result_info = scd->result_info; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(value == NULL); + + if (obj->mr_info.next_point == 0) { + /* Set group title */ + result_info->group = search_add_genlist_item(SEARCH_GENLIST_GROUP, + obj, + ad->itc_grouptitle, + obj, + NULL); + } + + if (obj->mr_info.next_point < + obj->mr_info.offset + SEARCH_CATEGORY_LIST_MORE_CNT) { + sel_mem_info = (struct search_item_sel*)calloc(1, sizeof(struct search_item_sel)); + + if (!sel_mem_info) { + SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", obj->mr_info.next_point); + return; + } + + sel_mem_info->type = obj->contents_type; + + /********** START : set search result to sel_mem_info buf ************/ + + if (obj->obj_icon_path) { + sel_mem_info->icon1 = strdup(obj->obj_icon_path); + } + + /* First, We should check comment field. It means drawing memo + * If comment field is NULL, then we check content field */ + if ((value->comment) && (strlen(value->comment) > 0)) { + sel_mem_info->text1 = strdup(search_markup_keyword(value->comment, keyword, &is_word_in_str)); + } else if ((value->content) && (strlen(value->content) > 0)) { + sel_mem_info->text1 = strdup(search_markup_keyword(value->content, keyword, &is_word_in_str)); + } + + search_util_date_time_format_get_val(value->modi_time, format_val, SEARCH_DATE_TYPE_YYMM); + sel_mem_info->text2 = strdup(format_val); + + snprintf(memo_id_str, MAX_LENGTH_PER_ID - 1, "%d", value->id); + sel_mem_info->launch_param = strdup(memo_id_str); + + /********** END : set search result to sel_mem_info buf *************/ + + gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM, obj, ad->itc_pslist_2line_1icon, + sel_mem_info, obj->gl_result_grp); + result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item); + + obj->mr_info.next_point++; + } else if (obj->mr_info.next_point == + obj->mr_info.offset + SEARCH_CATEGORY_LIST_MORE_CNT) { + /* Set more title to genlist (under 'search all') */ + sel_mem_more = + (struct search_item_more_sel *)calloc(1, + sizeof(struct + search_item_more_sel)); + sel_mem_more->obj = obj; + + result_info->more = search_add_genlist_item(SEARCH_GENLIST_MORE, + obj, + ad->itc_listmore, + sel_mem_more, + obj->gl_result_grp); + } else { + SEARCH_DEBUG_WARNING + ("__search_sql_memo_search_result_cb wrong index : %d", + obj->mr_info.next_point); + } + + SEARCH_FUNC_END; + + return; +} + +int search_sql_memo_search_result_by_api(struct search_content_object *obj, + int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_cb_data scd = {obj, ad, keyword, result_info}; + + SEARCH_RETV_IF(ad == NULL, SEARCH_RET_SEARCH_FAIL); + + memo_search_data(keyword, + limit, offset, + MEMO_SORT_TITLE_ASC, + __search_sql_memo_search_result_cb, + &scd); + + if (obj->mr_info.next_point == 0) { + SEARCH_DEBUG_WARNING("no memo search result"); + return SEARCH_RET_SEARCH_NONE; + } + + SEARCH_FUNC_END; + return SEARCH_RET_SEARCH_SUCCESS; +} + +int search_sql_email_search_result_by_api(struct search_content_object *obj, + int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + + int ret = EMAIL_ERROR_NONE; + int i = 0; + email_mail_list_item_t *mail_list = NULL; + email_list_filter_t *filter_list = NULL; + email_list_sorting_rule_t *sorting_rule_list = NULL; + + int filter_list_count = 5; + int sorting_rule_list_count = 1; + int mail_count = 0; + int total_mail_cnt = -1; + int unseen_mail_cnt = -1; + + struct search_genlist_item_info *gen_item = NULL; + struct search_item_sel *sel_mem_info = NULL; + struct search_item_more_sel *sel_mem_more = NULL; + bool is_word_in_str = false; + + SEARCH_RETV_IF(ad == NULL, SEARCH_RET_SEARCH_FAIL); + + int search_ret = SEARCH_RET_SEARCH_FAIL; + + filter_list = (email_list_filter_t *)malloc(sizeof(email_list_filter_t) * filter_list_count); + memset(filter_list, 0 , sizeof(email_list_filter_t) * filter_list_count); + + filter_list[0].list_filter_item_type = EMAIL_LIST_FILTER_ITEM_RULE; + filter_list[0].list_filter_item.rule.target_attribute = EMAIL_MAIL_ATTRIBUTE_SUBJECT; + filter_list[0].list_filter_item.rule.rule_type = EMAIL_LIST_FILTER_RULE_INCLUDE; + filter_list[0].list_filter_item.rule.key_value.string_type_value = keyword; + filter_list[0].list_filter_item.rule.case_sensitivity = EMAIL_CASE_INSENSITIVE; + + filter_list[1].list_filter_item_type = EMAIL_LIST_FILTER_ITEM_OPERATOR; + filter_list[1].list_filter_item.operator_type = EMAIL_LIST_FILTER_OPERATOR_OR; + + filter_list[2].list_filter_item_type = EMAIL_LIST_FILTER_ITEM_RULE; + filter_list[2].list_filter_item.rule.target_attribute = EMAIL_MAIL_ATTRIBUTE_TO; + filter_list[2].list_filter_item.rule.rule_type = EMAIL_LIST_FILTER_RULE_INCLUDE; + filter_list[2].list_filter_item.rule.key_value.string_type_value = keyword; + filter_list[2].list_filter_item.rule.case_sensitivity = EMAIL_CASE_INSENSITIVE; + + filter_list[3].list_filter_item_type = EMAIL_LIST_FILTER_ITEM_OPERATOR; + filter_list[3].list_filter_item.operator_type = EMAIL_LIST_FILTER_OPERATOR_OR; + + filter_list[4].list_filter_item_type = EMAIL_LIST_FILTER_ITEM_RULE; + filter_list[4].list_filter_item.rule.target_attribute = EMAIL_MAIL_ATTRIBUTE_FROM; + filter_list[4].list_filter_item.rule.rule_type = EMAIL_LIST_FILTER_RULE_INCLUDE; + filter_list[4].list_filter_item.rule.key_value.string_type_value = keyword; + filter_list[4].list_filter_item.rule.case_sensitivity = EMAIL_CASE_INSENSITIVE; + + sorting_rule_list = (email_list_sorting_rule_t *)malloc(sizeof(email_list_sorting_rule_t) * sorting_rule_list_count); + memset(sorting_rule_list, 0, sizeof(email_list_sorting_rule_t) * sorting_rule_list_count); + + sorting_rule_list[0].target_attribute = EMAIL_MAIL_ATTRIBUTE_SUBJECT; + sorting_rule_list[0].sort_order = EMAIL_SORT_ORDER_ASCEND; + + ret = email_count_mail(filter_list, filter_list_count, &total_mail_cnt, &unseen_mail_cnt); + if (ret != EMAIL_ERROR_NONE) { + SEARCH_DEBUG_WARNING("Fail to call email_count_mail"); + goto out_func; + } + + ret = email_get_mail_list_ex(filter_list, filter_list_count, sorting_rule_list, sorting_rule_list_count, + offset, limit, &mail_list, &mail_count); + + + + if (ret != EMAIL_ERROR_NONE) { + SEARCH_DEBUG_WARNING("Fail to call email_get_mail_list_ex"); + goto out_func; + } + + SEARCH_DEBUG_LOG("EMAIL TOTAL COUNT : %d UNSEEN : %d", total_mail_cnt, unseen_mail_cnt); + SEARCH_DEBUG_LOG("EMAIL COUNT : %d", mail_count); + + if(mail_list == NULL) { + SEARCH_DEBUG_WARNING("mail_list is null"); + search_ret = SEARCH_RET_SEARCH_NONE; + goto out_func; + } + + if (mail_count == 0) { + SEARCH_DEBUG_WARNING("no email search result"); + search_ret = SEARCH_RET_SEARCH_NONE; + goto out_func; + } + + /* Set group title */ + if (offset == 0) { + result_info->group = search_add_genlist_item(SEARCH_GENLIST_GROUP, + obj, + ad->itc_grouptitle, + obj, + NULL); + } + + /* Set search result to genlist */ + for(i = 0 ; i < mail_count ; i++) { + char email_id_str[MAX_LENGTH_PER_ID] = {0,}; + char email_path_str[MAX_LENGTH_PER_PATH] = {0,}; + + sel_mem_info = (struct search_item_sel*)calloc(1, sizeof(struct search_item_sel)); + + if (!sel_mem_info) { + SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", i); + continue; + } + + sel_mem_info->type = obj->contents_type; + + if (obj->obj_icon_path) { + sel_mem_info->icon1 = strdup(obj->obj_icon_path); + + } + + snprintf(email_id_str, MAX_LENGTH_PER_ID - 1, "%d", mail_list[i].mail_id); + sel_mem_info->launch_param = strdup(email_id_str); + + + snprintf(email_path_str, MAX_LENGTH_PER_PATH - 1, "%d %d %d", + mail_list[i].account_id, mail_list[i].mail_id, mail_list[i].mailbox_id); + sel_mem_info->launch_path = strdup(email_path_str); + + if(strlen(mail_list[i].subject) > 0) { + sel_mem_info->text1 = strdup(search_markup_keyword(mail_list[i].subject, ad->search_word, &is_word_in_str)); + } + + if(strlen(mail_list[i].full_address_from) > 0) { + sel_mem_info->text2 = strdup(search_markup_keyword(mail_list[i].full_address_from, ad->search_word, &is_word_in_str)); + } + + if(is_word_in_str == false && (strlen(mail_list[i].email_address_recipient) > 0)) { + sel_mem_info->text2 = strdup(search_markup_keyword(mail_list[i].email_address_recipient, ad->search_word, &is_word_in_str)); + } + + gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM, obj, ad->itc_pslist_2line_1icon, sel_mem_info, obj->gl_result_grp); + result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item); + } + + /* Set more title to genlist (under 'search all') */ + if (i < total_mail_cnt) { + obj->mr_info.next_point = offset + i; + + sel_mem_more = + (struct search_item_more_sel *)calloc(1, + sizeof(struct search_item_more_sel)); + sel_mem_more->obj = obj; + + result_info->more = search_add_genlist_item(SEARCH_GENLIST_MORE, + obj, + ad->itc_listmore, + sel_mem_more, + obj->gl_result_grp); + } + search_ret = SEARCH_RET_SEARCH_SUCCESS; + +out_func: + SEARCH_FREE(filter_list); + SEARCH_FREE(sorting_rule_list); + SEARCH_FREE(mail_list); + + SEARCH_FUNC_END; + return search_ret; +} + +static bool __search_media_info_cb(media_info_h media, void *user_data) +{ + char *media_id = NULL; + char *media_name = NULL; + char *media_path = NULL; + char *media_thumbnail = NULL; + + struct search_item_sel *sel_mem_info = NULL; + Elm_Genlist_Item_Class *itc_style = NULL; + bool is_word_in_str = false; + + struct search_cb_data *scd = (struct search_cb_data*)user_data; + struct appdata *ad = NULL; + struct search_content_object *obj = NULL; + struct search_genlist_info *result_info = NULL; + char *keyword = NULL; + + struct search_genlist_item_info *gen_item = NULL; + char media_id_str[MAX_LENGTH_PER_PATH] = {0,}; + + SEARCH_RETV_IF(scd == NULL, true); + ad = scd->ad; + obj = scd->obj; + result_info = scd->result_info; + keyword = scd->keyword; + + SEARCH_RETV_IF(ad == NULL, true); + + media_info_get_media_id(media, &media_id); + media_info_get_display_name(media, &media_name); + media_info_get_file_path(media, &media_path); + media_info_get_thumbnail_path(media, &media_thumbnail); + + sel_mem_info = (struct search_item_sel*)calloc(1, sizeof(struct search_item_sel)); + + if (!sel_mem_info) { + SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", media_id); + return true; + } + + sel_mem_info->type = obj->contents_type; + + if ((media_thumbnail) && ecore_file_exists(media_thumbnail) == EINA_TRUE) { + sel_mem_info->icon1 = strdup(media_thumbnail); + } else if (obj->obj_icon_path) { + sel_mem_info->icon1 = strdup(obj->obj_icon_path); + } + + if (media_name && strlen(media_name)) { + sel_mem_info->text1 = strdup(search_markup_keyword(media_name, keyword, &is_word_in_str)); + } + + if (media_id) { + snprintf(media_id_str, MAX_LENGTH_PER_ID, "%s", media_id); + sel_mem_info->launch_param = strdup(media_id_str); + } + + if (media_path) { + sel_mem_info->launch_path = strdup(media_path); + } + + itc_style = ad->itc_pslist_1line_1icon; + + /* Add Info to genlist */ + gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM, + obj, + itc_style, + sel_mem_info, + obj->gl_result_grp); + result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item); + + SEARCH_FREE(media_id); + SEARCH_FREE(media_name); + SEARCH_FREE(media_thumbnail); + SEARCH_FREE(media_path); + + return true; + } + +static bool __search_sql_music_info_cb(media_info_h media, void *user_data) +{ + char *media_id = NULL; + char *media_path = NULL; + char *media_thumbnail = NULL; + char *title = NULL; + char *artist = NULL; + char *album = NULL; + int ret = 0; + + audio_meta_h a_handle = NULL; + + media_content_storage_e storage_type = MEDIA_CONTENT_STORAGE_INTERNAL; + + struct search_item_sel *sel_mem_info = NULL; + Elm_Genlist_Item_Class *itc_style = NULL; + bool is_word_in_str = false; + + struct search_cb_data *scd = (struct search_cb_data*)user_data; + struct appdata *ad = NULL; + struct search_content_object *obj = NULL; + struct search_genlist_info *result_info = NULL; + char *keyword = NULL; + + struct search_genlist_item_info *gen_item = NULL; + char music_id_str[MAX_LENGTH_PER_PATH] = {0,}; + + SEARCH_RETV_IF(scd == NULL, true); + ad = scd->ad; + obj = scd->obj; + result_info = scd->result_info; + keyword = scd->keyword; + + SEARCH_RETV_IF(ad == NULL, true); + + media_info_get_media_id(media, &media_id); + media_info_get_file_path(media, &media_path); + media_info_get_storage_type(media, &storage_type); + media_info_get_thumbnail_path(media, &media_thumbnail); + + ret = media_info_get_audio(media, &a_handle); + + if(ret != MEDIA_CONTENT_ERROR_NONE) { + SEARCH_DEBUG_WARNING("Fail to get audio info!"); + return true; + } else { + ret = audio_meta_get_title(a_handle, &title); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + SEARCH_DEBUG_WARNING("Fail to get title info!"); + } + + ret = audio_meta_get_album(a_handle, &album); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + SEARCH_DEBUG_WARNING("Fail to get album info!"); + } + + ret = audio_meta_get_artist(a_handle, &artist); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + SEARCH_DEBUG_WARNING("Fail to get artist info!"); + } + + } + + audio_meta_destroy(a_handle); + + sel_mem_info = (struct search_item_sel *)calloc(1, sizeof(struct search_item_sel)); + + if (!sel_mem_info) { + SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", media_id); + return true; + } + + sel_mem_info->type = obj->contents_type;; + + if ((media_thumbnail) && ecore_file_exists(media_thumbnail) == EINA_TRUE) { + sel_mem_info->icon1 = strdup(media_thumbnail); + } else if(obj->obj_icon_path) { + sel_mem_info->icon1 = strdup(obj->obj_icon_path); + } + + if ((title) && (strlen(title) > 0)) { + sel_mem_info->text1 = strdup(search_markup_keyword(title, keyword, &is_word_in_str)); + } + + if (is_word_in_str) { + if ((artist) && (strlen(artist) > 0)) { + sel_mem_info->text2 = strdup(search_markup_keyword(artist, keyword, &is_word_in_str)); + } + } else { + if ((artist) && (strlen(artist) > 0)) { + sel_mem_info->text2 = strdup(search_markup_keyword(artist, keyword, &is_word_in_str)); + } + + if (is_word_in_str == false && (album) && (strlen(album) > 0)) { + sel_mem_info->text2 = strdup(search_markup_keyword(album, keyword, &is_word_in_str)); + } + + if (is_word_in_str == false) { + SEARCH_DEBUG_LOG("search_result is 0. No match keyword in title,album,artist string"); + } + } + + if (storage_type == MEDIA_CONTENT_STORAGE_EXTERNAL) { + itc_style = ad->itc_pslist_2line_2icon; + sel_mem_info->icon2 = strdup(SEARCH_SDCARD_ICON); + } + else { + itc_style = ad->itc_pslist_2line_1icon; + } + + if (media_id) { + snprintf(music_id_str, MAX_LENGTH_PER_ID - 1, "%s", media_id); + sel_mem_info->launch_param = strdup(music_id_str); + } + + if (media_path) { + sel_mem_info->launch_path = strdup(media_path); + } + + /* Add Information to genlist */ + gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM, obj, itc_style, sel_mem_info, + obj->gl_result_grp); + result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item); + + SEARCH_FREE(media_id); + SEARCH_FREE(media_path); + SEARCH_FREE(media_thumbnail); + SEARCH_FREE(title); + SEARCH_FREE(artist); + SEARCH_FREE(album); + + return true; + } + +static int __search_sql_media_search_result_by_api(struct search_content_object *obj, + int offset, int limit, + char *keyword, + filter_h filter, + media_info_cb func_cb, + void *data, + struct search_genlist_info *result_info, + int total_cnt) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_cb_data scd = {obj, ad, keyword, result_info}; + + int result_cnt = 0; + int ret = 0; + int func_ret = SEARCH_RET_SEARCH_SUCCESS; + int curr_cnt = 0; + + struct search_item_more_sel *sel_mem_more = NULL; + + SEARCH_RETV_IF(ad == NULL, SEARCH_RET_SEARCH_FAIL); + + media_info_get_media_count_from_db(filter, &result_cnt); + + if (result_cnt != 0) { + /* Set group title */ + if (obj->mr_info.offset== 0) { + result_info->group = search_add_genlist_item(SEARCH_GENLIST_GROUP, + obj, + ad->itc_grouptitle, + obj, + NULL); + } + + ret = media_info_foreach_media_from_db(filter, func_cb, &scd); + + if (ret != MEDIA_CONTENT_ERROR_NONE) { + SEARCH_DEBUG_WARNING("media_info_foreach_media_from_db failed : %d\n", ret); + func_ret = SEARCH_RET_SEARCH_FAIL; + goto out_func; + } + + curr_cnt = offset + result_cnt; + + /* Set more title to genlist (under 'search all') */ + if (total_cnt > curr_cnt) { + obj->mr_info.next_point = offset + result_cnt; + + sel_mem_more = + (struct search_item_more_sel *)calloc(1, + sizeof(struct search_item_more_sel)); + sel_mem_more->obj = obj; + + result_info->more = search_add_genlist_item(SEARCH_GENLIST_MORE, + obj, + ad->itc_listmore, + sel_mem_more, + obj->gl_result_grp); + } + } else { + func_ret = SEARCH_RET_SEARCH_NONE; + } + +out_func: + SEARCH_FUNC_END; + + return func_ret; +} + + +int search_sql_image_search_result_by_api(struct search_content_object *obj, + int offset, int limit, + char *keyword, + void *data, + struct search_genlist_info *result_info) +{ + SEARCH_FUNC_START; + + int ret = SEARCH_RET_SEARCH_SUCCESS; + int len = 0; + int total_cnt = -1; + + char *search_query = NULL; + char *escape_added_keyword = NULL; + + const char *image_query = "(MEDIA_TYPE=0 and (MEDIA_DISPLAY_NAME like \"%%%s%%\" ESCAPE (\"%s\")))"; + + SEARCH_MALLOC(escape_added_keyword, strlen(keyword)*2+5, char); + memset(escape_added_keyword, 0x0, strlen(keyword)*2+5); + search_sql_make_keyword_bind_value(keyword, escape_added_keyword, SEARCH_SQL_BIND_TYPE_DUPLEX); + + len = strlen(escape_added_keyword) + strlen(DB_ESCAPE_CHAR) + strlen(image_query) + 1; + search_query = (char*)calloc(1, len); + + snprintf(search_query, len, image_query, escape_added_keyword, "%"); + + filter_h filter; + + ret = media_filter_create(&filter); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + SEARCH_DEBUG_WARNING("media_filter_create failed : %d\n", ret); + ret = SEARCH_RET_SEARCH_FAIL; + goto out_func; + } + + ret = media_filter_set_condition(filter, search_query, MEDIA_CONTENT_COLLATE_DEFAULT); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + SEARCH_DEBUG_WARNING("media_filter_set_condition failed : %d\n", ret); + ret = SEARCH_RET_SEARCH_FAIL; + goto out_func; + } + + ret = media_filter_set_order(filter, MEDIA_CONTENT_ORDER_ASC, MEDIA_DISPLAY_NAME, MEDIA_CONTENT_COLLATE_DEFAULT); + if(ret != MEDIA_CONTENT_ERROR_NONE) { + SEARCH_DEBUG_WARNING("media_filter_set_order failed : %d\n", ret); + ret = SEARCH_RET_SEARCH_FAIL; + goto out_func; +} + + media_info_get_media_count_from_db(filter, &total_cnt); + SEARCH_DEBUG_LOG("Matched Image Total Cnt : %d", total_cnt); + + ret = media_filter_set_offset(filter, offset, limit); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + SEARCH_DEBUG_WARNING("media_filter_set_offset failed : %d\n", ret); + ret = SEARCH_RET_SEARCH_FAIL; + goto out_func; + } + + + ret = __search_sql_media_search_result_by_api(obj, + offset, + limit, + keyword, + filter, + __search_media_info_cb, + data, + result_info, + total_cnt); + +out_func: + SEARCH_FREE(search_query); + SEARCH_FREE(escape_added_keyword); + media_filter_destroy(filter); + + SEARCH_FUNC_END; + + return ret; +} + +int search_sql_video_search_result_by_api(struct search_content_object *obj, + int offset, int limit, char *keyword, void *data, struct search_genlist_info *result_info) +{ + SEARCH_FUNC_START; + + int ret = SEARCH_RET_SEARCH_SUCCESS; + int len = 0; + char *search_query = NULL; + char *escape_added_keyword = NULL; + int total_cnt = -1; + + const char *video_query = "(MEDIA_TYPE=1 and (MEDIA_DISPLAY_NAME LIKE \"%%%s%%\" ESCAPE (\"%s\")))"; + + SEARCH_MALLOC(escape_added_keyword, strlen(keyword)*2+5, char); + memset(escape_added_keyword, 0x0, strlen(keyword)*2+5); + search_sql_make_keyword_bind_value(keyword, escape_added_keyword, SEARCH_SQL_BIND_TYPE_DUPLEX); + + len = strlen(escape_added_keyword) + strlen(DB_ESCAPE_CHAR) + strlen(video_query) + 1; + search_query = (char*)calloc(1, len); + + snprintf(search_query, len, video_query, escape_added_keyword, DB_ESCAPE_CHAR); + + filter_h filter; + + ret = media_filter_create(&filter); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + SEARCH_DEBUG_WARNING("media_filter_create failed : %d\n", ret); + ret = SEARCH_RET_SEARCH_FAIL; + goto out_func; + } + + ret = media_filter_set_offset(filter, offset, limit); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + SEARCH_DEBUG_WARNING("media_filter_set_offset failed : %d\n", ret); + ret = SEARCH_RET_SEARCH_FAIL; + goto out_func; + } + + ret = media_filter_set_condition(filter, search_query, MEDIA_CONTENT_COLLATE_DEFAULT); + if(ret != MEDIA_CONTENT_ERROR_NONE) { + SEARCH_DEBUG_WARNING("media_filter_set_condition failed : %d\n", ret); + ret = SEARCH_RET_SEARCH_FAIL; + goto out_func; + } + + ret = media_filter_set_order(filter, MEDIA_CONTENT_ORDER_ASC, MEDIA_DISPLAY_NAME, MEDIA_CONTENT_COLLATE_DEFAULT); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + SEARCH_DEBUG_WARNING("media_filter_set_order failed : %d\n", ret); + ret = SEARCH_RET_SEARCH_FAIL; + goto out_func; + } + + media_info_get_media_count_from_db(filter, &total_cnt); + SEARCH_DEBUG_LOG("Matched Video Total cnt : %d", total_cnt); + + ret = media_filter_set_offset(filter, offset, limit); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + SEARCH_DEBUG_WARNING("media_filter_set_offset failed : %d\n", ret); + ret = SEARCH_RET_SEARCH_FAIL; + goto out_func; + } + + ret = __search_sql_media_search_result_by_api(obj, + offset, + limit, + keyword, + filter, + __search_media_info_cb, + data, + result_info, + total_cnt); + +out_func: + + SEARCH_FREE(search_query); + SEARCH_FREE(escape_added_keyword); + media_filter_destroy(filter); + + SEARCH_FUNC_END; + + return ret; + } + +int search_sql_music_search_result_by_api(struct search_content_object *obj, + int offset, int limit, + char *keyword, + void *data, + struct search_genlist_info *result_info) +{ + SEARCH_FUNC_START; + + int ret = SEARCH_RET_SEARCH_SUCCESS; + int len = 0; + char *search_query = NULL; + char *escape_added_keyword = NULL; + int total_cnt = -1; + + const char *music_query = "(MEDIA_TYPE=3 and (MEDIA_TITLE LIKE \"%%%s%%\" or MEDIA_ALBUM LIKE \"%%%s%%\" or MEDIA_ARTIST LIKE \"%%%s%%\" ESCAPE (\"%s\")))"; + + SEARCH_MALLOC(escape_added_keyword, strlen(keyword)*2+5, char); + memset(escape_added_keyword, 0x0, strlen(keyword)*2+5); + search_sql_make_keyword_bind_value(keyword, escape_added_keyword, SEARCH_SQL_BIND_TYPE_DUPLEX); + + len = strlen(escape_added_keyword) + strlen(DB_ESCAPE_CHAR) + strlen(music_query) + 1; + search_query = (char*)calloc(1, len); + + snprintf(search_query, len, music_query, escape_added_keyword, + escape_added_keyword, escape_added_keyword, DB_ESCAPE_CHAR); + + filter_h filter; + + ret = media_filter_create(&filter); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + SEARCH_DEBUG_WARNING("media_filter_create failed : %d\n", ret); + ret = SEARCH_RET_SEARCH_FAIL; + goto out_func; + } + + + + ret = media_filter_set_condition(filter, search_query, MEDIA_CONTENT_COLLATE_DEFAULT); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + SEARCH_DEBUG_WARNING("media_filter_set_condition failed : %d\n", ret); + ret = SEARCH_RET_SEARCH_FAIL; + goto out_func; + } + + ret = media_filter_set_order(filter, MEDIA_CONTENT_ORDER_ASC, MEDIA_TITLE, MEDIA_CONTENT_COLLATE_DEFAULT); + if(ret != MEDIA_CONTENT_ERROR_NONE) { + SEARCH_DEBUG_WARNING("media_filter_set_order failed : %d\n", ret); + ret = SEARCH_RET_SEARCH_FAIL; + goto out_func; + } + + media_info_get_media_count_from_db(filter, &total_cnt); + SEARCH_DEBUG_LOG("Matched Music Total cnt : %d", total_cnt); + + ret = media_filter_set_offset(filter, offset, limit); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + SEARCH_DEBUG_WARNING("media_filter_set_offset failed : %d\n", ret); + ret = SEARCH_RET_SEARCH_FAIL; + goto out_func; + } + + ret = __search_sql_media_search_result_by_api(obj, + offset, + limit, + keyword, + filter, + __search_sql_music_info_cb, + data, + result_info, + total_cnt); + +out_func: + + SEARCH_FREE(search_query); + SEARCH_FREE(escape_added_keyword); + media_filter_destroy(filter); + + SEARCH_FUNC_END; + + return ret; +} + +ail_cb_ret_e __search_sql_menu_search_result_cb( + const ail_appinfo_h appinfo, + void *data) +{ + SEARCH_FUNC_START; + + struct search_cb_data *scd = (struct search_cb_data*)data; + struct appdata *ad = scd->ad; + struct search_content_object* obj = scd->obj; + struct search_genlist_info *result_info = scd->result_info; + char *keyword = scd->keyword; + + struct search_genlist_item_info *gen_item = NULL; + struct search_item_sel *sel_mem_info = NULL; + struct search_item_more_sel *sel_mem_more = NULL; + + bool is_word_in_str; + ail_cb_ret_e ret; + + if (obj->mr_info.loop_cnt < obj->mr_info.next_point) { + obj->mr_info.loop_cnt++; + return AIL_CB_RET_CONTINUE; + } + + if(obj->mr_info.next_point < + obj->mr_info.offset + SEARCH_CATEGORY_LIST_MORE_CNT) { + + sel_mem_info = (struct search_item_sel *)calloc(1, sizeof(struct search_item_sel)); + + if (!sel_mem_info) { + SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", obj->mr_info.loop_cnt); + return AIL_CB_RET_CONTINUE; + } + + sel_mem_info->type = obj->contents_type;; + + /********** START : set search result to sel_mem_info buf ************/ + + char *name = NULL; + char *package = NULL; + char *icon = NULL; + + ail_appinfo_get_str(appinfo, AIL_PROP_ICON_STR, &icon); + + if (icon) { + sel_mem_info->icon1 = strdup(icon); + } + + ail_appinfo_get_str(appinfo, AIL_PROP_PACKAGE_STR, &package); + if ((package) && (strlen(package) > 0)) { + + if(strcmp(package, "org.tizen.smartsearch") == 0) { + SEARCH_DEBUG_LOG("'smartsearch' does not appended"); + obj->mr_info.loop_cnt++; + obj->mr_info.next_point++; + SEARCH_FREE(sel_mem_info); + return AIL_CB_RET_CONTINUE; + } + + sel_mem_info->launch_path = strdup(package); + } else { + SEARCH_DEBUG_WARNING("package : null"); + } + + ail_appinfo_get_str(appinfo, AIL_PROP_NAME_STR, &name); + if ((name) && (strlen(name) > 0)) { + sel_mem_info->text1 = strdup(search_markup_keyword(name, keyword, &is_word_in_str)); + } else { + SEARCH_DEBUG_WARNING("name : null"); +} + + if(obj->mr_info.next_point == 0) { + /* Set group title */ + result_info->group = search_add_genlist_item(SEARCH_GENLIST_GROUP, + obj, + ad->itc_grouptitle, + obj, + NULL); + } + + /********** END : set search result to sel_mem_info buf *************/ + + gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM, + obj, + ad->itc_pslist_1line_1icon, + sel_mem_info, + obj->gl_result_grp); + result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item); + obj->mr_info.next_point++; + obj->mr_info.loop_cnt++; + + ret = AIL_CB_RET_CONTINUE; + + } else if (obj->mr_info.next_point == + obj->mr_info.offset + SEARCH_CATEGORY_LIST_MORE_CNT) { + + /* Check that only "SMARTSEARCH" is left in more result */ + if(obj->mr_info.next_point == obj->mr_info.result_cnt-1) { + + char *package = NULL; + + ail_appinfo_get_str(appinfo, AIL_PROP_PACKAGE_STR, &package); + if ((package) && (strlen(package) > 0) && (strcmp(package, "org.tizen.smartsearch") == 0)) { + SEARCH_DEBUG_LOG("Only 'SMARTSEARCH' is left in more result"); + return AIL_CB_RET_CANCEL; + } + } + + /* Set more title to genlist (under 'search all') */ + sel_mem_more = (struct search_item_more_sel *)calloc(1, sizeof(struct search_item_more_sel)); + sel_mem_more->obj = obj; + + result_info->more = search_add_genlist_item(SEARCH_GENLIST_MORE, + obj, + ad->itc_listmore, + sel_mem_more, + obj->gl_result_grp); + + ret = AIL_CB_RET_CANCEL; + } else { + SEARCH_DEBUG_WARNING + ("__search_sql_menu_search_result_cb wrong index : %d", + obj->mr_info.next_point); + + ret = AIL_CB_RET_CANCEL; + } + + SEARCH_FUNC_END; + + return ret; +} + +int search_sql_menu_search_result_by_api(struct search_content_object *obj, + int offset, int limit, + char *keyword, + void *data, + struct search_genlist_info *result_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_cb_data scd = {obj, ad, keyword, result_info}; + + int cnt = 0; + int ret = 0; + + ail_filter_h filter = NULL; + ail_error_e rc; + + char *escape_added_keyword = NULL; + SEARCH_MALLOC(escape_added_keyword, strlen(keyword)*2+5, char); + memset(escape_added_keyword, 0x0, strlen(keyword)*2+5); + search_sql_make_keyword_bind_value(keyword, escape_added_keyword, SEARCH_SQL_BIND_TYPE_DUPLEX); + + rc = ail_filter_new(&filter); + if (rc != AIL_ERROR_OK) { + SEARCH_DEBUG_WARNING("menu search - ail_filter_new error : %d", rc); + ret = SEARCH_RET_SEARCH_FAIL; + goto out_func; + } + + rc = ail_filter_add_str(filter, AIL_PROP_NAME_STR, escape_added_keyword); + if (rc != AIL_ERROR_OK) { + SEARCH_DEBUG_WARNING("menu search - ail_filter_add_str error : %d", rc); + ret = SEARCH_RET_SEARCH_FAIL; + goto out_func; + } + + rc = ail_filter_add_bool(filter, AIL_PROP_NODISPLAY_BOOL, false); + if (rc != AIL_ERROR_OK) { + SEARCH_DEBUG_WARNING("menu search - ail_filter_add_bool error : %d", rc); + ret = SEARCH_RET_SEARCH_FAIL; + goto out_func; + } + + rc = ail_filter_count_appinfo(filter, &cnt); + if( rc != AIL_ERROR_OK) { + SEARCH_DEBUG_WARNING("menu search - ail_filter_count_appinfo error : %d", rc); + ret = SEARCH_RET_SEARCH_FAIL; + goto out_func; + } + + SEARCH_DEBUG_LOG("ail search result : %d", cnt); + obj->mr_info.result_cnt = cnt; + + if(cnt > 0) { + obj->mr_info.loop_cnt = 0; + rc = ail_filter_list_appinfo_foreach(filter, __search_sql_menu_search_result_cb, &scd); + if( rc != AIL_ERROR_OK) { + SEARCH_DEBUG_WARNING("menu search - ail_filter_list_appinfo_foreach error : %d", rc); + ret = SEARCH_RET_SEARCH_FAIL; + goto out_func; + } + + if (obj->mr_info.next_point == 0) { + ret = SEARCH_RET_SEARCH_NONE; + } else { + ret = SEARCH_RET_SEARCH_SUCCESS; + } + } else { + ret = SEARCH_RET_SEARCH_NONE; + } + +out_func: + if (filter) { + ail_filter_destroy(filter); + } + + SEARCH_FREE(escape_added_keyword); + SEARCH_FUNC_END; + + return ret; +} + +bool __search_sql_browser_bookmark_result_cb(favorites_bookmark_entry_s *item, void *user_data) +{ + SEARCH_FUNC_START; + struct search_item_sel *sel_mem_info = NULL; + + bool ret = false; + bool is_word_in_str_main = false; + bool is_word_in_str_sub = false; + + char* match_str_title = NULL; + char* match_str_addr = NULL; + + struct search_cb_data_browser *scd = (struct search_cb_data_browser*)user_data; + struct appdata *ad = scd->ad; + struct search_content_object *obj = scd->obj; + struct search_genlist_info *result_info = scd->result_info; + char *keyword = scd->keyword; + + struct search_genlist_item_info *gen_item = NULL; + struct search_more_result *info = scd->info; + + if (info->loop_cnt < info->next_point) { + info->loop_cnt++; + return true; + } + + if (info->next_point < info->offset + SEARCH_CATEGORY_LIST_MORE_CNT) { + char bookmark_id_str[MAX_LENGTH_PER_PATH] = {0,}; + + /********** START : set search result to sel_mem_info buf ************/ + + if (item != NULL && item->title) { + match_str_title = strdup(search_markup_keyword(item->title, keyword, &is_word_in_str_main)); + } + + if (item != NULL && item->address) { + match_str_addr = strdup(search_markup_keyword(item->address, keyword, &is_word_in_str_sub)); + } + + if (is_word_in_str_main == true || is_word_in_str_sub == true) { + if (obj->gl_result_grp == NULL && result_info->group == NULL) { + /* Set group title */ + result_info->group = search_add_genlist_item(SEARCH_GENLIST_GROUP, + obj, + ad->itc_grouptitle, + obj, + NULL); + } + + sel_mem_info = (struct search_item_sel *)calloc(1, sizeof(struct search_item_sel)); + + if (!sel_mem_info) { + SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", info->loop_cnt); + return true; + } + + sel_mem_info->type = obj->contents_type; + snprintf(bookmark_id_str, MAX_LENGTH_PER_ID - 1, "%d", item->id); + sel_mem_info->launch_param = strdup(bookmark_id_str); + + if (match_str_title) { + sel_mem_info->text1 = strdup(match_str_title); + } + + if (match_str_addr) { + sel_mem_info->text2 = strdup(match_str_addr); + sel_mem_info->launch_path= strdup(item->address); + } + + if (obj->obj_icon_path) { + sel_mem_info->icon1 = strdup(obj->obj_icon_path); + } + + sel_mem_info->icon2 = strdup(SEARCH_FAVORITE_ICON); + gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM, + obj, + ad->itc_pslist_2line_2icon_browser_bookmark, + sel_mem_info, + obj->gl_result_grp); + result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item); + scd->search_ret = true; + } + + SEARCH_FREE(match_str_title); + SEARCH_FREE(match_str_addr); + + /********** END : set search result to sel_mem_info buf *************/ + info->next_point++; + info->loop_cnt++; + + ret = true; + } else if (info->next_point == + info->offset + SEARCH_CATEGORY_LIST_MORE_CNT) { + info->offset = info->next_point; + ret = false; + } else { + SEARCH_DEBUG_WARNING + ("__search_sql_browser_bookmark_result_cb wrong index : %d", + info->next_point); + + ret = false; + } + SEARCH_FUNC_END; + return ret; + +} + +bool __search_sql_browser_history_result_cb(favorites_history_entry_s *item, void *user_data) +{ + SEARCH_FUNC_START; + struct search_item_sel *sel_mem_info = NULL; + + bool ret = false; + bool is_word_in_str_main = false; + + const char* match_str = NULL; + + struct search_cb_data_browser *scd = (struct search_cb_data_browser*)user_data; + struct appdata *ad = scd->ad; + struct search_content_object *obj = scd->obj; + struct search_genlist_info *result_info = scd->result_info; + char *keyword = scd->keyword; + + struct search_more_result *info = scd->info; + struct search_genlist_item_info *gen_item = NULL; + + if (info->loop_cnt < info->next_point) { + info->loop_cnt++; + return true; + } + + if (info->next_point < info->offset + SEARCH_CATEGORY_LIST_MORE_CNT) { + char history_id_str[MAX_LENGTH_PER_PATH] = {0,}; + + /********** START : set search result to sel_mem_info buf ************/ + + if (item != NULL && item->address) { + match_str = search_markup_keyword(item->address, keyword, &is_word_in_str_main); + } + + if (is_word_in_str_main != false ) { + if (obj->gl_result_grp == NULL && result_info->group == NULL ) { + /* Set group title */ + result_info->group = search_add_genlist_item(SEARCH_GENLIST_GROUP, + obj, + ad->itc_grouptitle, + obj, + NULL); + } + + sel_mem_info = (struct search_item_sel *)calloc(1, sizeof(struct search_item_sel)); + + if (!sel_mem_info) { + SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", info->loop_cnt); + return true; + } + + sel_mem_info->type = obj->contents_type; + snprintf(history_id_str, MAX_LENGTH_PER_ID - 1, "%d", item->id); + sel_mem_info->launch_param = strdup(history_id_str); + + if (obj->obj_icon_path) { + sel_mem_info->icon1 = strdup(obj->obj_icon_path); + } + + if (item->address) { + sel_mem_info->launch_path = strdup(item->address); + } + + sel_mem_info->text1 = strdup(match_str); + + gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM, + obj, + ad->itc_pslist_1line_1icon_browser_history, + sel_mem_info, + obj->gl_result_grp); + result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item); + scd->search_ret = true; + } + + info->next_point++; + info->loop_cnt++; + + ret = true; + + } else if (info->next_point == + info->offset + SEARCH_CATEGORY_LIST_MORE_CNT) { + info->offset = info->next_point; + ret = false; + } else { + SEARCH_DEBUG_WARNING + ("__search_sql_browser_history_result_cb wrong index : %d", + info->next_point); + + ret = false; + } + + SEARCH_FUNC_END; + return ret; +} + +int search_sql_browser_search_result_by_api(struct search_content_object *obj, + int offset, int limit, + char *keyword, + void *data, + struct search_genlist_info *result_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_cb_data_browser scd_browser = {obj, ad, keyword, result_info, NULL, false}; + struct search_cb_data_browser scd_history = {obj, ad, keyword, result_info, NULL, false}; + + static struct search_more_result browser_result[2]; + struct search_item_more_sel *sel_mem_more = NULL; + + int ret = 0; + int bookmark_cnt = 0, history_cnt = 0; + int bookmark_ret = 0, history_ret = 0; + + if (offset == 0) { + /* offset 0 means first search result, so we initialize struct */ + memset(browser_result, 0x0, sizeof(browser_result)); + + favorites_bookmark_get_count(&browser_result[0].result_cnt); + favorites_history_get_count(&browser_result[1].result_cnt); + + bookmark_cnt = browser_result[0].result_cnt; + history_cnt = browser_result[1].result_cnt; + browser_result[0].ad = browser_result[1].ad = ad; + obj->gl_result_grp = NULL; + + if ( bookmark_cnt <= 0 && history_cnt <= 0 ) + return SEARCH_RET_SEARCH_NONE; + } else { + bookmark_cnt = browser_result[0].result_cnt; + history_cnt = browser_result[1].result_cnt; + browser_result[0].loop_cnt = 0; + browser_result[1].loop_cnt = 0; + } + + if (offset >= bookmark_cnt + history_cnt) { + /* We need not to search */ + return SEARCH_RET_SEARCH_NONE; + } + + scd_browser.info = &browser_result[0]; + scd_history.info = &browser_result[1]; + + /* offset check */ + if (bookmark_cnt > browser_result[0].next_point ) + bookmark_ret = favorites_bookmark_foreach(__search_sql_browser_bookmark_result_cb, + &scd_browser); + if (history_cnt > browser_result[1].next_point && g_list_length(result_info->itemlist) < SEARCH_CATEGORY_LIST_MORE_CNT) + history_ret = favorites_history_foreach(__search_sql_browser_history_result_cb, + &scd_history); + + if (bookmark_ret == FAVORITES_ERROR_DB_FAILED + && history_ret == FAVORITES_ERROR_DB_FAILED ) { + ret = SEARCH_RET_SEARCH_FAIL; + } + else if (scd_browser.search_ret == false && scd_history.search_ret == false){ + /* It means we can't get matched results */ + ret = SEARCH_RET_SEARCH_NONE; + } + else { + /* Make More button */ + if (browser_result[0].next_point < bookmark_cnt + || browser_result[1].next_point < history_cnt) { + sel_mem_more = (struct search_item_more_sel *)calloc(1, sizeof(struct search_item_more_sel)); + sel_mem_more->obj = obj; + + result_info->more = search_add_genlist_item(SEARCH_GENLIST_MORE, + obj, + ad->itc_listmore, + sel_mem_more, + obj->gl_result_grp); + } + + /* return check */ + obj->mr_info.next_point = browser_result[0].next_point + + browser_result[1].next_point; + ret = SEARCH_RET_SEARCH_SUCCESS; + } + + SEARCH_FUNC_END; + + return ret; +} + +int search_sql_msg_search_result_by_api(struct search_content_object *obj, + int offset, int limit, + char *keyword, + void *data, + struct search_genlist_info *result_info) +{ + SEARCH_FUNC_START; + + int ret = SEARCH_RET_SEARCH_FAIL; + + struct search_item_sel *sel_mem_info = NULL; + struct search_item_more_sel *sel_mem_more = NULL; + struct appdata *ad = (struct appdata *)data; + struct search_genlist_item_info *gen_item = NULL; + + bool is_word_in_str; + + int i = 0; + int j = 0; + bool is_word_in_title = false; + + msg_error_t err = MSG_SUCCESS; + + msg_struct_list_s total_msgList; + msg_struct_list_s msgList; + msg_struct_t search_s = NULL; + msg_struct_list_s *addr_list = NULL; + + search_s = msg_create_struct(MSG_STRUCT_SEARCH_CONDITION); + + err = msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_ALLBOX_ID); + if (err != MSG_SUCCESS) { + SEARCH_DEBUG_WARNING("Fail to make search struct : MSG_SEARCH_CONDITION_FOLDERID_INT"); + goto out_func; + }; + + err = msg_set_int_value(search_s, MSG_SEARCH_CONDITION_MSGTYPE_INT, MSG_TYPE_INVALID); + if (err != MSG_SUCCESS) { + SEARCH_DEBUG_WARNING("Fail to make search struct : MSG_SEARCH_CONDITION_MSGTYPE_INT"); + goto out_func; + } + + err = msg_set_str_value(search_s, MSG_SEARCH_CONDITION_SEARCH_VALUE_STR, keyword, strlen(keyword)); + if (err != MSG_SUCCESS) { + SEARCH_DEBUG_WARNING("Fail to make search struct : MSG_SEARCH_CONDITION_SEARCH_VALUE_STR"); + goto out_func; + } + + err = msg_search_message(ad->msg_handle, search_s, 0, 0, &total_msgList); + if (err != MSG_SUCCESS && err != MSG_ERR_DB_NORECORD) { + SEARCH_DEBUG_WARNING("msg_search_message is failed : %d", err); + goto out_func; + } + + err = msg_search_message(ad->msg_handle, search_s, offset, limit, &msgList); + + if (err != MSG_SUCCESS && err != MSG_ERR_DB_NORECORD) { + SEARCH_DEBUG_WARNING("msg_search_message is failed : %d", err); + goto out_func; + } + + SEARCH_DEBUG_LOG("Matched Total Message : %d", total_msgList.nCount); + SEARCH_DEBUG_LOG("Message Count : %d", msgList.nCount); + + if (msgList.nCount <= 0) { + SEARCH_DEBUG_WARNING("no msg search result"); + ret = SEARCH_RET_SEARCH_NONE; + } else { + + /* Set group title */ + if (offset == 0) { + /* Set group title */ + result_info->group = search_add_genlist_item(SEARCH_GENLIST_GROUP, + obj, + ad->itc_grouptitle, + obj, + NULL); + } + + /********** START : set search result to sel_mem_info buf ************/ + + for (i = 0; i < msgList.nCount; i++) { + const char *text_1line = NULL; + const char *markup_keyword = NULL; + char *img_path = NULL; + + int msg_type = 0; + int contact_id = -1; + int message_id = -1; + + char subject[MAX_SUBJECT_LEN] = {0}; + char str_number[MAX_ADDRESS_VAL_LEN] = {0,}; + char str_name[MAX_DISPLAY_NAME_LEN] = {0,}; + char msg_text[MAX_MSG_TEXT_LEN] = {0,}; + char msg_id_str[MAX_LENGTH_PER_PATH] = {0,}; + + err = msg_get_int_value(msgList.msg_struct_info[i], MSG_MESSAGE_TYPE_INT, &msg_type); + if (err != MSG_SUCCESS) { + SEARCH_DEBUG_WARNING("Fail to make search struct : MSG_MESSAGE_TYPE_INT %d", err); + goto out_func; + } + + SEARCH_DEBUG_LOG("mms : %d", msg_type); + + + sel_mem_info = (struct search_item_sel *)calloc(1,sizeof(struct search_item_sel)); + if (!sel_mem_info) { + SEARCH_DEBUG_WARNING("[%d] Fail to make a genlist select info item!", i); + return true; + } + + sel_mem_info->type = obj->contents_type;; + + err = msg_get_int_value(msgList.msg_struct_info[i], MSG_MESSAGE_ID_INT, &message_id); + if (err != MSG_SUCCESS) { + SEARCH_DEBUG_WARNING("Fail to make search struct : MSG_MESSAGE_ID_INT %d", err); + goto out_func; + } + + snprintf(msg_id_str, MAX_LENGTH_PER_ID - 1, "%d", message_id); + sel_mem_info->launch_param= strdup(msg_id_str); + + /* Set 1st line string */ + if (msg_type == MSG_TYPE_MMS || msg_type == MSG_TYPE_MMS_JAVA || msg_type == MSG_TYPE_MMS_NOTI) { + /* MMS case */ + err = msg_get_str_value(msgList.msg_struct_info[i], MSG_MESSAGE_SUBJECT_STR, + subject, MAX_SUBJECT_LEN); + + if (err != MSG_SUCCESS) { + SEARCH_DEBUG_WARNING("Fail to get sms context %d", err); + goto out_func; + } + + text_1line = subject; + markup_keyword = search_markup_keyword(text_1line, keyword,&is_word_in_title); + + if (!is_word_in_title) { + memset(msg_text, 0x00, sizeof(msg_text)); + err = msg_get_str_value(msgList.msg_struct_info[i], + MSG_MESSAGE_MMS_TEXT_STR, + msg_text, + sizeof(msg_text)); + + if (err != MSG_SUCCESS) { + SEARCH_DEBUG_WARNING("Fail to get mms context %d", err); + goto out_func; + } + + text_1line = msg_text; + + markup_keyword = search_markup_keyword(text_1line, + keyword, + &is_word_in_title); + } + + if ((text_1line) && (strlen(text_1line) > 0 )) { + sel_mem_info->text1 = strdup(markup_keyword); + } else { + sel_mem_info->text1 = strdup("Unknown"); + } + } else if(msg_type == MSG_TYPE_SMS) { + /* SMS Case */ + err = msg_get_str_value(msgList.msg_struct_info[i], + MSG_MESSAGE_SMS_DATA_STR, + msg_text, + sizeof(msg_text)); + + if (err != MSG_SUCCESS) { + SEARCH_DEBUG_WARNING("Fail to get sms context %d", err); + goto out_func; + } + + text_1line = msg_text; + + markup_keyword = search_markup_keyword(text_1line, + keyword, + &is_word_in_title); + SEARCH_DEBUG_LOG("1st string : %s", text_1line); + + if ((text_1line) && (strlen(text_1line) > 0)) { + sel_mem_info->text1 = strdup(markup_keyword); + } + } + + err = msg_get_list_handle(msgList.msg_struct_info[i], + MSG_MESSAGE_ADDR_LIST_STRUCT, + (void **)&addr_list); + + if (err != MSG_SUCCESS) { + SEARCH_DEBUG_WARNING("Fail to get address list handle! %d", err); + goto out_func; + } + + /* Set 2nd line string */ + for ( j=0; jnCount; j++) { + memset(str_number, 0, sizeof(str_number)); + memset(str_name, 0, sizeof(str_name)); + contact_id = -1; + is_word_in_str = false; + + /* First We set text_2line to first address data */ + err = msg_get_str_value(addr_list->msg_struct_info[j], + MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, + str_number, + MAX_ADDRESS_VAL_LEN); + + if (err != MSG_SUCCESS) { + SEARCH_DEBUG_WARNING("Fail to get data! : MSG_ADDRESS_INFO_DISPLAYNAME_STR %d", err); + goto out_func; + } + + err = msg_get_str_value(addr_list->msg_struct_info[j], + MSG_ADDRESS_INFO_DISPLAYNAME_STR, + str_name, + MAX_DISPLAY_NAME_LEN); + + if (err != MSG_SUCCESS) { + SEARCH_DEBUG_WARNING("Fail to get data! : MSG_ADDRESS_INFO_ADDRESS_VALUE_STR %d", err); + goto out_func; + } + + err = msg_get_int_value(addr_list->msg_struct_info[j], + MSG_ADDRESS_INFO_CONTACT_ID_INT, + &contact_id); + + if (err != MSG_SUCCESS) { + SEARCH_DEBUG_WARNING("Fail to get data! : MSG_ADDRESS_INFO_CONTACT_ID_INT %d", err); + goto out_func; + } + + /* Set text_2line */ + markup_keyword = search_markup_keyword(str_number, keyword, &is_word_in_str); + + if (strlen(str_name) > 0) { + sel_mem_info->text2 = strdup(str_name); + } else if(strlen(str_number) > 0) { + sel_mem_info->text2 = strdup(markup_keyword); + } else { + sel_mem_info->text2 = strdup("Unknown"); + } + + /* Check Whether Thumbnail Image exist or not */ + if (contact_id > -1) { + contacts_query_h query = NULL; + contacts_filter_h filter = NULL; + contacts_list_h list = NULL; + + unsigned int count = 0; + ret = contacts_connect2(); + + if (ret != CONTACTS_ERROR_NONE) { + SEARCH_DEBUG_WARNING("Fail to connect contact service!"); + if (obj->obj_icon_path != NULL) { + sel_mem_info->icon1 = strdup(obj->obj_icon_path); + } + continue; + } else { + contacts_query_create(_contacts_person_number._uri, &query); + contacts_filter_create(_contacts_person_number._uri, &filter); + contacts_filter_add_int(filter, _contacts_person.id, CONTACTS_MATCH_EQUAL, + contact_id); + contacts_query_set_filter(query, filter); + contacts_db_get_records_with_query(query, 0, 0, &list); + contacts_list_get_count(list, &count); + + if (count > 0) { + contacts_record_h record; + contacts_list_get_current_record_p(list, &record); + contacts_record_get_str_p(record, _contacts_person.image_thumbnail_path, &img_path); + } + + if (img_path != NULL) { + sel_mem_info->icon1 = strdup(img_path); + } else if (obj->obj_icon_path != NULL) { + sel_mem_info->icon1 = strdup(obj->obj_icon_path); + } + if (filter) { + contacts_filter_destroy(filter); + } + + if (query) { + contacts_query_destroy(query); + } + if (list) { + contacts_list_destroy(list, true); + } + + ret = contacts_disconnect2(); + } + } else { + if (obj->obj_icon_path) { + sel_mem_info->icon1 = strdup(obj->obj_icon_path); + } + } + + if ((is_word_in_title) || (is_word_in_str)) { + break; + } + } + + gen_item = search_add_genlist_item(SEARCH_GENLIST_ITEM, + obj, + ad->itc_pslist_2line_1icon, + sel_mem_info, + obj->gl_result_grp); + + result_info->itemlist = g_list_append(result_info->itemlist, (void*)gen_item); + } + + msg_release_list_struct(&msgList); + msg_release_list_struct(&total_msgList); + + /* Set more title to genlist (under 'search all') */ + if (total_msgList.nCount > offset + i) { + obj->mr_info.next_point = offset + i; + + sel_mem_more = (struct search_item_more_sel *) + calloc(1,sizeof(struct search_item_more_sel)); + sel_mem_more->obj = obj; + + result_info->more = search_add_genlist_item(SEARCH_GENLIST_MORE, + obj, + ad->itc_listmore, + sel_mem_more, + obj->gl_result_grp); + } + + ret = SEARCH_RET_SEARCH_SUCCESS; + } + +out_func: + if (search_s != NULL) { + msg_release_struct(&search_s); + } + SEARCH_FUNC_END; + return ret; +} + +void search_sql_update_result_object(struct search_content_object* result_obj, sqlite3* db_handle, sqlite3_stmt** db_sql) +{ + SEARCH_FUNC_START; + + int rc = 0; + + sqlite3_stmt *sql_stmt = db_sql[SEARCH_STMT_UPDATE_OBJECT_INFO]; + SEARCH_RET_IF(sql_stmt==NULL); + + search_sql_bind_text(db_handle, sql_stmt, 1, result_obj->name); + search_sql_bind_int(db_handle, sql_stmt, 2, result_obj->string_type); + search_sql_bind_int(db_handle, sql_stmt, 3, result_obj->visible); + search_sql_bind_int(db_handle, sql_stmt, 4, result_obj->order); + search_sql_bind_int(db_handle, sql_stmt, 5, result_obj->contents_type); + search_sql_bind_int(db_handle, sql_stmt, 6, result_obj->category_type); + search_sql_bind_text(db_handle, sql_stmt, 7, result_obj->def_pkg_name); + search_sql_bind_int(db_handle, sql_stmt, 8, result_obj->contents_type); + + rc = sqlite3_step(sql_stmt); + + if (rc == SQLITE_OK) + SEARCH_DEBUG_LOG("INSERT STEP SUCCESS"); + + search_sql_stmt_init(sql_stmt); + + SEARCH_FUNC_END; + +} diff --git a/src/search_bar.cpp b/src/search_bar.cpp new file mode 100755 index 0000000..afab825 --- /dev/null +++ b/src/search_bar.cpp @@ -0,0 +1,573 @@ +/* + * Copyright 2012-2013 Samsung Electronics Co., Ltd/ + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + +#include +#include "smartsearch.h" +#include "Elementary.h" + +Eina_Bool __search_entry_timer_cb(void *data) +{ + SEARCH_FUNC_START; + struct appdata *ad = (struct appdata *)data; + SEARCH_RETV_IF(ad == NULL, ECORE_CALLBACK_CANCEL); + + search_set_result_list(ad); + ad->search_timer = NULL; + + SEARCH_FUNC_END; + return ECORE_CALLBACK_CANCEL; +} + +void __search_searchbar_entry_changed_cb(void *data, Evas_Object * obj, + void *event_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + SEARCH_RET_IF(ad == NULL); + + if (elm_object_focus_get(ad->search_bar)) { + if (elm_entry_is_empty(ad->search_entry)) { + elm_object_signal_emit(ad->search_bar, "elm,state,eraser,hide", "elm"); + } + else { + elm_object_signal_emit(ad->search_bar, "elm,state,eraser,show", "elm"); + } + } else { + if (elm_entry_is_empty(ad->search_entry)) { + elm_object_signal_emit(ad->search_bar, "elm,state,guidetext,show", "elm"); + } + else { + elm_object_signal_emit(ad->search_bar, "elm,state,guidetext,hide", "elm"); + } + } + + /* Make timer for check user's input */ + search_stop_search(ad); + + ad->search_timer = ecore_timer_add(0.4, __search_entry_timer_cb, ad); + + SEARCH_FUNC_END; + return; +} + + +static void __search_searchbar_entry_focused_cb(void *data, Evas_Object *obj, void *event_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + SEARCH_RET_IF(ad == NULL); + + if (!elm_entry_is_empty(ad->search_entry)) { + elm_object_signal_emit(ad->search_bar, "elm,state,eraser,show", "elm"); + } + + elm_object_signal_emit(ad->search_bar, "elm,state,guidetext,hide", "elm"); + elm_object_signal_emit(ad->search_bar, "cancel,in", ""); + + SEARCH_FUNC_END; +} + +static void __search_searchbar_entry_unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + SEARCH_RET_IF(ad == NULL); + + if (elm_entry_is_empty(ad->search_entry)) { + elm_object_signal_emit(ad->search_bar, "elm,state,guidetext,show", "elm"); + } + + elm_object_signal_emit(ad->search_bar, "elm,state,eraser,hide", "elm"); + + SEARCH_FUNC_END; +} + +static void __search_searchbar_bg_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + SEARCH_RET_IF(ad == NULL); + + elm_object_focus_set(ad->search_entry, EINA_TRUE); + + SEARCH_FUNC_END; +} + +static void __search_searchbar_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) // When X marked button is clicked, empty entry's contents. +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + SEARCH_RET_IF(ad == NULL); + + elm_entry_entry_set(ad->search_entry, ""); + + Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(ad->search_entry); + + if (imf_context) { + ecore_imf_context_input_panel_show(imf_context); + } + + SEARCH_FUNC_END; +} + +static void __search_searchbar_key_down_cb(void *data, Evas * e, Evas_Object * obj, void *event_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + Evas_Event_Key_Down *ev = (Evas_Event_Key_Down *) event_info; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(ev == NULL); + + SEARCH_DEBUG_LOG("ev->key : %s", ev->key); + + if (SEARCH_STRCMP(ev->key, "Return") == 0) { + ecore_imf_context_input_panel_hide + ((Ecore_IMF_Context *)elm_entry_imf_context_get + (ad->search_entry)); + } + + SEARCH_FUNC_END; +} + +static void __search_searchbar_cancel_clicked_cb(void *data, Evas_Object * obj, + void *event_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + const char* text = NULL; + + SEARCH_RET_IF(ad == NULL); + + elm_object_focus_set(ad->cate_btn, EINA_TRUE); + evas_object_hide(ad->search_cancel_btn); + elm_object_signal_emit(ad->search_bar, "cancel,out", ""); + text = elm_entry_entry_get(ad->search_entry); + + if (text != NULL && strlen(text) > 0) + elm_entry_entry_set(ad->search_entry, NULL); + + elm_object_signal_emit(ad->search_bar, "elm,state,eraser,hide", "elm"); + + search_set_result_list(ad); + + malloc_trim(0); + + SEARCH_FUNC_END; +} + +static void __search_searchbar_gl_drag_scroll_start_cb(void *data, Evas_Object * obj, void *event_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + + Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(ad->search_entry); + + if (imf_context) { + ecore_imf_context_input_panel_hide(imf_context); + } + + SEARCH_FUNC_END; +} + + +static void +__search_searchbar_state_event_cb(void *data, Ecore_IMF_Context *imf_context, int value) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + + switch (value) + { + case ECORE_IMF_INPUT_PANEL_STATE_SHOW: + evas_object_smart_callback_add( + ad->search_gl, + "scroll,drag,start", + __search_searchbar_gl_drag_scroll_start_cb, + data); + break; + case ECORE_IMF_INPUT_PANEL_STATE_HIDE: + /* ISE state has changed to ISE_STATE_HIDE status */ + evas_object_smart_callback_del( + ad->search_gl, + "scroll,drag,start", + __search_searchbar_gl_drag_scroll_start_cb); + break; + } + + SEARCH_FUNC_END; +} + +Evas_Object *__search_init_noresult_view(Evas_Object* parent) +{ + SEARCH_FUNC_START; + + Evas_Object *noc = NULL; + + noc = elm_layout_add(parent); + elm_layout_theme_set(noc, "layout", "nocontents", "search"); + elm_object_part_text_set(noc, "elm.text", dgettext("sys_string", "IDS_COM_BODY_NO_SEARCH_RESULTS")); + elm_object_focus_allow_set(noc, EINA_TRUE); + + SEARCH_FUNC_END; + + return noc; +} + +Evas_Object *search_category_custom_layout_add(Evas_Object *parent) +{ + SEARCH_FUNC_START; + + Evas_Object *layout = NULL; + layout = elm_layout_add(parent); + elm_layout_file_set(layout, SEARCH_EDJ, "smartsearch/custom_image_button"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout, 0.5, 0.5); + evas_object_show(layout); + + SEARCH_FUNC_END; + return layout; +} + +Evas_Object *search_category_image_add(char* imgpath, Evas_Object *parent, int width, int height, bool resize) +{ + SEARCH_FUNC_START; + + char buf[MAX_LENGTH_PER_PATH] = { 0, }; + Evas_Object *image = NULL; + + image = elm_image_add(parent); + elm_image_resizable_set(image,1,1); + snprintf(buf, sizeof(buf), SEARCH_ICON_PATH "%s", imgpath); + elm_image_file_set(image, buf, NULL); + evas_object_show(image); + + SEARCH_FUNC_END; + return image; +} + +Evas_Object *search_searchbar_category_icon_add(char* img, Evas_Object *parent, int width, int height, bool resize) +{ + SEARCH_FUNC_START; + + char buf[MAX_LENGTH_PER_PATH] = { 0, }; + Evas_Object* cate_icon = NULL; + double scale = elm_config_scale_get(); + + if (img != NULL ) { + cate_icon = elm_icon_add(parent); + + snprintf(buf, sizeof(buf), SEARCH_ICON_PATH "%s", img); + + SEARCH_DEBUG_LOG("buf : %s", buf); + + elm_image_file_set(cate_icon, buf, NULL); + + evas_object_size_hint_aspect_set(cate_icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + if (resize != false) { + elm_image_resizable_set(cate_icon, EINA_TRUE, EINA_TRUE); + } else { + elm_image_resizable_set(cate_icon, EINA_FALSE, EINA_FALSE); + } + + evas_object_size_hint_min_set(cate_icon, width * scale, height * scale); + evas_object_size_hint_max_set(cate_icon, width * scale, height * scale); + } + + SEARCH_FUNC_END; + + return cate_icon; +} + + +void search_delete_searchbar(void *data) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + + if (ad->search_bar) { + elm_object_signal_callback_del( + ad->search_bar, + "elm,bg,clicked", + "elm", + __search_searchbar_bg_clicked_cb); + elm_object_signal_callback_del( + ad->search_bar, + "elm,eraser,clicked", + "elm", + __search_searchbar_eraser_clicked_cb); + + evas_object_del(ad->search_bar); + ad->search_bar = NULL; + } + + if (ad->search_entry) { + evas_object_smart_callback_del( + ad->search_entry, + "changed", + __search_searchbar_entry_changed_cb); + evas_object_smart_callback_del( + ad->search_entry, + "preedit,changed", + __search_searchbar_entry_changed_cb); + evas_object_smart_callback_del( + ad->search_entry, + "focused", + __search_searchbar_entry_focused_cb); + evas_object_smart_callback_del( + ad->search_entry, + "unfocused", + __search_searchbar_entry_unfocused_cb); + + evas_object_del(ad->search_entry); + ad->search_entry = NULL; + } + + if (ad->search_cancel_btn) { + evas_object_smart_callback_del( + ad->search_cancel_btn, + "clicked", + __search_searchbar_cancel_clicked_cb); + evas_object_del(ad->search_cancel_btn); + ad->search_cancel_btn = NULL; + } + + if (ad->cate_btn) { + evas_object_del(ad->cate_btn); + ad->cate_btn = NULL; + } + + if (ad->sb_layout) { + elm_object_part_content_unset(ad->sb_layout, "list"); + evas_object_del(ad->sb_layout); + } + + SEARCH_EVAS_OBJECT_FREE(ad->noresult_view); + SEARCH_EVAS_OBJECT_FREE(ad->search_gl); + + SEARCH_FUNC_END; +} + +void search_create_searchbar_layout(Evas_Object *parent, void *data) +{ + SEARCH_FUNC_START; + + Evas_Object *genlist = NULL; + struct appdata *ad = (struct appdata *)data; + + SEARCH_RET_IF(ad == NULL); + + ad->sb_layout = search_create_layout(parent, + SEARCH_EDJ, + SEARCH_SEARCHBAR_GROUP_NORMAL); + + SEARCH_RET_IF(ad->sb_layout == NULL); + + // Category button + ad->cate_btn = search_create_category_button(ad->sb_layout, ad); + + SEARCH_RET_IF(ad->cate_btn == NULL); + elm_object_part_content_set(ad->sb_layout, + "searchbar_area_category", ad->cate_btn); + + // Search bar + ad->search_bar = search_create_search_bar(ad->sb_layout); + SEARCH_RET_IF(ad->search_bar == NULL); + elm_object_signal_callback_add(ad->search_bar, "elm,bg,clicked", + "elm", __search_searchbar_bg_clicked_cb, ad); + elm_object_signal_callback_add(ad->search_bar, "elm,eraser,clicked", + "elm", __search_searchbar_eraser_clicked_cb, ad); + elm_object_part_content_set(ad->sb_layout, "searchbar_area_entry", + ad->search_bar); + + // Search entry + ad->search_entry = search_create_search_entry(ad->sb_layout, ad); + SEARCH_RET_IF(ad->search_entry == NULL); + elm_object_part_content_set(ad->search_bar, + "elm.swallow.content", ad->search_entry); + evas_object_smart_callback_add(ad->search_entry, "changed", + __search_searchbar_entry_changed_cb, ad); + evas_object_smart_callback_add(ad->search_entry, "preedit,changed", + __search_searchbar_entry_changed_cb, ad); + evas_object_smart_callback_add(ad->search_entry, "focused", + __search_searchbar_entry_focused_cb, ad); + evas_object_smart_callback_add(ad->search_entry, "unfocused", + __search_searchbar_entry_unfocused_cb, ad); + evas_object_event_callback_add(ad->search_entry, EVAS_CALLBACK_KEY_DOWN, + __search_searchbar_key_down_cb, ad); + + // Search Cancel button + ad->search_cancel_btn = search_create_search_cancel_btn(ad->sb_layout); + SEARCH_RET_IF(ad->search_cancel_btn == NULL); + evas_object_smart_callback_add(ad->search_cancel_btn, "clicked", + __search_searchbar_cancel_clicked_cb,ad); + elm_object_part_content_set(ad->search_bar, + "button_cancel", ad->search_cancel_btn); + + // Genlist + genlist = elm_genlist_add(ad->sb_layout); + + // To use multiline textblock/entry/editfield in genlist, set height_for_width mode + // then the item's height is calculated while the item's width fits to genlist width. + elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS); + elm_genlist_tree_effect_enabled_set(genlist, EINA_TRUE); + evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL); + ad->search_gl = genlist; + + // Result area + ad->noresult_view = __search_init_noresult_view(ad->sb_layout); + + SEARCH_RET_IF(ad->noresult_view == NULL); + elm_object_part_content_set(ad->sb_layout, "list_noresult", + ad->noresult_view); + + + SEARCH_FUNC_END; +} + +Evas_Object *search_create_layout(Evas_Object *parent, const char *file, const char *group) +{ + SEARCH_FUNC_START; + Evas_Object *layout = NULL; + + /* create layout */ + layout = elm_layout_add(parent); + + SEARCH_RETV_IF(layout == NULL, NULL); + + elm_layout_file_set(layout, file, group); + + SEARCH_FUNC_END; + return layout; +} + +Evas_Object *search_create_category_button(Evas_Object *parent, void *data) +{ + SEARCH_FUNC_START; + struct appdata *ad = (struct appdata *)data; + + Evas_Object *cate_btn; + Evas_Object *cate_icon; + + int err = 0; + char *imgpath = NULL; + int category = 0; + + /* set search category icon area */ + + category = SEARCH_CATE_PHONE; + ad->search_category = category; + + imgpath = ad->category_info[ad->search_category].btn_icon_path; + cate_icon = search_searchbar_category_icon_add(imgpath, + parent, + SEARCH_CATEGORY_BTN_ICON_SIZE_WIDTH, + SEARCH_CATEGORY_BTN_ICON_SIZE_HEIGHT, + false); + + cate_btn = elm_button_add(parent); + + SEARCH_RETV_IF(cate_btn == NULL, NULL); + + elm_object_style_set(cate_btn, "circle/empty"); + ad->cate_btn = cate_btn; + + elm_object_content_set(ad->cate_btn, cate_icon); + evas_object_show(cate_btn); + + SEARCH_FUNC_END; + return cate_btn; +} + +Evas_Object *search_create_search_bar(Evas_Object *parent) +{ + SEARCH_FUNC_START; + + Evas_Object *layout = NULL; + + layout = elm_layout_add(parent); + elm_layout_theme_set(layout, "layout", "searchbar", "cancel_button"); + elm_object_part_text_set(layout, "elm.guidetext", + dgettext("sys_string", "IDS_COM_BODY_SEARCH")); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_show(layout); + + SEARCH_FUNC_END; + return layout; +} + +Evas_Object *search_create_search_cancel_btn(Evas_Object *parent) +{ + SEARCH_FUNC_START; + Evas_Object *cancel_btn = NULL; + + cancel_btn = elm_button_add(parent); + elm_object_style_set(cancel_btn, "searchbar/default"); + elm_object_text_set(cancel_btn, dgettext("sys_string", "IDS_COM_SK_CANCEL")); + + SEARCH_FUNC_END; + return cancel_btn; +} + +Evas_Object *search_create_search_entry(Evas_Object *parent, void *data) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + Evas_Object *entry = NULL; + + SEARCH_RETV_IF(ad == NULL, NULL); + + entry = elm_entry_add(parent); + + elm_entry_scrollable_set(entry, EINA_TRUE); + elm_entry_single_line_set(entry, EINA_TRUE); + + elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT); + elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL); + elm_entry_prediction_allow_set(entry, EINA_FALSE); + elm_entry_autocapital_type_set(entry, ELM_AUTOCAPITAL_TYPE_NONE); + elm_entry_input_panel_return_key_type_set(entry, ELM_INPUT_PANEL_RETURN_KEY_TYPE_SEARCH); + + Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(entry); + ecore_imf_context_input_panel_event_callback_add(imf_context, + ECORE_IMF_INPUT_PANEL_STATE_EVENT, + __search_searchbar_state_event_cb, + ad); + SEARCH_FUNC_END; + return entry; +} + + diff --git a/src/smartsearch.cpp b/src/smartsearch.cpp new file mode 100755 index 0000000..a993b2a --- /dev/null +++ b/src/smartsearch.cpp @@ -0,0 +1,853 @@ +/* + * Copyright 2012-2013 Samsung Electronics Co., Ltd/ + * + * Licensed under the Flora License, Version 1.1 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + +#include +#include +#include + +#include "smartsearch.h" +#include "search_bar.h" +#include "ps_makeupviews.h" +#include "ps_searcher.h" + +#include +#include + +struct search_content_object_default { + int order; + int visible; + char name[DEF_BUF_LEN]; + int string_type; + int contents_type; + int category_type; + char def_pkg_name[DEF_BUF_LEN]; +}; + +struct search_category_info_default { + char btn_icon_path[MAX_LENGTH_PER_PATH]; + char btn_icon_press_path[MAX_LENGTH_PER_PATH]; +}; + +static struct search_content_object_default def_obj[SEARCH_CONT_MAX] = { + { 0, EINA_TRUE, "IDS_COM_BODY_CONTACTS", SEARCH_STR_TYPE_SYSTEM_STRING, + SEARCH_CONT_PHONE_CONTACTS, SEARCH_OBJ_PHONE_CONTENTS, "org.tizen.contacts" }, + { 1, EINA_TRUE, "IDS_COM_BODY_MESSAGES", SEARCH_STR_TYPE_SYSTEM_STRING, + SEARCH_CONT_PHONE_MSG, SEARCH_OBJ_PHONE_CONTENTS, "org.tizen.message" }, + { 2, EINA_TRUE, "IDS_COM_BODY_EMAIL", SEARCH_STR_TYPE_SYSTEM_STRING, + SEARCH_CONT_PHONE_EMAIL, SEARCH_OBJ_PHONE_CONTENTS, "org.tizen.email" }, + { 3, EINA_TRUE, "IDS_COM_BODY_IMAGES", SEARCH_STR_TYPE_SYSTEM_STRING, + SEARCH_CONT_PHONE_IMAGES, SEARCH_OBJ_PHONE_CONTENTS, "org.tizen.image-viewer"}, + { 4, EINA_TRUE, "IDS_COM_BODY_MUSIC", SEARCH_STR_TYPE_SYSTEM_STRING, + SEARCH_CONT_PHONE_MUSIC, SEARCH_OBJ_PHONE_CONTENTS, "org.tizen.music-player"}, + { 5, EINA_TRUE, "IDS_COM_BODY_VIDEOS", SEARCH_STR_TYPE_SYSTEM_STRING, + SEARCH_CONT_PHONE_VIDEO, SEARCH_OBJ_PHONE_CONTENTS, "org.tizen.video-player"}, + { 6, EINA_TRUE, "IDS_COM_BODY_CALENDAR", SEARCH_STR_TYPE_SYSTEM_STRING, + SEARCH_CONT_PHONE_CALENDAR, SEARCH_OBJ_PHONE_CONTENTS, "org.tizen.calendar"}, + { 7, EINA_TRUE, "IDS_COM_BODY_MEMO", SEARCH_STR_TYPE_SYSTEM_STRING, + SEARCH_CONT_PHONE_MEMO, SEARCH_OBJ_PHONE_CONTENTS, "org.tizen.memo"}, + { 8, EINA_TRUE, "IDS_COM_BODY_APPLICATIONS", SEARCH_STR_TYPE_SYSTEM_STRING, + SEARCH_CONT_PHONE_MENU, SEARCH_OBJ_PHONE_CONTENTS, {0} }, + { 9, EINA_TRUE, "IDS_COM_BODY_INTERNET", SEARCH_STR_TYPE_SYSTEM_STRING, + SEARCH_CONT_PHONE_BROWSER, SEARCH_OBJ_PHONE_CONTENTS, "org.tizen.browser"}, +}; + +static void __search_app_device_orientation_cb(void *data, Evas_Object *obj, void *event); + +static struct search_category_info_default def_category[SEARCH_CATE_MAX] = { + { "B10_btn_icon_Phone.png", "B10_btn_icon_Phone_press.png" }, +}; + +static void __search_win_delete_cb(void *data, Evas_Object * obj, + void *event_info) +{ + SEARCH_FUNC_START; + + elm_exit(); + + SEARCH_FUNC_END; +} + +static Eina_Bool __search_mousedown_event(void *data, int type, void *event) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + Ecore_Event_Mouse_Button *ev = NULL; + SEARCH_RETV_IF(ad == NULL, ECORE_CALLBACK_CANCEL); + SEARCH_RETV_IF(event == NULL, ECORE_CALLBACK_CANCEL); + + ev = (Ecore_Event_Mouse_Button *) event; + + SEARCH_RETV_IF(ev == NULL, ECORE_CALLBACK_CANCEL); + + ad->touch_x = ev->x; + ad->touch_y = ev->y; + return ECORE_CALLBACK_CANCEL; +} + + +static Eina_Bool __search_keydown_event(void *data, int type, void *event) +{ + SEARCH_FUNC_START; + + Ecore_Event_Key *ev = (Ecore_Event_Key *) event; + SEARCH_RETV_IF(ev == NULL, EINA_FALSE); + + if (!SEARCH_STRCMP(ev->keyname, KEY_END)) { + //end key concept is close. + elm_exit(); + } + + SEARCH_FUNC_END; + + return EINA_FALSE; +} + +static void __search_delete_layout_main(void *data) +{ + SEARCH_FUNC_START; + SEARCH_RET_IF(data == NULL); + + struct appdata *ad = (struct appdata *)data; + + SEARCH_EVAS_OBJECT_FREE(ad->layout_main); + SEARCH_EVAS_OBJECT_FREE(ad->navi_bar); + SEARCH_EVAS_OBJECT_FREE(ad->back_btn); + + search_delete_searchbar_layout(ad); + SEARCH_FUNC_END; +} + +static Evas_Object *__search_create_bg(Evas_Object * parent) { + SEARCH_FUNC_START; + + Evas_Object *bg = NULL; + SEARCH_RETV_IF(parent == NULL, NULL); + + bg = elm_bg_add(parent); + SEARCH_RETV_IF(bg == NULL, NULL); + + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(parent, bg); + evas_object_show(bg); + + SEARCH_FUNC_END; + return bg; +} + +static Evas_Object *__search_create_conformant(Evas_Object * parent) { + SEARCH_FUNC_START; + + Evas_Object *conformant = NULL; + SEARCH_RETV_IF(parent == NULL, NULL); + + conformant = elm_conformant_add(parent); + + SEARCH_RETV_IF(conformant == NULL, NULL); + + evas_object_size_hint_weight_set(conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(parent, conformant); + evas_object_show(conformant); + + SEARCH_FUNC_END; + + return conformant; +} + +static Evas_Object *__search_create_layout_main(Evas_Object *parent, Evas_Object *bg) +{ + SEARCH_FUNC_START; + Evas_Object *layout = NULL; + + SEARCH_RETV_IF(parent == NULL, NULL); + + layout = elm_layout_add(parent); + + SEARCH_RETV_IF(layout == NULL, NULL); + + //elm_layout_theme_set(layout, "standard", "window", "integration"); + elm_layout_theme_set(layout, "layout", "application", "default"); + + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_part_content_set(layout, "elm.swallow.bg", bg); + + edje_object_signal_emit(_EDJ(layout), "elm,state,show,indicator","elm"); + edje_object_signal_emit(_EDJ(layout), "elm,state,show,content", "elm"); + evas_object_show(layout); + + SEARCH_FUNC_END; + + return layout; +} + +static Evas_Object *__search_create_navigation_layout(Evas_Object * parent) +{ + SEARCH_FUNC_START; + + Evas_Object *navi_bar; //, *sd; + + SEARCH_RETV_IF(parent == NULL, NULL); + + navi_bar = elm_naviframe_add(parent); + + elm_object_part_content_set(parent, "elm.swallow.content", navi_bar); + + evas_object_show(navi_bar); + + SEARCH_FUNC_END; + + return navi_bar; +} + +static void __search_back_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + SEARCH_RET_IF(ad == NULL); + + elm_win_lower(ad->win_main); + + if(ad->back_btn_type == BACK_BTN_TYPE_CLOSE) + elm_exit(); + + SEARCH_FUNC_END; +} + +static Evas_Object* __search_add_back_btn(struct appdata *ad) +{ + SEARCH_FUNC_START; + SEARCH_RETV_IF(ad == NULL, NULL); + + /* add back key */ + Evas_Object *btn = elm_button_add(ad->conformant); + elm_object_style_set(btn, "naviframe/end_btn/default"); + evas_object_smart_callback_add(btn, "clicked", __search_back_btn_clicked_cb, ad); + + SEARCH_FUNC_END; + + return btn; +} + +static int __search_init_smartsearch(struct appdata *ad) +{ + SEARCH_FUNC_START; + + SEARCH_RETV_IF(ad == NULL, -1); + + // Base Layout + ad->bg = __search_create_bg(ad->win_main); + ad->conformant = __search_create_conformant(ad->win_main); + ad->layout_main = __search_create_layout_main(ad->conformant, ad->bg); + SEARCH_RETV_IF(ad->layout_main == NULL, -1); + elm_object_content_set(ad->conformant, ad->layout_main); + + // Indicator + elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_SHOW); + + // Navigation Bar + ad->navi_bar = __search_create_navigation_layout(ad->layout_main); + + // Backbutton + ad->back_btn = __search_add_back_btn(ad); + + // Search bar layout + search_create_searchbar_layout(ad->conformant, ad); + + ad->navi_it = elm_naviframe_item_push(ad->navi_bar, + dgettext("sys_string", "IDS_COM_BODY_SEARCH"), + ad->back_btn, NULL, ad->sb_layout, NULL); + + ad->search_category = SEARCH_CATE_PHONE; + + SEARCH_FUNC_END; + + return 0; +} + +static void __search_init_category_object(struct appdata *ad) +{ + SEARCH_FUNC_START; + int i = 0; + + SEARCH_RET_IF(ad == NULL); + + /* Initialize Category */ + for( i = 0 ; i < SEARCH_CATE_MAX; ++i ) { + ad->category_info[i].btn_icon_path = strdup(def_category[i].btn_icon_path); + ad->category_info[i].btn_icon_press_path = strdup(def_category[i].btn_icon_press_path); + } + + SEARCH_FUNC_END; +} + +static void __search_init_result_object(struct appdata *ad) +{ + SEARCH_FUNC_START; + + int i = 0; + int rc = 0; + int ret = SEARCH_RET_SEARCH_NONE; + + int ail_ret = 0; + + sqlite3_stmt *sql_load = NULL; + sqlite3_stmt *sql_insert = NULL; + + char *imgpath = NULL; + + /* Load DB data */ + sql_load = ad->search_db_sql[SEARCH_STMT_GET_CATEGORY_LIST_ALL]; + + rc = sqlite3_step(sql_load); + if (rc != SQLITE_ROW) { + if (rc == SQLITE_DONE) { + SEARCH_DEBUG_WARNING("SELECT STEP : SQLITE_DONE. No result"); + ret = SEARCH_RET_SEARCH_NONE; + } else { + SEARCH_DEBUG_ERROR("SELECT STEP FAIL : (%d)", rc); + ret = SEARCH_RET_SEARCH_FAIL; + } + } else { + SEARCH_DEBUG_LOG("SELECT STEP SUCCESS"); + ret = SEARCH_RET_SEARCH_SUCCESS; +} + + if( ret != SEARCH_RET_SEARCH_SUCCESS ) { + /* If db result is NULL, initialize to default setting and insert this data to DB */ + for( i = 0; i < SEARCH_CONT_MAX ; ++i ) { + sql_insert = ad->search_db_sql[SEARCH_STMT_INSERT_OBJECT_INFO]; + ad->result_obj[i].order = def_obj[i].order; + ad->result_obj[i].visible = def_obj[i].visible; + ad->result_obj[i].contents_type = def_obj[i].contents_type; + ad->result_obj[i].category_type = def_obj[i].category_type; + ad->result_obj[i].name = strdup(def_obj[i].name); + ad->result_obj[i].string_type = def_obj[i].string_type; + ad->result_obj[i].def_pkg_name = strdup(def_obj[i].def_pkg_name); + ail_ret = app_manager_get_app_icon_path(def_obj[i].def_pkg_name, &imgpath); + + if (ail_ret == APP_MANAGER_ERROR_NONE && imgpath) { + ad->result_obj[i].obj_icon_path = strdup(imgpath); + SEARCH_FREE(imgpath); +} + + /* Insert DB */ + search_sql_bind_text(ad->search_db_hd, sql_insert, 1, ad->result_obj[i].name); + search_sql_bind_int(ad->search_db_hd, sql_insert, 2, ad->result_obj[i].string_type); + search_sql_bind_int(ad->search_db_hd, sql_insert, 3, ad->result_obj[i].visible); + search_sql_bind_int(ad->search_db_hd, sql_insert, 4, ad->result_obj[i].order); + search_sql_bind_int(ad->search_db_hd, sql_insert, 5, ad->result_obj[i].contents_type); + search_sql_bind_int(ad->search_db_hd, sql_insert, 6, ad->result_obj[i].category_type); + search_sql_bind_text(ad->search_db_hd, sql_insert, 7, ad->result_obj[i].def_pkg_name); + + rc = sqlite3_step(sql_insert); + + if( sql_insert != NULL ) + search_sql_stmt_init(sql_insert); + } + } else { + /* Copy db data to structure */ + for(i = 0; i < SEARCH_CONT_MAX && rc == SQLITE_ROW; ++i) { + char *name = (char *)sqlite3_column_text(sql_load, 0); + int string_type = sqlite3_column_int(sql_load, 1); + int visible = sqlite3_column_int(sql_load, 2); + int order = sqlite3_column_int(sql_load, 3); + int contents_type = sqlite3_column_int(sql_load, 4); + int category_type = sqlite3_column_int(sql_load, 5); + char *def_pkg_name = (char *)sqlite3_column_text(sql_load, 6); + + ad->result_obj[i].order = order; + ad->result_obj[i].contents_type = contents_type; + ad->result_obj[i].string_type = string_type; + ad->result_obj[i].category_type = category_type; + ad->result_obj[i].name = ( name != NULL ) ? strdup(name): NULL; + ad->result_obj[i].visible = ( visible > 0 ) ? EINA_TRUE : EINA_FALSE; + ad->result_obj[i].def_pkg_name = ( def_pkg_name != NULL) ? + strdup(def_pkg_name) : NULL; + + if (def_pkg_name) { + ail_ret = app_manager_get_app_icon_path(def_obj[i].def_pkg_name, &imgpath); + + if (ail_ret == APP_MANAGER_ERROR_NONE && imgpath) { + ad->result_obj[i].obj_icon_path = strdup(imgpath); + SEARCH_FREE(imgpath); + } + } + + rc = sqlite3_step(sql_load); + } + } + + if( sql_load != NULL ) + search_sql_stmt_init(sql_load); + if( sql_insert != NULL ) + search_sql_stmt_init(sql_insert); + + SEARCH_FUNC_END; + } + +static Evas_Object *__search_create_win(const char *name, void *data) + { + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + Evas_Object *eo; + int w, h; + + SEARCH_RETV_IF(ad == NULL, NULL); + + eo = elm_win_add(NULL, name, ELM_WIN_BASIC); + elm_win_conformant_set(eo, EINA_TRUE); + + if (eo) { + elm_win_title_set(eo, name); + evas_object_smart_callback_add(eo, "delete,request", + __search_win_delete_cb, ad); + ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h); + evas_object_resize(eo, w, h); + + if (elm_win_wm_rotation_supported_get(eo)) { + const int rots[4] = { APP_DEVICE_ORIENTATION_0, + APP_DEVICE_ORIENTATION_90, + APP_DEVICE_ORIENTATION_180, + APP_DEVICE_ORIENTATION_270 }; + elm_win_wm_rotation_available_rotations_set(eo, rots, 4); + } + /* pass '-1' value to this API then it will unset + * preferred rotation angle */ + elm_win_wm_rotation_preferred_rotation_set(eo, -1); + evas_object_smart_callback_add(eo, "wm,rotation,changed", + __search_app_device_orientation_cb, ad); + } + + SEARCH_FUNC_END; + + return eo; +} + +static int __search_init_db_connect(struct appdata *ad) +{ + SEARCH_FUNC_START; + + int rc = 0; + int ret = SEARCH_RET_FAIL; + + SEARCH_RETV_IF(ad == NULL, SEARCH_RET_FAIL); + + rc = db_util_open(SEARCH_DB_PATH, + &(ad->search_db_hd), + 0); + if (rc != SQLITE_OK) { + SEARCH_DEBUG_ERROR + ("db_util_open error : %d (%s)\n", + rc, SEARCH_DB_PATH); + ret = SEARCH_RET_FAIL; + } else { + int i = 0; + const char *query_list[SEARCH_STMT_MAX] = { SEARCH_DB_SQL_GET_CATEGORY_LIST_ALL, + SEARCH_DB_SQL_INSERT_OBJECT_IFNO, + SEARCH_DB_SQL_UPDATE_OBJECT_INFO + }; + + for (i = SEARCH_STMT_GET_CATEGORY_LIST_ALL; i < SEARCH_STMT_MAX ; ++i ) { + SEARCH_DEBUG_LOG("query : %s\n", query_list[i]); + + ret = search_sql_prepare_stmt(ad->search_db_hd, query_list[i], + &(ad->search_db_sql[i])); + } + } + + SEARCH_FUNC_END; + + return ret; +} + +static void __search_deinit_db_connect(struct appdata *ad) + { + SEARCH_FUNC_START; + + int i = 0, rc = 0; + + SEARCH_RET_IF(ad == NULL); + + for (i = SEARCH_STMT_GET_CATEGORY_LIST_ALL; i < SEARCH_STMT_MAX ; ++i ) { + if (ad->search_db_sql[i]) { + search_sql_stmt_finalize(ad->search_db_sql[i]); + ad->search_db_sql[i] = NULL; + } + } + + if (ad->search_db_hd) { + rc = db_util_close(ad->search_db_hd); + if (rc != SQLITE_OK) { + SEARCH_DEBUG_WARNING + ("db_util_close error : %d / %s", + rc, SEARCH_DB_PATH); + } else { + SEARCH_DEBUG_LOG("db_util_close success"); + } + ad->search_db_hd = NULL; + } else { + SEARCH_DEBUG_WARNING("db_handle(%s) is null", SEARCH_DB_PATH); + } + + SEARCH_FUNC_END; +} + +static Eina_Bool __search_init_after_ui_create(gpointer data) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + SEARCH_RETV_IF(ad == NULL, ECORE_CALLBACK_CANCEL); + + ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, + __search_keydown_event, + ad); + + ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, + __search_mousedown_event, + ad); + + __search_init_db_connect(ad); + __search_init_result_object(ad); + + UG_INIT_EFL(ad->win_main, UG_OPT_INDICATOR_ENABLE); + + SEARCH_FUNC_END; + + return ECORE_CALLBACK_CANCEL; +} + + +static void __search_update_lang(void *data) +{ + SEARCH_FUNC_START; + struct appdata *ad = (struct appdata *)data; + int i = 0; + + SEARCH_RET_IF(ad == NULL); + + /* Update Text for match to current language */ + if (ad->navi_it) + elm_object_item_text_set(ad->navi_it, + dgettext("sys_string", "IDS_COM_BODY_SEARCH")); + + if (ad->search_bar) + elm_object_part_text_set(ad->search_bar, + "elm.guidetext", + dgettext("sys_string", "IDS_COM_BODY_SEARCH")); + if (ad->noresult_view) + elm_object_part_text_set(ad->noresult_view, + "elm.text", + dgettext("sys_string", "IDS_COM_BODY_NO_SEARCH_RESULTS")); + + if (ad->search_cancel_btn) + elm_object_text_set(ad->search_cancel_btn, + dgettext("sys_string", + "IDS_COM_SK_CANCEL")); + + for (i = 0; i < SEARCH_CONT_MAX; i++) { + Elm_Object_Item *it = ad->result_obj[i].gl_result_grp; + const char *item_name = ad->result_obj[i].name; + + if (it && item_name) + elm_genlist_item_fields_update(it, "elm.text", ELM_GENLIST_ITEM_FIELD_TEXT); + } + + SEARCH_FUNC_END; +} + +static bool __search_app_create(void *data) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + + SEARCH_RETV_IF(ad == NULL, false); + + ad->win_main = __search_create_win(SEARCH_PACKAGE, ad); + SEARCH_RETV_IF(ad->win_main == NULL, -1); + + evas_object_show(ad->win_main); + + ad->scale_factor = elm_config_scale_get(); + + __search_init_category_object(ad); + __search_init_smartsearch(ad); + + ad->first_search = true; + ad->idler_create_ui = ecore_idler_add(__search_init_after_ui_create, ad); + evas_object_show(ad->win_main); + + SEARCH_FUNC_END; + + return true; +} + +static void __search_app_terminate(void *data) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + int i = 0; + + SEARCH_RET_IF(ad == NULL); + + if (ad->layout_main) { + evas_object_del(ad->layout_main); + ad->layout_main = NULL; + } + + if (ad->win_main) { + evas_object_del(ad->win_main); + ad->win_main = NULL; + } + + if(ad->idler_create_ui) + ecore_idler_del(ad->idler_create_ui); + + search_result_gl_deinit(ad); + + search_app_disconnect(ad); + __search_deinit_db_connect(ad); + + search_util_date_time_format_deinit(); + + for ( i = 0 ; i < SEARCH_CONT_MAX ; ++i ) { + SEARCH_FREE(ad->result_obj[i].name); + SEARCH_FREE(ad->result_obj[i].obj_icon_path); + SEARCH_FREE(ad->result_obj[i].def_pkg_name); + } + + for ( i = 0 ; i < SEARCH_CATE_MAX ; ++i ) { + SEARCH_FREE(ad->category_info[i].btn_icon_path); + SEARCH_FREE(ad->category_info[i].btn_icon_press_path); + } + + SEARCH_FREE(ad->search_word); + SEARCH_FREE(ad->not_markup_search_word); + + SEARCH_FUNC_END; +} + +static void __search_app_pause(void *data) +{ + SEARCH_FUNC_START; + + SEARCH_FUNC_END; +} + +static void __search_app_resume(void *data) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + SEARCH_RET_IF(ad == NULL); + + if (ad->win_main) { + elm_object_focus_set(ad->back_btn, EINA_FALSE); + } + + elm_genlist_select_mode_set(ad->search_gl, ELM_OBJECT_SELECT_MODE_DEFAULT); + + if (elm_object_scroll_freeze_get(ad->search_gl) > 0) { + elm_object_scroll_freeze_pop(ad->search_gl); + } + + SEARCH_FUNC_END; +} + +static void __search_app_service(service_h service, void *data) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + + char *query = NULL; + char *keyword = NULL; + char *operation = NULL; + + Evas_Object *cate_icon; + int ret = 0; + char *icon_path = NULL; + + ad->back_btn_type = BACK_BTN_TYPE_LOWER; + SEARCH_FREE(ad->search_word); + + ret = service_get_operation(service, &operation); + + if (ret != 0) { + SEARCH_DEBUG_WARNING("Cannot get operation!"); + return; + } + + if(operation == NULL ) { + SEARCH_DEBUG_WARNING("Operation is NULL!"); + return; + } + + SEARCH_DEBUG_LOG("SERVICE OPERATION TYPE : %s", operation); + if (SEARCH_STRCMP(operation, SERVICE_OPERATION_SEARCH) == 0) { + ret = service_get_extra_data(service, "http://tizen.org/appcontrol/data/keyword", &query); + + if(ret != 0) { + SEARCH_DEBUG_WARNING("Fail to Get Keyword data!"); + query = NULL; + } + + if( (query) && (strlen(query) > 0) ) { + keyword = (char*)malloc(strlen(query)+1); + memset(keyword, 0x00, strlen(query)+1); + strncpy(keyword, query, strlen(query)); + } + + ad->search_category = SEARCH_CATE_PHONE; + ad->back_btn_type = BACK_BTN_TYPE_CLOSE; + + } else { + /* If Operation type is not SEARCH, Initializae valute to default */ + keyword = vconf_get_str(SMARTSEARCH_KEY_KEYWORD); + + if (keyword == NULL) + SEARCH_DEBUG_WARNING("Error(%d) : get current key from vconf", ret); + + ad->search_category = SEARCH_CATE_PHONE; + } + + SEARCH_DEBUG_LOG("current category : %d", ad->search_category); + + icon_path = ad->category_info[ad->search_category].btn_icon_path; + cate_icon = search_searchbar_category_icon_add(icon_path, + ad->sb_layout, + SEARCH_CATEGORY_BTN_ICON_SIZE_WIDTH, + SEARCH_CATEGORY_BTN_ICON_SIZE_HEIGHT, + false); + elm_object_content_set(ad->cate_btn, cate_icon); + + /* set current category to vconf */ + ad->search_category = SEARCH_CATE_PHONE; + + if ((keyword) && (strlen(keyword) > 0)) { + elm_object_text_set(ad->search_entry, keyword); + } else { + SEARCH_DEBUG_LOG("keyword is NULL"); + + elm_object_text_set(ad->search_entry, ""); + elm_object_signal_emit(ad->search_bar, "cancel,hide", ""); + + search_set_result_list(ad); + + /* set focus to entry for launching ime */ + evas_object_show(ad->search_entry); + elm_object_focus_set(ad->search_entry,EINA_TRUE); + elm_object_signal_emit(ad->search_bar, "cancel,in", ""); + } + + SEARCH_FREE(keyword); + SEARCH_FREE(operation); + SEARCH_FREE(query); + + elm_entry_cursor_end_set(ad->search_entry); + + if (ad->win_main) + elm_win_activate(ad->win_main); + + SEARCH_FUNC_END; +} + +static void __search_app_device_orientation_cb(void *data, Evas_Object *obj, void *event) +{ + SEARCH_FUNC_START; + struct appdata *ad = (struct appdata *)data; + enum ug_event rotation_mode; + int m = 0; + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(ad->win_main == NULL); + + m = elm_win_rotation_get(ad->win_main); + + switch (m) { + case APP_DEVICE_ORIENTATION_180: + rotation_mode = UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN; + break; + + case APP_DEVICE_ORIENTATION_270: + rotation_mode = UG_EVENT_ROTATE_LANDSCAPE; + break; + + case APP_DEVICE_ORIENTATION_90: + rotation_mode = UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN; + break; + + case APP_DEVICE_ORIENTATION_0: + default: + rotation_mode = UG_EVENT_ROTATE_PORTRAIT; + break; + } + + ug_send_event(rotation_mode); + + SEARCH_FUNC_END; +} + +static void __search_app_lang_change(void *data) +{ + SEARCH_FUNC_START; + struct appdata *ad = (struct appdata *)data; + + __search_update_lang(ad); + + SEARCH_FUNC_END; +} + +int main(int argc, char *argv[]) +{ + SEARCH_FUNC_START; + + struct appdata ad; + + int i = 0; + + app_event_callback_s event_callback; + + event_callback.create = __search_app_create; + event_callback.terminate = __search_app_terminate; + event_callback.pause = __search_app_pause; + event_callback.resume = __search_app_resume; + event_callback.service = __search_app_service; + event_callback.low_memory = NULL; + event_callback.low_battery = NULL; + event_callback.device_orientation = NULL; + event_callback.language_changed = __search_app_lang_change; + event_callback.region_format_changed = search_region_format_cb; + + memset(&ad, 0x0, sizeof(struct appdata)); + + for (i = 0; i < argc; i++) + SEARCH_DEBUG_LOG("argv[%d] = [%s]\n", i, argv[i]); + + SEARCH_FUNC_END; + + return app_efl_main(&argc, &argv, &event_callback, &ad); +} -- cgit v1.2.3