Skip to content

Commit 6e76865

Browse files
fix(unifiedsearch): open folder or file requested via traymenu-searchbar directly and locally
1 parent d023b36 commit 6e76865

File tree

4 files changed

+40
-21
lines changed

4 files changed

+40
-21
lines changed

src/gui/tray/UnifiedSearchResultListItem.qml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ MouseArea {
6868
if (isFetchMoreTrigger) {
6969
unifiedSearchResultMouseArea.fetchMoreTriggerClicked(model.providerId)
7070
} else {
71-
unifiedSearchResultMouseArea.resultClicked(model.providerId, model.resourceUrlRole)
71+
unifiedSearchResultMouseArea.resultClicked(model.providerId, model.resourceUrlRole, model.subline, model.resultTitle)
7272
}
7373
}
7474
}

src/gui/tray/unifiedsearchresultslistmodel.cpp

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -324,29 +324,48 @@ bool UnifiedSearchResultsListModel::isSearchInProgress() const
324324
return !_searchJobConnections.isEmpty();
325325
}
326326

327-
void UnifiedSearchResultsListModel::resultClicked(const QString &providerId, const QUrl &resourceUrl) const
327+
void UnifiedSearchResultsListModel::resultClicked(
328+
const QString &providerId, const QUrl &resourceUrl, const QString &subline, const QString &title
329+
) const
328330
{
329-
const QUrlQuery urlQuery{resourceUrl};
330-
const auto dir = urlQuery.queryItemValue(QStringLiteral("dir"), QUrl::ComponentFormattingOption::FullyDecoded);
331-
const auto fileName =
332-
urlQuery.queryItemValue(QStringLiteral("scrollto"), QUrl::ComponentFormattingOption::FullyDecoded);
333-
334-
if (providerId.contains(QStringLiteral("file"), Qt::CaseInsensitive) && !dir.isEmpty() && !fileName.isEmpty()) {
335-
if (!_accountState || !_accountState->account()) {
336-
return;
331+
if (_accountState == nullptr || _accountState->account() == nullptr || !providerId.contains(QStringLiteral("file"), Qt::CaseInsensitive)) {
332+
qCInfo(lcUnifiedSearch) << "immediately returning from resultClicked";
333+
return;
334+
}
335+
336+
const QUrlQuery urlQuery{resourceUrl};
337+
QString dir = urlQuery.queryItemValue(QStringLiteral("dir"), QUrl::ComponentFormattingOption::FullyDecoded);
338+
QString fileName = urlQuery.queryItemValue(QStringLiteral("scrollto"), QUrl::ComponentFormattingOption::FullyDecoded);
339+
340+
QString relativePath;
341+
// server version above 20
342+
if (dir.isEmpty() && fileName.isEmpty() && !title.isEmpty()) {
343+
if (!subline.isEmpty()) {
344+
dir = subline;
345+
dir.remove(0,3);
346+
fileName = QLatin1Char('/') + title;
337347
}
348+
else {
349+
dir = title;
350+
}
351+
relativePath = dir + fileName;
352+
}
353+
// server version 20
354+
else {
355+
relativePath = dir + QLatin1Char('/') + fileName;
356+
}
338357

339-
const QString relativePath = dir + QLatin1Char('/') + fileName;
340-
const auto localFiles =
341-
FolderMan::instance()->findFileInLocalFolders(QFileInfo(relativePath).path(), _accountState->account());
358+
qCInfo(lcUnifiedSearch) << "relativePath: " << relativePath;
359+
const QStringList localFiles = FolderMan::instance()->findFileInLocalFolders(relativePath, _accountState->account());
342360

343-
if (!localFiles.isEmpty()) {
344-
qCInfo(lcUnifiedSearch) << "Opening file:" << localFiles.constFirst();
345-
QDesktopServices::openUrl(QUrl::fromLocalFile(localFiles.constFirst()));
346-
return;
347-
}
361+
if (!localFiles.isEmpty()) {
362+
qCInfo(lcUnifiedSearch) << "Opening requested file or folder locally:" << localFiles.constFirst();
363+
QDesktopServices::openUrl(QUrl::fromLocalFile(localFiles.constFirst()));
364+
}
365+
else {
366+
qCInfo(lcUnifiedSearch) << "Opening requested file or folder in webbrowser: " << localFiles.constFirst();
367+
Utility::openBrowser(resourceUrl);
348368
}
349-
Utility::openBrowser(resourceUrl);
350369
}
351370

352371
void UnifiedSearchResultsListModel::fetchMoreTriggerClicked(const QString &providerId)

src/gui/tray/unifiedsearchresultslistmodel.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class UnifiedSearchResultsListModel : public QAbstractListModel
7171
[[nodiscard]] QString errorString() const;
7272
[[nodiscard]] bool waitingForSearchTermEditEnd() const;
7373

74-
Q_INVOKABLE void resultClicked(const QString &providerId, const QUrl &resourceUrl) const;
74+
Q_INVOKABLE void resultClicked(const QString &providerId, const QUrl &resourceUrl, const QString &subline, const QString &title) const;
7575
Q_INVOKABLE void fetchMoreTriggerClicked(const QString &providerId);
7676

7777
[[nodiscard]] QHash<int, QByteArray> roleNames() const override;

test/testunifiedsearchlistmodel.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,7 @@ private slots:
581581
urlForClickedResult = model->data(model->index(i), OCC::UnifiedSearchResultsListModel::DataRole::ResourceUrlRole).toString();
582582

583583
if (!providerId.isEmpty() && !urlForClickedResult.isEmpty()) {
584-
model->resultClicked(providerId, QUrl(urlForClickedResult));
584+
model->resultClicked(providerId, QUrl(urlForClickedResult), "dummyStringNeedToFix", "dummyStringNeedToFix");
585585
break;
586586
}
587587
}

0 commit comments

Comments
 (0)