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.
19 #include "sticker_dbus.h"
24 #define LOG_TAG "STICKER_DBUS"
26 static int is_server_started = 0;
28 static void _server_appeared_cb(GDBusConnection *connection, const gchar *name, const gchar *name_owner, gpointer user_data)
30 LOGD("name : %s, name_owner : %s", name, name_owner);
33 static void _server_vanished_cb(GDBusConnection *connection, const gchar *name, gpointer user_data)
35 LOGD("name : %s", name);
38 static int _dbus_init(GDBusConnection **gdbus_connection, guint *server_watcher_id)
42 if (*gdbus_connection == NULL) {
43 GDBusConnection *conn = NULL;
44 conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
47 LOGE("g_bus_get_sync error message = %s", error->message);
50 return STICKER_CLIENT_ERROR_IO_ERROR;
52 *gdbus_connection = conn;
55 LOGD("Connected bus name : %s", g_dbus_connection_get_unique_name(*gdbus_connection));
56 if (*server_watcher_id == 0) {
57 *server_watcher_id = g_bus_watch_name(G_BUS_TYPE_SYSTEM,
59 G_BUS_NAME_WATCHER_FLAGS_NONE,
65 LOGD("server_watcher_id : %d", *server_watcher_id);
66 if (*server_watcher_id == 0) {
67 LOGE("Failed to get identifier");
68 return STICKER_CLIENT_ERROR_IO_ERROR;
71 return STICKER_CLIENT_ERROR_NONE;
74 static void _get_sticker_info_from_gvariant(GVariant *body, sticker_data_h sticker_data)
77 GVariant *value = NULL;
78 GVariantIter *info_iter = NULL;
79 GVariantIter *keyword_iter = NULL;
82 g_variant_get(body, "(a{iv}a(s))", &info_iter, &keyword_iter);
84 if (!info_iter || !keyword_iter) {
85 LOGD("failed to get iter");
89 while (g_variant_iter_loop (info_iter, "{iv}", &key, &value)) {
91 case STICKER_DATA_TYPE_APP_ID:
92 sticker_data->app_id = g_variant_dup_string(value, NULL);
94 case STICKER_DATA_TYPE_URI_TYPE:
95 sticker_data->type = g_variant_get_int32(value);
97 case STICKER_DATA_TYPE_URI:
98 sticker_data->uri = g_variant_dup_string(value, NULL);
100 case STICKER_DATA_TYPE_THUMBNAIL:
101 sticker_data->thumbnail = g_variant_dup_string(value, NULL);
103 case STICKER_DATA_TYPE_DESCRIPTION:
104 sticker_data->description = g_variant_dup_string(value, NULL);
106 case STICKER_DATA_TYPE_GROUP:
107 sticker_data->group = g_variant_dup_string(value, NULL);
109 case STICKER_DATA_TYPE_DATE:
110 sticker_data->date = g_variant_dup_string(value, NULL);
117 while (g_variant_iter_loop (keyword_iter, "(s)", &keyword)) {
118 sticker_data->keyword = g_list_append(sticker_data->keyword, strdup((const char *)keyword));
122 g_variant_unref(value);
124 g_variant_iter_free(info_iter);
125 g_variant_iter_free(keyword_iter);
128 static void _free_sticker_data(sticker_data_h sticker_data)
130 if (sticker_data->app_id) {
131 free(sticker_data->app_id);
132 sticker_data->app_id = NULL;
135 if (sticker_data->uri) {
136 free(sticker_data->uri);
137 sticker_data->uri = NULL;
140 if (sticker_data->thumbnail) {
141 free(sticker_data->thumbnail);
142 sticker_data->thumbnail = NULL;
145 if (sticker_data->keyword) {
146 g_list_free_full(sticker_data->keyword, free);
147 sticker_data->keyword = NULL;
150 if (sticker_data->group) {
151 free(sticker_data->group);
152 sticker_data->group = NULL;
155 if (sticker_data->description) {
156 free(sticker_data->description);
157 sticker_data->description = NULL;
160 if (sticker_data->date) {
161 free(sticker_data->date);
162 sticker_data->date = NULL;
169 static void _call_insert_finished_cb(sticker_provider_h provider_handle, GVariant *body)
172 g_variant_get(body, "(i)", &ret);
175 provider_handle->insert_finished_cb(STICKER_ERROR_NONE, provider_handle->insert_finished_cb_user_data);
177 provider_handle->insert_finished_cb(STICKER_ERROR_OPERATION_FAILED, provider_handle->insert_finished_cb_user_data);
181 static void _handle_sticker_consumer_cb(GDBusConnection *connection,
182 const gchar *sender_name,
183 const gchar *object_path,
184 const gchar *interface_name,
185 const gchar *signal_name,
186 GVariant *parameters,
189 LOGD("own_name : %s, signal_name : %s", g_dbus_connection_get_unique_name(connection), signal_name);
190 sticker_consumer_h consumer_handle = (sticker_consumer_h)user_data;
192 if (consumer_handle == NULL) {
193 LOGE("consumer handle is not available");
197 if (parameters == NULL) {
198 LOGE("failed to get sticker info");
202 #if 0 // Receive the sticker information by asynchronous communication.
203 if (g_strcmp0(signal_name, "send_group_list") == 0) {
204 if (consumer_handle->group_foreach_cb != NULL)
205 _call_sticker_list_cb(consumer_handle, parameters, signal_name);
207 } else if (g_strcmp0(signal_name, "send_keyword_list") == 0) {
208 if (consumer_handle->keyword_foreach_cb != NULL)
209 _call_sticker_list_cb(consumer_handle, parameters, signal_name);
213 sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s));
216 LOGE("failed to allocate memory");
220 _get_sticker_info_from_gvariant(parameters, sticker_data);
222 if (g_strcmp0(signal_name, "send_all_sticker_info") == 0) {
223 if (consumer_handle->data_foreach_cb != NULL)
224 consumer_handle->data_foreach_cb(sticker_data, consumer_handle->data_foreach_cb_user_data);
226 LOGW("No registered callback function");
227 } else if (g_strcmp0(signal_name, "send_sticker_info_by_keyword") == 0) {
228 if (consumer_handle->data_foreach_by_keyword_cb != NULL)
229 consumer_handle->data_foreach_by_keyword_cb(sticker_data, consumer_handle->data_foreach_by_keyword_cb_user_data);
231 LOGW("No registered callback function");
232 } else if (g_strcmp0(signal_name, "send_sticker_info_by_goup") == 0) {
233 if (consumer_handle->data_foreach_by_group_cb != NULL)
234 consumer_handle->data_foreach_by_group_cb(sticker_data, consumer_handle->data_foreach_by_group_cb_user_data);
236 LOGW("No registered callback function");
237 } else if (g_strcmp0(signal_name, "send_sticker_info_by_type") == 0) {
238 if (consumer_handle->data_foreach_by_type_cb != NULL)
239 consumer_handle->data_foreach_by_type_cb(sticker_data, consumer_handle->data_foreach_by_type_cb_user_data);
241 LOGW("No registered callback function");
244 _free_sticker_data(sticker_data);
248 static void _handle_sticker_provider_cb(GDBusConnection *connection,
249 const gchar *sender_name,
250 const gchar *object_path,
251 const gchar *interface_name,
252 const gchar *signal_name,
253 GVariant *parameters,
256 LOGD("own_name : %s, signal_name : %s", g_dbus_connection_get_unique_name(connection), signal_name);
257 sticker_provider_h provider_handle = (sticker_provider_h)user_data;
259 if (provider_handle == NULL) {
260 LOGE("provider handle is not available");
264 if (parameters == NULL) {
265 LOGE("failed to get sticker info");
269 if (g_strcmp0(signal_name, "send_insert_result") == 0) {
270 if (provider_handle->insert_finished_cb != NULL)
271 _call_insert_finished_cb(provider_handle, parameters);
274 #if 0 // Receive the sticker information by asynchronous communication.
275 sticker_data_h sticker_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s));
278 LOGE("failed to allocate memory");
282 _get_sticker_info_from_gvariant(parameters, sticker_data);
284 if (g_strcmp0(signal_name, "send_sticker_info_by_appid") == 0) {
285 if (provider_handle->data_foreach_cb != NULL)
286 provider_handle->data_foreach_cb(sticker_data, provider_handle->data_foreach_cb_user_data);
288 LOGW("No registered callback function");
291 _free_sticker_data(sticker_data);
295 static int _dbus_signal_init(GDBusConnection *gdbus_connection, int *monitor_id, CLIENT_LIB lib, void *data)
297 int ret = STICKER_CLIENT_ERROR_NONE;
298 if (*monitor_id == 0) {
300 if (lib == STICKER_CLIENT_LIB_CONSUMER)
301 id = g_dbus_connection_signal_subscribe(gdbus_connection,
303 STICKER_CONSUMER_INTERFACE_NAME,
307 G_DBUS_SIGNAL_FLAGS_NONE,
308 _handle_sticker_consumer_cb,
311 else if (lib == STICKER_CLIENT_LIB_PROVIDER)
312 id = g_dbus_connection_signal_subscribe(gdbus_connection,
314 STICKER_PROVIDER_INTERFACE_NAME,
318 G_DBUS_SIGNAL_FLAGS_NONE,
319 _handle_sticker_provider_cb,
324 ret = STICKER_CLIENT_ERROR_IO_ERROR;
325 LOGE("g_dbus_connection_signal_subscribe() failed");
334 static GDBusMessage *_get_gbus_message(GVariant *body, const char *cmd)
336 GDBusMessage *message = NULL;
337 message = g_dbus_message_new_method_call(
340 STICKER_INTERFACE_NAME,
344 LOGE("Failed to create a new gdbus message");
346 g_variant_unref(body);
351 g_dbus_message_set_body(message, body);
356 static int _send_gdbus_sync_message(GDBusConnection *gdbus_connection, GDBusMessage *msg, GDBusMessage **reply, const char *cmd)
358 int ret = STICKER_CLIENT_ERROR_NONE;
361 *reply = g_dbus_connection_send_message_with_reply_sync(
364 G_DBUS_SEND_MESSAGE_FLAGS_NONE,
371 ret = STICKER_CLIENT_ERROR_SERVICE_NOT_READY;
373 LOGE("Error occurred when sending message(%s) : %s", cmd, err->message);
374 if (err->code == G_DBUS_ERROR_ACCESS_DENIED)
375 ret = STICKER_CLIENT_ERROR_PERMISSION_DENIED;
381 if (g_dbus_message_to_gerror(*reply, &err)) {
382 LOGE("error message = %s, code = %d", err->message, err->code);
383 if (err->code == G_DBUS_ERROR_ACCESS_DENIED)
384 ret = STICKER_CLIENT_ERROR_PERMISSION_DENIED;
391 LOGD("Send a message to server(cmd : %s)", cmd);
392 return STICKER_CLIENT_ERROR_NONE;
395 static int _send_sync_message(GDBusConnection *gdbus_connection, GVariant *body, GDBusMessage **reply, char *cmd)
397 int ret = STICKER_CLIENT_ERROR_NONE;
398 GDBusMessage *msg = NULL;
400 msg = _get_gbus_message(body, cmd);
402 return STICKER_CLIENT_ERROR_IO_ERROR;
404 ret = _send_gdbus_sync_message(gdbus_connection, msg, reply, cmd);
412 static void _gdbus_reply_message_async_cb(GDBusConnection *connection, GAsyncResult *res, gpointer user_data)
414 GDBusMessage *reply = NULL;
417 reply = g_dbus_connection_send_message_with_reply_finish(connection, res, &err);
420 if (g_dbus_message_to_gerror(reply, &err)) {
421 LOGE("error message = %s, code = %d", err->message, err->code);
426 LOGE("There is no reply");
431 g_object_unref(reply);
433 LOGD("Reply message was received");
437 static int _send_async_message(GDBusConnection *gdbus_connection, GVariant *body, char *cmd)
439 int ret = STICKER_CLIENT_ERROR_NONE;
440 GDBusMessage *msg = NULL;
442 msg = _get_gbus_message(body, cmd);
444 return STICKER_CLIENT_ERROR_IO_ERROR;
446 g_dbus_connection_send_message_with_reply(
449 G_DBUS_SEND_MESSAGE_FLAGS_NONE,
453 (GAsyncReadyCallback)_gdbus_reply_message_async_cb,
462 static int _monitor_register(GDBusConnection *gdbus_connection)
465 GDBusMessage *reply = NULL;
467 ret = _send_sync_message(gdbus_connection, g_variant_new("()"), &reply, "sticker_service_register");
469 g_object_unref(reply);
471 if (ret != STICKER_CLIENT_ERROR_NONE) {
472 LOGE("_send_sync_message() failed : %d", ret);
476 is_server_started = 1;
480 static void _on_name_appeared(GDBusConnection *connection,
482 const gchar *name_owner,
485 if (is_server_started == 0)
486 _monitor_register(connection);
489 static void _on_name_vanished(GDBusConnection *connection,
493 is_server_started = 0;
496 int sticker_dbus_init(GDBusConnection **gdbus_connection, guint *server_watcher_id,
497 int *monitor_id, int *server_monitor_id, CLIENT_LIB lib, void *data)
501 ret = _dbus_init(gdbus_connection, server_watcher_id);
502 if (ret != STICKER_CLIENT_ERROR_NONE) {
503 LOGE("_dbus_init() failed : %d", ret);
507 ret = _dbus_signal_init(*gdbus_connection, monitor_id, lib, data);
508 if (ret != STICKER_CLIENT_ERROR_NONE) {
509 LOGE("_dbus_signal_init() failed : %d", ret);
513 ret = _monitor_register(*gdbus_connection);
514 if (ret != STICKER_CLIENT_ERROR_NONE) {
515 LOGE("_monitor_register() failed : %d", ret);
519 if (*server_monitor_id == 0) {
520 *server_monitor_id = g_bus_watch_name_on_connection(
523 G_BUS_NAME_WATCHER_FLAGS_NONE,
528 if (*server_monitor_id == 0) {
529 g_dbus_connection_signal_unsubscribe(*gdbus_connection, *monitor_id);
531 LOGE("Failed to get identifier");
532 return STICKER_CLIENT_ERROR_IO_ERROR;
536 return STICKER_CLIENT_ERROR_NONE;
539 int sticker_dbus_shutdown(GDBusConnection *gdbus_connection, int *server_monitor_id, int *monitor_id)
541 if (*server_monitor_id) {
542 g_bus_unwatch_name(*server_monitor_id);
543 *server_monitor_id = 0;
547 g_dbus_connection_signal_unsubscribe(gdbus_connection, *monitor_id);
551 return STICKER_CLIENT_ERROR_NONE;
554 static void _set_keyword_builder(char *keyword, GVariantBuilder *keyword_builder)
557 LOGE("keyword doesn't exist");
561 g_variant_builder_add(keyword_builder, "(s)", strdup((const char *)keyword));
564 int sticker_dbus_insert_sticker_info(GDBusConnection *gdbus_connection, sticker_data_h sticker_data)
568 GDBusMessage *reply = NULL;
569 GVariant *body = NULL;
570 GVariant *reply_body = NULL;
571 GVariantBuilder *info_builder;
572 GVariantBuilder *keyword_builder;
574 if (!sticker_data->app_id || (sticker_data->type < 1) || !sticker_data->uri || !sticker_data->group || !sticker_data->keyword)
575 return STICKER_CLIENT_ERROR_INVALID_PARAMETER;
577 info_builder = g_variant_builder_new(G_VARIANT_TYPE("a{iv}"));
578 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_APP_ID, g_variant_new_string((const gchar *)sticker_data->app_id));
579 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_URI_TYPE, g_variant_new_int32(sticker_data->type));
580 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_URI, g_variant_new_string((const gchar *)sticker_data->uri));
581 if (sticker_data->thumbnail)
582 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_THUMBNAIL, g_variant_new_string((const gchar *)sticker_data->thumbnail));
583 if (sticker_data->description)
584 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_DESCRIPTION, g_variant_new_string((const gchar *)sticker_data->description));
585 g_variant_builder_add(info_builder, "{iv}", STICKER_DATA_TYPE_GROUP, g_variant_new_string((const gchar *)sticker_data->group));
587 keyword_builder = g_variant_builder_new(G_VARIANT_TYPE("a(s)"));
588 g_list_foreach(sticker_data->keyword, (GFunc) _set_keyword_builder, keyword_builder);
590 body = g_variant_new("(a{iv}a(s))", info_builder, keyword_builder);
592 g_variant_builder_unref(info_builder);
593 g_variant_builder_unref(keyword_builder);
595 ret = _send_sync_message(gdbus_connection, body, &reply, "insert_sticker_info");
596 if (ret != STICKER_CLIENT_ERROR_NONE) {
597 LOGW("Failed to save sticker info");
601 reply_body = g_dbus_message_get_body(reply);
602 g_variant_get(reply_body, "(i)", &ret_id);
603 sticker_data->sticker_info_id = ret_id;
605 LOGD("ret_id : %d", ret_id);
607 g_variant_unref(body);
610 g_variant_unref(reply_body);
613 g_object_unref(reply);
618 int sticker_dbus_insert_sticker_info_by_json(GDBusConnection *gdbus_connection, const char *app_id, const char *json_path)
621 GVariant *body = NULL;
623 body = g_variant_new("(ss)", app_id, json_path);
624 ret = _send_async_message(gdbus_connection, body, "update_sticker_info_by_json");
625 if (ret != STICKER_CLIENT_ERROR_NONE)
626 LOGE("failed to send json path");
629 g_variant_unref(body);
634 int sticker_dbus_delete_sticker_info(GDBusConnection *gdbus_connection, int record_id)
637 GDBusMessage *reply = NULL;
638 GVariant *body = NULL;
640 body = g_variant_new("(i)", record_id);
641 ret = _send_sync_message(gdbus_connection, body, &reply, "delete_sticker_info");
642 if (ret != STICKER_CLIENT_ERROR_NONE)
643 LOGE("failed to delete sticker info");
646 g_variant_unref(body);
649 g_object_unref(reply);
654 int sticker_dbus_update_sticker_info(GDBusConnection *gdbus_connection, sticker_data_h sticker_data)
657 GDBusMessage *reply = NULL;
658 GVariant *body = NULL;
659 GVariant *reply_body = NULL;
660 sticker_data_h origin_data = (sticker_data_h)calloc(1, sizeof(struct sticker_data_s));
663 LOGE("failed to allocate memory");
664 return STICKER_CLIENT_ERROR_OUT_OF_MEMORY;
667 body = g_variant_new("(i)", sticker_data->sticker_info_id);
668 ret = _send_sync_message(gdbus_connection, body, &reply, "get_sticker_info");
670 if (ret == STICKER_CLIENT_ERROR_NONE) {
671 reply_body = g_dbus_message_get_body(reply);
672 _get_sticker_info_from_gvariant(reply_body, origin_data);
674 LOGW("failed to get sticker info");
677 g_object_unref(reply);
679 g_variant_unref(body);
683 if (sticker_data->type != 0 && sticker_data->type != origin_data->type) {
684 LOGD("origin_type : %d, new_type : %d", origin_data->type, sticker_data->type);
685 g_variant_unref(body);
686 body = g_variant_new("(ii)", sticker_data->sticker_info_id, sticker_data->type);
687 ret = _send_sync_message(gdbus_connection, body, &reply, "update_sticker_type");
688 if (ret != STICKER_CLIENT_ERROR_NONE)
689 LOGE("falied to update sticker type");
692 if (sticker_data->uri && strcmp(sticker_data->uri, origin_data->uri) != 0) {
693 LOGD("origin_uri : %s, new_uri : %s", origin_data->uri, sticker_data->uri);
694 g_variant_unref(body);
695 body = g_variant_new("(isis)", sticker_data->sticker_info_id, sticker_data->app_id, sticker_data->type, sticker_data->uri);
696 ret = _send_sync_message(gdbus_connection, body, &reply, "update_sticker_uri");
697 if (ret != STICKER_CLIENT_ERROR_NONE)
698 LOGE("falied to update sticker uri");
701 if (sticker_data->thumbnail && strcmp(sticker_data->thumbnail, origin_data->thumbnail) != 0) {
702 LOGD("origin_thumbnail : %s, new_thumbnail : %s", origin_data->thumbnail, sticker_data->thumbnail);
703 g_variant_unref(body);
704 body = g_variant_new("(is)", sticker_data->sticker_info_id, sticker_data->thumbnail);
705 ret = _send_sync_message(gdbus_connection, body, &reply, "update_sticker_thumbnail");
706 if (ret != STICKER_CLIENT_ERROR_NONE)
707 LOGE("falied to update sticker thumbnail");
710 if (sticker_data->description && strcmp(sticker_data->description, origin_data->description) != 0) {
711 LOGD("origin_description : %s, new_description : %s", origin_data->description, sticker_data->description);
712 g_variant_unref(body);
713 body = g_variant_new("(is)", sticker_data->sticker_info_id, sticker_data->description);
714 ret = _send_sync_message(gdbus_connection, body, &reply, "update_sticker_description");
715 if (ret != STICKER_CLIENT_ERROR_NONE)
716 LOGE("falied to update sticker description");
719 if (sticker_data->group && strcmp(sticker_data->group, origin_data->group) != 0) {
720 LOGD("origin_group : %s, new_group : %s", origin_data->group, sticker_data->group);
721 g_variant_unref(body);
722 body = g_variant_new("(is)", sticker_data->sticker_info_id, sticker_data->group);
723 ret = _send_sync_message(gdbus_connection, body, &reply, "update_sticker_group");
724 if (ret != STICKER_CLIENT_ERROR_NONE)
725 LOGE("falied to update sticker group");
728 if (sticker_data->keyword) {
729 GVariantBuilder *keyword_builder;
730 g_variant_unref(body);
731 keyword_builder = g_variant_builder_new(G_VARIANT_TYPE("a(s)"));
732 g_list_foreach(sticker_data->keyword, (GFunc) _set_keyword_builder, keyword_builder);
733 body = g_variant_new("(ia(s))", sticker_data->sticker_info_id, keyword_builder);
734 ret = _send_sync_message(gdbus_connection, body, &reply, "update_sticker_keyword");
735 if (ret != STICKER_CLIENT_ERROR_NONE)
736 LOGE("falied to update sticker keyword");
739 _free_sticker_data(origin_data);
742 g_variant_unref(body);
745 g_variant_unref(reply_body);
748 g_object_unref(reply);
753 int sticker_dbus_get_sticker_info_by_record_id(GDBusConnection *gdbus_connection, sticker_data_h sticker_data, int record_id)
756 GDBusMessage *reply = NULL;
757 GVariant *body = NULL;
758 GVariant *reply_body = NULL;
760 body = g_variant_new("(i)", record_id);
761 ret = _send_sync_message(gdbus_connection, body, &reply, "get_sticker_info");
763 if (ret == STICKER_CLIENT_ERROR_NONE) {
764 reply_body = g_dbus_message_get_body(reply);
765 sticker_data->sticker_info_id = record_id;
766 _get_sticker_info_from_gvariant(reply_body, sticker_data);
769 g_variant_unref(reply_body);
773 g_variant_unref(body);
776 g_object_unref(reply);
781 int sticker_dbus_get_group_list(GDBusConnection *gdbus_connection, GList **group_list)
784 GDBusMessage *reply = NULL;
785 GVariantIter *iter = NULL;
786 GVariant *body = NULL;
787 GVariant *reply_body = NULL;
790 if (group_list == NULL) {
791 LOGE("group_list is invalid");
792 return STICKER_CLIENT_ERROR_INVALID_PARAMETER;
795 body = g_variant_new("()");
796 ret = _send_sync_message(gdbus_connection, body, &reply, "get_group_list");
798 if (ret == STICKER_CLIENT_ERROR_NONE) {
799 reply_body = g_dbus_message_get_body(reply);
800 g_variant_get(reply_body, "(a(s))", &iter);
803 LOGD("falied to get iter");
804 return STICKER_CLIENT_ERROR_OPERATION_FAILED;
807 while (g_variant_iter_loop (iter, "(s)", &group)) {
808 *group_list = g_list_append(*group_list, strdup((const char *)group));
811 g_variant_iter_free(iter);
815 g_variant_unref(body);
818 g_variant_unref(reply_body);
821 g_object_unref(reply);
826 int sticker_dbus_get_keyword_list(GDBusConnection *gdbus_connection, GList **keyword_list)
829 GDBusMessage *reply = NULL;
830 GVariantIter *iter = NULL;
831 GVariant *body = NULL;
832 GVariant *reply_body = NULL;
833 char *keyword = NULL;
835 if (keyword_list == NULL) {
836 LOGE("keyword_list is invalid");
837 return STICKER_CLIENT_ERROR_INVALID_PARAMETER;
840 body = g_variant_new("()");
841 ret = _send_sync_message(gdbus_connection, body, &reply, "get_keyword_list");
843 if (ret == STICKER_CLIENT_ERROR_NONE) {
844 reply_body = g_dbus_message_get_body(reply);
845 g_variant_get(reply_body, "(a(s))", &iter);
848 LOGD("falied to get iter");
849 return STICKER_CLIENT_ERROR_OPERATION_FAILED;
852 while (g_variant_iter_loop (iter, "(s)", &keyword)) {
853 *keyword_list = g_list_append(*keyword_list, strdup((const char *)keyword));
856 g_variant_iter_free(iter);
860 g_variant_unref(body);
863 g_variant_unref(reply_body);
866 g_object_unref(reply);
871 int sticker_dbus_get_sticker_count(GDBusConnection *gdbus_connection, const char *app_id, int *count)
874 GDBusMessage *reply = NULL;
875 GVariant *body = NULL;
876 GVariant *reply_body = NULL;
878 body = g_variant_new("(s)", app_id);
879 ret = _send_sync_message(gdbus_connection, body, &reply, "get_sticker_count");
881 if (ret == STICKER_CLIENT_ERROR_NONE) {
882 reply_body = g_dbus_message_get_body(reply);
883 g_variant_get(reply_body, "(i)", count);
887 g_variant_unref(body);
890 g_variant_unref(reply_body);
893 g_object_unref(reply);
898 int sticker_dbus_get_all_sticker_info(GDBusConnection *gdbus_connection, int offset, int count, GVariantIter **id_iter)
901 GDBusMessage *reply = NULL;
902 GVariant *body = NULL;
903 GVariant *reply_body = NULL;
905 body = g_variant_new("(ii)", offset, count);
906 ret = _send_sync_message(gdbus_connection, body, &reply, "get_all_sticker_info");
907 if (ret == STICKER_CLIENT_ERROR_NONE) {
908 reply_body = g_dbus_message_get_body(reply);
909 g_variant_get(reply_body, "(a(i))", &(*id_iter));
913 g_variant_unref(body);
916 g_variant_unref(reply_body);
919 g_object_unref(reply);
924 int sticker_dbus_get_sticker_info_by_appid(GDBusConnection *gdbus_connection, const char *app_id, int offset, int count, GVariantIter **id_iter)
927 GDBusMessage *reply = NULL;
928 GVariant *body = NULL;
929 GVariant *reply_body = NULL;
931 body = g_variant_new("(sii)", app_id, offset, count);
932 ret = _send_sync_message(gdbus_connection, body, &reply, "get_sticker_info_by_appid");
933 if (ret == STICKER_CLIENT_ERROR_NONE) {
934 reply_body = g_dbus_message_get_body(reply);
935 g_variant_get(reply_body, "(a(i))", &(*id_iter));
939 g_variant_unref(body);
942 g_variant_unref(reply_body);
945 g_object_unref(reply);
950 int sticker_dbus_get_sticker_info_by_type(GDBusConnection *gdbus_connection, sticker_data_uri_type_e type, int offset, int count, GVariantIter **id_iter)
953 GDBusMessage *reply = NULL;
954 GVariant *body = NULL;
955 GVariant *reply_body = NULL;
957 body = g_variant_new("(iii)", (int)type, offset, count);
958 ret = _send_sync_message(gdbus_connection, body, &reply, "get_sticker_info_by_type");
959 if (ret == STICKER_CLIENT_ERROR_NONE) {
960 reply_body = g_dbus_message_get_body(reply);
961 g_variant_get(reply_body, "(a(i))", &(*id_iter));
965 g_variant_unref(body);
968 g_variant_unref(reply_body);
971 g_object_unref(reply);
976 int sticker_dbus_get_sticker_info_by_group(GDBusConnection *gdbus_connection, const char *group, int offset, int count, GVariantIter **id_iter)
979 GDBusMessage *reply = NULL;
980 GVariant *body = NULL;
981 GVariant *reply_body = NULL;
983 body = g_variant_new("(sii)", group, offset, count);
984 ret = _send_sync_message(gdbus_connection, body, &reply, "get_sticker_info_by_group");
985 if (ret == STICKER_CLIENT_ERROR_NONE) {
986 reply_body = g_dbus_message_get_body(reply);
987 g_variant_get(reply_body, "(a(i))", &(*id_iter));
991 g_variant_unref(body);
994 g_variant_unref(reply_body);
997 g_object_unref(reply);
1002 int sticker_dbus_get_sticker_info_by_keyword(GDBusConnection *gdbus_connection, const char *keyword, int offset, int count, GVariantIter **id_iter)
1005 GDBusMessage *reply = NULL;
1006 GVariant *body = NULL;
1007 GVariant *reply_body = NULL;
1009 body = g_variant_new("(sii)", keyword, offset, count);
1010 ret = _send_sync_message(gdbus_connection, body, &reply, "get_sticker_info_by_keyword");
1011 if (ret == STICKER_CLIENT_ERROR_NONE) {
1012 reply_body = g_dbus_message_get_body(reply);
1013 g_variant_get(reply_body, "(a(i))", &(*id_iter));
1017 g_variant_unref(body);
1020 g_variant_unref(reply_body);
1023 g_object_unref(reply);