Initial support for multi library, still WIP

This commit is contained in:
emeric
2024-01-25 00:01:11 +01:00
parent f5f577af52
commit 0ed3f1ba79
85 changed files with 3076 additions and 1445 deletions
+47
View File
@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8" ?>
<messages xmlns:if="Wt.WTemplate.conditions">
<message id="Lms.Admin.MediaLibraries.template">
<legend>${tr:Lms.Admin.MediaLibraries.media-libraries}</legend>
${libraries class="d-grid gap-1 mb-3 Lms-row-container"}
${add-btn class="btn btn-primary"}
</message>
<message id="Lms.Admin.MediaLibraries.template.entry">
<div class="d-flex align-items-center Lms-bg-dark-hover">
<div class="row align-items-center flex-fill">
<div class="col-12 col-md-4">
<div class="p-2">
${name class="d-block text-truncate"}
</div>
</div>
<div class="col-12 col-md-8">
<div class="p-2 d-none d-md-block">
${path class="d-block text-truncate"}
</div>
</div>
</div>
<div class="p-2 d-flex">
${edit-btn class="btn btn-sm btn-outline-secondary border-0"}
${del-btn class="btn btn-sm btn-outline-danger border-0"}
</div>
</div>
</message>
<message id="Lms.Admin.MediaLibraries.template.delete-library">
<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.MediaLibrary.del-library-confirm}</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-footer">
${del-btn class="btn btn-danger me-1"}${cancel-btn class="btn btn-secondary"}
</div>
</div>
</div>
</div>
</message>
</messages>
+44
View File
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8" ?>
<messages xmlns:if="Wt.WTemplate.conditions">
<message id="Lms.Admin.MediaLibrary.template">
<div class="modal fade" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">${title}</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form>
<div class="row">
<div class="col-12">
<label class="form-label" for="${id:name}">
${tr:Lms.Admin.MediaLibrary.name}
</label>
${name class="form-control"}
<div class="invalid-feedback">
${name-info}
</div>
</div>
<div class="col-12">
<label class="form-label" for="${id:directory}">
${tr:Lms.Admin.MediaLibrary.root-path}
</label>
${directory class="form-control"}
<div class="invalid-feedback">
${directory-info}
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
${save-btn class="btn btn-primary me-1"}${cancel-btn class="btn btn-secondary"}
</div>
</div>
</div>
</div>
</message>
</messages>
+34 -38
View File
@@ -2,46 +2,42 @@
<messages xmlns:if="Wt.WTemplate.conditions">
<message id="Lms.Admin.ScannerController.template">
<div class="card">
<h5 class="card-header">${tr:Lms.Admin.ScannerController.scanner}</h5>
<div class="card-body">
<form>
<div class="row g-3">
<div class="col-lg-6">
<label class="form-label" for="${id:status}">
${tr:Lms.Admin.ScannerController.status}
</label>
${status class="form-control"}
</div>
<div class="col-lg-6">
<label class="form-label" for="${id:step-status}">
${tr:Lms.Admin.ScannerController.step-status}
</label>
${step-status class="form-control"}
</div>
<div class="col-12">
<label class="form-label" for="{id:last-scan}">
${tr:Lms.Admin.ScannerController.last-scan}
</label>
<div class="input-group">
${last-scan class="form-control"}
${report-btn class="btn btn-outline-info"}
</div>
</div>
<div class="col-12">
<div class="btn-group">
${scan-btn class="btn btn-primary"}
<button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
</button>
<ul class="dropdown-menu">
<li>${full-scan-btn class="dropdown-item"}</li>
</ul>
</div>
</div>
<form>
<legend>${tr:Lms.Admin.ScannerController.scanner}</legend>
<div class="row g-3">
<div class="col-lg-6">
<label class="form-label" for="${id:status}">
${tr:Lms.Admin.ScannerController.status}
</label>
${status class="form-control"}
</div>
<div class="col-lg-6">
<label class="form-label" for="${id:step-status}">
${tr:Lms.Admin.ScannerController.step-status}
</label>
${step-status class="form-control"}
</div>
<div class="col-12">
<label class="form-label" for="{id:last-scan}">
${tr:Lms.Admin.ScannerController.last-scan}
</label>
<div class="input-group">
${last-scan class="form-control"}
${report-btn class="btn btn-outline-info"}
</div>
</form>
</div>
<div class="col-12">
<div class="btn-group">
${scan-btn class="btn btn-primary"}
<button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
</button>
<ul class="dropdown-menu">
<li>${full-scan-btn class="dropdown-item"}</li>
</ul>
</div>
</div>
</div>
</div>
</form>
</message>
</messages>
@@ -5,17 +5,8 @@
<message id="Lms.Admin.Database.template">
<form class="row g-3">
<legend>${tr:Lms.Admin.Database.database}</legend>
<div class="col-12">
<label class="form-label" for="${id:media-directory}">
${tr:Lms.Admin.Database.path}
</label>
${media-directory class="form-control"}
<div class="invalid-feedback">
${media-directory-info}
</div>
</div>
<div class="col-lg-6">
<legend>${tr:Lms.Admin.Database.scan-settings}</legend>
<div class="col-sm-6">
<label class="form-label" for="${id:update-period}">
${tr:Lms.Admin.Database.update-period}
</label>
@@ -24,7 +15,7 @@
${update-period-info"}
</div>
</div>
<div class="col-lg-6">
<div class="col-sm-6">
<label class="form-label" for="${id:update-start-time}">
${tr:Lms.Admin.Database.update-start-time}
</label>
@@ -33,7 +24,6 @@
${update-start-time-info}
</div>
</div>
<legend>${tr:Lms.Admin.Database.scan-options}</legend>
<div class="col-12">
<label class="form-label" for="${id:similarity-engine-type}">
${tr:Lms.Admin.Database.similarity-engine-type}
@@ -53,11 +43,10 @@
</div>
</div>
<div class="col-12">
${apply-btn class="btn btn-primary me-1"}${discard-btn class="btn btn-secondary"}
${save-btn class="btn btn-primary me-1"}${discard-btn class="btn btn-secondary"}
</div>
</form>
<br/>
${scanner-controller}
</message>
</messages>
+1 -1
View File
@@ -2,7 +2,7 @@
<messages xmlns:if="Wt.WTemplate.conditions">
<message id="Lms.Admin.Users.template">
<h3>${tr:Lms.Admin.Users.users}</h3>
<legend>${tr:Lms.Admin.Users.users}</legend>
${users class="d-grid gap-1 mb-3 Lms-row-container"}
${<if-can-create-user>}
${add-btn class="btn btn-primary"}
+3 -1
View File
@@ -45,7 +45,9 @@
<i class="fa fa-cogs" aria-hidden="true"></i>
</a>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
<li>${database class="dropdown-item"}</li>
<li>${media-libraries class="dropdown-item"}</li>
<li>${scan-settings class="dropdown-item"}</li>
<li>${scanner class="dropdown-item"}</li>
<li>${users class="dropdown-item"}</li>
</ul>
</li>
+23 -9
View File
@@ -5,7 +5,6 @@
<!--Common-->
<message id="Lms.add">Add</message>
<message id="Lms.administration">Administration</message>
<message id="Lms.apply">Apply</message>
<message id="Lms.cancel">Cancel</message>
<message id="Lms.clusters">Tags</message>
<message id="Lms.create">Create</message>
@@ -16,7 +15,6 @@
<message id="Lms.loading">Loading...</message>
<message id="Lms.login">Login</message>
<message id="Lms.logout"><i class="fa fa-fw fa-sign-out" aria-hidden="true"></i> Logout</message>
<message id="Lms.not-a-directory">Not a directory</message>
<message id="Lms.ok">Ok</message>
<message id="Lms.password">Password</message>
<message id="Lms.password-bad-login-combination">Bad login / password combination</message>
@@ -29,6 +27,7 @@
<message id="Lms.passwords-dont-match">Passwords don't match</message>
<message id="Lms.quit-other-session">Another session has been open. Reopen this one?</message>
<message id="Lms.save">Save</message>
<message id="Lms.settings-saved">Settings saved!</message>
<message id="Lms.track-count">
<plural case="0">{1} track</plural>
<plural case="1">{1} tracks</plural>
@@ -45,20 +44,36 @@
<message id="Lms.Error.user-not-found">User not found</message>
<!--Administration-->
<message id="Lms.Admin.menu-media-libraries"><i class="fa fa-fw fa-database" aria-hidden="true"></i> Music 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-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>
<!--MediaLibraries-->
<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.del-library-confirm">Delete library?</message>
<message id="Lms.Admin.MediaLibrary.edit-library">Edit library</message>
<message id="Lms.Admin.MediaLibrary.library-created">Library created!</message>
<message id="Lms.Admin.MediaLibrary.library-deleted">Library deleted!</message>
<message id="Lms.Admin.MediaLibrary.name">Library name</message>
<message id="Lms.Admin.MediaLibrary.name-already-exists">Library name already exists</message>
<message id="Lms.Admin.MediaLibrary.path-must-be-absolute">Path must be absolute</message>
<message id="Lms.Admin.MediaLibrary.path-must-not-overlap">Path must not overlap that of another library</message>
<message id="Lms.Admin.MediaLibrary.path-must-be-existing-directory">Path must be an existing directory</message>
<message id="Lms.Admin.MediaLibrary.root-path">Root directory</message>
<message id="Lms.Admin.Database.add-library">Add library</message>
<message id="Lms.Admin.Database.daily">Daily</message>
<message id="Lms.Admin.Database.database">Music collection</message>
<message id="Lms.Admin.Database.extra-tags-to-scan">Extra tags to scan (use <kbd>;</kbd> as separator)</message>
<message id="Lms.Admin.Database.hourly">Hourly</message>
<message id="Lms.Admin.Database.immediate-scan">Scan now!</message>
<message id="Lms.Admin.Database.monthly">Monthly</message>
<message id="Lms.Admin.Database.menu-database"><i class="fa fa-fw fa-database" aria-hidden="true"></i> Music collection</message>
<message id="Lms.Admin.Database.never">Never</message>
<message id="Lms.Admin.Database.path">Media root directory</message>
<message id="Lms.Admin.Database.path-help">Directories containing a <code>.lmsignore</code> file are skipped</message>
<message id="Lms.Admin.Database.scan-aborted">Scan aborted!</message>
<message id="Lms.Admin.Database.scan-complete">Scan complete: {1} total files, {2} additions, {3} updates, {4} deletions, {5} duplicates, {6} errors</message>
<message id="Lms.Admin.Database.scan-launched">Scan launched!</message>
<message id="Lms.Admin.Database.scan-options">Scan options</message>
<message id="Lms.Admin.Database.settings-saved">New settings saved!</message>
<message id="Lms.Admin.Database.scan-settings">Scan settings</message>
<message id="Lms.Admin.Database.similarity-engine-type">Similarity engine</message>
<message id="Lms.Admin.Database.similarity-engine-type.clusters">Tag-based</message>
<message id="Lms.Admin.Database.similarity-engine-type.none">None</message>
@@ -100,7 +115,6 @@
<message id="Lms.Admin.Users.del-user-confirm">Delete user?</message>
<message id="Lms.Admin.Users.demo">Demo</message>
<message id="Lms.Admin.Users.users">Users</message>
<message id="Lms.Admin.Users.menu-users"><i class="fa fa-fw fa-users" aria-hidden="true"></i> Users</message>
<!--User-->
<message id="Lms.Admin.User.demo-account">Demo account</message>
+1 -3
View File
@@ -5,7 +5,6 @@
<!--Common-->
<message id="Lms.add">Ajouter</message>
<message id="Lms.administration">Administration</message>
<message id="Lms.apply">Appliquer</message>
<message id="Lms.cancel">Annuler</message>
<message id="Lms.clusters">Tags</message>
<message id="Lms.create">Créer</message>
@@ -54,10 +53,9 @@
<message id="Lms.Admin.Database.menu-database"><i class="fa fa-fw fa-database" aria-hidden="true"></i> Collection de musiques</message>
<message id="Lms.Admin.Database.never">Jamais</message>
<message id="Lms.Admin.Database.path">Dossier racine des fichiers de musique</message>
<message id="Lms.Admin.Database.path-help">Les dossiers contenant un fichier <code>.lmsignore</code> sont ignorés</message>
<message id="Lms.Admin.Database.scan-complete">Scan terminé : {1} fichiers, {2} ajouts, {3} mises à jour, {4} suppressions, {5} duplicatas, {6} erreurs</message>
<message id="Lms.Admin.Database.scan-launched">Scan lancé !</message>
<message id="Lms.Admin.Database.scan-options">Options </message>
<message id="Lms.Admin.Database.scan-settings">Options </message>
<message id="Lms.Admin.Database.settings-saved">Nouveaux paramètres sauvegardés !</message>
<message id="Lms.Admin.Database.similarity-engine-type">Moteur de similarité</message>
<message id="Lms.Admin.Database.similarity-engine-type.clusters">Basé sur les tags</message>
+1 -2
View File
@@ -5,7 +5,6 @@
<!--Common-->
<message id="Lms.add">Aggiungi</message>
<message id="Lms.administration">Amministrazione</message>
<message id="Lms.apply">Applica</message>
<message id="Lms.cancel">Annulla</message>
<message id="Lms.clusters">Tags</message>
<message id="Lms.create">Crea</message>
@@ -57,7 +56,7 @@
<message id="Lms.Admin.Database.scan-complete">Scansione completata: {1} file totali, {2} aggiunti, {3} aggiornati, {4} eliminati, {5} duplicati, {6} errati</message>
<message id="Lms.Admin.Database.scan-launched">Scansione avviata!</message>
<message id="Lms.Admin.Database.scan-options">Impostazioni scansione</message>
<message id="Lms.Admin.Database.scan-settings">Impostazioni scansione</message>
<message id="Lms.Admin.Database.settings-saved">Impostazioni salvate!</message>
+1 -3
View File
@@ -5,7 +5,6 @@
<!--Common-->
<message id="Lms.add">添加</message>
<message id="Lms.administration">管理</message>
<message id="Lms.apply">应用</message>
<message id="Lms.cancel">取消</message>
<message id="Lms.clusters">标签</message>
<message id="Lms.create">新建</message>
@@ -54,10 +53,9 @@
<message id="Lms.Admin.Database.menu-database"><i class="fa fa-fw fa-database" aria-hidden="true"></i> 音乐收藏</message>
<message id="Lms.Admin.Database.never">从不</message>
<message id="Lms.Admin.Database.path">媒体根目录</message>
<message id="Lms.Admin.Database.path-help">包含 <code>.lmsignore</code> 文件的目录将会被跳过</message>
<message id="Lms.Admin.Database.scan-complete">扫描完成:总文件 {1},添加文件 {2},更新文件 {3},删除文件 {4},重复文件 {5},错误文件 {6}</message>
<message id="Lms.Admin.Database.scan-launched">扫描已完成!</message>
<message id="Lms.Admin.Database.scan-options">扫描选项</message>
<message id="Lms.Admin.Database.scan-settings">扫描选项</message>
<message id="Lms.Admin.Database.settings-saved">新设置已保存!</message>
+1
View File
@@ -14,6 +14,7 @@
${loading-indicator}
</message>
<message id="Lms.template.trash-btn"><i class="fa fa-fw fa-trash"></i></message>
<message id="Lms.template.delete-btn"><i class="fa fa-fw fa-times"></i></message>
<message id="Lms.template.edit-btn"><i class="fa fa-fw fa-edit"></i></message>
<message id="Lms.template.more-btn"><i class="fa fa-fw fa-ellipsis-v"></i></message>
+1 -1
View File
@@ -177,7 +177,7 @@
</div>
${</if-has-change-password>}
<div class="col-12">
${apply-btn class="btn btn-primary me-1"}${discard-btn class="btn btn-secondary"}
${save-btn class="btn btn-primary me-1"}${discard-btn class="btn btn-secondary"}
</div>
</form>
</message>