Made a dedicated window modal, fixes #428

This commit is contained in:
emeric
2025-08-08 18:24:42 +02:00
parent 934cb96164
commit 637e40b2cb
12 changed files with 155 additions and 3 deletions
+39
View File
@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8" ?>
<messages xmlns:if="Wt.WTemplate.conditions">
<message id="Lms.Admin.About.template">
<div class="modal fade" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">${tr:Lms.Admin.About.about}</h5>
</div>
<div class="modal-body">
<div class="container-fluid d-grid gap-2">
<div class="row align-items-center">
<div class="col-4">
${tr:Lms.Admin.About.version}
</div>
<div class="col">
${version}
</div>
</div>
<div class="row align-items-center">
<div class="col-4">
${tr:Lms.Admin.About.homepage}
</div>
<div class="col">
<a href="${homepage-link}" target="_blank" class="dropdown-item link-success">${homepage-link}</a>
</div>
</div>
</div>
</div>
<div class="modal-footer">
${ok-btn class="btn btn-primary"}
</div>
</div>
</div>
</div>
</message>
</messages>
+1 -1
View File
@@ -40,11 +40,11 @@
<i class="fa fa-cogs" aria-hidden="true"></i> <i class="fa fa-cogs" aria-hidden="true"></i>
</a> </a>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown"> <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
<li class="dropdown-header">LMS ${version}</li>
<li>${media-libraries class="dropdown-item"}</li> <li>${media-libraries class="dropdown-item"}</li>
<li>${scan-settings class="dropdown-item"}</li> <li>${scan-settings class="dropdown-item"}</li>
<li>${scanner class="dropdown-item"}</li> <li>${scanner class="dropdown-item"}</li>
<li>${users class="dropdown-item"}</li> <li>${users class="dropdown-item"}</li>
<li>${about class="dropdown-item"}</li>
${<if-debug-tools>} ${<if-debug-tools>}
<li class="dropdown-divider"></li> <li class="dropdown-divider"></li>
<li>${debug-tools class="dropdown-item"}</li> <li>${debug-tools class="dropdown-item"}</li>
+6
View File
@@ -52,12 +52,18 @@
<message id="Lms.Error.user-not-found">User not found</message> <message id="Lms.Error.user-not-found">User not found</message>
<!--Administration--> <!--Administration-->
<message id="Lms.Admin.menu-about"><i class="fa fa-fw fa-question-circle" aria-hidden="true"></i> About</message>
<message id="Lms.Admin.menu-debug-tools"><i class="fa fa-fw fa-bug" aria-hidden="true"></i> Debug tools</message> <message id="Lms.Admin.menu-debug-tools"><i class="fa fa-fw fa-bug" aria-hidden="true"></i> Debug tools</message>
<message id="Lms.Admin.menu-media-libraries"><i class="fa fa-fw fa-database" aria-hidden="true"></i> Libraries</message> <message id="Lms.Admin.menu-media-libraries"><i class="fa fa-fw fa-database" aria-hidden="true"></i> Libraries</message>
<message id="Lms.Admin.menu-scan-settings"><i class="fa fa-fw fa-cogs" aria-hidden="true"></i> Scan settings</message> <message id="Lms.Admin.menu-scan-settings"><i class="fa fa-fw fa-cogs" aria-hidden="true"></i> Scan settings</message>
<message id="Lms.Admin.menu-scanner"><i class="fa fa-fw fa-wrench" aria-hidden="true"></i> Scanner</message> <message id="Lms.Admin.menu-scanner"><i class="fa fa-fw fa-wrench" aria-hidden="true"></i> Scanner</message>
<message id="Lms.Admin.menu-users"><i class="fa fa-fw fa-users" aria-hidden="true"></i> Users</message> <message id="Lms.Admin.menu-users"><i class="fa fa-fw fa-users" aria-hidden="true"></i> Users</message>
<!--About-->
<message id="Lms.Admin.About.about">About</message>
<message id="Lms.Admin.About.homepage">Homepage</message>
<message id="Lms.Admin.About.version">Version</message>
<!--MediaLibraries--> <!--MediaLibraries-->
<message id="Lms.Admin.MediaLibraries.media-libraries">Music libraries</message> <message id="Lms.Admin.MediaLibraries.media-libraries">Music libraries</message>
<message id="Lms.Admin.MediaLibrary.create-library">Create library</message> <message id="Lms.Admin.MediaLibrary.create-library">Create library</message>
+6
View File
@@ -52,12 +52,18 @@
<message id="Lms.Error.user-not-found">No existe el usuario</message> <message id="Lms.Error.user-not-found">No existe el usuario</message>
<!--Administration--> <!--Administration-->
<message id="Lms.Admin.menu-about"><i class="fa fa-fw fa-question-circle" aria-hidden="true"></i> Acerca de</message>
<message id="Lms.Admin.menu-debug-tools"><i class="fa fa-fw fa-bug" aria-hidden="true"></i> Herramientas de depuración</message> <message id="Lms.Admin.menu-debug-tools"><i class="fa fa-fw fa-bug" aria-hidden="true"></i> Herramientas de depuración</message>
<message id="Lms.Admin.menu-media-libraries"><i class="fa fa-fw fa-database" aria-hidden="true"></i> Bibliotecas</message> <message id="Lms.Admin.menu-media-libraries"><i class="fa fa-fw fa-database" aria-hidden="true"></i> Bibliotecas</message>
<message id="Lms.Admin.menu-scan-settings"><i class="fa fa-fw fa-cogs" aria-hidden="true"></i> Opciones de escaneo</message> <message id="Lms.Admin.menu-scan-settings"><i class="fa fa-fw fa-cogs" aria-hidden="true"></i> Opciones de escaneo</message>
<message id="Lms.Admin.menu-scanner"><i class="fa fa-fw fa-wrench" aria-hidden="true"></i> Escanear</message> <message id="Lms.Admin.menu-scanner"><i class="fa fa-fw fa-wrench" aria-hidden="true"></i> Escanear</message>
<message id="Lms.Admin.menu-users"><i class="fa fa-fw fa-users" aria-hidden="true"></i> Usuarios</message> <message id="Lms.Admin.menu-users"><i class="fa fa-fw fa-users" aria-hidden="true"></i> Usuarios</message>
<!--About-->
<message id="Lms.Admin.About.about">Acerca de</message>
<message id="Lms.Admin.About.homepage">Página principal</message>
<message id="Lms.Admin.About.version">Versión</message>
<!--MediaLibraries--> <!--MediaLibraries-->
<message id="Lms.Admin.MediaLibraries.media-libraries">Bibliotecas musicales</message> <message id="Lms.Admin.MediaLibraries.media-libraries">Bibliotecas musicales</message>
<message id="Lms.Admin.MediaLibrary.create-library">Crear una biblioteca</message> <message id="Lms.Admin.MediaLibrary.create-library">Crear una biblioteca</message>
+6
View File
@@ -52,12 +52,18 @@
<message id="Lms.Error.user-not-found">L'utilisateur n'existe pas</message> <message id="Lms.Error.user-not-found">L'utilisateur n'existe pas</message>
<!--Administration--> <!--Administration-->
<message id="Lms.Admin.menu-about"><i class="fa fa-fw fa-question-circle" aria-hidden="true"></i> À propos</message>
<message id="Lms.Admin.menu-debug-tools"><i class="fa fa-fw fa-bug" aria-hidden="true"></i> Outils de débogage</message> <message id="Lms.Admin.menu-debug-tools"><i class="fa fa-fw fa-bug" aria-hidden="true"></i> Outils de débogage</message>
<message id="Lms.Admin.menu-media-libraries"><i class="fa fa-fw fa-database" aria-hidden="true"></i> Bibliothèques</message> <message id="Lms.Admin.menu-media-libraries"><i class="fa fa-fw fa-database" aria-hidden="true"></i> Bibliothèques</message>
<message id="Lms.Admin.menu-scan-settings"><i class="fa fa-fw fa-cogs" aria-hidden="true"></i> Paramètres du scan</message> <message id="Lms.Admin.menu-scan-settings"><i class="fa fa-fw fa-cogs" aria-hidden="true"></i> Paramètres du scan</message>
<message id="Lms.Admin.menu-scanner"><i class="fa fa-fw fa-wrench" aria-hidden="true"></i> Scanner</message> <message id="Lms.Admin.menu-scanner"><i class="fa fa-fw fa-wrench" aria-hidden="true"></i> Scanner</message>
<message id="Lms.Admin.menu-users"><i class="fa fa-fw fa-users" aria-hidden="true"></i> Utilisateurs</message> <message id="Lms.Admin.menu-users"><i class="fa fa-fw fa-users" aria-hidden="true"></i> Utilisateurs</message>
<!--About-->
<message id="Lms.Admin.About.about">À propos</message>
<message id="Lms.Admin.About.homepage">Page daccueil</message>
<message id="Lms.Admin.About.version">Version</message>
<!--MediaLibraries--> <!--MediaLibraries-->
<message id="Lms.Admin.MediaLibraries.media-libraries">Bibliothèques musicales</message> <message id="Lms.Admin.MediaLibraries.media-libraries">Bibliothèques musicales</message>
<message id="Lms.Admin.MediaLibrary.create-library">Créer une bibliothèque</message> <message id="Lms.Admin.MediaLibrary.create-library">Créer une bibliothèque</message>
+6
View File
@@ -52,12 +52,18 @@
<message id="Lms.Error.user-not-found">Utente non trovato</message> <message id="Lms.Error.user-not-found">Utente non trovato</message>
<!--Administration--> <!--Administration-->
<message id="Lms.Admin.menu-about"><i class="fa fa-fw fa-question-circle" aria-hidden="true"></i> Informazioni</message>
<message id="Lms.Admin.menu-debug-tools"><i class="fa fa-fw fa-bug" aria-hidden="true"></i> Strumenti di debug</message> <message id="Lms.Admin.menu-debug-tools"><i class="fa fa-fw fa-bug" aria-hidden="true"></i> Strumenti di debug</message>
<message id="Lms.Admin.menu-media-libraries"><i class="fa fa-fw fa-database" aria-hidden="true"></i> Librerie</message> <message id="Lms.Admin.menu-media-libraries"><i class="fa fa-fw fa-database" aria-hidden="true"></i> Librerie</message>
<message id="Lms.Admin.menu-scan-settings"><i class="fa fa-fw fa-cogs" aria-hidden="true"></i> Impostazioni di scansione</message> <message id="Lms.Admin.menu-scan-settings"><i class="fa fa-fw fa-cogs" aria-hidden="true"></i> Impostazioni di scansione</message>
<message id="Lms.Admin.menu-scanner"><i class="fa fa-fw fa-wrench" aria-hidden="true"></i> Scanner</message> <message id="Lms.Admin.menu-scanner"><i class="fa fa-fw fa-wrench" aria-hidden="true"></i> Scanner</message>
<message id="Lms.Admin.menu-users"><i class="fa fa-fw fa-users" aria-hidden="true"></i> Utenti</message> <message id="Lms.Admin.menu-users"><i class="fa fa-fw fa-users" aria-hidden="true"></i> Utenti</message>
<!--About-->
<message id="Lms.Admin.About.about">Informazioni</message>
<message id="Lms.Admin.About.homepage">Pagina iniziale</message>
<message id="Lms.Admin.About.version">Versione</message>
<!--MediaLibraries--> <!--MediaLibraries-->
<message id="Lms.Admin.MediaLibraries.media-libraries">Librerie musicali</message> <message id="Lms.Admin.MediaLibraries.media-libraries">Librerie musicali</message>
<message id="Lms.Admin.MediaLibrary.create-library">Crea libreria</message> <message id="Lms.Admin.MediaLibrary.create-library">Crea libreria</message>
+6
View File
@@ -53,12 +53,18 @@
<message id="Lms.Error.user-not-found">Użytkownik nie odnaleziony</message> <message id="Lms.Error.user-not-found">Użytkownik nie odnaleziony</message>
<!--Administration--> <!--Administration-->
<message id="Lms.Admin.menu-about"><i class="fa fa-fw fa-question-circle" aria-hidden="true"></i> O programie</message>
<message id="Lms.Admin.menu-debug-tools"><i class="fa fa-fw fa-bug" aria-hidden="true"></i> Narzędzia debugowania</message> <message id="Lms.Admin.menu-debug-tools"><i class="fa fa-fw fa-bug" aria-hidden="true"></i> Narzędzia debugowania</message>
<message id="Lms.Admin.menu-media-libraries"><i class="fa fa-fw fa-database" aria-hidden="true"></i> Biblioteki</message> <message id="Lms.Admin.menu-media-libraries"><i class="fa fa-fw fa-database" aria-hidden="true"></i> Biblioteki</message>
<message id="Lms.Admin.menu-scan-settings"><i class="fa fa-fw fa-cogs" aria-hidden="true"></i> Ustawienia skanowania</message> <message id="Lms.Admin.menu-scan-settings"><i class="fa fa-fw fa-cogs" aria-hidden="true"></i> Ustawienia skanowania</message>
<message id="Lms.Admin.menu-scanner"><i class="fa fa-fw fa-wrench" aria-hidden="true"></i> Skaner</message> <message id="Lms.Admin.menu-scanner"><i class="fa fa-fw fa-wrench" aria-hidden="true"></i> Skaner</message>
<message id="Lms.Admin.menu-users"><i class="fa fa-fw fa-users" aria-hidden="true"></i> Użytkownicy</message> <message id="Lms.Admin.menu-users"><i class="fa fa-fw fa-users" aria-hidden="true"></i> Użytkownicy</message>
<!--About-->
<message id="Lms.Admin.About.about">O programie</message>
<message id="Lms.Admin.About.homepage">Strona główna</message>
<message id="Lms.Admin.About.version">Wersja</message>
<!--MediaLibraries--> <!--MediaLibraries-->
<message id="Lms.Admin.MediaLibraries.media-libraries">Biblioteki muzyczne</message> <message id="Lms.Admin.MediaLibraries.media-libraries">Biblioteki muzyczne</message>
<message id="Lms.Admin.MediaLibrary.create-library">Utwórz bibliotekę</message> <message id="Lms.Admin.MediaLibrary.create-library">Utwórz bibliotekę</message>
+6
View File
@@ -58,6 +58,12 @@
<!--About-->
<!--MediaLibraries--> <!--MediaLibraries-->
+1
View File
@@ -16,6 +16,7 @@ add_executable(lms
ui/Utils.cpp ui/Utils.cpp
ui/admin/debug/Database.cpp ui/admin/debug/Database.cpp
ui/admin/debug/Tracing.cpp ui/admin/debug/Tracing.cpp
ui/admin/About.cpp
ui/admin/DebugToolsView.cpp ui/admin/DebugToolsView.cpp
ui/admin/InitWizardView.cpp ui/admin/InitWizardView.cpp
ui/admin/MediaLibrariesView.cpp ui/admin/MediaLibrariesView.cpp
+6 -2
View File
@@ -29,7 +29,6 @@
#include "core/ILogger.hpp" #include "core/ILogger.hpp"
#include "core/ITraceLogger.hpp" #include "core/ITraceLogger.hpp"
#include "core/Service.hpp" #include "core/Service.hpp"
#include "core/Version.hpp"
#include "database/IDb.hpp" #include "database/IDb.hpp"
#include "database/IQueryPlanRecorder.hpp" #include "database/IQueryPlanRecorder.hpp"
#include "database/Session.hpp" #include "database/Session.hpp"
@@ -53,6 +52,7 @@
#include "NotificationContainer.hpp" #include "NotificationContainer.hpp"
#include "PlayQueue.hpp" #include "PlayQueue.hpp"
#include "SettingsView.hpp" #include "SettingsView.hpp"
#include "admin/About.hpp"
#include "admin/DebugToolsView.hpp" #include "admin/DebugToolsView.hpp"
#include "admin/InitWizardView.hpp" #include "admin/InitWizardView.hpp"
#include "admin/MediaLibrariesView.hpp" #include "admin/MediaLibrariesView.hpp"
@@ -77,6 +77,7 @@ namespace lms::ui
const std::string appRoot{ Wt::WApplication::appRoot() }; const std::string appRoot{ Wt::WApplication::appRoot() };
auto res{ std::make_shared<Wt::WMessageResourceBundle>() }; auto res{ std::make_shared<Wt::WMessageResourceBundle>() };
res->use(appRoot + "admin-about");
res->use(appRoot + "admin-db"); res->use(appRoot + "admin-db");
res->use(appRoot + "admin-debugtools"); res->use(appRoot + "admin-debugtools");
res->use(appRoot + "admin-initwizard"); res->use(appRoot + "admin-initwizard");
@@ -461,7 +462,10 @@ namespace lms::ui
if (LmsApp->getUserType() == db::UserType::ADMIN) if (LmsApp->getUserType() == db::UserType::ADMIN)
{ {
navbar->setCondition("if-is-admin", true); navbar->setCondition("if-is-admin", true);
navbar->bindString("version", std::string{ core::getVersion() }, Wt::TextFormat::Plain); auto* about{ navbar->bindNew<Wt::WPushButton>("about", Wt::WString::tr("Lms.Admin.menu-about"), Wt::TextFormat::XHTML) };
about->clicked().connect([] {
showAboutModal();
});
navbar->bindNew<Wt::WAnchor>("media-libraries", Wt::WLink{ Wt::LinkType::InternalPath, "/admin/libraries" }, Wt::WString::tr("Lms.Admin.menu-media-libraries")); navbar->bindNew<Wt::WAnchor>("media-libraries", Wt::WLink{ Wt::LinkType::InternalPath, "/admin/libraries" }, Wt::WString::tr("Lms.Admin.menu-media-libraries"));
navbar->bindNew<Wt::WAnchor>("scan-settings", Wt::WLink{ Wt::LinkType::InternalPath, "/admin/scan-settings" }, Wt::WString::tr("Lms.Admin.menu-scan-settings")); navbar->bindNew<Wt::WAnchor>("scan-settings", Wt::WLink{ Wt::LinkType::InternalPath, "/admin/scan-settings" }, Wt::WString::tr("Lms.Admin.menu-scan-settings"));
navbar->bindNew<Wt::WAnchor>("scanner", Wt::WLink{ Wt::LinkType::InternalPath, "/admin/scanner" }, Wt::WString::tr("Lms.Admin.menu-scanner")); navbar->bindNew<Wt::WAnchor>("scanner", Wt::WLink{ Wt::LinkType::InternalPath, "/admin/scanner" }, Wt::WString::tr("Lms.Admin.menu-scanner"));
+47
View File
@@ -0,0 +1,47 @@
/*
* Copyright (C) 2025 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 <http://www.gnu.org/licenses/>.
*/
#include "ModalManager.hpp"
#include <Wt/WPushButton.h>
#include <Wt/WTemplate.h>
#include "core/Version.hpp"
#include "LmsApplication.hpp"
namespace lms::ui
{
void showAboutModal()
{
auto aboutModal{ std::make_unique<Wt::WTemplate>(Wt::WString::tr("Lms.Admin.About.template")) };
Wt::WWidget* aboutModalPtr{ aboutModal.get() };
aboutModal->addFunction("tr", &Wt::WTemplate::Functions::tr);
aboutModal->bindString("version", std::string{ core::getVersion() }, Wt::TextFormat::Plain);
aboutModal->bindString("homepage-link", "https://github.com/epoupon/lms");
Wt::WPushButton* okBtn{ aboutModal->bindNew<Wt::WPushButton>("ok-btn", Wt::WString::tr("Lms.ok")) };
okBtn->clicked().connect([=] {
LmsApp->getModalManager().dispose(aboutModalPtr);
});
LmsApp->getModalManager().show(std::move(aboutModal));
}
} // namespace lms::ui
+25
View File
@@ -0,0 +1,25 @@
/*
* Copyright (C) 2025 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 <http://www.gnu.org/licenses/>.
*/
#pragma once
namespace lms::ui
{
void showAboutModal();
} // namespace lms::ui