2 * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 #include <tzplatform_config.h>
21 #include <gio/gunixfdlist.h>
23 #include <json-glib/json-glib.h>
24 #include <package_manager.h>
26 #include <sys/types.h>
31 #include "stickerd_dbus.h"
32 #include "stickerd_data_manager.h"
33 #include "stickerd_db_manager.h"
34 #include "sticker_defs.h"
35 #include "stickerd_error.h"
40 #define LOG_TAG "STICKERD_DATA_MANAGER"
42 #define STICKER_DIRECTORY tzplatform_mkpath(TZ_SYS_SHARE, "sticker-data")
43 #define MAX_ERROR_BUFFER 256
45 static GHashTable *_monitoring_hash = NULL;
46 static char error_buffer[MAX_ERROR_BUFFER];
47 extern GMainLoop *main_loop;
49 static void _check_watcher_exist()
51 if (_monitoring_hash != NULL && g_hash_table_size(_monitoring_hash) == 0) {
52 LOGD("Terminate sticker daemon");
53 g_hash_table_destroy(_monitoring_hash);
54 _monitoring_hash = NULL;
55 g_main_loop_quit(main_loop);
59 static void _on_name_appeared(GDBusConnection *connection,
61 const gchar *name_owner,
64 LOGD("name: %s", name);
67 static void _on_name_vanished(GDBusConnection *connection,
71 monitoring_info_s *info = (monitoring_info_s *)user_data;
74 if (_monitoring_hash != NULL && g_hash_table_lookup(_monitoring_hash, GUINT_TO_POINTER(info->watcher_id)) != NULL) {
75 LOGD("name: %s", name);
76 g_bus_unwatch_name(info->watcher_id);
77 delete_monitoring_list(&_monitoring_hash, info->bus_name, info->watcher_id);
86 _check_watcher_exist();
89 static void _stickerd_client_dbus_method_call_handler(GDBusConnection *conn, const gchar *sender, const gchar *object_path,
90 const gchar *iface_name, const gchar *method_name, GVariant *parameters, GDBusMethodInvocation *invocation,
93 LOGD("stickerd method_name: %s, sender: %s", method_name, sender);
95 if (_monitoring_hash == NULL)
96 _monitoring_hash = g_hash_table_new(g_direct_hash, g_direct_equal);
98 GVariant *reply_body = NULL;
99 int ret = STICKERD_SERVER_ERROR_OPERATION_FAILED;
101 if (g_strcmp0(method_name, "sticker_service_register") == 0) {
102 ret = stickerd_server_register(parameters, &reply_body, sender,
103 _on_name_appeared, _on_name_vanished, &_monitoring_hash);
104 } else if (g_strcmp0(method_name, "sticker_service_unregister") == 0) {
105 ret = stickerd_server_unregister(parameters, &reply_body, sender, &_monitoring_hash);
106 } else if (g_strcmp0(method_name, "insert_sticker_info") == 0) {
107 ret = stickerd_insert_sticker_info(parameters, &reply_body);
108 } else if (g_strcmp0(method_name, "update_sticker_info_by_json") == 0) {
109 ret = stickerd_insert_sticker_info_by_json(parameters, &reply_body, sender);
110 } else if (g_strcmp0(method_name, "delete_sticker_info") == 0) {
111 ret = stickerd_del_sticker_info(parameters, &reply_body);
112 } else if (g_strcmp0(method_name, "delete_sticker_info_by_uri") == 0) {
113 ret = stickerd_del_sticker_info_by_uri(parameters, &reply_body);
114 } else if (g_strcmp0(method_name, "update_sticker_type") == 0) {
115 ret = stickerd_update_sticker_type(parameters, &reply_body);
116 } else if (g_strcmp0(method_name, "update_sticker_uri") == 0) {
117 ret = stickerd_update_sticker_uri(parameters, &reply_body);
118 } else if (g_strcmp0(method_name, "update_sticker_thumbnail") == 0) {
119 ret = stickerd_update_sticker_thumbnail(parameters, &reply_body);
120 } else if (g_strcmp0(method_name, "update_sticker_description") == 0) {
121 ret = stickerd_update_sticker_description(parameters, &reply_body);
122 } else if (g_strcmp0(method_name, "update_sticker_group") == 0) {
123 ret = stickerd_update_sticker_group(parameters, &reply_body);
124 } else if (g_strcmp0(method_name, "update_sticker_keyword") == 0) {
125 ret = stickerd_update_sticker_keyword(parameters, &reply_body);
126 } else if (g_strcmp0(method_name, "get_sticker_info") == 0) {
127 ret = stickerd_get_sticker_info(parameters, &reply_body);
128 } else if (g_strcmp0(method_name, "get_group_list") == 0) {
129 ret = stickerd_get_group_list(parameters, &reply_body);
130 } else if (g_strcmp0(method_name, "get_keyword_list") == 0) {
131 ret = stickerd_get_keyword_list(parameters, &reply_body);
132 } else if (g_strcmp0(method_name, "get_sticker_count") == 0) {
133 ret = stickerd_get_sticker_count(parameters, &reply_body);
134 } else if (g_strcmp0(method_name, "get_all_sticker_info") == 0) {
135 ret = stickerd_get_all_sticker_info(parameters, &reply_body);
136 } else if (g_strcmp0(method_name, "get_sticker_info_by_appid") == 0) {
137 ret = stickerd_get_sticker_info_by_app_id(parameters, &reply_body);
138 } else if (g_strcmp0(method_name, "get_sticker_info_by_type") == 0) {
139 ret = stickerd_get_sticker_info_by_type(parameters, &reply_body);
140 } else if (g_strcmp0(method_name, "get_sticker_info_by_group") == 0) {
141 ret = stickerd_get_sticker_info_by_group(parameters, &reply_body);
142 } else if (g_strcmp0(method_name, "get_sticker_info_by_keyword") == 0) {
143 ret = stickerd_get_sticker_info_by_keyword(parameters, &reply_body);
144 } else if (g_strcmp0(method_name, "get_sticker_info_by_disp_type") == 0) {
145 ret = stickerd_get_sticker_info_by_display_type(parameters, &reply_body);
146 } else if (g_strcmp0(method_name, "get_group_list_by_disp_type") == 0) {
147 ret = stickerd_get_group_list_by_disp_type(parameters, &reply_body);
148 } else if (g_strcmp0(method_name, "update_sticker_disp_type") == 0) {
149 ret = stickerd_update_sticker_disp_type(parameters, &reply_body);
150 } else if (g_strcmp0(method_name, "check_file_exists") == 0) {
151 ret = stickerd_check_file_exists(parameters, &reply_body);
154 if (ret == STICKERD_SERVER_ERROR_NONE) {
155 LOGD("method_call successful, method_name : %s", method_name);
156 g_dbus_method_invocation_return_value(invocation, reply_body);
158 LOGE("method_call failed, method_name : %s", method_name);
159 g_dbus_method_invocation_return_error(invocation, G_DBUS_ERROR, ret, "sticker error");
162 _check_watcher_exist();
165 static const GDBusInterfaceVTable _sticker_interface_vtable = {
166 _stickerd_client_dbus_method_call_handler,
171 int stickerd_register_dbus_interface(void)
173 static gchar introspection_xml[] =
175 " <interface name='org.tizen.sticker_service'>"
176 " <method name='sticker_service_register'>"
177 " <arg type='i' name='watcher_id' direction='out'/>"
180 " <method name='sticker_service_unregister'>"
181 " <arg type='i' name='watcher_id' direction='in'/>"
184 " <method name='insert_sticker_info'>"
185 " <arg type='a{iv}' name='sticker_info' direction='in'/>"
186 " <arg type='a(s)' name='keyword_list' direction='in'/>"
187 " <arg type='i' name='record_id' direction='out'/>"
190 " <method name='update_sticker_info_by_json'>"
191 " <arg type='s' name='app_id' direction='in'/>"
192 " <arg type='s' name='json_path' direction='in'/>"
195 " <method name='delete_sticker_info'>"
196 " <arg type='i' name='record_id' direction='in'/>"
199 " <method name='delete_sticker_info_by_uri'>"
200 " <arg type='s' name='uri' direction='in'/>"
203 " <method name='update_sticker_type'>"
204 " <arg type='i' name='record_id' direction='in'/>"
205 " <arg type='i' name='type' direction='in'/>"
208 " <method name='update_sticker_uri'>"
209 " <arg type='i' name='record_id' direction='in'/>"
210 " <arg type='s' name='app_id' direction='in'/>"
211 " <arg type='i' name='type' direction='in'/>"
212 " <arg type='s' name='uri' direction='in'/>"
215 " <method name='update_sticker_thumbnail'>"
216 " <arg type='i' name='record_id' direction='in'/>"
217 " <arg type='s' name='app_id' direction='in'/>"
218 " <arg type='s' name='thumbnail' direction='in'/>"
221 " <method name='update_sticker_description'>"
222 " <arg type='i' name='record_id' direction='in'/>"
223 " <arg type='s' name='description' direction='in'/>"
226 " <method name='update_sticker_group'>"
227 " <arg type='i' name='record_id' direction='in'/>"
228 " <arg type='s' name='group' direction='in'/>"
231 " <method name='update_sticker_keyword'>"
232 " <arg type='i' name='record_id' direction='in'/>"
233 " <arg type='a(s)' name='keyword' direction='in'/>"
236 " <method name='get_sticker_info'>"
237 " <arg type='i' name='record_id' direction='in'/>"
238 " <arg type='a{iv}' name='sticker_info' direction='out'/>"
239 " <arg type='a(s)' name='keyword_list' direction='out'/>"
242 " <method name='get_group_list'>"
243 " <arg type='s' name='app_id' direction='in'/>"
244 " <arg type='a(s)' name='group_list' direction='out'/>"
247 " <method name='get_keyword_list'>"
248 " <arg type='s' name='app_id' direction='in'/>"
249 " <arg type='a(s)' name='keyword_list' direction='out'/>"
252 " <method name='get_sticker_count'>"
253 " <arg type='s' name='app_id' direction='in'/>"
254 " <arg type='i' name='count' direction='out'/>"
257 " <method name='get_all_sticker_info'>"
258 " <arg type='s' name='app_id' direction='in'/>"
259 " <arg type='i' name='offset' direction='in'/>"
260 " <arg type='i' name='count' direction='in'/>"
261 " <arg type='a(i)' name='id_list' direction='out'/>"
264 " <method name='get_sticker_info_by_appid'>"
265 " <arg type='s' name='app_id' direction='in'/>"
266 " <arg type='i' name='offset' direction='in'/>"
267 " <arg type='i' name='count' direction='in'/>"
268 " <arg type='a(i)' name='id_list' direction='out'/>"
271 " <method name='get_sticker_info_by_type'>"
272 " <arg type='s' name='app_id' direction='in'/>"
273 " <arg type='i' name='type' direction='in'/>"
274 " <arg type='i' name='offset' direction='in'/>"
275 " <arg type='i' name='count' direction='in'/>"
276 " <arg type='a(i)' name='id_list' direction='out'/>"
279 " <method name='get_sticker_info_by_group'>"
280 " <arg type='s' name='app_id' direction='in'/>"
281 " <arg type='s' name='group' direction='in'/>"
282 " <arg type='i' name='offset' direction='in'/>"
283 " <arg type='i' name='count' direction='in'/>"
284 " <arg type='a(i)' name='id_list' direction='out'/>"
287 " <method name='get_sticker_info_by_keyword'>"
288 " <arg type='s' name='app_id' direction='in'/>"
289 " <arg type='s' name='keyword' direction='in'/>"
290 " <arg type='i' name='offset' direction='in'/>"
291 " <arg type='i' name='count' direction='in'/>"
292 " <arg type='a(i)' name='id_list' direction='out'/>"
295 " <method name='get_sticker_info_by_disp_type'>"
296 " <arg type='s' name='app_id' direction='in'/>"
297 " <arg type='i' name='type' direction='in'/>"
298 " <arg type='i' name='offset' direction='in'/>"
299 " <arg type='i' name='count' direction='in'/>"
300 " <arg type='a(i)' name='id_list' direction='out'/>"
303 " <method name='get_group_list_by_disp_type'>"
304 " <arg type='s' name='app_id' direction='in'/>"
305 " <arg type='i' name='disp_type' direction='in'/>"
306 " <arg type='a(s)' name='group_list' direction='out'/>"
309 " <method name='update_sticker_disp_type'>"
310 " <arg type='i' name='record_id' direction='in'/>"
311 " <arg type='i' name='disp_type' direction='in'/>"
314 " <method name='check_file_exists'>"
315 " <arg type='s' name='uri' direction='in'/>"
316 " <arg type='i' name='result' direction='out'/>"
321 return stickerd_server_register_dbus_interface(introspection_xml, _sticker_interface_vtable);
324 int stickerd_dbus_init(void)
328 ret = stickerd_register_dbus_interface();
329 if (ret != STICKERD_SERVER_ERROR_NONE) {
330 LOGE("Failed to register dbus interface : %d", ret);
331 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
334 return STICKERD_SERVER_ERROR_NONE;
337 static int _check_file_exist(const char *app_id, const char *path)
340 package_info_h package_info = NULL;
341 char *app_path = NULL;
342 char *file_path = NULL;
344 if (access(path, F_OK) == 0) {
349 ret = package_info_create(app_id, &package_info);
350 if (ret != PACKAGE_MANAGER_ERROR_NONE || package_info == NULL) {
351 LOGE("failed to create package_info. ret: %d", ret);
356 ret = package_info_get_root_path(package_info, &app_path);
357 if (ret != PACKAGE_MANAGER_ERROR_NONE || app_path == NULL) {
358 LOGE("failed to create package_info. ret: %d", ret);
363 int path_len = strlen(app_path) + strlen(path) + 2;
364 file_path = (char *)calloc(path_len, sizeof(char));
366 LOGE("Failed to alloc memory");
372 snprintf(file_path, path_len, "%s%s",app_path, path);
374 snprintf(file_path, path_len, "%s%s%s",app_path, "/", path);
376 if (access(file_path, F_OK) != 0) {
377 LOGE("%s does not exist", file_path);
384 package_info_destroy(package_info);
399 static int _mkdirs(const char *path, mode_t mode)
402 char prev_path[2048];
403 const char *tmp = path;
405 if (!path || strlen(path) > 2048)
408 memset(prev_path, '\0', 2048);
409 while ((tmp = strchr(tmp, '/')) != NULL) {
416 strncpy(prev_path, path, len);
417 prev_path[len] = 0x00;
419 if (mkdir(prev_path, mode) == -1 && errno != EEXIST) {
420 strerror_r(errno, error_buffer, MAX_ERROR_BUFFER);
421 LOGE("directory create error : %s", error_buffer);
426 if (mkdir(prev_path, mode) == -1 && errno != EEXIST) {
427 strerror_r(errno, error_buffer, MAX_ERROR_BUFFER);
428 LOGE("directory create error : %s", error_buffer);
435 static int _file_copy(const char *src, const char *dest)
438 int fd = -1, n_fd = -1;
443 memset(buf, '\0', 4096);
444 fd = open(src, O_RDONLY);
445 n_fd = open(dest, O_WRONLY | O_CREAT | O_TRUNC, 0755);
447 if (fd == -1 || n_fd == -1) {
453 while((size = read(fd, buf, 4096))) {
463 while(write(n_fd, buf, size) == -1) {
484 static char* _convert_sticker_uri(const char *uri, const char *appid)
487 int len = strlen(STICKER_DIRECTORY) + strlen(appid) + strlen(uri) + 3;
488 char * new_path = (char *)calloc(len, sizeof(char));
489 if (new_path == NULL) {
490 LOGE("Failed to alloc memory");
495 snprintf(new_path, len, "%s/%s%s",STICKER_DIRECTORY, appid, uri);
497 snprintf(new_path, len, "%s/%s/%s",STICKER_DIRECTORY, appid, uri);
499 if (access(new_path, F_OK) == 0) {
500 LOGE("sticker file already exists : %s", new_path);
505 ret = _mkdirs(new_path, 0755);
507 strerror_r(errno, error_buffer, MAX_ERROR_BUFFER);
508 LOGE("directory create error : %s", error_buffer);
512 ret = _file_copy(uri, new_path);
514 strerror_r(errno, error_buffer, MAX_ERROR_BUFFER);
515 LOGE("failed to copy sticker file : %s", error_buffer);
528 int stickerd_insert_sticker_info(GVariant *parameters, GVariant **reply_body)
532 STICKER_DAT_TYPE key;
533 sticker_info_db *sticker_info = NULL;
534 GVariant *value = NULL;
535 GVariantIter *info_iter = NULL;
536 GVariantIter *keyword_iter = NULL;
539 g_variant_get(parameters, "(a{iv}a(s))", &info_iter, &keyword_iter);
540 if (!info_iter || !keyword_iter) {
541 LOGD("failed to get iter");
542 ret = STICKERD_SERVER_ERROR_OUT_OF_MEMORY;
546 sticker_info = (sticker_info_db *)calloc(1, sizeof(sticker_info_db));
549 ret = STICKERD_SERVER_ERROR_OUT_OF_MEMORY;
553 while (g_variant_iter_loop (info_iter, "{iv}", &key, &value)) {
555 case STICKER_DATA_TYPE_APP_ID:
556 sticker_info->app_id = (char *) g_variant_get_string(value, NULL);
558 case STICKER_DATA_TYPE_URI_TYPE:
559 sticker_info->type = g_variant_get_int32(value);
561 case STICKER_DATA_TYPE_URI:
562 sticker_info->uri = (char *) g_variant_get_string(value, NULL);
564 case STICKER_DATA_TYPE_THUMBNAIL:
565 sticker_info->thumbnail = (char *) g_variant_get_string(value, NULL);
567 case STICKER_DATA_TYPE_DESCRIPTION:
568 sticker_info->description = (char *) g_variant_get_string(value, NULL);
570 case STICKER_DATA_TYPE_GROUP:
571 sticker_info->group = (char *) g_variant_get_string(value, NULL);
573 case STICKER_DATA_TYPE_DISP_TYPE:
574 sticker_info->display_type = g_variant_get_int32(value);
580 while (g_variant_iter_loop (keyword_iter, "(s)", &keyword)) {
581 sticker_info->keyword = g_list_append(sticker_info->keyword, strdup((const char *)keyword));
584 if (sticker_info->type == 1) {
585 if (_check_file_exist(sticker_info->app_id, sticker_info->uri) == 0) {
586 sticker_info->uri = _convert_sticker_uri(sticker_info->uri, sticker_info->app_id);
587 if (!sticker_info->uri) {
588 LOGE("failed to copy sticker file");
589 ret = STICKERD_SERVER_ERROR_FILE_EXISTS;
593 LOGE("sticker file does not exist");
594 ret = STICKERD_SERVER_ERROR_NO_SUCH_FILE;
599 if (sticker_info->thumbnail) {
600 if (_check_file_exist(sticker_info->app_id, sticker_info->thumbnail) == 0) {
601 sticker_info->thumbnail = _convert_sticker_uri(sticker_info->thumbnail, sticker_info->app_id);
602 if (!sticker_info->thumbnail) {
603 LOGE("failed to copy sticker thumbnail");
604 ret = STICKERD_SERVER_ERROR_FILE_EXISTS;
608 LOGE("sticker thumbnail does not exist");
609 ret = STICKERD_SERVER_ERROR_NO_SUCH_FILE;
614 ret = stickerd_db_insert_sticker_info(&record_id, sticker_info);
615 if (ret != STICKERD_SERVER_ERROR_NONE) {
616 LOGE("Failed to insert sticker info");
617 ret = STICKERD_SERVER_ERROR_OPERATION_FAILED;
621 *reply_body = g_variant_new("(i)", record_id);
622 if (*reply_body == NULL) {
623 LOGE("Failed to create reply_body");
624 ret = STICKERD_SERVER_ERROR_OPERATION_FAILED;
629 g_variant_unref(value);
632 g_variant_iter_free(info_iter);
635 g_variant_iter_free(keyword_iter);
645 static char* _get_string_from_object(JsonObject *object, const char *key)
647 if (json_object_has_member(object, key) == false)
650 const char *str = json_object_get_string_member(object, key);
657 static int _get_int_from_object(JsonObject *object, const char *key)
659 if (json_object_has_member(object, key) == false)
662 int type = json_object_get_int_member(object, key);
667 int stickerd_insert_sticker_info_by_json(GVariant *parameters, GVariant **reply_body, const char *sender)
669 int ret = STICKERD_SERVER_ERROR_OPERATION_FAILED;
671 sticker_info_db *sticker_info = NULL;
673 char *json_path = NULL;
674 JsonParser* parser = NULL;
675 GError* err_msg = NULL;
676 GVariant *body = NULL;
677 char *cmd = "send_insert_result";
679 *reply_body = g_variant_new("()");
680 if (*reply_body == NULL) {
681 LOGE("Failed to create reply_body");
682 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
685 g_variant_get(parameters, "(&s&s)", &app_id, &json_path);
687 if (!app_id || !json_path) {
688 LOGE("failed to get parameter");
689 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
692 SECURE_LOGD("app_id: %s, json path: %s", app_id, json_path);
694 parser = json_parser_new();
695 json_parser_load_from_file(parser, json_path, &err_msg);
697 LOGE("failed to load json file. error message: %s", err_msg->message);
698 ret = STICKERD_SERVER_ERROR_OPERATION_FAILED;
702 JsonNode *root = json_parser_get_root(parser);
704 LOGE("failed to get root");
705 ret = STICKERD_SERVER_ERROR_OPERATION_FAILED;
709 JsonObject *root_obj = json_node_get_object(root);
710 if (root_obj == NULL) {
711 LOGE("failed to get object");
712 ret = STICKERD_SERVER_ERROR_OPERATION_FAILED;
716 JsonArray *sticker_arr = json_object_get_array_member(root_obj, "sticker");
717 if (sticker_arr == NULL) {
718 LOGE("failed to get array member");
719 ret = STICKERD_SERVER_ERROR_OPERATION_FAILED;
723 int arr_len = json_array_get_length(sticker_arr);
724 for (int i = 0; i < arr_len; i++) {
725 JsonObject *info_object = json_array_get_object_element(sticker_arr, i);
726 if (info_object != NULL) {
727 sticker_info = (sticker_info_db *)calloc(1, sizeof(sticker_info_db));
729 LOGE("Failed to alloc memory");
733 sticker_info->app_id = app_id;
734 sticker_info->type = _get_int_from_object(info_object, "type");
735 if (sticker_info->type < 1)
738 sticker_info->uri = _get_string_from_object(info_object, "uri");
739 if (!sticker_info->uri)
742 if (sticker_info->type == 1) {
743 if (_check_file_exist(sticker_info->app_id, sticker_info->uri) == 0) {
744 sticker_info->uri = _convert_sticker_uri(sticker_info->uri, sticker_info->app_id);
745 if (!sticker_info->uri)
752 sticker_info->group = _get_string_from_object(info_object, "group");
753 if (!sticker_info->group)
756 sticker_info->thumbnail = _get_string_from_object(info_object, "thumbnail");
757 if (sticker_info->thumbnail) {
758 if (_check_file_exist(sticker_info->app_id, sticker_info->thumbnail) == 0) {
759 sticker_info->thumbnail = _convert_sticker_uri(sticker_info->thumbnail, sticker_info->app_id);
760 if (!sticker_info->thumbnail)
767 sticker_info->description = _get_string_from_object(info_object, "description");
769 sticker_info->display_type = _get_int_from_object(info_object, "display_type");
771 JsonArray *keyword_arr = json_object_get_array_member(info_object, "keyword");
772 int keyword_arr_len = json_array_get_length(keyword_arr);
773 if (keyword_arr_len < 1)
776 for (int j = 0; j < keyword_arr_len; j++) {
777 sticker_info->keyword = g_list_append(sticker_info->keyword, strdup((const char *)json_array_get_string_element(keyword_arr, j)));
780 ret = stickerd_db_insert_sticker_info(&record_id, sticker_info);
781 if (ret != STICKERD_SERVER_ERROR_NONE) {
782 LOGE("Failed to insert sticker info");
783 ret = STICKERD_SERVER_ERROR_OPERATION_FAILED;
794 g_error_free(err_msg);
796 g_object_unref(parser);
798 body = g_variant_new("(i)", ret);
800 ret = stickerd_send_dbus_message(body, sender, cmd, STICKER_CLIENT_LIB_PROVIDER);
801 if (ret != STICKERD_SERVER_ERROR_NONE)
802 LOGE("Failed to send insert result to client");
805 g_variant_unref(body);
810 int stickerd_del_sticker_info(GVariant *parameters, GVariant **reply_body)
815 *reply_body = g_variant_new("()");
816 if (*reply_body == NULL) {
817 LOGE("Failed to create reply_body");
818 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
821 g_variant_get(parameters, "(i)", &record_id);
823 ret = stickerd_db_delete_sticker_info(record_id);
824 if (ret != STICKERD_SERVER_ERROR_NONE) {
825 LOGE("Failed to delete sticker info");
826 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
832 int stickerd_del_sticker_info_by_uri(GVariant *parameters, GVariant **reply_body)
837 *reply_body = g_variant_new("()");
838 if (*reply_body == NULL) {
839 LOGE("Failed to create reply_body");
840 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
843 g_variant_get(parameters, "(&s)", &uri);
845 ret = stickerd_db_delete_sticker_info_by_uri(uri);
846 if (ret != STICKERD_SERVER_ERROR_NONE) {
847 LOGE("Failed to delete sticker info");
848 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
854 int stickerd_update_sticker_type(GVariant *parameters, GVariant **reply_body)
860 *reply_body = g_variant_new("()");
861 if (*reply_body == NULL) {
862 LOGE("Failed to create reply_body");
863 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
866 g_variant_get(parameters, "(ii)", &record_id, &type);
868 ret = stickerd_db_update_sticker_info(record_id, STICKER_DB_STICKER_TYPE, &type);
869 if (ret != STICKERD_SERVER_ERROR_NONE) {
870 LOGE("Failed to update sticker type");
871 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
877 int stickerd_update_sticker_uri(GVariant *parameters, GVariant **reply_body)
885 *reply_body = g_variant_new("()");
886 if (*reply_body == NULL) {
887 LOGE("Failed to create reply_body");
888 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
891 g_variant_get(parameters, "(i&si&s)", &record_id, &app_id, &type, &uri);
894 if (_check_file_exist(app_id, uri) == 0) {
895 uri = _convert_sticker_uri(uri, app_id);
897 LOGE("failed to copy sticker file");
898 return STICKERD_SERVER_ERROR_FILE_EXISTS;
901 return STICKERD_SERVER_ERROR_NO_SUCH_FILE;
905 ret = stickerd_db_update_sticker_info(record_id, STICKER_DB_STICKER_URI, (void *)uri);
906 if (ret != STICKERD_SERVER_ERROR_NONE) {
907 LOGE("Failed to update sticker uri");
908 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
914 int stickerd_update_sticker_thumbnail(GVariant *parameters, GVariant **reply_body)
921 *reply_body = g_variant_new("()");
922 if (*reply_body == NULL) {
923 LOGE("Failed to create reply_body");
924 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
927 g_variant_get(parameters, "(i&s&s)", &record_id, &app_id, &thumbnail);
929 if (_check_file_exist(app_id, thumbnail) == 0) {
930 thumbnail = _convert_sticker_uri(thumbnail, app_id);
932 LOGE("failed to copy sticker thumbnail");
933 return STICKERD_SERVER_ERROR_FILE_EXISTS;
936 return STICKERD_SERVER_ERROR_NO_SUCH_FILE;
939 ret = stickerd_db_update_sticker_info(record_id, STICKER_DB_STICKER_THUMBNAIL, (void *)thumbnail);
940 if (ret != STICKERD_SERVER_ERROR_NONE) {
941 LOGE("Failed to update sticker thumbnail");
942 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
948 int stickerd_update_sticker_description(GVariant *parameters, GVariant **reply_body)
954 *reply_body = g_variant_new("()");
955 if (*reply_body == NULL) {
956 LOGE("Failed to create reply_body");
957 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
960 g_variant_get(parameters, "(i&s)", &record_id, &description);
962 ret = stickerd_db_update_sticker_info(record_id, STICKER_DB_STICKER_DESCRIPTION, (void *)description);
963 if (ret != STICKERD_SERVER_ERROR_NONE) {
964 LOGE("Failed to update sticker description");
965 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
971 int stickerd_update_sticker_group(GVariant *parameters, GVariant **reply_body)
977 *reply_body = g_variant_new("()");
978 if (*reply_body == NULL) {
979 LOGE("Failed to create reply_body");
980 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
983 g_variant_get(parameters, "(i&s)", &record_id, &group);
985 ret = stickerd_db_update_sticker_info(record_id, STICKER_DB_STICKER_GROUP, (void *)group);
986 if (ret != STICKERD_SERVER_ERROR_NONE) {
987 LOGE("Failed to update sticker group");
988 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
994 int stickerd_update_sticker_keyword(GVariant *parameters, GVariant **reply_body)
998 GVariantIter *keyword_iter = NULL;
999 char *keyword = NULL;
1000 GList *keyword_list = NULL;
1002 *reply_body = g_variant_new("()");
1003 if (*reply_body == NULL) {
1004 LOGE("Failed to create reply_body");
1005 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1008 g_variant_get(parameters, "(ia(s))", &record_id, &keyword_iter);
1010 if (!keyword_iter) {
1011 LOGD("failed to get iter");
1012 return STICKERD_SERVER_ERROR_OUT_OF_MEMORY;
1015 while (g_variant_iter_loop (keyword_iter, "(s)", &keyword)) {
1016 keyword_list = g_list_append(keyword_list, strdup((const char *)keyword));
1019 g_variant_iter_free(keyword_iter);
1021 ret = stickerd_db_update_sticker_info(record_id, STICKER_DB_STICKER_KEYWORD, (void *)keyword_list);
1022 if (ret != STICKERD_SERVER_ERROR_NONE) {
1023 LOGE("Failed to update sticker keyword");
1024 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1030 static void _set_keyword_builder(char *keyword, GVariantBuilder *keyword_builder)
1033 LOGE("keyword doesn't exist");
1037 g_variant_builder_add(keyword_builder, "(s)", (const char *)keyword);
1040 int stickerd_get_sticker_info(GVariant *parameters, GVariant **reply_body)
1044 GVariantBuilder *info_builder;
1045 GVariantBuilder *keyword_builder;
1047 g_variant_get(parameters, "(i)", &record_id);
1048 sticker_info_db *sticker_info = (sticker_info_db *)calloc(1, sizeof(sticker_info_db));
1051 return STICKERD_SERVER_ERROR_OUT_OF_MEMORY;
1053 ret = stickerd_db_get_sticker_info_by_record_id(record_id, sticker_info);
1054 if (ret != STICKERD_SERVER_ERROR_NONE) {
1055 LOGE("Failed to get sticker info");
1057 if (sticker_info->app_id)
1058 free(sticker_info->app_id);
1060 if (sticker_info->uri)
1061 free(sticker_info->uri);
1063 if (sticker_info->thumbnail)
1064 free(sticker_info->thumbnail);
1066 if (sticker_info->keyword)
1067 free(sticker_info->keyword);
1069 if (sticker_info->group)
1070 free(sticker_info->group);
1072 if (sticker_info->description)
1073 free(sticker_info->description);
1075 if (sticker_info->date)
1076 free(sticker_info->date);
1079 sticker_info = NULL;
1080 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1083 info_builder = g_variant_builder_new(G_VARIANT_TYPE("a{iv}"));
1084 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_APP_ID, g_variant_new_string((const gchar *)sticker_info->app_id));
1085 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_URI_TYPE, g_variant_new_int32(sticker_info->type));
1086 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_URI, g_variant_new_string((const gchar *)sticker_info->uri));
1087 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_THUMBNAIL, g_variant_new_string((const gchar *)sticker_info->thumbnail));
1088 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_DESCRIPTION, g_variant_new_string((const gchar *)sticker_info->description));
1089 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_GROUP, g_variant_new_string((const gchar *)sticker_info->group));
1090 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_DATE, g_variant_new_string((const gchar *)sticker_info->date));
1091 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_DISP_TYPE, g_variant_new_int32(sticker_info->display_type));
1093 keyword_builder = g_variant_builder_new(G_VARIANT_TYPE("a(s)"));
1094 g_list_foreach(sticker_info->keyword, (GFunc) _set_keyword_builder, keyword_builder);
1096 *reply_body = g_variant_new("(a{iv}a(s))", info_builder, keyword_builder);
1097 g_variant_builder_unref(info_builder);
1098 g_variant_builder_unref(keyword_builder);
1100 if (*reply_body == NULL) {
1101 LOGE("Failed to create reply_body");
1103 sticker_info = NULL;
1104 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1108 sticker_info = NULL;
1112 int stickerd_get_group_list(GVariant *parameters, GVariant **reply_body)
1115 GVariantBuilder *builder = NULL;
1116 char *app_id = NULL;
1118 g_variant_get(parameters, "(&s)", &app_id);
1120 builder = g_variant_builder_new(G_VARIANT_TYPE("a(s)"));
1121 ret = stickerd_db_get_group_list(builder, app_id);
1122 if (ret != STICKERD_SERVER_ERROR_NONE) {
1123 LOGE("Failed to get sticker group list");
1124 g_variant_builder_unref(builder);
1125 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1128 *reply_body = g_variant_new("(a(s))", builder);
1129 g_variant_builder_unref(builder);
1131 if (*reply_body == NULL) {
1132 LOGE("Failed to create reply_body");
1133 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1139 int stickerd_get_keyword_list(GVariant *parameters, GVariant **reply_body)
1142 GVariantBuilder *builder = NULL;
1143 char *app_id = NULL;
1145 g_variant_get(parameters, "(&s)", &app_id);
1147 builder = g_variant_builder_new(G_VARIANT_TYPE("a(s)"));
1148 ret = stickerd_db_get_keyword_list(builder, app_id);
1149 if (ret != STICKERD_SERVER_ERROR_NONE) {
1150 LOGE("Failed to get sticker keyword list");
1151 g_variant_builder_unref(builder);
1152 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1155 *reply_body = g_variant_new("(a(s))", builder);
1156 g_variant_builder_unref(builder);
1158 if (*reply_body == NULL) {
1159 LOGE("Failed to create reply_body");
1160 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1166 int stickerd_get_sticker_count(GVariant *parameters, GVariant **reply_body)
1170 char *app_id = NULL;
1172 g_variant_get(parameters, "(&s)", &app_id);
1174 ret = stickerd_db_get_sticker_count(&count, app_id);
1175 if (ret != STICKERD_SERVER_ERROR_NONE) {
1176 LOGE("Failed to get sticker count");
1177 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1180 *reply_body = g_variant_new("(i)", count);
1181 if (*reply_body == NULL) {
1182 LOGE("Failed to create reply_body");
1183 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1190 // Send the sticker information by asynchronous communication.
1191 static int send_sticker_info_async(int record_id, sticker_info_db_type type, const char *sender)
1196 sticker_info_db *sticker_info = (sticker_info_db *)calloc(1, sizeof(sticker_info_db));
1199 return STICKERD_SERVER_ERROR_OUT_OF_MEMORY;
1201 ret = stickerd_db_get_sticker_info_by_record_id(record_id, sticker_info);
1202 if (ret != STICKERD_SERVER_ERROR_NONE) {
1203 LOGE("Failed to get sticker info");
1205 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1209 case STICKER_DB_STICKER_ALL:
1210 cmd = "send_all_sticker_info";
1212 case STICKER_DB_STICKER_APPID:
1213 cmd = "send_sticker_info_by_appid";
1215 case STICKER_DB_STICKER_TYPE:
1216 cmd = "send_sticker_info_by_type";
1218 case STICKER_DB_STICKER_GROUP:
1219 cmd = "send_sticker_info_by_group";
1221 case STICKER_DB_STICKER_KEYWORD:
1222 cmd = "send_sticker_info_by_keyword";
1229 GVariantBuilder *info_builder;
1230 GVariantBuilder *keyword_builder;
1232 info_builder = g_variant_builder_new(G_VARIANT_TYPE("a{iv}"));
1233 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_INFO_ID, g_variant_new_int32(record_id));
1234 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_APP_ID, g_variant_new_string((const gchar *)sticker_info->app_id));
1235 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_URI_TYPE, g_variant_new_int32(sticker_info->type));
1236 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_URI, g_variant_new_string((const gchar *)sticker_info->uri));
1237 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_THUMBNAIL, g_variant_new_string((const gchar *)sticker_info->thumbnail));
1238 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_DESCRIPTION, g_variant_new_string((const gchar *)sticker_info->description));
1239 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_GROUP, g_variant_new_string((const gchar *)sticker_info->group));
1240 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_DATE, g_variant_new_string((const gchar *)sticker_info->date));
1242 keyword_builder = g_variant_builder_new(G_VARIANT_TYPE("a(s)"));
1243 g_list_foreach(sticker_info->keyword, (GFunc) _set_keyword_builder, keyword_builder);
1245 GVariant *body = g_variant_new("(a{iv}a(s))", info_builder, keyword_builder);
1246 g_variant_builder_unref(info_builder);
1247 g_variant_builder_unref(keyword_builder);
1249 ret = stickerd_send_dbus_message(body, sender, cmd);
1250 if (ret != STICKERD_SERVER_ERROR_NONE) {
1251 LOGE("Failed to send sticker info to client");
1253 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1261 static void _set_id_builder(char *id, GVariantBuilder *id_builder)
1264 LOGE("id doesn't exist");
1268 g_variant_builder_add(id_builder, "(i)", atoi(id));
1271 int stickerd_get_all_sticker_info(GVariant *parameters, GVariant **reply_body)
1275 char *app_id = NULL;
1276 GList *id_list = NULL;
1277 GVariantBuilder *id_builder = NULL;
1279 g_variant_get(parameters, "(&sii)", &app_id, &offset, &count);
1281 ret = stickerd_db_get_record_id(STICKER_DB_STICKER_ALL, &id_list, NULL, app_id, offset, count);
1282 if (ret != STICKERD_SERVER_ERROR_NONE) {
1283 LOGE("Failed to get all sticker id");
1285 g_list_free_full(id_list, free);
1286 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1289 id_builder = g_variant_builder_new(G_VARIANT_TYPE("a(i)"));
1290 g_list_foreach(id_list, (GFunc) _set_id_builder, id_builder);
1292 *reply_body = g_variant_new("(a(i))", id_builder);
1293 if (*reply_body == NULL) {
1294 LOGE("Failed to create reply_body");
1295 ret = STICKERD_SERVER_ERROR_OPERATION_FAILED;
1299 g_list_free_full(id_list, free);
1302 g_variant_builder_unref(id_builder);
1307 int stickerd_get_sticker_info_by_app_id(GVariant *parameters, GVariant **reply_body)
1310 GList *id_list = NULL;
1311 char *app_id = NULL;
1313 GVariantBuilder *id_builder = NULL;
1315 g_variant_get(parameters, "(&sii)", &app_id, &offset, &count);
1317 ret = stickerd_db_get_record_id(STICKER_DB_STICKER_APPID, &id_list, NULL, app_id, offset, count);
1318 if (ret != STICKERD_SERVER_ERROR_NONE) {
1319 LOGE("Failed to get all sticker id");
1321 g_list_free_full(id_list, free);
1322 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1325 id_builder = g_variant_builder_new(G_VARIANT_TYPE("a(i)"));
1326 g_list_foreach(id_list, (GFunc) _set_id_builder, id_builder);
1328 *reply_body = g_variant_new("(a(i))", id_builder);
1329 if (*reply_body == NULL) {
1330 LOGE("Failed to create reply_body");
1331 ret = STICKERD_SERVER_ERROR_OPERATION_FAILED;
1335 g_list_free_full(id_list, free);
1338 g_variant_builder_unref(id_builder);
1343 int stickerd_get_sticker_info_by_type(GVariant *parameters, GVariant **reply_body)
1346 GList *id_list = NULL;
1347 char *app_id = NULL;
1348 int type, offset, count;
1349 GVariantBuilder *id_builder = NULL;
1351 g_variant_get(parameters, "(&siii)", &app_id, &type, &offset, &count);
1353 ret = stickerd_db_get_record_id(STICKER_DB_STICKER_TYPE, &id_list, &type, app_id, offset, count);
1354 if (ret != STICKERD_SERVER_ERROR_NONE) {
1355 LOGE("Failed to get all sticker id");
1357 g_list_free_full(id_list, free);
1358 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1361 id_builder = g_variant_builder_new(G_VARIANT_TYPE("a(i)"));
1362 g_list_foreach(id_list, (GFunc) _set_id_builder, id_builder);
1364 *reply_body = g_variant_new("(a(i))", id_builder);
1365 if (*reply_body == NULL) {
1366 LOGE("Failed to create reply_body");
1367 ret = STICKERD_SERVER_ERROR_OPERATION_FAILED;
1371 g_list_free_full(id_list, free);
1374 g_variant_builder_unref(id_builder);
1379 int stickerd_get_sticker_info_by_group(GVariant *parameters, GVariant **reply_body)
1382 GList *id_list = NULL;
1383 char *app_id = NULL;
1386 GVariantBuilder *id_builder = NULL;
1388 g_variant_get(parameters, "(&s&sii)", &app_id, &group, &offset, &count);
1390 ret = stickerd_db_get_record_id(STICKER_DB_STICKER_GROUP, &id_list, (void *)group, app_id, offset, count);
1391 if (ret != STICKERD_SERVER_ERROR_NONE) {
1392 LOGE("Failed to get all sticker id");
1394 g_list_free_full(id_list, free);
1395 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1398 id_builder = g_variant_builder_new(G_VARIANT_TYPE("a(i)"));
1399 g_list_foreach(id_list, (GFunc) _set_id_builder, id_builder);
1401 *reply_body = g_variant_new("(a(i))", id_builder);
1402 if (*reply_body == NULL) {
1403 LOGE("Failed to create reply_body");
1404 ret = STICKERD_SERVER_ERROR_OPERATION_FAILED;
1408 g_list_free_full(id_list, free);
1411 g_variant_builder_unref(id_builder);
1416 int stickerd_get_sticker_info_by_keyword(GVariant *parameters, GVariant **reply_body)
1419 GList *id_list = NULL;
1420 char *app_id = NULL;
1421 char *keyword = NULL;
1423 GVariantBuilder *id_builder = NULL;
1425 g_variant_get(parameters, "(&s&sii)", &app_id, &keyword, &offset, &count);
1427 ret = stickerd_db_get_record_id(STICKER_DB_STICKER_KEYWORD, &id_list, (void *)keyword, app_id, offset, count);
1428 if (ret != STICKERD_SERVER_ERROR_NONE) {
1429 LOGE("Failed to get all sticker id");
1431 g_list_free_full(id_list, free);
1432 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1435 id_builder = g_variant_builder_new(G_VARIANT_TYPE("a(i)"));
1436 g_list_foreach(id_list, (GFunc) _set_id_builder, id_builder);
1438 *reply_body = g_variant_new("(a(i))", id_builder);
1439 if (*reply_body == NULL) {
1440 LOGE("Failed to create reply_body");
1441 ret = STICKERD_SERVER_ERROR_OPERATION_FAILED;
1445 g_list_free_full(id_list, free);
1448 g_variant_builder_unref(id_builder);
1453 int stickerd_get_sticker_info_by_display_type(GVariant *parameters, GVariant **reply_body)
1456 GList *id_list = NULL;
1457 char *app_id = NULL;
1458 int type, offset, count;
1459 GVariantBuilder *id_builder = NULL;
1461 g_variant_get(parameters, "(&siii)", &app_id, &type, &offset, &count);
1463 ret = stickerd_db_get_record_id(STICKER_DB_STICKER_DISP_TYPE, &id_list, &type, app_id, offset, count);
1464 if (ret != STICKERD_SERVER_ERROR_NONE) {
1465 LOGE("Failed to get all sticker id");
1467 g_list_free_full(id_list, free);
1468 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1471 id_builder = g_variant_builder_new(G_VARIANT_TYPE("a(i)"));
1472 g_list_foreach(id_list, (GFunc) _set_id_builder, id_builder);
1474 *reply_body = g_variant_new("(a(i))", id_builder);
1475 if (*reply_body == NULL) {
1476 LOGE("Failed to create reply_body");
1477 ret = STICKERD_SERVER_ERROR_OPERATION_FAILED;
1481 g_list_free_full(id_list, free);
1484 g_variant_builder_unref(id_builder);
1489 int stickerd_get_group_list_by_disp_type(GVariant *parameters, GVariant **reply_body)
1492 GVariantBuilder *builder = NULL;
1493 char *app_id = NULL;
1496 g_variant_get(parameters, "(&si)", &app_id, &disp_type);
1498 builder = g_variant_builder_new(G_VARIANT_TYPE("a(s)"));
1499 ret = stickerd_db_get_group_list_by_display_type(builder, app_id, disp_type);
1500 if (ret != STICKERD_SERVER_ERROR_NONE) {
1501 LOGE("Failed to get sticker group list");
1502 g_variant_builder_unref(builder);
1503 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1506 *reply_body = g_variant_new("(a(s))", builder);
1507 g_variant_builder_unref(builder);
1509 if (*reply_body == NULL) {
1510 LOGE("Failed to create reply_body");
1511 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1517 int stickerd_update_sticker_disp_type(GVariant *parameters, GVariant **reply_body)
1523 *reply_body = g_variant_new("()");
1524 if (*reply_body == NULL) {
1525 LOGE("Failed to create reply_body");
1526 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1529 g_variant_get(parameters, "(ii)", &record_id, &disp_type);
1531 ret = stickerd_db_update_sticker_info(record_id, STICKER_DB_STICKER_DISP_TYPE, &disp_type);
1532 if (ret != STICKERD_SERVER_ERROR_NONE) {
1533 LOGE("Failed to update sticker disp_type");
1534 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1540 int stickerd_check_file_exists(GVariant *parameters, GVariant **reply_body)
1546 g_variant_get(parameters, "(&s)", &uri);
1548 ret = stickerd_db_check_file_exists(&result, uri);
1549 if (ret != STICKERD_SERVER_ERROR_NONE) {
1550 LOGE("Failed to get sticker count");
1551 return STICKERD_SERVER_ERROR_OPERATION_FAILED;
1554 *reply_body = g_variant_new("(i)", result);
1555 if (*reply_body == NULL) {
1556 LOGE("Failed to create reply_body");
1557 return STICKERD_SERVER_ERROR_OPERATION_FAILED;