[network/kdeconnect-kde/release/26.08] kio: kio: Provide better error message on failure in stat, too
Albert Vaca Cintora <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 3d966a3c73f5d3eba72b39ee90165137dacb8189 by Albert Vaca Cintora, on behalf of Kai Uwe Broulik.
Committed on 13/08/2026 at 20:10.
Pushed by albertvaka into branch 'release/26.08'.
kio: Provide better error message on failure in stat, too
In listDir when we receive an object not found error, we check whether
the device might not be reachable, not paired, or has no plug-in, etc.
In stat, however, we just forwared the DBus error as-is, resulting in
a confusing "No such object /modules/kdeconnect/foo/sftp" error.
(cherry picked from commit b3b71eda06f46a43e1930ce77ff47947111048e8)
M +36 -21 kio/kiokdeconnect.cpp
https://invent.kde.org/network/kdeconnect-kde/-/commit/3d966a3c73f5d3eba72b39ee90165137dacb8189
diff --git a/kio/kiokdeconnect.cpp b/kio/kiokdeconnect.cpp
index 5c68566d2..1b93842f4 100644
--- a/kio/kiokdeconnect.cpp
+++ b/kio/kiokdeconnect.cpp
@@ -99,6 +99,34 @@ KIO::WorkerResult handleDBusError(QDBusReply<T> &reply)
return KIO::WorkerResult::pass();
}
+KIO::WorkerResult handleUnknownObjectDBusError(const QString &deviceId)
+{
+ DaemonDbusInterface daemon;
+
+ auto devsRepl = daemon.devices(false, false);
+ devsRepl.waitForFinished();
+
+ if (!devsRepl.value().contains(deviceId)) {
+ return KIO::WorkerResult::fail(KIO::ERR_WORKER_DEFINED, i18n("No such device: %0").arg(deviceId));
+ }
+
+ DeviceDbusInterface dev(deviceId);
+
+ if (!dev.isPaired()) {
+ return KIO::WorkerResult::fail(KIO::ERR_WORKER_DEFINED, i18n("%0 is not paired").arg(dev.name()));
+ }
+
+ if (!dev.isReachable()) {
+ return KIO::WorkerResult::fail(KIO::ERR_WORKER_DEFINED, i18n("%0 is not connected").arg(dev.name()));
+ }
+
+ if (!dev.hasPlugin(QStringLiteral("kdeconnect_sftp"))) {
+ return KIO::WorkerResult::fail(KIO::ERR_WORKER_DEFINED, i18n("%0 has no Remote Filesystem plugin").arg(dev.name()));
+ }
+
+ return KIO::WorkerResult::pass();
+}
+
KioKdeconnect::KioKdeconnect(const QByteArray &pool, const QByteArray &app)
: ForwardingWorkerBase("kdeconnect", pool, app)
, m_dbusInterface(new DaemonDbusInterface(this))
@@ -229,27 +257,8 @@ KIO::WorkerResult KioKdeconnect::listDevice(const QString &device)
QDBusReply<bool> mountreply = interface.mountAndWait();
if (mountreply.error().type() == QDBusError::UnknownObject) {
- DaemonDbusInterface daemon;
-
- auto devsRepl = daemon.devices(false, false);
- devsRepl.waitForFinished();
-
- if (!devsRepl.value().contains(device)) {
- return KIO::WorkerResult::fail(KIO::ERR_WORKER_DEFINED, i18n("No such device: %0").arg(device));
- }
-
- DeviceDbusInterface dev(device);
-
- if (!dev.isPaired()) {
- return KIO::WorkerResult::fail(KIO::ERR_WORKER_DEFINED, i18n("%0 is not paired").arg(dev.name()));
- }
-
- if (!dev.isReachable()) {
- return KIO::WorkerResult::fail(KIO::ERR_WORKER_DEFINED, i18n("%0 is not connected").arg(dev.name()));
- }
-
- if (!dev.hasPlugin(QStringLiteral("kdeconnect_sftp"))) {
- return KIO::WorkerResult::fail(KIO::ERR_WORKER_DEFINED, i18n("%0 has no Remote Filesystem plugin").arg(dev.name()));
+ if (auto result = handleUnknownObjectDBusError(device); !result.success()) {
+ return result;
}
}
@@ -351,6 +360,12 @@ KIO::WorkerResult KioKdeconnect::stat(const QUrl &url)
const QDBusReply<QString> mountPointReply = interface.mountPoint();
if (!mountPointReply.isValid()) {
+ if (mountPointReply.error().type() == QDBusError::UnknownObject) {
+ if (auto result = handleUnknownObjectDBusError(currentDevice); !result.success()) {
+ return result;
+ }
+ }
+
return KIO::WorkerResult::fail(KIO::ERR_WORKER_DEFINED, i18n("Failed to get mount point: %1", mountPointReply.error().message()));
}