Added temporary solution to change sticker directory
[platform/core/uifw/capi-ui-sticker.git] / server / stickerd_data_manager.c
index 9e6455c..1be9971 100644 (file)
@@ -39,7 +39,7 @@
 #endif
 #define LOG_TAG "STICKERD_DATA_MANAGER"
 
-#define STICKER_DIRECTORY tzplatform_mkpath(TZ_SYS_SHARE, "sticker-data")
+#define STICKER_DIRECTORY "/opt/usr/share/sticker-data"
 #define MAX_ERROR_BUFFER  256
 
 static GHashTable *_monitoring_hash = NULL;
@@ -164,6 +164,8 @@ static void _stickerd_client_dbus_method_call_handler(GDBusConnection *conn, con
         ret = stickerd_get_recent_sticker_info(parameters, &reply_body);
     } else if (g_strcmp0(method_name, "send_update_event") == 0) {
         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);
     }
 
     if (ret == STICKERD_SERVER_ERROR_NONE) {
@@ -345,6 +347,12 @@ int stickerd_register_dbus_interface(void)
             "        <method name='send_update_event'>"
             "          <arg type='i' name='record_id' direction='in'/>"
             "        </method>"
+
+            "        <method name='get_sticker_info_by_uri'>"
+            "          <arg type='s' name='uri' direction='in'/>"
+            "          <arg type='a{iv}' name='sticker_info' direction='out'/>"
+            "          <arg type='a(s)' name='keyword_list' direction='out'/>"
+            "        </method>"
             "  </interface>"
             "  </node>";
 
@@ -869,12 +877,15 @@ int stickerd_insert_sticker_info_by_json(GVariant *parameters, GVariant **reply_
             }
 
             sticker_info->app_id = strdup(app_id);
+            if (!sticker_info->app_id)
+                goto free_memory;
+
             sticker_info->type = _get_int_from_object(info_object, "type");
             if (sticker_info->type < 1)
                 goto free_memory;
 
             sticker_info->uri = _get_string_from_object(info_object, "uri");
-            if (!sticker_info->uri || sticker_info->uri[0] != '\0')
+            if (!sticker_info->uri || sticker_info->uri[0] == '\0')
                 goto free_memory;
 
             if (sticker_info->type == 1) {
@@ -1773,4 +1784,57 @@ int stickerd_send_update_event(GVariant *parameters, GVariant **reply_body)
     }
 
     return ret;
+}
+
+int stickerd_get_sticker_info_by_uri(GVariant *parameters, GVariant **reply_body)
+{
+    int ret;
+    char *uri = NULL;
+    GVariantBuilder *info_builder;
+    GVariantBuilder *keyword_builder;
+
+    g_variant_get(parameters, "(&s)", &uri);
+
+    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_uri(uri, sticker_info);
+    if (ret != STICKERD_SERVER_ERROR_NONE) {
+        LOGE("Failed to get sticker info");
+        ret = STICKERD_SERVER_ERROR_OPERATION_FAILED;
+        goto cleanup;
+    }
+
+    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(sticker_info->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));
+    g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_DISP_TYPE, g_variant_new_int32(sticker_info->display_type));
+
+    keyword_builder = g_variant_builder_new(G_VARIANT_TYPE("a(s)"));
+    g_list_foreach(sticker_info->keyword, (GFunc) _set_keyword_builder, keyword_builder);
+
+    *reply_body = g_variant_new("(a{iv}a(s))", info_builder, keyword_builder);
+    g_variant_builder_unref(info_builder);
+    g_variant_builder_unref(keyword_builder);
+
+    if (*reply_body == NULL) {
+        LOGE("Failed to create reply_body");
+        ret = STICKERD_SERVER_ERROR_OPERATION_FAILED;
+    }
+
+cleanup:
+    if (sticker_info) {
+        _free_sticker_data(sticker_info);
+        sticker_info = NULL;
+    }
+
+    return ret;
 }
\ No newline at end of file