Changeset View
Changeset View
Standalone View
Standalone View
src/core/engine.cpp
Show First 20 Lines • Show All 54 Lines • ▼ Show 20 Line(s) | |||||
55 | using namespace KNSCore; | 55 | using namespace KNSCore; | ||
56 | 56 | | |||
57 | typedef QHash<QString, XmlLoader*> EngineProviderLoaderHash; | 57 | typedef QHash<QString, XmlLoader*> EngineProviderLoaderHash; | ||
58 | Q_GLOBAL_STATIC(QThreadStorage<EngineProviderLoaderHash>, s_engineProviderLoaders) | 58 | Q_GLOBAL_STATIC(QThreadStorage<EngineProviderLoaderHash>, s_engineProviderLoaders) | ||
59 | 59 | | |||
60 | class EnginePrivate { | 60 | class EnginePrivate { | ||
61 | public: | 61 | public: | ||
62 | QList<Provider::CategoryMetadata> categoriesMetadata; | 62 | QList<Provider::CategoryMetadata> categoriesMetadata; | ||
63 | Attica::ProviderManager *m_atticaProviderManager = nullptr; | ||||
63 | }; | 64 | }; | ||
64 | 65 | | |||
65 | // BCI: Add a real d-pointer | | |||
66 | typedef QHash<const Engine *, EnginePrivate *> EnginePrivateHash; | | |||
67 | Q_GLOBAL_STATIC(EnginePrivateHash, d_func) | | |||
68 | static EnginePrivate *d(const Engine* engine) | | |||
69 | { | | |||
70 | EnginePrivate* ret = d_func()->value(engine); | | |||
71 | if (!ret) { | | |||
72 | ret = new EnginePrivate; | | |||
73 | d_func()->insert(engine, ret); | | |||
74 | } | | |||
75 | return ret; | | |||
76 | } | | |||
77 | static void delete_d(const Engine* engine) | | |||
78 | { | | |||
79 | if (auto d = d_func()) { | | |||
80 | delete d->take(engine); | | |||
81 | } | | |||
82 | } | | |||
83 | | ||||
84 | Engine::Engine(QObject *parent) | 66 | Engine::Engine(QObject *parent) | ||
85 | : QObject(parent) | 67 | : QObject(parent) | ||
86 | , m_installation(new Installation) | 68 | , m_installation(new Installation) | ||
87 | , m_cache() | 69 | , m_cache() | ||
88 | , m_searchTimer(new QTimer) | 70 | , m_searchTimer(new QTimer) | ||
89 | , m_atticaProviderManager(nullptr) | 71 | , d(new EnginePrivate) | ||
90 | , m_currentPage(-1) | 72 | , m_currentPage(-1) | ||
91 | , m_pageSize(20) | 73 | , m_pageSize(20) | ||
92 | , m_numDataJobs(0) | 74 | , m_numDataJobs(0) | ||
93 | , m_numPictureJobs(0) | 75 | , m_numPictureJobs(0) | ||
94 | , m_numInstallJobs(0) | 76 | , m_numInstallJobs(0) | ||
95 | , m_initialized(false) | 77 | , m_initialized(false) | ||
96 | { | 78 | { | ||
97 | m_searchTimer->setSingleShot(true); | 79 | m_searchTimer->setSingleShot(true); | ||
98 | m_searchTimer->setInterval(1000); | 80 | m_searchTimer->setInterval(1000); | ||
99 | connect(m_searchTimer, &QTimer::timeout, this, &Engine::slotSearchTimerExpired); | 81 | connect(m_searchTimer, &QTimer::timeout, this, &Engine::slotSearchTimerExpired); | ||
100 | connect(m_installation, &Installation::signalInstallationFinished, this, &Engine::slotInstallationFinished); | 82 | connect(m_installation, &Installation::signalInstallationFinished, this, &Engine::slotInstallationFinished); | ||
101 | connect(m_installation, &Installation::signalInstallationFailed, this, &Engine::slotInstallationFailed); | 83 | connect(m_installation, &Installation::signalInstallationFailed, this, &Engine::slotInstallationFailed); | ||
102 | } | 84 | } | ||
103 | 85 | | |||
104 | Engine::~Engine() | 86 | Engine::~Engine() | ||
105 | { | 87 | { | ||
106 | if (m_cache) { | 88 | if (m_cache) { | ||
107 | m_cache->writeRegistry(); | 89 | m_cache->writeRegistry(); | ||
108 | } | 90 | } | ||
109 | delete m_atticaProviderManager; | 91 | delete d->m_atticaProviderManager; | ||
110 | delete m_searchTimer; | 92 | delete m_searchTimer; | ||
111 | delete m_installation; | 93 | delete m_installation; | ||
112 | delete_d(this); | 94 | delete d; | ||
113 | } | 95 | } | ||
114 | 96 | | |||
115 | bool Engine::init(const QString &configfile) | 97 | bool Engine::init(const QString &configfile) | ||
116 | { | 98 | { | ||
117 | qCDebug(KNEWSTUFFCORE) << "Initializing KNSCore::Engine from '" << configfile << "'"; | 99 | qCDebug(KNEWSTUFFCORE) << "Initializing KNSCore::Engine from '" << configfile << "'"; | ||
118 | 100 | | |||
119 | emit signalBusy(i18n("Initializing")); | 101 | emit signalBusy(i18n("Initializing")); | ||
120 | 102 | | |||
▲ Show 20 Lines • Show All 50 Lines • ▼ Show 20 Line(s) | |||||
171 | 153 | | |||
172 | QStringList Engine::categoriesFilter() const | 154 | QStringList Engine::categoriesFilter() const | ||
173 | { | 155 | { | ||
174 | return m_currentRequest.categories; | 156 | return m_currentRequest.categories; | ||
175 | } | 157 | } | ||
176 | 158 | | |||
177 | QList<Provider::CategoryMetadata> Engine::categoriesMetadata() | 159 | QList<Provider::CategoryMetadata> Engine::categoriesMetadata() | ||
178 | { | 160 | { | ||
179 | return d(this)->categoriesMetadata; | 161 | return d->categoriesMetadata; | ||
180 | } | 162 | } | ||
181 | 163 | | |||
182 | void Engine::loadProviders() | 164 | void Engine::loadProviders() | ||
183 | { | 165 | { | ||
184 | if (m_providerFileUrl.isEmpty()) { | 166 | if (m_providerFileUrl.isEmpty()) { | ||
185 | // it would be nicer to move the attica stuff into its own class | 167 | // it would be nicer to move the attica stuff into its own class | ||
186 | qCDebug(KNEWSTUFFCORE) << "Using OCS default providers"; | 168 | qCDebug(KNEWSTUFFCORE) << "Using OCS default providers"; | ||
187 | delete m_atticaProviderManager; | 169 | delete d->m_atticaProviderManager; | ||
188 | m_atticaProviderManager = new Attica::ProviderManager; | 170 | d->m_atticaProviderManager = new Attica::ProviderManager; | ||
189 | connect(m_atticaProviderManager, &Attica::ProviderManager::providerAdded, this, &Engine::atticaProviderLoaded); | 171 | connect(d->m_atticaProviderManager, &Attica::ProviderManager::providerAdded, this, &Engine::atticaProviderLoaded); | ||
190 | m_atticaProviderManager->loadDefaultProviders(); | 172 | d->m_atticaProviderManager->loadDefaultProviders(); | ||
191 | } else { | 173 | } else { | ||
192 | qCDebug(KNEWSTUFFCORE) << "loading providers from " << m_providerFileUrl; | 174 | qCDebug(KNEWSTUFFCORE) << "loading providers from " << m_providerFileUrl; | ||
193 | emit signalBusy(i18n("Loading provider information")); | 175 | emit signalBusy(i18n("Loading provider information")); | ||
194 | 176 | | |||
195 | XmlLoader *loader = s_engineProviderLoaders()->localData().value(m_providerFileUrl); | 177 | XmlLoader *loader = s_engineProviderLoaders()->localData().value(m_providerFileUrl); | ||
196 | if (!loader) { | 178 | if (!loader) { | ||
197 | qCDebug(KNEWSTUFFCORE) << "No xml loader for this url yet, so create one and temporarily store that" << m_providerFileUrl; | 179 | qCDebug(KNEWSTUFFCORE) << "No xml loader for this url yet, so create one and temporarily store that" << m_providerFileUrl; | ||
198 | loader = new XmlLoader(this); | 180 | loader = new XmlLoader(this); | ||
Show All 28 Lines | 192 | { | |||
227 | while (!n.isNull()) { | 209 | while (!n.isNull()) { | ||
228 | qCDebug(KNEWSTUFFCORE) << "Provider attributes: " << n.attribute(QStringLiteral("type")); | 210 | qCDebug(KNEWSTUFFCORE) << "Provider attributes: " << n.attribute(QStringLiteral("type")); | ||
229 | 211 | | |||
230 | QSharedPointer<KNSCore::Provider> provider; | 212 | QSharedPointer<KNSCore::Provider> provider; | ||
231 | if (isAtticaProviderFile || n.attribute(QStringLiteral("type")).toLower() == QLatin1String("rest")) { | 213 | if (isAtticaProviderFile || n.attribute(QStringLiteral("type")).toLower() == QLatin1String("rest")) { | ||
232 | provider = QSharedPointer<KNSCore::Provider> (new AtticaProvider(m_categories)); | 214 | provider = QSharedPointer<KNSCore::Provider> (new AtticaProvider(m_categories)); | ||
233 | connect(provider.data(), &Provider::categoriesMetadataLoded, | 215 | connect(provider.data(), &Provider::categoriesMetadataLoded, | ||
234 | this, [this](const QList<Provider::CategoryMetadata> &categories){ | 216 | this, [this](const QList<Provider::CategoryMetadata> &categories){ | ||
235 | d(this)->categoriesMetadata = categories; | 217 | d->categoriesMetadata = categories; | ||
236 | emit signalCategoriesMetadataLoded(categories); | 218 | emit signalCategoriesMetadataLoded(categories); | ||
237 | }); | 219 | }); | ||
238 | } else { | 220 | } else { | ||
239 | provider = QSharedPointer<KNSCore::Provider> (new StaticXmlProvider); | 221 | provider = QSharedPointer<KNSCore::Provider> (new StaticXmlProvider); | ||
240 | } | 222 | } | ||
241 | 223 | | |||
242 | if (provider->setProviderXML(n)) { | 224 | if (provider->setProviderXML(n)) { | ||
243 | addProvider(provider); | 225 | addProvider(provider); | ||
Show All 11 Lines | 235 | { | |||
255 | if (!atticaProvider.hasContentService()) { | 237 | if (!atticaProvider.hasContentService()) { | ||
256 | qCDebug(KNEWSTUFFCORE) << "Found provider: " << atticaProvider.baseUrl() << " but it does not support content"; | 238 | qCDebug(KNEWSTUFFCORE) << "Found provider: " << atticaProvider.baseUrl() << " but it does not support content"; | ||
257 | return; | 239 | return; | ||
258 | } | 240 | } | ||
259 | QSharedPointer<KNSCore::Provider> provider = | 241 | QSharedPointer<KNSCore::Provider> provider = | ||
260 | QSharedPointer<KNSCore::Provider> (new AtticaProvider(atticaProvider, m_categories)); | 242 | QSharedPointer<KNSCore::Provider> (new AtticaProvider(atticaProvider, m_categories)); | ||
261 | connect(provider.data(), &Provider::categoriesMetadataLoded, | 243 | connect(provider.data(), &Provider::categoriesMetadataLoded, | ||
262 | this, [this](const QList<Provider::CategoryMetadata> &categories){ | 244 | this, [this](const QList<Provider::CategoryMetadata> &categories){ | ||
263 | d(this)->categoriesMetadata = categories; | 245 | d->categoriesMetadata = categories; | ||
264 | emit signalCategoriesMetadataLoded(categories); | 246 | emit signalCategoriesMetadataLoded(categories); | ||
265 | }); | 247 | }); | ||
266 | addProvider(provider); | 248 | addProvider(provider); | ||
267 | } | 249 | } | ||
268 | 250 | | |||
269 | void Engine::addProvider(QSharedPointer<KNSCore::Provider> provider) | 251 | void Engine::addProvider(QSharedPointer<KNSCore::Provider> provider) | ||
270 | { | 252 | { | ||
271 | qCDebug(KNEWSTUFFCORE) << "Engine addProvider called with provider with id " << provider->id(); | 253 | qCDebug(KNEWSTUFFCORE) << "Engine addProvider called with provider with id " << provider->id(); | ||
▲ Show 20 Lines • Show All 417 Lines • Show Last 20 Lines |