Git commit d262b645ee0d7fdd32dcab57553a60bfcb32dd36 by Aleix Pol. Committed on 31/05/2016 at 22:04. Pushed by apol into branch 'master'. Make it actually possible to tell providers from the url we were given There's 2 similar concepts in Attica: the ProviderUrl (which is in fact inherited from KNS) and the provider's url. This patch adds some API to be able to tell a provider from the ProviderUrl we have. Differential Revision: https://phabricator.kde.org/D1719 M +17 -8 src/providermanager.cpp M +20 -2 src/providermanager.h http://commits.kde.org/attica/d262b645ee0d7fdd32dcab57553a60bfcb32dd36 diff --git a/src/providermanager.cpp b/src/providermanager.cpp index 168637b..3013662 100644 --- a/src/providermanager.cpp +++ b/src/providermanager.cpp @@ -48,7 +48,7 @@ class ProviderManager::Private public: PlatformDependent *m_internals; QHash m_providers; - QHash > m_providerFiles; + QHash m_providerTargets; QSignalMapper m_downloadMapping; QHash m_downloads; bool m_authenticationSuppressed; @@ -96,7 +96,7 @@ void ProviderManager::setAuthenticationSuppressed(bool su= ppressed) = void ProviderManager::clear() { - d->m_providerFiles.clear(); + d->m_providerTargets.clear(); d->m_providers.clear(); } = @@ -139,7 +139,7 @@ void ProviderManager::addProviderFile(const QUrl &url) qWarning() << "ProviderManager::addProviderFile: could not ope= n provider file: " << url.toString(); return; } - addProviderFromXml(QLatin1String(file.readAll())); + parseProviderFile(QLatin1String(file.readAll()), url); } else { if (!d->m_downloads.contains(url.toString())) { QNetworkReply *reply =3D d->m_internals->get(QNetworkRequest(u= rl)); @@ -153,18 +153,17 @@ void ProviderManager::addProviderFile(const QUrl &url) void ProviderManager::fileFinished(const QString &url) { QNetworkReply *reply =3D d->m_downloads.take(url); - parseProviderFile(QLatin1String(reply->readAll()), url); + parseProviderFile(QLatin1String(reply->readAll()), QUrl(url)); reply->deleteLater(); } = void ProviderManager::addProviderFromXml(const QString &providerXml) { - parseProviderFile(providerXml, QString()); + parseProviderFile(providerXml, QUrl()); } = -void ProviderManager::parseProviderFile(const QString &xmlString, const QS= tring &url) +void ProviderManager::parseProviderFile(const QString &xmlString, const QU= rl &url) { - Q_UNUSED(url) QXmlStreamReader xml(xmlString); while (!xml.atEnd() && xml.readNext()) { if (xml.isStartElement() && xml.name() =3D=3D QLatin1String("provi= der")) { @@ -226,16 +225,26 @@ void ProviderManager::parseProviderFile(const QString= &xmlString, const QString d->m_providers.insert(baseUrl, Provider(d->m_internals, ba= seUrl, name, icon, person, friendV, m= essage, achievement, activity, content, fan, forum, knowledgebase, event, comment, re= gisterUrl)); + d->m_providerTargets[url] =3D baseUrl; emit providerAdded(d->m_providers.value(baseUrl)); } } } = + if (xml.error() !=3D QXmlStreamReader::NoError) { + qDebug() << "error:" << xml.errorString() << "in" << url; + } + if (d->m_downloads.isEmpty()) { emit defaultProvidersLoaded(); } } = +Provider ProviderManager::providerFor(const QUrl &url) const +{ + return providerByUrl(d->m_providerTargets.value(url)); +} + Provider ProviderManager::providerByUrl(const QUrl &url) const { return d->m_providers.value(url); @@ -253,7 +262,7 @@ bool ProviderManager::contains(const QString &provider)= const = QList ProviderManager::providerFiles() const { - return d->m_providerFiles.keys(); + return d->m_providerTargets.keys(); } = void ProviderManager::authenticate(QNetworkReply *reply, QAuthenticator *a= uth) diff --git a/src/providermanager.h b/src/providermanager.h index 27a0f55..ab0aea5 100644 --- a/src/providermanager.h +++ b/src/providermanager.h @@ -125,10 +125,28 @@ public: void addProviderFile(const QUrl &file); QList providerFiles() const; = + /** + * @returns all loaded providers + */ QList providers() const; - bool contains(const QString &provider) const; + + ATTICA_DEPRECATED bool contains(const QString &provider) const; + + /** + * @returns whether there's a provider with base url @p provider + */ + bool contains(const QUrl &provider) const; + + /** + * @returns the provider with @p url base url. + */ Provider providerByUrl(const QUrl &url) const; = + /** + * @returns the provider for a given provider @p url. + */ + Provider providerFor(const QUrl &url) const; + Q_SIGNALS: void providerAdded(const Attica::Provider &provider); void defaultProvidersLoaded(); @@ -147,7 +165,7 @@ private: void initNetworkAccesssManager(); PlatformDependent *loadPlatformDependent(const ProviderFlags &flags); = - void parseProviderFile(const QString &xmlString, const QString &url); + void parseProviderFile(const QString &xmlString, const QUrl &url); = class Private; Private *const d;