19 #include "validatorfilesize_p.h"
23 using namespace Cutelyst;
26 ValidatorRule(*new ValidatorFileSizePrivate(field, option, min, max, messages, defValKey))
42 bool decimalPointFound =
false;
46 bool byteSignFound =
false;
49 for (
const QChar &ch : value) {
51 const ushort &uc = ch.
unicode();
52 if (((uc > 47) && (uc < 58)) || (ch == decimalPoint)) {
53 if (startsWith == 0) {
56 if (ch == decimalPoint) {
57 if (decimalPointFound) {
61 decimalPointFound =
true;
64 if ((symbolPart.
isEmpty() && (startsWith < 0)) || (!symbolPart.
isEmpty() && (startsWith > 0))) {
70 }
else if ((uc != 9) && (uc != 32)) {
71 if (startsWith == 0) {
74 if ((digitPart.
isEmpty() && (startsWith > 0)) || (!digitPart.
isEmpty() && (startsWith < 0))) {
101 if (multiplier > 0) {
112 if (multiplier > 0) {
123 if (multiplier > 0) {
134 if (multiplier > 0) {
145 if (multiplier > 0) {
156 if (multiplier > 0) {
167 if ((multiplier == 0) || binary) {
181 byteSignFound =
true;
215 double size = locale.
toDouble(digitPart, &ok);
219 if (multiplier > 0) {
220 const double _mult = binary ? std::exp2(multiplier * 10) : std::pow(10.0, multiplier * 3);
223 if ((min >= 1.0) && (size < min)) {
226 if ((max >= 1.0) && (size > max)) {
229 if (valid && fileSize) {
251 if (d->min.isValid()) {
252 min = d->extractDouble(c, params, d->min, &ok);
258 if (ok && d->max.isValid()) {
259 max = d->extractDouble(c, params, d->max, &ok);
268 if (size < static_cast<double>(std::numeric_limits<qulonglong>::max())) {
269 result.
value.
setValue<qulonglong>(
static_cast<qulonglong
>(size + 0.5));
291 if (d->min.isValid() || d->max.isValid()) {
293 error = c->
translate(
"Cutelyst::ValidatorFileSize",
"Invalid file size or file size not within the allowed limits.");
295 error = c->
translate(
"Cutelyst::ValidatorFileSize",
"The value in the “%1” field is either not a valid file size or not within the allowed limits.").
arg(_label);
299 error = c->
translate(
"Cutelyst::ValidatorFileSize",
"Invalid file size.");
301 error = c->
translate(
"Cutelyst::ValidatorFileSize",
"The “%1” field does not contain a valid file size.").
arg(_label);
314 const int sizeType = errorData.
toInt();
318 error = c->
translate(
"Cutelyst::ValidatorFileSize",
"The minimum file size comparison value is not valid.");
320 error = c->
translate(
"Cutelyst::ValidatorFileSize",
"The minimum file size comparison value for the “%1” field is not valid.").
arg(_label);
324 error = c->
translate(
"Cutelyst::ValidatorFileSize",
"The maximum file size comparison value is not valid.");
326 error = c->
translate(
"Cutelyst::ValidatorFileSize",
"The maximum file size comparison value for the “%1” field is not valid.").
arg(_label);
336 c->
setStash(stashKey, c->
locale().
textDirection() == Qt::LeftToRight ? QStringLiteral(
"^\\d+[,.٫]?\\d*\\s*[KkMmGgTt]?[Ii]?[Bb]?") : QStringLiteral(
"[KkMmGgTt]?[Ii]?[Bb]?\\s*\\d+[,.٫]?\\d*"));
QString & append(QChar ch)
QString genericValidationDataError(Context *c, const QVariant &errorData) const override
Returns a generic error messages if validation data is missing or invalid.
QString label(Context *c) const
Returns the human readable field label used for generic error messages.
Stores custom error messages and the input field label.
void setStash(const QString &key, const QVariant &value)
ValidatorFileSize(const QString &field, Option option=NoOption, const QVariant &min=QVariant(), const QVariant &max=QVariant(), const ValidatorMessages &messages=ValidatorMessages(), const QString &defValKey=QString())
Constructs a new file size validator.
QChar decimalPoint() const
double toDouble(const QString &s, bool *ok) const
Option
Options for ValidatorFileSize.
static void inputPattern(Context *c, const QString &stashKey=QStringLiteral("fileSizePattern"))
Puts an HTML input pattern for file sizes into the stash.
QString value(const ParamsMultiMap ¶ms) const
Returns the value of the field from the input params.
int toInt(bool *ok) const
QString validationError(Context *c, const QVariant &errorData=QVariant()) const
Returns a descriptive error message if validation failed.
Qt::LayoutDirection textDirection() const
Base class for all validator rules.
Checks if the input field contains a valid file size string like 1.5 GB.
void defaultValue(Context *c, ValidatorReturnType *result, const char *validatorName) const
I a defValKey has been set in the constructor, this will try to get the default value from the stash ...
void setValue(const T &value)
static bool validate(const QString &value, double min=-1, double max=-1, Option option=NoOption, const QLocale &locale=QLocale(), double *fileSize=nullptr)
Returns true if value is a valid file size string.
QString translate(const char *context, const char *sourceText, const char *disambiguation=nullptr, int n=-1) const
Contains the result of a single input parameter validation.
QString validationDataError(Context *c, const QVariant &errorData=QVariant()) const
Returns an error message if any validation data is missing or invalid.
~ValidatorFileSize() override
Deconstructs the file size validator.
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const
QString genericValidationError(Context *c, const QVariant &errorData=QVariant()) const override
Returns a generic error message if validation failed.