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

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