Skip to content

feat(search): revive unified search - #10639

Open
Rello wants to merge 5 commits into
masterfrom
feature/newSearch
Open

feat(search): revive unified search#10639
Rello wants to merge 5 commits into
masterfrom
feature/newSearch

Conversation

@Rello

@Rello Rello commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator
  • Modernize the account-scoped search window with provider, date, and people filters, connected-service results, and aggregate and provider detail views.
  • Introduce cancellable per-provider search state, stable reveal ordering, stale-response protection, pagination, scoped retries, and persistent keyboard selection.
  • Align the search UI with shared wizard styling and add coverage for the search models, QML behavior, people lookup, and image handling.

Server Reference: nextcloud/server#60241

Assisted-by: Codex:GPT-5

Bildschirmfoto 2026-08-21 um 11 21 09
Bildschirmaufnahme.2026-08-21.um.11.22.02.mov

@Rello Rello added this to the 35.0.0 milestone Aug 21, 2026
@Rello Rello self-assigned this Aug 21, 2026
@Rello Rello added the design Design, UI, UX, etc. label Aug 21, 2026
@Rello

Rello commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator Author

@kra-mo as discussed

@kra-mo kra-mo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since this is already a fixed-height dialog, there is no reason to show a filter button in the initial state. Instead, the filters should just always be visible.

There should also be some indication that a search is happening through a circular progress indicator like on the web. Right now, the search button seems to disappear while you're searching?

And are you struggling to click some of the buttons in the screen recording? I guess that is known, then :)

@kra-mo

kra-mo commented Aug 21, 2026

Copy link
Copy Markdown
Member

Since this is already a fixed-height dialog, there is no reason to show a filter button in the initial state. Instead, the filters should just always be visible.

Alternatively, we could make it variable-height, like Spotlight, which might also be nice.

@Rello

Rello commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator Author

Since this is already a fixed-height dialog, there is no reason to show a filter button in the initial state. Instead, the filters should just always be visible.

Alternatively, we could make it variable-height, like Spotlight, which might also be nice.

Hi,
you mean type/date/people buttons should be there from the beginning, correct?
I would like to keep it fixed height because this is stable. trying with dynamic and max-heigt is not used yet. Would add some more complexity. now we have the standard for all

@kra-mo

kra-mo commented Aug 21, 2026

Copy link
Copy Markdown
Member

Hi,
you mean type/date/people buttons should be there from the beginning, correct?

Yes, instead of having a funnel button.

I would like to keep it fixed height because this is stable. trying with dynamic and max-heigt is not used yet. Would add some more complexity. now we have the standard for all

Sure, makes sense

@Rello

Rello commented Aug 22, 2026

Copy link
Copy Markdown
Collaborator Author

@kra-mo should be fine now

Bildschirmaufnahme.2026-08-22.um.16.11.20.mov

@Rello
Rello force-pushed the feature/newSearch branch from 69c9e0a to 5cfeaea Compare August 22, 2026 14:13
@Rello
Rello marked this pull request as ready for review August 22, 2026 14:13

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5cfeaeaac6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/gui/search/UnifiedSearchInputContainer.qml Outdated
@Rello
Rello force-pushed the feature/newSearch branch 4 times, most recently from 860dcd2 to 7920816 Compare August 22, 2026 18:22

@kra-mo kra-mo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Rello the 🔍 icon still disappears and there is still no progress indication.

@Rello

Rello commented Aug 24, 2026

Copy link
Copy Markdown
Collaborator Author

@Rello the 🔍 icon still disappears and there is still no progress indication.

Ah. I think it tries to put the progress indicator where the search icon is.
question is where to put it? always at the bottom of all results? ...because of the "load more" for example...

@kra-mo

kra-mo commented Aug 25, 2026

Copy link
Copy Markdown
Member

Where it is on the web. At the end of the bar, just before the X button:

image

@Rello

Rello commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator Author

Where it is on the web. At the end of the bar, just before the X button:

Hi,
final approval like this?

Bildschirmfoto 2026-08-25 um 13 40 29

@kra-mo kra-mo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure. It's an improvement over what there is atm.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 08df11544b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/gui/search/unifiedsearchpeoplemodel.cpp
@Rello

Rello commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator Author

@copilot resolve the merge conflicts in this pull request

Copilot AI commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

@copilot resolve the merge conflicts in this pull request

Resolved the merge conflicts and pushed the merge commit in 5d490ea.

Comment thread src/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment thread src/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment thread src/gui/search/unifiedsearchpeoplemodel.h Outdated
Comment thread src/gui/search/unifiedsearchresultslistmodel.h Outdated
Comment thread src/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment thread src/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment thread src/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment thread src/gui/wizard/qml/WizardMenuItem.qml Outdated
Comment thread src/gui/wizard/qml/WizardButton.qml Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cefa5a12d7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment thread src/gui/activity/qml/ActivityItem.qml Outdated
Comment thread src/gui/activity/qml/ActivityList.qml Outdated
Comment thread src/gui/search/SearchWindow.qml Outdated
Comment thread src/gui/search/SearchWindow.qml Outdated
Comment thread src/gui/search/SearchWindow.qml Outdated
Comment thread src/gui/search/SearchWindow.qml Outdated
Comment thread src/gui/search/unifiedsearchpeoplemodel.cpp
Comment thread src/gui/wizard/qml/WizardButton.qml Outdated
Comment thread src/gui/wizard/qml/WizardButton.qml Outdated
Comment thread src/gui/wizard/qml/WizardChipButton.qml Outdated
Comment thread src/gui/wizard/qml/WizardMenuItem.qml Outdated
Comment thread src/gui/systray.cpp Outdated
@Rello
Rello force-pushed the feature/newSearch branch 2 times, most recently from 8fbc4d6 to 717974c Compare August 29, 2026 10:46

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 717974c845

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment thread src/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment thread src/gui/search/UnifiedSearchResultDelegate.qml Outdated

