[bluetooth-frwk] listMessages
[platform/core/connectivity/bluetooth-frwk.git] / bt-service / bt-service-map-client.c
index d554e3d..f457155 100644 (file)
@@ -546,18 +546,96 @@ int _bt_map_client_list_filter_fields(int request_id, GDBusMethodInvocation *con
        return BLUETOOTH_ERROR_NONE;
 }
 
+static void __bt_list_messages_cb(
+       GDBusProxy *proxy, GAsyncResult *res, gpointer user_data)
+{
+       BT_DBG("+");
+
+       GError *error = NULL;
+       GVariant *value, *in_param, *param;
+
+       int result = BLUETOOTH_ERROR_NONE;
+       int request_id;
+       int size = 0;
+
+       in_param = (GVariant*) user_data;
+       g_variant_get(in_param, "(i)", &request_id);
+
+       value = g_dbus_proxy_call_finish(proxy, res, &error);
+
+       if (error) {
+               BT_ERR("%s", error->message);
+               g_clear_error(&error);
+               result = BLUETOOTH_ERROR_INTERNAL;
+       }
+
+       param = g_variant_new("(iiv)", result, request_id, value);
+       BT_DBG("RequestID[%d]", request_id);
+       result = _bt_send_event(BT_MAP_CLIENT_EVENT,
+                       BLUETOOTH_EVENT_MAP_LIST_MESSAGES_COMPLETE, param);
+
+       g_variant_unref(value);
+       g_variant_unref(in_param);
+
+       BT_DBG("-");
+}
+
 int _bt_map_client_list_messages(
+               int request_id,
+               GDBusMethodInvocation *context,
                const char* session_id,
                const char* folder,
                GVariant *filter)
 {
-       BT_DBG("+");
+       BT_DBG("Entered _bt_map_client_list_messages with session id: \"%s\"", session_id);
+       BT_DBG("Entered folder: %s", folder);
+       GDBusConnection *g_conn;
+       GDBusProxy *message_access_proxy;
+       GError *error = NULL;
+       int result = BLUETOOTH_ERROR_NONE;
 
-       /* TODO: MAP */
+       retv_if(session_id == NULL, BLUETOOTH_ERROR_INVALID_PARAM);
+
+       g_conn = _bt_gdbus_get_session_gconn();
+       retv_if(g_conn == NULL, BLUETOOTH_ERROR_INTERNAL);
+
+       GVariant *out_param1 = g_variant_new_from_data((const GVariantType *)"ay",
+                       &request_id, sizeof(int),
+                       TRUE, NULL, NULL);
+       g_dbus_method_invocation_return_value(context,
+                       g_variant_new("(iv)", result, out_param1));
 
+       // create message access proxy
+       g_clear_error(&error);
+       message_access_proxy = g_dbus_proxy_new_sync(g_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+                       BT_OBEX_SERVICE_NAME, session_id, "org.bluez.obex.MessageAccess1",
+                       NULL, &error);
+       if (error != NULL) {
+               BT_ERR("Could not create message access proxy: %s\n", error->message);
+               result = BLUETOOTH_ERROR_INTERNAL;
+       } else {
+               if (!message_access_proxy) {
+                       BT_ERR("message proxy handle is null\n");
+                       result = BLUETOOTH_ERROR_INTERNAL;
+               } else {
+                       BT_DBG("message proxy set");
+
+                       GVariant *params = g_variant_new("(s@a{sv})", folder, filter);
+                       GVariant *param = g_variant_new("(i)", request_id);
+
+                       g_dbus_proxy_call(message_access_proxy,
+                               "ListMessages", params,
+                               G_DBUS_CALL_FLAGS_NONE, -1,
+                               NULL,
+                               (GAsyncReadyCallback)__bt_list_messages_cb,
+                               (void*)param);
+               }
+       }
+
+       g_object_unref(message_access_proxy);
        BT_DBG("-");
 
-       return BLUETOOTH_ERROR_NONE;
+       return result;
 }
 
 int _bt_map_client_update_inbox(const char* session_id)