File indexing completed on 2024-04-28 05:50:09

0001 /*
0002  * SPDX-License-Identifier: GPL-3.0-or-later
0003  * SPDX-FileCopyrightText: 2020 Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
0004  */
0005 
0006 #include "datetimevalidator.h"
0007 #include "util.h"
0008 
0009 namespace validators
0010 {
0011     std::optional<QDateTime> parseDateTime(const QString &input)
0012     {
0013         QDateTime result;
0014 
0015         result = QDateTime::fromString(input, Qt::ISODateWithMs);
0016         if (result.isValid()) {
0017             return std::optional<QDateTime>(result);
0018         }
0019 
0020         result = QDateTime::fromString(input, Qt::ISODate);
0021         if (result.isValid()) {
0022             return std::optional<QDateTime>(result);
0023         }
0024 
0025         return std::nullopt;
0026     }
0027 
0028     EpochValidator::EpochValidator(const std::function<qint64(void)> clock, QObject *parent) :
0029         QValidator(parent), m_clock(clock)
0030     {
0031     }
0032 
0033     void EpochValidator::fixup(QString &input) const
0034     {
0035         input = validators::simplify_spaces(input);
0036     }
0037 
0038     QValidator::State EpochValidator::validate(QString &input, int &pos) const
0039     {
0040         Q_UNUSED(pos);
0041 
0042         const auto parsed = parseDateTime(input);
0043         if (!parsed) {
0044             return QValidator::Intermediate;
0045         }
0046 
0047         return parsed->toMSecsSinceEpoch() <= m_clock() ? QValidator::Acceptable : QValidator::Invalid;
0048     }
0049 }