[SCM] kdeconnect packaging branch, master, updated. debian/0.9g-1-1183-g9d69498
Maximiliano Curia
maxy at moszumanska.debian.org
Fri Oct 14 14:27:18 UTC 2016
Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/kdeconnect.git;a=commitdiff;h=71283bb
The following commit has been merged in the master branch:
commit 71283bbe492b411e91a8fb88356d53c772f79341
Author: Samoilenko Yuri <kinnalru at gmail.com>
Date: Thu Jan 23 01:58:53 2014 +0400
SFTP plugin refactored
- Mounter class take all work for managing sshfs process
- SftpPlugin became much more easy and cleaner
---
kded/plugins/sftp/CMakeLists.txt | 4 +-
kded/plugins/sftp/mounter.cpp | 249 ++++++++++++++++++++++++++++++++
kded/plugins/sftp/mounter.h | 74 ++++++++++
kded/plugins/sftp/mountloop.cpp | 2 +-
kded/plugins/sftp/mountloop.h | 2 +-
kded/plugins/sftp/sftp_config.cpp | 2 +-
kded/plugins/sftp/sftpplugin.cpp | 292 +++++---------------------------------
kded/plugins/sftp/sftpplugin.h | 25 +---
8 files changed, 372 insertions(+), 278 deletions(-)
diff --git a/kded/plugins/sftp/CMakeLists.txt b/kded/plugins/sftp/CMakeLists.txt
index 9adfd55..fa8f082 100644
--- a/kded/plugins/sftp/CMakeLists.txt
+++ b/kded/plugins/sftp/CMakeLists.txt
@@ -12,8 +12,9 @@ include_directories(
)
set(kdeconnect_sftp_SRCS
- sftpplugin.cpp
+ mounter.cpp
mountloop.cpp
+ sftpplugin.cpp
../kdeconnectplugin.cpp
../pluginloader.cpp
../../networkpackage.cpp
@@ -42,7 +43,6 @@ include(../../../macros.cmake)
generate_and_install_dbus_interface(
kdeconnect_sftp
sftpplugin.h
- mountloop.h
org.kde.kdeconnect.device.sftp.xml
OPTIONS -a
)
diff --git a/kded/plugins/sftp/mounter.cpp b/kded/plugins/sftp/mounter.cpp
new file mode 100644
index 0000000..57336b6
--- /dev/null
+++ b/kded/plugins/sftp/mounter.cpp
@@ -0,0 +1,249 @@
+/**
+ * Copyright 2014 Samoilenko Yuri<kinnalru at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License or (at your option) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include <QDir>
+#include <QTimerEvent>
+
+#include <KLocalizedString>
+#include <KStandardDirs>
+
+#include "../../kdebugnamespace.h"
+
+#include "mounter.h"
+
+static const char* idleTimeout_c = "idleTimeout";
+
+Mounter::Mounter(SftpPlugin* sftp, int idleTimeout)
+ : QObject(sftp)
+ , m_sftp(sftp)
+ , m_proc(0)
+ , m_id(generateId())
+ , m_mpoint(m_sftp->mountPoint())
+ , m_started(false)
+{
+ Q_ASSERT(sftp);
+
+ connect(m_sftp, SIGNAL(packageReceived(NetworkPackage)), this, SLOT(onPakcageReceived(NetworkPackage)));
+
+ connect(&m_connectTimer, SIGNAL(timeout()), this, SLOT(onMountTimeout()));
+
+ connect(this, SIGNAL(mounted()), &m_connectTimer, SLOT(stop()));
+ connect(this, SIGNAL(failed(QString)), &m_connectTimer, SLOT(stop()));
+
+ if (idleTimeout)
+ {
+ connect(&m_idleTimer, SIGNAL(timeout()), this, SLOT(onIdleTimeout()));
+ }
+
+ m_connectTimer.setInterval(10000);
+ m_connectTimer.setSingleShot(true);
+
+ m_idleTimer.setInterval(idleTimeout);
+ m_idleTimer.setSingleShot(false);
+
+ QTimer::singleShot(0, this, SLOT(start()));
+ kDebug(kdeconnect_kded()) << "Created";
+}
+
+Mounter::~Mounter()
+{
+ unmount();
+ kDebug(kdeconnect_kded()) << "Destroyed";
+}
+
+bool Mounter::wait()
+{
+ if (m_started)
+ {
+ return true;
+ }
+
+ kDebug(kdeconnect_kded()) << "Starting loop to wait for mount";
+
+ MountLoop loop;
+ connect(this, SIGNAL(mounted()), &loop, SLOT(successed()));
+ connect(this, SIGNAL(failed(QString)), &loop, SLOT(failed()));
+ return loop.exec();
+}
+
+void Mounter::onPakcageReceived(const NetworkPackage& np)
+{
+ if (np.get<bool>("stop", false))
+ {
+ kDebug(kdeconnect_kded()) << "SFTP server stopped";
+ unmount();
+ return;
+ }
+
+ //TODO implement on amdroid side
+ //if (np.get<int>("id") != m_id) return;
+
+ m_proc.reset(new KProcess(this));
+ m_proc->setOutputChannelMode(KProcess::MergedChannels);
+
+ connect(m_proc.data(), SIGNAL(started()), SLOT(onStarted()));
+ connect(m_proc.data(), SIGNAL(error(QProcess::ProcessError)), SLOT(onError(QProcess::ProcessError)));
+ connect(m_proc.data(), SIGNAL(finished(int,QProcess::ExitStatus)), SLOT(onFinished(int,QProcess::ExitStatus)));
+
+ const QString mpoint = m_sftp->mountPoint();
+ QDir().mkpath(mpoint);
+
+ 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"))
+ << mpoint
+ << "-p" << np.get<QString>("port")
+ << "-d"
+ << "-f"
+ << "-o" << "IdentityFile=" + m_sftp->device()->privateKey();
+
+ m_proc->setProgram(program, arguments);
+
+ cleanMountPoint();
+
+ kDebug(kdeconnect_kded()) << "Staring process: " << m_proc->program().join(" ");
+ m_proc->start();
+}
+
+void Mounter::onStarted()
+{
+ kDebug(kdeconnect_kded()) << "Porcess started";
+ m_started = true;
+ Q_EMIT mounted();
+
+ connect(m_proc.data(), SIGNAL(readyReadStandardError()), this, SLOT(readProcessOut()));
+ connect(m_proc.data(), SIGNAL(readyReadStandardOutput()), this, SLOT(readProcessOut()));
+
+ m_lastActivity = QDateTime::currentDateTime();
+
+ if (m_idleTimer.interval())
+ {
+ m_idleTimer.start();
+ }
+}
+
+void Mounter::onError(QProcess::ProcessError error)
+{
+ if (error == QProcess::FailedToStart)
+ {
+ kDebug(kdeconnect_kded()) << "Porcess failed to start";
+ m_started = false;
+ Q_EMIT failed(i18n("Failed to start sshfs"));
+ }
+}
+
+void Mounter::onFinished(int exitCode, QProcess::ExitStatus exitStatus)
+{
+ Q_UNUSED(exitCode);
+
+ if (exitStatus == QProcess::NormalExit)
+ {
+ kDebug(kdeconnect_kded()) << "Porcess finished";
+
+ if (m_proc->property(idleTimeout_c).toBool())
+ {
+ Q_EMIT unmounted(true);
+ }
+ else
+ {
+ Q_EMIT unmounted(false);
+ }
+ }
+ else
+ {
+ kDebug(kdeconnect_kded()) << "Porcess failed";
+ Q_EMIT failed(i18n("Error when accessing to filesystem"));
+ }
+
+ cleanMountPoint();
+ m_proc.reset();
+ m_started = false;
+}
+
+void Mounter::onMountTimeout()
+{
+ kDebug(kdeconnect_kded()) << "Timeout: device not responding";
+ Q_EMIT failed(i18n("Failed to mount filesystem: device not responding"));
+}
+
+void Mounter::onIdleTimeout()
+{
+ Q_ASSERT(m_proc.data());
+
+ if (m_lastActivity.secsTo(QDateTime::currentDateTime()) >= m_idleTimer.interval() / 1000)
+ {
+ kDebug(kdeconnect_kded()) << "Timeout: there is no activity on moutned filesystem";
+ m_proc->setProperty(idleTimeout_c, true);
+ unmount();
+ }
+}
+
+void Mounter::readProcessOut()
+{
+ Q_ASSERT(m_proc.data());
+ m_lastActivity = QDateTime::currentDateTime();
+ m_proc->readAll();
+}
+
+void Mounter::start()
+{
+ NetworkPackage np(PACKAGE_TYPE_SFTP);
+ np.set("startBrowsing", true);
+ np.set("start", true);
+ np.set("id", m_id);
+ np.set("idleTimeout", m_idleTimer.interval());
+ m_sftp->device()->sendPackage(np);
+
+ m_connectTimer.start();
+}
+
+int Mounter::generateId()
+{
+ static int id = 0;
+ return id++;
+}
+
+void Mounter::cleanMountPoint()
+{
+ KProcess::execute(QStringList() << "fusermount" << "-u" << m_mpoint, 10000);
+}
+
+void Mounter::unmount()
+{
+ m_idleTimer.stop();
+
+ if (m_proc)
+ {
+ cleanMountPoint();
+ if (m_proc)
+ {
+ m_proc->terminate();
+ QTimer::singleShot(5000, m_proc.data(), SLOT(kill()));
+ m_proc->waitForFinished();
+ }
+ }
+
+ m_started = false;
+}
+
diff --git a/kded/plugins/sftp/mounter.h b/kded/plugins/sftp/mounter.h
new file mode 100644
index 0000000..9c4045a
--- /dev/null
+++ b/kded/plugins/sftp/mounter.h
@@ -0,0 +1,74 @@
+/**
+ * Copyright 2014 Samoilenko Yuri<kinnalru at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License or (at your option) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef SFTPPLUGIN_MOUNTJOB_H
+#define SFTPPLUGIN_MOUNTJOB_H
+
+#include <KJob>
+#include <KProcess>
+
+#include "sftpplugin.h"
+#include "mountloop.h"
+
+class Mounter
+ : public QObject
+{
+ Q_OBJECT
+public:
+
+ explicit Mounter(SftpPlugin *sftp, int idleTimeout);
+ virtual ~Mounter();
+
+ bool wait();
+
+Q_SIGNALS:
+ void mounted();
+ void unmounted(bool idleTimeout);
+ void failed(const QString& message);
+
+private Q_SLOTS:
+ void onPakcageReceived(const NetworkPackage& np);
+ void onStarted();
+ void onError(QProcess::ProcessError error);
+ void onFinished(int exitCode, QProcess::ExitStatus exitStatus);
+ void onMountTimeout();
+ void onIdleTimeout();
+ void readProcessOut();
+ void start();
+
+private:
+ int generateId();
+ void cleanMountPoint();
+ void unmount();
+
+private:
+ SftpPlugin* m_sftp;
+ QScopedPointer<KProcess> m_proc;
+ int m_id;
+ const QString m_mpoint;
+ QTimer m_connectTimer;
+ QTimer m_idleTimer;
+ QDateTime m_lastActivity;
+ MountLoop m_loop;
+ bool m_started;
+};
+
+
+#endif
diff --git a/kded/plugins/sftp/mountloop.cpp b/kded/plugins/sftp/mountloop.cpp
index 0f981b3..7e83dea 100644
--- a/kded/plugins/sftp/mountloop.cpp
+++ b/kded/plugins/sftp/mountloop.cpp
@@ -1,5 +1,5 @@
/**
- * Copyright 2013 Albert Vaca <albertvaka at gmail.com>
+ * Copyright 2014 Samoilenko Yuri<kinnalru at gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
diff --git a/kded/plugins/sftp/mountloop.h b/kded/plugins/sftp/mountloop.h
index bcbf7db..a9920aa 100644
--- a/kded/plugins/sftp/mountloop.h
+++ b/kded/plugins/sftp/mountloop.h
@@ -1,5 +1,5 @@
/**
- * Copyright 2013 Albert Vaca <albertvaka at gmail.com>
+ * Copyright 2014 Samoilenko Yuri<kinnalru at gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
diff --git a/kded/plugins/sftp/sftp_config.cpp b/kded/plugins/sftp/sftp_config.cpp
index 5b1d34c..4b79752 100644
--- a/kded/plugins/sftp/sftp_config.cpp
+++ b/kded/plugins/sftp/sftp_config.cpp
@@ -1,5 +1,5 @@
/**
- * Copyright 2013 Albert Vaca <albertvaka at gmail.com>
+ * Copyright 2014 Samoilenko Yuri<kinnalru at gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
diff --git a/kded/plugins/sftp/sftpplugin.cpp b/kded/plugins/sftp/sftpplugin.cpp
index 80f956d..ef7e356 100644
--- a/kded/plugins/sftp/sftpplugin.cpp
+++ b/kded/plugins/sftp/sftpplugin.cpp
@@ -1,5 +1,5 @@
/**
- * Copyright 2013 Albert Vaca <albertvaka at gmail.com>
+ * Copyright 2014 Samoilenko Yuri<kinnalru at gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -20,9 +20,6 @@
#include "sftpplugin.h"
-#include <QDir>
-#include <QTimerEvent>
-
#include <QDBusConnection>
#include <KConfig>
@@ -30,79 +27,46 @@
#include <KIconLoader>
#include <KLocalizedString>
#include <KNotification>
-#include <KProcess>
#include <KRun>
#include <KStandardDirs>
#include <kde_file.h>
#include <kfileplacesmodel.h>
#include "sftp_config.h"
-#include "mountloop.h"
+#include "mounter.h"
#include "../../kdebugnamespace.h"
K_PLUGIN_FACTORY( KdeConnectPluginFactory, registerPlugin< SftpPlugin >(); )
K_EXPORT_PLUGIN( KdeConnectPluginFactory("kdeconnect_sftp", "kdeconnect_sftp") )
-static const char* lastaccess_c = "lastaccess";
static const QSet<QString> fields_c = QSet<QString>() << "ip" << "port" << "user" << "port" << "path";
-inline bool isTimeout(QObject* o, const KConfigGroup& cfg)
-{
- if (!o) return false;
-
- int duration = o->property(lastaccess_c).toDateTime().secsTo(QDateTime::currentDateTime());
- return cfg.readEntry("idle", true) && duration > (cfg.readEntry("idletimeout", 60) * 60);
-}
-
-
struct SftpPlugin::Pimpl
{
Pimpl()
{
- connectTimer.setInterval(10 * 1000);
- connectTimer.setSingleShot(true);
-
//Add KIO entry to Dolphin's Places
placesModel = new KFilePlacesModel();
}
- QPointer<KProcess> mountProc;
KFilePlacesModel* placesModel;
-
- QTimer connectTimer;
- int idleTimerId;
-
- MountLoop loop;
+ QPointer<Mounter> mounter;
};
SftpPlugin::SftpPlugin(QObject *parent, const QVariantList &args)
: KdeConnectPlugin(parent, args)
, m_d(new Pimpl)
{
- kDebug(kdeconnect_kded()) << "creating [" << device()->name() << "]...";
-
-
- m_d->idleTimerId = startTimer(20 * 1000);
-
- connect(&m_d->connectTimer, SIGNAL(timeout()), this, SLOT(mountTimeout()));
- connect(&m_d->connectTimer, SIGNAL(timeout()), &m_d->loop, SLOT(failed()));
-
- connect(this, SIGNAL(mount_succesed()), &m_d->loop, SLOT(successed()));
- connect(this, SIGNAL(mount_failed()), &m_d->loop, SLOT(failed()));
-
-
addToDolphin();
- kDebug(kdeconnect_kded()) << "created [" << device()->name() << "]";
+ kDebug(kdeconnect_kded()) << "Created device:" << device()->name();
}
SftpPlugin::~SftpPlugin()
{
- kDebug(kdeconnect_kded()) << "destroying [" << device()->name() << "]...";
-
QDBusConnection::sessionBus().unregisterObject(dbusPath(), QDBusConnection::UnregisterTree);
+ removeFromDolphin();
umount();
- removeFromDolphin();
- kDebug(kdeconnect_kded()) << "destroyed [" << device()->name() << "]";
+ kDebug(kdeconnect_kded()) << "Destroyed device:" << device()->name();
}
void SftpPlugin::addToDolphin()
@@ -125,64 +89,40 @@ void SftpPlugin::removeFromDolphin()
void SftpPlugin::connected()
{
- kDebug(kdeconnect_kded()) << "exposing DBUS interface: "
+ kDebug(kdeconnect_kded()) << "Exposing DBUS interface: "
<< QDBusConnection::sessionBus().registerObject(dbusPath(), this, QDBusConnection::ExportScriptableContents);
}
void SftpPlugin::mount()
{
- kDebug(kdeconnect_kded()) << "start mounting device:" << device()->name();
- if (m_d->loop.isRunning() || m_d->mountProc)
+ kDebug(kdeconnect_kded()) << "Device:" << device()->name();
+ if (m_d->mounter)
{
return;
}
- m_d->connectTimer.start();
+ KConfigGroup cfg = SftpConfig::config()->group("main");
+
+ const int idleTimeout = cfg.readEntry("idle", true)
+ ? cfg.readEntry("idletimeout", 60) * 60 * 1000
+ : 0;
- NetworkPackage np(PACKAGE_TYPE_SFTP);
- np.set("startBrowsing", true);
- device()->sendPackage(np);
+ m_d->mounter = new Mounter(this, idleTimeout);
+ connect(m_d->mounter, SIGNAL(mounted()), this, SLOT(onMounted()));
+ connect(m_d->mounter, SIGNAL(unmounted(bool)), this, SLOT(onUnmounted(bool)));
+ connect(m_d->mounter, SIGNAL(failed(QString)), this, SLOT(onFailed(QString)));
}
bool SftpPlugin::mountAndWait()
{
- kDebug(kdeconnect_kded()) << "start mounting device and block:" << device()->name();
-
- if (m_d->mountProc && !m_d->loop.isRunning())
- {
- return true;
- }
-
- if (m_d->loop.isRunning())
- {
- kDebug(kdeconnect_kded()) << "start secondary loop";
- MountLoop loop;
- connect(&m_d->loop, SIGNAL(result(bool)), &loop, SLOT(exitWith(bool)));
- return loop.exec();
- }
-
mount();
-
- QTimer mt;
- connect(&mt, SIGNAL(timeout()), &m_d->loop, SLOT(failed()));
- mt.start(15000);
- kDebug(kdeconnect_kded()) << "start primary loop";
- return m_d->loop.exec();
+ return m_d->mounter->wait();
}
-
void SftpPlugin::umount()
{
- if (m_d->mountProc)
- {
- cleanMountPoint();
- if (m_d->mountProc)
- {
- m_d->mountProc->terminate();
- QTimer::singleShot(5000, m_d->mountProc, SLOT(kill()));
- m_d->mountProc->waitForFinished();
- }
- }
+ kDebug(kdeconnect_kded()) << "Device:" << device()->name();
+ delete m_d->mounter.data();
}
void SftpPlugin::startBrowsing()
@@ -201,41 +141,8 @@ bool SftpPlugin::receivePackage(const NetworkPackage& np)
return false;
}
- if (!m_d->mountProc.isNull())
- {
- return true;
- }
-
- m_d->connectTimer.stop();
-
- m_d->mountProc = new KProcess(this);
- m_d->mountProc->setOutputChannelMode(KProcess::MergedChannels);
+ Q_EMIT packageReceived(np);
- connect(m_d->mountProc, SIGNAL(started()), SLOT(onStarted()));
- connect(m_d->mountProc, SIGNAL(error(QProcess::ProcessError)), SLOT(onError(QProcess::ProcessError)));
- connect(m_d->mountProc, SIGNAL(finished(int,QProcess::ExitStatus)), SLOT(onFinished(int,QProcess::ExitStatus)));
- connect(m_d->mountProc, SIGNAL(finished(int,QProcess::ExitStatus)), m_d->mountProc, SLOT(deleteLater()));
-
- const QString mpoint = mountPoint();
- QDir().mkpath(mpoint);
-
- 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"))
- << mpoint
- << "-p" << np.get<QString>("port")
- << "-d"
- << "-f"
- << "-o" << "IdentityFile=" + device()->privateKey();
-
- m_d->mountProc->setProgram(program, arguments);
-
- cleanMountPoint();
- m_d->mountProc->start();
-
return true;
}
@@ -246,168 +153,47 @@ QString SftpPlugin::mountPoint()
return mountDir + "/" + device()->id() + "/";
}
-void SftpPlugin::timerEvent(QTimerEvent* event)
-{
- if (event->timerId() == m_d->idleTimerId)
- {
- if (isTimeout(m_d->mountProc, SftpConfig::config()->group("main")))
- {
- umount();
- }
- }
-
- QObject::timerEvent(event);
-}
-
-void SftpPlugin::onStarted()
+void SftpPlugin::onMounted()
{
- kDebug(kdeconnect_kded()) << qobject_cast<KProcess*>(sender())->program().join(" ");
-
- m_d->mountProc->setProperty(lastaccess_c, QDateTime::currentDateTime());
-
knotify(KNotification::Notification
, i18n("Filesystem mounted at %1").arg(mountPoint())
, KIconLoader::global()->loadIcon("drive-removable-media", KIconLoader::Desktop)
);
-
- //Used to notify MountLoop about success.
- Q_EMIT mount_succesed();
-
- connect(m_d->mountProc, SIGNAL(readyReadStandardError()), this, SLOT(readProcessOut()));
- connect(m_d->mountProc, SIGNAL(readyReadStandardOutput()), this, SLOT(readProcessOut()));
}
-void SftpPlugin::onError(QProcess::ProcessError error)
+void SftpPlugin::onUnmounted(bool idleTimeout)
{
- kDebug(kdeconnect_kded()) << qobject_cast<KProcess*>(sender())->program();
- kDebug(kdeconnect_kded()) << "ARGS: error=" << error;
-
- if (error == QProcess::FailedToStart)
+ if (idleTimeout)
{
- knotify(KNotification::Error
- , i18n("Failed to start sshfs")
- , KIconLoader::global()->loadIcon("dialog-error", KIconLoader::Desktop)
+ knotify(KNotification::Notification
+ , i18n("Filesystem unmounted by idle timeout")
+ , KIconLoader::global()->loadIcon("clock", KIconLoader::Desktop)
);
- cleanMountPoint();
- }
-}
-
-void SftpPlugin::onFinished(int exitCode, QProcess::ExitStatus exitStatus)
-{
- kDebug(kdeconnect_kded()) << qobject_cast<KProcess*>(sender())->program();
- kDebug(kdeconnect_kded()) << "ARGS: exitCode=" << exitCode << " exitStatus=" << exitStatus;
-
- if (exitStatus == QProcess::NormalExit)
- {
- if (isTimeout(sender(), SftpConfig::config()->group("main")))
- {
- knotify(KNotification::Notification
- , i18n("Filesystem unmounted by idle timeout")
- , KIconLoader::global()->loadIcon("clock", KIconLoader::Desktop)
- );
- }
- else
- {
- knotify(KNotification::Notification
- , i18n("Filesystem unmounted")
- , KIconLoader::global()->loadIcon("dialog-ok", KIconLoader::Desktop)
- );
- }
}
else
{
- knotify(KNotification::Error
- , i18n("Error when accessing to filesystem")
- , KIconLoader::global()->loadIcon("dialog-error", KIconLoader::Desktop)
+ knotify(KNotification::Notification
+ , i18n("Filesystem unmounted")
+ , KIconLoader::global()->loadIcon("dialog-ok", KIconLoader::Desktop)
);
}
-
- cleanMountPoint();
- m_d->mountProc = 0;
- //Used to notify MountLoop about error.
- //There is no loop running if mount was succesful!
- Q_EMIT mount_failed();
-}
-
-void SftpPlugin::knotify(int type, const QString& text, const QPixmap& icon) const
-{
- KNotification::event(KNotification::StandardEvent(type)
- , i18n("Device %1").arg(device()->name()), text, icon, 0
- , KNotification::CloseOnTimeout);
+ m_d->mounter->deleteLater();
+ m_d->mounter = 0;
}
-void SftpPlugin::cleanMountPoint()
+void SftpPlugin::onFailed(const QString& message)
{
- KProcess::execute(QStringList() << "fusermount" << "-u" << mountPoint(), 10000);
-}
-
-void SftpPlugin::mountTimeout()
-{
- kDebug(kdeconnect_kded()) << "loop.... TIMEOUT";
knotify(KNotification::Error
- , i18n("Failed to mount filesystem: device not responding")
+ , message
, KIconLoader::global()->loadIcon("dialog-error", KIconLoader::Desktop)
);
}
-void SftpPlugin::readProcessOut()
-{
- m_d->mountProc->setProperty(lastaccess_c, QDateTime::currentDateTime());
- m_d->mountProc->readAll();
-}
-
-bool SftpPlugin::waitForMount()
+void SftpPlugin::knotify(int type, const QString& text, const QPixmap& icon) const
{
- if (m_d->loop.isRunning())
- {
- MountLoop loop;
- connect(&m_d->loop, SIGNAL(result(bool)), &loop, SLOT(exitWith(bool)));
-
- kDebug(kdeconnect_kded()) << "start secondary loop...";
- bool ret = loop.exec();
- kDebug(kdeconnect_kded()) << "finish secondary loop...:" << ret;
- return ret;
- }
-
- return m_d->mountProc;
+ KNotification::event(KNotification::StandardEvent(type)
+ , i18n("Device %1").arg(device()->name()), text, icon, 0
+ , KNotification::CloseOnTimeout);
}
-
-// void SftpPlugin::startAgent()
-// {
-// m_d->agentProc = new KProcess(this);
-// m_d->agentProc->setOutputChannelMode(KProcess::SeparateChannels);
-// connect(m_d->agentProc, SIGNAL(finished(int,QProcess::ExitStatus)), m_d->agentProc, SLOT(deleteLater()));
-//
-// m_d->agentProc->setProgram("ssh-agent", QStringList("-c"));
-// m_d->agentProc->setReadChannel(QProcess::StandardOutput);
-//
-// kDebug(kdeconnect_kded()) << "1";
-// m_d->agentProc->start();
-// if (!m_d->agentProc->waitForFinished(5000))
-// {
-// kDebug(kdeconnect_kded()) << "2";
-// m_d->agentProc->deleteLater();
-// return;
-// }
-//
-// kDebug(kdeconnect_kded()) << "3";
-// m_d->env = QProcessEnvironment::systemEnvironment();
-// QRegExp envrx("setenv (.*) (.*);");
-//
-// kDebug(kdeconnect_kded()) << "4";
-// QByteArray data = m_d->agentProc->readLine();
-// kDebug(kdeconnect_kded()) << "line readed:" << data;
-// if (envrx.indexIn(data) == -1)
-// {
-// kError(kdeconnect_kded()) << "can't start ssh-agent";
-// return;
-// }
-// m_d->env.insert(envrx.cap(1), envrx.cap(2));
-//
-// KProcess add;
-// add.setProgram("ssh-add", QStringList() << device()->privateKey());
-// add.setProcessEnvironment(m_d->env);
-// add.execute(5000);
-// }
diff --git a/kded/plugins/sftp/sftpplugin.h b/kded/plugins/sftp/sftpplugin.h
index b3edfed..57af4b0 100644
--- a/kded/plugins/sftp/sftpplugin.h
+++ b/kded/plugins/sftp/sftpplugin.h
@@ -1,5 +1,5 @@
/**
- * Copyright 2013 Albert Vaca <albertvaka at gmail.com>
+ * Copyright 2014 Samoilenko Yuri<kinnalru at gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -21,9 +21,6 @@
#ifndef SFTPPLUGIN_H
#define SFTPPLUGIN_H
-#include <KProcess>
-#include <QEventLoop>
-
#include "../kdeconnectplugin.h"
#define PACKAGE_TYPE_SFTP QLatin1String("kdeconnect.sftp")
@@ -48,9 +45,7 @@ public:
Q_SIGNALS:
- void mount_succesed(); //TODO make private - for internal use
- void mount_failed(); //TODO make private -for internal use
-
+ void packageReceived(const NetworkPackage& np);
public Q_SLOTS:
virtual bool receivePackage(const NetworkPackage& np);
@@ -64,24 +59,14 @@ public Q_SLOTS:
Q_SCRIPTABLE QString mountPoint();
-
-protected:
- void timerEvent(QTimerEvent *event);
-
private Q_SLOTS:
- void onStarted();
- void onError(QProcess::ProcessError error);
- void onFinished(int exitCode, QProcess::ExitStatus exitStatus);
- void mountTimeout();
-
- void readProcessOut();
-
- bool waitForMount();
+ void onMounted();
+ void onUnmounted(bool idleTimeout);
+ void onFailed(const QString& message);
private:
QString dbusPath() const { return "/modules/kdeconnect/devices/" + device()->id() + "/sftp"; }
void knotify(int type, const QString& text, const QPixmap& icon) const;
- void cleanMountPoint();
void addToDolphin();
void removeFromDolphin();
--
kdeconnect packaging
More information about the pkg-kde-commits
mailing list