]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Fix 'Show Target' for non-local URLs
authorNicolas Fella <nicolas.fella@gmx.de>
Sun, 10 Jul 2022 13:42:13 +0000 (15:42 +0200)
committerNicolas Fella <nicolas.fella@gmx.de>
Tue, 14 Feb 2023 13:54:29 +0000 (14:54 +0100)
Links are not always local files, e.g. 'remote:/zeroconf' links to 'zeroconf:/'

The current code fails there

Instead of using QFile API that does not work on non-local URLs use QUrl::resolved to resolve relative links

Furthermore, QFile::exists doesn't work for non-local URLs. Instead do a KIO stat to check whether the target exists

src/dolphinmainwindow.cpp

index 4740b66e9d4690b6127ad2c3e177540a2b9971e7..8372a2ac25856f096a3a332a0add0c236f758644 100644 (file)
@@ -499,17 +499,20 @@ void DolphinMainWindow::openInNewWindow()
 
 void DolphinMainWindow::showTarget()
 {
-    const auto link = m_activeViewContainer->view()->selectedItems().at(0);
-    const auto linkLocationDir = QFileInfo(link.localPath()).absoluteDir();
-    auto linkDestination = link.linkDest();
-    if (QFileInfo(linkDestination).isRelative()) {
-        linkDestination = linkLocationDir.filePath(linkDestination);
-    }
-    if (QFileInfo::exists(linkDestination)) {
-        KIO::highlightInFileManager({QUrl::fromLocalFile(linkDestination).adjusted(QUrl::StripTrailingSlash)});
-    } else {
-        m_activeViewContainer->showMessage(xi18nc("@info", "Could not access <filename>%1</filename>.", linkDestination), DolphinViewContainer::Warning);
-    }
+    const KFileItem link = m_activeViewContainer->view()->selectedItems().at(0);
+    const QUrl destinationUrl = link.url().resolved(QUrl(link.linkDest()));
+
+    auto job = KIO::statDetails(destinationUrl, KIO::StatJob::SourceSide, KIO::StatNoDetails);
+
+    connect(job, &KJob::finished, this, [this, destinationUrl](KJob *job) {
+        KIO::StatJob *statJob = static_cast<KIO::StatJob *>(job);
+
+        if (statJob->error()) {
+            m_activeViewContainer->showMessage(job->errorString(), DolphinViewContainer::Error);
+        } else {
+            KIO::highlightInFileManager({destinationUrl});
+        }
+    });
 }
 
 void DolphinMainWindow::showEvent(QShowEvent *event)