From 73576a99177d98c1a9830e911796677a917b17e9 Mon Sep 17 00:00:00 2001 From: emeric Date: Wed, 18 May 2022 12:47:14 +0200 Subject: [PATCH] Still converting to bootstrap 5. JS Validation fixes --- approot/settings.xml | 12 +++---- src/lms/CMakeLists.txt | 1 + src/lms/ui/SettingsView.cpp | 12 +++---- src/lms/ui/admin/DatabaseSettingsView.cpp | 8 +---- src/lms/ui/common/DirectoryValidator.cpp | 5 +-- src/lms/ui/common/DirectoryValidator.hpp | 2 +- src/lms/ui/common/DoubleValidator.cpp | 41 +++++++++++++++++++++++ src/lms/ui/common/DoubleValidator.hpp | 28 ++++++++++++++++ src/lms/ui/common/LoginNameValidator.cpp | 10 ++++-- src/lms/ui/common/LoginNameValidator.hpp | 2 +- src/lms/ui/common/MandatoryValidator.cpp | 10 ++++-- src/lms/ui/common/MandatoryValidator.hpp | 2 +- src/lms/ui/common/PasswordValidator.cpp | 12 ++++--- src/lms/ui/common/PasswordValidator.hpp | 5 ++- src/lms/ui/common/UUIDValidator.cpp | 13 +++++-- src/lms/ui/common/UUIDValidator.hpp | 2 +- 16 files changed, 125 insertions(+), 40 deletions(-) create mode 100644 src/lms/ui/common/DoubleValidator.cpp create mode 100644 src/lms/ui/common/DoubleValidator.hpp diff --git a/approot/settings.xml b/approot/settings.xml index 83585400..a095b403 100644 --- a/approot/settings.xml +++ b/approot/settings.xml @@ -55,9 +55,9 @@
${replaygain-preamp class="form-control"} dB -
-
- ${replaygain-preamp-info} +
+ ${replaygain-preamp-info} +
@@ -67,9 +67,9 @@
${replaygain-preamp-no-rg-info class="form-control"} dB -
-
- ${replaygain-preamp-no-rg-info-info} +
+ ${replaygain-preamp-no-rg-info-info} +
${} diff --git a/src/lms/CMakeLists.txt b/src/lms/CMakeLists.txt index 3b01a5c6..8e922082 100644 --- a/src/lms/CMakeLists.txt +++ b/src/lms/CMakeLists.txt @@ -18,6 +18,7 @@ add_executable(lms ui/admin/UserView.cpp ui/admin/UsersView.cpp ui/common/DirectoryValidator.cpp + ui/common/DoubleValidator.cpp ui/common/InfiniteScrollingContainer.cpp ui/common/LoadingIndicator.cpp ui/common/LoginNameValidator.cpp diff --git a/src/lms/ui/SettingsView.cpp b/src/lms/ui/SettingsView.cpp index 9b68c141..66aaad6b 100644 --- a/src/lms/ui/SettingsView.cpp +++ b/src/lms/ui/SettingsView.cpp @@ -21,7 +21,6 @@ #include #include -#include #include #include #include @@ -29,8 +28,9 @@ #include #include -#include "common/PasswordValidator.hpp" +#include "common/DoubleValidator.hpp" #include "common/MandatoryValidator.hpp" +#include "common/PasswordValidator.hpp" #include "common/UUIDValidator.hpp" #include "common/ValueStringModel.hpp" @@ -108,12 +108,10 @@ class SettingsModel : public Wt::WFormModel setValidator(TranscodeBitrateField, createMandatoryValidator()); setValidator(TranscodeFormatField, createMandatoryValidator()); setValidator(ReplayGainModeField, createMandatoryValidator()); - auto createPreAmpValidator = [] + auto createPreAmpValidator {[] { - auto preampGainValidator {std::make_unique()}; - preampGainValidator->setRange(MediaPlayer::Settings::ReplayGain::minPreAmpGain, MediaPlayer::Settings::ReplayGain::maxPreAmpGain); - return preampGainValidator; - }; + return createDoubleValidator(MediaPlayer::Settings::ReplayGain::minPreAmpGain, MediaPlayer::Settings::ReplayGain::maxPreAmpGain); + }}; setValidator(ReplayGainPreAmpGainField, createPreAmpValidator()); setValidator(ReplayGainPreAmpGainIfNoInfoField, createPreAmpValidator()); diff --git a/src/lms/ui/admin/DatabaseSettingsView.cpp b/src/lms/ui/admin/DatabaseSettingsView.cpp index 9a145c07..ee291749 100644 --- a/src/lms/ui/admin/DatabaseSettingsView.cpp +++ b/src/lms/ui/admin/DatabaseSettingsView.cpp @@ -69,12 +69,11 @@ class DatabaseSettingsModel : public Wt::WFormModel auto dirValidator {createDirectoryValidator()}; dirValidator->setMandatory(true); - setValidator(MediaDirectoryField, dirValidator); + setValidator(MediaDirectoryField, move(dirValidator)); setValidator(UpdatePeriodField, createMandatoryValidator()); setValidator(UpdateStartTimeField, createMandatoryValidator()); setValidator(RecommendationEngineTypeField, createMandatoryValidator()); - setValidator(TagsField, createTagsValidator()); // populate the model with initial data loadData(); @@ -144,11 +143,6 @@ class DatabaseSettingsModel : public Wt::WFormModel } private: - static std::shared_ptr createTagsValidator() - { - auto v = std::make_shared(); - return v; - } void initializeModels() { diff --git a/src/lms/ui/common/DirectoryValidator.cpp b/src/lms/ui/common/DirectoryValidator.cpp index b55fe38e..f79d57cb 100644 --- a/src/lms/ui/common/DirectoryValidator.cpp +++ b/src/lms/ui/common/DirectoryValidator.cpp @@ -25,8 +25,9 @@ namespace UserInterface { class DirectoryValidator : public Wt::WValidator { - public: + private: Wt::WValidator::Result validate(const Wt::WString& input) const override; + std::string javaScriptValidate() const override { return {}; } }; Wt::WValidator::Result @@ -48,7 +49,7 @@ namespace UserInterface return Wt::WValidator::Result(Wt::ValidationState::Invalid, Wt::WString::tr("Lms.not-a-directory")); } - std::shared_ptr + std::unique_ptr createDirectoryValidator() { return std::make_unique(); diff --git a/src/lms/ui/common/DirectoryValidator.hpp b/src/lms/ui/common/DirectoryValidator.hpp index 08cc26aa..8acec345 100644 --- a/src/lms/ui/common/DirectoryValidator.hpp +++ b/src/lms/ui/common/DirectoryValidator.hpp @@ -23,6 +23,6 @@ namespace UserInterface { - std::shared_ptr createDirectoryValidator(); + std::unique_ptr createDirectoryValidator(); } // namespace UserInterface diff --git a/src/lms/ui/common/DoubleValidator.cpp b/src/lms/ui/common/DoubleValidator.cpp new file mode 100644 index 00000000..89f47220 --- /dev/null +++ b/src/lms/ui/common/DoubleValidator.cpp @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2022 Emeric Poupon + * + * This file is part of LMS. + * + * LMS is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * LMS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with LMS. If not, see . + */ + +#include "DoubleValidator.hpp" + +#include + +namespace UserInterface +{ + class DoubleValidator : public Wt::WDoubleValidator + { + public: + using Wt::WDoubleValidator::WDoubleValidator; + + private: + std::string javaScriptValidate() const override { return {}; } + }; + + std::unique_ptr + createDoubleValidator(double min, double max) + { + auto validator {std::make_unique(min, max)}; + return validator; + } +} // namespace UserInterface diff --git a/src/lms/ui/common/DoubleValidator.hpp b/src/lms/ui/common/DoubleValidator.hpp new file mode 100644 index 00000000..b1da20ab --- /dev/null +++ b/src/lms/ui/common/DoubleValidator.hpp @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2022 Emeric Poupon + * + * This file is part of LMS. + * + * LMS is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * LMS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with LMS. If not, see . + */ + +#pragma once + +#include + +namespace UserInterface +{ + std::unique_ptr createDoubleValidator(double min, double max); +} // namespace UserInterface + diff --git a/src/lms/ui/common/LoginNameValidator.cpp b/src/lms/ui/common/LoginNameValidator.cpp index 5fc121cf..78bacc60 100644 --- a/src/lms/ui/common/LoginNameValidator.cpp +++ b/src/lms/ui/common/LoginNameValidator.cpp @@ -24,10 +24,16 @@ namespace UserInterface { - std::shared_ptr + class LengthValidator : public Wt::WLengthValidator + { + private: + std::string javaScriptValidate() const override { return {}; } + }; + + std::unique_ptr createLoginNameValidator() { - auto v = std::make_unique(); + auto v = std::make_unique(); v->setMandatory(true); v->setMinimumLength(::Database::User::MinNameLength); v->setMaximumLength(::Database::User::MaxNameLength); diff --git a/src/lms/ui/common/LoginNameValidator.hpp b/src/lms/ui/common/LoginNameValidator.hpp index b67c92d5..d4436dae 100644 --- a/src/lms/ui/common/LoginNameValidator.hpp +++ b/src/lms/ui/common/LoginNameValidator.hpp @@ -23,6 +23,6 @@ namespace UserInterface { - std::shared_ptr createLoginNameValidator(); + std::unique_ptr createLoginNameValidator(); } // namespace UserInterface diff --git a/src/lms/ui/common/MandatoryValidator.cpp b/src/lms/ui/common/MandatoryValidator.cpp index ca60f369..a5cb1caf 100644 --- a/src/lms/ui/common/MandatoryValidator.cpp +++ b/src/lms/ui/common/MandatoryValidator.cpp @@ -21,10 +21,16 @@ namespace UserInterface { - std::shared_ptr + class MandatoryValidator : public Wt::WValidator + { + private: + std::string javaScriptValidate() const override { return {}; } + }; + + std::unique_ptr createMandatoryValidator() { - auto v {std::make_shared()}; + auto v {std::make_unique()}; v->setMandatory(true); return v; } diff --git a/src/lms/ui/common/MandatoryValidator.hpp b/src/lms/ui/common/MandatoryValidator.hpp index 6fac9a04..ed074336 100644 --- a/src/lms/ui/common/MandatoryValidator.hpp +++ b/src/lms/ui/common/MandatoryValidator.hpp @@ -23,6 +23,6 @@ namespace UserInterface { - std::shared_ptr createMandatoryValidator(); + std::unique_ptr createMandatoryValidator(); } // namespace UserInterface diff --git a/src/lms/ui/common/PasswordValidator.cpp b/src/lms/ui/common/PasswordValidator.cpp index 2979739e..7160c40d 100644 --- a/src/lms/ui/common/PasswordValidator.cpp +++ b/src/lms/ui/common/PasswordValidator.cpp @@ -36,6 +36,7 @@ namespace UserInterface private: Wt::WValidator::Result validate(const Wt::WString& input) const override; + std::string javaScriptValidate() const override { return {}; } PasswordValidationContextGetFunc _passwordValidationContextGetFunc; }; @@ -61,16 +62,17 @@ namespace UserInterface throw LmsException {"internal error"}; } - std::shared_ptr + std::unique_ptr createPasswordStrengthValidator(PasswordValidationContextGetFunc passwordValidationContextGetFunc) { - return std::make_shared(std::move(passwordValidationContextGetFunc)); + return std::make_unique(std::move(passwordValidationContextGetFunc)); } class PasswordCheckValidator : public Wt::WValidator { - public: + private: Wt::WValidator::Result validate(const Wt::WString& input) const override; + std::string javaScriptValidate() const override { return {}; } }; Wt::WValidator::Result @@ -96,10 +98,10 @@ namespace UserInterface throw LmsException {"InternalError"}; } - std::shared_ptr + std::unique_ptr createPasswordCheckValidator() { - return std::make_shared(); + return std::make_unique(); } } // namespace UserInterface diff --git a/src/lms/ui/common/PasswordValidator.hpp b/src/lms/ui/common/PasswordValidator.hpp index e3b5a708..aba53bb8 100644 --- a/src/lms/ui/common/PasswordValidator.hpp +++ b/src/lms/ui/common/PasswordValidator.hpp @@ -22,15 +22,14 @@ #include #include -#include "services/database/Types.hpp" #include "services/auth/Types.hpp" namespace UserInterface { using PasswordValidationContextGetFunc = std::function<::Auth::PasswordValidationContext()>; - std::shared_ptr createPasswordStrengthValidator(PasswordValidationContextGetFunc passwordValidationContextGetFunc); + std::unique_ptr createPasswordStrengthValidator(PasswordValidationContextGetFunc passwordValidationContextGetFunc); // Check current user password - std::shared_ptr createPasswordCheckValidator(); + std::unique_ptr createPasswordCheckValidator(); } // namespace UserInterface diff --git a/src/lms/ui/common/UUIDValidator.cpp b/src/lms/ui/common/UUIDValidator.cpp index a333c7be..3399ae82 100644 --- a/src/lms/ui/common/UUIDValidator.cpp +++ b/src/lms/ui/common/UUIDValidator.cpp @@ -23,9 +23,18 @@ namespace UserInterface { - std::shared_ptr + class RegExpValidator : public Wt::WRegExpValidator + { + public: + using Wt::WRegExpValidator::WRegExpValidator; + + private: + std::string javaScriptValidate() const override { return {}; } + }; + + std::unique_ptr createUUIDValidator() { - return std::make_unique("[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}"); + return std::make_unique("[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}"); } } // namespace UserInterface diff --git a/src/lms/ui/common/UUIDValidator.hpp b/src/lms/ui/common/UUIDValidator.hpp index e6120e5d..9593b08a 100644 --- a/src/lms/ui/common/UUIDValidator.hpp +++ b/src/lms/ui/common/UUIDValidator.hpp @@ -23,6 +23,6 @@ namespace UserInterface { - std::shared_ptr createUUIDValidator(); + std::unique_ptr createUUIDValidator(); } // namespace UserInterface