[SCM] kdeconnect packaging branch, master, updated. debian/0.9g-1-1183-g9d69498

Maximiliano Curia maxy at moszumanska.debian.org
Fri Oct 14 14:27:15 UTC 2016


Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/kdeconnect.git;a=commitdiff;h=25b2f17

The following commit has been merged in the master branch:
commit 25b2f17b1b2d6a96e1a7c87ec018d179894ef3b7
Author: Samoilenko Yuri <kinnalru at gmail.com>
Date:   Wed Jan 15 01:03:20 2014 +0400

    SftpPlugin used sshfs now
---
 kded/plugins/sftp/sftpplugin.cpp | 122 ++++++++++++++++++++++++++++++++++-----
 kded/plugins/sftp/sftpplugin.h   |   8 +++
 2 files changed, 117 insertions(+), 13 deletions(-)

diff --git a/kded/plugins/sftp/sftpplugin.cpp b/kded/plugins/sftp/sftpplugin.cpp
index 3f54408..bdedd24 100644
--- a/kded/plugins/sftp/sftpplugin.cpp
+++ b/kded/plugins/sftp/sftpplugin.cpp
@@ -20,11 +20,12 @@
 
 #include "sftpplugin.h"
 
-#include <KNotification>
-#include <KIcon>
+#include <KIconLoader>
 #include <KLocalizedString>
+#include <KNotification>
+#include <KProcess>
 #include <KRun>
-#include <QMessageBox>
+#include <KStandardDirs>
 
 #include "../../kdebugnamespace.h"
 #include "sftpdbusinterface.h"
@@ -32,9 +33,17 @@
 K_PLUGIN_FACTORY( KdeConnectPluginFactory, registerPlugin< SftpPlugin >(); )
 K_EXPORT_PLUGIN( KdeConnectPluginFactory("kdeconnect_sftp", "kdeconnect_sftp") )
 
+static const char* mount_c = "sftpmount";
+static const char* passwd_c = "sftppassword";
+
+static const QSet<QString> fields_c = QSet<QString>() <<
+  "ip" << "port" << "user" << "port" << "password" << "path";
+  
+
 SftpPlugin::SftpPlugin(QObject *parent, const QVariantList &args)
     : KdeConnectPlugin(parent, args)
     , sftpDbusInterface(new SftpDbusInterface(parent))
+    , mountProc(0)
 {
 
   connect(sftpDbusInterface, SIGNAL(startBrowsing()), this, SLOT(startBrowsing()));
@@ -53,6 +62,7 @@ SftpPlugin::~SftpPlugin()
     // adaptor. This is also a memory leak until the entire device is destroyed.
 
     //sftpDbusInterface->deleteLater();
+    stopBrowsing();
 }
 
 void SftpPlugin::startBrowsing()
@@ -62,21 +72,107 @@ void SftpPlugin::startBrowsing()
     device()->sendPackage(np);
 }
 
