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

@RelloRello 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

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

Copy link
Copy Markdown
CollaboratorAuthor

@kra-mo as discussed

@kra-mokra-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

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

Copy link
Copy Markdown
CollaboratorAuthor

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

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

Copy link
Copy Markdown
CollaboratorAuthor

@kra-mo should be fine now

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

@Rello
Rello marked this pull request as ready for review August 22, 2026 14:13

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
@Rello
Relloforce-pushed the feature/newSearch branch 4 times, most recently from 860dcd2 to 7920816CompareAugust 22, 2026 18:22

@kra-mokra-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

Copy link
Copy Markdown
CollaboratorAuthor

@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

Copy link
Copy Markdown
Member

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

image

@Rello

Copy link
Copy Markdown
CollaboratorAuthor

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-mokra-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-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp
@Rello

Copy link
Copy Markdown
CollaboratorAuthor

@copilot resolve the merge conflicts in this pull request

CopilotAI 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/wizard/qml/WizardMenuItem.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/activity/qml/ActivityItem.qml Outdated
Comment threadsrc/gui/activity/qml/ActivityList.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.cpp
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardChipButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardMenuItem.qml Outdated
Comment threadsrc/gui/systray.cpp Outdated
@Rello
Relloforce-pushed the feature/newSearch branch 2 times, most recently from 8fbc4d6 to 717974cCompareAugust 29, 2026 10:46

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/UnifiedSearchResultDelegate.qml Outdated

@claucambraclaucambra 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 threadsrc/gui/search/UnifiedSearchFilterBar.qml Outdated
Comment threadsrc/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 threadsrc/gui/search/UnifiedSearchPeoplePopup.qml
Comment threadsrc/gui/search/UnifiedSearchPeoplePopup.qml Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/UnifiedSearchPeoplePopup.qml

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/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 threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchPeoplePopup.qml
Comment threadsrc/gui/search/unifiedsearchresult.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/UnifiedSearchDetailHeader.qml
Comment threadsrc/gui/search/UnifiedSearchFilterBar.qml
Comment threadsrc/gui/search/UnifiedSearchPeopleDelegate.qml
Relloand 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
@github-actions

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

Copy link
Copy Markdown

Quality Gate FailedQuality 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

designDesign, UI, UX, etc.

Projects

Status: NC35

Development

Successfully merging this pull request may close these issues.

6 participants

@Rello@kra-mo@mgallien@CarlSchwan@claucambra
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
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

@RelloRello 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

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

Copy link
Copy Markdown
CollaboratorAuthor

@kra-mo as discussed

@kra-mokra-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

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

Copy link
Copy Markdown
CollaboratorAuthor

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

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

Copy link
Copy Markdown
CollaboratorAuthor

@kra-mo should be fine now

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

@Rello
Rello marked this pull request as ready for review August 22, 2026 14:13

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
@Rello
Relloforce-pushed the feature/newSearch branch 4 times, most recently from 860dcd2 to 7920816CompareAugust 22, 2026 18:22

@kra-mokra-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

Copy link
Copy Markdown
CollaboratorAuthor

@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

Copy link
Copy Markdown
Member

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

image

@Rello

Copy link
Copy Markdown
CollaboratorAuthor

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-mokra-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-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp
@Rello

Copy link
Copy Markdown
CollaboratorAuthor

@copilot resolve the merge conflicts in this pull request

CopilotAI 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/wizard/qml/WizardMenuItem.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/activity/qml/ActivityItem.qml Outdated
Comment threadsrc/gui/activity/qml/ActivityList.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.cpp
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardChipButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardMenuItem.qml Outdated
Comment threadsrc/gui/systray.cpp Outdated
@Rello
Relloforce-pushed the feature/newSearch branch 2 times, most recently from 8fbc4d6 to 717974cCompareAugust 29, 2026 10:46

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/UnifiedSearchResultDelegate.qml Outdated

