#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;
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) {
" <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>";
}
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) {
}
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