summaryrefslogtreecommitdiff
path: root/kde-frameworks/kunitconversion
diff options
context:
space:
mode:
Diffstat (limited to 'kde-frameworks/kunitconversion')
-rw-r--r--kde-frameworks/kunitconversion/Manifest3
-rw-r--r--kde-frameworks/kunitconversion/files/kunitconversion-5.85.0-fix-24h-currency-sync.patch91
-rw-r--r--kde-frameworks/kunitconversion/files/kunitconversion-5.85.0-fix-currency-values-init.patch235
-rw-r--r--kde-frameworks/kunitconversion/kunitconversion-5.85.0-r1.ebuild33
4 files changed, 362 insertions, 0 deletions
diff --git a/kde-frameworks/kunitconversion/Manifest b/kde-frameworks/kunitconversion/Manifest
index 6e222aca8296..5995e5bcbdda 100644
--- a/kde-frameworks/kunitconversion/Manifest
+++ b/kde-frameworks/kunitconversion/Manifest
@@ -1,5 +1,8 @@
+AUX kunitconversion-5.85.0-fix-24h-currency-sync.patch 3236 BLAKE2B 561814077c1c46226540ad130cd25261657d43ca1ecb16abaf7e011ea0b0a2837dd8c1c54ca2feea615d05a18a4f816f560b27b230da62340b7ad4c0b2c03136 SHA512 8d2df0d6eb218f46c1a0cbe0bb0ba030f76196d88995a08147ed12527cafbb3932e32ce45501228c6f2746de3fba7b0b8b52b50998cf49e1a5b6fe051da40ed2
+AUX kunitconversion-5.85.0-fix-currency-values-init.patch 8599 BLAKE2B 4650128f295a8b873bb874de5f44baf165c124ad3a4f6704817814718152f5936e399da099a1500e6c079bab5a2698c233bd03be40d926d91b46a61144de36ad SHA512 fe2d928c8873da893e8fb1a28a5b509c23f05d70cf6bbbc5424f000ab8e6639b14bd3137eff6fe65929983b494bd4f7522235aba206b68be8a374bca62844c3e
DIST kunitconversion-5.82.0.tar.xz 869936 BLAKE2B 7812dac12f9e854c1178ff72efd13cba0d36d55c0046898ceebb4dbbce6a8244824bf4453a240661cda83e87e60630268c723abc57d6e86b960eea8ceda83255 SHA512 735684240372b9dc7a37205af92172be164a71537b96c810bf64dd46123748901a079202aef394b2624ccfe5aff2ac69e9380e5715c57089739eb59fbd48a527
DIST kunitconversion-5.85.0.tar.xz 888652 BLAKE2B 8e5a773f0f8acdd1c24b81a8946b7190e52a3dbe5a63c48027f423be9fb735508394ccd01b3caa4bb7c920dc873a73a08c78afb335a158b598f8793c53d194a7 SHA512 f053ba454f4a5a44801a1f5b8c6562a7db71f4aef1c3b253610d20d3bb1b634347f9bb1483f607cbe1746f0b80a8625dcfb05bee5cbda467b799c9d3d5ca6668
EBUILD kunitconversion-5.82.0.ebuild 524 BLAKE2B 3f0bfebc97827dd3837e58d05f44c9b8dbe61ebfd276fa8c4c5921037016d8b6188e4d49cc3fd91ff421a0a3326650f86cd5f47a758e198fc5b0f4a52e9548b5 SHA512 c1f6d3a23f8f60c6c1df3cf609e0544f6f918abb3792578b732c3384d58fcf65c52b2aeefd1cb8d6fa1b735f1bf5ad76b2e346117b002bcbb09ae23f906720bf
+EBUILD kunitconversion-5.85.0-r1.ebuild 663 BLAKE2B 3c640b6bd6e0cedda969bb8a61ab78d41ac4ff04809f47dce229c2cb3d19abbf3e978ae5b751ef922abcf930a2fa90b6c37ceed68d3cba801ac2b192d2696f53 SHA512 85d23613cb40e64e3ed311a83ba963e132e36062f5b479f267f3025c10c53241a387ad76a3aafb1e9d75ab859957c1e05e0ff12627cf69a9546b6b8e493fab2d
EBUILD kunitconversion-5.85.0.ebuild 534 BLAKE2B 68c73876457433b0c91f732609fd10ea2d7313a837873510a627f8d61041eb629c531a2b4e23a56a24e3145cb5751b0b91cc6d8b9f6b1f6a8019b46902e904f6 SHA512 6401d3670546c9bdbe6fbe78f7bb1d73c13ee0230adf103636f1be48955c8fb6d4b90ce92c3ec67fc1045e2461bf3074680941e189d2db367c0ff6503e3ac3c1
MISC metadata.xml 455 BLAKE2B 134b0f3f4b2f38ab25d44a1daefc5f38113068cb041dc46722d9ad95846278b35d0c4a294a62266b3825627c6258a6d0f2ba3054350d2e6443f6fc82278f55cd SHA512 a8b4ea9fe9068223e7079de9e04a29c3ef461eb669ecd72a16a614e8c3b7ecec9e4433dab347c4e02140a6d42aaa25fbff77a5e269639d1c4311c59ecfa42c73
diff --git a/kde-frameworks/kunitconversion/files/kunitconversion-5.85.0-fix-24h-currency-sync.patch b/kde-frameworks/kunitconversion/files/kunitconversion-5.85.0-fix-24h-currency-sync.patch
new file mode 100644
index 000000000000..056a2e8b1e5b
--- /dev/null
+++ b/kde-frameworks/kunitconversion/files/kunitconversion-5.85.0-fix-24h-currency-sync.patch
@@ -0,0 +1,91 @@
+From 6e41104426a3ae59bcb90be708abcc3092155436 Mon Sep 17 00:00:00 2001
+From: Andreas Cord-Landwehr <cordlandwehr@kde.org>
+Date: Tue, 24 Aug 2021 21:06:47 +0200
+Subject: [PATCH] Fix automatic currency file sync after 24h
+
+Conversion plugin in Krunner depends on automatic refresh of currency
+table. std::call_once does not work there, because process is never
+stopped.
+
+BUG: 441337
+---
+ autotests/convertertest.cpp | 16 ++++++++++++++++
+ autotests/convertertest.h | 6 ++++++
+ src/currency.cpp | 9 ++++++---
+ 3 files changed, 28 insertions(+), 3 deletions(-)
+
+diff --git a/autotests/convertertest.cpp b/autotests/convertertest.cpp
+index aa0ccae..e36b7fe 100644
+--- a/autotests/convertertest.cpp
++++ b/autotests/convertertest.cpp
+@@ -8,9 +8,11 @@
+ #include <QStandardPaths>
+ #include <QThread>
+ #include <QVector>
++#include <currency_p.h>
+ #include <kunitconversion/unitcategory.h>
+
+ using namespace KUnitConversion;
++using namespace std::chrono_literals;
+
+ void ConverterTest::initTestCase()
+ {
+@@ -113,4 +115,18 @@ void ConverterTest::testCurrency()
+ qDeleteAll(threads);
+ }
+
++void ConverterTest::testCurrencyConversionTableUpdate()
++{
++ const QString cache = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QStringLiteral("/libkunitconversion/currency.xml");
++
++ // Missing conversion table must lead to update of table
++ // note that this is the same code path as for last modified updates
++ QFile::remove(cache);
++ QVERIFY(Currency::lastConversionTableUpdate().isNull());
++ Converter c;
++ Value input = Value(1000, Eur);
++ Value v = c.convert(input, QStringLiteral("$"));
++ QVERIFY(!Currency::lastConversionTableUpdate().isNull());
++}
++
+ QTEST_MAIN(ConverterTest)
+diff --git a/autotests/convertertest.h b/autotests/convertertest.h
+index 21d5213..d3d6303 100644
+--- a/autotests/convertertest.h
++++ b/autotests/convertertest.h
+@@ -23,6 +23,12 @@ private Q_SLOTS:
+ void testConvert();
+ void testInvalid();
+ void testCurrency();
++ /**
++ * Checks that conversion tables are updated after timeout
++ *
++ * Regression test for https://bugs.kde.org/show_bug.cgi?id=441337
++ */
++ void testCurrencyConversionTableUpdate();
+ };
+
+ #endif // CONVERTERTEST_H
+diff --git a/src/currency.cpp b/src/currency.cpp
+index 038e928..ead7ce5 100644
+--- a/src/currency.cpp
++++ b/src/currency.cpp
+@@ -745,9 +745,12 @@ void CurrencyCategoryPrivate::syncConversionTable(std::chrono::seconds updateSki
+ Value CurrencyCategoryPrivate::convert(const Value &value, const Unit &to)
+ {
+ // TODO KF6 remove this blocking call and change behavior that explicit call to syncConversionTable is mandatory before
+- // right now, if a sync is performed at application start, then this call will not block anymore for 24 hours
+- static std::once_flag updateFlag;
+- std::call_once(updateFlag, &CurrencyCategoryPrivate::syncConversionTable, this, 24h);
++ // first access to converted data, also to make syncs more explicit
++ static QMutex updateFlag;
++ {
++ QMutexLocker locker(&updateFlag);
++ CurrencyCategoryPrivate::syncConversionTable(24h);
++ }
+
+ Value v = UnitCategoryPrivate::convert(value, to);
+ return v;
+--
+GitLab
+
diff --git a/kde-frameworks/kunitconversion/files/kunitconversion-5.85.0-fix-currency-values-init.patch b/kde-frameworks/kunitconversion/files/kunitconversion-5.85.0-fix-currency-values-init.patch
new file mode 100644
index 000000000000..01ee8a6fa575
--- /dev/null
+++ b/kde-frameworks/kunitconversion/files/kunitconversion-5.85.0-fix-currency-values-init.patch
@@ -0,0 +1,235 @@
+From 2a57f9d1c6b2f8d9e2babcdaca66f1cf2a3c5849 Mon Sep 17 00:00:00 2001
+From: Andreas Cord-Landwehr <cordlandwehr@kde.org>
+Date: Sat, 28 Aug 2021 11:42:06 +0200
+Subject: [PATCH] Fix initialization of currency values
+
+If there is already a recent currency.xml file provided then use this to
+initialize the currency converter.
+
+BUG: 441337
+---
+ autotests/CMakeLists.txt | 8 ++++
+ autotests/currencytableinittest.cpp | 33 +++++++++++++++
+ autotests/currencytableinittest.h | 26 ++++++++++++
+ autotests/currencytableinittest/currency.xml | 43 ++++++++++++++++++++
+ autotests/currencytableinittest/data.qrc | 5 +++
+ autotests/valuetest.cpp | 6 +++
+ src/currency.cpp | 10 +++--
+ 7 files changed, 128 insertions(+), 3 deletions(-)
+ create mode 100644 autotests/currencytableinittest.cpp
+ create mode 100644 autotests/currencytableinittest.h
+ create mode 100644 autotests/currencytableinittest/currency.xml
+ create mode 100644 autotests/currencytableinittest/data.qrc
+
+diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt
+index ec457a5..8225bf2 100644
+--- a/autotests/CMakeLists.txt
++++ b/autotests/CMakeLists.txt
+@@ -8,3 +8,11 @@ ecm_add_tests(
+ convertertest.cpp
+ LINK_LIBRARIES KF5::UnitConversion KF5::I18n Qt5::Test
+ )
++
++qt5_add_resources(CURRENCY_TEST_RESOURCES currencytableinittest/data.qrc)
++ecm_add_test(
++ currencytableinittest.cpp
++ ${CURRENCY_TEST_RESOURCES}
++ TEST_NAME currencytableinittest
++ LINK_LIBRARIES KF5::UnitConversion KF5::I18n Qt5::Test
++)
+diff --git a/autotests/currencytableinittest.cpp b/autotests/currencytableinittest.cpp
+new file mode 100644
+index 0000000..c83709a
+--- /dev/null
++++ b/autotests/currencytableinittest.cpp
+@@ -0,0 +1,33 @@
++/*
++ * SPDX-FileCopyrightText: 2021 Andreas Cord-Landwehr <cordlandwehr@kde.org>
++ *
++ * SPDX-License-Identifier: LGPL-2.0-or-later
++ */
++
++#include "currencytableinittest.h"
++#include <QStandardPaths>
++#include <cmath>
++
++using namespace KUnitConversion;
++
++void CurrencyTableInitTest::testCategoryInit()
++{
++ QStandardPaths::setTestModeEnabled(true);
++ const QString cache = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QStringLiteral("/libkunitconversion/currency.xml");
++
++ QVERIFY(QFile::exists(QLatin1String(":/currency.xml")));
++ if (QFile::exists(cache)) {
++ QFile::remove(cache);
++ }
++ // note: copy of file updates the file's modified timestamp and thus file is seen as recently downloaded file
++ QVERIFY(QFile::copy(QLatin1String(":/currency.xml"), cache));
++
++ Converter c;
++ Value input = Value(1000, Eur);
++ Value v = c.convert(input, QStringLiteral("$"));
++ qDebug() << "converted value to:" << v.number();
++ QVERIFY(v.isValid());
++ QVERIFY(!std::isnan(v.number()));
++}
++
++QTEST_MAIN(CurrencyTableInitTest)
+diff --git a/autotests/currencytableinittest.h b/autotests/currencytableinittest.h
+new file mode 100644
+index 0000000..0b835d0
+--- /dev/null
++++ b/autotests/currencytableinittest.h
+@@ -0,0 +1,26 @@
++/*
++ * SPDX-FileCopyrightText: 2021 Andreas Cord-Landwehr <cordlandwehr@kde.org>
++ *
++ * SPDX-License-Identifier: LGPL-2.0-or-later
++ */
++
++#ifndef CURRENCYTABLEINIT_TEST_H
++#define CURRENCYTABLEINIT_TEST_H
++
++#include <QObject>
++#include <QTest>
++#include <kunitconversion/converter.h>
++
++using namespace KUnitConversion;
++
++class CurrencyTableInitTest : public QObject
++{
++ Q_OBJECT
++private Q_SLOTS:
++ /**
++ * Check that the currency converter is correctly initialized when currency.xml is recent and available
++ */
++ void testCategoryInit();
++};
++
++#endif
+diff --git a/autotests/currencytableinittest/currency.xml b/autotests/currencytableinittest/currency.xml
+new file mode 100644
+index 0000000..dca42d5
+--- /dev/null
++++ b/autotests/currencytableinittest/currency.xml
+@@ -0,0 +1,43 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">
++ <gesmes:subject>Reference rates</gesmes:subject>
++ <gesmes:Sender>
++ <gesmes:name>European Central Bank</gesmes:name>
++ </gesmes:Sender>
++ <Cube>
++ <Cube time='2021-08-24'>
++ <Cube currency='USD' rate='1.1740'/>
++ <Cube currency='JPY' rate='128.74'/>
++ <Cube currency='BGN' rate='1.9558'/>
++ <Cube currency='CZK' rate='25.533'/>
++ <Cube currency='DKK' rate='7.4370'/>
++ <Cube currency='GBP' rate='0.85578'/>
++ <Cube currency='HUF' rate='349.69'/>
++ <Cube currency='PLN' rate='4.5792'/>
++ <Cube currency='RON' rate='4.9280'/>
++ <Cube currency='SEK' rate='10.2090'/>
++ <Cube currency='CHF' rate='1.0711'/>
++ <Cube currency='ISK' rate='150.00'/>
++ <Cube currency='NOK' rate='10.4003'/>
++ <Cube currency='HRK' rate='7.4938'/>
++ <Cube currency='RUB' rate='86.7484'/>
++ <Cube currency='TRY' rate='9.8836'/>
++ <Cube currency='AUD' rate='1.6203'/>
++ <Cube currency='BRL' rate='6.2681'/>
++ <Cube currency='CAD' rate='1.4822'/>
++ <Cube currency='CNY' rate='7.6042'/>
++ <Cube currency='HKD' rate='9.1448'/>
++ <Cube currency='IDR' rate='16897.00'/>
++ <Cube currency='ILS' rate='3.7789'/>
++ <Cube currency='INR' rate='87.0625'/>
++ <Cube currency='KRW' rate='1369.00'/>
++ <Cube currency='MXN' rate='23.8606'/>
++ <Cube currency='MYR' rate='4.9525'/>
++ <Cube currency='NZD' rate='1.6893'/>
++ <Cube currency='PHP' rate='58.783'/>
++ <Cube currency='SGD' rate='1.5918'/>
++ <Cube currency='THB' rate='38.595'/>
++ <Cube currency='ZAR' rate='17.6902'/>
++ </Cube>
++ </Cube>
++</gesmes:Envelope>
+\ No newline at end of file
+diff --git a/autotests/currencytableinittest/data.qrc b/autotests/currencytableinittest/data.qrc
+new file mode 100644
+index 0000000..19f9d69
+--- /dev/null
++++ b/autotests/currencytableinittest/data.qrc
+@@ -0,0 +1,5 @@
++<RCC>
++ <qresource prefix="/">
++ <file>currency.xml</file>
++ </qresource>
++</RCC>
+diff --git a/autotests/valuetest.cpp b/autotests/valuetest.cpp
+index 0b348d7..53be1b7 100644
+--- a/autotests/valuetest.cpp
++++ b/autotests/valuetest.cpp
+@@ -55,6 +55,12 @@ void ValueTest::testInvalid()
+
+ void ValueTest::testCurrencyNotDownloaded()
+ {
++ // ensure that no local conversion table is available
++ const QString cache = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QStringLiteral("/libkunitconversion/currency.xml");
++ if (!QFile::exists(cache)) {
++ QFile::remove(cache);
++ }
++
+ auto pounds = Value(100, Gbp);
+ auto eur = pounds.convertTo(Eur);
+ QVERIFY(!eur.isValid());
+diff --git a/src/currency.cpp b/src/currency.cpp
+index ead7ce5..43161e2 100644
+--- a/src/currency.cpp
++++ b/src/currency.cpp
+@@ -47,6 +47,7 @@ public:
+ Value convert(const Value &value, const Unit &toUnit) override;
+ bool hasOnlineConversionTable() const override;
+ void syncConversionTable(std::chrono::seconds updateSkipSeconds) override;
++ bool m_initialized{false}; //!< indicates if units are prepared from currency table
+ };
+
+ bool CurrencyCategoryPrivate::hasOnlineConversionTable() const
+@@ -668,12 +669,12 @@ QDateTime Currency::lastConversionTableUpdate()
+ void CurrencyCategoryPrivate::syncConversionTable(std::chrono::seconds updateSkipPeriod)
+ {
+ // sync call is expected to be guarded as being called only once
+- auto updateCurrencyConversionTable = [this](const QString &cachePath) {
++ auto updateCurrencyConversionTable = [this](const QString &cachePath, bool performNetworkSync) {
+ qCDebug(LOG_KUNITCONVERSION) << "currency conversion table sync started";
+ static QMutex mutex;
+ QMutexLocker locker(&mutex);
+ bool updateError{false};
+- if (isConnected()) {
++ if (performNetworkSync && isConnected()) {
+ // Bug 345750: QNetworkReply does not work without an event loop and doesn't implement waitForReadyRead()
+ QEventLoop loop;
+ QNetworkAccessManager manager;
+@@ -733,12 +734,15 @@ void CurrencyCategoryPrivate::syncConversionTable(std::chrono::seconds updateSki
+ }
+ }
+ }
++ m_initialized = !updateError;
+ return !updateError;
+ };
+
+ QFileInfo info(cacheLocation());
+ if (!info.exists() || info.lastModified().secsTo(QDateTime::currentDateTime()) > updateSkipPeriod.count()) {
+- updateCurrencyConversionTable(cacheLocation());
++ updateCurrencyConversionTable(cacheLocation(), true);
++ } else if (!m_initialized) {
++ updateCurrencyConversionTable(cacheLocation(), false);
+ }
+ }
+
+--
+GitLab
+
diff --git a/kde-frameworks/kunitconversion/kunitconversion-5.85.0-r1.ebuild b/kde-frameworks/kunitconversion/kunitconversion-5.85.0-r1.ebuild
new file mode 100644
index 000000000000..1a8a5753d916
--- /dev/null
+++ b/kde-frameworks/kunitconversion/kunitconversion-5.85.0-r1.ebuild
@@ -0,0 +1,33 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PVCUT=$(ver_cut 1-2)
+QTMIN=5.15.2
+inherit ecm kde.org
+
+DESCRIPTION="Framework for converting units"
+LICENSE="LGPL-2+"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~riscv ~x86"
+IUSE=""
+
+DEPEND="
+ >=dev-qt/qtnetwork-${QTMIN}:5
+ =kde-frameworks/ki18n-${PVCUT}*:5
+"
+RDEPEND="${DEPEND}"
+
+PATCHES=( # KDE-bug 441337
+ "${FILESDIR}"/${P}-fix-24h-currency-sync.patch
+ "${FILESDIR}"/${P}-fix-currency-values-init.patch
+)
+
+src_test() {
+ # bug 623938 - needs internet connection
+ local myctestargs=(
+ -E "(convertertest)"
+ )
+
+ LC_NUMERIC="C" ecm_src_test # bug 694804
+}