From 770a3ba32e0563ecb6f826315a35a68e4214d101 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Fri, 13 Nov 2020 17:44:20 +0900 Subject: [PATCH 01/16] Update package version to 0.1.66 Change-Id: Ic0d7d6f17690a7c0012b5514e563ffea6cf6a1e4 Signed-off-by: Jihoon Kim --- packaging/capi-ui-sticker.spec | 2 +- receiver/tizen-manifest.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/capi-ui-sticker.spec b/packaging/capi-ui-sticker.spec index ff54d1a..a3827dc 100644 --- a/packaging/capi-ui-sticker.spec +++ b/packaging/capi-ui-sticker.spec @@ -1,6 +1,6 @@ Name: capi-ui-sticker Summary: Sticker client library and daemon -Version: 0.1.65 +Version: 0.1.66 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 diff --git a/receiver/tizen-manifest.xml b/receiver/tizen-manifest.xml index d6ffeb2..38098cf 100644 --- a/receiver/tizen-manifest.xml +++ b/receiver/tizen-manifest.xml @@ -1,5 +1,5 @@ - + -- 2.7.4 From 8241d912c465da046cf871952dd36435341275d0 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Mon, 7 Dec 2020 15:08:16 +0900 Subject: [PATCH 02/16] Remove unused code Change-Id: Ic4a1660edf15884c97906086187fef9003827019 Signed-off-by: Jihoon Kim --- client/sticker_dbus.c | 67 +------------------------------------- server/stickerd_data_manager.c | 74 +----------------------------------------- 2 files changed, 2 insertions(+), 139 deletions(-) diff --git a/client/sticker_dbus.c b/client/sticker_dbus.c index 9189de2..af01532 100644 --- a/client/sticker_dbus.c +++ b/client/sticker_dbus.c @@ -230,51 +230,6 @@ static void _handle_sticker_consumer_cb(GDBusConnection *connection, } } } - - #if 0 // Receive the sticker information by asynchronous communication. - if (g_strcmp0(signal_name, "send_group_list") == 0) { - if (consumer_handle->group_foreach_cb != NULL) - _call_sticker_list_cb(consumer_handle, parameters, signal_name); - return; - } else if (g_strcmp0(signal_name, "send_keyword_list") == 0) { - if (consumer_handle->keyword_foreach_cb != NULL) - _call_sticker_list_cb(consumer_handle, parameters, signal_name); - return; - } - - sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s)); - - if (!sticker_data) { - LOGE("failed to allocate memory"); - return; - } - - _get_sticker_info_from_gvariant(parameters, sticker_data); - - if (g_strcmp0(signal_name, "send_all_sticker_info") == 0) { - if (consumer_handle->data_foreach_cb != NULL) - consumer_handle->data_foreach_cb(sticker_data, consumer_handle->data_foreach_cb_user_data); - else - LOGW("No registered callback function"); - } else if (g_strcmp0(signal_name, "send_sticker_info_by_keyword") == 0) { - if (consumer_handle->data_foreach_by_keyword_cb != NULL) - consumer_handle->data_foreach_by_keyword_cb(sticker_data, consumer_handle->data_foreach_by_keyword_cb_user_data); - else - LOGW("No registered callback function"); - } else if (g_strcmp0(signal_name, "send_sticker_info_by_group") == 0) { - if (consumer_handle->data_foreach_by_group_cb != NULL) - consumer_handle->data_foreach_by_group_cb(sticker_data, consumer_handle->data_foreach_by_group_cb_user_data); - else - LOGW("No registered callback function"); - } else if (g_strcmp0(signal_name, "send_sticker_info_by_type") == 0) { - if (consumer_handle->data_foreach_by_type_cb != NULL) - consumer_handle->data_foreach_by_type_cb(sticker_data, consumer_handle->data_foreach_by_type_cb_user_data); - else - LOGW("No registered callback function"); - } - - _free_sticker_data(sticker_data); - #endif } //LCOV_EXCL_STOP @@ -303,26 +258,6 @@ static void _handle_sticker_provider_cb(GDBusConnection *connection, if (provider_handle->insert_finished_cb != NULL) _call_insert_finished_cb(provider_handle, parameters); } - - #if 0 // Receive the sticker information by asynchronous communication. - sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s)); - - if (!sticker_data) { - LOGE("failed to allocate memory"); - return; - } - - _get_sticker_info_from_gvariant(parameters, sticker_data); - - if (g_strcmp0(signal_name, "send_sticker_info_by_appid") == 0) { - if (provider_handle->data_foreach_cb != NULL) - provider_handle->data_foreach_cb(sticker_data, provider_handle->data_foreach_cb_user_data); - else - LOGW("No registered callback function"); - } - - _free_sticker_data(sticker_data); - #endif } static int _dbus_signal_init(GDBusConnection *gdbus_connection, int *monitor_id, CLIENT_LIB lib, void *data) @@ -1249,4 +1184,4 @@ int sticker_dbus_get_sticker_info_by_uri(GDBusConnection *gdbus_connection, stic g_object_unref(reply); return ret; -} \ No newline at end of file +} diff --git a/server/stickerd_data_manager.c b/server/stickerd_data_manager.c index dd506c7..d19dbdd 100644 --- a/server/stickerd_data_manager.c +++ b/server/stickerd_data_manager.c @@ -1335,78 +1335,6 @@ int stickerd_get_sticker_count(GVariant *parameters, GVariant **reply_body) return ret; } -#if 0 -// Send the sticker information by asynchronous communication. -static int send_sticker_info_async(int record_id, sticker_info_db_type type, const char *sender) -{ - int ret; - char *cmd = NULL; - - sticker_info_db *sticker_info = (sticker_info_db *)calloc(1, sizeof(sticker_info_db)); - - if (!sticker_info) - return STICKERD_SERVER_ERROR_OUT_OF_MEMORY; - - ret = stickerd_db_get_sticker_info_by_record_id(record_id, sticker_info); - if (ret != STICKERD_SERVER_ERROR_NONE) { - LOGE("Failed to get sticker info"); - free(sticker_info); - return STICKERD_SERVER_ERROR_OPERATION_FAILED; - } - - switch (type) { - case STICKER_DB_STICKER_ALL: - cmd = "send_all_sticker_info"; - break; - case STICKER_DB_STICKER_APPID: - cmd = "send_sticker_info_by_appid"; - break; - case STICKER_DB_STICKER_TYPE: - cmd = "send_sticker_info_by_type"; - break; - case STICKER_DB_STICKER_GROUP: - cmd = "send_sticker_info_by_group"; - break; - case STICKER_DB_STICKER_KEYWORD: - cmd = "send_sticker_info_by_keyword"; - break; - default: - cmd = ""; - break; - } - - GVariantBuilder *info_builder; - GVariantBuilder *keyword_builder; - - info_builder = g_variant_builder_new(G_VARIANT_TYPE("a{iv}")); - g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_INFO_ID, g_variant_new_int32(record_id)); - g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_APP_ID, g_variant_new_string((const gchar *)sticker_info->app_id)); - g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_URI_TYPE, g_variant_new_int32(sticker_info->type)); - g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_URI, g_variant_new_string((const gchar *)sticker_info->uri)); - g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_THUMBNAIL, g_variant_new_string((const gchar *)sticker_info->thumbnail)); - g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_DESCRIPTION, g_variant_new_string((const gchar *)sticker_info->description)); - g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_GROUP, g_variant_new_string((const gchar *)sticker_info->group)); - g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_DATE, g_variant_new_string((const gchar *)sticker_info->date)); - - keyword_builder = g_variant_builder_new(G_VARIANT_TYPE("a(s)")); - g_list_foreach(sticker_info->keyword, (GFunc) _set_keyword_builder, keyword_builder); - - GVariant *body = g_variant_new("(a{iv}a(s))", info_builder, keyword_builder); - g_variant_builder_unref(info_builder); - g_variant_builder_unref(keyword_builder); - - ret = stickerd_send_dbus_message(body, sender, cmd); - if (ret != STICKERD_SERVER_ERROR_NONE) { - LOGE("Failed to send sticker info to client"); - free(sticker_info); - return STICKERD_SERVER_ERROR_OPERATION_FAILED; - } - - free(sticker_info); - return ret; -} -#endif - static void _set_id_builder(char *id, GVariantBuilder *id_builder) { if (!id) { @@ -1843,4 +1771,4 @@ cleanup: } return ret; -} \ No newline at end of file +} -- 2.7.4 From f93aa924e82e2a1db93bd73e43b3102314844e9e Mon Sep 17 00:00:00 2001 From: InHong Han Date: Fri, 11 Dec 2020 14:08:31 +0900 Subject: [PATCH 03/16] Reorganize directory structure Change-Id: I7f66fb73b28a7172b1284b1abe2ecb9723bdc563 --- CMakeLists.txt | 13 +- client/CMakeLists.txt | 33 ++++ {consumer => client/inc}/sticker_consumer_main.h | 0 client/{ => inc}/sticker_data_main.h | 0 client/{ => inc}/sticker_defs.h | 0 {provider => client/inc}/sticker_provider_main.h | 0 {consumer => client/src}/sticker_consumer.c | 197 +++++------------------ client/{ => src}/sticker_data.c | 46 +----- client/{ => src}/sticker_dbus.c | 46 +----- client/{ => src}/sticker_dbus.h | 0 {provider => client/src}/sticker_provider.c | 45 +----- consumer/CMakeLists.txt | 23 --- provider/CMakeLists.txt | 23 --- tests/CMakeLists.txt | 2 +- 14 files changed, 80 insertions(+), 348 deletions(-) create mode 100644 client/CMakeLists.txt rename {consumer => client/inc}/sticker_consumer_main.h (100%) rename client/{ => inc}/sticker_data_main.h (100%) rename client/{ => inc}/sticker_defs.h (100%) rename {provider => client/inc}/sticker_provider_main.h (100%) rename {consumer => client/src}/sticker_consumer.c (71%) rename client/{ => src}/sticker_data.c (93%) rename client/{ => src}/sticker_dbus.c (97%) rename client/{ => src}/sticker_dbus.h (100%) rename {provider => client/src}/sticker_provider.c (92%) delete mode 100644 consumer/CMakeLists.txt delete mode 100644 provider/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index b36454f..2c8aa49 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,9 +9,7 @@ ADD_DEFINITIONS("-Werror") ## Include common directory ## INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include") -INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/client") -INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/provider") -INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/consumer") +INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/client/inc") ## Dependent packages ## INCLUDE(FindPkgConfig) @@ -35,15 +33,12 @@ pkg_check_modules(pkgs REQUIRED ## API ## ADD_SUBDIRECTORY(include) +## Sticker client ## +ADD_SUBDIRECTORY(client) + ## Sticker server ## ADD_SUBDIRECTORY(server) -## Sticker provider library ## -ADD_SUBDIRECTORY(provider) - -## Sticker consumer library ## -ADD_SUBDIRECTORY(consumer) - ## Sticker parser ## ADD_SUBDIRECTORY(sticker-parser) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt new file mode 100644 index 0000000..be848fc --- /dev/null +++ b/client/CMakeLists.txt @@ -0,0 +1,33 @@ +SET(CONSUMER_SRCS + src/sticker_consumer.c + src/sticker_data.c + src/sticker_dbus.c +) + +SET(PROVIDER_SRCS + src/sticker_provider.c + src/sticker_data.c + src/sticker_dbus.c +) + +INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/client/inc) + +FOREACH(flag ${pkgs_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall") + +## Add definitions ## +ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"") + +## sticker consumer library ## +ADD_LIBRARY(${PROJECT_NAME}-consumer SHARED ${CONSUMER_SRCS}) +TARGET_LINK_LIBRARIES(${PROJECT_NAME}-consumer ${pkgs_LDFLAGS}) + +## sticker provider library ## +ADD_LIBRARY(${PROJECT_NAME}-provider SHARED ${PROVIDER_SRCS}) +TARGET_LINK_LIBRARIES(${PROJECT_NAME}-provider ${pkgs_LDFLAGS}) + +## Install library files ## +INSTALL(TARGETS ${PROJECT_NAME}-consumer DESTINATION ${LIBDIR} COMPONENT RuntimeLibraries) +INSTALL(TARGETS ${PROJECT_NAME}-provider DESTINATION ${LIBDIR} COMPONENT RuntimeLibraries) \ No newline at end of file diff --git a/consumer/sticker_consumer_main.h b/client/inc/sticker_consumer_main.h similarity index 100% rename from consumer/sticker_consumer_main.h rename to client/inc/sticker_consumer_main.h diff --git a/client/sticker_data_main.h b/client/inc/sticker_data_main.h similarity index 100% rename from client/sticker_data_main.h rename to client/inc/sticker_data_main.h diff --git a/client/sticker_defs.h b/client/inc/sticker_defs.h similarity index 100% rename from client/sticker_defs.h rename to client/inc/sticker_defs.h diff --git a/provider/sticker_provider_main.h b/client/inc/sticker_provider_main.h similarity index 100% rename from provider/sticker_provider_main.h rename to client/inc/sticker_provider_main.h diff --git a/consumer/sticker_consumer.c b/client/src/sticker_consumer.c similarity index 71% rename from consumer/sticker_consumer.c rename to client/src/sticker_consumer.c index 4f51fb5..39297bf 100644 --- a/consumer/sticker_consumer.c +++ b/client/src/sticker_consumer.c @@ -33,47 +33,6 @@ static cynara *p_cynara = NULL; -static void _free_sticker_data(sticker_data_h sticker_data) -{ - if (sticker_data->app_id) { - free(sticker_data->app_id); - sticker_data->app_id = NULL; - } - - if (sticker_data->uri) { - free(sticker_data->uri); - sticker_data->uri = NULL; - } - - if (sticker_data->thumbnail) { - free(sticker_data->thumbnail); - sticker_data->thumbnail = NULL; - } - - if (sticker_data->keyword) { - g_list_free_full(sticker_data->keyword, free); - sticker_data->keyword = NULL; - } - - if (sticker_data->group) { - free(sticker_data->group); - sticker_data->group = NULL; - } - - if (sticker_data->description) { - free(sticker_data->description); - sticker_data->description = NULL; - } - - if (sticker_data->date) { - free(sticker_data->date); - sticker_data->date = NULL; - } - - free(sticker_data); - sticker_data = NULL; -} - static int _cynara_initialize() { int ret = cynara_initialize(&p_cynara, NULL); @@ -143,6 +102,30 @@ static int _sticker_check_privilege() { return ret; } +static int _call_sticker_data_foreach_cb(sticker_consumer_h consumer_handle, GVariantIter *id_iter, sticker_consumer_data_foreach_cb callback, void *user_data) +{ + int ret; + int info_id; + int count = 0; + + if (!id_iter) return count; + + while (g_variant_iter_loop (id_iter, "(i)", &info_id)) { + sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s)); + if (!sticker_data) + continue; + + ret = sticker_dbus_get_sticker_info_by_record_id(consumer_handle->gdbus_connection, sticker_data, info_id); + if (ret == STICKER_ERROR_NONE) { + count++; + callback(sticker_data, user_data); + } + sticker_data_destroy(sticker_data); + } + + return count; +} + EXPORT_API int sticker_consumer_create(sticker_consumer_h *consumer_handle) { CHECK_STICKER_FEATURE(); @@ -220,7 +203,6 @@ EXPORT_API int sticker_consumer_data_foreach_all(sticker_consumer_h consumer_han CHECK_STICKER_FEATURE(); int ret; - int info_id; int sticker_count = 0; GVariantIter *id_iter = NULL; @@ -234,25 +216,8 @@ EXPORT_API int sticker_consumer_data_foreach_all(sticker_consumer_h consumer_han goto cleanup; } - if (id_iter) { - while (g_variant_iter_loop (id_iter, "(i)", &info_id)) { - sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s)); - if (!sticker_data) { - ret = STICKER_ERROR_OUT_OF_MEMORY; - goto cleanup; - } - - ret = sticker_dbus_get_sticker_info_by_record_id(consumer_handle->gdbus_connection, sticker_data, info_id); - if (ret == STICKER_ERROR_NONE) { - sticker_count++; - callback(sticker_data, user_data); - _free_sticker_data(sticker_data); - } else { - _free_sticker_data(sticker_data); - goto cleanup; - } - } - } + if (id_iter) + sticker_count = _call_sticker_data_foreach_cb(consumer_handle, id_iter, callback, user_data); *result = sticker_count; @@ -268,7 +233,6 @@ EXPORT_API int sticker_consumer_data_foreach_by_keyword(sticker_consumer_h consu CHECK_STICKER_FEATURE(); int ret; - int info_id; int sticker_count = 0; GVariantIter *id_iter = NULL; @@ -282,25 +246,8 @@ EXPORT_API int sticker_consumer_data_foreach_by_keyword(sticker_consumer_h consu goto cleanup; } - if (id_iter) { - while (g_variant_iter_loop (id_iter, "(i)", &info_id)) { - sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s)); - if (!sticker_data) { - ret = STICKER_ERROR_OUT_OF_MEMORY; - goto cleanup; - } - - ret = sticker_dbus_get_sticker_info_by_record_id(consumer_handle->gdbus_connection, sticker_data, info_id); - if (ret == STICKER_ERROR_NONE) { - sticker_count++; - callback(sticker_data, user_data); - _free_sticker_data(sticker_data); - } else { - _free_sticker_data(sticker_data); - goto cleanup; - } - } - } + if (id_iter) + sticker_count = _call_sticker_data_foreach_cb(consumer_handle, id_iter, callback, user_data); *result = sticker_count; @@ -316,7 +263,6 @@ EXPORT_API int sticker_consumer_data_foreach_by_group(sticker_consumer_h consume CHECK_STICKER_FEATURE(); int ret; - int info_id; int sticker_count = 0; GVariantIter *id_iter = NULL; @@ -330,25 +276,8 @@ EXPORT_API int sticker_consumer_data_foreach_by_group(sticker_consumer_h consume goto cleanup; } - if (id_iter) { - while (g_variant_iter_loop (id_iter, "(i)", &info_id)) { - sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s)); - if (!sticker_data) { - ret = STICKER_ERROR_OUT_OF_MEMORY; - goto cleanup; - } - - ret = sticker_dbus_get_sticker_info_by_record_id(consumer_handle->gdbus_connection, sticker_data, info_id); - if (ret == STICKER_ERROR_NONE) { - sticker_count++; - callback(sticker_data, user_data); - _free_sticker_data(sticker_data); - } else { - _free_sticker_data(sticker_data); - goto cleanup; - } - } - } + if (id_iter) + sticker_count = _call_sticker_data_foreach_cb(consumer_handle, id_iter, callback, user_data); *result = sticker_count; @@ -364,7 +293,6 @@ EXPORT_API int sticker_consumer_data_foreach_by_type(sticker_consumer_h consumer CHECK_STICKER_FEATURE(); int ret; - int info_id; int sticker_count = 0; GVariantIter *id_iter = NULL; @@ -378,25 +306,8 @@ EXPORT_API int sticker_consumer_data_foreach_by_type(sticker_consumer_h consumer goto cleanup; } - if (id_iter) { - while (g_variant_iter_loop (id_iter, "(i)", &info_id)) { - sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s)); - if (!sticker_data) { - ret = STICKER_ERROR_OUT_OF_MEMORY; - goto cleanup; - } - - ret = sticker_dbus_get_sticker_info_by_record_id(consumer_handle->gdbus_connection, sticker_data, info_id); - if (ret == STICKER_ERROR_NONE) { - sticker_count++; - callback(sticker_data, user_data); - _free_sticker_data(sticker_data); - } else { - _free_sticker_data(sticker_data); - goto cleanup; - } - } - } + if (id_iter) + sticker_count = _call_sticker_data_foreach_cb(consumer_handle, id_iter, callback, user_data); *result = sticker_count; @@ -468,7 +379,6 @@ EXPORT_API int sticker_consumer_data_foreach_by_display_type(sticker_consumer_h CHECK_STICKER_FEATURE(); int ret; - int info_id; int sticker_count = 0; GVariantIter *id_iter = NULL; @@ -482,25 +392,8 @@ EXPORT_API int sticker_consumer_data_foreach_by_display_type(sticker_consumer_h goto cleanup; } - if (id_iter) { - while (g_variant_iter_loop (id_iter, "(i)", &info_id)) { - sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s)); - if (!sticker_data) { - ret = STICKER_ERROR_OUT_OF_MEMORY; - goto cleanup; - } - - ret = sticker_dbus_get_sticker_info_by_record_id(consumer_handle->gdbus_connection, sticker_data, info_id); - if (ret == STICKER_ERROR_NONE) { - sticker_count++; - callback(sticker_data, user_data); - _free_sticker_data(sticker_data); - } else { - _free_sticker_data(sticker_data); - goto cleanup; - } - } - } + if (id_iter) + sticker_count = _call_sticker_data_foreach_cb(consumer_handle, id_iter, callback, user_data); *result = sticker_count; @@ -562,7 +455,6 @@ EXPORT_API int sticker_consumer_get_recent_data_list(sticker_consumer_h consumer CHECK_STICKER_FEATURE(); int ret; - int info_id; int sticker_count = 0; GVariantIter *id_iter = NULL; @@ -576,25 +468,8 @@ EXPORT_API int sticker_consumer_get_recent_data_list(sticker_consumer_h consumer goto cleanup; } - if (id_iter) { - while (g_variant_iter_loop (id_iter, "(i)", &info_id)) { - sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s)); - if (!sticker_data) { - ret = STICKER_ERROR_OUT_OF_MEMORY; - goto cleanup; - } - - ret = sticker_dbus_get_sticker_info_by_record_id(consumer_handle->gdbus_connection, sticker_data, info_id); - if (ret == STICKER_ERROR_NONE) { - sticker_count++; - callback(sticker_data, user_data); - _free_sticker_data(sticker_data); - } else { - _free_sticker_data(sticker_data); - goto cleanup; - } - } - } + if (id_iter) + sticker_count = _call_sticker_data_foreach_cb(consumer_handle, id_iter, callback, user_data); *result = sticker_count; diff --git a/client/sticker_data.c b/client/src/sticker_data.c similarity index 93% rename from client/sticker_data.c rename to client/src/sticker_data.c index c0a5869..85d407e 100644 --- a/client/sticker_data.c +++ b/client/src/sticker_data.c @@ -93,50 +93,6 @@ cleanup: return NULL; } -static void _free_sticker_data(sticker_data_h sticker_data) -{ - if (!sticker_data) - return; - - if (sticker_data->app_id) { - free(sticker_data->app_id); - sticker_data->app_id = NULL; - } - - if (sticker_data->uri) { - free(sticker_data->uri); - sticker_data->uri = NULL; - } - - if (sticker_data->thumbnail) { - free(sticker_data->thumbnail); - sticker_data->thumbnail = NULL; - } - - if (sticker_data->keyword) { - g_list_free_full(sticker_data->keyword, free); - sticker_data->keyword = NULL; - } - - if (sticker_data->group) { - free(sticker_data->group); - sticker_data->group = NULL; - } - - if (sticker_data->description) { - free(sticker_data->description); - sticker_data->description = NULL; - } - - if (sticker_data->date) { - free(sticker_data->date); - sticker_data->date = NULL; - } - - free(sticker_data); - sticker_data = NULL; -} - EXPORT_API int sticker_data_create(sticker_data_h *data_handle) { CHECK_STICKER_FEATURE(); @@ -317,7 +273,7 @@ EXPORT_API int sticker_data_get_handle(const char* uri, sticker_data_h *data_han cleanup: if (handle) - _free_sticker_data(handle); + sticker_data_destroy(handle); if (gdbus_connection) { int ret_err = sticker_dbus_shutdown(gdbus_connection, &server_watcher_id, &server_monitor_id, &monitor_id, STICKER_CLIENT_LIB_PROVIDER); diff --git a/client/sticker_dbus.c b/client/src/sticker_dbus.c similarity index 97% rename from client/sticker_dbus.c rename to client/src/sticker_dbus.c index 9189de2..985f7e2 100644 --- a/client/sticker_dbus.c +++ b/client/src/sticker_dbus.c @@ -133,47 +133,6 @@ static void _get_sticker_info_from_gvariant(GVariantIter *info_iter, GVariantIte g_variant_iter_free(keyword_iter); } -static void _free_sticker_data(sticker_data_h sticker_data) -{ - if (sticker_data->app_id) { - free(sticker_data->app_id); - sticker_data->app_id = NULL; - } - - if (sticker_data->uri) { - free(sticker_data->uri); - sticker_data->uri = NULL; - } - - if (sticker_data->thumbnail) { - free(sticker_data->thumbnail); - sticker_data->thumbnail = NULL; - } - - if (sticker_data->keyword) { - g_list_free_full(sticker_data->keyword, free); - sticker_data->keyword = NULL; - } - - if (sticker_data->group) { - free(sticker_data->group); - sticker_data->group = NULL; - } - - if (sticker_data->description) { - free(sticker_data->description); - sticker_data->description = NULL; - } - - if (sticker_data->date) { - free(sticker_data->date); - sticker_data->date = NULL; - } - - free(sticker_data); - sticker_data = NULL; -} - static void _call_insert_finished_cb(sticker_provider_h provider_handle, GVariant *body) { int ret; @@ -196,6 +155,7 @@ static void _handle_sticker_consumer_cb(GDBusConnection *connection, gpointer user_data) { LOGD("own_name : %s, signal_name : %s", g_dbus_connection_get_unique_name(connection), signal_name); + sticker_consumer_h consumer_handle = (sticker_consumer_h)user_data; if (consumer_handle == NULL) { @@ -226,7 +186,7 @@ static void _handle_sticker_consumer_cb(GDBusConnection *connection, if (keyword_iter) g_variant_iter_free(keyword_iter); - _free_sticker_data(sticker_data); + sticker_data_destroy(sticker_data); } } } @@ -857,7 +817,7 @@ int sticker_dbus_update_sticker_info(GDBusConnection *gdbus_connection, sticker_ ret = _send_sync_message(gdbus_connection, g_variant_new("(i)", sticker_data->sticker_info_id), &reply, "send_update_event"); cleanup: - _free_sticker_data(origin_data); + sticker_data_destroy(origin_data); if (reply_body) g_variant_unref(reply_body); diff --git a/client/sticker_dbus.h b/client/src/sticker_dbus.h similarity index 100% rename from client/sticker_dbus.h rename to client/src/sticker_dbus.h diff --git a/provider/sticker_provider.c b/client/src/sticker_provider.c similarity index 92% rename from provider/sticker_provider.c rename to client/src/sticker_provider.c index bbac999..18181c9 100644 --- a/provider/sticker_provider.c +++ b/client/src/sticker_provider.c @@ -30,47 +30,6 @@ #endif #define LOG_TAG "STICKER_PROVIDER" -static void _free_sticker_data(sticker_data_h sticker_data) -{ - if (sticker_data->app_id) { - free(sticker_data->app_id); - sticker_data->app_id = NULL; - } - - if (sticker_data->uri) { - free(sticker_data->uri); - sticker_data->uri = NULL; - } - - if (sticker_data->thumbnail) { - free(sticker_data->thumbnail); - sticker_data->thumbnail = NULL; - } - - if (sticker_data->keyword) { - g_list_free_full(sticker_data->keyword, free); - sticker_data->keyword = NULL; - } - - if (sticker_data->group) { - free(sticker_data->group); - sticker_data->group = NULL; - } - - if (sticker_data->description) { - free(sticker_data->description); - sticker_data->description = NULL; - } - - if (sticker_data->date) { - free(sticker_data->date); - sticker_data->date = NULL; - } - - free(sticker_data); - sticker_data = NULL; -} - EXPORT_API int sticker_provider_create(sticker_provider_h *provider_handle) { CHECK_STICKER_FEATURE(); @@ -371,9 +330,9 @@ EXPORT_API int sticker_provider_data_foreach_all(sticker_provider_h provider_han if (ret == STICKER_ERROR_NONE) { sticker_count++; callback(sticker_data, user_data); - _free_sticker_data(sticker_data); + sticker_data_destroy(sticker_data); } else { - _free_sticker_data(sticker_data); + sticker_data_destroy(sticker_data); goto cleanup; } } diff --git a/consumer/CMakeLists.txt b/consumer/CMakeLists.txt deleted file mode 100644 index f98cc42..0000000 --- a/consumer/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -SET(SRCS - sticker_consumer.c - ../client/sticker_data.c - ../client/sticker_dbus.c -) - -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}) -INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/include) - -FOREACH(flag ${pkgs_CFLAGS}) - SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") -ENDFOREACH(flag) -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall") - -## Add definitions ## -ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"") - -## sticker consumer library ## -ADD_LIBRARY(${PROJECT_NAME}-consumer SHARED ${SRCS}) -TARGET_LINK_LIBRARIES(${PROJECT_NAME}-consumer ${pkgs_LDFLAGS}) - -## Install library files ## -INSTALL(TARGETS ${PROJECT_NAME}-consumer DESTINATION ${LIBDIR} COMPONENT RuntimeLibraries) diff --git a/provider/CMakeLists.txt b/provider/CMakeLists.txt deleted file mode 100644 index ea3c48a..0000000 --- a/provider/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -SET(SRCS - sticker_provider.c - ../client/sticker_data.c - ../client/sticker_dbus.c -) - -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}) -INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/include) - -FOREACH(flag ${pkgs_CFLAGS}) - SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") -ENDFOREACH(flag) -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall") - -## Add definitions ## -ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"") - -## sticker provider library ## -ADD_LIBRARY(${PROJECT_NAME}-provider SHARED ${SRCS}) -TARGET_LINK_LIBRARIES(${PROJECT_NAME}-provider ${pkgs_LDFLAGS}) - -## Install library files ## -INSTALL(TARGETS ${PROJECT_NAME}-provider DESTINATION ${LIBDIR} COMPONENT RuntimeLibraries) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index f28995b..032be6a 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -17,7 +17,7 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/mock) AUX_SOURCE_DIRECTORY(src SOURCES) AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../common STICKER_COMMON_SOURCES) -AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../client STICKER_CLIENT_SOURCES) +AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../client/src STICKER_CLIENT_SOURCES) AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../consumer STICKER_CONSUMER_SOURCES) AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../provider STICKER_PROVIDER_SOURCES) AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/mock MOCK_SRCS) -- 2.7.4 From 63cd70ffc353c86702a1f3b79edda3f292f00867 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Mon, 7 Dec 2020 15:08:16 +0900 Subject: [PATCH 04/16] Remove unused code Change-Id: Ic4a1660edf15884c97906086187fef9003827019 Signed-off-by: Jihoon Kim --- client/src/sticker_dbus.c | 67 +------------------------------------- server/stickerd_data_manager.c | 74 +----------------------------------------- 2 files changed, 2 insertions(+), 139 deletions(-) diff --git a/client/src/sticker_dbus.c b/client/src/sticker_dbus.c index 985f7e2..a9f5635 100644 --- a/client/src/sticker_dbus.c +++ b/client/src/sticker_dbus.c @@ -190,51 +190,6 @@ static void _handle_sticker_consumer_cb(GDBusConnection *connection, } } } - - #if 0 // Receive the sticker information by asynchronous communication. - if (g_strcmp0(signal_name, "send_group_list") == 0) { - if (consumer_handle->group_foreach_cb != NULL) - _call_sticker_list_cb(consumer_handle, parameters, signal_name); - return; - } else if (g_strcmp0(signal_name, "send_keyword_list") == 0) { - if (consumer_handle->keyword_foreach_cb != NULL) - _call_sticker_list_cb(consumer_handle, parameters, signal_name); - return; - } - - sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s)); - - if (!sticker_data) { - LOGE("failed to allocate memory"); - return; - } - - _get_sticker_info_from_gvariant(parameters, sticker_data); - - if (g_strcmp0(signal_name, "send_all_sticker_info") == 0) { - if (consumer_handle->data_foreach_cb != NULL) - consumer_handle->data_foreach_cb(sticker_data, consumer_handle->data_foreach_cb_user_data); - else - LOGW("No registered callback function"); - } else if (g_strcmp0(signal_name, "send_sticker_info_by_keyword") == 0) { - if (consumer_handle->data_foreach_by_keyword_cb != NULL) - consumer_handle->data_foreach_by_keyword_cb(sticker_data, consumer_handle->data_foreach_by_keyword_cb_user_data); - else - LOGW("No registered callback function"); - } else if (g_strcmp0(signal_name, "send_sticker_info_by_group") == 0) { - if (consumer_handle->data_foreach_by_group_cb != NULL) - consumer_handle->data_foreach_by_group_cb(sticker_data, consumer_handle->data_foreach_by_group_cb_user_data); - else - LOGW("No registered callback function"); - } else if (g_strcmp0(signal_name, "send_sticker_info_by_type") == 0) { - if (consumer_handle->data_foreach_by_type_cb != NULL) - consumer_handle->data_foreach_by_type_cb(sticker_data, consumer_handle->data_foreach_by_type_cb_user_data); - else - LOGW("No registered callback function"); - } - - _free_sticker_data(sticker_data); - #endif } //LCOV_EXCL_STOP @@ -263,26 +218,6 @@ static void _handle_sticker_provider_cb(GDBusConnection *connection, if (provider_handle->insert_finished_cb != NULL) _call_insert_finished_cb(provider_handle, parameters); } - - #if 0 // Receive the sticker information by asynchronous communication. - sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s)); - - if (!sticker_data) { - LOGE("failed to allocate memory"); - return; - } - - _get_sticker_info_from_gvariant(parameters, sticker_data); - - if (g_strcmp0(signal_name, "send_sticker_info_by_appid") == 0) { - if (provider_handle->data_foreach_cb != NULL) - provider_handle->data_foreach_cb(sticker_data, provider_handle->data_foreach_cb_user_data); - else - LOGW("No registered callback function"); - } - - _free_sticker_data(sticker_data); - #endif } static int _dbus_signal_init(GDBusConnection *gdbus_connection, int *monitor_id, CLIENT_LIB lib, void *data) @@ -1209,4 +1144,4 @@ int sticker_dbus_get_sticker_info_by_uri(GDBusConnection *gdbus_connection, stic g_object_unref(reply); return ret; -} \ No newline at end of file +} diff --git a/server/stickerd_data_manager.c b/server/stickerd_data_manager.c index dd506c7..d19dbdd 100644 --- a/server/stickerd_data_manager.c +++ b/server/stickerd_data_manager.c @@ -1335,78 +1335,6 @@ int stickerd_get_sticker_count(GVariant *parameters, GVariant **reply_body) return ret; } -#if 0 -// Send the sticker information by asynchronous communication. -static int send_sticker_info_async(int record_id, sticker_info_db_type type, const char *sender) -{ - int ret; - char *cmd = NULL; - - sticker_info_db *sticker_info = (sticker_info_db *)calloc(1, sizeof(sticker_info_db)); - - if (!sticker_info) - return STICKERD_SERVER_ERROR_OUT_OF_MEMORY; - - ret = stickerd_db_get_sticker_info_by_record_id(record_id, sticker_info); - if (ret != STICKERD_SERVER_ERROR_NONE) { - LOGE("Failed to get sticker info"); - free(sticker_info); - return STICKERD_SERVER_ERROR_OPERATION_FAILED; - } - - switch (type) { - case STICKER_DB_STICKER_ALL: - cmd = "send_all_sticker_info"; - break; - case STICKER_DB_STICKER_APPID: - cmd = "send_sticker_info_by_appid"; - break; - case STICKER_DB_STICKER_TYPE: - cmd = "send_sticker_info_by_type"; - break; - case STICKER_DB_STICKER_GROUP: - cmd = "send_sticker_info_by_group"; - break; - case STICKER_DB_STICKER_KEYWORD: - cmd = "send_sticker_info_by_keyword"; - break; - default: - cmd = ""; - break; - } - - GVariantBuilder *info_builder; - GVariantBuilder *keyword_builder; - - info_builder = g_variant_builder_new(G_VARIANT_TYPE("a{iv}")); - g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_INFO_ID, g_variant_new_int32(record_id)); - g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_APP_ID, g_variant_new_string((const gchar *)sticker_info->app_id)); - g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_URI_TYPE, g_variant_new_int32(sticker_info->type)); - g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_URI, g_variant_new_string((const gchar *)sticker_info->uri)); - g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_THUMBNAIL, g_variant_new_string((const gchar *)sticker_info->thumbnail)); - g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_DESCRIPTION, g_variant_new_string((const gchar *)sticker_info->description)); - g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_GROUP, g_variant_new_string((const gchar *)sticker_info->group)); - g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_DATE, g_variant_new_string((const gchar *)sticker_info->date)); - - keyword_builder = g_variant_builder_new(G_VARIANT_TYPE("a(s)")); - g_list_foreach(sticker_info->keyword, (GFunc) _set_keyword_builder, keyword_builder); - - GVariant *body = g_variant_new("(a{iv}a(s))", info_builder, keyword_builder); - g_variant_builder_unref(info_builder); - g_variant_builder_unref(keyword_builder); - - ret = stickerd_send_dbus_message(body, sender, cmd); - if (ret != STICKERD_SERVER_ERROR_NONE) { - LOGE("Failed to send sticker info to client"); - free(sticker_info); - return STICKERD_SERVER_ERROR_OPERATION_FAILED; - } - - free(sticker_info); - return ret; -} -#endif - static void _set_id_builder(char *id, GVariantBuilder *id_builder) { if (!id) { @@ -1843,4 +1771,4 @@ cleanup: } return ret; -} \ No newline at end of file +} -- 2.7.4 From ea00e8e988443d6e5c9d76031613429e8152dc17 Mon Sep 17 00:00:00 2001 From: InHong Han Date: Tue, 15 Dec 2020 19:10:58 +0900 Subject: [PATCH 05/16] Add a build option for enabling or disabling unittest --define "_ctest_enable true" Change-Id: I113abf03964403ccdd2a4643edb11d8c12d40103 --- CMakeLists.txt | 10 +++++++--- packaging/capi-ui-sticker.spec | 15 ++++++++++++++- tests/CMakeLists.txt | 6 ------ 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2c8aa49..916ce15 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,11 @@ SET(PREFIX ${CMAKE_INSTALL_PREFIX}) SET(EXEC_PREFIX "${PREFIX}") SET(VERSION 0.2.56) +IF("${TEST_ENABLE}" STREQUAL "true") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST_ENABLE=${TEST_ENABLE}") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTEST_ENABLE=${TEST_ENABLE}") +ENDIF() + ADD_DEFINITIONS("-Werror") ## Include common directory ## @@ -48,14 +53,13 @@ ADD_SUBDIRECTORY(receiver) ENDIF() ## Test -IF(NOT DEFINED MINIMUM_BUILD) +IF("${TEST_ENABLE}" STREQUAL "true") ENABLE_TESTING() SET(UTC_STICKER sticker_unittests) ADD_TEST(NAME ${UTC_STICKER} COMMAND ${UTC_STICKER} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests) - ADD_SUBDIRECTORY(tests) -ENDIF(NOT DEFINED MINIMUM_BUILD) +ENDIF() ## config ## INSTALL(FILES ${CMAKE_SOURCE_DIR}/capi-ui-sticker.info DESTINATION ${TZ_SYS_RO_SHARE}/parser-plugins) diff --git a/packaging/capi-ui-sticker.spec b/packaging/capi-ui-sticker.spec index 1acfa91..c1203a1 100644 --- a/packaging/capi-ui-sticker.spec +++ b/packaging/capi-ui-sticker.spec @@ -85,6 +85,7 @@ Group: Graphics & UI Framework/Input Sticker client library and daemon (gcov) %endif +%if %{defined _ctest_enable} %package unittests Summary: Sticker tests Group: Development/Libraries @@ -92,6 +93,7 @@ Requires: %{name} = %{version}-%{release} %description unittests GTest for sticker +%endif %prep %setup -q -n %{name}-%{version} @@ -115,7 +117,13 @@ export FFLAGS+=" -DTIZEN_DEBUG_ENABLE -fvisibility=hidden" %endif -DCMAKE_INSTALL_PREFIX=/usr -DLIBDIR=%{_libdir} -DBINDIR=%{_bindir} -DINCLUDEDIR=%{_includedir} \ -DTZ_SYS_RO_SHARE=%TZ_SYS_RO_SHARE -DTZ_SYS_BIN=%TZ_SYS_BIN -DTZ_USER_SHARE=%TZ_USER_SHARE \ - -DTZ_SYS_RO_APP=%TZ_SYS_RO_APP -DTZ_SYS_RO_PACKAGES=%TZ_SYS_RO_PACKAGES + -DTZ_SYS_RO_APP=%TZ_SYS_RO_APP -DTZ_SYS_RO_PACKAGES=%TZ_SYS_RO_PACKAGES \ +%if %{defined _ctest_enable} + -DTEST_ENABLE="%{_ctest_enable}" \ +%else + -DTEST_ENABLE="false" \ +%endif + make %{?jobs:-j%jobs} %if 0%{?gcov:1} @@ -152,7 +160,10 @@ tar xf %{name}-gcov.tar -C %{buildroot}%{_datadir}/gcov/obj %endif %check +%if "%{_ctest_enable}" == "true" ctest --output-on-failure %{?_smp_mflags} +%endif + %if 0%{?gcov:1} lcov -c --ignore-errors graph --no-external -q -d . -o gcov.info genhtml gcov.info @@ -203,8 +214,10 @@ chsmack -a "User::App::Shared" /opt/usr/share/sticker-data %{TZ_SYS_RO_APP}/%{_companion_app_name}/* %endif +%if %{defined _ctest_enable} %files unittests %{_bindir}/* +%endif %if 0%{?gcov:1} %files gcov diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 032be6a..eea11f2 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -16,19 +16,13 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../include) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/mock) AUX_SOURCE_DIRECTORY(src SOURCES) -AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../common STICKER_COMMON_SOURCES) AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../client/src STICKER_CLIENT_SOURCES) -AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../consumer STICKER_CONSUMER_SOURCES) -AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../provider STICKER_PROVIDER_SOURCES) AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/mock MOCK_SRCS) ADD_DEFINITIONS("-DFULLVER=\"${FULLVER}\"") ADD_EXECUTABLE(${UTC_STICKER} - ${STICKER_COMMON_SOURCES} ${STICKER_CLIENT_SOURCES} - ${STICKER_CONSUMER_SOURCES} - ${STICKER_PROVIDER_SOURCES} ${MOCK_SRCS} ${SOURCES} ) -- 2.7.4 From 2e446c6cd8be3a4954230168cb3360a0df4aa6ee Mon Sep 17 00:00:00 2001 From: InHong Han Date: Tue, 15 Dec 2020 19:15:17 +0900 Subject: [PATCH 06/16] Update package version to 0.1.67 Change-Id: I208a926f8e0e8e59b788a3118451b740a7bb1b60 --- packaging/capi-ui-sticker.spec | 2 +- receiver/tizen-manifest.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/capi-ui-sticker.spec b/packaging/capi-ui-sticker.spec index c1203a1..c4d8fe9 100644 --- a/packaging/capi-ui-sticker.spec +++ b/packaging/capi-ui-sticker.spec @@ -1,6 +1,6 @@ Name: capi-ui-sticker Summary: Sticker client library and daemon -Version: 0.1.66 +Version: 0.1.67 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 diff --git a/receiver/tizen-manifest.xml b/receiver/tizen-manifest.xml index 38098cf..55240db 100644 --- a/receiver/tizen-manifest.xml +++ b/receiver/tizen-manifest.xml @@ -1,5 +1,5 @@ - + -- 2.7.4 From 2c2435568b5e3ecf70f18b84b96a667509150a5e Mon Sep 17 00:00:00 2001 From: InHong Han Date: Fri, 11 Dec 2020 14:08:31 +0900 Subject: [PATCH 07/16] Reorganize directory structure Change-Id: I7f66fb73b28a7172b1284b1abe2ecb9723bdc563 --- CMakeLists.txt | 13 +- client/CMakeLists.txt | 33 ++++ {consumer => client/inc}/sticker_consumer_main.h | 0 client/{ => inc}/sticker_data_main.h | 0 client/{ => inc}/sticker_defs.h | 0 {provider => client/inc}/sticker_provider_main.h | 0 {consumer => client/src}/sticker_consumer.c | 197 +++++------------------ client/{ => src}/sticker_data.c | 46 +----- client/{ => src}/sticker_dbus.c | 46 +----- client/{ => src}/sticker_dbus.h | 0 {provider => client/src}/sticker_provider.c | 45 +----- consumer/CMakeLists.txt | 23 --- provider/CMakeLists.txt | 23 --- tests/CMakeLists.txt | 2 +- 14 files changed, 80 insertions(+), 348 deletions(-) create mode 100644 client/CMakeLists.txt rename {consumer => client/inc}/sticker_consumer_main.h (100%) rename client/{ => inc}/sticker_data_main.h (100%) rename client/{ => inc}/sticker_defs.h (100%) rename {provider => client/inc}/sticker_provider_main.h (100%) rename {consumer => client/src}/sticker_consumer.c (71%) rename client/{ => src}/sticker_data.c (93%) rename client/{ => src}/sticker_dbus.c (97%) rename client/{ => src}/sticker_dbus.h (100%) rename {provider => client/src}/sticker_provider.c (92%) delete mode 100644 consumer/CMakeLists.txt delete mode 100644 provider/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index b36454f..2c8aa49 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,9 +9,7 @@ ADD_DEFINITIONS("-Werror") ## Include common directory ## INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include") -INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/client") -INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/provider") -INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/consumer") +INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/client/inc") ## Dependent packages ## INCLUDE(FindPkgConfig) @@ -35,15 +33,12 @@ pkg_check_modules(pkgs REQUIRED ## API ## ADD_SUBDIRECTORY(include) +## Sticker client ## +ADD_SUBDIRECTORY(client) + ## Sticker server ## ADD_SUBDIRECTORY(server) -## Sticker provider library ## -ADD_SUBDIRECTORY(provider) - -## Sticker consumer library ## -ADD_SUBDIRECTORY(consumer) - ## Sticker parser ## ADD_SUBDIRECTORY(sticker-parser) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt new file mode 100644 index 0000000..be848fc --- /dev/null +++ b/client/CMakeLists.txt @@ -0,0 +1,33 @@ +SET(CONSUMER_SRCS + src/sticker_consumer.c + src/sticker_data.c + src/sticker_dbus.c +) + +SET(PROVIDER_SRCS + src/sticker_provider.c + src/sticker_data.c + src/sticker_dbus.c +) + +INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/client/inc) + +FOREACH(flag ${pkgs_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall") + +## Add definitions ## +ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"") + +## sticker consumer library ## +ADD_LIBRARY(${PROJECT_NAME}-consumer SHARED ${CONSUMER_SRCS}) +TARGET_LINK_LIBRARIES(${PROJECT_NAME}-consumer ${pkgs_LDFLAGS}) + +## sticker provider library ## +ADD_LIBRARY(${PROJECT_NAME}-provider SHARED ${PROVIDER_SRCS}) +TARGET_LINK_LIBRARIES(${PROJECT_NAME}-provider ${pkgs_LDFLAGS}) + +## Install library files ## +INSTALL(TARGETS ${PROJECT_NAME}-consumer DESTINATION ${LIBDIR} COMPONENT RuntimeLibraries) +INSTALL(TARGETS ${PROJECT_NAME}-provider DESTINATION ${LIBDIR} COMPONENT RuntimeLibraries) \ No newline at end of file diff --git a/consumer/sticker_consumer_main.h b/client/inc/sticker_consumer_main.h similarity index 100% rename from consumer/sticker_consumer_main.h rename to client/inc/sticker_consumer_main.h diff --git a/client/sticker_data_main.h b/client/inc/sticker_data_main.h similarity index 100% rename from client/sticker_data_main.h rename to client/inc/sticker_data_main.h diff --git a/client/sticker_defs.h b/client/inc/sticker_defs.h similarity index 100% rename from client/sticker_defs.h rename to client/inc/sticker_defs.h diff --git a/provider/sticker_provider_main.h b/client/inc/sticker_provider_main.h similarity index 100% rename from provider/sticker_provider_main.h rename to client/inc/sticker_provider_main.h diff --git a/consumer/sticker_consumer.c b/client/src/sticker_consumer.c similarity index 71% rename from consumer/sticker_consumer.c rename to client/src/sticker_consumer.c index 4f51fb5..39297bf 100644 --- a/consumer/sticker_consumer.c +++ b/client/src/sticker_consumer.c @@ -33,47 +33,6 @@ static cynara *p_cynara = NULL; -static void _free_sticker_data(sticker_data_h sticker_data) -{ - if (sticker_data->app_id) { - free(sticker_data->app_id); - sticker_data->app_id = NULL; - } - - if (sticker_data->uri) { - free(sticker_data->uri); - sticker_data->uri = NULL; - } - - if (sticker_data->thumbnail) { - free(sticker_data->thumbnail); - sticker_data->thumbnail = NULL; - } - - if (sticker_data->keyword) { - g_list_free_full(sticker_data->keyword, free); - sticker_data->keyword = NULL; - } - - if (sticker_data->group) { - free(sticker_data->group); - sticker_data->group = NULL; - } - - if (sticker_data->description) { - free(sticker_data->description); - sticker_data->description = NULL; - } - - if (sticker_data->date) { - free(sticker_data->date); - sticker_data->date = NULL; - } - - free(sticker_data); - sticker_data = NULL; -} - static int _cynara_initialize() { int ret = cynara_initialize(&p_cynara, NULL); @@ -143,6 +102,30 @@ static int _sticker_check_privilege() { return ret; } +static int _call_sticker_data_foreach_cb(sticker_consumer_h consumer_handle, GVariantIter *id_iter, sticker_consumer_data_foreach_cb callback, void *user_data) +{ + int ret; + int info_id; + int count = 0; + + if (!id_iter) return count; + + while (g_variant_iter_loop (id_iter, "(i)", &info_id)) { + sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s)); + if (!sticker_data) + continue; + + ret = sticker_dbus_get_sticker_info_by_record_id(consumer_handle->gdbus_connection, sticker_data, info_id); + if (ret == STICKER_ERROR_NONE) { + count++; + callback(sticker_data, user_data); + } + sticker_data_destroy(sticker_data); + } + + return count; +} + EXPORT_API int sticker_consumer_create(sticker_consumer_h *consumer_handle) { CHECK_STICKER_FEATURE(); @@ -220,7 +203,6 @@ EXPORT_API int sticker_consumer_data_foreach_all(sticker_consumer_h consumer_han CHECK_STICKER_FEATURE(); int ret; - int info_id; int sticker_count = 0; GVariantIter *id_iter = NULL; @@ -234,25 +216,8 @@ EXPORT_API int sticker_consumer_data_foreach_all(sticker_consumer_h consumer_han goto cleanup; } - if (id_iter) { - while (g_variant_iter_loop (id_iter, "(i)", &info_id)) { - sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s)); - if (!sticker_data) { - ret = STICKER_ERROR_OUT_OF_MEMORY; - goto cleanup; - } - - ret = sticker_dbus_get_sticker_info_by_record_id(consumer_handle->gdbus_connection, sticker_data, info_id); - if (ret == STICKER_ERROR_NONE) { - sticker_count++; - callback(sticker_data, user_data); - _free_sticker_data(sticker_data); - } else { - _free_sticker_data(sticker_data); - goto cleanup; - } - } - } + if (id_iter) + sticker_count = _call_sticker_data_foreach_cb(consumer_handle, id_iter, callback, user_data); *result = sticker_count; @@ -268,7 +233,6 @@ EXPORT_API int sticker_consumer_data_foreach_by_keyword(sticker_consumer_h consu CHECK_STICKER_FEATURE(); int ret; - int info_id; int sticker_count = 0; GVariantIter *id_iter = NULL; @@ -282,25 +246,8 @@ EXPORT_API int sticker_consumer_data_foreach_by_keyword(sticker_consumer_h consu goto cleanup; } - if (id_iter) { - while (g_variant_iter_loop (id_iter, "(i)", &info_id)) { - sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s)); - if (!sticker_data) { - ret = STICKER_ERROR_OUT_OF_MEMORY; - goto cleanup; - } - - ret = sticker_dbus_get_sticker_info_by_record_id(consumer_handle->gdbus_connection, sticker_data, info_id); - if (ret == STICKER_ERROR_NONE) { - sticker_count++; - callback(sticker_data, user_data); - _free_sticker_data(sticker_data); - } else { - _free_sticker_data(sticker_data); - goto cleanup; - } - } - } + if (id_iter) + sticker_count = _call_sticker_data_foreach_cb(consumer_handle, id_iter, callback, user_data); *result = sticker_count; @@ -316,7 +263,6 @@ EXPORT_API int sticker_consumer_data_foreach_by_group(sticker_consumer_h consume CHECK_STICKER_FEATURE(); int ret; - int info_id; int sticker_count = 0; GVariantIter *id_iter = NULL; @@ -330,25 +276,8 @@ EXPORT_API int sticker_consumer_data_foreach_by_group(sticker_consumer_h consume goto cleanup; } - if (id_iter) { - while (g_variant_iter_loop (id_iter, "(i)", &info_id)) { - sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s)); - if (!sticker_data) { - ret = STICKER_ERROR_OUT_OF_MEMORY; - goto cleanup; - } - - ret = sticker_dbus_get_sticker_info_by_record_id(consumer_handle->gdbus_connection, sticker_data, info_id); - if (ret == STICKER_ERROR_NONE) { - sticker_count++; - callback(sticker_data, user_data); - _free_sticker_data(sticker_data); - } else { - _free_sticker_data(sticker_data); - goto cleanup; - } - } - } + if (id_iter) + sticker_count = _call_sticker_data_foreach_cb(consumer_handle, id_iter, callback, user_data); *result = sticker_count; @@ -364,7 +293,6 @@ EXPORT_API int sticker_consumer_data_foreach_by_type(sticker_consumer_h consumer CHECK_STICKER_FEATURE(); int ret; - int info_id; int sticker_count = 0; GVariantIter *id_iter = NULL; @@ -378,25 +306,8 @@ EXPORT_API int sticker_consumer_data_foreach_by_type(sticker_consumer_h consumer goto cleanup; } - if (id_iter) { - while (g_variant_iter_loop (id_iter, "(i)", &info_id)) { - sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s)); - if (!sticker_data) { - ret = STICKER_ERROR_OUT_OF_MEMORY; - goto cleanup; - } - - ret = sticker_dbus_get_sticker_info_by_record_id(consumer_handle->gdbus_connection, sticker_data, info_id); - if (ret == STICKER_ERROR_NONE) { - sticker_count++; - callback(sticker_data, user_data); - _free_sticker_data(sticker_data); - } else { - _free_sticker_data(sticker_data); - goto cleanup; - } - } - } + if (id_iter) + sticker_count = _call_sticker_data_foreach_cb(consumer_handle, id_iter, callback, user_data); *result = sticker_count; @@ -468,7 +379,6 @@ EXPORT_API int sticker_consumer_data_foreach_by_display_type(sticker_consumer_h CHECK_STICKER_FEATURE(); int ret; - int info_id; int sticker_count = 0; GVariantIter *id_iter = NULL; @@ -482,25 +392,8 @@ EXPORT_API int sticker_consumer_data_foreach_by_display_type(sticker_consumer_h goto cleanup; } - if (id_iter) { - while (g_variant_iter_loop (id_iter, "(i)", &info_id)) { - sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s)); - if (!sticker_data) { - ret = STICKER_ERROR_OUT_OF_MEMORY; - goto cleanup; - } - - ret = sticker_dbus_get_sticker_info_by_record_id(consumer_handle->gdbus_connection, sticker_data, info_id); - if (ret == STICKER_ERROR_NONE) { - sticker_count++; - callback(sticker_data, user_data); - _free_sticker_data(sticker_data); - } else { - _free_sticker_data(sticker_data); - goto cleanup; - } - } - } + if (id_iter) + sticker_count = _call_sticker_data_foreach_cb(consumer_handle, id_iter, callback, user_data); *result = sticker_count; @@ -562,7 +455,6 @@ EXPORT_API int sticker_consumer_get_recent_data_list(sticker_consumer_h consumer CHECK_STICKER_FEATURE(); int ret; - int info_id; int sticker_count = 0; GVariantIter *id_iter = NULL; @@ -576,25 +468,8 @@ EXPORT_API int sticker_consumer_get_recent_data_list(sticker_consumer_h consumer goto cleanup; } - if (id_iter) { - while (g_variant_iter_loop (id_iter, "(i)", &info_id)) { - sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s)); - if (!sticker_data) { - ret = STICKER_ERROR_OUT_OF_MEMORY; - goto cleanup; - } - - ret = sticker_dbus_get_sticker_info_by_record_id(consumer_handle->gdbus_connection, sticker_data, info_id); - if (ret == STICKER_ERROR_NONE) { - sticker_count++; - callback(sticker_data, user_data); - _free_sticker_data(sticker_data); - } else { - _free_sticker_data(sticker_data); - goto cleanup; - } - } - } + if (id_iter) + sticker_count = _call_sticker_data_foreach_cb(consumer_handle, id_iter, callback, user_data); *result = sticker_count; diff --git a/client/sticker_data.c b/client/src/sticker_data.c similarity index 93% rename from client/sticker_data.c rename to client/src/sticker_data.c index c0a5869..85d407e 100644 --- a/client/sticker_data.c +++ b/client/src/sticker_data.c @@ -93,50 +93,6 @@ cleanup: return NULL; } -static void _free_sticker_data(sticker_data_h sticker_data) -{ - if (!sticker_data) - return; - - if (sticker_data->app_id) { - free(sticker_data->app_id); - sticker_data->app_id = NULL; - } - - if (sticker_data->uri) { - free(sticker_data->uri); - sticker_data->uri = NULL; - } - - if (sticker_data->thumbnail) { - free(sticker_data->thumbnail); - sticker_data->thumbnail = NULL; - } - - if (sticker_data->keyword) { - g_list_free_full(sticker_data->keyword, free); - sticker_data->keyword = NULL; - } - - if (sticker_data->group) { - free(sticker_data->group); - sticker_data->group = NULL; - } - - if (sticker_data->description) { - free(sticker_data->description); - sticker_data->description = NULL; - } - - if (sticker_data->date) { - free(sticker_data->date); - sticker_data->date = NULL; - } - - free(sticker_data); - sticker_data = NULL; -} - EXPORT_API int sticker_data_create(sticker_data_h *data_handle) { CHECK_STICKER_FEATURE(); @@ -317,7 +273,7 @@ EXPORT_API int sticker_data_get_handle(const char* uri, sticker_data_h *data_han cleanup: if (handle) - _free_sticker_data(handle); + sticker_data_destroy(handle); if (gdbus_connection) { int ret_err = sticker_dbus_shutdown(gdbus_connection, &server_watcher_id, &server_monitor_id, &monitor_id, STICKER_CLIENT_LIB_PROVIDER); diff --git a/client/sticker_dbus.c b/client/src/sticker_dbus.c similarity index 97% rename from client/sticker_dbus.c rename to client/src/sticker_dbus.c index af01532..a9f5635 100644 --- a/client/sticker_dbus.c +++ b/client/src/sticker_dbus.c @@ -133,47 +133,6 @@ static void _get_sticker_info_from_gvariant(GVariantIter *info_iter, GVariantIte g_variant_iter_free(keyword_iter); } -static void _free_sticker_data(sticker_data_h sticker_data) -{ - if (sticker_data->app_id) { - free(sticker_data->app_id); - sticker_data->app_id = NULL; - } - - if (sticker_data->uri) { - free(sticker_data->uri); - sticker_data->uri = NULL; - } - - if (sticker_data->thumbnail) { - free(sticker_data->thumbnail); - sticker_data->thumbnail = NULL; - } - - if (sticker_data->keyword) { - g_list_free_full(sticker_data->keyword, free); - sticker_data->keyword = NULL; - } - - if (sticker_data->group) { - free(sticker_data->group); - sticker_data->group = NULL; - } - - if (sticker_data->description) { - free(sticker_data->description); - sticker_data->description = NULL; - } - - if (sticker_data->date) { - free(sticker_data->date); - sticker_data->date = NULL; - } - - free(sticker_data); - sticker_data = NULL; -} - static void _call_insert_finished_cb(sticker_provider_h provider_handle, GVariant *body) { int ret; @@ -196,6 +155,7 @@ static void _handle_sticker_consumer_cb(GDBusConnection *connection, gpointer user_data) { LOGD("own_name : %s, signal_name : %s", g_dbus_connection_get_unique_name(connection), signal_name); + sticker_consumer_h consumer_handle = (sticker_consumer_h)user_data; if (consumer_handle == NULL) { @@ -226,7 +186,7 @@ static void _handle_sticker_consumer_cb(GDBusConnection *connection, if (keyword_iter) g_variant_iter_free(keyword_iter); - _free_sticker_data(sticker_data); + sticker_data_destroy(sticker_data); } } } @@ -792,7 +752,7 @@ int sticker_dbus_update_sticker_info(GDBusConnection *gdbus_connection, sticker_ ret = _send_sync_message(gdbus_connection, g_variant_new("(i)", sticker_data->sticker_info_id), &reply, "send_update_event"); cleanup: - _free_sticker_data(origin_data); + sticker_data_destroy(origin_data); if (reply_body) g_variant_unref(reply_body); diff --git a/client/sticker_dbus.h b/client/src/sticker_dbus.h similarity index 100% rename from client/sticker_dbus.h rename to client/src/sticker_dbus.h diff --git a/provider/sticker_provider.c b/client/src/sticker_provider.c similarity index 92% rename from provider/sticker_provider.c rename to client/src/sticker_provider.c index bbac999..18181c9 100644 --- a/provider/sticker_provider.c +++ b/client/src/sticker_provider.c @@ -30,47 +30,6 @@ #endif #define LOG_TAG "STICKER_PROVIDER" -static void _free_sticker_data(sticker_data_h sticker_data) -{ - if (sticker_data->app_id) { - free(sticker_data->app_id); - sticker_data->app_id = NULL; - } - - if (sticker_data->uri) { - free(sticker_data->uri); - sticker_data->uri = NULL; - } - - if (sticker_data->thumbnail) { - free(sticker_data->thumbnail); - sticker_data->thumbnail = NULL; - } - - if (sticker_data->keyword) { - g_list_free_full(sticker_data->keyword, free); - sticker_data->keyword = NULL; - } - - if (sticker_data->group) { - free(sticker_data->group); - sticker_data->group = NULL; - } - - if (sticker_data->description) { - free(sticker_data->description); - sticker_data->description = NULL; - } - - if (sticker_data->date) { - free(sticker_data->date); - sticker_data->date = NULL; - } - - free(sticker_data); - sticker_data = NULL; -} - EXPORT_API int sticker_provider_create(sticker_provider_h *provider_handle) { CHECK_STICKER_FEATURE(); @@ -371,9 +330,9 @@ EXPORT_API int sticker_provider_data_foreach_all(sticker_provider_h provider_han if (ret == STICKER_ERROR_NONE) { sticker_count++; callback(sticker_data, user_data); - _free_sticker_data(sticker_data); + sticker_data_destroy(sticker_data); } else { - _free_sticker_data(sticker_data); + sticker_data_destroy(sticker_data); goto cleanup; } } diff --git a/consumer/CMakeLists.txt b/consumer/CMakeLists.txt deleted file mode 100644 index f98cc42..0000000 --- a/consumer/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -SET(SRCS - sticker_consumer.c - ../client/sticker_data.c - ../client/sticker_dbus.c -) - -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}) -INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/include) - -FOREACH(flag ${pkgs_CFLAGS}) - SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") -ENDFOREACH(flag) -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall") - -## Add definitions ## -ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"") - -## sticker consumer library ## -ADD_LIBRARY(${PROJECT_NAME}-consumer SHARED ${SRCS}) -TARGET_LINK_LIBRARIES(${PROJECT_NAME}-consumer ${pkgs_LDFLAGS}) - -## Install library files ## -INSTALL(TARGETS ${PROJECT_NAME}-consumer DESTINATION ${LIBDIR} COMPONENT RuntimeLibraries) diff --git a/provider/CMakeLists.txt b/provider/CMakeLists.txt deleted file mode 100644 index ea3c48a..0000000 --- a/provider/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -SET(SRCS - sticker_provider.c - ../client/sticker_data.c - ../client/sticker_dbus.c -) - -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}) -INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/include) - -FOREACH(flag ${pkgs_CFLAGS}) - SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") -ENDFOREACH(flag) -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall") - -## Add definitions ## -ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"") - -## sticker provider library ## -ADD_LIBRARY(${PROJECT_NAME}-provider SHARED ${SRCS}) -TARGET_LINK_LIBRARIES(${PROJECT_NAME}-provider ${pkgs_LDFLAGS}) - -## Install library files ## -INSTALL(TARGETS ${PROJECT_NAME}-provider DESTINATION ${LIBDIR} COMPONENT RuntimeLibraries) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index f28995b..032be6a 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -17,7 +17,7 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/mock) AUX_SOURCE_DIRECTORY(src SOURCES) AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../common STICKER_COMMON_SOURCES) -AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../client STICKER_CLIENT_SOURCES) +AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../client/src STICKER_CLIENT_SOURCES) AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../consumer STICKER_CONSUMER_SOURCES) AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../provider STICKER_PROVIDER_SOURCES) AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/mock MOCK_SRCS) -- 2.7.4 From 382350e3bef20f315f8a83d04ac3000f58a6388c Mon Sep 17 00:00:00 2001 From: InHong Han Date: Tue, 15 Dec 2020 19:10:58 +0900 Subject: [PATCH 08/16] Add a build option for enabling or disabling unittest --define "_ctest_enable true" Change-Id: I113abf03964403ccdd2a4643edb11d8c12d40103 --- CMakeLists.txt | 10 +++++++--- packaging/capi-ui-sticker.spec | 15 ++++++++++++++- tests/CMakeLists.txt | 6 ------ 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2c8aa49..916ce15 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,11 @@ SET(PREFIX ${CMAKE_INSTALL_PREFIX}) SET(EXEC_PREFIX "${PREFIX}") SET(VERSION 0.2.56) +IF("${TEST_ENABLE}" STREQUAL "true") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST_ENABLE=${TEST_ENABLE}") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTEST_ENABLE=${TEST_ENABLE}") +ENDIF() + ADD_DEFINITIONS("-Werror") ## Include common directory ## @@ -48,14 +53,13 @@ ADD_SUBDIRECTORY(receiver) ENDIF() ## Test -IF(NOT DEFINED MINIMUM_BUILD) +IF("${TEST_ENABLE}" STREQUAL "true") ENABLE_TESTING() SET(UTC_STICKER sticker_unittests) ADD_TEST(NAME ${UTC_STICKER} COMMAND ${UTC_STICKER} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests) - ADD_SUBDIRECTORY(tests) -ENDIF(NOT DEFINED MINIMUM_BUILD) +ENDIF() ## config ## INSTALL(FILES ${CMAKE_SOURCE_DIR}/capi-ui-sticker.info DESTINATION ${TZ_SYS_RO_SHARE}/parser-plugins) diff --git a/packaging/capi-ui-sticker.spec b/packaging/capi-ui-sticker.spec index 1acfa91..c1203a1 100644 --- a/packaging/capi-ui-sticker.spec +++ b/packaging/capi-ui-sticker.spec @@ -85,6 +85,7 @@ Group: Graphics & UI Framework/Input Sticker client library and daemon (gcov) %endif +%if %{defined _ctest_enable} %package unittests Summary: Sticker tests Group: Development/Libraries @@ -92,6 +93,7 @@ Requires: %{name} = %{version}-%{release} %description unittests GTest for sticker +%endif %prep %setup -q -n %{name}-%{version} @@ -115,7 +117,13 @@ export FFLAGS+=" -DTIZEN_DEBUG_ENABLE -fvisibility=hidden" %endif -DCMAKE_INSTALL_PREFIX=/usr -DLIBDIR=%{_libdir} -DBINDIR=%{_bindir} -DINCLUDEDIR=%{_includedir} \ -DTZ_SYS_RO_SHARE=%TZ_SYS_RO_SHARE -DTZ_SYS_BIN=%TZ_SYS_BIN -DTZ_USER_SHARE=%TZ_USER_SHARE \ - -DTZ_SYS_RO_APP=%TZ_SYS_RO_APP -DTZ_SYS_RO_PACKAGES=%TZ_SYS_RO_PACKAGES + -DTZ_SYS_RO_APP=%TZ_SYS_RO_APP -DTZ_SYS_RO_PACKAGES=%TZ_SYS_RO_PACKAGES \ +%if %{defined _ctest_enable} + -DTEST_ENABLE="%{_ctest_enable}" \ +%else + -DTEST_ENABLE="false" \ +%endif + make %{?jobs:-j%jobs} %if 0%{?gcov:1} @@ -152,7 +160,10 @@ tar xf %{name}-gcov.tar -C %{buildroot}%{_datadir}/gcov/obj %endif %check +%if "%{_ctest_enable}" == "true" ctest --output-on-failure %{?_smp_mflags} +%endif + %if 0%{?gcov:1} lcov -c --ignore-errors graph --no-external -q -d . -o gcov.info genhtml gcov.info @@ -203,8 +214,10 @@ chsmack -a "User::App::Shared" /opt/usr/share/sticker-data %{TZ_SYS_RO_APP}/%{_companion_app_name}/* %endif +%if %{defined _ctest_enable} %files unittests %{_bindir}/* +%endif %if 0%{?gcov:1} %files gcov diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 032be6a..eea11f2 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -16,19 +16,13 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../include) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/mock) AUX_SOURCE_DIRECTORY(src SOURCES) -AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../common STICKER_COMMON_SOURCES) AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../client/src STICKER_CLIENT_SOURCES) -AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../consumer STICKER_CONSUMER_SOURCES) -AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../provider STICKER_PROVIDER_SOURCES) AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/mock MOCK_SRCS) ADD_DEFINITIONS("-DFULLVER=\"${FULLVER}\"") ADD_EXECUTABLE(${UTC_STICKER} - ${STICKER_COMMON_SOURCES} ${STICKER_CLIENT_SOURCES} - ${STICKER_CONSUMER_SOURCES} - ${STICKER_PROVIDER_SOURCES} ${MOCK_SRCS} ${SOURCES} ) -- 2.7.4 From ee941195eaffb2321bc5ff456b9b2df6aceaa55f Mon Sep 17 00:00:00 2001 From: InHong Han Date: Tue, 15 Dec 2020 19:15:17 +0900 Subject: [PATCH 09/16] Update package version to 0.1.67 Change-Id: I208a926f8e0e8e59b788a3118451b740a7bb1b60 --- packaging/capi-ui-sticker.spec | 2 +- receiver/tizen-manifest.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/capi-ui-sticker.spec b/packaging/capi-ui-sticker.spec index c1203a1..c4d8fe9 100644 --- a/packaging/capi-ui-sticker.spec +++ b/packaging/capi-ui-sticker.spec @@ -1,6 +1,6 @@ Name: capi-ui-sticker Summary: Sticker client library and daemon -Version: 0.1.66 +Version: 0.1.67 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 diff --git a/receiver/tizen-manifest.xml b/receiver/tizen-manifest.xml index 38098cf..55240db 100644 --- a/receiver/tizen-manifest.xml +++ b/receiver/tizen-manifest.xml @@ -1,5 +1,5 @@ - + -- 2.7.4 From 69e3705646729e9f06f274cacdc8dd62d4d17054 Mon Sep 17 00:00:00 2001 From: InHong Han Date: Mon, 4 Jan 2021 18:29:23 +0900 Subject: [PATCH 10/16] Fix issue that fail to insert stickers when using json file Change-Id: I158c0b78195aba31b8e53c712a8f1ac211d192f2 --- sticker-parser/sticker-parser.c | 48 +++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/sticker-parser/sticker-parser.c b/sticker-parser/sticker-parser.c index 1dc1a48..063aa87 100644 --- a/sticker-parser/sticker-parser.c +++ b/sticker-parser/sticker-parser.c @@ -30,6 +30,7 @@ #include #include #include +#include #ifndef EXPORT_API #define EXPORT_API __attribute__((visibility("default"))) @@ -364,12 +365,21 @@ cleanup: static char* __convert_sticker_uri(char *uri, const char *appid, const char *app_path) { int ret; + char *copy_uri = (char *)calloc(PATH_MAX, sizeof(char)); + if (copy_uri == NULL) { + LOGE("failed to allocate memory"); + return NULL; + } + strncpy(copy_uri, uri, PATH_MAX - 1); __remove_app_path(uri, app_path); int len = strlen(STICKER_DIRECTORY) + strlen(appid) + strlen(uri) + 2; char *new_path = (char *)calloc(len, sizeof(char)); - if (new_path == NULL) - return NULL; + if (new_path == NULL) { + LOGE("failed to allocate memory"); + ret = -1; + goto cleanup; + } snprintf(new_path, len, "%s/%s%s",STICKER_DIRECTORY, appid, uri); @@ -385,14 +395,14 @@ static char* __convert_sticker_uri(char *uri, const char *appid, const char *app goto cleanup; } - if (__file_copy(uri, new_path) == -1) { + if (__file_copy(copy_uri, new_path) == -1) { strerror_r(errno, error_buffer, MAX_ERROR_BUFFER); LOGE("failed to copy sticker file : %s", error_buffer); ret = -1; goto cleanup; } - ret = unlink(uri); + ret = unlink(copy_uri); if (ret != 0) { strerror_r(errno, error_buffer, MAX_ERROR_BUFFER); LOGE("failed to remove sticker file : %s", error_buffer); @@ -402,11 +412,16 @@ static char* __convert_sticker_uri(char *uri, const char *appid, const char *app LOGE("failed to change ownership"); cleanup: + free(copy_uri); + copy_uri = NULL; + if (ret == 0) { return new_path; } else { - free(new_path); - new_path = NULL; + if (new_path) { + free(new_path); + new_path = NULL; + } return NULL; } } @@ -605,10 +620,25 @@ static int __get_sticker_info_from_json(const char *appid, const char *file_path goto free_memory; char *rel_thumbnail = __get_string_from_object(info_object, "thumbnail"); - if (rel_thumbnail) { - if (rel_thumbnail[0] != '\0') + if (rel_thumbnail && rel_thumbnail[0] != '\0') { + if (access(rel_thumbnail, F_OK) == 0) { thumbnail_path = __convert_sticker_uri(rel_thumbnail, appid, app_path); - + } else { + int len = strlen(app_path) + strlen(rel_thumbnail) + 2; + char *new_thumbnail_path = (char *)calloc(len, sizeof(char)); + if (new_thumbnail_path) { + if (rel_thumbnail[0] == '/') + snprintf(new_thumbnail_path, len, "%s%s",app_path, rel_thumbnail); + else + snprintf(new_thumbnail_path, len, "%s%s%s",app_path, "/", rel_thumbnail); + + if (access(new_thumbnail_path, F_OK) == 0) + thumbnail_path = __convert_sticker_uri(new_thumbnail_path, appid, app_path); + + free(new_thumbnail_path); + new_thumbnail_path = NULL; + } + } free(rel_thumbnail); } -- 2.7.4 From 42a3bcb3647ea7b72652b43345b23f9623d10b70 Mon Sep 17 00:00:00 2001 From: InHong Han Date: Mon, 4 Jan 2021 18:43:14 +0900 Subject: [PATCH 11/16] Update package version to 0.1.68 Change-Id: I00f484767d41d5ad51d3205a0ab4cb112d6a0600 --- packaging/capi-ui-sticker.spec | 2 +- receiver/tizen-manifest.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/capi-ui-sticker.spec b/packaging/capi-ui-sticker.spec index c4d8fe9..e833da7 100644 --- a/packaging/capi-ui-sticker.spec +++ b/packaging/capi-ui-sticker.spec @@ -1,6 +1,6 @@ Name: capi-ui-sticker Summary: Sticker client library and daemon -Version: 0.1.67 +Version: 0.1.68 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 diff --git a/receiver/tizen-manifest.xml b/receiver/tizen-manifest.xml index 55240db..55273cc 100644 --- a/receiver/tizen-manifest.xml +++ b/receiver/tizen-manifest.xml @@ -1,5 +1,5 @@ - + -- 2.7.4 From 8ea25c8a497fe57001eb6b676e4fe6bb887437c9 Mon Sep 17 00:00:00 2001 From: InHong Han Date: Tue, 5 Jan 2021 16:14:33 +0900 Subject: [PATCH 12/16] Fix defect detected by static analysis tool Change-Id: If2fdcb684b69c968d1b8add326cb35e0414bffdb --- sticker-parser/sticker-parser.c | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/sticker-parser/sticker-parser.c b/sticker-parser/sticker-parser.c index 063aa87..71b7a0d 100644 --- a/sticker-parser/sticker-parser.c +++ b/sticker-parser/sticker-parser.c @@ -620,26 +620,30 @@ static int __get_sticker_info_from_json(const char *appid, const char *file_path goto free_memory; char *rel_thumbnail = __get_string_from_object(info_object, "thumbnail"); - if (rel_thumbnail && rel_thumbnail[0] != '\0') { - if (access(rel_thumbnail, F_OK) == 0) { - thumbnail_path = __convert_sticker_uri(rel_thumbnail, appid, app_path); - } else { - int len = strlen(app_path) + strlen(rel_thumbnail) + 2; - char *new_thumbnail_path = (char *)calloc(len, sizeof(char)); - if (new_thumbnail_path) { - if (rel_thumbnail[0] == '/') - snprintf(new_thumbnail_path, len, "%s%s",app_path, rel_thumbnail); - else - snprintf(new_thumbnail_path, len, "%s%s%s",app_path, "/", rel_thumbnail); - - if (access(new_thumbnail_path, F_OK) == 0) - thumbnail_path = __convert_sticker_uri(new_thumbnail_path, appid, app_path); - - free(new_thumbnail_path); - new_thumbnail_path = NULL; + if (rel_thumbnail) { + if (rel_thumbnail[0] != '\0') { + if (access(rel_thumbnail, F_OK) == 0) { + thumbnail_path = __convert_sticker_uri(rel_thumbnail, appid, app_path); + } else { + int len = strlen(app_path) + strlen(rel_thumbnail) + 2; + char *new_thumbnail_path = (char *)calloc(len, sizeof(char)); + if (new_thumbnail_path) { + if (rel_thumbnail[0] == '/') + snprintf(new_thumbnail_path, len, "%s%s",app_path, rel_thumbnail); + else + snprintf(new_thumbnail_path, len, "%s%s%s",app_path, "/", rel_thumbnail); + + if (access(new_thumbnail_path, F_OK) == 0) + thumbnail_path = __convert_sticker_uri(new_thumbnail_path, appid, app_path); + + free(new_thumbnail_path); + new_thumbnail_path = NULL; + } } } + free(rel_thumbnail); + rel_thumbnail = NULL; } description = __get_string_from_object(info_object, "description"); -- 2.7.4 From 17973edf9b336982fd8fa30147686c2092e4fc7c Mon Sep 17 00:00:00 2001 From: InHong Han Date: Tue, 5 Jan 2021 16:32:25 +0900 Subject: [PATCH 13/16] Update package version to 0.1.69 Change-Id: I6c548d156af5fd7cee7254dcb92e0c005ea7eb88 --- packaging/capi-ui-sticker.spec | 2 +- receiver/tizen-manifest.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/capi-ui-sticker.spec b/packaging/capi-ui-sticker.spec index e833da7..82fc3b4 100644 --- a/packaging/capi-ui-sticker.spec +++ b/packaging/capi-ui-sticker.spec @@ -1,6 +1,6 @@ Name: capi-ui-sticker Summary: Sticker client library and daemon -Version: 0.1.68 +Version: 0.1.69 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 diff --git a/receiver/tizen-manifest.xml b/receiver/tizen-manifest.xml index 55273cc..69a4651 100644 --- a/receiver/tizen-manifest.xml +++ b/receiver/tizen-manifest.xml @@ -1,5 +1,5 @@ - + -- 2.7.4 From d8d1059f52d6fd67095fd6186e3bbc92c6f9cfce Mon Sep 17 00:00:00 2001 From: "jay.ho.park" Date: Tue, 5 Jan 2021 10:28:10 +0900 Subject: [PATCH 14/16] Init/Deinit sync when BT attached/detached Change-Id: I46031dc5378c971258234d92cec6fd00c62ad7fa --- receiver/inc/receiver_preference.h | 4 ++++ receiver/src/ft.cpp | 20 +++++++++------- receiver/src/main.cpp | 49 ++++++++++++++++++++++++++++++++++---- receiver/tizen-manifest.xml | 2 +- 4 files changed, 60 insertions(+), 15 deletions(-) diff --git a/receiver/inc/receiver_preference.h b/receiver/inc/receiver_preference.h index 02fc7e3..820e725 100644 --- a/receiver/inc/receiver_preference.h +++ b/receiver/inc/receiver_preference.h @@ -20,4 +20,8 @@ #define LAST_SYNC_TIME "LastSyncTime" #define LAST_LOG_FILE_INDEX "LastLogFileIndex" +#define LAST_SYNC_STATUS "LastSyncStatus" +#define LAST_SYNC_STATUS_SYNC_SUCCESS 1 +#define LAST_SYNC_STATUS_SYNC_NEEDED 0 + #endif /* __RECEIVER_PREFERENCE_H__ */ diff --git a/receiver/src/ft.cpp b/receiver/src/ft.cpp index 26883b3..4d24be9 100644 --- a/receiver/src/ft.cpp +++ b/receiver/src/ft.cpp @@ -95,16 +95,18 @@ static int sync_complete_flags = 0; static void sticker_service_quit(); -static void save_last_sync_time() +static void save_last_sync_info() { - // save last sync time in preference double current_time = ecore_time_unix_get(); - if (preference_set_double(LAST_SYNC_TIME, current_time) == PREFERENCE_ERROR_NONE) { - STLOGI("Succeed to set last sync time : %f", current_time); - } - else { + STLOGI("Need to set last sync time as %f, last sync status as SUCCESS", current_time); + + if (preference_set_double(LAST_SYNC_TIME, current_time) != PREFERENCE_ERROR_NONE) { STLOGW("Failed to set last sync time"); } + + if (preference_set_int(LAST_SYNC_STATUS, LAST_SYNC_STATUS_SYNC_SUCCESS) != PREFERENCE_ERROR_NONE) { + STLOGE("Failed to set sync status as SUCCESS"); + } } static void set_sync_first_complete() @@ -122,7 +124,7 @@ static void set_sync_first_complete() static void set_sync_complete() { set_sync_first_complete(); - save_last_sync_time(); + save_last_sync_info(); } static void set_sync_progressing(gboolean flag) @@ -850,8 +852,7 @@ on_data_received(sap_socket_h socket, unsigned short int channel_id, unsigned in send_sync_start_response(result_code); set_sync_progressing(FALSE); - save_last_sync_time(); - + save_last_sync_info(); sticker_service_quit(); } @@ -1244,6 +1245,7 @@ static void _on_device_status_changed(sap_device_status_e status, case SAP_DEVICE_STATUS_DETACHED: STLOGD("device is detached."); send_message("sync_stop_result", "cancel"); + sticker_service_quit(); break; case SAP_DEVICE_STATUS_ATTACHED: STLOGD("Attached calling find peer now"); diff --git a/receiver/src/main.cpp b/receiver/src/main.cpp index aa196e1..6ba29ed 100644 --- a/receiver/src/main.cpp +++ b/receiver/src/main.cpp @@ -173,9 +173,33 @@ static void process_request(app_control_h app_control, char *request) goto cleanup; if (mode && type) { - if (!is_init_sap()) { - initialize_sap(); - request_all_sticker_data(mode, type); + if (check_battery_condition()) { + if (check_sync_time_condition()) { + if (preference_set_int(LAST_SYNC_STATUS, LAST_SYNC_STATUS_SYNC_NEEDED) != PREFERENCE_ERROR_NONE) + STLOGE("Failed to set sync status as NEEDED"); + + if (!is_init_sap()) + initialize_sap(); + request_all_sticker_data(mode, type); + } else { // Under the sync interval time. Need to check whether last sync was succeded or not. + int last_sync_status = 0; + + if (preference_get_int(LAST_SYNC_STATUS, &last_sync_status) != PREFERENCE_ERROR_NONE) { + STLOGE("Failed to get sync status. Default action is exit."); + goto cleanup; + } + + if (last_sync_status == LAST_SYNC_STATUS_SYNC_NEEDED) { + STLOGD("Last sync status is NEEDED(code: %d). Retrying to sync.", last_sync_status); + if (!is_init_sap()) + initialize_sap(); + request_all_sticker_data(mode, type); + } else { + STLOGD("Last sync status is SUCCESS(code: %d). Don't have to retrying sync", last_sync_status); + } + } + } else { + STLOGD("Not enough battery."); } } } @@ -208,6 +232,8 @@ static void process_auto_sync() if (check_sync_time_condition()) { if (check_battery_condition()) { STLOGD("Starting auto synchronization"); + if (preference_set_int(LAST_SYNC_STATUS, LAST_SYNC_STATUS_SYNC_NEEDED) != PREFERENCE_ERROR_NONE) + STLOGE("Failed to set sync status as NEEDED"); initialize_sap(); request_sticker_feature(); request_auto_sync(); @@ -222,8 +248,21 @@ static void process_auto_sync() } else { if (!get_job_progress()) { - STLOGD("exit"); - service_app_exit(); + int last_sync_status = 0; + if (preference_get_int(LAST_SYNC_STATUS, &last_sync_status) != PREFERENCE_ERROR_NONE) { + STLOGE("Failed to get sync status. Default action is exit."); + service_app_exit(); + } + + if (last_sync_status == LAST_SYNC_STATUS_SYNC_NEEDED) { + STLOGD("Last sync status is NEEDED(code: %d). Retrying to sync.", last_sync_status); + initialize_sap(); + request_sticker_feature(); + request_auto_sync(); + } else { + STLOGD("Last sync status is SUCCESS(code: %d). Don't have to retrying sync", last_sync_status); + service_app_exit(); + } } } } diff --git a/receiver/tizen-manifest.xml b/receiver/tizen-manifest.xml index 55240db..5d994f3 100644 --- a/receiver/tizen-manifest.xml +++ b/receiver/tizen-manifest.xml @@ -4,7 +4,7 @@ - + -- 2.7.4 From 9c076e89fa2e4106f1a6d216240a559b71f5de0f Mon Sep 17 00:00:00 2001 From: "jay.ho.park" Date: Tue, 5 Jan 2021 10:35:50 +0900 Subject: [PATCH 15/16] Pop item from queue to prevent duplicated request Change-Id: I04f4d7d7f07aa74e94b7a85ece4a29ed0f3501ea --- receiver/inc/ft.h | 5 +-- receiver/src/ft.cpp | 116 ++++++++++++++++++++++---------------------------- receiver/src/main.cpp | 25 ++++++++--- 3 files changed, 71 insertions(+), 75 deletions(-) diff --git a/receiver/inc/ft.h b/receiver/inc/ft.h index afab92e..f3a735c 100644 --- a/receiver/inc/ft.h +++ b/receiver/inc/ft.h @@ -33,10 +33,9 @@ gboolean is_init_sap(); void request_all_sticker_data(const char *mode, const char *type); bool request_sticker_data(const char *mode, const char *category, const char *type); -void request_auto_sync(); -void request_sticker_feature(); +bool request_sticker_feature(); void send_disconnect_message(); -void request_show_sync_notification(); +bool request_show_sync_notification(); bool get_job_progress(); diff --git a/receiver/src/ft.cpp b/receiver/src/ft.cpp index 4d24be9..9a717ee 100644 --- a/receiver/src/ft.cpp +++ b/receiver/src/ft.cpp @@ -93,6 +93,26 @@ static int sync_success_cnt = 0; static gboolean job_progress = FALSE; static int sync_complete_flags = 0; +void push_sticker_request(request_type req_type, const char *mode, const char *category, const char *type) +{ + StickerRequest pending_request; + + pending_request.req_type = req_type; + + if (mode != NULL) + pending_request.mode = string(mode); + + if (category != NULL) + pending_request.category = string(category); + + if (type != NULL) + pending_request.type = string(type); + + ReqQueue.push(pending_request); + STLOGI("Push sticker request: req_type[%d], mode[%s], category[%s], type[%s]", + pending_request.req_type, pending_request.mode.c_str(), pending_request.category.c_str(), pending_request.type.c_str()); +} + static void sticker_service_quit(); static void save_last_sync_info() @@ -374,14 +394,6 @@ bool request_sticker_data(const char *mode, const char *category, const char *ty if (!priv_data.socket) { job_progress = TRUE; - StickerRequest pending_request; - pending_request.req_type = REQUEST_TYPE_SYNC; - pending_request.mode = string(mode ? mode : "manual"); - pending_request.category = string(category ? category : "arsticker"); - pending_request.type = string(type ? type : "input"); - - ReqQueue.push(pending_request); - STLOGI("Push sync request"); return false; } @@ -403,6 +415,7 @@ bool request_sticker_data(const char *mode, const char *category, const char *ty if (_send_json_data(j_object) == FALSE) { STLOGE("Failed to send STICKER_SYNC_START_REQ"); + result = false; } else { @@ -429,19 +442,26 @@ static bool process_request_queue() switch (request.req_type) { case REQUEST_TYPE_FEATURE_REQ: STLOGD("[Request feature exchange]"); - request_sticker_feature(); + + if (true == request_sticker_feature()) + ReqQueue.pop(); + break; case REQUEST_TYPE_SYNC: STLOGD("[Request to sync sticker] mode: %s, category: %s, type: %s", request.mode.c_str(), request.category.c_str(), request.type.c_str()); - request_sticker_data(request.mode.c_str(), request.category.c_str(), request.type.c_str()); + if (true == request_sticker_data(request.mode.c_str(), request.category.c_str(), request.type.c_str())) + ReqQueue.pop(); + break; case REQUEST_TYPE_SHOW_NOTIFICATION: STLOGD("[Request to show notification]"); - request_show_sync_notification(); - ReqQueue.pop(); + + if (true == request_show_sync_notification()) + ReqQueue.pop(); + break; case REQUEST_TYPE_AUTOSYNC: STLOGD("[Request to sync automatically]"); @@ -455,65 +475,45 @@ static bool process_request_queue() return true; } -void request_auto_sync() -{ - STLOGD("Add request to sync automatically"); - StickerRequest pending_request; - pending_request.req_type = REQUEST_TYPE_AUTOSYNC; - ReqQueue.push(pending_request); -} - void request_all_sticker_data(const char *mode, const char *type) { - StickerRequest pending_request; - pending_request.req_type = REQUEST_TYPE_SYNC; - pending_request.mode = string(mode); - pending_request.type = string(type); - #ifdef VCONFKEY_STICKER_SUPPORTED_FEATURE int feature_flag = 0; if (vconf_get_int(VCONFKEY_STICKER_SUPPORTED_FEATURE, &feature_flag) == 0) { if (feature_flag & VCONFKEY_STICKER_FEATURE_AREMOJI) { - pending_request.category = string("arsticker"); - ReqQueue.push(pending_request); + push_sticker_request(REQUEST_TYPE_SYNC, mode, "arsticker", type); } if (feature_flag & VCONFKEY_STICKER_FEATURE_BITMOJI) { - pending_request.category = string("bitmoji"); - ReqQueue.push(pending_request); + push_sticker_request(REQUEST_TYPE_SYNC, mode, "bitmoji", type); } } else STLOGW("Failed to get value of VCONFKEY_STICKER_SUPPORTED_FEATURE"); #else - pending_request.category = string("arsticker"); - ReqQueue.push(pending_request); - pending_request.category = string("bitmoji"); - ReqQueue.push(pending_request); + push_sticker_request(REQUEST_TYPE_SYNC, mode, "arsticker", type); + push_sticker_request(REQUEST_TYPE_SYNC, mode, "bitmoji", type); #endif if (priv_data.socket) process_request_queue(); } -void request_sticker_feature() +bool request_sticker_feature() { + bool result = false; JsonObject *j_object = NULL; if (!priv_data.socket) { job_progress = TRUE; - StickerRequest pending_request; - pending_request.req_type = REQUEST_TYPE_FEATURE_REQ; - ReqQueue.push(pending_request); - STLOGI("Push sync feature request"); - return; + return false; } j_object = json_object_new(); if (j_object == NULL) { STLOGE("json object create error"); - return; + return false; } json_object_set_string_member(j_object, "msgId", STICKER_SYNC_FEATURE_REQ); @@ -521,15 +521,19 @@ void request_sticker_feature() if (_send_json_data(j_object) == FALSE) { STLOGE("Failed to send STICKER_SYNC_FEATURE_REQ"); + result = false; } else { job_progress = TRUE; + result = true; } json_object_unref(j_object); if (_create_thumbnail_directory() != 0) STLOGE("Failed to create thumbnail directory"); + + return result; } void send_disconnect_message() @@ -551,23 +555,20 @@ void send_disconnect_message() json_object_unref(j_object); } -void request_show_sync_notification() +bool request_show_sync_notification() { + bool result = false; JsonObject *j_object = NULL; if (!priv_data.socket) { job_progress = TRUE; - StickerRequest pending_request; - pending_request.req_type = REQUEST_TYPE_SHOW_NOTIFICATION; - ReqQueue.push(pending_request); - STLOGI("Push show notification request"); - return; + return false; } j_object = json_object_new(); if (j_object == NULL) { STLOGE("json object create error"); - return; + return false; } json_object_set_string_member(j_object, "msgId", STICKER_REQUEST_NOTI_REQ); @@ -575,11 +576,14 @@ void request_show_sync_notification() if (_send_json_data(j_object) == FALSE) { STLOGE("Failed to send STICKER_REQUEST_NOTI_REQ"); + result = false; } else { job_progress = TRUE; + result = true; } json_object_unref(j_object); + return result; } void reject_file() @@ -722,19 +726,6 @@ static void send_sync_start_response(int result_code) #endif } -static void pop_sticker_request(request_type req_type) -{ - if (ReqQueue.empty()) - return; - - StickerRequest request = ReqQueue.front(); - STLOGD ("request type : %d", request.req_type); - if (request.req_type == req_type) { - STLOGD ("pop sync request"); - ReqQueue.pop(); - } -} - void on_data_received(sap_socket_h socket, unsigned short int channel_id, unsigned int payload_length, void *buffer, void *user_data) /* message exchange on_receive callback (sap_agent_data_received_cb) */ @@ -793,9 +784,6 @@ on_data_received(sap_socket_h socket, unsigned short int channel_id, unsigned in #else STLOGW("No vconf supported feature"); #endif - - pop_sticker_request(REQUEST_TYPE_FEATURE_REQ); - if (!process_request_queue()) { sticker_service_quit(); } @@ -855,8 +843,6 @@ on_data_received(sap_socket_h socket, unsigned short int channel_id, unsigned in save_last_sync_info(); sticker_service_quit(); } - - pop_sticker_request(REQUEST_TYPE_SYNC); } } else if (msg_id == STICKER_SEND_START_REQ) { STLOGD("msg : %s", msg_id.c_str()); diff --git a/receiver/src/main.cpp b/receiver/src/main.cpp index 6ba29ed..968b4f4 100644 --- a/receiver/src/main.cpp +++ b/receiver/src/main.cpp @@ -114,7 +114,8 @@ static bool check_sync_time_condition() if (timediff > MAX_WAIT_TIME) { STLOGD("Starting manual synchronization"); initialize_sap(); - request_show_sync_notification(); + if (false == request_show_sync_notification()) + push_sticker_request(REQUEST_TYPE_SHOW_NOTIFICATION, NULL, NULL, NULL); result = false; } else { if (timediff > SYNC_INTERVAL) @@ -205,7 +206,9 @@ static void process_request(app_control_h app_control, char *request) } else if (strcmp(request, "oobe") == 0) { initialize_sap(); - request_sticker_feature(); + + if (false == request_sticker_feature()) + push_sticker_request(REQUEST_TYPE_FEATURE_REQ, NULL, NULL, NULL); } else { STLOGW("Unknown command : %s", request); @@ -235,8 +238,11 @@ static void process_auto_sync() if (preference_set_int(LAST_SYNC_STATUS, LAST_SYNC_STATUS_SYNC_NEEDED) != PREFERENCE_ERROR_NONE) STLOGE("Failed to set sync status as NEEDED"); initialize_sap(); - request_sticker_feature(); - request_auto_sync(); + + if (false == request_sticker_feature()) + push_sticker_request(REQUEST_TYPE_FEATURE_REQ, NULL, NULL, NULL); + + push_sticker_request(REQUEST_TYPE_AUTOSYNC, NULL, NULL, NULL); } else { STLOGI("The status of battery is low"); @@ -257,8 +263,11 @@ static void process_auto_sync() if (last_sync_status == LAST_SYNC_STATUS_SYNC_NEEDED) { STLOGD("Last sync status is NEEDED(code: %d). Retrying to sync.", last_sync_status); initialize_sap(); - request_sticker_feature(); - request_auto_sync(); + + if (false == request_sticker_feature()) + push_sticker_request(REQUEST_TYPE_FEATURE_REQ, NULL, NULL, NULL); + + push_sticker_request(REQUEST_TYPE_AUTOSYNC, NULL, NULL, NULL); } else { STLOGD("Last sync status is SUCCESS(code: %d). Don't have to retrying sync", last_sync_status); service_app_exit(); @@ -275,7 +284,9 @@ static void get_sticker_feature() if (vconf_get_int(VCONFKEY_STICKER_SUPPORTED_FEATURE, &feature_flag) == 0 && feature_flag == 0) { STLOGD("Request to get sticker feature"); initialize_sap(); - request_sticker_feature(); + + if (false == request_sticker_feature()) + push_sticker_request(REQUEST_TYPE_FEATURE_REQ, NULL, NULL, NULL); } else { if (!is_init_sap()) -- 2.7.4 From 0a2b95f9096c226d622277a7c66b3ffe3d7f1aa5 Mon Sep 17 00:00:00 2001 From: InHong Han Date: Thu, 25 Feb 2021 16:40:33 +0900 Subject: [PATCH 16/16] Add new APIs for setting/getting group image Change-Id: I40f1c6d1dbc396da6c700bdad462b2c52d345295 --- client/inc/sticker_consumer_main.h | 7 ++ client/src/sticker_consumer.c | 30 ++++++ client/src/sticker_dbus.c | 93 ++++++++++++++++++ client/src/sticker_dbus.h | 3 + client/src/sticker_provider.c | 100 +++++++++++++++++++ include/sticker_consumer.h | 30 ++++++ include/sticker_provider.h | 18 ++++ server/stickerd_data_manager.c | 125 +++++++++++++++++++++++- server/stickerd_data_manager.h | 3 + server/stickerd_db_manager.c | 193 +++++++++++++++++++++++++++++++++++++ server/stickerd_db_manager.h | 3 + sticker-parser/sticker-parser.c | 55 +++++++++++ 12 files changed, 657 insertions(+), 3 deletions(-) diff --git a/client/inc/sticker_consumer_main.h b/client/inc/sticker_consumer_main.h index f830204..57b4d8d 100644 --- a/client/inc/sticker_consumer_main.h +++ b/client/inc/sticker_consumer_main.h @@ -36,6 +36,13 @@ struct sticker_consumer_s { void *event_cb_user_data; }; +typedef struct sticker_group_image_s +{ + sticker_data_uri_type_e uri_type; + char *uri; + char *group; +} sticker_group_image_s; + #ifdef __cplusplus } #endif diff --git a/client/src/sticker_consumer.c b/client/src/sticker_consumer.c index 39297bf..cf3448d 100644 --- a/client/src/sticker_consumer.c +++ b/client/src/sticker_consumer.c @@ -504,4 +504,34 @@ EXPORT_API int sticker_consumer_unset_event_cb(sticker_consumer_h consumer_handl consumer_handle->event_cb_user_data = NULL; return STICKER_ERROR_NONE; +} + +EXPORT_API int sticker_consumer_group_image_list_foreach_all(sticker_consumer_h consumer_handle, sticker_consumer_group_image_list_foreach_cb callback, void *user_data) +{ + CHECK_STICKER_FEATURE(); + + int ret = 0; + GList *list = NULL; + + if (!consumer_handle || !callback) + return STICKER_ERROR_INVALID_PARAMETER; + + ret = sticker_dbus_get_group_image_list(consumer_handle->gdbus_connection, consumer_handle->app_id, &list); + if (ret != STICKER_ERROR_NONE) { + LOGE("Failed to get group image list : %d", ret); + ret = STICKER_ERROR_OPERATION_FAILED; + goto cleanup; + } + + for(GList *tmp = g_list_first(list); tmp != NULL; tmp=tmp->next) { + sticker_group_image_s *group_image = NULL; + group_image = (sticker_group_image_s *)tmp->data; + callback(group_image->group, group_image->uri_type, group_image->uri, user_data); + } + +cleanup: + if (list) + g_list_free_full(list, free); + + return ret; } \ No newline at end of file diff --git a/client/src/sticker_dbus.c b/client/src/sticker_dbus.c index a9f5635..75c1a89 100644 --- a/client/src/sticker_dbus.c +++ b/client/src/sticker_dbus.c @@ -1145,3 +1145,96 @@ int sticker_dbus_get_sticker_info_by_uri(GDBusConnection *gdbus_connection, stic return ret; } + +int sticker_dbus_check_group_exists(GDBusConnection *gdbus_connection, const char *app_id, const char *group, int *result) +{ + int ret; + GDBusMessage *reply = NULL; + GVariant *reply_body = NULL; + + ret = _send_sync_message(gdbus_connection, g_variant_new("(ss)", app_id, group), &reply, "check_group_exists"); + if (ret == STICKER_CLIENT_ERROR_NONE) { + reply_body = g_dbus_message_get_body(reply); + g_variant_get(reply_body, "(i)", result); + } + + if (reply_body) + g_variant_unref(reply_body); + + if (reply) + g_object_unref(reply); + + return ret; +} + +int sticker_dbus_set_group_image(GDBusConnection *gdbus_connection, const char *app_id, const char *group, sticker_data_uri_type_e type, const char *uri) +{ + int ret; + GDBusMessage *reply = NULL; + + ret = _send_sync_message(gdbus_connection, g_variant_new("(ssis)", app_id, group, (int)type, uri), &reply, "set_group_image"); + if (ret != STICKER_CLIENT_ERROR_NONE) + LOGE("failed to set group image"); + + if (reply) + g_object_unref(reply); + + return ret; +} + +int sticker_dbus_get_group_image_list(GDBusConnection *gdbus_connection, const char *app_id, GList **group_image_list) +{ + int ret; + GDBusMessage *reply = NULL; + GVariantIter *iter = NULL; + GVariant *reply_body = NULL; + int type; + char *group = NULL; + char *uri = NULL; + + if (group_image_list == NULL) { + LOGE("group_image_list is invalid"); + return STICKER_CLIENT_ERROR_INVALID_PARAMETER; + } + + ret = _send_sync_message(gdbus_connection, g_variant_new("(s)", app_id), &reply, "get_group_image_list"); + if (ret == STICKER_CLIENT_ERROR_NONE) { + reply_body = g_dbus_message_get_body(reply); + g_variant_get(reply_body, "(a(sis))", &iter); + + if (!iter) { + LOGD("failed to get iter"); + return STICKER_CLIENT_ERROR_OPERATION_FAILED; + } + + while (g_variant_iter_loop (iter, "(sis)", &group, &type, &uri)) { + sticker_group_image_s *group_image = NULL; + group_image = g_try_new0(sticker_group_image_s, 1); + if (group_image) { + if (group) { + group_image->group = strdup(group); + free(group); + group = NULL; + } + group_image->uri_type = (sticker_data_uri_type_e)type; + if (uri) { + group_image->uri = strdup(uri); + free(uri); + uri = NULL; + } + + *group_image_list = g_list_append(*group_image_list, group_image); + } + } + + g_variant_iter_free(iter); + } + + if (reply_body) + g_variant_unref(reply_body); + + if (reply) + g_object_unref(reply); + + return ret; +} \ No newline at end of file diff --git a/client/src/sticker_dbus.h b/client/src/sticker_dbus.h index c5643db..3705044 100644 --- a/client/src/sticker_dbus.h +++ b/client/src/sticker_dbus.h @@ -69,6 +69,9 @@ int sticker_dbus_check_file_exists(GDBusConnection *gdbus_connection, const char int sticker_dbus_insert_recent_sticker_info(GDBusConnection *gdbus_connection, int record_id); int sticker_dbus_get_recent_sticker_list(GDBusConnection *gdbus_connection, int count, GVariantIter **id_iter); int sticker_dbus_get_sticker_info_by_uri(GDBusConnection *gdbus_connection, sticker_data_h sticker_data, const char *uri); +int sticker_dbus_check_group_exists(GDBusConnection *gdbus_connection, const char *app_id, const char *group, int *result); +int sticker_dbus_set_group_image(GDBusConnection *gdbus_connection, const char *app_id, const char *group, sticker_data_uri_type_e type, const char *uri); +int sticker_dbus_get_group_image_list(GDBusConnection *gdbus_connection, const char *app_id, GList **group_image_list); #ifdef __cplusplus } diff --git a/client/src/sticker_provider.c b/client/src/sticker_provider.c index 18181c9..c975366 100644 --- a/client/src/sticker_provider.c +++ b/client/src/sticker_provider.c @@ -379,3 +379,103 @@ EXPORT_API int sticker_provider_delete_data_by_uri(sticker_provider_h provider_h return STICKER_ERROR_NONE; } + +EXPORT_API int sticker_provider_set_group_image(sticker_provider_h provider_handle, const char *group, sticker_data_uri_type_e type, const char *uri) +{ + CHECK_STICKER_FEATURE(); + + int ret; + int is_exist = 0; + char *app_id = NULL; + package_info_h package_info = NULL; + char *app_path = NULL; + char *file_path = NULL; + + if (!provider_handle || !group || !uri) + return STICKER_ERROR_INVALID_PARAMETER; + + ret = app_get_id(&app_id); + if (ret != APP_ERROR_NONE) { + LOGE("Failed to get app_id : %d", ret); //LCOV_EXCL_LINE + ret = STICKER_ERROR_OPERATION_FAILED; + goto cleanup; + } + + ret = sticker_dbus_check_group_exists(provider_handle->gdbus_connection, app_id, group, &is_exist); + if (ret != STICKER_ERROR_NONE) { + LOGE("Failed to check group exists : %d", ret); + ret = STICKER_ERROR_OPERATION_FAILED; + goto cleanup; + } + + if (!is_exist) { + LOGE("Group name does not exist"); + ret = STICKER_ERROR_INVALID_PARAMETER; + goto cleanup; + } + + if (type == STICKER_DATA_URI_LOCAL_PATH) { + ret = package_info_create(app_id, &package_info); + if (ret != PACKAGE_MANAGER_ERROR_NONE || package_info == NULL) { + LOGE("failed to create package_info. ret: %d", ret); //LCOV_EXCL_LINE + ret = STICKER_ERROR_OPERATION_FAILED; + goto cleanup; + } + + ret = package_info_get_root_path(package_info, &app_path); + if (ret != PACKAGE_MANAGER_ERROR_NONE || app_path == NULL) { + LOGE("failed to create package_info. ret: %d", ret); //LCOV_EXCL_LINE + ret = STICKER_ERROR_OPERATION_FAILED; + goto cleanup; + } + + int path_len = strlen(app_path) + strlen(uri) + 2; + file_path = (char *)calloc(path_len, sizeof(char)); + if (!file_path) { + LOGE("failed to alloc memory"); //LCOV_EXCL_LINE + ret = STICKER_ERROR_OPERATION_FAILED; + goto cleanup; + } + + if(uri[0] == '/') + snprintf(file_path, path_len, "%s%s",app_path, uri); + else + snprintf(file_path, path_len, "%s%s%s",app_path, "/", uri); //LCOV_EXCL_LINE + + if (access(file_path, F_OK) != 0) { + LOGE("%s does not exist", file_path); + ret = STICKER_ERROR_OPERATION_FAILED; + goto cleanup; + } + } + + ret = sticker_dbus_set_group_image(provider_handle->gdbus_connection, app_id, group, type, file_path ? file_path : uri); + if (ret != STICKER_ERROR_NONE) { + LOGE("Failed to set group image : %d", ret); + if (ret == STICKER_CLIENT_ERROR_NO_SUCH_FILE) + ret = STICKER_ERROR_NO_SUCH_FILE; + else + ret = STICKER_ERROR_OPERATION_FAILED; + } + +cleanup: + if (app_id) { + free(app_id); + app_id = NULL; + } + + if (package_info) + package_info_destroy(package_info); + + if (app_path) { + free(app_path); + app_path = NULL; + } + + if (file_path) { + free(file_path); + file_path = NULL; + } + + return ret; +} \ No newline at end of file diff --git a/include/sticker_consumer.h b/include/sticker_consumer.h index 322379c..41805de 100644 --- a/include/sticker_consumer.h +++ b/include/sticker_consumer.h @@ -112,6 +112,20 @@ typedef void (*sticker_consumer_keyword_list_foreach_cb)(const char *keyword, vo typedef void (*sticker_consumer_event_cb)(sticker_consumer_event_type_e event_type, sticker_data_h data_handle, void *user_data); /** + * @brief Called to retrieve group images in the sticker database. + * @details The sticker_consumer_group_image_list_foreach_all() must be called to invoke this callback function, synchronously. + * @since_tizen 6.5 + * @remarks @a group and @a uri should not be freed and can be used only in the callback. + * @param[in] group The group name of the stickers + * @param[in] type The URI type of the sticker group image URI + * @param[in] uri The URI of the sticker group image + * @param[in] user_data The user data passed from the foreach function + * @pre sticker_consumer_group_image_list_foreach_all() will invoke this callback. + * @see sticker_consumer_group_image_list_foreach_all() + */ +typedef void (*sticker_consumer_group_image_list_foreach_cb)(const char *group, sticker_data_uri_type_e type, const char *uri, void *user_data); + +/** * @brief Creates a sticker consumer handle. * @since_tizen 5.5 * @privlevel public @@ -373,6 +387,22 @@ int sticker_consumer_set_event_cb(sticker_consumer_h consumer_handle, sticker_co int sticker_consumer_unset_event_cb(sticker_consumer_h consumer_handle); /** + * @brief Retrieves images of all sticker groups in the database. + * @since_tizen 6.5 + * @param[in] consumer_handle The sticker consumer handle + * @param[in] callback The callback function to invoke + * @param[in] user_data The user data to be passed to the callback function + * @return 0 on success, otherwise a negative error value + * @retval #STICKER_ERROR_NONE Successful + * @retval #STICKER_ERROR_NOT_SUPPORTED Not supported + * @retval #STICKER_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #STICKER_ERROR_OPERATION_FAILED Operation failed + * @post This function invokes sticker_consumer_group_image_list_foreach_cb() repeatedly for getting data. + * @see sticker_consumer_group_image_list_foreach_cb() + */ +int sticker_consumer_group_image_list_foreach_all(sticker_consumer_h consumer_handle, sticker_consumer_group_image_list_foreach_cb callback, void *user_data); + +/** * @} */ diff --git a/include/sticker_provider.h b/include/sticker_provider.h index 65a4d78..945338d 100644 --- a/include/sticker_provider.h +++ b/include/sticker_provider.h @@ -253,6 +253,24 @@ int sticker_provider_get_sticker_count(sticker_provider_h provider_handle, int * int sticker_provider_data_foreach_all(sticker_provider_h provider_handle, int offset, int count, int *result, sticker_provider_data_foreach_cb callback, void *user_data); /** + * @brief Sets the image of the sticker group. + * @details @a uri must be a relative path like '/res/smile.png' when @a type is #STICKER_DATA_URI_LOCAL_PATH. + * @since_tizen 6.5 + * @param[in] provider_handle The sticker provider handle + * @param[in] group The group name for setting group image + * @param[in] type The URI type of the image file + * @param[in] uri The URI of the image file + * @return 0 on success, otherwise a negative error value + * @retval #STICKER_ERROR_NONE Successful + * @retval #STICKER_ERROR_NOT_SUPPORTED Not supported + * @retval #STICKER_ERROR_INVALID_PARAMETER Invalid parameter, e.g. @a group is @c NULL or the group name does not exist in the database + * @retval #STICKER_ERROR_OPERATION_FAILED Operation failed + * @retval #STICKER_ERROR_NO_SUCH_FILE No such file, e.g. @a uri is @c NULL or the specified file does not exist + * @see sticker_provider_insert_data() + */ +int sticker_provider_set_group_image(sticker_provider_h provider_handle, const char *group, sticker_data_uri_type_e type, const char *uri); + +/** * @} */ diff --git a/server/stickerd_data_manager.c b/server/stickerd_data_manager.c index d19dbdd..9d9ef83 100644 --- a/server/stickerd_data_manager.c +++ b/server/stickerd_data_manager.c @@ -41,6 +41,12 @@ #define MAX_ERROR_BUFFER 256 +enum { + STICKER_URI_TYPE_NONE, + STICKER_URI_TYPE_LOCAL_PATH, + STICKER_URI_TYPE_WEB_RESOURCE, +}; + static GHashTable *_monitoring_hash = NULL; static char error_buffer[MAX_ERROR_BUFFER]; static GList *consumer_list = NULL; @@ -165,6 +171,12 @@ static void _stickerd_client_dbus_method_call_handler(GDBusConnection *conn, con ret = stickerd_send_update_event(parameters, &reply_body); } else if (g_strcmp0(method_name, "get_sticker_info_by_uri") == 0) { ret = stickerd_get_sticker_info_by_uri(parameters, &reply_body); + } else if (g_strcmp0(method_name, "check_group_exists") == 0) { + ret = stickerd_check_group_exists(parameters, &reply_body); + } else if (g_strcmp0(method_name, "set_group_image") == 0) { + ret = stickerd_set_group_image(parameters, &reply_body); + } else if (g_strcmp0(method_name, "get_group_image_list") == 0) { + ret = stickerd_get_group_image_list(parameters, &reply_body); } if (ret == STICKERD_SERVER_ERROR_NONE) { @@ -352,6 +364,24 @@ int stickerd_register_dbus_interface(void) " " " " " " + + " " + " " + " " + " " + " " + + " " + " " + " " + " " + " " + " " + + " " + " " + " " + " " " " " "; @@ -732,7 +762,7 @@ int stickerd_insert_sticker_info(GVariant *parameters, GVariant **reply_body) sticker_info->keyword = g_list_append(sticker_info->keyword, strdup((const char *)keyword)); } - if (sticker_info->type == 1) { + if (sticker_info->type == STICKER_URI_TYPE_LOCAL_PATH) { if (_check_file_exist(sticker_info->app_id, sticker_info->uri) == 0) { sticker_info->uri = _convert_sticker_uri(sticker_info->uri, sticker_info->app_id); if (!sticker_info->uri) { @@ -894,7 +924,7 @@ int stickerd_insert_sticker_info_by_json(GVariant *parameters, GVariant **reply_ if (!sticker_info->uri || sticker_info->uri[0] == '\0') goto free_memory; - if (sticker_info->type == 1) { + if (sticker_info->type == STICKER_URI_TYPE_LOCAL_PATH) { if (_check_file_exist(sticker_info->app_id, sticker_info->uri) == 0) { sticker_info->uri = _convert_sticker_uri(sticker_info->uri, sticker_info->app_id); if (!sticker_info->uri) @@ -1070,7 +1100,7 @@ int stickerd_update_sticker_uri(GVariant *parameters, GVariant **reply_body) g_variant_get(parameters, "(i&si&s)", &record_id, &app_id, &type, &uri); - if (type == 1) { + if (type == STICKER_URI_TYPE_LOCAL_PATH) { if (_check_file_exist(app_id, uri) == 0) { uri = _convert_sticker_uri(uri, app_id); if (!uri) { @@ -1772,3 +1802,92 @@ cleanup: return ret; } + +int stickerd_check_group_exists(GVariant *parameters, GVariant **reply_body) +{ + int ret; + int result; + char *app_id = NULL; + char *group = NULL; + + g_variant_get(parameters, "(&s&s)", &app_id, &group); + + ret = stickerd_db_check_group_exists(&result, app_id, group); + if (ret != STICKERD_SERVER_ERROR_NONE) { + LOGE("Failed to check group exists"); + return STICKERD_SERVER_ERROR_OPERATION_FAILED; + } + + *reply_body = g_variant_new("(i)", result); + if (*reply_body == NULL) { + LOGE("Failed to create reply_body"); + return STICKERD_SERVER_ERROR_OPERATION_FAILED; + } + + return ret; +} + +int stickerd_set_group_image(GVariant *parameters, GVariant **reply_body) +{ + int ret; + int type; + char *app_id = NULL; + char *group = NULL; + char *uri = NULL; + + *reply_body = g_variant_new("()"); + if (*reply_body == NULL) { + LOGE("Failed to create reply_body"); + return STICKERD_SERVER_ERROR_OPERATION_FAILED; + } + + g_variant_get(parameters, "(&s&si&s)", &app_id, &group, &type, &uri); + + if (type == STICKER_URI_TYPE_LOCAL_PATH) { + if (_check_file_exist(app_id, uri) == 0) { + uri = _convert_sticker_uri(uri, app_id); + if(!uri) { + LOGE("failed to copy sticker file"); + return STICKERD_SERVER_ERROR_FILE_EXISTS; + } + } else { + LOGE("sticker file does not exist"); + return STICKERD_SERVER_ERROR_NO_SUCH_FILE; + } + } + + ret = stickerd_db_set_group_image(app_id, group, type, uri); + if (ret != STICKERD_SERVER_ERROR_NONE) { + LOGE("Failed to set group image"); + return STICKERD_SERVER_ERROR_OPERATION_FAILED; + } + + return ret; +} + +int stickerd_get_group_image_list(GVariant *parameters, GVariant **reply_body) +{ + int ret; + GVariantBuilder *builder = NULL; + char *app_id = NULL; + + g_variant_get(parameters, "(&s)", &app_id); + + builder = g_variant_builder_new(G_VARIANT_TYPE("a(sis)")); + ret = stickerd_db_get_group_image_list(builder, app_id); + if (ret != STICKERD_SERVER_ERROR_NONE) { + LOGE("Failed to get sticker group image list"); + g_variant_builder_unref(builder); + return STICKERD_SERVER_ERROR_OPERATION_FAILED; + } + + *reply_body = g_variant_new("(a(sis))", builder); + g_variant_builder_unref(builder); + + if (*reply_body == NULL) { + LOGE("Failed to create reply_body"); + return STICKERD_SERVER_ERROR_OPERATION_FAILED; + } + + return ret; +} \ No newline at end of file diff --git a/server/stickerd_data_manager.h b/server/stickerd_data_manager.h index e6ac7e7..92dad03 100644 --- a/server/stickerd_data_manager.h +++ b/server/stickerd_data_manager.h @@ -52,6 +52,9 @@ int stickerd_insert_recent_sticker_info(GVariant *parameters, GVariant **reply_b int stickerd_get_recent_sticker_info(GVariant *parameters, GVariant **reply_body); int stickerd_send_update_event(GVariant *parameters, GVariant **reply_body); int stickerd_get_sticker_info_by_uri(GVariant *parameters, GVariant **reply_body); +int stickerd_check_group_exists(GVariant *parameters, GVariant **reply_body); +int stickerd_set_group_image(GVariant *parameters, GVariant **reply_body); +int stickerd_get_group_image_list(GVariant *parameters, GVariant **reply_body); #ifdef __cplusplus } diff --git a/server/stickerd_db_manager.c b/server/stickerd_db_manager.c index 85a778e..37e3172 100644 --- a/server/stickerd_db_manager.c +++ b/server/stickerd_db_manager.c @@ -58,6 +58,13 @@ * | history_id | sticker_info_id | count | timestamp | * +------------+-----------------+-------+-----------+ * + * * sticker_group_info + * +----------+--------+------------+------+------+ + * | INT | TEXT | TEXT | INT | TEXT | + * +----------+--------+------------+------+------+ + * | group_id | app_id | group_name | type | uri | + * +----------+--------+------------+------+------+ + * */ #define STICKER_DB_PATH tzplatform_mkpath(TZ_SYS_DB, ".sticker_info.db") @@ -65,10 +72,12 @@ #define STICKER_KEYWORD_INFO_CREATE_TABLE "CREATE TABLE IF NOT EXISTS sticker_keyword_info(keyword_id INTEGER PRIMARY KEY AUTOINCREMENT, sticker_info_id INTEGER, keyword TEXT NOT NULL, FOREIGN KEY (sticker_info_id) REFERENCES sticker_info(sticker_info_id) ON DELETE CASCADE)" #define STICKER_WHITELIST_INFO_CREATE_TABLE "CREATE TABLE IF NOT EXISTS sticker_whitelist_info(whitelist_id INTEGER PRIMARY KEY AUTOINCREMENT, provider_id TEXT NOT NULL, consumer_id TEXT NOT NULL)" #define STICKER_RECENT_HISTORY_INFO_CREATE_TABLE "CREATE TABLE IF NOT EXISTS sticker_recent_history_info(history_id INTEGER PRIMARY KEY AUTOINCREMENT, sticker_info_id INTEGER, count INTEGER NOT NULL, timestamp TEXT NOT NULL, FOREIGN KEY (sticker_info_id) REFERENCES sticker_info(sticker_info_id) ON DELETE CASCADE)" +#define STICKER_GROUP_INFO_CREATRE_TABLE "CREATE TABLE IF NOT EXISTS sticker_group_info(group_id INTEGER PRIMARY KEY AUTOINCREMENT, app_id TEXT NOT NULL, group_name TEXT NOT NULL, type INTEGER NOT NULL, uri TEXT NOT NULL)" #define STICKER_DB_INSERT_STICKER_INFO "INSERT INTO sticker_info (app_id, type, uri, thumbnail, description, group_name, date, display_type) VALUES (?, ?, ?, ?, ?, ?, DateTime('now','localtime'), ?)" #define STICKER_DB_INSERT_STICKER_KEYWORD_INFO "INSERT INTO sticker_keyword_info (sticker_info_id, keyword) VALUES (?, ?)" #define STICKER_DB_INSERT_RECENT_HISTORY "INSERT INTO sticker_recent_history_info (sticker_info_id, count, timestamp) VALUES (?, 1, DateTime('now','localtime'))" +#define STICKER_DB_INSERT_GROUP_IMAGE "INSERT INTO sticker_group_info (app_id, group_name, type, uri) VALUES (?, ?, ?, ?)" #define STICKER_DB_DELETE_STICKER_INFO "DELETE FROM sticker_info WHERE sticker_info_id = ?" #define STICKER_DB_DELETE_STICKER_KEYWORD_INFO "DELETE FROM sticker_keyword_info WHERE sticker_info_id = ?" @@ -81,6 +90,7 @@ #define STICKER_DB_UPDATE_STICKER_GROUP "UPDATE sticker_info SET group_name = ?, date = DateTime('now','localtime') WHERE sticker_info_id = ?" #define STICKER_DB_UPDATE_STICKER_DISP_TYPE "UPDATE sticker_info SET display_type = ?, date = DateTime('now','localtime') WHERE sticker_info_id = ?" #define STICKER_DB_UPDATE_RECENT_HISTORY "UPDATE sticker_recent_history_info SET count = count + 1, timestamp = DateTime('now','localtime') WHERE sticker_info_id = ?" +#define STICKER_DB_UPDATE_GROUP_IMAGE "UPDATE sticker_group_info SET type = ?, uri = ? WHERE app_id = ? AND group_name = ?" #define STICKER_DB_GET_LATEST_RECORD_ID "SELECT sticker_info_id FROM sticker_info ORDER BY sticker_info_id DESC LIMIT 1" #define STICKER_DB_GET_STICKER_INFO_BY_RECORD_ID "SELECT * FROM sticker_info WHERE sticker_info_id = ?" @@ -101,6 +111,9 @@ #define STICKER_DB_CHECK_RECENT_HISTORY_EXISTS "SELECT EXISTS(SELECT 1 FROM sticker_recent_history_info WHERE sticker_info_id = ? LIMIT 1)" #define STICKER_DB_GET_RECENT_HISTORY "SELECT sticker_info_id FROM sticker_recent_history_info ORDER BY datetime(timestamp) DESC LIMIT ?" #define STICKER_DB_GET_STICKER_INFO_BY_URI "SELECT * FROM sticker_info WHERE uri = ?" +#define STICKER_DB_CHECK_GROUP_EXISTS_IN_STICKER_INFO "SELECT EXISTS(SELECT 1 FROM sticker_info WHERE group_name = ? AND app_id = ? LIMIT 1)" +#define STICKER_DB_CHECK_GROUP_EXISTS_IN_GROUP_INFO "SELECT EXISTS(SELECT 1 FROM sticker_group_info WHERE group_name = ? AND app_id = ? LIMIT 1)" +#define STICKER_DB_GET_ALL_GROUP_IMAGE_LIST "SELECT group_name, type, uri FROM sticker_group_info WHERE app_id NOT IN (SELECT DISTINCT provider_id FROM sticker_whitelist_info WHERE provider_id NOT IN (SELECT provider_id FROM sticker_whitelist_info WHERE consumer_id = ?))" typedef enum { @@ -221,6 +234,13 @@ static int _recover_db(void) goto cleanup; } + ret = sqlite3_exec(db, STICKER_GROUP_INFO_CREATRE_TABLE, NULL, NULL, &err); + if (ret != SQLITE_OK) { + LOGE("Failed to create sticker_group_info table : %s", err); + ret = STICKERD_SERVER_ERROR_DB_FAILED; + goto cleanup; + } + is_corrupted = FALSE; cleanup: @@ -286,6 +306,13 @@ int stickerd_db_init(void) goto cleanup; } + ret = sqlite3_exec(db, STICKER_GROUP_INFO_CREATRE_TABLE, NULL, NULL, &err); + if (ret != SQLITE_OK) { + LOGE("Failed to create sticker_group_info table : %s", err); + ret = STICKERD_SERVER_ERROR_DB_FAILED; + goto cleanup; + } + ret = sqlite3_exec(db, "PRAGMA journal_mode = WAL", NULL, NULL, &err); if (ret != SQLITE_OK) { LOGE("Failed to set journal_mode : %s", err); @@ -338,6 +365,46 @@ static sqlite3 *_db_open(void) return db; } +static gboolean _check_group_exists(char *app_id, char *group) +{ + int ret; + gboolean result = FALSE; + sqlite3 *db = NULL; + sqlite3_stmt *stmt = NULL; + + db = _db_open(); + if (!db) + return FALSE; + + ret = sqlite3_prepare_v2(db, STICKER_DB_CHECK_GROUP_EXISTS_IN_GROUP_INFO, -1, &stmt, NULL); + if (ret != SQLITE_OK) { + LOGE("fail to check group exists : %s", sqlite3_errmsg(db)); + goto cleanup; + } + + sqlite3_bind_text(stmt, 1, group, -1, SQLITE_TRANSIENT); + sqlite3_bind_text(stmt, 2, app_id, -1, SQLITE_TRANSIENT); + + ret = sqlite3_step(stmt); + if (ret == SQLITE_ERROR) { + LOGE("sqlite3_step() failed : ret(%d)", ret); + goto cleanup; + } + + result = sqlite3_column_int(stmt, 0); + + sqlite3_finalize(stmt); + sqlite3_close(db); + + return result; + +cleanup: + sqlite3_finalize(stmt); + sqlite3_close(db); + + return FALSE; +} + int stickerd_db_insert_sticker_info(int *record_id, sticker_info_db *sticker_info) { int ret; @@ -1094,4 +1161,130 @@ cleanup: sqlite3_close(db); return STICKERD_SERVER_ERROR_DB_FAILED; +} + +int stickerd_db_check_group_exists(int *result, char *app_id, char *group) +{ + int ret; + sqlite3 *db = NULL; + sqlite3_stmt *stmt = NULL; + + db = _db_open(); + if (!db) + return STICKERD_SERVER_ERROR_DB_FAILED; + + ret = sqlite3_prepare_v2(db, STICKER_DB_CHECK_GROUP_EXISTS_IN_STICKER_INFO, -1, &stmt, NULL); + if (ret != SQLITE_OK) { + LOGE("fail to check group exists : %s", sqlite3_errmsg(db)); + goto cleanup; + } + + sqlite3_bind_text(stmt, 1, group, -1, SQLITE_TRANSIENT); + sqlite3_bind_text(stmt, 2, app_id, -1, SQLITE_TRANSIENT); + + ret = sqlite3_step(stmt); + if (ret == SQLITE_ERROR) { + LOGE("sqlite3_step() failed : ret(%d)", ret); + goto cleanup; + } + + *result = sqlite3_column_int(stmt, 0); + + sqlite3_finalize(stmt); + sqlite3_close(db); + + return STICKERD_SERVER_ERROR_NONE; + +cleanup: + sqlite3_finalize(stmt); + sqlite3_close(db); + + return STICKERD_SERVER_ERROR_DB_FAILED; +} + +int stickerd_db_set_group_image(char *app_id, char *group, int type, char *uri) +{ + int ret; + gboolean is_exist = FALSE; + sqlite3 *db = NULL; + sqlite3_stmt *stmt = NULL; + + db = _db_open(); + if (!db) + return STICKERD_SERVER_ERROR_DB_FAILED; + + is_exist = _check_group_exists(app_id, group); + const char* query = is_exist ? STICKER_DB_UPDATE_GROUP_IMAGE : STICKER_DB_INSERT_GROUP_IMAGE; + ret = sqlite3_prepare_v2(db, query, -1, &stmt, NULL); + if (ret != SQLITE_OK) { + LOGE("fail to set group image : %s", sqlite3_errmsg(db)); + goto cleanup; + } + + if (is_exist) { + sqlite3_bind_int(stmt, 1, type); + sqlite3_bind_text(stmt, 2, uri, -1, SQLITE_TRANSIENT); + sqlite3_bind_text(stmt, 3, app_id, -1, SQLITE_TRANSIENT); + sqlite3_bind_text(stmt, 4, group, -1, SQLITE_TRANSIENT); + } else { + sqlite3_bind_text(stmt, 1, app_id, -1, SQLITE_TRANSIENT); + sqlite3_bind_text(stmt, 2, group, -1, SQLITE_TRANSIENT); + sqlite3_bind_int(stmt, 3, type); + sqlite3_bind_text(stmt, 4, uri, -1, SQLITE_TRANSIENT); + } + + ret = sqlite3_step(stmt); + if (ret == SQLITE_ERROR) { + LOGE("sqlite3_step() failed : ret(%d)", ret); + goto cleanup; + } + + sqlite3_finalize(stmt); + sqlite3_close(db); + + return STICKERD_SERVER_ERROR_NONE; + +cleanup: + sqlite3_finalize(stmt); + sqlite3_close(db); + + return STICKERD_SERVER_ERROR_DB_FAILED; +} + +int stickerd_db_get_group_image_list(GVariantBuilder *builder, char *app_id) +{ + int ret; + sqlite3 *db = NULL; + sqlite3_stmt *stmt = NULL; + + db = _db_open(); + if (!db) + return STICKERD_SERVER_ERROR_DB_FAILED; + + ret = sqlite3_prepare_v2(db, STICKER_DB_GET_ALL_GROUP_IMAGE_LIST, -1, &stmt, NULL); + if (ret != SQLITE_OK) { + LOGE("fail to get group image list : %s", sqlite3_errmsg(db)); + goto cleanup; + } + + sqlite3_bind_text(stmt, 1, app_id, -1, SQLITE_TRANSIENT); + + while (sqlite3_step(stmt) == SQLITE_ROW) { + const unsigned char *group = sqlite3_column_text(stmt, 0); + int uri_type = sqlite3_column_int(stmt, 1); + const unsigned char *uri = sqlite3_column_text(stmt, 2); + if (group && uri) + g_variant_builder_add(builder, "(sis)", strdup((const char *)group), uri_type, strdup((const char *)uri)); + } + + sqlite3_finalize(stmt); + sqlite3_close(db); + + return STICKERD_SERVER_ERROR_NONE; + +cleanup: + sqlite3_finalize(stmt); + sqlite3_close(db); + + return STICKERD_SERVER_ERROR_DB_FAILED; } \ No newline at end of file diff --git a/server/stickerd_db_manager.h b/server/stickerd_db_manager.h index 53c1e42..b9e8cf3 100644 --- a/server/stickerd_db_manager.h +++ b/server/stickerd_db_manager.h @@ -64,6 +64,9 @@ int stickerd_db_get_group_list_by_display_type(GVariantBuilder *builder, char *a int stickerd_db_check_file_exists(int *result, char *uri); int stickerd_db_insert_recent_sticker_info(int record_id); int stickerd_db_get_sticker_info_by_uri(char *uri, sticker_info_db *sticker_info); +int stickerd_db_check_group_exists(int *result, char *app_id, char *group); +int stickerd_db_set_group_image(char *app_id, char *group, int type, char *uri); +int stickerd_db_get_group_image_list(GVariantBuilder *builder, char *app_id); #ifdef __cplusplus } diff --git a/sticker-parser/sticker-parser.c b/sticker-parser/sticker-parser.c index 71b7a0d..af9e3cc 100644 --- a/sticker-parser/sticker-parser.c +++ b/sticker-parser/sticker-parser.c @@ -46,6 +46,7 @@ #define STICKER_KEYWORD_INFO_CREATE_TABLE "CREATE TABLE IF NOT EXISTS sticker_keyword_info(keyword_id INTEGER PRIMARY KEY AUTOINCREMENT, sticker_info_id INTEGER, keyword TEXT NOT NULL, FOREIGN KEY (sticker_info_id) REFERENCES sticker_info(sticker_info_id) ON DELETE CASCADE)" #define STICKER_WHITELIST_INFO_CREATE_TABLE "CREATE TABLE IF NOT EXISTS sticker_whitelist_info(whitelist_id INTEGER PRIMARY KEY AUTOINCREMENT, provider_id TEXT NOT NULL, consumer_id TEXT NOT NULL)" #define STICKER_RECENT_HISTORY_INFO_CREATE_TABLE "CREATE TABLE IF NOT EXISTS sticker_recent_history_info(history_id INTEGER PRIMARY KEY AUTOINCREMENT, sticker_info_id INTEGER, count INTEGER NOT NULL, timestamp TEXT NOT NULL, FOREIGN KEY (sticker_info_id) REFERENCES sticker_info(sticker_info_id) ON DELETE CASCADE)" +#define STICKER_GROUP_INFO_CREATRE_TABLE "CREATE TABLE IF NOT EXISTS sticker_group_info(group_id INTEGER PRIMARY KEY AUTOINCREMENT, app_id TEXT NOT NULL, group_name TEXT NOT NULL, type INTEGER NOT NULL, uri TEXT NOT NULL)" #define UIFW_ID 502 #define APPFW_ID 301 #define MAX_ERROR_BUFFER 256 @@ -138,6 +139,12 @@ static void __recover_db() goto cleanup; } + ret = sqlite3_exec(db, STICKER_GROUP_INFO_CREATRE_TABLE, NULL, NULL, &err); + if (ret != SQLITE_OK) { + LOGE("Failed to create sticker_recent_history_info table : %s", err); + goto cleanup; + } + is_corrupted = FALSE; cleanup: @@ -200,6 +207,12 @@ static void __db_init() goto cleanup; } + ret = sqlite3_exec(db, STICKER_GROUP_INFO_CREATRE_TABLE, NULL, NULL, &err); + if (ret != SQLITE_OK) { + LOGE("Failed to create sticker_recent_history_info table : %s", err); + goto cleanup; + } + ret = sqlite3_exec(db, "PRAGMA journal_mode = WAL", NULL, NULL, &err); if (ret != SQLITE_OK) { LOGE("Failed to set journal_mode : %s", err); @@ -822,6 +835,47 @@ cleanup: return; } +static void __delete_group_info(const char *db_path, const char *app_id) +{ + int ret; + sqlite3 *db = NULL; + sqlite3_stmt *stmt = NULL; + + db = __db_open(db_path); + if (!db) + return; + + ret = sqlite3_prepare_v2(db, "DELETE FROM sticker_group_info WHERE app_id = ?", -1, &stmt, NULL); + if (ret != SQLITE_OK) { + LOGE("failed to delete group information : %s", sqlite3_errmsg(db)); + sqlite3_finalize(stmt); + sqlite3_close(db); + goto cleanup; + } + + sqlite3_bind_text(stmt, 1, app_id, -1, SQLITE_TRANSIENT); + + ret = sqlite3_step(stmt); + if (ret != SQLITE_OK && ret != SQLITE_DONE) { + LOGE("sqlite3_step() failed : ret(%d)", ret); + goto cleanup; + } + + if (sqlite3_changes(db) == 0) { + LOGE("No changes to DB"); + goto cleanup; + } + + sqlite3_finalize(stmt); + sqlite3_close(db); + return; + +cleanup: + sqlite3_finalize(stmt); + sqlite3_close(db); + return; +} + static int __remove_directory(const char *path, int is_error_stop) { DIR *dir_ptr = NULL; @@ -966,6 +1020,7 @@ int PKGMGR_MDPARSER_PLUGIN_UNINSTALL(const char *pkgid, const char *appid, GList } __delete_sticker_allowlist(db_path, appid); + __delete_group_info(db_path, appid); return 0; } -- 2.7.4