@claucambra claucambra left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few more comments, several of my prior comments remain unaddressed

Comment thread src/gui/search/UnifiedSearchFilterBar.qml Outdated
Comment thread src/gui/search/UnifiedSearchFilterBar.qml Outdated
* SPDX-License-Identifier: GPL-2.0-or-later
*/

pragma ComponentBehavior: Bound

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this is necessary here, there is only one root component?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still present

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would actually recommand to put pragma ComponentBehavior: Bound in new qml files. This allow the QML engine to enable some optimizations and will be the default behavior in Qt7.

e.g. in Tokodon we already put that in every file

Comment thread src/gui/search/UnifiedSearchPeoplePopup.qml
Comment thread src/gui/search/UnifiedSearchPeoplePopup.qml Outdated
Comment thread src/gui/search/unifiedsearchresultslistmodel.cpp
Comment thread src/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment thread src/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment thread src/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment thread src/gui/search/unifiedsearchresultslistmodel.cpp Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bb11971d14

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/gui/search/UnifiedSearchPeoplePopup.qml

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4e56db3fa9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/gui/search/unifiedsearchresultslistmodel.cpp
Comment thread src/gui/search/unifiedsearchresultslistmodel.cpp Outdated
* SPDX-License-Identifier: GPL-2.0-or-later
*/

pragma ComponentBehavior: Bound

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still present

Comment thread src/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment thread src/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment thread src/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment thread src/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment thread src/gui/search/UnifiedSearchPeoplePopup.qml
Comment thread src/gui/search/unifiedsearchresult.h Outdated
Comment thread src/gui/search/unifiedsearchresultslistmodel.cpp
Comment thread src/gui/search/SearchWindow.qml
Comment thread src/gui/search/SearchWindow.qml
Comment thread src/gui/search/SearchWindow.qml
Comment thread src/gui/search/UnifiedSearchDetailHeader.qml
Comment thread src/gui/search/UnifiedSearchFilterBar.qml
Comment thread src/gui/search/UnifiedSearchPeopleDelegate.qml
Rello and others added 4 commits September 2, 2026 10:48
Modernize the account-scoped search window with provider, date, and people filters, connected-service results, and aggregate and provider detail views.

Introduce per-provider search state, pagination, scoped retries, keyboard selection, shared wizard styling, and model and QML coverage.

Co-authored-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
Signed-off-by: Rello <github@scherello.de>
Assisted-by: Codex:GPT-5
Signed-off-by: Rello <github@scherello.de>
Assisted-by: Codex:GPT-5
Import tray QML types explicitly and default-initialize search result value members.

Signed-off-by: Rello <github@scherello.de>
Assisted-by: Codex:GPT-5
Signed-off-by: Rello <github@scherello.de>
Assisted-by: Codex:GPT-5
@Rello
Rello force-pushed the feature/newSearch branch from 127f71f to a6b1a3c Compare September 2, 2026 08:48
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Artifact containing the AppImage: nextcloud-appimage-pr-10639.zip

Digest: sha256:91d262f94cc96c349572b5b469e9781a90a6c7a16811ee45c02ce887aaffda0d

To test this change/fix you can download the above artifact file, unzip it, and run it.

Please make sure to quit your existing Nextcloud app and backup your data.

Signed-off-by: Rello <github@scherello.de>
Assisted-by: Codex:GPT-5
@sonarqubecloud

sonarqubecloud Bot commented Sep 2, 2026

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
79.6% Coverage on New Code (required ≥ 80%)
107 New Code Smells (required ≤ 0)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

Comment on lines -29 to +47
QString _title;
QString _subline;
QString _providerId;
QString _providerName;
QString _title = QString();
QString _subline = QString();
QString _providerId = QString();
QString _providerName = QString();
QString _providerIcon = QString();
QString _stableKey = QString();
bool _isRounded = false;
bool _isSelected = false;
bool _isSelectable = false;
bool _isPartialMatch = false;
bool _hasOverflow = false;
bool _isLoading = false;
qint32 _order = std::numeric_limits<qint32>::max();
QUrl _resourceUrl;
QString _darkIcons;
QString _lightIcons;
QUrl _resourceUrl = QUrl();
QString _darkIcons = QString();
QString _lightIcons = QString();

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need to assign a value here either... e.g. QUrl resourceUrl generates a QUrl object already

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

design Design, UI, UX, etc.

Projects

Status: NC35

Development

Successfully merging this pull request may close these issues.

6 participants