#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");
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;
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;
}
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;
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;
}
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;
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");
}
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 {
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;
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,
NULL,
(GAsyncReadyCallback)__bt_list_folders_cb,
(void*)param);
-
}
}
GError *err = NULL;
GDBusConnection *g_conn;
GDBusProxy *message_proxy;
- GVariantBuilder *builder;
GVariant *ret = NULL;
int result = BLUETOOTH_ERROR_NONE;
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);
} 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,
GError *err = NULL;
GDBusConnection *g_conn;
GDBusProxy *message_proxy;
- GVariantBuilder *builder;
GVariant *ret = NULL;
g_conn = _bt_gdbus_get_session_gconn();
const char* session_id,
const char* source_file,
const char* folder,
- GVariant *args)
+ const char* args_serialized)
{
BT_DBG("+");
} 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,
typedef struct {
int16_t offset;
- int16_t maxcount;
+ int16_t max_count;
} bt_map_client_list_folders_filter_t;
typedef struct {
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
);
/**
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(
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(