From 4e2ea9c00c4237521d99343167342969591760f9 Mon Sep 17 00:00:00 2001 From: alex-z Date: Thu, 13 Oct 2022 11:24:16 +0300 Subject: Fix account not found when doing local file editing. Signed-off-by: alex-z --- src/gui/application.cpp | 4 ++-- src/gui/folderman.cpp | 22 +++++++++++++++++----- src/gui/folderman.h | 2 +- 3 files changed, 20 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/gui/application.cpp b/src/gui/application.cpp index 6f891e022..a04ee2f13 100644 --- a/src/gui/application.cpp +++ b/src/gui/application.cpp @@ -763,7 +763,7 @@ void Application::handleEditLocally(const QUrl &url) const } // for a sample URL "nc://open/admin@nextcloud.lan:8080/Photos/lovely.jpg", QUrl::path would return "admin@nextcloud.lan:8080/Photos/lovely.jpg" - const auto accountDisplayName = pathSplit.takeFirst(); + const auto userId = pathSplit.takeFirst(); const auto fileRemotePath = pathSplit.join('/'); const auto urlQuery = QUrlQuery{url}; @@ -774,7 +774,7 @@ void Application::handleEditLocally(const QUrl &url) const qCWarning(lcApplication) << "Invalid URL for file local editing: missing token"; } - FolderMan::instance()->editFileLocally(accountDisplayName, fileRemotePath, token); + FolderMan::instance()->editFileLocally(userId, fileRemotePath, token); } QString substLang(const QString &lang) diff --git a/src/gui/folderman.cpp b/src/gui/folderman.cpp index d76a4fccd..cd4bac264 100644 --- a/src/gui/folderman.cpp +++ b/src/gui/folderman.cpp @@ -1422,7 +1422,7 @@ void FolderMan::setDirtyNetworkLimits() } } -void FolderMan::editFileLocally(const QString &accountDisplayName, const QString &relPath, const QString &token) +void FolderMan::editFileLocally(const QString &userId, const QString &relPath, const QString &token) { const auto showError = [this](const OCC::AccountStatePtr accountState, const QString &errorMessage, const QString &subject) { if (accountState && accountState->account()) { @@ -1449,15 +1449,27 @@ void FolderMan::editFileLocally(const QString &accountDisplayName, const QString if (token.isEmpty()) { qCWarning(lcFolderMan) << "Edit locally request is missing a valid token. Impossible to open the file."; - showError({}, tr("Edit locally request is not valid. Opening the file is forbidden."), accountDisplayName); + showError({}, tr("Edit locally request is not valid. Opening the file is forbidden."), userId); return; } - const auto accountFound = AccountManager::instance()->account(accountDisplayName); + const auto accountFound = [&userId]() { + for (const auto &account : AccountManager::instance()->accounts()) { + const auto isUserIdWithPort = userId.split(QLatin1Char(':')).size() > 1; + const auto port = isUserIdWithPort ? account->account()->url().port() : -1; + const auto portString = (port > 0 && port != 80 && port != 443) ? QStringLiteral(":%1").arg(port) : QStringLiteral(""); + const QString davUserId = QStringLiteral("%1@%2").arg(account->account()->davUser(), account->account()->url().host()) + portString; + + if (davUserId == userId) { + return account; + } + } + return AccountStatePtr{}; + }(); if (!accountFound) { - qCWarning(lcFolderMan) << "Could not find an account " << accountDisplayName << " to edit file " << relPath << " locally."; - showError(accountFound, tr("Could not find an account for local editing"), accountDisplayName); + qCWarning(lcFolderMan) << "Could not find an account " << userId << " to edit file " << relPath << " locally."; + showError(accountFound, tr("Could not find an account for local editing"), userId); return; } diff --git a/src/gui/folderman.h b/src/gui/folderman.h index 2c9b920e6..444eedff8 100644 --- a/src/gui/folderman.h +++ b/src/gui/folderman.h @@ -214,7 +214,7 @@ public: void setDirtyNetworkLimits(); /** opens a file with default app, if the file is present **/ - void editFileLocally(const QString &accountDisplayName, const QString &relPath, const QString &token); + void editFileLocally(const QString &userId, const QString &relPath, const QString &token); signals: /** -- cgit v1.2.3