@claucambraclaucambra 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 threadsrc/gui/search/UnifiedSearchFilterBar.qml Outdated
Comment threadsrc/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 threadsrc/gui/search/UnifiedSearchPeoplePopup.qml
Comment threadsrc/gui/search/UnifiedSearchPeoplePopup.qml Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/UnifiedSearchPeoplePopup.qml

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/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 threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchPeoplePopup.qml
Comment threadsrc/gui/search/unifiedsearchresult.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/UnifiedSearchDetailHeader.qml
Comment threadsrc/gui/search/UnifiedSearchFilterBar.qml
Comment threadsrc/gui/search/UnifiedSearchPeopleDelegate.qml
Relloand 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
@github-actions

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

Copy link
Copy Markdown

Quality Gate FailedQuality 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

designDesign, UI, UX, etc.

Projects

Status: NC35

Development

Successfully merging this pull request may close these issues.

6 participants

@Rello@kra-mo@mgallien@CarlSchwan@claucambra
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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

@RelloRello 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

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

Copy link
Copy Markdown
CollaboratorAuthor

@kra-mo as discussed

@kra-mokra-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

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

Copy link
Copy Markdown
CollaboratorAuthor

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

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

Copy link
Copy Markdown
CollaboratorAuthor

@kra-mo should be fine now

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

@Rello
Rello marked this pull request as ready for review August 22, 2026 14:13

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
@Rello
Relloforce-pushed the feature/newSearch branch 4 times, most recently from 860dcd2 to 7920816CompareAugust 22, 2026 18:22

@kra-mokra-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

Copy link
Copy Markdown
CollaboratorAuthor

@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

Copy link
Copy Markdown
Member

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

image

@Rello

Copy link
Copy Markdown
CollaboratorAuthor

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-mokra-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-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp
@Rello

Copy link
Copy Markdown
CollaboratorAuthor

@copilot resolve the merge conflicts in this pull request

CopilotAI 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/wizard/qml/WizardMenuItem.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/activity/qml/ActivityItem.qml Outdated
Comment threadsrc/gui/activity/qml/ActivityList.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.cpp
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardChipButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardMenuItem.qml Outdated
Comment threadsrc/gui/systray.cpp Outdated
@Rello
Relloforce-pushed the feature/newSearch branch 2 times, most recently from 8fbc4d6 to 717974cCompareAugust 29, 2026 10:46

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/UnifiedSearchResultDelegate.qml Outdated

@claucambraclaucambra 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 threadsrc/gui/search/UnifiedSearchFilterBar.qml Outdated
Comment threadsrc/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 threadsrc/gui/search/UnifiedSearchPeoplePopup.qml
Comment threadsrc/gui/search/UnifiedSearchPeoplePopup.qml Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/UnifiedSearchPeoplePopup.qml

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/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 threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchPeoplePopup.qml
Comment threadsrc/gui/search/unifiedsearchresult.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/UnifiedSearchDetailHeader.qml
Comment threadsrc/gui/search/UnifiedSearchFilterBar.qml
Comment threadsrc/gui/search/UnifiedSearchPeopleDelegate.qml
Relloand 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
@github-actions

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

Copy link
Copy Markdown

Quality Gate FailedQuality 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

designDesign, UI, UX, etc.

Projects

Status: NC35

Development

Successfully merging this pull request may close these issues.

6 participants

@Rello@kra-mo@mgallien@CarlSchwan@claucambra
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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

@RelloRello 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

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

Copy link
Copy Markdown
CollaboratorAuthor

@kra-mo as discussed

@kra-mokra-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

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

Copy link
Copy Markdown
CollaboratorAuthor

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

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

Copy link
Copy Markdown
CollaboratorAuthor

@kra-mo should be fine now

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

@Rello
Rello marked this pull request as ready for review August 22, 2026 14:13

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
@Rello
Relloforce-pushed the feature/newSearch branch 4 times, most recently from 860dcd2 to 7920816CompareAugust 22, 2026 18:22

@kra-mokra-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

Copy link
Copy Markdown
CollaboratorAuthor

@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

