[bluetooth-frwk] listFolders filter, refactor, removed GVariant, cleanup 53/102853/2
authorPiotr Dabrowski <p.dabrowski2@samsung.com>
Thu, 17 Nov 2016 13:45:05 +0000 (14:45 +0100)
committerPyun DoHyun <dh79.pyun@samsung.com>
Thu, 8 Dec 2016 00:21:32 +0000 (16:21 -0800)
Change-Id: Ifcd1cf3311f1f64b78c92de4bf366f9515e39073

bt-api/bt-map-client.c
bt-service/bt-request-handler.c
bt-service/bt-service-map-client.c
bt-service/include/bt-service-map-client.h
include/bluetooth-api.h

index 660a4f8..0da32ed 100644 (file)
 #include "bt-dpm.h"
 #endif
 
+GVariant *__g_variant_new_array_split(char *str) {
+       GVariantBuilder b;
+       g_variant_builder_init(&b, (const GVariantType*) "a{s}");
+       char *pos = str;
+       char *item;
+       while ((item = strsep(&pos, ","))) {
+               g_variant_builder_add(&b, "{s}", item);
+       }
+       return g_variant_builder_end(&b);
+}
+
 BT_EXPORT_API int bluetooth_map_client_init(void)
 {
        BT_DBG("bluetooth_map_client_init");
@@ -135,8 +146,7 @@ BT_EXPORT_API int bluetooth_map_client_set_folder(
 
 BT_EXPORT_API int bluetooth_map_client_list_folders(
                bt_map_client_session_info_s *session,
-           int offset,
-           int maxcount)
+               bt_map_client_list_folders_filter_t *filter)
 {
        BT_DBG("bluetooth_map_list_folders");
        int result = 0;
@@ -150,15 +160,25 @@ BT_EXPORT_API int bluetooth_map_client_list_folders(
        BT_INIT_PARAMS();
        BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
 
+       GVariantBuilder b;
+       g_variant_builder_init(&b, (const GVariantType*) "a{sv}");
+       if (filter->offset > -1)
+               g_variant_builder_add(&b, "{sv}", "Offset", g_variant_new_uint16(filter->offset));
+       if (filter->max_count > -1)
+               g_variant_builder_add(&b, "{sv}", "MaxCount", g_variant_new_uint16(filter->max_count));
+       GVariant *filter_variant = g_variant_builder_end(&b);
+       char *filter_serialized = g_variant_print(filter_variant, TRUE);
+
        g_array_append_vals(in_param1, session->session_path, strlen(session->session_path)+1);
-       g_array_append_vals(in_param2, &offset, sizeof(offset));
-       g_array_append_vals(in_param3, &maxcount, sizeof(maxcount));
+       g_array_append_vals(in_param2, filter_serialized, strlen(filter_serialized)+1);
 
        result = _bt_send_request_async(BT_OBEX_SERVICE, BT_MAP_LIST_FOLDERS,
                        in_param1, in_param2, in_param3, in_param4, user_info->cb, user_info->user_data);
 
        BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
 
+       free(filter_serialized);
+
        return result;
 }
 
@@ -192,7 +212,7 @@ BT_EXPORT_API int bluetooth_map_client_list_filter_fields(
 BT_EXPORT_API int bluetooth_map_client_list_messages(
     bt_map_client_session_info_s *session,
     const char *folder,
-    GVariant *filter)
+    bt_map_client_list_messages_filter_t *filter)
 {
        BT_DBG("bluetooth_map_client_list_messages");
        int result = 0;
@@ -208,18 +228,43 @@ BT_EXPORT_API int bluetooth_map_client_list_messages(
        BT_INIT_PARAMS();
        BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
 
-       char *filter_string = g_variant_print(filter, TRUE);
+       GVariantBuilder b;
+       g_variant_builder_init(&b, (const GVariantType*) "a{sv}");
+       if (filter->offset > -1)
+               g_variant_builder_add(&b, "{sv}", "Offset", g_variant_new_uint16(filter->offset));
+       if (filter->max_count > -1)
+               g_variant_builder_add(&b, "{sv}", "MaxCount", g_variant_new_uint16(filter->max_count));
+       if (filter->subject_length > -1)
+               g_variant_builder_add(&b, "{sv}", "SubjectLength", g_variant_new_byte(filter->subject_length));
+       if (filter->fields != NULL)
+               g_variant_builder_add(&b, "{sv}", "Fields", __g_variant_new_array_split(filter->fields));
+       if (filter->types != NULL)
+               g_variant_builder_add(&b, "{sv}", "Types", __g_variant_new_array_split(filter->types));
+       if (filter->period_begin != NULL)
+               g_variant_builder_add(&b, "{sv}", "PeriodBegin", g_variant_new_string(filter->period_begin));
+       if (filter->period_end != NULL)
+               g_variant_builder_add(&b, "{sv}", "PeriodEnd", g_variant_new_string(filter->period_end));
+       if (filter->is_read > -1)
+               g_variant_builder_add(&b, "{sv}", "Read", g_variant_new_boolean(filter->is_read == 1 ? TRUE : FALSE));
+       if (filter->recipient != NULL)
+               g_variant_builder_add(&b, "{sv}", "Recipient", g_variant_new_string(filter->recipient));
+       if (filter->sender != NULL)
+               g_variant_builder_add(&b, "{sv}", "Sender", g_variant_new_string(filter->sender));
+       if (filter->is_priority > -1)
+               g_variant_builder_add(&b, "{sv}", "Priority", g_variant_new_boolean(filter->is_priority == 1 ? TRUE : FALSE));
+       GVariant *filter_variant = g_variant_builder_end(&b);
+       char *filter_serialized = g_variant_print(filter_variant, TRUE);
 
        g_array_append_vals(in_param1, session->session_path, strlen(session->session_path)+1);
        g_array_append_vals(in_param2, folder, strlen(folder)+1);
-       g_array_append_vals(in_param3, filter_string, strlen(filter_string)+1);
+       g_array_append_vals(in_param3, filter_serialized, strlen(filter_serialized)+1);
 
        result = _bt_send_request_async(BT_OBEX_SERVICE, BT_MAP_LIST_MESSAGES,
                        in_param1, in_param2, in_param3, in_param4, user_info->cb, user_info->user_data);
 
        BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
 
-       free(filter_string);
+       free(filter_serialized);
 
        return result;
 }
@@ -255,7 +300,7 @@ BT_EXPORT_API int bluetooth_map_client_push_message(
     bt_map_client_session_info_s *session,
     const char *source_file,
     const char *folder,
-    GVariant *args)
+    bt_map_client_push_message_args_t *args)
 {
     BT_DBG("bluetooth_map_client_push_message");
     int result = BLUETOOTH_ERROR_INTERNAL;
index 3c3e015..d0d00d6 100644 (file)
@@ -2293,13 +2293,11 @@ int __bt_obexd_request(int function_name,
 
        case BT_MAP_LIST_FOLDERS: {
                BT_DBG("BT_MAP_LIST_FOLDERS");
+
                char* session_id = (char *)g_variant_get_data(in_param1);
-               int offset = 0;
-               int maxcount = 0;
-               __bt_service_get_parameters(in_param2, &offset, sizeof(int));
-               __bt_service_get_parameters(in_param3, &maxcount, sizeof(int));
+               char* filter_serialized = (char*)g_variant_get_data(in_param2);
 
-               result = _bt_map_client_list_folders(request_id, context, session_id, offset, maxcount);
+               result = _bt_map_client_list_folders(request_id, context, session_id, filter_serialized);
                if (result == BLUETOOTH_ERROR_NONE) {
                        BT_DBG("_bt_map_client_list_folders succeed");
                }
@@ -2323,10 +2321,9 @@ int __bt_obexd_request(int function_name,
 
                char* session_id = (char*)g_variant_get_data(in_param1);
                char* folder = (char*)g_variant_get_data(in_param2);
-               char* filter_string = (char*)g_variant_get_data(in_param3);
-               GVariant *filter = g_variant_parse(NULL, filter_string, NULL, NULL, NULL);
+               char* filter_serialized = (char*)g_variant_get_data(in_param3);
 
-               result = _bt_map_client_list_messages(request_id, context, session_id, folder, filter);
+               result = _bt_map_client_list_messages(request_id, context, session_id, folder, filter_serialized);
                if (result == BLUETOOTH_ERROR_NONE) {
                        BT_DBG("_bt_map_client_list_messages succeed");
                } else {
index 314ae2e..ff7ad9a 100644 (file)
@@ -409,11 +409,13 @@ static void __bt_list_folders_cb(GDBusProxy *proxy,
        BT_DBG("-");
 }
 
-int _bt_map_client_list_folders(int request_id, GDBusMethodInvocation *context,
-               const char* session_id, int offset, int maxcount)
+int _bt_map_client_list_folders(
+       int request_id,
+       GDBusMethodInvocation *context,
+       const char* session_id,
+       const char* filter_serialized)
 {
        BT_DBG("Entered _bt_map_list_folders with session id: \"%s\"", session_id);
-       BT_DBG("Entered offset: %d maxcount: %d", offset, maxcount);
        GDBusConnection *g_conn;
        GDBusProxy *message_access_proxy;
        GError *error = NULL;
@@ -444,17 +446,10 @@ int _bt_map_client_list_folders(int request_id, GDBusMethodInvocation *context,
                        result = BLUETOOTH_ERROR_INTERNAL;
                } else {
                        BT_DBG("message proxy set");
-                       GVariantBuilder* b = g_variant_builder_new (G_VARIANT_TYPE_ARRAY);
-                       if (offset >= 0) {
-                               g_variant_builder_add(b, "{sv}", "Offset", g_variant_new_uint16(offset));
-                       }
-                       if (maxcount >= 0) {
-                               g_variant_builder_add(b, "{sv}", "MaxCount", g_variant_new_uint16(maxcount));
-                       }
-                       GVariant *args = g_variant_builder_end(b);
-                       GVariant *params = g_variant_new("(@a{sv})", args);
-                       g_variant_builder_unref (b);
 
+                       GVariant *filter_variant = g_variant_parse(NULL, filter_serialized, NULL, NULL, NULL);
+
+                       GVariant *params = g_variant_new("(@a{sv})", filter_variant);
                        GVariant *param = g_variant_new("(i)", request_id);
 
                        g_dbus_proxy_call(message_access_proxy,
@@ -463,7 +458,6 @@ int _bt_map_client_list_folders(int request_id, GDBusMethodInvocation *context,
                                NULL,
                                (GAsyncReadyCallback)__bt_list_folders_cb,
                                (void*)param);
-
                }
        }
 
@@ -515,7 +509,6 @@ int _bt_map_client_list_filter_fields(int request_id, GDBusMethodInvocation *con
        GError *err = NULL;
        GDBusConnection *g_conn;
        GDBusProxy *message_proxy;
-       GVariantBuilder *builder;
        GVariant *ret = NULL;
        int result = BLUETOOTH_ERROR_NONE;
 
@@ -594,7 +587,7 @@ int _bt_map_client_list_messages(
                GDBusMethodInvocation *context,
                const char* session_id,
                const char* folder,
-               GVariant *filter)
+               const char* filter_serialized)
 {
        BT_DBG("Entered _bt_map_client_list_messages with session id: \"%s\"", session_id);
        BT_DBG("Entered folder: %s", folder);
@@ -629,7 +622,9 @@ int _bt_map_client_list_messages(
                } else {
                        BT_DBG("message proxy set");
 
-                       GVariant *params = g_variant_new("(s@a{sv})", folder, filter);
+                       GVariant *filter_variant = g_variant_parse(NULL, filter_serialized, NULL, NULL, NULL);
+
+                       GVariant *params = g_variant_new("(s@a{sv})", folder, filter_variant);
                        GVariant *param = g_variant_new("(i)", request_id);
 
                        g_dbus_proxy_call(message_access_proxy,
@@ -654,7 +649,6 @@ int _bt_map_client_update_inbox(const char* session_id)
        GError *err = NULL;
        GDBusConnection *g_conn;
        GDBusProxy *message_proxy;
-       GVariantBuilder *builder;
        GVariant *ret = NULL;
 
        g_conn = _bt_gdbus_get_session_gconn();
@@ -694,7 +688,7 @@ int _bt_map_client_push_message(
                const char* session_id,
                const char* source_file,
                const char* folder,
-               GVariant *args)
+               const char* args_serialized)
 {
        BT_DBG("+");
 
index 85d3bb0..2947c62 100644 (file)
@@ -61,25 +61,36 @@ typedef struct {
 
 } bt_session_data_t; /* TODO: "session"? */
 
-int _bt_create_session_sync(const char* address, char** session_id);
-int _bt_destroy_session_sync(const char* session_id);
-int _bt_map_client_set_folder(const char* session_id, const char* name);
-int _bt_map_client_list_folders(int request_id, GDBusMethodInvocation *context,
-               const char* session_id, int offset, int maxcount);
-int _bt_map_client_list_filter_fields(int request_id, GDBusMethodInvocation *context,
+int _bt_create_session_sync(
+               const char* address,
+               char** session_id);
+int _bt_destroy_session_sync(
+               const char* session_id);
+int _bt_map_client_set_folder(
+               const char* session_id,
+               const char* name);
+int _bt_map_client_list_folders(
+               int request_id,
+               GDBusMethodInvocation *context,
+               const char* session_id,
+               const char* filter_serialized);
+int _bt_map_client_list_filter_fields(
+               int request_id,
+               GDBusMethodInvocation *context,
                const char* session_id);
 int _bt_map_client_list_messages(
                int request_id,
                GDBusMethodInvocation *context,
                const char* session_id,
                const char* folder,
-               GVariant *filter);
-int _bt_map_client_update_inbox(const char* session_id);
+               const char* filter_serialized);
+int _bt_map_client_update_inbox(
+               const char* session_id);
 int _bt_map_client_push_message(
                const char* session_id,
                const char* source_file,
                const char* folder,
-               GVariant *args);
+               const char* args_serialized);
 int _bt_map_client_get_message(
                int request_id,
                GDBusMethodInvocation *context,
index 24b0c7f..3151e0d 100644 (file)
@@ -1806,7 +1806,7 @@ typedef struct {
 
 typedef struct {
        int16_t offset;
-       int16_t maxcount;
+       int16_t max_count;
 } bt_map_client_list_folders_filter_t;
 
 typedef struct {
@@ -4948,8 +4948,7 @@ int bluetooth_map_client_set_folder(
 
 int bluetooth_map_client_list_folders(
     bt_map_client_session_info_s *session,
-    int offset,
-    int maxcount
+    bt_map_client_list_folders_filter_t *filter
 );
 
 /**
@@ -4973,7 +4972,7 @@ int bluetooth_map_client_list_filter_fields(
 int bluetooth_map_client_list_messages(
     bt_map_client_session_info_s *session,
     const char *folder,
-    GVariant *filter
+    bt_map_client_list_messages_filter_t *filter
 );
 
 int bluetooth_map_client_update_inbox(
@@ -4984,7 +4983,7 @@ int bluetooth_map_client_push_message(
     bt_map_client_session_info_s *session,
     const char *source_file,
     const char *folder,
-    GVariant *args
+    bt_map_client_push_message_args_t *args
 );
 
 int bluetooth_map_client_get_message(