aboutsummaryrefslogtreecommitdiff
path: root/src/core/kconfiggroup.cpp
diff options
context:
space:
mode:
authorDavid Faure <faure@kde.org>2021-03-26 10:05:31 +0100
committerDavid Faure <faure@kde.org>2021-01-26 10:05:31 +0100
commitb132648084df231c196e726c899761d83d0766cc (patch)
tree94f43a1d16905aed554d4feafea7642617856b87 /src/core/kconfiggroup.cpp
parentd1c58a842196c229913f908f42e8e3799b0717fc (diff)
downloadkconfig-b132648084df231c196e726c899761d83d0766cc.tar.gz
kconfig-b132648084df231c196e726c899761d83d0766cc.tar.bz2
KConfig: preserve the milliseconds component of QDateTime
I stored a file's lastModified() into KConfig, to compare with it again on next start, and the loss of milliseconds made the code think the timestamps didn't match, even when they did.
Diffstat (limited to 'src/core/kconfiggroup.cpp')
-rw-r--r--src/core/kconfiggroup.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/core/kconfiggroup.cpp b/src/core/kconfiggroup.cpp
index cc4f8d0c..14cbcab8 100644
--- a/src/core/kconfiggroup.cpp
+++ b/src/core/kconfiggroup.cpp
@@ -27,6 +27,7 @@
#include <QUrl>
#include <stdlib.h>
+#include <math.h>
class KConfigGroupPrivate : public QSharedData
{
@@ -325,14 +326,18 @@ QVariant KConfigGroup::convertToQVariant(const char *pKey, const QByteArray &val
return size;
}
case QMetaType::QDateTime: {
- const auto list = asIntList(value);
- if (list.count() != 6) {
+ const auto list = asRealList(value);
+ if (list.count() < 6) {
qCWarning(KCONFIG_CORE_LOG) << errString(pKey, value, aDefault)
<< formatError(6, list.count());
return aDefault;
}
const QDate date(list.at(0), list.at(1), list.at(2));
- const QTime time(list.at(3), list.at(4), list.at(5));
+ const qreal totalSeconds = list.at(5);
+ qreal seconds;
+ const qreal fractional = modf(totalSeconds, &seconds);
+ const qreal milliseconds = round(fractional * 1000.0);
+ const QTime time(list.at(3), list.at(4), seconds, milliseconds);
const QDateTime dt(date, time);
if (!dt.isValid()) {
qCWarning(KCONFIG_CORE_LOG) << errString(pKey, value, aDefault);
@@ -1044,7 +1049,7 @@ void KConfigGroup::writeEntry(const char *key, const QVariant &value,
time.hour(),
time.minute(),
- time.second(),
+ time.second() + time.msec()/1000.0,
};
writeEntry(key, list, flags);