Copy link
Copy Markdown
Member

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

image

@Rello

Copy link
Copy Markdown
CollaboratorAuthor

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-mokra-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-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp
@Rello

Copy link
Copy Markdown
CollaboratorAuthor

@copilot resolve the merge conflicts in this pull request

CopilotAI 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/wizard/qml/WizardMenuItem.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/activity/qml/ActivityItem.qml Outdated
Comment threadsrc/gui/activity/qml/ActivityList.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.cpp
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardChipButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardMenuItem.qml Outdated
Comment threadsrc/gui/systray.cpp Outdated
@Rello
Relloforce-pushed the feature/newSearch branch 2 times, most recently from 8fbc4d6 to 717974cCompareAugust 29, 2026 10:46

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/UnifiedSearchResultDelegate.qml Outdated

@claucambraclaucambra 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 threadsrc/gui/search/UnifiedSearchFilterBar.qml Outdated
Comment threadsrc/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 threadsrc/gui/search/UnifiedSearchPeoplePopup.qml
Comment threadsrc/gui/search/UnifiedSearchPeoplePopup.qml Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/UnifiedSearchPeoplePopup.qml

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/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 threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchPeoplePopup.qml
Comment threadsrc/gui/search/unifiedsearchresult.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/UnifiedSearchDetailHeader.qml
Comment threadsrc/gui/search/UnifiedSearchFilterBar.qml
Comment threadsrc/gui/search/UnifiedSearchPeopleDelegate.qml
Relloand 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
@github-actions

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

Copy link
Copy Markdown

Quality Gate FailedQuality 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

designDesign, UI, UX, etc.

Projects

Status: NC35

Development

Successfully merging this pull request may close these issues.

6 participants

@Rello@kra-mo@mgallien@CarlSchwan@claucambra
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
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

@RelloRello 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

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

Copy link
Copy Markdown
CollaboratorAuthor

@kra-mo as discussed

@kra-mokra-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

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

Copy link
Copy Markdown
CollaboratorAuthor

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

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

Copy link
Copy Markdown
CollaboratorAuthor

@kra-mo should be fine now

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

@Rello
Rello marked this pull request as ready for review August 22, 2026 14:13

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
@Rello
Relloforce-pushed the feature/newSearch branch 4 times, most recently from 860dcd2 to 7920816CompareAugust 22, 2026 18:22

@kra-mokra-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

Copy link
Copy Markdown
CollaboratorAuthor

@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

Copy link
Copy Markdown
Member

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

image

@Rello

Copy link
Copy Markdown
CollaboratorAuthor

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-mokra-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-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp
@Rello

Copy link
Copy Markdown
CollaboratorAuthor

@copilot resolve the merge conflicts in this pull request

CopilotAI 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/wizard/qml/WizardMenuItem.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/activity/qml/ActivityItem.qml Outdated
Comment threadsrc/gui/activity/qml/ActivityList.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.cpp
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardChipButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardMenuItem.qml Outdated
Comment threadsrc/gui/systray.cpp Outdated
@Rello
Relloforce-pushed the feature/newSearch branch 2 times, most recently from 8fbc4d6 to 717974cCompareAugust 29, 2026 10:46

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/UnifiedSearchResultDelegate.qml Outdated

@claucambraclaucambra 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 threadsrc/gui/search/UnifiedSearchFilterBar.qml Outdated
Comment threadsrc/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 threadsrc/gui/search/UnifiedSearchPeoplePopup.qml
Comment threadsrc/gui/search/UnifiedSearchPeoplePopup.qml Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/UnifiedSearchPeoplePopup.qml

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/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 threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchPeoplePopup.qml
Comment threadsrc/gui/search/unifiedsearchresult.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/UnifiedSearchDetailHeader.qml
Comment threadsrc/gui/search/UnifiedSearchFilterBar.qml
Comment threadsrc/gui/search/UnifiedSearchPeopleDelegate.qml
Relloand 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
@github-actions

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

Copy link
Copy Markdown

