[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