Blame SOURCES/0005-kio_obexftp-Prefer-pcsuite-target-for-S60-devices.patch

a562b3
From 2d29f4ebc6f9a9c0d5d5807c662e64df56c8c711 Mon Sep 17 00:00:00 2001
a562b3
From: David Rosca <nowrep@gmail.com>
a562b3
Date: Mon, 29 Dec 2014 13:59:32 +0100
a562b3
Subject: [PATCH 05/20] kio_obexftp: Prefer "pcsuite" target for S60 devices
a562b3
a562b3
BUG: 342259
a562b3
---
a562b3
 src/kio/obexftp/kio_obexftp.cpp | 61 ++++++++++++++++++++++++++++++-----------
a562b3
 src/kio/obexftp/kio_obexftp.h   |  4 +++
a562b3
 2 files changed, 49 insertions(+), 16 deletions(-)
a562b3
a562b3
diff --git a/src/kio/obexftp/kio_obexftp.cpp b/src/kio/obexftp/kio_obexftp.cpp
a562b3
index a8c27e7..0783662 100644
a562b3
--- a/src/kio/obexftp/kio_obexftp.cpp
a562b3
+++ b/src/kio/obexftp/kio_obexftp.cpp
a562b3
@@ -35,6 +35,8 @@
a562b3
 
a562b3
 #include <unistd.h>
a562b3
 
a562b3
+Q_DECLARE_METATYPE(DeviceInfo)
a562b3
+
a562b3
 extern "C" int KDE_EXPORT kdemain(int argc, char **argv)
a562b3
 {
a562b3
     KAboutData about("kioobexftp", "bluedevil", ki18n("kioobexftp"), bluedevil_version);
a562b3
@@ -64,6 +66,7 @@ KioFtp::KioFtp(const QByteArray &pool, const QByteArray &app)
a562b3
     m_timer = new QTimer();
a562b3
     m_timer->setInterval(100);
a562b3
 
a562b3
+    qDBusRegisterMetaType<DeviceInfo>();
a562b3
     qDBusRegisterMetaType<QVariantMapList>();
a562b3
     m_kded = new org::kde::ObexFtp("org.kde.kded", "/modules/obexftpdaemon", QDBusConnection::sessionBus(), 0);
a562b3
 }
a562b3
@@ -83,7 +86,36 @@ void KioFtp::launchProgressBar()
a562b3
 
a562b3
 void KioFtp::connectToHost()
a562b3
 {
a562b3
-    QDBusPendingReply<QString> reply = m_kded->session(m_host, "ftp");
a562b3
+    // Prefer pcsuite target on S60 devices
a562b3
+    if (m_uuids.contains(QLatin1String("00005005-0000-1000-8000-0002EE000001"))) {
a562b3
+        if (createSession("pcsuite")) {
a562b3
+            return;
a562b3
+        }
a562b3
+        // Fallback to ftp
a562b3
+    }
a562b3
+
a562b3
+    createSession("ftp");
a562b3
+}
a562b3
+
a562b3
+bool KioFtp::testConnection()
a562b3
+{
a562b3
+    if (!m_kded->isOnline().value()) {
a562b3
+        error(KIO::ERR_SLAVE_DEFINED, i18n("Obexd service is not running."));
a562b3
+        return false;
a562b3
+    }
a562b3
+
a562b3
+    connectToHost();
a562b3
+
a562b3
+    if (!m_transfer) {
a562b3
+        error(KIO::ERR_COULD_NOT_CONNECT, m_host);
a562b3
+        return false;
a562b3
+    }
a562b3
+    return true;
a562b3
+}
a562b3
+
a562b3
+bool KioFtp::createSession(const QString &target)
a562b3
+{
a562b3
+    QDBusPendingReply<QString> reply = m_kded->session(m_host, target);
a562b3
     reply.waitForFinished();
a562b3
 
a562b3
     const QString &sessionPath = reply.value();
a562b3
@@ -95,7 +127,7 @@ void KioFtp::connectToHost()
a562b3
         delete m_transfer;
a562b3
         m_transfer = 0;
a562b3
         m_sessionPath.clear();
a562b3
-        return;
a562b3
+        return false;
a562b3
     }
a562b3
 
a562b3
     if (m_sessionPath != sessionPath) {
a562b3
@@ -104,24 +136,11 @@ void KioFtp::connectToHost()
a562b3
         m_transfer = new org::bluez::obex::FileTransfer1("org.bluez.obex", sessionPath, QDBusConnection::sessionBus());
a562b3
         m_sessionPath = sessionPath;
a562b3
     }
a562b3
-}
a562b3
 
a562b3
-bool KioFtp::testConnection()
a562b3
-{
a562b3
-    if (!m_kded->isOnline().value()) {
a562b3
-        error(KIO::ERR_SLAVE_DEFINED, i18n("Obexd service is not running."));
a562b3
-        return false;
a562b3
-    }
a562b3
-
a562b3
-    connectToHost();
a562b3
-
a562b3
-    if (!m_transfer) {
a562b3
-        error(KIO::ERR_COULD_NOT_CONNECT, m_host);
a562b3
-        return false;
a562b3
-    }
a562b3
     return true;
a562b3
 }
a562b3
 
a562b3
+
a562b3
 void KioFtp::updateProcess()
a562b3
 {
a562b3
     if (m_counter == 49) {
a562b3
@@ -227,6 +246,16 @@ void KioFtp::setHost(const QString &host, quint16 port, const QString &user, con
a562b3
     m_host = host;
a562b3
     m_host = m_host.replace(QLatin1Char('-'), QLatin1Char(':')).toUpper();
a562b3
 
a562b3
+    QDBusMessage call = QDBusMessage::createMethodCall("org.kde.kded",
a562b3
+                            "/modules/bluedevil",
a562b3
+                            "org.kde.BlueDevil",
a562b3
+                            "device");
a562b3
+    call << m_host;
a562b3
+    QDBusReply<DeviceInfo> reply = QDBusConnection::sessionBus().call(call);
a562b3
+    DeviceInfo info = reply.value();
a562b3
+
a562b3
+    m_uuids = info["UUIDs"];
a562b3
+
a562b3
     infoMessage(i18n("Connecting to the device"));
a562b3
 
a562b3
     connectToHost();
a562b3
diff --git a/src/kio/obexftp/kio_obexftp.h b/src/kio/obexftp/kio_obexftp.h
a562b3
index 6f22525..6fe0e56 100644
a562b3
--- a/src/kio/obexftp/kio_obexftp.h
a562b3
+++ b/src/kio/obexftp/kio_obexftp.h
a562b3
@@ -30,6 +30,8 @@
a562b3
 
a562b3
 #include <kio/slavebase.h>
a562b3
 
a562b3
+typedef QMap<QString, QString> DeviceInfo;
a562b3
+
a562b3
 class OrgBluezObexFileTransfer1Interface;
a562b3
 class KioFtp
a562b3
     : public QObject
a562b3
@@ -72,11 +74,13 @@ private:
a562b3
     void launchProgressBar();
a562b3
     void connectToHost();
a562b3
     bool testConnection();
a562b3
+    bool createSession(const QString &target);
a562b3
 
a562b3
 private:
a562b3
     int m_counter;
a562b3
     QMap<QString, KIO::UDSEntry> m_statMap;
a562b3
     QString m_host;
a562b3
+    QString m_uuids;
a562b3
     QString m_sessionPath;
a562b3
     QTimer *m_timer;
a562b3
     org::kde::ObexFtp *m_kded;
a562b3
-- 
a562b3
2.1.0
a562b3