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 }