Changeset View
Changeset View
Standalone View
Standalone View
libdiscover/backends/KNSBackend/KNSBackend.cpp
Show First 20 Lines • Show All 109 Lines • ▼ Show 20 Line(s) | 99 | { | |||
---|---|---|---|---|---|
110 | m_categories = QStringList{ fileName }; | 110 | m_categories = QStringList{ fileName }; | ||
111 | 111 | | |||
112 | const KConfigGroup group = conf.group("KNewStuff3"); | 112 | const KConfigGroup group = conf.group("KNewStuff3"); | ||
113 | m_extends = group.readEntry("Extends", QStringList()); | 113 | m_extends = group.readEntry("Extends", QStringList()); | ||
114 | m_reviews->setProviderUrl(QUrl(group.readEntry("ProvidersUrl", QString()))); | 114 | m_reviews->setProviderUrl(QUrl(group.readEntry("ProvidersUrl", QString()))); | ||
115 | 115 | | |||
116 | setFetching(true); | 116 | setFetching(true); | ||
117 | 117 | | |||
118 | m_engine = new KNSCore::Engine(this); | | |||
119 | connect(m_engine, &KNSCore::Engine::signalErrorCode, this, &KNSBackend::signalErrorCode); | | |||
120 | connect(m_engine, &KNSCore::Engine::signalEntriesLoaded, this, &KNSBackend::receivedEntries, Qt::QueuedConnection); | | |||
121 | connect(m_engine, &KNSCore::Engine::signalEntryChanged, this, &KNSBackend::statusChanged, Qt::QueuedConnection); | | |||
122 | connect(m_engine, &KNSCore::Engine::signalEntryDetailsLoaded, this, &KNSBackend::statusChanged); | | |||
123 | connect(m_engine, &KNSCore::Engine::signalProvidersLoaded, this, &KNSBackend::fetchInstalled); | | |||
124 | m_engine->setPageSize(100); | | |||
125 | m_engine->init(m_name); | | |||
126 | | ||||
127 | // This ensures we have something to track when checking after the initialization timeout | 118 | // This ensures we have something to track when checking after the initialization timeout | ||
128 | connect(this, &KNSBackend::initialized, this, [this](){ m_initialized = true; }); | 119 | connect(this, &KNSBackend::initialized, this, [this](){ m_initialized = true; }); | ||
129 | // If we have not initialized in 60 seconds, consider this KNS backend invalid | 120 | // If we have not initialized in 60 seconds, consider this KNS backend invalid | ||
130 | QTimer::singleShot(60000, this, [this](){ | 121 | QTimer::singleShot(60000, this, [this](){ | ||
131 | if(!m_initialized) { | 122 | if(!m_initialized) { | ||
132 | markInvalid(i18n("Backend %1 took too long to initialize", m_displayName)); | 123 | markInvalid(i18n("Backend %1 took too long to initialize", m_displayName)); | ||
133 | m_responsePending = false; | 124 | m_responsePending = false; | ||
134 | Q_EMIT searchFinished(); | 125 | Q_EMIT searchFinished(); | ||
Show All 11 Lines | |||||
146 | 137 | | |||
147 | const QStringList cats = group.readEntry<QStringList>("Categories", QStringList{}); | 138 | const QStringList cats = group.readEntry<QStringList>("Categories", QStringList{}); | ||
148 | QVector<Category*> categories; | 139 | QVector<Category*> categories; | ||
149 | if (cats.count() > 1) { | 140 | if (cats.count() > 1) { | ||
150 | m_categories += cats; | 141 | m_categories += cats; | ||
151 | for(const auto &cat: cats) | 142 | for(const auto &cat: cats) | ||
152 | categories << new Category(cat, {}, { {CategoryFilter, cat } }, backendName, {}, {}, true); | 143 | categories << new Category(cat, {}, { {CategoryFilter, cat } }, backendName, {}, {}, true); | ||
153 | } | 144 | } | ||
145 | | ||||
146 | m_engine = new KNSCore::Engine(this); | ||||
147 | connect(m_engine, &KNSCore::Engine::signalErrorCode, this, &KNSBackend::signalErrorCode); | ||||
148 | connect(m_engine, &KNSCore::Engine::signalEntriesLoaded, this, &KNSBackend::receivedEntries, Qt::QueuedConnection); | ||||
149 | connect(m_engine, &KNSCore::Engine::signalEntryChanged, this, &KNSBackend::statusChanged, Qt::QueuedConnection); | ||||
150 | connect(m_engine, &KNSCore::Engine::signalEntryDetailsLoaded, this, &KNSBackend::statusChanged); | ||||
151 | connect(m_engine, &KNSCore::Engine::signalProvidersLoaded, this, &KNSBackend::fetchInstalled); | ||||
152 | connect(m_engine, &KNSCore::Engine::signalCategoriesMetadataLoded, this, [categories](const QList< KNSCore::Provider::CategoryMetadata>& categoryMetadatas){ | ||||
153 | for (const KNSCore::Provider::CategoryMetadata& category : categoryMetadatas) { | ||||
154 | for (Category* cat : categories) { | ||||
155 | if (cat->orFilters().count() > 0 && cat->orFilters().first().second == category.name) { | ||||
156 | cat->setName(category.displayName); | ||||
157 | break; | ||||
158 | } | ||||
159 | } | ||||
160 | } | ||||
161 | }); | ||||
162 | m_engine->setPageSize(100); | ||||
163 | m_engine->init(m_name); | ||||
164 | | ||||
154 | static const QString knsrcApplications = QLatin1String("storekdeapps.knsrc"); | 165 | static const QString knsrcApplications = QLatin1String("storekdeapps.knsrc"); | ||
155 | 166 | | |||
156 | if(knsrcApplications == fileName) { | 167 | if(knsrcApplications == fileName) { | ||
157 | m_hasApplications = true; | 168 | m_hasApplications = true; | ||
158 | auto actualCategory = new Category(m_displayName, QStringLiteral("plasma"), filters, backendName, categories, QUrl(), false); | 169 | auto actualCategory = new Category(m_displayName, QStringLiteral("plasma"), filters, backendName, categories, QUrl(), false); | ||
159 | auto applicationCategory = new Category(i18n("Applications"), QStringLiteral("applications-internet"), filters, backendName, { actualCategory }, QUrl(), false); | 170 | auto applicationCategory = new Category(i18n("Applications"), QStringLiteral("applications-internet"), filters, backendName, { actualCategory }, QUrl(), false); | ||
160 | applicationCategory->setAndFilter({ {CategoryFilter, QLatin1String("Application")} }); | 171 | applicationCategory->setAndFilter({ {CategoryFilter, QLatin1String("Application")} }); | ||
161 | m_categories.append(applicationCategory->name()); | 172 | m_categories.append(applicationCategory->name()); | ||
▲ Show 20 Lines • Show All 79 Lines • ▼ Show 20 Line(s) | |||||
241 | { | 252 | { | ||
242 | return m_isValid; | 253 | return m_isValid; | ||
243 | } | 254 | } | ||
244 | 255 | | |||
245 | KNSResource* KNSBackend::resourceForEntry(const KNSCore::EntryInternal& entry) | 256 | KNSResource* KNSBackend::resourceForEntry(const KNSCore::EntryInternal& entry) | ||
246 | { | 257 | { | ||
247 | KNSResource* r = static_cast<KNSResource*>(m_resourcesByName.value(entry.uniqueId())); | 258 | KNSResource* r = static_cast<KNSResource*>(m_resourcesByName.value(entry.uniqueId())); | ||
248 | if (!r) { | 259 | if (!r) { | ||
249 | r = new KNSResource(entry, m_categories + QStringList{entry.category()}, this); | 260 | QStringList categories{name(), m_rootCategories.first()->name()}; | ||
261 | const auto cats = m_engine->categoriesMetadata(); | ||||
262 | const int catIndex = kIndexOf(cats, [&entry](const KNSCore::Provider::CategoryMetadata& cat){ return entry.category() == cat.id; }); | ||||
263 | if (catIndex > -1) { | ||||
264 | categories << cats.at(catIndex).name; | ||||
265 | } | ||||
266 | if(m_hasApplications) { | ||||
267 | categories << QLatin1String("Application"); | ||||
268 | } | ||||
269 | r = new KNSResource(entry, categories, this); | ||||
250 | m_resourcesByName.insert(entry.uniqueId(), r); | 270 | m_resourcesByName.insert(entry.uniqueId(), r); | ||
251 | } else { | 271 | } else { | ||
252 | r->setEntry(entry); | 272 | r->setEntry(entry); | ||
253 | } | 273 | } | ||
254 | return r; | 274 | return r; | ||
255 | } | 275 | } | ||
256 | 276 | | |||
257 | void KNSBackend::receivedEntries(const KNSCore::EntryInternal::List& entries) | 277 | void KNSBackend::receivedEntries(const KNSCore::EntryInternal::List& entries) | ||
▲ Show 20 Lines • Show All 307 Lines • Show Last 20 Lines |