From a06b88c1b47b0584b1461f198472e6d56c3ccae3 Mon Sep 17 00:00:00 2001 From: Camila Date: Mon, 11 Dec 2023 18:29:33 +0100 Subject: [PATCH 1/2] Utility: Fix the storage string to display terabytes. Signed-off-by: Camila --- src/common/utility.cpp | 10 +++++----- test/testutility.cpp | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/common/utility.cpp b/src/common/utility.cpp index 607bb0414ec7c..bc2681ecd6c58 100644 --- a/src/common/utility.cpp +++ b/src/common/utility.cpp @@ -120,6 +120,7 @@ QString Utility::octetsToString(qint64 octets) static const qint64 kb = THE_FACTOR; static const qint64 mb = THE_FACTOR * kb; static const qint64 gb = THE_FACTOR * mb; + static const qint64 tb = THE_FACTOR * gb; QString s; qreal value = octets; @@ -128,11 +129,10 @@ QString Utility::octetsToString(qint64 octets) // if it's less than 10 units. bool round = true; - // do not display terra byte with the current units, as when - // the MB, GB and KB units were made, there was no TB, - // see the JEDEC standard - // https://en.wikipedia.org/wiki/JEDEC_memory_standards - if (octets >= gb) { + if (octets >= tb) { + s = QCoreApplication::translate("Utility", "%L1 TB"); + value /= tb; + } else if (octets >= gb) { s = QCoreApplication::translate("Utility", "%L1 GB"); value /= gb; round = false; diff --git a/test/testutility.cpp b/test/testutility.cpp index 67030d7384a11..89b54f5d607fe 100644 --- a/test/testutility.cpp +++ b/test/testutility.cpp @@ -37,10 +37,12 @@ private slots: QLocale::setDefault(QLocale("en")); QCOMPARE(octetsToString(999) , QString("999 B")); QCOMPARE(octetsToString(1024) , QString("1 KB")); + QCOMPARE(octetsToString(1110) , QString("1 KB")); QCOMPARE(octetsToString(1364) , QString("1 KB")); QCOMPARE(octetsToString(9110) , QString("9 KB")); QCOMPARE(octetsToString(9910) , QString("10 KB")); + QCOMPARE(octetsToString(9999) , QString("10 KB")); QCOMPARE(octetsToString(10240) , QString("10 KB")); QCOMPARE(octetsToString(123456) , QString("121 KB")); @@ -54,6 +56,8 @@ private slots: QCOMPARE(octetsToString(1024), QString("1 KB")); QCOMPARE(octetsToString(1024*1024), QString("1 MB")); QCOMPARE(octetsToString(1024LL*1024*1024), QString("1 GB")); + QCOMPARE(octetsToString(1024LL*1024*1024*1024), QString("1 TB")); + QCOMPARE(octetsToString(1024LL*1024*1024*1024 * 5), QString("5 TB")); } void testLaunchOnStartup() From 8f628f808c6cc199c2ea83a61c2f7cccc7123eef Mon Sep 17 00:00:00 2001 From: Camila Date: Mon, 11 Dec 2023 18:58:52 +0100 Subject: [PATCH 2/2] Modernize Utility::octetsToString function. - Add {} to single line if. - Use const and auto. - Use constexpr. - Rename variables for readability. Signed-off-by: Camila --- src/common/utility.cpp | 74 ++++++++++++++++++++++-------------------- src/common/utility.h | 2 +- 2 files changed, 39 insertions(+), 37 deletions(-) diff --git a/src/common/utility.cpp b/src/common/utility.cpp index bc2681ecd6c58..ce31bac851a74 100644 --- a/src/common/utility.cpp +++ b/src/common/utility.cpp @@ -58,6 +58,14 @@ #include "utility_unix.cpp" #endif +namespace { +constexpr auto bytes = 1024; +constexpr auto kilobytes = bytes; +constexpr auto megabytes = bytes * kilobytes; +constexpr qint64 gigabytes = bytes * megabytes; +constexpr qint64 terabytes = bytes * gigabytes; +} + namespace OCC { Q_LOGGING_CATEGORY(lcUtility, "nextcloud.sync.utility", QtInfoMsg) @@ -114,46 +122,40 @@ void Utility::removeFavLink(const QString &folder) removeFavLink_private(folder); } -QString Utility::octetsToString(qint64 octets) -{ -#define THE_FACTOR 1024 - static const qint64 kb = THE_FACTOR; - static const qint64 mb = THE_FACTOR * kb; - static const qint64 gb = THE_FACTOR * mb; - static const qint64 tb = THE_FACTOR * gb; - - QString s; - qreal value = octets; - - // Whether we care about decimals: only for GB/MB and only - // if it's less than 10 units. - bool round = true; - - if (octets >= tb) { - s = QCoreApplication::translate("Utility", "%L1 TB"); - value /= tb; - } else if (octets >= gb) { - s = QCoreApplication::translate("Utility", "%L1 GB"); - value /= gb; - round = false; - } else if (octets >= mb) { - s = QCoreApplication::translate("Utility", "%L1 MB"); - value /= mb; - round = false; - } else if (octets >= kb) { - s = QCoreApplication::translate("Utility", "%L1 KB"); - value /= kb; - } else { - s = QCoreApplication::translate("Utility", "%L1 B"); +QString Utility::octetsToString(const qint64 octets) +{ + auto unitName = QCoreApplication::translate("Utility", "%L1 B"); + qreal dataSize = octets; + + // Display decimals when value < TB and unit < 10 + auto showDecimals = true; + + if (octets >= terabytes) { + unitName = QCoreApplication::translate("Utility", "%L1 TB"); + dataSize /= terabytes; + showDecimals = false; + } else if (octets >= gigabytes) { + unitName = QCoreApplication::translate("Utility", "%L1 GB"); + dataSize /= gigabytes; + showDecimals = false; + } else if (octets >= megabytes) { + unitName = QCoreApplication::translate("Utility", "%L1 MB"); + dataSize /= megabytes; + showDecimals = false; + } else if (octets >= kilobytes) { + unitName = QCoreApplication::translate("Utility", "%L1 KB"); + dataSize /= kilobytes; } - if (value > 9.95) - round = true; + if (dataSize > 9.95) { + showDecimals = true; + } - if (round) - return s.arg(qRound(value)); + if (showDecimals) { + return unitName.arg(qRound(dataSize)); + } - return s.arg(value, 0, 'g', 2); + return unitName.arg(dataSize, 0, 'g', 2); } // Qtified version of get_platforms() in csync_owncloud.c diff --git a/src/common/utility.h b/src/common/utility.h index 9f5f71a5b976a..9357b4908d609 100644 --- a/src/common/utility.h +++ b/src/common/utility.h @@ -57,7 +57,7 @@ namespace Utility { OCSYNC_EXPORT void setupFavLink(const QString &folder); OCSYNC_EXPORT void removeFavLink(const QString &folder); OCSYNC_EXPORT bool writeRandomFile(const QString &fname, int size = -1); - OCSYNC_EXPORT QString octetsToString(qint64 octets); + OCSYNC_EXPORT QString octetsToString(const qint64 octets); OCSYNC_EXPORT QByteArray userAgentString(); OCSYNC_EXPORT QByteArray friendlyUserAgentString(); /**