internal: use QQmlListProperty

Fix lsp errors
This commit is contained in:
2 * r + 2 * t 2025-10-14 16:00:17 +11:00
parent 73aa3e32de
commit 27953a89d1
9 changed files with 54 additions and 40 deletions

View file

@ -85,8 +85,8 @@ bool HyprKeyboard::updateLastIpcObject(QJsonObject object) {
HyprDevices::HyprDevices(QObject* parent) HyprDevices::HyprDevices(QObject* parent)
: QObject(parent) {} : QObject(parent) {}
QList<HyprKeyboard*> HyprDevices::keyboards() const { QQmlListProperty<HyprKeyboard> HyprDevices::keyboards() {
return m_keyboards; return QQmlListProperty<HyprKeyboard>(this, &m_keyboards);
} }
bool HyprDevices::updateLastIpcObject(QJsonObject object) { bool HyprDevices::updateLastIpcObject(QJsonObject object) {

View file

@ -3,6 +3,7 @@
#include <qjsonobject.h> #include <qjsonobject.h>
#include <qobject.h> #include <qobject.h>
#include <qqmlintegration.h> #include <qqmlintegration.h>
#include <qqmllist.h>
namespace caelestia::internal::hypr { namespace caelestia::internal::hypr {
@ -53,12 +54,13 @@ class HyprDevices : public QObject {
QML_ELEMENT QML_ELEMENT
QML_UNCREATABLE("HyprDevices instances can only be retrieved from a HyprExtras") QML_UNCREATABLE("HyprDevices instances can only be retrieved from a HyprExtras")
Q_PROPERTY(QList<HyprKeyboard*> keyboards READ keyboards NOTIFY keyboardsChanged) Q_PROPERTY(
QQmlListProperty<caelestia::internal::hypr::HyprKeyboard> keyboards READ keyboards NOTIFY keyboardsChanged)
public: public:
explicit HyprDevices(QObject* parent = nullptr); explicit HyprDevices(QObject* parent = nullptr);
[[nodiscard]] QList<HyprKeyboard*> keyboards() const; [[nodiscard]] QQmlListProperty<HyprKeyboard> keyboards();
bool updateLastIpcObject(QJsonObject object); bool updateLastIpcObject(QJsonObject object);

View file

@ -12,7 +12,7 @@ class HyprExtras : public QObject {
QML_ELEMENT QML_ELEMENT
Q_PROPERTY(QVariantHash options READ options NOTIFY optionsChanged) Q_PROPERTY(QVariantHash options READ options NOTIFY optionsChanged)
Q_PROPERTY(HyprDevices* devices READ devices CONSTANT) Q_PROPERTY(caelestia::internal::hypr::HyprDevices* devices READ devices CONSTANT)
public: public:
explicit HyprExtras(QObject* parent = nullptr); explicit HyprExtras(QObject* parent = nullptr);

View file

@ -211,8 +211,8 @@ void FileSystemModel::setNameFilters(const QStringList& nameFilters) {
update(); update();
} }
QList<FileSystemEntry*> FileSystemModel::entries() const { QQmlListProperty<FileSystemEntry> FileSystemModel::entries() {
return m_entries; return QQmlListProperty<FileSystemEntry>(this, &m_entries);
} }
void FileSystemModel::watchDirIfRecursive(const QString& path) { void FileSystemModel::watchDirIfRecursive(const QString& path) {

View file

@ -8,6 +8,7 @@
#include <qmimedatabase.h> #include <qmimedatabase.h>
#include <qobject.h> #include <qobject.h>
#include <qqmlintegration.h> #include <qqmlintegration.h>
#include <qqmllist.h>
namespace caelestia::models { namespace caelestia::models {
@ -71,7 +72,7 @@ class FileSystemModel : public QAbstractListModel {
Q_PROPERTY(Filter filter READ filter WRITE setFilter NOTIFY filterChanged) Q_PROPERTY(Filter filter READ filter WRITE setFilter NOTIFY filterChanged)
Q_PROPERTY(QStringList nameFilters READ nameFilters WRITE setNameFilters NOTIFY nameFiltersChanged) Q_PROPERTY(QStringList nameFilters READ nameFilters WRITE setNameFilters NOTIFY nameFiltersChanged)
Q_PROPERTY(QList<FileSystemEntry*> entries READ entries NOTIFY entriesChanged) Q_PROPERTY(QQmlListProperty<caelestia::models::FileSystemEntry> entries READ entries NOTIFY entriesChanged)
public: public:
enum Filter { enum Filter {
@ -109,7 +110,7 @@ public:
[[nodiscard]] QStringList nameFilters() const; [[nodiscard]] QStringList nameFilters() const;
void setNameFilters(const QStringList& nameFilters); void setNameFilters(const QStringList& nameFilters);
[[nodiscard]] QList<FileSystemEntry*> entries() const; [[nodiscard]] QQmlListProperty<FileSystemEntry> entries();
signals: signals:
void pathChanged(); void pathChanged();

View file

@ -147,11 +147,11 @@ void AppDb::setPath(const QString& path) {
updateAppFrequencies(); updateAppFrequencies();
} }
QList<QObject*> AppDb::entries() const { QObjectList AppDb::entries() const {
return m_entries; return m_entries;
} }
void AppDb::setEntries(const QList<QObject*>& entries) { void AppDb::setEntries(const QObjectList& entries) {
if (m_entries == entries) { if (m_entries == entries) {
return; return;
} }
@ -162,15 +162,8 @@ void AppDb::setEntries(const QList<QObject*>& entries) {
m_timer->start(); m_timer->start();
} }
QList<AppEntry*> AppDb::apps() const { QQmlListProperty<AppEntry> AppDb::apps() {
auto apps = m_apps.values(); return QQmlListProperty<AppEntry>(this, &getSortedApps());
std::sort(apps.begin(), apps.end(), [](AppEntry* a, AppEntry* b) {
if (a->frequency() != b->frequency()) {
return a->frequency() > b->frequency();
}
return a->name().localeAwareCompare(b->name()) < 0;
});
return apps;
} }
void AppDb::incrementFrequency(const QString& id) { void AppDb::incrementFrequency(const QString& id) {
@ -183,22 +176,30 @@ void AppDb::incrementFrequency(const QString& id) {
query.bindValue(":id", id); query.bindValue(":id", id);
query.exec(); query.exec();
for (auto* app : std::as_const(m_apps)) { auto* app = m_apps.value(id);
if (app->id() == id) { if (app) {
const auto before = apps(); const auto before = getSortedApps();
app->incrementFrequency(); app->incrementFrequency();
if (before != apps()) { if (before != getSortedApps()) {
emit appsChanged(); emit appsChanged();
} }
} else {
return;
}
}
qWarning() << "AppDb::incrementFrequency: could not find app with id" << id; qWarning() << "AppDb::incrementFrequency: could not find app with id" << id;
} }
}
QList<AppEntry*>& AppDb::getSortedApps() const {
m_sortedApps = m_apps.values();
std::sort(m_sortedApps.begin(), m_sortedApps.end(), [](AppEntry* a, AppEntry* b) {
if (a->frequency() != b->frequency()) {
return a->frequency() > b->frequency();
}
return a->name().localeAwareCompare(b->name()) < 0;
});
return m_sortedApps;
}
quint32 AppDb::getFrequency(const QString& id) const { quint32 AppDb::getFrequency(const QString& id) const {
auto db = QSqlDatabase::database(m_uuid); auto db = QSqlDatabase::database(m_uuid);
@ -215,9 +216,15 @@ quint32 AppDb::getFrequency(const QString& id) const {
} }
void AppDb::updateAppFrequencies() { void AppDb::updateAppFrequencies() {
const auto before = getSortedApps();
for (auto* app : std::as_const(m_apps)) { for (auto* app : std::as_const(m_apps)) {
app->setFrequency(getFrequency(app->id())); app->setFrequency(getFrequency(app->id()));
} }
if (before != getSortedApps()) {
emit appsChanged();
}
} }
void AppDb::updateApps() { void AppDb::updateApps() {

View file

@ -3,6 +3,7 @@
#include <qhash.h> #include <qhash.h>
#include <qobject.h> #include <qobject.h>
#include <qqmlintegration.h> #include <qqmlintegration.h>
#include <qqmllist.h>
#include <qtimer.h> #include <qtimer.h>
namespace caelestia { namespace caelestia {
@ -64,8 +65,8 @@ class AppDb : public QObject {
Q_PROPERTY(QString uuid READ uuid CONSTANT) Q_PROPERTY(QString uuid READ uuid CONSTANT)
Q_PROPERTY(QString path READ path WRITE setPath NOTIFY pathChanged REQUIRED) Q_PROPERTY(QString path READ path WRITE setPath NOTIFY pathChanged REQUIRED)
Q_PROPERTY(QList<QObject*> entries READ entries WRITE setEntries NOTIFY entriesChanged REQUIRED) Q_PROPERTY(QObjectList entries READ entries WRITE setEntries NOTIFY entriesChanged REQUIRED)
Q_PROPERTY(QList<AppEntry*> apps READ apps NOTIFY appsChanged) Q_PROPERTY(QQmlListProperty<caelestia::AppEntry> apps READ apps NOTIFY appsChanged)
public: public:
explicit AppDb(QObject* parent = nullptr); explicit AppDb(QObject* parent = nullptr);
@ -75,10 +76,10 @@ public:
[[nodiscard]] QString path() const; [[nodiscard]] QString path() const;
void setPath(const QString& path); void setPath(const QString& path);
[[nodiscard]] QList<QObject*> entries() const; [[nodiscard]] QObjectList entries() const;
void setEntries(const QList<QObject*>& entries); void setEntries(const QObjectList& entries);
[[nodiscard]] QList<AppEntry*> apps() const; [[nodiscard]] QQmlListProperty<AppEntry> apps();
Q_INVOKABLE void incrementFrequency(const QString& id); Q_INVOKABLE void incrementFrequency(const QString& id);
@ -92,9 +93,11 @@ private:
const QString m_uuid; const QString m_uuid;
QString m_path; QString m_path;
QList<QObject*> m_entries; QObjectList m_entries;
QHash<QString, AppEntry*> m_apps; QHash<QString, AppEntry*> m_apps;
mutable QList<AppEntry*> m_sortedApps;
QList<AppEntry*>& getSortedApps() const;
quint32 getFrequency(const QString& id) const; quint32 getFrequency(const QString& id) const;
void updateAppFrequencies(); void updateAppFrequencies();
void updateApps(); void updateApps();

View file

@ -97,8 +97,8 @@ void Toast::unlock(QObject* sender) {
Toaster::Toaster(QObject* parent) Toaster::Toaster(QObject* parent)
: QObject(parent) {} : QObject(parent) {}
QList<Toast*> Toaster::toasts() const { QQmlListProperty<Toast> Toaster::toasts() {
return m_toasts; return QQmlListProperty<Toast>(this, &m_toasts);
} }
void Toaster::toast(const QString& title, const QString& message, const QString& icon, Toast::Type type, int timeout) { void Toaster::toast(const QString& title, const QString& message, const QString& icon, Toast::Type type, int timeout) {

View file

@ -2,6 +2,7 @@
#include <qobject.h> #include <qobject.h>
#include <qqmlintegration.h> #include <qqmlintegration.h>
#include <qqmllist.h>
#include <qset.h> #include <qset.h>
namespace caelestia { namespace caelestia {
@ -61,12 +62,12 @@ class Toaster : public QObject {
QML_ELEMENT QML_ELEMENT
QML_SINGLETON QML_SINGLETON
Q_PROPERTY(QList<Toast*> toasts READ toasts NOTIFY toastsChanged) Q_PROPERTY(QQmlListProperty<caelestia::Toast> toasts READ toasts NOTIFY toastsChanged)
public: public:
explicit Toaster(QObject* parent = nullptr); explicit Toaster(QObject* parent = nullptr);
[[nodiscard]] QList<Toast*> toasts() const; [[nodiscard]] QQmlListProperty<Toast> toasts();
Q_INVOKABLE void toast(const QString& title, const QString& message, const QString& icon = QString(), Q_INVOKABLE void toast(const QString& title, const QString& message, const QString& icon = QString(),
caelestia::Toast::Type type = Toast::Type::Info, int timeout = 5000); caelestia::Toast::Type type = Toast::Type::Info, int timeout = 5000);