[PATCH] seperate download history db service to service app 20/103020/2
authorjaekuk, lee <juku1999@samsung.com>
Wed, 7 Dec 2016 04:59:19 +0000 (13:59 +0900)
committerjaekuk lee <juku1999@samsung.com>
Wed, 7 Dec 2016 04:59:50 +0000 (20:59 -0800)
From: sungguk <sungguk.na@samsung.com>

Change-Id: I4024adc3c335f69aec6193166df3a9d85e56ad5e
Signed-off-by: jaekuk, lee <juku1999@samsung.com>
CMakeLists.txt
download_db_service/CMakeLists.txt [new file with mode: 0755]
download_db_service/download-db-service-main.cpp [new file with mode: 0755]
download_db_service/download-db-service.cpp [new file with mode: 0755]
download_db_service/include/download-db-service-common.h [new file with mode: 0755]
download_db_service/include/download-db-service-debug.h [new file with mode: 0755]
download_db_service/include/download-db-service-main.h [new file with mode: 0755]
download_db_service/include/download-db-service.h [new file with mode: 0755]
packaging/org.tizen.download-manager.spec
res/org.tizen.download-manager.xml
src/main.cpp

index a756312..38a1dc5 100755 (executable)
@@ -25,6 +25,7 @@ SET(DBDATADIR "/home/owner/apps_rw/${PKGNAME}/data")
 SET(LOCALEDIR "${RESDIR}/locale")
 SET(ICONDIR "/usr/share/icons/default/small/")
 SET(HISTORYDB ".download-history.db")
+SET(DOWNLOAD-DB-SERVICE download-db-service)
 
 FIND_PROGRAM(UNAME NAMES uname)
 EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH")
@@ -163,6 +164,8 @@ INSTALL(TARGETS ${PROJ_NAME} DESTINATION ${BINDIR})
 CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.Flora share/license/${PKGNAME})
 INSTALL(FILES share/license/${PKGNAME} DESTINATION /usr/share/license)
 
+ADD_SUBDIRECTORY(download_db_service)
+
 # i18n
 IF(TIZEN_2_3_UX)
 ADD_SUBDIRECTORY(po/wvga)