Quality Gate FailedQuality 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

designDesign, UI, UX, etc.

Projects

Status: NC35

Development

Successfully merging this pull request may close these issues.

6 participants

@Rello@kra-mo@mgallien@CarlSchwan@claucambra
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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

@RelloRello 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

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

Copy link
Copy Markdown
CollaboratorAuthor

@kra-mo as discussed

@kra-mokra-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

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

Copy link
Copy Markdown
CollaboratorAuthor

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

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

Copy link
Copy Markdown
CollaboratorAuthor

@kra-mo should be fine now

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

@Rello
Rello marked this pull request as ready for review August 22, 2026 14:13

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
@Rello
Relloforce-pushed the feature/newSearch branch 4 times, most recently from 860dcd2 to 7920816CompareAugust 22, 2026 18:22

@kra-mokra-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

Copy link
Copy Markdown
CollaboratorAuthor

@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

Copy link
Copy Markdown
Member

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

image

@Rello

Copy link
Copy Markdown
CollaboratorAuthor

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-mokra-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-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp
@Rello

Copy link
Copy Markdown
CollaboratorAuthor

@copilot resolve the merge conflicts in this pull request

CopilotAI 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/wizard/qml/WizardMenuItem.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/activity/qml/ActivityItem.qml Outdated
Comment threadsrc/gui/activity/qml/ActivityList.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.cpp
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardChipButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardMenuItem.qml Outdated
Comment threadsrc/gui/systray.cpp Outdated
@Rello
Relloforce-pushed the feature/newSearch branch 2 times, most recently from 8fbc4d6 to 717974cCompareAugust 29, 2026 10:46

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/UnifiedSearchResultDelegate.qml Outdated

@claucambraclaucambra 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 threadsrc/gui/search/UnifiedSearchFilterBar.qml Outdated
Comment threadsrc/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 threadsrc/gui/search/UnifiedSearchPeoplePopup.qml
Comment threadsrc/gui/search/UnifiedSearchPeoplePopup.qml Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/UnifiedSearchPeoplePopup.qml

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/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 threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchPeoplePopup.qml
Comment threadsrc/gui/search/unifiedsearchresult.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/UnifiedSearchDetailHeader.qml
Comment threadsrc/gui/search/UnifiedSearchFilterBar.qml
Comment threadsrc/gui/search/UnifiedSearchPeopleDelegate.qml
Relloand 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
@github-actions

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

Copy link
Copy Markdown

Quality Gate FailedQuality 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

designDesign, UI, UX, etc.

Projects

Status: NC35

Development

Successfully merging this pull request may close these issues.

6 participants

@Rello@kra-mo@mgallien@CarlSchwan@claucambra
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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

@RelloRello 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

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

Copy link
Copy Markdown
CollaboratorAuthor

@kra-mo as discussed

@kra-mokra-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

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

Copy link
Copy Markdown
CollaboratorAuthor

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

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

Copy link
Copy Markdown
CollaboratorAuthor

@kra-mo should be fine now

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

@Rello
Rello marked this pull request as ready for review August 22, 2026 14:13

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
@Rello
Relloforce-pushed the feature/newSearch branch 4 times, most recently from 860dcd2 to 7920816CompareAugust 22, 2026 18:22

@kra-mokra-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

Copy link
Copy Markdown
CollaboratorAuthor

@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

Copy link
Copy Markdown
Member

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

image

@Rello

Copy link
Copy Markdown
CollaboratorAuthor

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-mokra-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-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp
@Rello

Copy link
Copy Markdown
CollaboratorAuthor

@copilot resolve the merge conflicts in this pull request

CopilotAI 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/wizard/qml/WizardMenuItem.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/activity/qml/ActivityItem.qml Outdated
Comment threadsrc/gui/activity/qml/ActivityList.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.cpp
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardChipButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardMenuItem.qml Outdated
Comment threadsrc/gui/systray.cpp Outdated
@Rello
Relloforce-pushed the feature/newSearch branch 2 times, most recently from 8fbc4d6 to 717974cCompareAugust 29, 2026 10:46

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/UnifiedSearchResultDelegate.qml Outdated

