┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/panels
diff options
context:
space:
mode:
authorAhmad Samir <[email protected]>2020-09-13 15:28:33 +0200
committerAhmad Samir <[email protected]>2020-09-13 16:49:43 +0200
commit2abf1c9ddbffce7a25bd9d700b29bb50dbb75282 (patch)
treeb55203f23989f9de9a22a25856c8e1304552fe2c /src/panels
parentef68a41250dcdf356aece70ddaf4acc9ab9c9a20 (diff)
TerminalPanel: StatJob::mostLocalUrl only works with ":local" protocols
StatJob::mostLocalUrl was changed to cancel the job automatically if the protocol Class isn't ":local", mostLocalUrl only makes sense with ioslaves that actually set UDS_LOCAL_PATH (which should have calss ":local"). I tested that kio-fuse still works, when having the terminal panel open and changing direcotries in Dolphin, with an sftp:// server.
Diffstat (limited to 'src/panels')
-rw-r--r--src/panels/terminal/terminalpanel.cpp39
-rw-r--r--src/panels/terminal/terminalpanel.h2
2 files changed, 27 insertions, 14 deletions
diff --git a/src/panels/terminal/terminalpanel.cpp b/src/panels/terminal/terminalpanel.cpp
index 131d16630..52ff494b2 100644
--- a/src/panels/terminal/terminalpanel.cpp
+++ b/src/panels/terminal/terminalpanel.cpp
@@ -17,6 +17,7 @@
#include <KParts/ReadOnlyPart>
#include <KPluginFactory>
#include <KPluginLoader>
+#include <KProtocolInfo>
#include <KService>
#include <KShell>
#include <kde_terminal_interface.h>
@@ -186,13 +187,21 @@ void TerminalPanel::changeDir(const QUrl& url)
if (url.isLocalFile()) {
sendCdToTerminal(url.toLocalFile());
- } else {
+ return;
+ }
+
+ // Try stat'ing the url; note that mostLocalUrl only works with ":local" protocols
+ if (KProtocolInfo::protocolClass(url.scheme()) == QLatin1String(":local")) {
m_mostLocalUrlJob = KIO::mostLocalUrl(url, KIO::HideProgressInfo);
if (m_mostLocalUrlJob->uiDelegate()) {
KJobWidgets::setWindow(m_mostLocalUrlJob, this);
}
connect(m_mostLocalUrlJob, &KIO::StatJob::result, this, &TerminalPanel::slotMostLocalUrlResult);
+ return;
}
+
+ // Last chance, try kio fuse
+ sendCdToTerminalKIOFuse(url);
}
void TerminalPanel::sendCdToTerminal(const QString& dir, HistoryPolicy addToHistory)
@@ -230,6 +239,21 @@ void TerminalPanel::sendCdToTerminal(const QString& dir, HistoryPolicy addToHist
}
}
+void TerminalPanel::sendCdToTerminalKIOFuse (const QUrl &url) {
+ // URL isn't local, only hope for the terminal to be in sync with the
+ // DolphinView is to mount the remote URL in KIOFuse and point to it.
+ // If we can't do that for any reason, silently fail.
+ auto reply = m_kiofuseInterface.mountUrl(url.toString());
+ QDBusPendingCallWatcher * watcher = new QDBusPendingCallWatcher(reply, this);
+ QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] (QDBusPendingCallWatcher* watcher) {
+ watcher->deleteLater();
+ if (!reply.isError()) {
+ // Successfully mounted, point to the KIOFuse equivalent path.
+ sendCdToTerminal(reply.value());
+ }
+ });
+}
+
void TerminalPanel::slotMostLocalUrlResult(KJob* job)
{
KIO::StatJob* statJob = static_cast<KIO::StatJob *>(job);
@@ -237,18 +261,7 @@ void TerminalPanel::slotMostLocalUrlResult(KJob* job)
if (url.isLocalFile()) {
sendCdToTerminal(url.toLocalFile());
} else {
- // URL isn't local, only hope for the terminal to be in sync with the
- // DolphinView is to mount the remote URL in KIOFuse and point to it.
- // If we can't do that for any reason, silently fail.
- auto reply = m_kiofuseInterface.mountUrl(url.toString());
- QDBusPendingCallWatcher * watcher = new QDBusPendingCallWatcher(reply, this);
- QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] (QDBusPendingCallWatcher* watcher) {
- watcher->deleteLater();
- if (!reply.isError()) {
- // Successfully mounted, point to the KIOFuse equivalent path.
- sendCdToTerminal(reply.value());
- }
- });
+ sendCdToTerminalKIOFuse(url);
}
m_mostLocalUrlJob = nullptr;
diff --git a/src/panels/terminal/terminalpanel.h b/src/panels/terminal/terminalpanel.h
index 85f175da1..82c2c3fc7 100644
--- a/src/panels/terminal/terminalpanel.h
+++ b/src/panels/terminal/terminalpanel.h
@@ -77,7 +77,7 @@ private:
void changeDir(const QUrl& url);
void sendCdToTerminal(const QString& path, HistoryPolicy addToHistory = HistoryPolicy::AddToHistory);
-
+ void sendCdToTerminalKIOFuse (const QUrl &url);
private:
bool m_clearTerminal;
KIO::StatJob* m_mostLocalUrlJob;