diff --git a/download_db_service/CMakeLists.txt b/download_db_service/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..8de5ee1
--- /dev/null
@@ -0,0 +1,47 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+SET(DOWNLOAD-DB-SERVICE-PKGNAME org.tizen.download-db-service)
+
+ADD_DEFINITIONS("-D_FILE_OFFSET_BITS=64")
+
+SET(CMAKE_SKIP_BUILD_RPATH TRUE)
+
+IF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+       SET(CMAKE_BUILD_TYPE "Debug")
+ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+MESSAGE("Build type: ${CMAKE_BUILD_TYPE}")
+
+SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS} -O2 -g -Wall")
+
+SET(DOWNLOAD-DB-SERVICE-SRCS
+        ${CMAKE_CURRENT_SOURCE_DIR}/download-db-service.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/download-db-service-main.cpp
+)
+
+INCLUDE_DIRECTORIES(
+               ${CMAKE_CURRENT_SOURCE_DIR}/include/
+)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(download_db_pkgs REQUIRED glib-2.0 dlog capi-appfw-application capi-appfw-service-application data-control dlog sqlite3)
+INCLUDE_DIRECTORIES(${download_db_pkgs_INCLUDE_DIRS})
+LINK_DIRECTORIES(${download_db_pkgs_LIBRARY_DIRS})
+
+FOREACH(flag ${download_db_pkgs_CXXFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS}")
+SET(download_db_service_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIE")
+
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie")
+
+ADD_EXECUTABLE(${DOWNLOAD-DB-SERVICE} ${DOWNLOAD-DB-SERVICE-SRCS})
+TARGET_LINK_LIBRARIES(${DOWNLOAD-DB-SERVICE} ${download_db_pkgs_LDFLAGS} )
+SET_TARGET_PROPERTIES(${DOWNLOAD-DB-SERVICE} PROPERTIES COMPILE_FLAGS "${download_db_service_CXX_FLAGS}")
+
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+SET(BINDIR "${PREFIX}/bin")
+
+INSTALL(TARGETS ${DOWNLOAD-DB-SERVICE} DESTINATION ${BINDIR})
+#INSTALL(FILES tizen-manifest.xml DESTINATION /usr/share/packages RENAME ${DOWNLOAD-DB-SERVICE-PKGNAME}.xml)
diff --git a/download_db_service/download-db-service-main.cpp b/download_db_service/download-db-service-main.cpp
new file mode 100755 (executable)
index 0000000..f73bb32
--- /dev/null
@@ -0,0 +1,238 @@
+/*\r
+ * Copyright 2012  Samsung Electronics Co., Ltd\r
+ *\r
+ * Licensed under the Flora License, Version 1.1 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *    http://floralicense.org/license/\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+/**\r
+ * @file       download-manager-history-db.cpp\r
+ * @author     Jungki Kwak (jungki.kwak@samsung.com)\r
+ * @brief      Manager for a download history DB\r
+ */\r
+\r
+#include <list>\r
+#include <string>\r
+#include <iostream>\r
+#include <memory>\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <glib.h>\r
+\r
+#include <sstream>\r
+//#include "download-manager-common.h"\r
+//#include "download-manager-history-db.h"\r
+#include "download-db-service-main.h"\r
+#include "download-db-service-debug.h"\r
+\r
+\r
+#define FINALIZE_ON_ERROR( stmt ) { \\r
+       DM_LOGE("SQL error:%d[%s]", ret, sqlite3_errmsg(historyDb));\\r
+       if (sqlite3_finalize(stmt) != SQLITE_OK)\\r
+               DM_LOGE("sqlite3_finalize is failed");\\r
+       closeDB();\\r
+       return false; \\r
+}\r
+\r
+sqlite3 *DownloadHistoryDB::historyDb = NULL;\r
+\r
+DownloadHistoryDB::DownloadHistoryDB()\r
+{\r
+}\r
+\r
+DownloadHistoryDB::~DownloadHistoryDB()\r
+{\r
+}\r
+\r
+bool DownloadHistoryDB::openDB()\r
+{\r
+       DM_LOGV("");\r
+       int ret = 0;\r
+       if (historyDb == NULL) {\r
+               DM_LOGD("TRY to open [%s]", DBDATADIR"/"HISTORYDB);\r
+               if (sqlite3_open_v2(DBDATADIR"/"HISTORYDB, &historyDb,\r
+                               SQLITE_OPEN_READWRITE, NULL) != SQLITE_OK) {\r
+                       DM_LOGD("[ERROR][%s][%s]", DBDATADIR"/"HISTORYDB,\r
+                               sqlite3_errmsg(historyDb));\r
+\r
+                       int errorcode = sqlite3_errcode(historyDb);\r
+                       closeDB();\r
+                       if (errorcode == SQLITE_CORRUPT) {\r
+                               DM_LOGD("unlink [%s]", DBDATADIR"/"HISTORYDB);\r
+                               //unlink(DBDATADIR"/"HISTORYDB);\r
+                               errorcode = SQLITE_CANTOPEN;\r
+                       }\r
+\r
+                       if (errorcode == SQLITE_CANTOPEN) {\r
+                               DM_LOGD("Error :: CANTOPEN");\r
+                               int trycount = 0;\r
+                               while ((loadSqlSchema() == false) && (++trycount <= 3));\r
+                               if (trycount > 3)\r
+                                       DM_LOGD("[ERROR] Could not restore DB");\r
+                               return isOpen();\r
+                       }\r
+                       return false;\r
+               }\r
+               ret = sqlite3_exec(historyDb, "PRAGMA journal_mode=PERSIST;", 0, 0, 0);\r
+               if (SQLITE_OK != ret)\r
+                       return false;\r
+       }\r
+\r
+       return isOpen();\r
+}\r
+\r
+void DownloadHistoryDB::closeDB()\r
+{\r
+       DM_LOGV("");\r
+       if (historyDb) {\r
+               sqlite3_close(historyDb);\r
+               historyDb = NULL;\r
+       }\r
+}\r
+\r
+bool DownloadHistoryDB::loadSqlSchema(void)\r
+{\r
+       if (sqlite3_open_v2(DBDATADIR"/"HISTORYDB, &historyDb,\r
+                               SQLITE_OPEN_READWRITE |SQLITE_OPEN_CREATE, NULL) != SQLITE_OK) {\r
+               DM_LOGD("[ERROR][%s][%s]", DBDATADIR"/"HISTORYDB,\r
+                               sqlite3_errmsg(historyDb));\r
+               closeDB();\r
+               return false;\r
+       }\r
+\r
+       char *error_msg = NULL;\r
+       int ret = 0;\r
+       ret = sqlite3_exec(historyDb, REBUILD_QUERY, 0, 0, &error_msg);\r
+       if((error_msg != NULL) || (SQLITE_OK != ret)) {\r
+               DM_LOGD("SQL error :: [%s]",error_msg);\r
+               sqlite3_free(error_msg);\r
+               error_msg = NULL;\r
+               closeDB();\r
+               return false;\r
+       }\r
+\r
+       ret = sqlite3_exec(historyDb, REBUILD_QUERY_INDEX, 0, 0, &error_msg);\r
+       if((error_msg != NULL) || (SQLITE_OK != ret)) {\r
+               DM_LOGD("SQL error :: [%s]",error_msg);\r
+               sqlite3_free(error_msg);\r
+               error_msg = NULL;\r
+       }\r
+       return true;\r
+}\r
+\r
+void DownloadHistoryDB::insert_request_cb(int request_id, data_control_h provider, bundle *insert_data)\r
+{\r
+       char* command = data_control_provider_create_insert_statement(provider, insert_data);\r
+\r
+       if (!openDB()) {\r
+               DM_LOGE("NULL Check:historyDB");\r
+               return ;\r
+       }\r
+\r
+       int ret = sqlite3_exec(historyDb, command, NULL, NULL, NULL);\r
+\r
+       if (ret != SQLITE_OK) {\r
+               data_control_provider_send_error(request_id, sqlite3_errmsg(historyDb));\r
+               free(command);\r
+               return;\r
+       }\r
+       DM_LOGI("[insert_request_cb] insert success");\r
+\r
+       long long inserted_row_id = sqlite3_last_insert_rowid(historyDb);\r
+       ret = data_control_provider_send_insert_result(request_id, inserted_row_id);\r
+       if (ret != DATA_CONTROL_ERROR_NONE)\r
+               DM_LOGE("insert_send_result failed with error: %d", ret);\r
+       DM_LOGI("[insert_request_cb] send result success");\r
+\r
+       free(command);\r
+}\r
+\r
+void DownloadHistoryDB::delete_request_cb(int request_id, data_control_h provider, const char *where)\r
+{\r
+       DM_LOGI("[delete_request_cb] request_id(%d)", request_id);\r
+\r
+       char* command = data_control_provider_create_delete_statement(provider, where);\r
+\r
+       if (!openDB()) {\r
+               DM_LOGE("NULL Check:historyDB");\r
+               return ;\r
+       }\r
+\r
+       int ret = sqlite3_exec(historyDb, command, NULL, NULL, NULL);\r
+       if (ret != SQLITE_OK) {\r
+               data_control_provider_send_error(request_id, sqlite3_errmsg(historyDb));\r
+               free(command);\r
+               return;\r
+       }\r
+\r
+       ret = data_control_provider_send_delete_result(request_id);\r
+       if (ret != DATA_CONTROL_ERROR_NONE)\r
+               DM_LOGE("delete_send_result failed with error: %d", ret);\r
+       DM_LOGI("[delete_request_cb] delete success");\r
+\r
+       free(command);\r
+}\r
+\r
+void DownloadHistoryDB::select_request_cb(int request_id, data_control_h provider, const char **column_list,\r
+                                       int column_count, const char *where, const char *order)\r
+{\r
+       sqlite3_stmt* sql_stmt = NULL;\r
+\r
+       char* command = data_control_provider_create_select_statement(provider, column_list,\r
+                                                                                                                                                       column_count, where, order);\r
+\r
+       if (!openDB()) {\r
+               DM_LOGE("NULL Check:historyDB");\r
+               return ;\r
+       }\r
+\r
+       int ret = sqlite3_prepare_v2(historyDb, command, strlen(command), &sql_stmt, NULL);\r
+       if (ret != SQLITE_OK) {\r
+               data_control_provider_send_error(request_id, sqlite3_errmsg(historyDb));\r
+               free(command);\r
+               return;\r
+       }\r
+\r
+       ret = data_control_provider_send_select_result(request_id, (void *)sql_stmt);\r
+       if (ret != DATA_CONTROL_ERROR_NONE)\r
+               DM_LOGE("select_send_result failed with error: %d", ret);\r
+       DM_LOGI("[select_request_cb] send result success");\r
+\r
+       sqlite3_finalize(sql_stmt);\r
+       free(command);\r
+}\r
+\r
+void DownloadHistoryDB::update_request_cb(int request_id, data_control_h provider, bundle *update_data, const char *where)\r
+{\r
+       char* command = data_control_provider_create_update_statement(provider, update_data, where);\r
+\r
+       if (!openDB()) {\r
+               DM_LOGE("NULL Check:historyDB");\r
+               return ;\r
+       }\r
+\r
+       int ret = sqlite3_exec(historyDb, command, NULL, NULL, NULL);\r
+       if (ret != SQLITE_OK) {\r
+               data_control_provider_send_error(request_id, sqlite3_errmsg(historyDb));\r
+               free(command);\r
+               return;\r
+       }\r
+\r
+       ret = data_control_provider_send_update_result(request_id);\r
+       if (ret != DATA_CONTROL_ERROR_NONE)\r
+               DM_LOGE("update_send_result failed with error: %d", ret);\r
+       DM_LOGI("[update_request_cb] send result success");\r
+\r
+       free(command);\r
+}\r
+\r
diff --git a/download_db_service/download-db-service.cpp b/download_db_service/download-db-service.cpp
new file mode 100755 (executable)
index 0000000..0e7dca7
--- /dev/null
@@ -0,0 +1,163 @@
+/*\r
+ * Copyright 2012  Samsung Electronics Co., Ltd\r
+ *\r
+ * Licensed under the Flora License, Version 1.1 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *    http://floralicense.org/license/\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+/**\r
+ * @file       main.cpp\r
+ * @author     Jungki Kwak (jungki.kwak@samsung.com)\r
+ * @brief      main file for download manager\r
+ */\r
+\r
+#include <list>\r
+#include <string>\r
+#include <iostream>\r
+#include <memory>\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <glib.h>\r
+\r
+extern "C"\r
+{\r
+#include <tizen.h>\r
+#include <service_app.h>\r
+#include <app_event.h>\r
+}\r
+\r
+#include "download-db-service.h"\r
+#include "download-db-service-main.h"\r
+#include "download-db-service-debug.h"\r
+\r
+\r
+\r
+data_control_provider_sql_cb *sql_callback;\r
+\r
+void insert_request_cb(int request_id, data_control_h provider, bundle *insert_data, void *user_data)\r
+{\r
+       DownloadHistoryDB::insert_request_cb(request_id, provider, insert_data);\r
+}\r
+\r
+void delete_request_cb(int request_id, data_control_h provider, const char *where, void *user_data)\r
+{\r
+       DownloadHistoryDB::delete_request_cb(request_id, provider, where);\r
+}\r
+\r
+void select_request_cb(int request_id, data_control_h provider, const char **column_list, int column_count, const char *where, const char *order, void *user_data)\r
+{\r
+       DownloadHistoryDB::select_request_cb(request_id, provider, column_list, column_count, where, order);\r
+}\r
+\r
+void update_request_cb(int request_id, data_control_h provider, bundle *update_data, const char *where, void *user_data)\r
+{\r
+       DownloadHistoryDB::update_request_cb(request_id, provider, update_data, where);\r
+}\r
+\r
+\r
+void initialize_datacontrol_provider()\r
+{\r
+       DM_LOGI("initialize_datacontrol_provider");\r
+\r
+       int result;\r
+\r
+       sql_callback = (data_control_provider_sql_cb *)malloc(sizeof(data_control_provider_sql_cb));\r
+       sql_callback->select_cb = select_request_cb;\r
+       sql_callback->insert_cb = insert_request_cb;\r
+       sql_callback->delete_cb = delete_request_cb;\r
+       sql_callback->update_cb = update_request_cb;\r
+       result = data_control_provider_sql_register_cb(sql_callback, NULL);\r
+       if (result != DATA_CONTROL_ERROR_NONE)\r
+               DM_LOGE("data_control_sql_response_c failed with error: %d", result);\r
+       else\r
+               DM_LOGI("Provider SQL register success");\r
+}\r
+\r
+#if 0\r
+/* End : Support to enable fingerprint lock */\r
+HAPI int main(int argc, char *argv[])\r
+{\r
+       int r = 0;\r
+       download_db_service_appdata ad;\r
+       app_event_handler_h handlers[5] = {NULL,};\r
+\r
+       initialize_datacontrol_provider();\r
+\r
+       ui_app_lifecycle_callback_s ops = {\r
+               .create = _app_create,\r
+               .terminate = _app_terminate,\r
+               .pause = _app_pause,\r
+               .resume = _app_resume,\r
+               .app_control = _app_control,\r
+       };\r
+\r
+       ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, _app_lang_changed, &ad);\r
+\r
+       memset(&ad, 0x00, sizeof(download_db_service_appdata));\r
+\r
+       r = ui_app_main(argc, argv, &ops, &ad);\r
+\r
+       if (r == -1) {\r
+               return -1;\r
+       }\r
+\r
+       return 0;\r
+}\r
+\r
+#endif\r
+bool service_app_create(void *data)\r
+{\r
+       DM_LOGI("app_create");\r
+\r
+\r
+       return true;\r
+}\r
+\r
+void service_app_terminate(void *data)\r
+{\r
+       DM_LOGI("app_terminate");\r
+\r
+\r
+       return;\r
+}\r
+\r
+void service_app_control(app_control_h app_control, void *data)\r
+{\r
+       DM_LOGI("service_app_control called");\r
+\r
+#if 0\r
+       int ret = 0;\r
+       char *operation = NULL;\r
+       char *cmd = NULL;\r
+\r
+       ret = app_control_get_operation(app_control, &operation);\r
+#endif\r
+       return;\r
+}\r
+\r
+int main(int argc, char* argv[])\r
+{\r
+       service_app_lifecycle_callback_s event_callback = {0, };\r
+\r
+       initialize_datacontrol_provider();\r
+\r
+       event_callback.create = service_app_create;\r
+       event_callback.terminate = service_app_terminate;\r
+       event_callback.app_control = service_app_control;\r
+\r
+       return service_app_main(argc, argv, &event_callback, NULL);\r
+}\r
+\r
+\r
+/* End of file */\r
+\r
diff --git a/download_db_service/include/download-db-service-common.h b/download_db_service/include/download-db-service-common.h
new file mode 100755 (executable)
index 0000000..4021e64
--- /dev/null
@@ -0,0 +1,158 @@
+/*\r
+ * Copyright 2012  Samsung Electronics Co., Ltd\r
+ *\r
+ * Licensed under the Flora License, Version 1.1 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *    http://floralicense.org/license/\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+/**\r
+ * @file       download-manager-common.h\r
+ * @author     Jungki Kwak (jungki.kwak@samsung.com)\r
+ * @brief      Common define and data\r
+ */\r
+\r
+#ifndef DOWNLOAD_DB_SERVICE_COMMON_H\r
+#define DOWNLOAD_DB_SERVICE_COMMON_H\r
+\r
+#include <libintl.h>\r
+#include "download-db-service-debug.h"\r
+#include <tzplatform_config.h>\r
+\r
+#define _EDJ(o) elm_layout_edje_get(o)\r
+#define __(s) dgettext(PROJ_NAME, s)\r
+#define S_(s) dgettext("sys_string", s)\r
+\r
+#define DM_LOCALEDIR LOCALEDIR\r
+#define DM_DOMAIN PROJ_NAME\r
+\r
+// Download Manager Common Strings.\r
+#define ERROR_POPUP_LOW_MEM_DEFAULT_PHONE_WITH_SD_CARD __("IDS_DM_BODY_THERE_IS_NOT_ENOUGH_SPACE_IN_YOUR_DEVICE_STORAGE_GO_TO_PS_SETTINGS_TO_FREE_UP_SOME_STORAGE_SPACE_THEN_TRY_AGAIN")\r
+#define ERROR_POPUP_LOW_MEM_DEFAULT_PHONE_WITHOUT_SD_CARD __("IDS_DM_BODY_THERE_IS_NOT_ENOUGH_SPACE_IN_YOUR_DEVICE_STORAGE_GO_TO_PS_SETTINGS_TO_DELETE_SOME_DATA_OR_INSERT_AN_SD_CARD")\r
+#define ERROR_POPUP_LOW_MEM_DEFAULT_MMC_WITH_NO_PHONE_MEMORY_AVAILABLE __("IDS_DM_BODY_THERE_IS_NOT_ENOUGH_SPACE_ON_YOUR_SD_CARD_GO_TO_PS_SETTINGS_TO_DELETE_SOME_DATA_THEN_TRY_AGAIN")\r
+#define ERROR_POPUP_LOW_MEM_DEFAULT_MMC_WITH_PHONE_MEMORY_AVAILABLE __("IDS_DM_BODY_THERE_IS_NOT_ENOUGH_SPACE_ON_YOUR_SD_CARD_GO_TO_PS_SETTINGS_TO_DELETE_SOME_DATA_OR_CHANGE_THE_DEFAULT_STORAGE_LOCATION_TO_DEVICE")\r
+\r
+#define DM_POP_TEXT_DOWNLOAD_COMPLETE __("IDS_DM_HEADER_DOWNLOAD_COMPLETE")\r
+#define DM_POP_TEXT_DOWNLOAD_FAILED __("IDS_DM_BODY_DOWNLOAD_FAILED_M_STATUS_ABB")\r
+#define DM_DOWNLOAD_COMPLETE_STRING_ID __("IDS_DM_HEADER_DOWNLOAD_COMPLETE")\r
+#define DM_DOWNLOAD_FAILED_STRING_ID __("IDS_DM_BODY_DOWNLOAD_FAILED_M_STATUS_ABB")\r
+\r
+#ifdef _TIZEN_2_3_UX\r
+#define DM_POP_TEXT_ERROR ""\r
+#define DM_BODY_TEXT_NO_NAME "No name"\r
+#define DM_BODY_TEXT_UNSUPPORTED_FILE_TYPE "Unsupported file type"\r
+#define DM_OPT_TEXT_DELETE __("IDS_DM_OPT_DELETE")\r
+#define DM_SK_TEXT_CANCEL __("IDS_DM_BUTTON_CANCEL_ABB2")\r
+#define DM_SK_TEXT_OK __("IDS_DM_BUTTON_OK_ABB")\r
+#define DM_BODY_TEXT_SELECT_ALL __("IDS_DM_MBODY_SELECT_ALL")\r
+#define DM_BODY_TEXT_PD_SELECTED __("IDS_DM_HEADER_PD_SELECTED_ABB3")\r
+#define DM_SK_TEXT_DOWNLOAD __("IDS_DM_BUTTON_DOWNLOAD_ABB2")\r
+#define DM_BODY_TEXT_TODAY __("IDS_DM_HEADER_TODAY")\r
+#define DM_BODY_TEXT_YESTERDAY __("IDS_DM_HEADER_YESTERDAY")\r
+#define DM_POP_TEXT_FAILED __("IDS_DM_BODY_DOWNLOAD_FAILED_M_STATUS_ABB")\r
+#define DM_HEADER_DOWNLOAD_MANAGER __("IDS_DM_HEADER_DOWNLOAD_MANAGER_ABB")\r
+#else\r
+#define DM_POP_TEXT_ERROR S_("IDS_COM_POP_ERROR")\r
+#define DM_BODY_TEXT_NO_NAME S_("IDS_COM_BODY_NO_NAME")\r
+#define DM_BODY_TEXT_UNSUPPORTED_FILE_TYPE S_("IDS_COM_BODY_UNSUPPORTED_FILE_TYPE")\r
+#define DM_OPT_TEXT_DELETE S_("IDS_COM_OPT_DELETE")\r
+#define DM_SK_TEXT_CANCEL S_("IDS_COM_SK_CANCEL")\r
+#define DM_SK_TEXT_OK S_("IDS_COM_SK_OK")\r
+#define DM_BODY_TEXT_SELECT_ALL S_("IDS_COM_BODY_SELECT_ALL")\r
+#define DM_BODY_TEXT_PD_SELECTED S_("IDS_COM_BODY_PD_SELECTED")\r
+#define DM_SK_TEXT_DOWNLOAD S_("IDS_COM_SK_DOWNLOAD")\r
+#define DM_BODY_TEXT_TODAY S_("IDS_COM_BODY_TODAY")\r
+#define DM_BODY_TEXT_YESTERDAY S_("IDS_COM_BODY_YESTERDAY")\r
+#define DM_POP_TEXT_FAILED S_("IDS_COM_POP_FAILED")\r
+#endif\r
+\r
+// Other defines\r
+#define MAX_FILE_PATH_LEN 256\r
+#define MAX_BUF_LEN 256\r
+#define LOAD_HISTORY_COUNT 500\r
+#define WAITING_RO_MAX_SECONDS 20\r
+\r
+#define KEY_MODE "mode"\r
+#define KEY_REQ_HTTP_HEADER_FIELD "req_http_header_field"\r
+#define KEY_REQ_HTTP_HEADER_VALUE "req_http_header_value"\r
+#define KEY_MODE_VALUE_VIEW "view"\r
+#define KEY_MODE_VALUE_SILENT "silent"\r
+#define KEY_FAILED_HISTORYID "failed_historyid"\r
+#define KEY_DOWNLOADING_HISTORYID "downloading_historyid"\r
+#define KEY_DEFAULT_STORAGE "default_storage"\r
+#define KEY_NETWORK_BONDING "network_bonding"\r
+#define KEY_FILE_NAME "file_name"\r
+\r
+#define DM_DRM_MIME_STR "application/vnd.oma.drm.message"\r
+#define DM_DCF_MIME_STR "application/vnd.oma.drm.content"\r
+\r
+#define MYFILE_PKG_NAME "org.tizen.myfile"\r
+\r
+#define DM_DEFAULT_PHONE_INSTALL_DIR "/opt/usr/media/Downloads"\r
+\r
+#define DM_DEFAULT_MMC_TEMP_DIR "/opt/media/SDCardA1/.temp_download"\r
+#define DM_DEFAULT_MMC_INSTALL_DIR "/opt/media/SDCardA1/"\r
+\r
+#define DM_TEMP_DIR_NAME ".temp_download/"\r
+#define DM_INVALID_PATH_STRING ";\\\":*?<>|()"\r
+enum\r
+{\r
+       DM_CONTENT_NONE = 0,\r
+       DM_CONTENT_IMAGE,\r
+       DM_CONTENT_VIDEO,\r
+       DM_CONTENT_MUSIC,\r
+       DM_CONTENT_PDF,\r
+       DM_CONTENT_WORD,\r
+       DM_CONTENT_PPT, // 5\r
+       DM_CONTENT_EXCEL,\r
+       DM_CONTENT_HTML,\r
+       DM_CONTENT_TEXT,\r
+       DM_CONTENT_DRM,\r
+       DM_CONTENT_SD_DRM,//10\r
+       DM_CONTENT_FLASH,\r
+       DM_CONTENT_TPK,\r
+       DM_CONTENT_VCAL,\r
+       DM_CONTENT_UNKOWN //14\r
+};\r
+\r
+namespace DL_TYPE{\r
+enum TYPE {\r
+       TYPE_NONE,\r
+       HTTP_DOWNLOAD,\r
+};\r
+}\r
+\r
+namespace ERROR {\r
+enum CODE {\r
+       NONE = 0,\r
+       INVALID_URL,\r
+       NETWORK_FAIL,\r
+       NOT_ENOUGH_MEMORY,\r
+       FAIL_TO_INSTALL,\r
+       ENGINE_FAIL,\r
+#ifdef _ENABLE_OMA_DOWNLOAD\r
+       PARSING_FAIL,\r
+#endif\r
+       UNKNOWN\r
+};\r
+}\r
+\r
+namespace NOTIFICATION_TYPE{\r
+enum TYPE {\r
+       NOTI_NONE = 0,\r
+       NOTI_DOWNLOADING,\r
+       NOTI_FAILED,\r
+       NOTI_COMPLETED\r
+};\r
+}\r
+\r
+#endif /* DOWNLOAD_DB_SERVICE_COMMON_H */\r
+\r
diff --git a/download_db_service/include/download-db-service-debug.h b/download_db_service/include/download-db-service-debug.h
new file mode 100755 (executable)
index 0000000..5065427
--- /dev/null
@@ -0,0 +1,70 @@
+
+/* DOWNLOAD_MANAGER_DEBUG_H */
+/*
+ * Copyright 2012  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.
+ */
+
+/**
+ * @file       download-manager-debug.h
+ * @author     Jungki Kwak (jungki.kwak@samsung.com)
+ * @brief      debug function
+ */
+
+#ifndef DOWNLOAD_DB_SERVICE_DEBUG_H
+#define DOWNLOAD_DB_SERVICE_DEBUG_H
+
+#define _USE_DLOG 1
+
+#ifdef _USE_DLOG
+#include <dlog.h>
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+
+#define LOG_TAG "DOWNLOAD_DB"
+
+#define DM_LOGV(format, ...) ;//LOGD(format, ##__VA_ARGS__)
+#define DM_LOGD(format, ...) LOGD(format, ##__VA_ARGS__)
+#define DM_LOGI(format, ...) LOGI(format, ##__VA_ARGS__)
+#define DM_LOGE(format, ...) LOGE(format, ##__VA_ARGS__)
+#define DM_SLOGD(format, ...) SECURE_LOGD(format, ##__VA_ARGS__)
+#define DM_SLOGI(format, ...) SECURE_LOGI(format, ##__VA_ARGS__)
+#define DM_SLOGE(format, ...) SECURE_LOGE(format, ##__VA_ARGS__)
+#define DM_LOGTEST(format, ...) ;//LOGD("[TEST]"format, ##__VA_ARGS__)
+
+#else
+
+#include <stdio.h>
+#include <pthread.h>
+
+#define DM_LOGD(args...) do {\
+               printf("[D:%s][LN:%d][%lu]",__func__,__LINE__,pthread_self());\
+               printf(args);printf("\n");}while(0)
+#define DM_LOGI(args...) do {\
+               printf("[I:%s][LN:%d][%lu]",__func__,__LINE__,pthread_self());\
+               printf(args);printf("\n");}while(0)
+#define DM_LOGE(args...) do {\
+               printf("[ERR:%s][LN:%d][%lu]",__func__,__LINE__,pthread_self());\
+               printf(args);printf("\n");}while(0)
+#define DM_SLOGD DM_LOGD
+#define DM_SLOGI DM_LOGI
+#define DM_SLOGE DM_LOGE
+#define DM_LOGTEST
+#define DM_LOGV ;
+#endif /*_USE_DLOG*/
+
+#endif /* DOWNLOAD_DB_SERVICE_DEBUG_H */
+
diff --git a/download_db_service/include/download-db-service-main.h b/download_db_service/include/download-db-service-main.h
new file mode 100755 (executable)
index 0000000..04383c6
--- /dev/null
@@ -0,0 +1,81 @@
+/*\r
+ * Copyright 2012  Samsung Electronics Co., Ltd\r
+ *\r
+ * Licensed under the Flora License, Version 1.1 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *    http://floralicense.org/license/\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+/**\r
+ * @file       download-manager-history-db.h\r
+ * @author     Jungki Kwak (jungki.kwak@samsung.com)\r
+ * @brief      Manager for a download history DB\r
+ */\r
+\r
+#ifndef DOWNLOAD_DB_SERVICE_MAIN_H\r
+#define DOWNLOAD_DB_SERVICE_MAIN_H\r
+\r
+#include <string>\r
+#include <queue>\r
+#include <sqlite3.h>\r
+//#include "download-manager-item.h"\r
+#include "data_control.h"\r
+#include <libintl.h>\r
+\r
+extern "C" {\r
+#include <unicode/utypes.h>\r
+}\r
+#define  REBUILD_QUERY "CREATE TABLE IF NOT EXISTS history( \\r
+id INTEGER PRIMARY KEY AUTOINCREMENT, \\r
+downloadid INTEGER, \\r
+historyid INTEGER, \\r
+downloadtype INTEGER, \\r
+contenttype INTEGER, \\r
+state INTEGER, \\r
+err INTEGER, \\r
+name, \\r
+path, \\r
+url, \\r
+filename, \\r
+headerfield, \\r
+headervalue, \\r
+installdir, \\r
+installnotifyurl, \\r
+etag, \\r
+tempfilepath, \\r
+date datetime, \\r
+filesize UNSIGNED BIG INT DEFAULT 0);"\r
+#define  REBUILD_QUERY_INDEX "CREATE INDEX history_date_index on history (date);"\r
+\r
+using namespace std;\r
+\r
+class DownloadHistoryDB\r
+{\r
+public:\r
+       static bool openDBConn(void) { return openDB(); }\r
+       static void closeDBConn(void) { closeDB(); }\r
+       static void insert_request_cb(int request_id, data_control_h provider, bundle *insert_data);\r
+       static void delete_request_cb(int request_id, data_control_h provider, const char *where);\r
+       static void select_request_cb(int request_id, data_control_h provider, const char **column_list, int column_count, const char *where, const char *order);\r
+       static void update_request_cb(int request_id, data_control_h provider, bundle *update_data, const char *where);\r
+private:\r
+       DownloadHistoryDB(void);\r
+       ~DownloadHistoryDB(void);\r
+       static sqlite3 *historyDb;\r
+       static bool openDB(void);\r
+       static bool isOpen(void) { return historyDb ? true : false; }\r
+       static void closeDB(void);\r
+       static bool loadSqlSchema(void);\r
+};\r
+\r
+#endif /* DOWNLOAD_DB_SERVICE_MAIN_H */\r
+\r
+\r
diff --git a/download_db_service/include/download-db-service.h b/download_db_service/include/download-db-service.h
new file mode 100755 (executable)
index 0000000..132f3d1
--- /dev/null
@@ -0,0 +1,16 @@
+\r
+\r
+\r
+\r
+#define __DOWNLOAD_DB_SERVICE_H__\r
+\r
+#include <app.h>\r
+#include "data_control.h"\r
+\r
+#define PKGNAME "download-db-service"\r
+\r
+#if !defined(PACKAGEID)\r
+#define PACKAGEID "org.tizen.download-manager"\r
+#endif\r
+\r
+\r
index af4f8d7..2d97c45 100755 (executable)
@@ -1,7 +1,7 @@
 %define _ux_define tizen2.3
 Name:  org.tizen.download-manager
 Summary:       Application for support of the content download
