Index: src/category.h =================================================================== --- src/category.h +++ src/category.h @@ -102,4 +102,6 @@ } +QDebug operator<<(QDebug s, const Attica::Category& cat); + #endif Index: src/category.cpp =================================================================== --- src/category.cpp +++ src/category.cpp @@ -24,9 +24,17 @@ #include "category.h" #include +#include using namespace Attica; +QDebug operator<<(QDebug s, const Attica::Category& cat) +{ + const QString name = cat.isValid() ? cat.name() : QStringLiteral("Invalid"); + s.nospace() << "Category(" << name << ')'; + return s.space(); +} + class Category::Private : public QSharedData { public: Index: src/provider.h =================================================================== --- src/provider.h +++ src/provider.h @@ -699,4 +699,6 @@ }; } +static QDebug operator<<(QDebug s, const Attica::Provider& prov); + #endif Index: src/provider.cpp =================================================================== --- src/provider.cpp +++ src/provider.cpp @@ -91,6 +91,15 @@ using namespace Attica; +QDebug operator<<(QDebug s, const Attica::Provider& prov) +{ + if (prov.isValid()) + s.nospace() << "Provider(" << prov.name() << ':' << prov.baseUrl() << ')'; + else + s.nospace() << "Provider(Invalid)"; + return s.space(); +} + class Provider::Private : public QSharedData { public: Index: src/providermanager.h =================================================================== --- src/providermanager.h +++ src/providermanager.h @@ -125,10 +125,28 @@ 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 @@ 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; Index: src/providermanager.cpp =================================================================== --- src/providermanager.cpp +++ src/providermanager.cpp @@ -48,7 +48,7 @@ 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::clear() { - d->m_providerFiles.clear(); + d->m_providerTargets.clear(); d->m_providers.clear(); } @@ -139,7 +139,7 @@ qWarning() << "ProviderManager::addProviderFile: could not open provider file: " << url.toString(); return; } - addProviderFromXml(QLatin1String(file.readAll())); + parseProviderFile(QLatin1String(file.readAll()), url); } else { if (!d->m_downloads.contains(url.toString())) { QNetworkReply *reply = d->m_internals->get(QNetworkRequest(url)); @@ -153,18 +153,17 @@ void ProviderManager::fileFinished(const QString &url) { QNetworkReply *reply = 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 QString &url) +void ProviderManager::parseProviderFile(const QString &xmlString, const QUrl &url) { - Q_UNUSED(url) QXmlStreamReader xml(xmlString); while (!xml.atEnd() && xml.readNext()) { if (xml.isStartElement() && xml.name() == QLatin1String("provider")) { @@ -226,16 +225,26 @@ d->m_providers.insert(baseUrl, Provider(d->m_internals, baseUrl, name, icon, person, friendV, message, achievement, activity, content, fan, forum, knowledgebase, event, comment, registerUrl)); + d->m_providerTargets[url] = baseUrl; emit providerAdded(d->m_providers.value(baseUrl)); } } } + if (xml.error() != 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 @@ QList ProviderManager::providerFiles() const { - return d->m_providerFiles.keys(); + return d->m_providerTargets.keys(); } void ProviderManager::authenticate(QNetworkReply *reply, QAuthenticator *auth)