+void SftpPlugin::stopBrowsing()
+{
+    if (mountProc)
+    {
+        mountProc->terminate();
+        QTimer::singleShot(15000, mountProc, SLOT(kill()));
+        mountProc->waitForFinished();
+    }
+}
 
 bool SftpPlugin::receivePackage(const NetworkPackage& np)
 {
-    KUrl url;
-    url.setProtocol("sftp");
-    url.setHost(np.get<QString>("ip"));
-    url.setPort(np.get<QString>("port").toInt());
-    url.setUser(np.get<QString>("user"));
-    url.setPass(np.get<QString>("password"));
-    url.setPath(np.get<QString>("path"));
+    if (!mountProc.isNull()) {
+        return false;
+    }
     
-    if (url.isValid()) {
-        return new KRun(url, 0);
+    if (!(fields_c - np.body().keys().toSet()).isEmpty()) {
+        // package is invalid
+        return false;
     }
+    
+    mountProc = new KProcess(this);
+    mountProc->setOutputChannelMode(KProcess::SeparateChannels);
+
+    connect(mountProc, SIGNAL(started()), SLOT(onStarted()));    
+    connect(mountProc, SIGNAL(error(QProcess::ProcessError)), SLOT(onError(QProcess::ProcessError)));
+    connect(mountProc, SIGNAL(finished(int,QProcess::ExitStatus)), SLOT(onFinished(int,QProcess::ExitStatus)));
+    connect(mountProc, SIGNAL(finished(int,QProcess::ExitStatus)), mountProc, SLOT(deleteLater()));
+    
+    
+    const QString mount = KStandardDirs::locateLocal("appdata", device()->name() + "/", true,
+      KComponentData("kdeconnect", "kdeconnect"));
+    const QString program = "sshfs";
+    const QStringList arguments = QStringList() 
+      << QString("%1@%2:%3")
+        .arg(np.get<QString>("user"))
+        .arg(np.get<QString>("ip"))
+        .arg(np.get<QString>("path"))
+      << "-p" << np.get<QString>("port")
+      << "-d"
+      << "-f"
+      << "-o" << "password_stdin"
+      << mount;
+    
+    mountProc->setProgram(program, arguments);
+    mountProc->setProperty(passwd_c, np.get<QString>("password"));
+    mountProc->setProperty(mount_c, mount);
+
+    mountProc->start();
+    
+    return true;
+}
+
+void SftpPlugin::onStarted()
+{
+    mountProc->write(mountProc->property(passwd_c).toString().toLocal8Bit() + "
");
+    mountProc->closeWriteChannel();
+    
+    KNotification::event(KNotification::Notification
+      , i18n("Device %1").arg(device()->name())
+      , i18n("Filesystem mounted at %1").arg(mountProc->property(mount_c).toString())
+      , KIconLoader::global()->loadIcon("drive-removable-media", KIconLoader::Desktop)
+      , 0, KNotification::CloseOnTimeout
+    )->sendEvent();
+    
+    new KRun(KUrl::fromLocalFile(mountProc->property(mount_c).toString()), 0);
+}
 
-    return false;
+void SftpPlugin::onError(QProcess::ProcessError error)
+{
+    if (error == QProcess::FailedToStart)
+    {
+        KNotification::event(KNotification::Error
+          , i18n("Device %1").arg(device()->name())
+          , i18n("Failed to start sshfs")
+          , KIconLoader::global()->loadIcon("dialog-error", KIconLoader::Desktop)
+          , 0, KNotification::CloseOnTimeout
+        )->sendEvent();
+    }
 }
 
+void SftpPlugin::onFinished(int exitCode, QProcess::ExitStatus exitStatus)
+{
+    Q_UNUSED(exitCode);
+
+    if (exitStatus == QProcess::NormalExit)
+    {
+        KNotification::event(KNotification::Notification
+          , i18n("Device %1").arg(device()->name())
+          , i18n("Filesystem unmounted")
+          , KIconLoader::global()->loadIcon("dialog-ok", KIconLoader::Desktop)
+          , 0, KNotification::CloseOnTimeout
+        )->sendEvent();
+    }
+    else
+    {
+        KNotification::event(KNotification::Error
+          , i18n("Device %1").arg(device()->name())
+          , i18n("Error when accessing to filesystem")
+          , KIconLoader::global()->loadIcon("dialog-error", KIconLoader::Desktop)
+          , 0, KNotification::CloseOnTimeout
+        )->sendEvent();
+    }
+}
diff --git a/kded/plugins/sftp/sftpplugin.h b/kded/plugins/sftp/sftpplugin.h
index f3a4bdb..8975bd5 100644
--- a/kded/plugins/sftp/sftpplugin.h
+++ b/kded/plugins/sftp/sftpplugin.h
@@ -21,6 +21,8 @@
 #ifndef SFTPPLUGIN_H
 #define SFTPPLUGIN_H
 
+#include <KProcess>
+
 #include "../kdeconnectplugin.h"
 
 #define PACKAGE_TYPE_SFTP QLatin1String("kdeconnect.sftp")
@@ -42,9 +44,15 @@ public Q_SLOTS:
     
 private Q_SLOTS:
     void startBrowsing();
+    void stopBrowsing();
 
+    void onStarted();
+    void onError(QProcess::ProcessError error);
+    void onFinished(int exitCode, QProcess::ExitStatus exitStatus);
+    
 private:
     SftpDbusInterface* sftpDbusInterface;
+    QPointer<KProcess> mountProc;
 };
 
 #endif

-- 
kdeconnect packaging



More information about the pkg-kde-commits mailing list