-Version:       0.3.14
+Version:       0.3.15
 Release:       1
 License:       Flora-1.1
 Group:         misc
@@ -10,6 +10,7 @@ Source0:      %{name}-%{version}.tar.gz
 BuildRequires: pkgconfig(capi-web-url-download)
 BuildRequires: pkgconfig(capi-system-system-settings)
 BuildRequires: pkgconfig(capi-appfw-application)
+BuildRequires: pkgconfig(capi-appfw-service-application)
 BuildRequires: pkgconfig(capi-network-connection)
 BuildRequires: pkgconfig(capi-content-media-content)
 BuildRequires: pkgconfig(capi-content-mime-type)
@@ -23,6 +24,7 @@ BuildRequires: pkgconfig(notification)
 BuildRequires: pkgconfig(appsvc)
 BuildRequires: pkgconfig(sqlite3)
 BuildRequires: pkgconfig(vconf)
+BuildRequires: pkgconfig(dlog)
 BuildRequires: pkgconfig(libxml-2.0)
 BuildRequires: pkgconfig(storage)
 BuildRequires: pkgconfig(efl-extension)
index b7cca9f..39a6568 100755 (executable)
                <app-control>
          <operation name="http://tizen.org/appcontrol/operation/download" />
                </app-control>
-         <datacontrol providerid = "http://downloadmanager.com/datacontrol/provider/downloadmanager" access="ReadWrite" type="Sql"/>
        </ui-application>
+       <service-application appid="org.tizen.download-db-service" auto-restart="true" exec="/usr/apps/org.tizen.download-manager/bin/download-db-service" multiple="false" nodisplay="true" on-boot="true" taskmanage="false" type="capp">
+       <background-category value="system"/>
+               <label>Download DB Service</label>
+         <datacontrol providerid = "http://downloadmanager.com/datacontrol/provider/downloadmanager" access="ReadWrite" type="Sql"/>
+       </service-application>
        <privileges>
        <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
        <privilege>http://tizen.org/privilege/download</privilege>
index f0a0227..613a9a8 100755 (executable)
@@ -406,8 +406,6 @@ EXPORT_API int main(int argc, char *argv[])
        if (DownloadHistoryDB::openDBConn() == true)
                DM_LOGD("[Info] DB Connection opened");
 
-       initialize_datacontrol_provider();
-
        evt_cb.create = __app_create;
        evt_cb.terminate = __app_terminate;
        evt_cb.pause = __app_pause;