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

List:       kde-frameworks-devel
Subject:    Re: [frameworks/knewstuff] src/core: KNSCoree::Engine: Use QUrl for reading providerFileUrl
From:       Ben Cooksley <bcooksley () kde ! org>
Date:       2023-02-09 7:32:29
Message-ID: CA+XidOF=SC=1HAowpPdj+eeMy-6bhYCdy_Zr3366BLqxN7yKiw () mail ! gmail ! com
[Download RAW message or body]

Hi Alexander,

With regards to the below change to KNewStuff has it been rigorously tested
to ensure that this change does not impact on how it communicates with and
behaves with server-side infrastructure?

I can appreciate that it looks fairly safe and harmless, however i've been
burned too many times by QNetworkAccessManager and it's associated classes
not to ask that we explicitly test and check that the behaviour remains
correct.

Thanks,
Ben

On Thu, Feb 9, 2023 at 8:14 AM Alexander Lohnau <null@kde.org> wrote:

> Git commit 44f327eee36a1065cc4415d8f412b734609b7d00 by Alexander Lohnau.
> Committed on 06/02/2023 at 20:49.
> Pushed by alex into branch 'master'.
>
> KNSCoree::Engine: Use QUrl for reading providerFileUrl
>
> M  +9    -10   src/core/engine.cpp [INFRASTRUCTURE]
>
>
> https://invent.kde.org/frameworks/knewstuff/commit/44f327eee36a1065cc4415d8f412b734609b7d00
>
> diff --git a/src/core/engine.cpp b/src/core/engine.cpp
> index 90982272..0bf92662 100644
> --- a/src/core/engine.cpp
> +++ b/src/core/engine.cpp
> @@ -54,7 +54,7 @@
>
>  using namespace KNSCore;
>
> -typedef QHash<QString, XmlLoader *> EngineProviderLoaderHash;
> +typedef QHash<QUrl, XmlLoader *> EngineProviderLoaderHash;
>  Q_GLOBAL_STATIC(QThreadStorage<EngineProviderLoaderHash>,
> s_engineProviderLoaders)
>
>  class EnginePrivate
> @@ -154,8 +154,7 @@ public:
>      QSharedPointer<Cache> cache;
>      QTimer *searchTimer = new QTimer();
>      // The url of the file containing information about content providers
> -    /// TODO KF6 This really wants to be turned into a QUrl (which will
> have implications for our public API, so not doing it just now)
> -    QString providerFileUrl;
> +    QUrl providerFileUrl;
>      // Categories from knsrc file
>      QStringList categories;
>
> @@ -272,14 +271,14 @@ bool Engine::init(const QString &configfile)
>      d->uploadEnabled = group.readEntry("UploadEnabled", true);
>      Q_EMIT uploadEnabledChanged();
>
> -    d->providerFileUrl = group.readEntry("ProvidersUrl", QStringLiteral("
> https://autoconfig.kde.org/ocs/providers.xml"));
> -    if (d->providerFileUrl == QLatin1String("
> https://download.kde.org/ocs/providers.xml")) {
> -        d->providerFileUrl = QStringLiteral("
> https://autoconfig.kde.org/ocs/providers.xml");
> +    d->providerFileUrl = group.readEntry("ProvidersUrl",
> QUrl(QStringLiteral("https://autoconfig.kde.org/ocs/providers.xml")));
> +    if (d->providerFileUrl.toString() == QLatin1String("
> https://download.kde.org/ocs/providers.xml")) {
> +        d->providerFileUrl = QUrl(QStringLiteral("
> https://autoconfig.kde.org/ocs/providers.xml"));
>          qCWarning(KNEWSTUFFCORE) << "Please make sure" << configfile <<
> "has ProvidersUrl=https://autoconfig.kde.org/ocs/providers.xml";
>      }
>      if (group.readEntry("UseLocalProvidersFile", "false").toLower() ==
> QLatin1String{"true"}) {
>          // The local providers file is called "appname.providers", to
> match "appname.knsrc"
> -        d->providerFileUrl =
> QUrl::fromLocalFile(QLatin1String("%1.providers").arg(configFullPath.left(configFullPath.length()
> - 6))).toString();
> +        d->providerFileUrl =
> QUrl::fromLocalFile(QLatin1String("%1.providers").arg(configFullPath.left(configFullPath.length()
> - 6)));
>      }
>
>      d->tagFilter = group.readEntry("TagFilter",
> QStringList(QStringLiteral("ghns_excluded!=1")));
> @@ -404,7 +403,7 @@ void Engine::loadProviders()
>                      }
>                  }
>              });
> -            loader->load(QUrl(d->providerFileUrl));
> +            loader->load(d->providerFileUrl);
>          }
>          connect(loader, &XmlLoader::signalLoaded, this,
> &Engine::slotProviderFileLoaded);
>          connect(loader, &XmlLoader::signalFailed, this,
> &Engine::slotProvidersFailed);
> @@ -425,7 +424,7 @@ void Engine::slotProviderFileLoaded(const QDomDocument
> &doc)
>      } else if (providers.tagName() != QLatin1String("ghnsproviders") &&
> providers.tagName() != QLatin1String("knewstuffproviders")) {
>          qWarning() << "No document in providers.xml.";
>          Q_EMIT signalErrorCode(KNSCore::ProviderError,
> -                               i18n("Could not load get hot new stuff
> providers from file: %1", d->providerFileUrl),
> +                               i18n("Could not load get hot new stuff
> providers from file: %1", d->providerFileUrl.toString()),
>                                 d->providerFileUrl);
>          return;
>      }
> @@ -507,7 +506,7 @@ void Engine::providerJobStarted(KJob *job)
>
>  void Engine::slotProvidersFailed()
>  {
> -    Q_EMIT signalErrorCode(KNSCore::ProviderError, i18n("Loading of
> providers from file: %1 failed", d->providerFileUrl), d->providerFileUrl);
> +    Q_EMIT signalErrorCode(KNSCore::ProviderError, i18n("Loading of
> providers from file: %1 failed", d->providerFileUrl.toString()),
> d->providerFileUrl);
>  }
>
>  void Engine::providerInitialized(Provider *p)
>
>

[Attachment #3 (text/html)]

<div dir="ltr">Hi Alexander,<div><br></div><div>With regards to the below change to \
KNewStuff has it been rigorously  tested to ensure that this change does not impact \
on how it communicates with and behaves with server-side \
infrastructure?</div><div><br></div><div>I can appreciate that it looks fairly safe \
and harmless, however i&#39;ve been burned too many times by QNetworkAccessManager \
and it&#39;s associated classes not to ask that we explicitly test and check that the \
behaviour remains correct.</div><div><br></div><div>Thanks,</div><div>Ben</div></div><br><div \
class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Feb 9, 2023 at 8:14 AM \
Alexander Lohnau &lt;<a href="mailto:null@kde.org">null@kde.org</a>&gt; \
wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px \
0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Git commit \
44f327eee36a1065cc4415d8f412b734609b7d00 by Alexander Lohnau.<br> Committed on \
06/02/2023 at 20:49.<br> Pushed by alex into branch &#39;master&#39;.<br>
<br>
KNSCoree::Engine: Use QUrl for reading providerFileUrl<br>
<br>
M   +9      -10     src/core/engine.cpp [INFRASTRUCTURE]<br>
<br>
<a href="https://invent.kde.org/frameworks/knewstuff/commit/44f327eee36a1065cc4415d8f412b734609b7d00" \
rel="noreferrer" target="_blank">https://invent.kde.org/frameworks/knewstuff/commit/44f327eee36a1065cc4415d8f412b734609b7d00</a><br>
 <br>
diff --git a/src/core/engine.cpp b/src/core/engine.cpp<br>
index 90982272..0bf92662 100644<br>
--- a/src/core/engine.cpp<br>
+++ b/src/core/engine.cpp<br>
@@ -54,7 +54,7 @@<br>
<br>
  using namespace KNSCore;<br>
<br>
-typedef QHash&lt;QString, XmlLoader *&gt; EngineProviderLoaderHash;<br>
+typedef QHash&lt;QUrl, XmlLoader *&gt; EngineProviderLoaderHash;<br>
  Q_GLOBAL_STATIC(QThreadStorage&lt;EngineProviderLoaderHash&gt;, \
s_engineProviderLoaders)<br> <br>
  class EnginePrivate<br>
@@ -154,8 +154,7 @@ public:<br>
        QSharedPointer&lt;Cache&gt; cache;<br>
        QTimer *searchTimer = new QTimer();<br>
        // The url of the file containing information about content providers<br>
-      /// TODO KF6 This really wants to be turned into a QUrl (which will have \
                implications for our public API, so not doing it just now)<br>
-      QString providerFileUrl;<br>
+      QUrl providerFileUrl;<br>
        // Categories from knsrc file<br>
        QStringList categories;<br>
<br>
@@ -272,14 +271,14 @@ bool Engine::init(const QString &amp;configfile)<br>
        d-&gt;uploadEnabled = group.readEntry(&quot;UploadEnabled&quot;, true);<br>
        Q_EMIT uploadEnabledChanged();<br>
<br>
-      d-&gt;providerFileUrl = group.readEntry(&quot;ProvidersUrl&quot;, \
QStringLiteral(&quot;<a href="https://autoconfig.kde.org/ocs/providers.xml" \
rel="noreferrer" target="_blank">https://autoconfig.kde.org/ocs/providers.xml</a>&quot;));<br>
                
-      if (d-&gt;providerFileUrl == QLatin1String(&quot;<a \
href="https://download.kde.org/ocs/providers.xml" rel="noreferrer" \
                target="_blank">https://download.kde.org/ocs/providers.xml</a>&quot;)) \
                {<br>
-            d-&gt;providerFileUrl = QStringLiteral(&quot;<a \
href="https://autoconfig.kde.org/ocs/providers.xml" rel="noreferrer" \
target="_blank">https://autoconfig.kde.org/ocs/providers.xml</a>&quot;);<br> +      \
d-&gt;providerFileUrl = group.readEntry(&quot;ProvidersUrl&quot;, \
QUrl(QStringLiteral(&quot;<a href="https://autoconfig.kde.org/ocs/providers.xml" \
rel="noreferrer" target="_blank">https://autoconfig.kde.org/ocs/providers.xml</a>&quot;)));<br>
 +      if (d-&gt;providerFileUrl.toString() == QLatin1String(&quot;<a \
href="https://download.kde.org/ocs/providers.xml" rel="noreferrer" \
target="_blank">https://download.kde.org/ocs/providers.xml</a>&quot;)) {<br> +        \
d-&gt;providerFileUrl = QUrl(QStringLiteral(&quot;<a \
href="https://autoconfig.kde.org/ocs/providers.xml" rel="noreferrer" \
target="_blank">https://autoconfig.kde.org/ocs/providers.xml</a>&quot;));<br>  \
qCWarning(KNEWSTUFFCORE) &lt;&lt; &quot;Please make sure&quot; &lt;&lt; configfile \
&lt;&lt; &quot;has ProvidersUrl=<a \
href="https://autoconfig.kde.org/ocs/providers.xml" rel="noreferrer" \
target="_blank">https://autoconfig.kde.org/ocs/providers.xml</a>&quot;;<br>  }<br>
        if (group.readEntry(&quot;UseLocalProvidersFile&quot;, \
                &quot;false&quot;).toLower() == QLatin1String{&quot;true&quot;}) \
                {<br>
              // The local providers file is called &quot;appname.providers&quot;, to \
                match &quot;appname.knsrc&quot;<br>
-            d-&gt;providerFileUrl = \
QUrl::fromLocalFile(QLatin1String(&quot;%1.providers&quot;).arg(configFullPath.left(configFullPath.length() \
- 6))).toString();<br> +            d-&gt;providerFileUrl = \
QUrl::fromLocalFile(QLatin1String(&quot;%1.providers&quot;).arg(configFullPath.left(configFullPath.length() \
- 6)));<br>  }<br>
<br>
        d-&gt;tagFilter = group.readEntry(&quot;TagFilter&quot;, \
QStringList(QStringLiteral(&quot;ghns_excluded!=1&quot;)));<br> @@ -404,7 +403,7 @@ \
void Engine::loadProviders()<br>  }<br>
                          }<br>
                    });<br>
-                  loader-&gt;load(QUrl(d-&gt;providerFileUrl));<br>
+                  loader-&gt;load(d-&gt;providerFileUrl);<br>
              }<br>
              connect(loader, &amp;XmlLoader::signalLoaded, this, \
                &amp;Engine::slotProviderFileLoaded);<br>
              connect(loader, &amp;XmlLoader::signalFailed, this, \
&amp;Engine::slotProvidersFailed);<br> @@ -425,7 +424,7 @@ void \
Engine::slotProviderFileLoaded(const QDomDocument &amp;doc)<br>  } else if \
(providers.tagName() != QLatin1String(&quot;ghnsproviders&quot;) &amp;&amp; \
                providers.tagName() != QLatin1String(&quot;knewstuffproviders&quot;)) \
                {<br>
              qWarning() &lt;&lt; &quot;No document in providers.xml.&quot;;<br>
              Q_EMIT signalErrorCode(KNSCore::ProviderError,<br>
-                                               i18n(&quot;Could not load get hot new \
stuff providers from file: %1&quot;, d-&gt;providerFileUrl),<br> +                    \
i18n(&quot;Could not load get hot new stuff providers from file: %1&quot;, \
                d-&gt;providerFileUrl.toString()),<br>
                                                d-&gt;providerFileUrl);<br>
              return;<br>
        }<br>
@@ -507,7 +506,7 @@ void Engine::providerJobStarted(KJob *job)<br>
<br>
  void Engine::slotProvidersFailed()<br>
  {<br>
-      Q_EMIT signalErrorCode(KNSCore::ProviderError, i18n(&quot;Loading of providers \
from file: %1 failed&quot;, d-&gt;providerFileUrl), d-&gt;providerFileUrl);<br> +     \
Q_EMIT signalErrorCode(KNSCore::ProviderError, i18n(&quot;Loading of providers from \
file: %1 failed&quot;, d-&gt;providerFileUrl.toString()), d-&gt;providerFileUrl);<br> \
}<br> <br>
  void Engine::providerInitialized(Provider *p)<br>
<br>
</blockquote></div>



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

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