diff options
author | David Faure <faure@kde.org> | 2021-03-26 10:05:31 +0100 |
---|---|---|
committer | David Faure <faure@kde.org> | 2021-01-26 10:05:31 +0100 |
commit | b132648084df231c196e726c899761d83d0766cc (patch) | |
tree | 94f43a1d16905aed554d4feafea7642617856b87 /src/core/kconfiggroup.cpp | |
parent | d1c58a842196c229913f908f42e8e3799b0717fc (diff) | |
download | kconfig-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.cpp | 13 |
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); |