PBAP: add support for obexd 0.48
obexd 0.48 is almost the same as obexd 0.47, except that it dropped the SetFilter and SetFormat methods in favor of passing a Bluex 5-style filter parameter to PullAll. SyncEvolution now supports 4, in words, four different obexd APIs. Sigh.
This commit is contained in:
parent
05e5911e05
commit
6a4ab50aee
1 changed files with 17 additions and 3 deletions
|
@ -52,7 +52,7 @@
|
||||||
SE_BEGIN_CXX
|
SE_BEGIN_CXX
|
||||||
|
|
||||||
#define OBC_SERVICE "org.openobex.client" // obexd < 0.47
|
#define OBC_SERVICE "org.openobex.client" // obexd < 0.47
|
||||||
#define OBC_SERVICE_NEW "org.bluez.obex.client" // obexd >= 0.47
|
#define OBC_SERVICE_NEW "org.bluez.obex.client" // obexd >= 0.47, including 0.48 (with yet another slight API change!)
|
||||||
#define OBC_SERVICE_NEW5 "org.bluez.obex" // obexd in Bluez 5.0
|
#define OBC_SERVICE_NEW5 "org.bluez.obex" // obexd in Bluez 5.0
|
||||||
#define OBC_CLIENT_INTERFACE "org.openobex.Client"
|
#define OBC_CLIENT_INTERFACE "org.openobex.Client"
|
||||||
#define OBC_CLIENT_INTERFACE_NEW "org.bluez.obex.Client"
|
#define OBC_CLIENT_INTERFACE_NEW "org.bluez.obex.Client"
|
||||||
|
@ -518,10 +518,18 @@ boost::shared_ptr<PullAll> PbapSession::startPullAll(PullData pullData)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool pullAllWithFiltersFallback = false;
|
||||||
if (m_obexAPI == OBEXD_OLD ||
|
if (m_obexAPI == OBEXD_OLD ||
|
||||||
m_obexAPI == OBEXD_NEW) {
|
m_obexAPI == OBEXD_NEW) {
|
||||||
GDBusCXX::DBusClientCall0(*m_session, "SetFilter")(filter);
|
try {
|
||||||
GDBusCXX::DBusClientCall0(*m_session, "SetFormat")(format);
|
GDBusCXX::DBusClientCall0(*m_session, "SetFilter")(filter);
|
||||||
|
GDBusCXX::DBusClientCall0(*m_session, "SetFormat")(format);
|
||||||
|
} catch (...) {
|
||||||
|
// Ignore failure, can happen with 0.48. Instead send filter together
|
||||||
|
// with PullAll method call.
|
||||||
|
Exception::handle(HANDLE_EXCEPTION_NO_ERROR);
|
||||||
|
pullAllWithFiltersFallback = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::shared_ptr<PullAll> state(new PullAll);
|
boost::shared_ptr<PullAll> state(new PullAll);
|
||||||
|
@ -537,8 +545,13 @@ boost::shared_ptr<PullAll> PbapSession::startPullAll(PullData pullData)
|
||||||
SE_LOG_DEBUG(NULL, "Created temporary file for PullAll %s", state->m_tmpFile.filename().c_str());
|
SE_LOG_DEBUG(NULL, "Created temporary file for PullAll %s", state->m_tmpFile.filename().c_str());
|
||||||
GDBusCXX::DBusClientCall1<std::pair<GDBusCXX::DBusObject_t, Params> > pullall(*m_session, "PullAll");
|
GDBusCXX::DBusClientCall1<std::pair<GDBusCXX::DBusObject_t, Params> > pullall(*m_session, "PullAll");
|
||||||
std::pair<GDBusCXX::DBusObject_t, Params> tuple =
|
std::pair<GDBusCXX::DBusObject_t, Params> tuple =
|
||||||
|
pullAllWithFiltersFallback ?
|
||||||
|
// 0.48
|
||||||
|
GDBusCXX::DBusClientCall1<std::pair<GDBusCXX::DBusObject_t, Params> >(*m_session, "PullAll")(state->m_tmpFile.filename(), currentFilter) :
|
||||||
m_obexAPI == OBEXD_NEW ?
|
m_obexAPI == OBEXD_NEW ?
|
||||||
|
// 0.47
|
||||||
GDBusCXX::DBusClientCall1<std::pair<GDBusCXX::DBusObject_t, Params> >(*m_session, "PullAll")(state->m_tmpFile.filename()) :
|
GDBusCXX::DBusClientCall1<std::pair<GDBusCXX::DBusObject_t, Params> >(*m_session, "PullAll")(state->m_tmpFile.filename()) :
|
||||||
|
// 5.x
|
||||||
GDBusCXX::DBusClientCall2<GDBusCXX::DBusObject_t, Params>(*m_session, "PullAll")(state->m_tmpFile.filename(), currentFilter);
|
GDBusCXX::DBusClientCall2<GDBusCXX::DBusObject_t, Params>(*m_session, "PullAll")(state->m_tmpFile.filename(), currentFilter);
|
||||||
const GDBusCXX::DBusObject_t &transfer = tuple.first;
|
const GDBusCXX::DBusObject_t &transfer = tuple.first;
|
||||||
const Params &properties = tuple.second;
|
const Params &properties = tuple.second;
|
||||||
|
@ -553,6 +566,7 @@ boost::shared_ptr<PullAll> PbapSession::startPullAll(PullData pullData)
|
||||||
state->m_tmpFileOffset = 0;
|
state->m_tmpFileOffset = 0;
|
||||||
state->m_session = m_self.lock();
|
state->m_session = m_self.lock();
|
||||||
} else {
|
} else {
|
||||||
|
// < 0.47
|
||||||
GDBusCXX::DBusClientCall1<std::string> pullall(*m_session, "PullAll");
|
GDBusCXX::DBusClientCall1<std::string> pullall(*m_session, "PullAll");
|
||||||
state->m_buffer = pullall();
|
state->m_buffer = pullall();
|
||||||
state->addVCards(0, state->m_buffer);
|
state->addVCards(0, state->m_buffer);
|
||||||
|
|
Loading…
Reference in a new issue