Update package version to 0.1.68
[platform/core/uifw/capi-ui-sticker.git] / provider / sticker_provider.c
index f600adb..bbac999 100644 (file)
@@ -73,8 +73,9 @@ static void _free_sticker_data(sticker_data_h sticker_data)
 
 EXPORT_API int sticker_provider_create(sticker_provider_h *provider_handle)
 {
-    int ret;
+    CHECK_STICKER_FEATURE();
 
+    int ret;
     if (!provider_handle)
         return STICKER_ERROR_INVALID_PARAMETER;
 
@@ -86,9 +87,11 @@ EXPORT_API int sticker_provider_create(sticker_provider_h *provider_handle)
     ret = sticker_dbus_init(&provider_struct->gdbus_connection, &provider_struct->server_watcher_id,
         &provider_struct->monitor_id, &provider_struct->server_monitor_id, STICKER_CLIENT_LIB_PROVIDER, (void *)provider_struct);
     if (ret != STICKER_ERROR_NONE) {
+        //LCOV_EXCL_START
         LOGE("Failed to initialize dbus : %d", ret);
         free(provider_struct);
         return STICKER_ERROR_OPERATION_FAILED;
+        //LCOV_EXCL_STOP
     }
 
     *provider_handle = provider_struct;
@@ -98,17 +101,21 @@ EXPORT_API int sticker_provider_create(sticker_provider_h *provider_handle)
 
 EXPORT_API int sticker_provider_destroy(sticker_provider_h provider_handle)
 {
-    LOGD("provider_handle : %p", provider_handle);
-    int ret;
+    CHECK_STICKER_FEATURE();
 
+    int ret;
     if (!provider_handle)
         return STICKER_ERROR_INVALID_PARAMETER;
 
-    ret = sticker_dbus_shutdown(provider_handle->gdbus_connection, &provider_handle->server_monitor_id, &provider_handle->monitor_id);
+    LOGD("provider_handle : %p", provider_handle);
+    ret = sticker_dbus_shutdown(provider_handle->gdbus_connection, &provider_handle->server_watcher_id,
+                                &provider_handle->server_monitor_id, &provider_handle->monitor_id, STICKER_CLIENT_LIB_PROVIDER);
     if (ret != STICKER_ERROR_NONE) {
+        //LCOV_EXCL_START
         LOGE("Failed to finalize dbus : %d", ret);
         free(provider_handle);
         return STICKER_ERROR_OPERATION_FAILED;
+        //LCOV_EXCL_STOP
     }
 
     if (provider_handle->gdbus_connection)
@@ -121,22 +128,60 @@ EXPORT_API int sticker_provider_destroy(sticker_provider_h provider_handle)
 
 EXPORT_API int sticker_provider_insert_data(sticker_provider_h provider_handle, sticker_data_h data_handle)
 {
+    CHECK_STICKER_FEATURE();
+
     int ret;
+    int is_exist = 0;
 
-    if (!provider_handle || !data_handle || (data_handle->sticker_info_id > 0))
+    if (!provider_handle || !data_handle || (data_handle->sticker_info_id > 0) || !data_handle->uri)
         return STICKER_ERROR_INVALID_PARAMETER;
 
+    int len = strlen(STICKER_DIRECTORY) + strlen(data_handle->app_id) + strlen(data_handle->uri) + 3;
+    char *new_path = (char *)calloc(len, sizeof(char));
+    if (!new_path) {
+        return STICKER_ERROR_OUT_OF_MEMORY;
+    }
+
+    if (data_handle->uri[0] == '/')
+        snprintf(new_path, len, "%s/%s%s",STICKER_DIRECTORY, data_handle->app_id, data_handle->uri);
+    else
+        snprintf(new_path, len, "%s/%s/%s",STICKER_DIRECTORY, data_handle->app_id, data_handle->uri);
+
+    ret = sticker_dbus_check_file_exists(provider_handle->gdbus_connection, new_path, &is_exist);
+    if (ret != STICKER_ERROR_NONE) {
+        LOGE("Failed to check file exists : %d", ret);
+        ret = STICKER_ERROR_OPERATION_FAILED;
+        goto cleanup;
+    }
+
+    if (is_exist) {
+        LOGE("Sticker already exists");
+        ret = STICKER_ERROR_FILE_EXISTS;
+        goto cleanup;
+    }
+
     ret = sticker_dbus_insert_sticker_info(provider_handle->gdbus_connection, data_handle);
     if (ret != STICKER_ERROR_NONE) {
         LOGE("Failed to insert sticker information : %d", ret);
-        return STICKER_ERROR_OPERATION_FAILED;
+        if (ret == STICKER_CLIENT_ERROR_NO_SUCH_FILE)
+            ret = STICKER_ERROR_NO_SUCH_FILE;
+        else
+            ret = STICKER_ERROR_OPERATION_FAILED;
     }
 
-    return STICKER_ERROR_NONE;
+cleanup:
+    if (new_path) {
+        free(new_path);
+        new_path = NULL;
+    }
+
+    return ret;
 }
 
-EXPORT_API int sticker_privider_insert_data_by_json_file(sticker_provider_h provider_handle, const char *json_path, sticker_provider_insert_finished_cb callback, void *user_data)
+EXPORT_API int sticker_provider_insert_data_by_json_file(sticker_provider_h provider_handle, const char *json_path, sticker_provider_insert_finished_cb callback, void *user_data)
 {
+    CHECK_STICKER_FEATURE();
+
     int ret;
     char *app_id = NULL;
     package_info_h package_info = NULL;
@@ -148,7 +193,7 @@ EXPORT_API int sticker_privider_insert_data_by_json_file(sticker_provider_h prov
 
     ret = app_get_id(&app_id);
     if (ret != APP_ERROR_NONE) {
-        LOGE("Failed to get app_id : %d", ret);
+        LOGE("Failed to get app_id : %d", ret); //LCOV_EXCL_LINE
         ret = STICKER_ERROR_OPERATION_FAILED;
         goto cleanup;
     }
@@ -156,14 +201,14 @@ EXPORT_API int sticker_privider_insert_data_by_json_file(sticker_provider_h prov
     if (access(json_path, F_OK) != 0) {
         ret = package_info_create(app_id, &package_info);
         if (ret != PACKAGE_MANAGER_ERROR_NONE || package_info == NULL) {
-            LOGE("faild to create package_info. ret: %d", ret);
+            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("faild to create package_info. ret: %d", ret);
+            LOGE("failed to create package_info. ret: %d", ret); //LCOV_EXCL_LINE
             ret = STICKER_ERROR_OPERATION_FAILED;
             goto cleanup;
         }
@@ -171,7 +216,7 @@ EXPORT_API int sticker_privider_insert_data_by_json_file(sticker_provider_h prov
         int path_len = strlen(app_path) + strlen(json_path) + 2;
         file_path = (char *)calloc(path_len, sizeof(char));
         if (!file_path) {
-            LOGE("failed to alloc memory");
+            LOGE("failed to alloc memory"); //LCOV_EXCL_LINE
             ret = STICKER_ERROR_OPERATION_FAILED;
             goto cleanup;
         }
@@ -193,7 +238,8 @@ EXPORT_API int sticker_privider_insert_data_by_json_file(sticker_provider_h prov
     ret = sticker_dbus_insert_sticker_info_by_json(provider_handle->gdbus_connection, app_id, file_path);
     if (ret != STICKER_ERROR_NONE) {
         LOGE("Failed to load json file : %d", ret);
-        return STICKER_ERROR_OPERATION_FAILED;
+        ret = STICKER_ERROR_OPERATION_FAILED;
+        goto cleanup;
     }
 
     provider_handle->insert_finished_cb = callback;
@@ -217,15 +263,23 @@ cleanup:
 
 EXPORT_API int sticker_provider_update_data(sticker_provider_h provider_handle, sticker_data_h data_handle)
 {
-    int ret;
+    CHECK_STICKER_FEATURE();
 
+    int ret;
     if (!provider_handle || !data_handle || (data_handle->sticker_info_id <= 0))
         return STICKER_ERROR_INVALID_PARAMETER;
 
     ret = sticker_dbus_update_sticker_info(provider_handle->gdbus_connection, data_handle);
     if (ret != STICKER_ERROR_NONE) {
+        //LCOV_EXCL_START
         LOGE("Failed to update sticker information : %d", ret);
-        return STICKER_ERROR_OPERATION_FAILED;
+        if (ret == STICKER_CLIENT_ERROR_FILE_EXISTS)
+            return STICKER_ERROR_FILE_EXISTS;
+        else if (ret == STICKER_CLIENT_ERROR_NO_SUCH_FILE)
+            return STICKER_ERROR_NO_SUCH_FILE;
+        else
+            return STICKER_ERROR_OPERATION_FAILED;
+        //LCOV_EXCL_STOP
     }
 
     return STICKER_ERROR_NONE;
@@ -233,9 +287,10 @@ EXPORT_API int sticker_provider_update_data(sticker_provider_h provider_handle,
 
 EXPORT_API int sticker_provider_delete_data(sticker_provider_h provider_handle, sticker_data_h data_handle)
 {
-    int ret;
+    CHECK_STICKER_FEATURE();
 
-    if (!provider_handle || (data_handle->sticker_info_id <= 0))
+    int ret;
+    if (!provider_handle || !data_handle || (data_handle->sticker_info_id <= 0))
         return STICKER_ERROR_INVALID_PARAMETER;
 
     ret = sticker_dbus_delete_sticker_info(provider_handle->gdbus_connection, data_handle->sticker_info_id);
@@ -249,15 +304,17 @@ EXPORT_API int sticker_provider_delete_data(sticker_provider_h provider_handle,
 
 EXPORT_API int sticker_provider_get_sticker_count(sticker_provider_h provider_handle, int *count)
 {
+    CHECK_STICKER_FEATURE();
+
     int ret;
     char *app_id = NULL;
 
-    if (!provider_handle)
+    if (!provider_handle || !count)
         return STICKER_ERROR_INVALID_PARAMETER;
 
     ret = app_get_id(&app_id);
     if (ret != APP_ERROR_NONE) {
-        LOGE("Failed to get app_id : %d", ret);
+        LOGE("Failed to get app_id : %d", ret); //LCOV_EXCL_LINE
         ret = STICKER_ERROR_OPERATION_FAILED;
         goto cleanup;
     }
@@ -277,6 +334,8 @@ cleanup:
 
 EXPORT_API 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)
 {
+    CHECK_STICKER_FEATURE();
+
     int ret;
     int info_id;
     int sticker_count = 0;
@@ -288,7 +347,7 @@ EXPORT_API int sticker_provider_data_foreach_all(sticker_provider_h provider_han
 
     ret = app_get_id(&app_id);
     if (ret != APP_ERROR_NONE) {
-        LOGE("Failed to get app_id : %d", ret);
+        LOGE("Failed to get app_id : %d", ret); //LCOV_EXCL_LINE
         ret = STICKER_ERROR_OPERATION_FAILED;
         goto cleanup;
     }
@@ -330,4 +389,34 @@ cleanup:
         g_variant_iter_free(id_iter);
 
     return ret;
-}
\ No newline at end of file
+}
+
+EXPORT_API int sticker_provider_delete_data_by_uri(sticker_provider_h provider_handle, const char *uri)
+{
+    CHECK_STICKER_FEATURE();
+
+    int ret;
+    int is_exist = 0;
+
+    if (!provider_handle || !uri)
+        return STICKER_ERROR_INVALID_PARAMETER;
+
+    ret = sticker_dbus_check_file_exists(provider_handle->gdbus_connection, uri, &is_exist);
+    if (ret != STICKER_ERROR_NONE) {
+        LOGE("Failed to check file exists : %d", ret);
+        return STICKER_ERROR_OPERATION_FAILED;
+    }
+
+    if (!is_exist) {
+        LOGE("Sticker does not exist");
+        return STICKER_ERROR_NO_SUCH_FILE;
+    }
+
+    ret = sticker_dbus_delete_sticker_info_by_uri(provider_handle->gdbus_connection, uri);
+    if (ret != STICKER_ERROR_NONE) {
+        LOGE("Failed to delete sticker information : %d", ret);
+        return STICKER_ERROR_OPERATION_FAILED;
+    }
+
+    return STICKER_ERROR_NONE;
+}