1
0
mirror of https://invent.kde.org/system/dolphin synced 2024-07-04 17:30:55 +00:00

Fix 'Show Target' for non-local URLs

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
This commit is contained in:
Nicolas Fella 2022-07-10 15:42:13 +02:00
parent 9c6c80edc9
commit 4fbc5302e7

View 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)