author | Antonio Rojas
<arojas@archlinux.org> 2021-10-01 18:47:30 UTC |
committer | Antonio Rojas
<arojas@archlinux.org> 2021-10-01 18:47:30 UTC |
parent | 168c4f943d37bea81b7a99d2dfc6c02ae8c26479 |
PKGBUILD | +9 | -3 |
fix-OSC-traffic.patch | +67 | -0 |
diff --git a/PKGBUILD b/PKGBUILD index 6da6a87..8a594ce 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -4,7 +4,7 @@ pkgname=attica pkgver=5.86.0 -pkgrel=1 +pkgrel=2 arch=(x86_64) pkgdesc='Qt library that implements the Open Collaboration Services API' url='https://community.kde.org/Frameworks' @@ -12,11 +12,17 @@ license=(LGPL) depends=(qt5-base) makedepends=(extra-cmake-modules doxygen qt5-tools qt5-doc) groups=(kf5) -source=(https://download.kde.org/stable/frameworks/${pkgver%.*}/$pkgname-$pkgver.tar.xz{,.sig}) +source=(https://download.kde.org/stable/frameworks/${pkgver%.*}/$pkgname-$pkgver.tar.xz{,.sig} + fix-OSC-traffic.patch) sha256sums=('992ffe3743588b81a63dcb3886d406f63800423bd442e3b99058bfc80f0e467f' - 'SKIP') + 'SKIP' + 'bc0302ed8b507bf52638d18dd8570aa2aa61457210cd960ca8c08d819a423f02') validpgpkeys=(53E6B47B45CEA3E0D5B7457758D0EE648A48B3BB) # David Faure <faure@kde.org> +prepare() { + patch -d $pkgname-$pkgver -p1 < fix-OSC-traffic.patch # Fix excessive OSC traffic +} + build() { cmake -B build -S $pkgname-$pkgver \ -DBUILD_TESTING=OFF \ diff --git a/fix-OSC-traffic.patch b/fix-OSC-traffic.patch new file mode 100644 index 0000000..ae325c1 --- /dev/null +++ b/fix-OSC-traffic.patch @@ -0,0 +1,67 @@ +commit 7c38c8cf28a4d0d667e23ddfaaf38a955d65bf3e +Author: Aleix Pol <aleixpol@kde.org> +Date: Wed Sep 22 16:19:39 2021 +0200 + + Ensure categories.xml is only fetched once in parallel + + Otherwise we overload the server that is returning them fairly slowly + anyway (2 to 3 seconds?). It seems like it serves these sequentially as + well, which makes Discover startup stuttery. + +diff --git a/src/atticabasejob.cpp b/src/atticabasejob.cpp +index 99acf4f..e65d556 100644 +--- a/src/atticabasejob.cpp ++++ b/src/atticabasejob.cpp +@@ -26,6 +26,7 @@ public: + PlatformDependent *m_internals; + QNetworkReply *m_reply; + bool aborted{false}; ++ bool started = false; + + Private(PlatformDependent *internals) + : m_internals(internals) +@@ -120,7 +121,10 @@ void BaseJob::dataFinished() + + void BaseJob::start() + { +- QTimer::singleShot(0, this, &BaseJob::doWork); ++ if (!d->started) { ++ d->started = true; ++ QTimer::singleShot(0, this, &BaseJob::doWork); ++ } + } + + void BaseJob::doWork() +diff --git a/src/provider.cpp b/src/provider.cpp +index 9e4da64..b994ce9 100644 +--- a/src/provider.cpp ++++ b/src/provider.cpp +@@ -64,6 +64,7 @@ + #include <QFile> + #include <QNetworkAccessManager> + #include <QNetworkReply> ++#include <QThreadStorage> + #include <QUrlQuery> + + using namespace Attica; +@@ -1134,8 +1135,18 @@ ListJob<Category> *Provider::requestCategories() + return nullptr; + } + +- QUrl url = createUrl(QLatin1String("content/categories")); +- ListJob<Category> *job = new ListJob<Category>(d->m_internals, createRequest(url)); ++ const QUrl url = createUrl(QLatin1String("content/categories")); ++ ++ // Thread-local cache of categories requests. They are fairly slow and block startup ++ static QThreadStorage<QHash<QUrl, ListJob<Category> *>> reqs; ++ ListJob<Category> *job = reqs.localData().value(url); ++ if (!job) { ++ job = new ListJob<Category>(d->m_internals, createRequest(url)); ++ QObject::connect(job, &BaseJob::finished, [url] { ++ reqs.localData().remove(url); ++ }); ++ reqs.localData().insert(url, job); ++ } + return job; + } +