diff --git a/libdiscover/Category/Category.h b/libdiscover/Category/Category.h --- a/libdiscover/Category/Category.h +++ b/libdiscover/Category/Category.h @@ -44,7 +44,7 @@ { Q_OBJECT public: - Q_PROPERTY(QString name READ name CONSTANT) + Q_PROPERTY(QString name READ name NOTIFY nameChanged) Q_PROPERTY(QString icon READ icon CONSTANT) Q_PROPERTY(QObject* parent READ parent CONSTANT) Q_PROPERTY(QUrl decoration READ decoration CONSTANT) @@ -55,5 +55,8 @@ ~Category() override; QString name() const; + // You should never attempt to change the name of anything that is not a leaf category + // as the results could be potentially detremental to the function of the category filters + void setName(const QString& name); QString icon() const; QVector > andFilters() const; @@ -78,6 +82,7 @@ Q_SIGNALS: void subCategoriesChanged(); + void nameChanged(); private: QString m_name; diff --git a/libdiscover/Category/Category.cpp b/libdiscover/Category/Category.cpp --- a/libdiscover/Category/Category.cpp +++ b/libdiscover/Category/Category.cpp @@ -124,6 +124,12 @@ return m_name; } +void Category::setName(const QString& name) +{ + m_name = name; + Q_EMIT nameChanged(); +} + QString Category::icon() const { return m_iconString; diff --git a/libdiscover/backends/KNSBackend/KNSBackend.cpp b/libdiscover/backends/KNSBackend/KNSBackend.cpp --- a/libdiscover/backends/KNSBackend/KNSBackend.cpp +++ b/libdiscover/backends/KNSBackend/KNSBackend.cpp @@ -115,15 +115,6 @@ setFetching(true); - m_engine = new KNSCore::Engine(this); - connect(m_engine, &KNSCore::Engine::signalErrorCode, this, &KNSBackend::signalErrorCode); - connect(m_engine, &KNSCore::Engine::signalEntriesLoaded, this, &KNSBackend::receivedEntries, Qt::QueuedConnection); - connect(m_engine, &KNSCore::Engine::signalEntryChanged, this, &KNSBackend::statusChanged, Qt::QueuedConnection); - connect(m_engine, &KNSCore::Engine::signalEntryDetailsLoaded, this, &KNSBackend::statusChanged); - connect(m_engine, &KNSCore::Engine::signalProvidersLoaded, this, &KNSBackend::fetchInstalled); - m_engine->setPageSize(100); - m_engine->init(m_name); - // This ensures we have something to track when checking after the initialization timeout connect(this, &KNSBackend::initialized, this, [this](){ m_initialized = true; }); // If we have not initialized in 60 seconds, consider this KNS backend invalid @@ -151,6 +142,26 @@ for(const auto &cat: cats) categories << new Category(cat, {}, { {CategoryFilter, cat } }, backendName, {}, {}, true); } + + m_engine = new KNSCore::Engine(this); + connect(m_engine, &KNSCore::Engine::signalErrorCode, this, &KNSBackend::signalErrorCode); + connect(m_engine, &KNSCore::Engine::signalEntriesLoaded, this, &KNSBackend::receivedEntries, Qt::QueuedConnection); + connect(m_engine, &KNSCore::Engine::signalEntryChanged, this, &KNSBackend::statusChanged, Qt::QueuedConnection); + connect(m_engine, &KNSCore::Engine::signalEntryDetailsLoaded, this, &KNSBackend::statusChanged); + connect(m_engine, &KNSCore::Engine::signalProvidersLoaded, this, &KNSBackend::fetchInstalled); + connect(m_engine, &KNSCore::Engine::signalCategoriesMetadataLoded, this, [categories](const QList< KNSCore::Provider::CategoryMetadata>& categoryMetadatas){ + for (const KNSCore::Provider::CategoryMetadata& category : categoryMetadatas) { + for (Category* cat : categories) { + if (cat->orFilters().count() > 0 && cat->orFilters().first().second == category.name) { + cat->setName(category.displayName); + break; + } + } + } + }); + m_engine->setPageSize(100); + m_engine->init(m_name); + static const QString knsrcApplications = QLatin1String("storekdeapps.knsrc"); if(knsrcApplications == fileName) { @@ -245,7 +257,16 @@ { KNSResource* r = static_cast(m_resourcesByName.value(entry.uniqueId())); if (!r) { - r = new KNSResource(entry, m_categories + QStringList{entry.category()}, this); + QStringList categories{name(), m_rootCategories.first()->name()}; + const auto cats = m_engine->categoriesMetadata(); + const int catIndex = kIndexOf(cats, [&entry](const KNSCore::Provider::CategoryMetadata& cat){ return entry.category() == cat.id; }); + if (catIndex > -1) { + categories << cats.at(catIndex).name; + } + if(m_hasApplications) { + categories << QLatin1String("Application"); + } + r = new KNSResource(entry, categories, this); m_resourcesByName.insert(entry.uniqueId(), r); } else { r->setEntry(entry);