#define OBEX_PREFIX "org.bluez.obex"
-#define OBEX_CLIENT_SERVICE OBEX_PREFIX ".client"
-#define OBEX_CLIENT_IFACE OBEX_PREFIX ".Client"
-#define OBEX_PHONEBOOK_IFACE OBEX_PREFIX ".PhonebookAccess"
-#define OBEX_TRANSFER_IFACE OBEX_PREFIX ".Transfer"
+#define OBEX_CLIENT_IFACE OBEX_PREFIX ".Client1"
+#define OBEX_PHONEBOOK_IFACE OBEX_PREFIX ".PhonebookAccess1"
+#define OBEX_TRANSFER_IFACE OBEX_PREFIX ".Transfer1"
// check for stalled active transfer (in seconds)
#define CHECK_STALLED_TRANSFER_TIMEOUT 120
GVariant *parameters = g_variant_builder_end(builder);
g_dbus_connection_call( g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, NULL),
- OBEX_CLIENT_SERVICE,
- "/",
+ OBEX_PREFIX,
+ "/org/bluez/obex",
OBEX_CLIENT_IFACE,
"CreateSession",
parameters,
GError *err = NULL;
g_dbus_connection_call_sync( g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, NULL),
- OBEX_CLIENT_SERVICE,
+ OBEX_PREFIX,
mSession,
OBEX_PHONEBOOK_IFACE,
"Select",
GError *err = NULL;
g_dbus_connection_call_sync( g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, NULL),
- OBEX_CLIENT_SERVICE,
- "/",
+ OBEX_PREFIX,
+ "/org/bluez/obex",
OBEX_CLIENT_IFACE,
"RemoveSession",
g_variant_new("(o)", mSession), // floating variants are consumed
if(mActiveTransfer) {
GError *err = NULL;
g_dbus_connection_call_sync( g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, NULL),
- OBEX_CLIENT_SERVICE,
+ OBEX_PREFIX,
mActiveTransfer,
OBEX_TRANSFER_IFACE,
"Cancel",
GVariant *parameters = g_variant_builder_end(builder);
reply = g_dbus_connection_call_sync( g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, NULL),
- OBEX_CLIENT_SERVICE,
+ OBEX_PREFIX,
mSession,
OBEX_PHONEBOOK_IFACE,
"PullAll",
const char *transfer = NULL;
GVariantIter *iter;
- g_variant_get(reply, "((oa{sv}))", &transfer, &iter);
+ g_variant_get(reply, "(oa{sv})", &transfer, &iter);
LoggerD("transfer path = " << transfer);
mActiveTransfer = strdup(transfer);
g_timeout_add(CHECK_STALLED_TRANSFER_TIMEOUT*1000,
// let's abuse 'cb' field from CtxCbData to store selected remote device's MAC
CtxCbData *data = new CtxCbData(this, strdup(mSelectedRemoteDevice.c_str()), NULL, (void*)type);
- // we can set signal listener for "Error" from here,
- // since we don't need to know file path of stored transfer data
- Utils::setSignalListener(G_BUS_TYPE_SESSION, OBEX_CLIENT_SERVICE,
- OBEX_TRANSFER_IFACE, transfer, "Error",
- Obex::handleSignal, data); //TODO: think of using 'error' callback here,
- // or if error occurs, returns empty NULL string
const char *key;
GVariant *value;
// !!! what if signal comes before we subscribe for it? ... CAN IT? ... signals from DBUS
// should be executed in the thread the registration was made from, ie. this method has to
// to be completed first
- data->data1 = strdup(fileName);
- Utils::setSignalListener(G_BUS_TYPE_SESSION, OBEX_CLIENT_SERVICE,
- OBEX_TRANSFER_IFACE, transfer, "Complete",
+ data->data1 = strdup(fileName);
+ Utils::setSignalListener(G_BUS_TYPE_SESSION, OBEX_PREFIX,
+ "org.freedesktop.DBus.Properties", transfer, "PropertiesChanged",
Obex::handleSignal, data);
}
}
contact += "}";
// addresses:
+ bool firstAddress = true;
contact += ",\"addresses\":[";
for(int id=E_CONTACT_ADDRESS_HOME; id<=E_CONTACT_ADDRESS_OTHER; id++) {
EContactAddress *address = (EContactAddress*)e_contact_get(econtact, (EContactField)id);
if(address) {
- contact += "{";
+ if (firstAddress)
+ contact += "{";
+ else
+ contact += ",{";
+ firstAddress = false;
contact += "\"isDefault\":\"false\"";
if(address->country && strcmp(address->country,"")) {
contact += ",\"country\":\"";
return;
}
- if(!strcmp(interface_name, OBEX_TRANSFER_IFACE)) {
- if(!strcmp(signal_name, "Complete") || !strcmp(signal_name, "Error")) {
- Utils::removeSignalListener(G_BUS_TYPE_SESSION, OBEX_CLIENT_SERVICE,
- OBEX_TRANSFER_IFACE, object_path,
- "Complete");
- Utils::removeSignalListener(G_BUS_TYPE_SESSION, OBEX_CLIENT_SERVICE,
- OBEX_TRANSFER_IFACE, object_path,
- "Error");
- if(ctx->mActiveTransfer) {
- free(ctx->mActiveTransfer);
- ctx->mActiveTransfer = NULL;
- }
-
- if(!strcmp(signal_name, "Complete")) {
- const char *path = static_cast<const char *>(data->data1);
- const char *type = static_cast<const char *>(data->data2);
- const char *origin = static_cast<const char *>(data->cb);
- ctx->processVCards(path, type, origin);
- }
- else if(!strcmp(signal_name, "Error")) {
- // dont' have to do anything
- }
- if(data->data1) free(data->data1); // path - to the file containing received VCards
- if(data->cb) free(data->cb); // origin - MAC address of selected remote device
- delete data;
- ctx->initiateNextSyncRequest();
- }
+ if(!strcmp(signal_name, "PropertiesChanged"))
+ {
+ char *objPath = NULL;
+ GVariantIter* iter, *iter2;
+
+ g_variant_get(parameters, "(sa{sv}as)", &objPath, &iter, &iter2);
+
+ if(objPath)
+ {
+ GVariant* var;
+ char *prop = NULL;
+
+ while(g_variant_iter_next(iter, "{sv}", &prop, &var))
+ {
+ if(!strcmp(prop, "Status"))
+ {
+ char *status_str=0;
+ g_variant_get(var, "s", &status_str);
+ //LoggerD("Status is: " << status_str);
+
+ if(!strcmp(status_str, "complete"))
+ {
+ const char *path = static_cast<const char *>(data->data1);
+ const char *type = static_cast<const char *>(data->data2);
+ const char *origin = static_cast<const char *>(data->cb);
+ ctx->processVCards(path, type, origin);
+
+
+ if(data->data1) free(data->data1); // path - to the file containing received VCards
+ if(data->cb) free(data->cb); // origin - MAC address of selected remote device
+ delete data;
+ ctx->initiateNextSyncRequest();
+ }
+ }
+ g_free(prop);
+ g_variant_unref(var);
+ }
+ }
+ else
+ {
+ LoggerD("No objectPath found. Exiting.");
+ }
+ g_variant_iter_free(iter);
+ g_variant_iter_free(iter2);
+ g_free(objPath);
}
}