[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [attica] src: Make it actually possible to tell providers from the url we were given
From:       Aleix Pol <aleixpol () kde ! org>
Date:       2016-05-31 22:13:07
Message-ID: E1b7ruN-0000O7-0s () scm ! kde ! org
[Download RAW message or body]

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<QUrl, Provider> m_providers;
-    QHash<QUrl, QList<QString> > m_providerFiles;
+    QHash<QUrl, QUrl> m_providerTargets;
     QSignalMapper m_downloadMapping;
     QHash<QString, QNetworkReply *> m_downloads;
     bool m_authenticationSuppressed;
@@ -96,7 +96,7 @@ void ProviderManager::setAuthenticationSuppressed(bool suppressed)
 
 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 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::addProviderFile(const QUrl &url)
 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 @@ void ProviderManager::parseProviderFile(const QString \
                &xmlString, const QString
                 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 @@ bool ProviderManager::contains(const QString &provider) const
 
 QList<QUrl> ProviderManager::providerFiles() const
 {
-    return d->m_providerFiles.keys();
+    return d->m_providerTargets.keys();
 }
 
 void ProviderManager::authenticate(QNetworkReply *reply, QAuthenticator *auth)
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<QUrl> providerFiles() const;
 
+    /**
+     * @returns all loaded providers
+     */
     QList<Provider> 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;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic