SPDX-FileCopyrightText: 2022 Alexander Wilms <f.alexander.wilms@gmail.com>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "desktopschemehelper.h"
#include <QDir>
#include <QRegularExpression>
#include <QStandardPaths>
#include <QUrl>
using namespace Qt::StringLiterals;
DesktopSchemeHelper::DesktopSchemeHelper(QObject *parent)
: QObject(parent)
{
}
DesktopSchemeHelper::~DesktopSchemeHelper()
{
}
QString DesktopSchemeHelper::getDesktopUrl(const QString &absoluteUrlString)
{
QUrl absoluteUrl(absoluteUrlString);
QUrl absoluteFileUrl(absoluteUrlString);
absoluteFileUrl.setScheme(QStringLiteral("file"));
QString absoluteDesktopString(QStandardPaths::standardLocations(QStandardPaths::DesktopLocation).at(0));
QUrl absoluteDesktopUrl(absoluteDesktopString);
absoluteDesktopUrl.setScheme(QStringLiteral("file"));
if (absoluteUrl.scheme() != QStringLiteral("desktop") && (absoluteDesktopUrl.isParentOf(absoluteUrl) || absoluteDesktopUrl == absoluteFileUrl)) {
QDir absoluteDesktopDir(absoluteDesktopString);
QString relativePath = absoluteDesktopDir.relativeFilePath(absoluteUrl.toString(QUrl::RemoveScheme));
if (relativePath.endsWith(QLatin1Char('.'))) {
relativePath.chop(1);
}
QString relativeUrlString = QStringLiteral("desktop:/") + relativePath + QStringLiteral("/");
QRegularExpression slashRegex(QStringLiteral("/+"));
relativeUrlString.replace(slashRegex, QStringLiteral("/"));
return relativeUrlString;
} else {
QString absoluteUrlStringCopy(absoluteUrlString);
QRegularExpression slashRegex(QStringLiteral("(!:)/+"));
absoluteUrlStringCopy.replace(slashRegex, QStringLiteral("/"));
return absoluteUrlStringCopy;
}
}
QString DesktopSchemeHelper::getFileUrl(const QString &folderViewUrl)
{
if (constexpr auto fileScheme = u"file://"_sv; folderViewUrl.startsWith(fileScheme)) {
return folderViewUrl.mid(fileScheme.size());
}
QString absoluteDesktopString(QStandardPaths::standardLocations(QStandardPaths::DesktopLocation).at(0));
QString absoluteFileUrl(folderViewUrl);
if (absoluteFileUrl.startsWith(QStringLiteral("desktop:/"))) {
absoluteFileUrl.replace(QStringLiteral("desktop:/"), QStringLiteral("desktop:"));
}
if (absoluteFileUrl.endsWith(QLatin1Char('.'))) {
absoluteFileUrl.chop(1);
}
return absoluteFileUrl.replace(QStringLiteral("desktop:"), absoluteDesktopString + QStringLiteral("/"));
}
#include "moc_desktopschemehelper.cpp"