Reorganized the UI/xml part to better handle next steps

This commit is contained in:
emeric
2018-03-14 13:17:04 +01:00
parent 98f64e62f9
commit bc26ddae50
37 changed files with 257 additions and 228 deletions
+6 -4
View File
@@ -17,16 +17,18 @@ lms_images_DATA = \
docroot/images/unknown-artist.jpg docroot/images/unknown-artist.jpg
lms_approot_DATA = \ lms_approot_DATA = \
approot/artists.xml \ approot/admin-database.xml \
approot/admin-wizard.xml \
approot/artist.xml \ approot/artist.xml \
approot/artists.xml \
approot/explore.xml \
approot/home.xml \
approot/login.xml \ approot/login.xml \
approot/mediaplayer.xml \ approot/mediaplayer.xml \
approot/messages.xml \ approot/messages.xml \
approot/playqueue.xml \ approot/playqueue.xml \
approot/releases.xml \
approot/release.xml \ approot/release.xml \
approot/settings-database.xml \ approot/releases.xml \
approot/settings-admin-wizard.xml \
approot/templates.xml \ approot/templates.xml \
approot/tracks.xml approot/tracks.xml
@@ -3,13 +3,13 @@
<messages xmlns:if="Wt.WTemplate.conditions"> <messages xmlns:if="Wt.WTemplate.conditions">
<!--FORMS message blocks--> <!--FORMS message blocks-->
<message id="template-settings-database"> <message id="Lms.Admin.Database.template">
<legend>${tr:msg-settings-database}</legend> <legend>${tr:Lms.Admin.Database.database}</legend>
<div class="form-horizontal"> <div class="form-horizontal">
<div class="form-group"> <div class="form-group">
<label class="control-label col-sm-2" for="${id:media-directory}"> <label class="control-label col-sm-2" for="${id:media-directory}">
${tr:msg-settings-media-directory} ${tr:Lms.Admin.Database.path}
</label> </label>
<div class="col-sm-5"> <div class="col-sm-5">
${media-directory} ${media-directory}
@@ -21,7 +21,7 @@
<div class="form-group"> <div class="form-group">
<label class="control-label col-sm-2" for="${id:update-period}"> <label class="control-label col-sm-2" for="${id:update-period}">
${tr:msg-settings-update-period} ${tr:Lms.Admin.Database.update-period}
</label> </label>
<div class="col-sm-5"> <div class="col-sm-5">
${update-period} ${update-period}
@@ -33,7 +33,7 @@
<div class="form-group"> <div class="form-group">
<label class="control-label col-sm-2" for="${id:update-start-time}"> <label class="control-label col-sm-2" for="${id:update-start-time}">
${tr:msg-settings-update-start-time} ${tr:Lms.Admin.Database.update-start-time}
</label> </label>
<div class="col-sm-5"> <div class="col-sm-5">
${update-start-time} ${update-start-time}
@@ -3,15 +3,15 @@
<messages xmlns:if="Wt.WTemplate.conditions"> <messages xmlns:if="Wt.WTemplate.conditions">
<!--FORMS message blocks--> <!--FORMS message blocks-->
<message id="template-settings-admin-wizard"> <message id="Lms.AdminWizard.template">
<div class="container"> <div class="container">
<div class="page-header"> <div class="page-header">
<h2>${tr:msg-settings-admin-account}</h2> <h2>${tr:Lms.AdminWizard.header}</h2>
</div> </div>
<div class="form-horizontal"> <div class="form-horizontal">
<div class="form-group"> <div class="form-group">
<label class="control-label col-sm-2" for="${id:admin-login}"> <label class="control-label col-sm-2" for="${id:admin-login}">
${tr:msg-login} ${tr:Lms.login}
</label> </label>
<div class="col-sm-5"> <div class="col-sm-5">
${admin-login} ${admin-login}
@@ -23,7 +23,7 @@
<div class="form-group"> <div class="form-group">
<label class="control-label col-sm-2" for="${id:password}"> <label class="control-label col-sm-2" for="${id:password}">
${tr:msg-password} ${tr:Lms.password}
</label> </label>
<div class="col-sm-5"> <div class="col-sm-5">
${password} ${password}
@@ -35,7 +35,7 @@
<div class="form-group"> <div class="form-group">
<label class="control-label col-sm-2" for="${id:password-confirm}"> <label class="control-label col-sm-2" for="${id:password-confirm}">
${tr:msg-password-confirm} ${tr:Lms.password-confirm}
</label> </label>
<div class="col-sm-5"> <div class="col-sm-5">
${password-confirm} ${password-confirm}
+6 -6
View File
@@ -2,15 +2,15 @@
<messages xmlns:if="Wt.WTemplate.conditions"> <messages xmlns:if="Wt.WTemplate.conditions">
<!--FORMS message blocks--> <!--FORMS message blocks-->
<message id="btn-artist-play-btn"> <message id="Lms.Explore.Artist.play">
<i class="fa fa-play"></i> <i class="fa fa-play"></i>
</message> </message>
<message id="btn-artist-add-btn"> <message id="Lms.Explore.Artist.add">
<i class="fa fa-plus"></i> <i class="fa fa-plus"></i>
</message> </message>
<message id="template-artist"> <message id="Lms.Explore.Artist.template">
<div class="page-header"> <div class="page-header">
<h2>${name}</h2> <h2>${name}</h2>
${clusters} ${clusters}
@@ -19,11 +19,11 @@
${releases class="list-group"} ${releases class="list-group"}
</message> </message>
<message id="template-artist-cluster-entry"> <message id="Lms.Explore.Artist.template.cluster-entry">
<span class="badge">${name}</span> <span class="badge">${name}</span>
</message> </message>
<message id="template-artist-entry"> <message id="Lms.Explore.Artist.template.entry">
<div class="media list-group-item"> <div class="media list-group-item">
<div class="pull-left media-middle"> <div class="pull-left media-middle">
${cover class="media-object"} ${cover class="media-object"}
@@ -31,7 +31,7 @@
<div class="media-body"> <div class="media-body">
<h4 class="media-heading">${name}</h4> <h4 class="media-heading">${name}</h4>
</div> </div>
${<if-has-various-artists>}${tr:msg-various-artists}${</if-has-various-artists>} ${<if-has-various-artists>}${tr:Lms.Explore.various-artists}${</if-has-various-artists>}
<h4>${<if-has-year>}${year}${</if-has-year>}${<if-has-orig-year>} (${orig-year})${</if-has-orig-year>}</h4> <h4>${<if-has-year>}${year}${</if-has-year>}${<if-has-orig-year>} (${orig-year})${</if-has-orig-year>}</h4>
${play-btn}${add-btn} ${play-btn}${add-btn}
</div> </div>
+3 -3
View File
@@ -2,9 +2,9 @@
<messages xmlns:if="Wt.WTemplate.conditions"> <messages xmlns:if="Wt.WTemplate.conditions">
<!--FORMS message blocks--> <!--FORMS message blocks-->
<message id="template-artists"> <message id="Lms.Explore.Artists.template">
<div class="page-header"> <div class="page-header">
<h2>${tr:msg-artists}</h2> <h2>${tr:Lms.Explore.artists}</h2>
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="input-group"> <div class="input-group">
@@ -16,7 +16,7 @@
${show-more} ${show-more}
</message> </message>
<message id="template-artists-entry"> <message id="Lms.Explore.Artists.template.entry">
<div class="list-group-item"> <div class="list-group-item">
<span class="badge">${nb-release}</span> <span class="badge">${nb-release}</span>
${name} ${name}
+45
View File
@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8" ?>
<messages xmlns:if="Wt.WTemplate.conditions">
<message id="Lms.Explore.template">
${filters}
${contents}
</message>
<message id="Lms.Explore.template.show-more">
${tr:Lms.Explore.show-more}
</message>
<message id="Lms.Explore.template.filters">
<div class="form-group">
${add-filter}${filters}
</div>
</message>
<message id="Lms.Explore.template.add-filter">
<div class="form-horizontal">
<div class="form-group">
<label class="control-label col-sm-2" for="${id:type}">
${tr:Lms.Explore.type}
</label>
<div class="col-sm-10">
${type}
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="${id:value}">
${tr:Lms.Explore.value}
</label>
<div class="col-sm-10">
${value}
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
${add-btn class="btn-primary"} ${cancel-btn}
</div>
</div>
</div>
</message>
</messages>
+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" ?>
<messages xmlns:if="Wt.WTemplate.conditions">
<message id="Lms.Home.template">
${tr:Lms.Home.welcome}
</message>
</messages>
+5 -5
View File
@@ -2,15 +2,15 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<messages xmlns:if="Wt.WTemplate.conditions"> <messages xmlns:if="Wt.WTemplate.conditions">
<message id="template-login"> <message id="Lms.Auth.template">
<div class="container"> <div class="container">
<div class="page-header"> <div class="page-header">
<h2>${tr:msg-login-welcome}</h2> <h2>${tr:Lms.Auth.welcome}</h2>
</div> </div>
<div class="form-horizontal"> <div class="form-horizontal">
<div class="form-group"> <div class="form-group">
<label class="control-label col-sm-2" for="${id:user-name}"> <label class="control-label col-sm-2" for="${id:user-name}">
${tr:msg-login} ${tr:Lms.login}
</label> </label>
<div class="col-sm-5"> <div class="col-sm-5">
${user-name} ${user-name}
@@ -22,7 +22,7 @@
<div class="form-group"> <div class="form-group">
<label class="control-label col-sm-2" for="${id:password}"> <label class="control-label col-sm-2" for="${id:password}">
${tr:msg-password} ${tr:Lms.password}
</label> </label>
<div class="col-sm-5"> <div class="col-sm-5">
${password} ${password}
@@ -34,7 +34,7 @@
<div class="form-group"> <div class="form-group">
<label class="control-label col-sm-2" for="${id:remember-me}"> <label class="control-label col-sm-2" for="${id:remember-me}">
${tr:msg-remember-me} ${tr:Lms.Auth.remember-me}
</label> </label>
<div class="col-sm-5"> <div class="col-sm-5">
${remember-me} ${remember-me}
+49 -41
View File
@@ -1,54 +1,62 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<messages xmlns:if="Wt.WTemplate.conditions"> <messages xmlns:if="Wt.WTemplate.conditions">
<!--FORMS message blocks-->
<!--Common-->
<message id="Lms.add">Add</message>
<message id="Lms.apply">Apply</message>
<message id="Lms.discard">Discard</message>
<message id="Lms.administration">Administration</message>
<message id="Lms.cancel">Cancel</message>
<message id="Lms.create">Create</message>
<message id="Lms.login">Login</message>
<message id="Lms.logout">Logout</message>
<message id="Lms.not-a-directory">Not a directory</message>
<message id="Lms.password">Password</message>
<message id="Lms.password-confirm">Confirm password</message>
<message id="Lms.playqueue">Play Queue</message>
<message id="Lms.quit-confirm">Are you sure?</message>
<message id="Lms.settings">Settings</message>
<!--Administration-->
<message id="Lms.Admin.Database.daily">Daily</message>
<message id="Lms.Admin.Database.database">Database</message>
<message id="Lms.Admin.Database.immediate-scan">Scan now!</message>
<message id="Lms.Admin.Database.monthly">Monthly</message>
<message id="Lms.Admin.Database.never">Never</message>
<message id="Lms.Admin.Database.path">Media root directory</message>
<message id="Lms.Admin.Database.scan-complete">Scan complete: {1} total files, {2} additions, {3} deletions, {4} duplicates, {5} errors</message>
<message id="Lms.Admin.Database.scan-launched">Scan launched!</message>
<message id="Lms.Admin.Database.settings-saved">New settings saved!</message>
<message id="Lms.Admin.Database.update-period">Update period</message>
<message id="Lms.Admin.Database.update-start-time">Update start time</message>
<message id="Lms.Admin.Database.weekly">Weekly</message>
<message id="msg-home-welcome"><h2>Welcome!</h2></message> <!--Admin Wizard-->
<message id="Lms.AdminWizard.done">Administration account created. Please refresh to continue!</message>
<message id="Lms.AdminWizard.header">Create administrator account</message>
<message id="msg-various-artists">Various artists</message> <!--Auth-->
<message id="msg-artists">Artists</message> <message id="Lms.Auth.remember-me">Remember me</message>
<message id="msg-releases">Albums</message> <message id="Lms.Auth.welcome">Welcome!</message>
<message id="msg-tracks">Tracks</message>
<message id="msg-playqueue">Play Queue</message>
<message id="msg-filter-add">Add filter</message>
<message id="msg-search-placeholder">Search...</message>
<message id="msg-add">Add</message> <!--Home-->
<message id="msg-cancel">Cancel</message> <message id="Lms.Home.welcome"><h2>Welcome!</h2></message>
<message id="msg-filter-type">Type</message> <!--Explore-->
<message id="msg-filter-value">Value</message> <message id="Lms.Explore.add-filter">Add filter</message>
<message id="Lms.Explore.artists">Artists</message>
<message id="Lms.Explore.releases">Albums</message>
<message id="Lms.Explore.search-placeholder">Search...</message>
<message id="Lms.Explore.show-more">Show more</message>
<message id="Lms.Explore.tracks">Tracks</message>
<message id="Lms.Explore.type">Type</message>
<message id="Lms.Explore.value">Value</message>
<message id="Lms.Explore.various-artists">Various artists</message>
<message id="msg-show-more">Show more</message>
<message id="msg-login">Login</message>
<message id="msg-password">Password</message>
<message id="msg-password-confirm">Verify password</message>
<message id="msg-create">Create</message>
<message id="msg-remember-me">Remember me</message> <!--Settings-->
<message id="msg-login-welcome">Welcome!</message>
<message id="msg-logout">Logout</message>
<message id="msg-settings-admin-account">Administrator account</message>
<message id="msg-settings-first-connection-done">Account created. Please refresh to continue!</message>
<message id="msg-settings">Settings</message>
<message id="msg-settings-database">Database</message>
<message id="msg-settings-media-directory">Media root directory</message>
<message id="msg-settings-update-period">Update period</message>
<message id="msg-settings-update-start-time">Update start time</message>
<message id="msg-settings-update-start-time">Update start time</message>
<message id="msg-update-period-never">Never</message>
<message id="msg-update-period-daily">Daily</message>
<message id="msg-update-period-weekly">Weekly</message>
<message id="msg-update-period-monthly">Monthly</message>
<message id="msg-error-not-a-directory">Not a directory</message>
<message id="msg-btn-apply">Apply</message>
<message id="msg-btn-discard">Discard</message>
<message id="msg-btn-immediate-scan">Scan now!</message>
<message id="msg-notify-scan-launched">Scan launched!</message>
<message id="msg-notify-settings-saved">New settings saved!</message>
<message id="msg-notify-scan-complete">Scan complete: {1} total files, {2} additions, {3} deletions, {4} duplicates, {5} errors</message>
</messages> </messages>
+1 -1
View File
@@ -16,7 +16,7 @@
<message id="template-playqueue"> <message id="template-playqueue">
<div class="page-header"> <div class="page-header">
<h2>${tr:msg-playqueue}</h2> <h2>${tr:Lms.playqueue}</h2>
${save-btn} ${load-btn} ${clear-btn} ${save-btn} ${load-btn} ${clear-btn}
</div> </div>
${entries} ${entries}
+5 -5
View File
@@ -2,15 +2,15 @@
<messages xmlns:if="Wt.WTemplate.conditions"> <messages xmlns:if="Wt.WTemplate.conditions">
<!--FORMS message blocks--> <!--FORMS message blocks-->
<message id="btn-release-play-btn"> <message id="Lms.Explore.Release.play">
<i class="fa fa-play"></i> <i class="fa fa-play"></i>
</message> </message>
<message id="btn-release-add-btn"> <message id="Lms.Explore.Release.add">
<i class="fa fa-plus"></i> <i class="fa fa-plus"></i>
</message> </message>
<message id="template-release"> <message id="Lms.Explore.Release.template">
${cover} ${cover}
<div class="page-header"> <div class="page-header">
<h2>${name}</h2> <h2>${name}</h2>
@@ -22,11 +22,11 @@
${tracks} ${tracks}
</message> </message>
<message id="template-release-cluster-entry"> <message id="Lms.Explore.Release.template.cluster-entry">
<span class="badge">${name}</span> <span class="badge">${name}</span>
</message> </message>
<message id="template-release-entry"> <message id="Lms.Explore.Release.template.entry">
${<if-has-disc-number>}${disc-number}-${</if-has-disc-number>}${<if-has-track-number>}${track-number}. ${</if-has-track-number>} ${<if-has-disc-number>}${disc-number}-${</if-has-disc-number>}${<if-has-track-number>}${track-number}. ${</if-has-track-number>}
${<if-has-artist>}${artist-name} - ${</if-has-artist>} ${<if-has-artist>}${artist-name} - ${</if-has-artist>}
${name} ${name}
+5 -6
View File
@@ -1,11 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<messages xmlns:if="Wt.WTemplate.conditions"> <messages xmlns:if="Wt.WTemplate.conditions">
<!--FORMS message blocks-->
<message id="template-releases"> <message id="Lms.Explore.Releases.template">
<div class="page-header"> <div class="page-header">
<h2>${tr:msg-releases}</h2> <h2>${tr:Lms.Explore.releases}</h2>
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="input-group"> <div class="input-group">
@@ -17,15 +16,15 @@
${show-more} ${show-more}
</message> </message>
<message id="btn-releases-play-btn"> <message id="Lms.Explore.Releases.play">
<i class="fa fa-play"></i> <i class="fa fa-play"></i>
</message> </message>
<message id="btn-releases-add-btn"> <message id="Lms.Explore.Releases.add">
<i class="fa fa-plus"></i> <i class="fa fa-plus"></i>
</message> </message>
<message id="template-releases-entry"> <message id="Lms.Explore.Releases.template.entry">
<div class="media list-group-item"> <div class="media list-group-item">
<div class="pull-left media-middle"> <div class="pull-left media-middle">
${cover class="media-object"} ${cover class="media-object"}
+1 -47
View File
@@ -1,56 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<messages xmlns:if="Wt.WTemplate.conditions"> <messages xmlns:if="Wt.WTemplate.conditions">
<!--FORMS message blocks-->
<message id="template-main"> <message id="Lms.template">
${navbar-top class="main-nav"} ${navbar-top class="main-nav"}
${contents class="container"} ${contents class="container"}
${player} ${player}
</message> </message>
<message id="template-home">
${tr:msg-home-welcome}
</message>
<message id="template-explore">
${filters}
${contents}
</message>
<message id="template-show-more">
${tr:msg-show-more}
</message>
<message id="template-filters">
<div class="form-group">
${add-filter}${filters}
</div>
</message>
<message id="template-filter-add">
<div class="form-horizontal">
<div class="form-group">
<label class="control-label col-sm-2" for="${id:type}">
${tr:msg-filter-type}
</label>
<div class="col-sm-10">
${type}
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="${id:value}">
${tr:msg-filter-value}
</label>
<div class="col-sm-10">
${value}
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
${add class="btn-primary"} ${cancel}
</div>
</div>
</div>
</message>
</messages> </messages>
+5 -5
View File
@@ -3,9 +3,9 @@
<messages xmlns:if="Wt.WTemplate.conditions"> <messages xmlns:if="Wt.WTemplate.conditions">
<!--FORMS message blocks--> <!--FORMS message blocks-->
<message id="template-tracks"> <message id="Lms.Explore.Tracks.template">
<div class="page-header"> <div class="page-header">
<h2>${tr:msg-tracks}</h2> <h2>${tr:Lms.Explore.tracks}</h2>
${play-btn}${add-btn} ${play-btn}${add-btn}
</div> </div>
<div class="form-group"> <div class="form-group">
@@ -18,15 +18,15 @@
${show-more} ${show-more}
</message> </message>
<message id="btn-tracks-play-btn"> <message id="Lms.Explore.Tracks.play">
<i class="fa fa-play"></i> <i class="fa fa-play"></i>
</message> </message>
<message id="btn-tracks-add-btn"> <message id="Lms.Explore.Tracks.add">
<i class="fa fa-plus"></i> <i class="fa fa-plus"></i>
</message> </message>
<message id="template-tracks-entry"> <message id="Lms.Explore.Tracks.template.entry">
<div class="media list-group-item"> <div class="media list-group-item">
<div class="pull-left media-middle"> <div class="pull-left media-middle">
${cover class="media-object"} ${cover class="media-object"}
+11 -11
View File
@@ -21,26 +21,26 @@ lms_SOURCES = \
$(srcdir)/metadata/AvFormat.cpp \ $(srcdir)/metadata/AvFormat.cpp \
$(srcdir)/metadata/TagLibParser.cpp \ $(srcdir)/metadata/TagLibParser.cpp \
$(srcdir)/scanner/MediaScanner.cpp \ $(srcdir)/scanner/MediaScanner.cpp \
$(srcdir)/ui/ArtistView.cpp \ $(srcdir)/ui/explore/ArtistView.cpp \
$(srcdir)/ui/ArtistsView.cpp \ $(srcdir)/ui/explore/ArtistsView.cpp \
$(srcdir)/ui/Explore.cpp \ $(srcdir)/ui/explore/Explore.cpp \
$(srcdir)/ui/Filters.cpp \ $(srcdir)/ui/explore/Filters.cpp \
$(srcdir)/ui/explore/ReleasesView.cpp \
$(srcdir)/ui/explore/ReleaseView.cpp \
$(srcdir)/ui/explore/TracksView.cpp \
$(srcdir)/ui/Auth.cpp \
$(srcdir)/ui/HomeView.cpp \ $(srcdir)/ui/HomeView.cpp \
$(srcdir)/ui/LmsApplication.cpp \ $(srcdir)/ui/LmsApplication.cpp \
$(srcdir)/ui/Auth.cpp \
$(srcdir)/ui/MediaPlayer.cpp \ $(srcdir)/ui/MediaPlayer.cpp \
$(srcdir)/ui/PlayQueueView.cpp \ $(srcdir)/ui/PlayQueueView.cpp \
$(srcdir)/ui/ReleasesView.cpp \ $(srcdir)/ui/admin/DatabaseSettingsView.cpp \
$(srcdir)/ui/ReleaseView.cpp \ $(srcdir)/ui/admin/AdminWizardView.cpp \
$(srcdir)/ui/TracksView.cpp \
$(srcdir)/ui/common/Validators.cpp \
$(srcdir)/ui/common/InputRange.cpp \ $(srcdir)/ui/common/InputRange.cpp \
$(srcdir)/ui/common/LineEdit.cpp \ $(srcdir)/ui/common/LineEdit.cpp \
$(srcdir)/ui/common/Validators.cpp \
$(srcdir)/ui/resource/AvConvTranscodeStreamResource.cpp \ $(srcdir)/ui/resource/AvConvTranscodeStreamResource.cpp \
$(srcdir)/ui/resource/ImageResource.cpp \ $(srcdir)/ui/resource/ImageResource.cpp \
$(srcdir)/ui/resource/TranscodeResource.cpp \ $(srcdir)/ui/resource/TranscodeResource.cpp \
$(srcdir)/ui/settings/DatabaseSettingsView.cpp \
$(srcdir)/ui/settings/AdminWizardView.cpp \
$(srcdir)/utils/Config.cpp \ $(srcdir)/utils/Config.cpp \
$(srcdir)/utils/Logger.cpp \ $(srcdir)/utils/Logger.cpp \
$(srcdir)/utils/Path.cpp \ $(srcdir)/utils/Path.cpp \
+2 -2
View File
@@ -38,7 +38,7 @@ Auth::Auth(Wt::WContainerWidget *parent)
_model->addPasswordAuth(&Database::Handler::getPasswordService()); _model->addPasswordAuth(&Database::Handler::getPasswordService());
setTemplateText(Wt::WString::tr("template-login")); setTemplateText(Wt::WString::tr("Lms.Auth.template"));
addFunction("tr", &WTemplate::Functions::tr); addFunction("tr", &WTemplate::Functions::tr);
addFunction("id", &WTemplate::Functions::id); addFunction("id", &WTemplate::Functions::id);
@@ -55,7 +55,7 @@ Auth::Auth(Wt::WContainerWidget *parent)
auto rememberMe = new Wt::WCheckBox(); auto rememberMe = new Wt::WCheckBox();
setFormWidget(Wt::Auth::AuthModel::RememberMeField, rememberMe); setFormWidget(Wt::Auth::AuthModel::RememberMeField, rememberMe);
auto loginBtn = new Wt::WPushButton(Wt::WString::tr("msg-login")); auto loginBtn = new Wt::WPushButton(Wt::WString::tr("Lms.login"));
bindWidget("login-btn", loginBtn); bindWidget("login-btn", loginBtn);
loginBtn->clicked().connect(std::bind([=] loginBtn->clicked().connect(std::bind([=]
{ {
+1 -1
View File
@@ -31,7 +31,7 @@ namespace UserInterface {
Home::Home(Wt::WContainerWidget *parent) Home::Home(Wt::WContainerWidget *parent)
: Wt::WContainerWidget(parent) : Wt::WContainerWidget(parent)
{ {
auto t = new Wt::WTemplate(Wt::WString::tr("template-home"), this); auto t = new Wt::WTemplate(Wt::WString::tr("Lms.Home.template"), this);
t->addFunction("tr", &Wt::WTemplate::Functions::tr); t->addFunction("tr", &Wt::WTemplate::Functions::tr);
} }
+36 -22
View File
@@ -31,13 +31,13 @@
#include "utils/Logger.hpp" #include "utils/Logger.hpp"
#include "utils/Utils.hpp" #include "utils/Utils.hpp"
#include "Explore.hpp" #include "explore/Explore.hpp"
#include "HomeView.hpp" #include "HomeView.hpp"
#include "MediaPlayer.hpp" #include "MediaPlayer.hpp"
#include "PlayQueueView.hpp" #include "PlayQueueView.hpp"
#include "settings/DatabaseSettingsView.hpp" #include "admin/DatabaseSettingsView.hpp"
#include "settings/AdminWizardView.hpp" #include "admin/AdminWizardView.hpp"
#include "LmsApplication.hpp" #include "LmsApplication.hpp"
@@ -81,16 +81,18 @@ LmsApplication::LmsApplication(const Wt::WEnvironment& env, Wt::Dbo::SqlConnecti
useStyleSheet("resources/font-awesome/css/font-awesome.min.css"); useStyleSheet("resources/font-awesome/css/font-awesome.min.css");
// Add a resource bundle // Add a resource bundle
messageResourceBundle().use(appRoot() + "admin-database");
messageResourceBundle().use(appRoot() + "admin-wizard");
messageResourceBundle().use(appRoot() + "artist"); messageResourceBundle().use(appRoot() + "artist");
messageResourceBundle().use(appRoot() + "artists"); messageResourceBundle().use(appRoot() + "artists");
messageResourceBundle().use(appRoot() + "home");
messageResourceBundle().use(appRoot() + "explore");
messageResourceBundle().use(appRoot() + "login"); messageResourceBundle().use(appRoot() + "login");
messageResourceBundle().use(appRoot() + "mediaplayer"); messageResourceBundle().use(appRoot() + "mediaplayer");
messageResourceBundle().use(appRoot() + "messages"); messageResourceBundle().use(appRoot() + "messages");
messageResourceBundle().use(appRoot() + "playqueue"); messageResourceBundle().use(appRoot() + "playqueue");
messageResourceBundle().use(appRoot() + "release"); messageResourceBundle().use(appRoot() + "release");
messageResourceBundle().use(appRoot() + "releases"); messageResourceBundle().use(appRoot() + "releases");
messageResourceBundle().use(appRoot() + "settings-database");
messageResourceBundle().use(appRoot() + "settings-admin-wizard");
messageResourceBundle().use(appRoot() + "tracks"); messageResourceBundle().use(appRoot() + "tracks");
messageResourceBundle().use(appRoot() + "templates"); messageResourceBundle().use(appRoot() + "templates");
@@ -183,7 +185,7 @@ enum IdxRoot
IdxHome = 0, IdxHome = 0,
IdxExplore, IdxExplore,
IdxPlayQueue, IdxPlayQueue,
IdxSettingsDatabase, IdxAdminDatabase,
}; };
static void static void
@@ -198,7 +200,7 @@ handlePathChange(Wt::WStackedWidget* stack)
{ "/release", IdxExplore }, { "/release", IdxExplore },
{ "/tracks", IdxExplore }, { "/tracks", IdxExplore },
{ "/playqueue", IdxPlayQueue }, { "/playqueue", IdxPlayQueue },
{ "/settings/database", IdxSettingsDatabase }, { "/admin/database", IdxAdminDatabase },
}; };
LMS_LOG(UI, DEBUG) << "Internal path changed to '" << wApp->internalPath() << "'"; LMS_LOG(UI, DEBUG) << "Internal path changed to '" << wApp->internalPath() << "'";
@@ -231,9 +233,9 @@ LmsApplication::handleAuthEvent(void)
_imageResource = new ImageResource(_db, root()); _imageResource = new ImageResource(_db, root());
_transcodeResource = new TranscodeResource(_db, root()); _transcodeResource = new TranscodeResource(_db, root());
setConfirmCloseMessage(Wt::WString::tr("msg-quit-confirm")); setConfirmCloseMessage(Wt::WString::tr("Lms.quit-confirm"));
auto main = new Wt::WTemplate(Wt::WString::tr("template-main"), root()); auto main = new Wt::WTemplate(Wt::WString::tr("Lms.template"), root());
// Navbar // Navbar
auto navbar = new Wt::WNavigationBar(); auto navbar = new Wt::WNavigationBar();
@@ -244,42 +246,54 @@ LmsApplication::handleAuthEvent(void)
auto menu = new Wt::WMenu(); auto menu = new Wt::WMenu();
{ {
auto menuItem = menu->insertItem(0, Wt::WString::tr("msg-artists")); auto menuItem = menu->insertItem(0, Wt::WString::tr("Lms.Explore.artists"));
menuItem->setLink(Wt::WLink(Wt::WLink::InternalPath, "/artists")); menuItem->setLink(Wt::WLink(Wt::WLink::InternalPath, "/artists"));
menuItem->setSelectable(false); menuItem->setSelectable(false);
} }
{ {
auto menuItem = menu->insertItem(1, Wt::WString::tr("msg-releases")); auto menuItem = menu->insertItem(1, Wt::WString::tr("Lms.Explore.releases"));
menuItem->setLink(Wt::WLink(Wt::WLink::InternalPath, "/releases")); menuItem->setLink(Wt::WLink(Wt::WLink::InternalPath, "/releases"));
menuItem->setSelectable(false); menuItem->setSelectable(false);
} }
{ {
auto menuItem = menu->insertItem(2, Wt::WString::tr("msg-tracks")); auto menuItem = menu->insertItem(2, Wt::WString::tr("Lms.Explore.tracks"));
menuItem->setLink(Wt::WLink(Wt::WLink::InternalPath, "/tracks")); menuItem->setLink(Wt::WLink(Wt::WLink::InternalPath, "/tracks"));
menuItem->setSelectable(false); menuItem->setSelectable(false);
} }
{ {
auto menuItem = menu->insertItem(3, Wt::WString::tr("msg-playqueue")); auto menuItem = menu->insertItem(3, Wt::WString::tr("Lms.playqueue"));
menuItem->setLink(Wt::WLink(Wt::WLink::InternalPath, "/playqueue")); menuItem->setLink(Wt::WLink(Wt::WLink::InternalPath, "/playqueue"));
menuItem->setSelectable(false); menuItem->setSelectable(false);
} }
navbar->addMenu(menu); navbar->addMenu(menu);
auto rightMenu = new Wt::WMenu(); auto rightMenu = new Wt::WMenu();
std::size_t itemCounter = 0;
{ {
auto menuItem = rightMenu->insertItem(0, Wt::WString::tr("msg-settings")); Wt::Dbo::Transaction transaction (DboSession());
menuItem->setSelectable(false);
Wt::WPopupMenu *settings = new Wt::WPopupMenu(); if (CurrentUser()->isAdmin())
auto dbSettings = settings->insertItem(0, Wt::WString::tr("msg-settings-database")); {
dbSettings->setLink(Wt::WLink(Wt::WLink::InternalPath, "/settings/database")); auto menuItem = rightMenu->insertItem(itemCounter++, Wt::WString::tr("Lms.administration"));
dbSettings->setSelectable(false); menuItem->setSelectable(false);
menuItem->setMenu(settings); Wt::WPopupMenu *admin = new Wt::WPopupMenu();
auto dbSettings = admin->insertItem(0, Wt::WString::tr("Lms.Admin.Database.database"));
dbSettings->setLink(Wt::WLink(Wt::WLink::InternalPath, "/admin/database"));
dbSettings->setSelectable(false);
menuItem->setMenu(admin);
}
} }
{ {
auto menuItem = rightMenu->insertItem(1, Wt::WString::tr("msg-logout")); auto menuItem = rightMenu->insertItem(itemCounter++, Wt::WString::tr("Lms.settings"));
menuItem->setLink(Wt::WLink(Wt::WLink::InternalPath, "/settings"));
menuItem->setSelectable(false);
}
{
auto menuItem = rightMenu->insertItem(itemCounter++, Wt::WString::tr("Lms.logout"));
menuItem->setSelectable(true); menuItem->setSelectable(true);
menuItem->triggered().connect(std::bind([=] menuItem->triggered().connect(std::bind([=]
{ {
@@ -326,7 +340,7 @@ LmsApplication::handleAuthEvent(void)
{ {
Wt::WServer::instance()->post(sessionId, [=] Wt::WServer::instance()->post(sessionId, [=]
{ {
notify(Wt::WString::tr("msg-notify-scan-complete") notify(Wt::WString::tr("Lms.Admin.Database.scan-complete")
.arg(stats.nbFiles()) .arg(stats.nbFiles())
.arg(stats.additions) .arg(stats.additions)
.arg(stats.deletions) .arg(stats.deletions)
@@ -121,7 +121,7 @@ AdminWizardView::AdminWizardView(Wt::WContainerWidget *parent)
{ {
auto model = new AdminWizardModel(this); auto model = new AdminWizardModel(this);
setTemplateText(Wt::WString::tr("template-settings-admin-wizard")); setTemplateText(Wt::WString::tr("Lms.AdminWizard.template"));
addFunction("tr", &WTemplate::Functions::tr); addFunction("tr", &WTemplate::Functions::tr);
addFunction("id", &WTemplate::Functions::id); addFunction("id", &WTemplate::Functions::id);
@@ -139,7 +139,7 @@ AdminWizardView::AdminWizardView(Wt::WContainerWidget *parent)
setFormWidget(AdminWizardModel::PasswordConfirmField, passwordConfirmEdit); setFormWidget(AdminWizardModel::PasswordConfirmField, passwordConfirmEdit);
passwordConfirmEdit->setEchoMode(Wt::WLineEdit::Password); passwordConfirmEdit->setEchoMode(Wt::WLineEdit::Password);
auto saveButton = new Wt::WPushButton(Wt::WString::tr("msg-create")); auto saveButton = new Wt::WPushButton(Wt::WString::tr("Lms.create"));
bindWidget("create-btn", saveButton); bindWidget("create-btn", saveButton);
saveButton->clicked().connect(std::bind([=] saveButton->clicked().connect(std::bind([=]
{ {
@@ -148,7 +148,7 @@ AdminWizardView::AdminWizardView(Wt::WContainerWidget *parent)
if (model->validate()) if (model->validate())
{ {
model->saveData(); model->saveData();
LmsApp->notify(Wt::WString::tr("msg-settings-first-connection-done")); LmsApp->notify(Wt::WString::tr("Lms.AdminWizard.done"));
saveButton->setEnabled(false); saveButton->setEnabled(false);
} }
@@ -181,16 +181,16 @@ class DatabaseSettingsModel : public Wt::WFormModel
_updatePeriodModel = new Wt::WStringListModel(this); _updatePeriodModel = new Wt::WStringListModel(this);
_updatePeriodModel->addString(Wt::WString::tr("msg-update-period-never")); _updatePeriodModel->addString(Wt::WString::tr("Lms.Admin.Database.never"));
_updatePeriodModel->setData(0, 0, Scanner::UpdatePeriod::Never, Wt::UserRole); _updatePeriodModel->setData(0, 0, Scanner::UpdatePeriod::Never, Wt::UserRole);
_updatePeriodModel->addString(Wt::WString::tr("msg-update-period-daily")); _updatePeriodModel->addString(Wt::WString::tr("Lms.Admin.Database.daily"));
_updatePeriodModel->setData(1, 0, Scanner::UpdatePeriod::Daily, Wt::UserRole); _updatePeriodModel->setData(1, 0, Scanner::UpdatePeriod::Daily, Wt::UserRole);
_updatePeriodModel->addString(Wt::WString::tr("msg-update-period-weekly")); _updatePeriodModel->addString(Wt::WString::tr("Lms.Admin.Database.weekly"));
_updatePeriodModel->setData(2, 0, Scanner::UpdatePeriod::Weekly, Wt::UserRole); _updatePeriodModel->setData(2, 0, Scanner::UpdatePeriod::Weekly, Wt::UserRole);
_updatePeriodModel->addString(Wt::WString::tr("msg-update-period-monthly")); _updatePeriodModel->addString(Wt::WString::tr("Lms.Admin.Database.monthly"));
_updatePeriodModel->setData(3, 0, Scanner::UpdatePeriod::Monthly, Wt::UserRole); _updatePeriodModel->setData(3, 0, Scanner::UpdatePeriod::Monthly, Wt::UserRole);
_updateStartTimeModel = new Wt::WStringListModel(this); _updateStartTimeModel = new Wt::WStringListModel(this);
@@ -229,7 +229,7 @@ DatabaseSettingsView::DatabaseSettingsView(Wt::WContainerWidget *parent)
{ {
auto model = new DatabaseSettingsModel(this); auto model = new DatabaseSettingsModel(this);
setTemplateText(tr("template-settings-database")); setTemplateText(tr("Lms.Admin.Database.template"));
addFunction("tr", &WTemplate::Functions::tr); addFunction("tr", &WTemplate::Functions::tr);
addFunction("id", &WTemplate::Functions::id); addFunction("id", &WTemplate::Functions::id);
@@ -249,13 +249,13 @@ DatabaseSettingsView::DatabaseSettingsView(Wt::WContainerWidget *parent)
// Buttons // Buttons
Wt::WPushButton *saveBtn = new Wt::WPushButton(Wt::WString::tr("msg-btn-apply")); Wt::WPushButton *saveBtn = new Wt::WPushButton(Wt::WString::tr("Lms.apply"));
bindWidget("apply-btn", saveBtn); bindWidget("apply-btn", saveBtn);
Wt::WPushButton *discardBtn = new Wt::WPushButton(Wt::WString::tr("msg-btn-discard")); Wt::WPushButton *discardBtn = new Wt::WPushButton(Wt::WString::tr("Lms.discard"));
bindWidget("discard-btn", discardBtn); bindWidget("discard-btn", discardBtn);
Wt::WPushButton *immScanBtn = new Wt::WPushButton(Wt::WString::tr("msg-btn-immediate-scan")); Wt::WPushButton *immScanBtn = new Wt::WPushButton(Wt::WString::tr("Lms.Admin.Database.immediate-scan"));
bindWidget("immediate-scan-btn", immScanBtn); bindWidget("immediate-scan-btn", immScanBtn);
saveBtn->clicked().connect(std::bind([=] () saveBtn->clicked().connect(std::bind([=] ()
@@ -267,7 +267,7 @@ DatabaseSettingsView::DatabaseSettingsView(Wt::WContainerWidget *parent)
model->saveData(); model->saveData();
LmsApp->getMediaScanner().reschedule(); LmsApp->getMediaScanner().reschedule();
LmsApp->notify(Wt::WString::tr("msg-notify-settings-saved")); LmsApp->notify(Wt::WString::tr("Lms.Admin.Database.settings-saved"));
} }
// Udate the view: Delete any validation message in the view, etc. // Udate the view: Delete any validation message in the view, etc.
@@ -284,7 +284,7 @@ DatabaseSettingsView::DatabaseSettingsView(Wt::WContainerWidget *parent)
immScanBtn->clicked().connect(std::bind([=] () immScanBtn->clicked().connect(std::bind([=] ()
{ {
LmsApp->getMediaScanner().scheduleImmediateScan(); LmsApp->getMediaScanner().scheduleImmediateScan();
LmsApp->notify(Wt::WString::tr("msg-notify-scan-launched")); LmsApp->notify(Wt::WString::tr("Lms.Admin.Database.scan-launched"));
})); }));
updateView(model); updateView(model);
+1 -1
View File
@@ -60,7 +60,7 @@ DirectoryValidator::validate(const Wt::WString& input) const
else if (res) else if (res)
return Wt::WValidator::Result(Wt::WValidator::Valid); return Wt::WValidator::Result(Wt::WValidator::Valid);
else else
return Wt::WValidator::Result(Wt::WValidator::Invalid, Wt::WString::tr("msg-error-not-a-directory")); return Wt::WValidator::Result(Wt::WValidator::Invalid, Wt::WString::tr("Lms.not-a-directory"));
} }
@@ -71,7 +71,7 @@ Artist::refresh()
return; return;
} }
auto t = new Wt::WTemplate(Wt::WString::tr("template-artist"), this); auto t = new Wt::WTemplate(Wt::WString::tr("Lms.Explore.Artist.template"), this);
t->addFunction("tr", &Wt::WTemplate::Functions::tr); t->addFunction("tr", &Wt::WTemplate::Functions::tr);
auto clusterContainers = new Wt::WContainerWidget(); auto clusterContainers = new Wt::WContainerWidget();
@@ -82,7 +82,7 @@ Artist::refresh()
for (auto cluster : clusters) for (auto cluster : clusters)
{ {
auto entry = new Wt::WTemplate(Wt::WString::tr("template-artist-cluster-entry"), clusterContainers); auto entry = new Wt::WTemplate(Wt::WString::tr("Lms.Explore.Artist.template.cluster-entry"), clusterContainers);
entry->bindString("name", Wt::WString::fromUTF8(cluster->getName()), Wt::PlainText); entry->bindString("name", Wt::WString::fromUTF8(cluster->getName()), Wt::PlainText);
} }
@@ -90,7 +90,7 @@ Artist::refresh()
t->bindString("name", Wt::WString::fromUTF8(artist->getName()), Wt::PlainText); t->bindString("name", Wt::WString::fromUTF8(artist->getName()), Wt::PlainText);
{ {
auto playBtn = new Wt::WText(Wt::WString::tr("btn-artist-play-btn"), Wt::XHTMLText); auto playBtn = new Wt::WText(Wt::WString::tr("Lms.Explore.Artist.play"), Wt::XHTMLText);
t->bindWidget("play-btn", playBtn); t->bindWidget("play-btn", playBtn);
playBtn->clicked().connect(std::bind([=] playBtn->clicked().connect(std::bind([=]
@@ -100,7 +100,7 @@ Artist::refresh()
} }
{ {
auto addBtn = new Wt::WText(Wt::WString::tr("btn-artist-add-btn"), Wt::XHTMLText); auto addBtn = new Wt::WText(Wt::WString::tr("Lms.Explore.Artist.add"), Wt::XHTMLText);
t->bindWidget("add-btn", addBtn); t->bindWidget("add-btn", addBtn);
addBtn->clicked().connect(std::bind([=] addBtn->clicked().connect(std::bind([=]
@@ -117,7 +117,7 @@ Artist::refresh()
{ {
auto releaseId = release.id(); auto releaseId = release.id();
Wt::WTemplate* entry = new Wt::WTemplate(Wt::WString::tr("template-artist-entry"), releasesContainer); Wt::WTemplate* entry = new Wt::WTemplate(Wt::WString::tr("Lms.Explore.Artist.template.entry"), releasesContainer);
entry->addFunction("tr", Wt::WTemplate::Functions::tr); entry->addFunction("tr", Wt::WTemplate::Functions::tr);
{ {
@@ -153,14 +153,14 @@ Artist::refresh()
} }
} }
auto playBtn = new Wt::WText(Wt::WString::tr("btn-artist-play-btn"), Wt::XHTMLText); auto playBtn = new Wt::WText(Wt::WString::tr("Lms.Explore.Artist.play"), Wt::XHTMLText);
entry->bindWidget("play-btn", playBtn); entry->bindWidget("play-btn", playBtn);
playBtn->clicked().connect(std::bind([=] playBtn->clicked().connect(std::bind([=]
{ {
releasePlay.emit(releaseId); releasePlay.emit(releaseId);
})); }));
auto addBtn = new Wt::WText(Wt::WString::tr("btn-artist-add-btn"), Wt::XHTMLText); auto addBtn = new Wt::WText(Wt::WString::tr("Lms.Explore.Artist.add"), Wt::XHTMLText);
entry->bindWidget("add-btn", addBtn); entry->bindWidget("add-btn", addBtn);
addBtn->clicked().connect(std::bind([=] addBtn->clicked().connect(std::bind([=]
{ {
@@ -39,18 +39,18 @@ Artists::Artists(Filters* filters, Wt::WContainerWidget* parent)
: Wt::WContainerWidget(parent), : Wt::WContainerWidget(parent),
_filters(filters) _filters(filters)
{ {
auto container = new Wt::WTemplate(Wt::WString::tr("template-artists"), this); auto container = new Wt::WTemplate(Wt::WString::tr("Lms.Explore.Artists.template"), this);
container->addFunction("tr", &Wt::WTemplate::Functions::tr); container->addFunction("tr", &Wt::WTemplate::Functions::tr);
_search = new Wt::WLineEdit(); _search = new Wt::WLineEdit();
container->bindWidget("search", _search); container->bindWidget("search", _search);
_search->setPlaceholderText(Wt::WString::tr("msg-search-placeholder")); _search->setPlaceholderText(Wt::WString::tr("Lms.Explore.search-placeholder"));
_search->textInput().connect(this, &Artists::refresh); _search->textInput().connect(this, &Artists::refresh);
_artistsContainer = new Wt::WContainerWidget(); _artistsContainer = new Wt::WContainerWidget();
container->bindWidget("artists", _artistsContainer); container->bindWidget("artists", _artistsContainer);
_showMore = new Wt::WTemplate(Wt::WString::tr("template-show-more")); _showMore = new Wt::WTemplate(Wt::WString::tr("Lms.Explore.template.show-more"));
_showMore->addFunction("tr", &Wt::WTemplate::Functions::tr); _showMore->addFunction("tr", &Wt::WTemplate::Functions::tr);
container->bindWidget("show-more", _showMore); container->bindWidget("show-more", _showMore);
@@ -88,7 +88,7 @@ Artists::addSome()
for (auto artist : artists) for (auto artist : artists)
{ {
Wt::WTemplate* entry = new Wt::WTemplate(Wt::WString::tr("template-artists-entry"), _artistsContainer); Wt::WTemplate* entry = new Wt::WTemplate(Wt::WString::tr("Lms.Explore.Artists.template.entry"), _artistsContainer);
entry->bindInt("nb-release", artist->getReleases(clusterIds).size()); entry->bindInt("nb-release", artist->getReleases(clusterIds).size());
@@ -73,7 +73,7 @@ handlePathChange(Wt::WStackedWidget* stack)
Explore::Explore(Wt::WContainerWidget* parent) Explore::Explore(Wt::WContainerWidget* parent)
: Wt::WContainerWidget(parent) : Wt::WContainerWidget(parent)
{ {
auto container = new Wt::WTemplate(Wt::WString::tr("template-explore"), this); auto container = new Wt::WTemplate(Wt::WString::tr("Lms.Explore.template"), this);
_filters = new Filters(); _filters = new Filters();
container->bindWidget("filters", _filters); container->bindWidget("filters", _filters);
@@ -31,9 +31,9 @@ namespace UserInterface {
void void
Filters::showDialog() Filters::showDialog()
{ {
auto dialog = new Wt::WDialog("Go to cell"); auto dialog = new Wt::WDialog(Wt::WString::tr("Lms.Explore.add-filter"));
auto container = new Wt::WTemplate(Wt::WString::tr("template-filter-add")); auto container = new Wt::WTemplate(Wt::WString::tr("Lms.Explore.template.add-filter"));
container->addFunction("tr", &Wt::WTemplate::Functions::tr); container->addFunction("tr", &Wt::WTemplate::Functions::tr);
dialog->contents()->addWidget(container); dialog->contents()->addWidget(container);
@@ -44,12 +44,12 @@ Filters::showDialog()
auto valueCombo = new Wt::WComboBox(); auto valueCombo = new Wt::WComboBox();
container->bindWidget("value", valueCombo); container->bindWidget("value", valueCombo);
auto addBtn = new Wt::WPushButton(Wt::WString::tr("msg-add")); auto addBtn = new Wt::WPushButton(Wt::WString::tr("Lms.add"));
container->bindWidget("add", addBtn); container->bindWidget("add-btn", addBtn);
addBtn->clicked().connect(dialog, &Wt::WDialog::accept); addBtn->clicked().connect(dialog, &Wt::WDialog::accept);
auto cancelBtn = new Wt::WPushButton(Wt::WString::tr("msg-cancel")); auto cancelBtn = new Wt::WPushButton(Wt::WString::tr("Lms.cancel"));
container->bindWidget("cancel", cancelBtn); container->bindWidget("cancel-btn", cancelBtn);
cancelBtn->clicked().connect(dialog, &Wt::WDialog::reject); cancelBtn->clicked().connect(dialog, &Wt::WDialog::reject);
// Populate data // Populate data
@@ -140,10 +140,10 @@ Filters::showDialog()
Filters::Filters(Wt::WContainerWidget *parent) Filters::Filters(Wt::WContainerWidget *parent)
: Wt::WContainerWidget(parent) : Wt::WContainerWidget(parent)
{ {
auto container = new Wt::WTemplate(Wt::WString::tr("template-filters"), this); auto container = new Wt::WTemplate(Wt::WString::tr("Lms.Explore.template.filters"), this);
// Filters // Filters
Wt::WPushButton *addFilterBtn = new Wt::WPushButton(Wt::WText::tr("msg-filter-add")); Wt::WPushButton *addFilterBtn = new Wt::WPushButton(Wt::WText::tr("Lms.Explore.add-filter"));
container->bindWidget("add-filter", addFilterBtn); container->bindWidget("add-filter", addFilterBtn);
_filters = new Wt::WContainerWidget(); _filters = new Wt::WContainerWidget();
@@ -72,7 +72,7 @@ Release::refresh()
return; return;
} }
auto t = new Wt::WTemplate(Wt::WString::tr("template-release"), this); auto t = new Wt::WTemplate(Wt::WString::tr("Lms.Explore.Release.template"), this);
t->addFunction("tr", &Wt::WTemplate::Functions::tr); t->addFunction("tr", &Wt::WTemplate::Functions::tr);
t->bindString("name", Wt::WString::fromUTF8(release->getName()), Wt::PlainText); t->bindString("name", Wt::WString::fromUTF8(release->getName()), Wt::PlainText);
@@ -95,7 +95,7 @@ Release::refresh()
auto artists = release->getArtists(); auto artists = release->getArtists();
if (artists.size() > 1) if (artists.size() > 1)
{ {
t->bindString("artist-name", Wt::WString::tr("msg-various-artists")); t->bindString("artist-name", Wt::WString::tr("Lms.Explore.various-artists"));
} }
else else
{ {
@@ -118,14 +118,14 @@ Release::refresh()
for (auto cluster : clusters) for (auto cluster : clusters)
{ {
auto entry = new Wt::WTemplate(Wt::WString::tr("template-release-cluster-entry"), clusterContainers); auto entry = new Wt::WTemplate(Wt::WString::tr("Lms.Explore.Release.template.cluster-entry"), clusterContainers);
entry->bindString("name", Wt::WString::fromUTF8(cluster->getName()), Wt::PlainText); entry->bindString("name", Wt::WString::fromUTF8(cluster->getName()), Wt::PlainText);
} }
} }
{ {
auto playBtn = new Wt::WText(Wt::WString::tr("btn-release-play-btn"), Wt::XHTMLText); auto playBtn = new Wt::WText(Wt::WString::tr("Lms.Explore.Release.play"), Wt::XHTMLText);
t->bindWidget("play-btn", playBtn); t->bindWidget("play-btn", playBtn);
playBtn->clicked().connect(std::bind([=] playBtn->clicked().connect(std::bind([=]
{ {
@@ -134,7 +134,7 @@ Release::refresh()
} }
{ {
auto addBtn = new Wt::WText(Wt::WString::tr("btn-release-add-btn"), Wt::XHTMLText); auto addBtn = new Wt::WText(Wt::WString::tr("Lms.Explore.Release.add"), Wt::XHTMLText);
t->bindWidget("add-btn", addBtn); t->bindWidget("add-btn", addBtn);
addBtn->clicked().connect(std::bind([=] addBtn->clicked().connect(std::bind([=]
{ {
@@ -154,7 +154,7 @@ Release::refresh()
{ {
auto trackId = track.id(); auto trackId = track.id();
Wt::WTemplate* entry = new Wt::WTemplate(Wt::WString::tr("template-release-entry"), tracksContainer); Wt::WTemplate* entry = new Wt::WTemplate(Wt::WString::tr("Lms.Explore.Release.template.entry"), tracksContainer);
entry->bindString("name", Wt::WString::fromUTF8(track->getName()), Wt::PlainText); entry->bindString("name", Wt::WString::fromUTF8(track->getName()), Wt::PlainText);
@@ -182,14 +182,14 @@ Release::refresh()
entry->bindInt("disc-number", *discNumber); entry->bindInt("disc-number", *discNumber);
} }
auto playBtn = new Wt::WText(Wt::WString::tr("btn-release-play-btn"), Wt::XHTMLText); auto playBtn = new Wt::WText(Wt::WString::tr("Lms.Explore.Release.play"), Wt::XHTMLText);
entry->bindWidget("play-btn", playBtn); entry->bindWidget("play-btn", playBtn);
playBtn->clicked().connect(std::bind([=] playBtn->clicked().connect(std::bind([=]
{ {
trackPlay.emit(trackId); trackPlay.emit(trackId);
})); }));
auto addBtn = new Wt::WText(Wt::WString::tr("btn-release-add-btn"), Wt::XHTMLText); auto addBtn = new Wt::WText(Wt::WString::tr("Lms.Explore.Release.add"), Wt::XHTMLText);
entry->bindWidget("add-btn", addBtn); entry->bindWidget("add-btn", addBtn);
addBtn->clicked().connect(std::bind([=] addBtn->clicked().connect(std::bind([=]
{ {
@@ -40,18 +40,18 @@ Releases::Releases(Filters* filters, Wt::WContainerWidget* parent)
: Wt::WContainerWidget(parent), : Wt::WContainerWidget(parent),
_filters(filters) _filters(filters)
{ {
auto container = new Wt::WTemplate(Wt::WString::tr("template-releases"), this); auto container = new Wt::WTemplate(Wt::WString::tr("Lms.Explore.Releases.template"), this);
container->addFunction("tr", &Wt::WTemplate::Functions::tr); container->addFunction("tr", &Wt::WTemplate::Functions::tr);
_search = new Wt::WLineEdit(); _search = new Wt::WLineEdit();
container->bindWidget("search", _search); container->bindWidget("search", _search);
_search->setPlaceholderText(Wt::WString::tr("msg-search-placeholder")); _search->setPlaceholderText(Wt::WString::tr("Lms.Explore.search-placeholder"));
_search->textInput().connect(this, &Releases::refresh); _search->textInput().connect(this, &Releases::refresh);
_releasesContainer = new Wt::WContainerWidget(); _releasesContainer = new Wt::WContainerWidget();
container->bindWidget("releases", _releasesContainer); container->bindWidget("releases", _releasesContainer);
_showMore = new Wt::WTemplate(Wt::WString::tr("template-show-more")); _showMore = new Wt::WTemplate(Wt::WString::tr("Lms.Explore.show-more"));
_showMore->addFunction("tr", &Wt::WTemplate::Functions::tr); _showMore->addFunction("tr", &Wt::WTemplate::Functions::tr);
container->bindWidget("show-more", _showMore); container->bindWidget("show-more", _showMore);
@@ -88,7 +88,7 @@ Releases::addSome()
{ {
auto releaseId = release.id(); auto releaseId = release.id();
Wt::WTemplate* entry = new Wt::WTemplate(Wt::WString::tr("template-releases-entry"), _releasesContainer); Wt::WTemplate* entry = new Wt::WTemplate(Wt::WString::tr("Lms.Explore.Releases.template.entry"), _releasesContainer);
entry->addFunction("tr", Wt::WTemplate::Functions::tr); entry->addFunction("tr", Wt::WTemplate::Functions::tr);
Wt::WAnchor* coverAnchor = LmsApplication::createReleaseAnchor(releaseId); Wt::WAnchor* coverAnchor = LmsApplication::createReleaseAnchor(releaseId);
@@ -109,7 +109,7 @@ Releases::addSome()
auto artists = release->getArtists(); auto artists = release->getArtists();
if (artists.size() > 1) if (artists.size() > 1)
{ {
entry->bindString("artist-name", Wt::WString::tr("msg-various-artists")); entry->bindString("artist-name", Wt::WString::tr("Lms.Explore.various-artists"));
} }
else else
{ {
@@ -119,14 +119,14 @@ Releases::addSome()
entry->bindWidget("artist-name", artistAnchor); entry->bindWidget("artist-name", artistAnchor);
} }
auto playBtn = new Wt::WText(Wt::WString::tr("btn-releases-play-btn"), Wt::XHTMLText); auto playBtn = new Wt::WText(Wt::WString::tr("Lms.Explore.Releases.play"), Wt::XHTMLText);
entry->bindWidget("play-btn", playBtn); entry->bindWidget("play-btn", playBtn);
playBtn->clicked().connect(std::bind([=] playBtn->clicked().connect(std::bind([=]
{ {
releasePlay.emit(releaseId); releasePlay.emit(releaseId);
})); }));
auto addBtn = new Wt::WText(Wt::WString::tr("btn-releases-add-btn"), Wt::XHTMLText); auto addBtn = new Wt::WText(Wt::WString::tr("Lms.Explore.Releases.add"), Wt::XHTMLText);
entry->bindWidget("add-btn", addBtn); entry->bindWidget("add-btn", addBtn);
addBtn->clicked().connect(std::bind([=] addBtn->clicked().connect(std::bind([=]
{ {
@@ -134,8 +134,6 @@ Releases::addSome()
})); }));
} }
std::cerr << "if-show-more = " << moreResults << "\n";
_showMore->setHidden(!moreResults); _showMore->setHidden(!moreResults);
} }
@@ -39,15 +39,15 @@ Tracks::Tracks(Filters* filters, Wt::WContainerWidget* parent)
: Wt::WContainerWidget(parent), : Wt::WContainerWidget(parent),
_filters(filters) _filters(filters)
{ {
auto container = new Wt::WTemplate(Wt::WString::tr("template-tracks"), this); auto container = new Wt::WTemplate(Wt::WString::tr("Lms.Explore.Tracks.template"), this);
container->addFunction("tr", &Wt::WTemplate::Functions::tr); container->addFunction("tr", &Wt::WTemplate::Functions::tr);
_search = new Wt::WLineEdit(); _search = new Wt::WLineEdit();
container->bindWidget("search", _search); container->bindWidget("search", _search);
_search->setPlaceholderText(Wt::WString::tr("msg-search-placeholder")); _search->setPlaceholderText(Wt::WString::tr("Lms.Explore.search-placeholder"));
_search->textInput().connect(this, &Tracks::refresh); _search->textInput().connect(this, &Tracks::refresh);
auto playBtn = new Wt::WText(Wt::WString::tr("btn-tracks-play-btn"), Wt::XHTMLText); auto playBtn = new Wt::WText(Wt::WString::tr("Lms.Explore.Tracks.play"), Wt::XHTMLText);
container->bindWidget("play-btn", playBtn); container->bindWidget("play-btn", playBtn);
playBtn->clicked().connect(std::bind([=] playBtn->clicked().connect(std::bind([=]
{ {
@@ -55,7 +55,7 @@ Tracks::Tracks(Filters* filters, Wt::WContainerWidget* parent)
tracksPlay.emit(getTracks()); tracksPlay.emit(getTracks());
})); }));
auto addBtn = new Wt::WText(Wt::WString::tr("btn-tracks-add-btn"), Wt::XHTMLText); auto addBtn = new Wt::WText(Wt::WString::tr("Lms.Explore.Tracks.add"), Wt::XHTMLText);
container->bindWidget("add-btn", addBtn); container->bindWidget("add-btn", addBtn);
addBtn->clicked().connect(std::bind([=] addBtn->clicked().connect(std::bind([=]
{ {
@@ -66,7 +66,7 @@ Tracks::Tracks(Filters* filters, Wt::WContainerWidget* parent)
_tracksContainer = new Wt::WContainerWidget(); _tracksContainer = new Wt::WContainerWidget();
container->bindWidget("tracks", _tracksContainer); container->bindWidget("tracks", _tracksContainer);
_showMore = new Wt::WTemplate(Wt::WString::tr("template-show-more")); _showMore = new Wt::WTemplate(Wt::WString::tr("Lms.Explore.template.show-more"));
_showMore->addFunction("tr", &Wt::WTemplate::Functions::tr); _showMore->addFunction("tr", &Wt::WTemplate::Functions::tr);
container->bindWidget("show-more", _showMore); container->bindWidget("show-more", _showMore);
@@ -116,7 +116,7 @@ Tracks::addSome()
for (auto track : tracks) for (auto track : tracks)
{ {
auto trackId = track.id(); auto trackId = track.id();
Wt::WTemplate* entry = new Wt::WTemplate(Wt::WString::tr("template-tracks-entry"), _tracksContainer); Wt::WTemplate* entry = new Wt::WTemplate(Wt::WString::tr("Lms.Explore.Tracks.template.entry"), _tracksContainer);
entry->bindString("name", Wt::WString::fromUTF8(track->getName()), Wt::PlainText); entry->bindString("name", Wt::WString::fromUTF8(track->getName()), Wt::PlainText);
@@ -146,14 +146,14 @@ Tracks::addSome()
cover->setWidth(64); cover->setWidth(64);
entry->bindWidget("cover", cover); entry->bindWidget("cover", cover);
auto playBtn = new Wt::WText(Wt::WString::tr("btn-tracks-play-btn"), Wt::XHTMLText); auto playBtn = new Wt::WText(Wt::WString::tr("Lms.Explore.Tracks.play"), Wt::XHTMLText);
entry->bindWidget("play-btn", playBtn); entry->bindWidget("play-btn", playBtn);
playBtn->clicked().connect(std::bind([=] playBtn->clicked().connect(std::bind([=]
{ {
trackPlay.emit(trackId); trackPlay.emit(trackId);
})); }));
auto addBtn = new Wt::WText(Wt::WString::tr("btn-tracks-add-btn"), Wt::XHTMLText); auto addBtn = new Wt::WText(Wt::WString::tr("Lms.Explore.Tracks.add"), Wt::XHTMLText);
entry->bindWidget("add-btn", addBtn); entry->bindWidget("add-btn", addBtn);
addBtn->clicked().connect(std::bind([=] addBtn->clicked().connect(std::bind([=]
{ {