summaryrefslogtreecommitdiff
path: root/plugin/src
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2026-03-12 22:08:43 +1100
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2026-03-12 22:08:43 +1100
commitca06d13d271d7a6ae6e1becb0f094c76dd790c56 (patch)
treeecf8fff6d3f04d6cdfd42a21764d89cbd752c656 /plugin/src
parentaudio: replace reactive reduce with imperative node categorisation (diff)
downloadcaelestia-shell-ca06d13d271d7a6ae6e1becb0f094c76dd790c56.tar.gz
caelestia-shell-ca06d13d271d7a6ae6e1becb0f094c76dd790c56.tar.bz2
caelestia-shell-ca06d13d271d7a6ae6e1becb0f094c76dd790c56.zip
appdb: cache favourite status during sort and avoid double sort
Diffstat (limited to 'plugin/src')
-rw-r--r--plugin/src/Caelestia/appdb.cpp29
1 files changed, 18 insertions, 11 deletions
diff --git a/plugin/src/Caelestia/appdb.cpp b/plugin/src/Caelestia/appdb.cpp
index b074cf4..6952c0e 100644
--- a/plugin/src/Caelestia/appdb.cpp
+++ b/plugin/src/Caelestia/appdb.cpp
@@ -212,10 +212,9 @@ void AppDb::incrementFrequency(const QString& id) {
auto* app = m_apps.value(id);
if (app) {
const auto before = getSortedApps();
-
app->incrementFrequency();
-
- if (before != getSortedApps()) {
+ getSortedApps();
+ if (before != m_sortedApps) {
emit appsChanged();
}
} else {
@@ -225,15 +224,22 @@ void AppDb::incrementFrequency(const QString& id) {
QList<AppEntry*>& AppDb::getSortedApps() const {
m_sortedApps = m_apps.values();
- std::sort(m_sortedApps.begin(), m_sortedApps.end(), [this](AppEntry* a, AppEntry* b) {
- bool aIsFav = isFavourite(a);
- bool bIsFav = isFavourite(b);
- if (aIsFav != bIsFav) {
+
+ // Pre-compute favourite status to avoid repeated regex matching during sort
+ QSet<QString> favSet;
+ favSet.reserve(m_sortedApps.size());
+ for (const auto* app : std::as_const(m_sortedApps)) {
+ if (isFavourite(app))
+ favSet.insert(app->id());
+ }
+
+ std::sort(m_sortedApps.begin(), m_sortedApps.end(), [&favSet](AppEntry* a, AppEntry* b) {
+ const bool aIsFav = favSet.contains(a->id());
+ const bool bIsFav = favSet.contains(b->id());
+ if (aIsFav != bIsFav)
return aIsFav;
- }
- if (a->frequency() != b->frequency()) {
+ if (a->frequency() != b->frequency())
return a->frequency() > b->frequency();
- }
return a->name().localeAwareCompare(b->name()) < 0;
});
return m_sortedApps;
@@ -269,7 +275,8 @@ void AppDb::updateAppFrequencies() {
app->setFrequency(getFrequency(app->id()));
}
- if (before != getSortedApps()) {
+ getSortedApps();
+ if (before != m_sortedApps) {
emit appsChanged();
}
}