@claucambraclaucambra 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 threadsrc/gui/search/UnifiedSearchFilterBar.qml Outdated
Comment threadsrc/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 threadsrc/gui/search/UnifiedSearchPeoplePopup.qml
Comment threadsrc/gui/search/UnifiedSearchPeoplePopup.qml Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/UnifiedSearchPeoplePopup.qml

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/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 threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchPeoplePopup.qml
Comment threadsrc/gui/search/unifiedsearchresult.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/UnifiedSearchDetailHeader.qml
Comment threadsrc/gui/search/UnifiedSearchFilterBar.qml
Comment threadsrc/gui/search/UnifiedSearchPeopleDelegate.qml
Relloand 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
@github-actions

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

Copy link
Copy Markdown

Quality Gate FailedQuality 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

designDesign, UI, UX, etc.

Projects

Status: NC35

Development

Successfully merging this pull request may close these issues.

6 participants

@Rello@kra-mo@mgallien@CarlSchwan@claucambra
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
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

@RelloRello 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

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

Copy link
Copy Markdown
CollaboratorAuthor

@kra-mo as discussed

@kra-mokra-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

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

Copy link
Copy Markdown
CollaboratorAuthor

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

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

Copy link
Copy Markdown
CollaboratorAuthor

@kra-mo should be fine now

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

@Rello
Rello marked this pull request as ready for review August 22, 2026 14:13

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
@Rello
Relloforce-pushed the feature/newSearch branch 4 times, most recently from 860dcd2 to 7920816CompareAugust 22, 2026 18:22

@kra-mokra-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

Copy link
Copy Markdown
CollaboratorAuthor

@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

Copy link
Copy Markdown
Member

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

image

@Rello

Copy link
Copy Markdown
CollaboratorAuthor

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-mokra-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-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp
@Rello

Copy link
Copy Markdown
CollaboratorAuthor

@copilot resolve the merge conflicts in this pull request

CopilotAI 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/wizard/qml/WizardMenuItem.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/activity/qml/ActivityItem.qml Outdated
Comment threadsrc/gui/activity/qml/ActivityList.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/SearchWindow.qml Outdated
Comment threadsrc/gui/search/unifiedsearchpeoplemodel.cpp
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardChipButton.qml Outdated
Comment threadsrc/gui/wizard/qml/WizardMenuItem.qml Outdated
Comment threadsrc/gui/systray.cpp Outdated
@Rello
Relloforce-pushed the feature/newSearch branch 2 times, most recently from 8fbc4d6 to 717974cCompareAugust 29, 2026 10:46

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchpeoplemodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/UnifiedSearchResultDelegate.qml Outdated

@claucambraclaucambra 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 threadsrc/gui/search/UnifiedSearchFilterBar.qml Outdated
Comment threadsrc/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 threadsrc/gui/search/UnifiedSearchPeoplePopup.qml
Comment threadsrc/gui/search/UnifiedSearchPeoplePopup.qml Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/UnifiedSearchPeoplePopup.qml

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/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 threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchInputContainer.qml Outdated
Comment threadsrc/gui/search/UnifiedSearchPeoplePopup.qml
Comment threadsrc/gui/search/unifiedsearchresult.h Outdated
Comment threadsrc/gui/search/unifiedsearchresultslistmodel.cpp
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/SearchWindow.qml
Comment threadsrc/gui/search/UnifiedSearchDetailHeader.qml
Comment threadsrc/gui/search/UnifiedSearchFilterBar.qml
Comment threadsrc/gui/search/UnifiedSearchPeopleDelegate.qml
Relloand 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
@github-actions

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

Copy link
Copy Markdown

Quality Gate FailedQuality 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

designDesign, UI, UX, etc.

Projects

Status: NC35

Development

Successfully merging this pull request may close these issues.

6 participants

@Rello@kra-mo@mgallien@CarlSchwan@claucambra