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
+11 -11
View File
@@ -21,26 +21,26 @@ lms_SOURCES = \
$(srcdir)/metadata/AvFormat.cpp \
$(srcdir)/metadata/TagLibParser.cpp \
$(srcdir)/scanner/MediaScanner.cpp \
$(srcdir)/ui/ArtistView.cpp \
$(srcdir)/ui/ArtistsView.cpp \
$(srcdir)/ui/Explore.cpp \
$(srcdir)/ui/Filters.cpp \
$(srcdir)/ui/explore/ArtistView.cpp \
$(srcdir)/ui/explore/ArtistsView.cpp \
$(srcdir)/ui/explore/Explore.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/LmsApplication.cpp \
$(srcdir)/ui/Auth.cpp \
$(srcdir)/ui/MediaPlayer.cpp \
$(srcdir)/ui/PlayQueueView.cpp \
$(srcdir)/ui/ReleasesView.cpp \
$(srcdir)/ui/ReleaseView.cpp \
$(srcdir)/ui/TracksView.cpp \
$(srcdir)/ui/common/Validators.cpp \
$(srcdir)/ui/admin/DatabaseSettingsView.cpp \
$(srcdir)/ui/admin/AdminWizardView.cpp \
$(srcdir)/ui/common/InputRange.cpp \
$(srcdir)/ui/common/LineEdit.cpp \
$(srcdir)/ui/common/Validators.cpp \
$(srcdir)/ui/resource/AvConvTranscodeStreamResource.cpp \
$(srcdir)/ui/resource/ImageResource.cpp \
$(srcdir)/ui/resource/TranscodeResource.cpp \
$(srcdir)/ui/settings/DatabaseSettingsView.cpp \
$(srcdir)/ui/settings/AdminWizardView.cpp \
$(srcdir)/utils/Config.cpp \
$(srcdir)/utils/Logger.cpp \
$(srcdir)/utils/Path.cpp \
+2 -2
View File
@@ -38,7 +38,7 @@ Auth::Auth(Wt::WContainerWidget *parent)
_model->addPasswordAuth(&Database::Handler::getPasswordService());
setTemplateText(Wt::WString::tr("template-login"));
setTemplateText(Wt::WString::tr("Lms.Auth.template"));
addFunction("tr", &WTemplate::Functions::tr);
addFunction("id", &WTemplate::Functions::id);
@@ -55,7 +55,7 @@ Auth::Auth(Wt::WContainerWidget *parent)
auto rememberMe = new Wt::WCheckBox();
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);
loginBtn->clicked().connect(std::bind([=]
{
+1 -1
View File
@@ -31,7 +31,7 @@ namespace UserInterface {
Home::Home(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);
}
+36 -22
View File
@@ -31,13 +31,13 @@
#include "utils/Logger.hpp"
#include "utils/Utils.hpp"
#include "Explore.hpp"
#include "explore/Explore.hpp"
#include "HomeView.hpp"
#include "MediaPlayer.hpp"
#include "PlayQueueView.hpp"
#include "settings/DatabaseSettingsView.hpp"
#include "settings/AdminWizardView.hpp"
#include "admin/DatabaseSettingsView.hpp"
#include "admin/AdminWizardView.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");
// Add a resource bundle
messageResourceBundle().use(appRoot() + "admin-database");
messageResourceBundle().use(appRoot() + "admin-wizard");
messageResourceBundle().use(appRoot() + "artist");
messageResourceBundle().use(appRoot() + "artists");
messageResourceBundle().use(appRoot() + "home");
messageResourceBundle().use(appRoot() + "explore");
messageResourceBundle().use(appRoot() + "login");
messageResourceBundle().use(appRoot() + "mediaplayer");
messageResourceBundle().use(appRoot() + "messages");
messageResourceBundle().use(appRoot() + "playqueue");
messageResourceBundle().use(appRoot() + "release");
messageResourceBundle().use(appRoot() + "releases");
messageResourceBundle().use(appRoot() + "settings-database");
messageResourceBundle().use(appRoot() + "settings-admin-wizard");
messageResourceBundle().use(appRoot() + "tracks");
messageResourceBundle().use(appRoot() + "templates");
@@ -183,7 +185,7 @@ enum IdxRoot
IdxHome = 0,
IdxExplore,
IdxPlayQueue,
IdxSettingsDatabase,
IdxAdminDatabase,
};
static void
@@ -198,7 +200,7 @@ handlePathChange(Wt::WStackedWidget* stack)
{ "/release", IdxExplore },
{ "/tracks", IdxExplore },
{ "/playqueue", IdxPlayQueue },
{ "/settings/database", IdxSettingsDatabase },
{ "/admin/database", IdxAdminDatabase },
};
LMS_LOG(UI, DEBUG) << "Internal path changed to '" << wApp->internalPath() << "'";
@@ -231,9 +233,9 @@ LmsApplication::handleAuthEvent(void)
_imageResource = new ImageResource(_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
auto navbar = new Wt::WNavigationBar();
@@ -244,42 +246,54 @@ LmsApplication::handleAuthEvent(void)
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->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->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->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->setSelectable(false);
}
navbar->addMenu(menu);
auto rightMenu = new Wt::WMenu();
std::size_t itemCounter = 0;
{
auto menuItem = rightMenu->insertItem(0, Wt::WString::tr("msg-settings"));
menuItem->setSelectable(false);
Wt::Dbo::Transaction transaction (DboSession());
Wt::WPopupMenu *settings = new Wt::WPopupMenu();
auto dbSettings = settings->insertItem(0, Wt::WString::tr("msg-settings-database"));
dbSettings->setLink(Wt::WLink(Wt::WLink::InternalPath, "/settings/database"));
dbSettings->setSelectable(false);
if (CurrentUser()->isAdmin())
{
auto menuItem = rightMenu->insertItem(itemCounter++, Wt::WString::tr("Lms.administration"));
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->triggered().connect(std::bind([=]
{
@@ -326,7 +340,7 @@ LmsApplication::handleAuthEvent(void)
{
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.additions)
.arg(stats.deletions)
@@ -121,7 +121,7 @@ AdminWizardView::AdminWizardView(Wt::WContainerWidget *parent)
{
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("id", &WTemplate::Functions::id);
@@ -139,7 +139,7 @@ AdminWizardView::AdminWizardView(Wt::WContainerWidget *parent)
setFormWidget(AdminWizardModel::PasswordConfirmField, passwordConfirmEdit);
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);
saveButton->clicked().connect(std::bind([=]
{
@@ -148,7 +148,7 @@ AdminWizardView::AdminWizardView(Wt::WContainerWidget *parent)
if (model->validate())
{
model->saveData();
LmsApp->notify(Wt::WString::tr("msg-settings-first-connection-done"));
LmsApp->notify(Wt::WString::tr("Lms.AdminWizard.done"));
saveButton->setEnabled(false);
}
@@ -181,16 +181,16 @@ class DatabaseSettingsModel : public Wt::WFormModel
_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->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->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->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);
_updateStartTimeModel = new Wt::WStringListModel(this);
@@ -229,7 +229,7 @@ DatabaseSettingsView::DatabaseSettingsView(Wt::WContainerWidget *parent)
{
auto model = new DatabaseSettingsModel(this);
setTemplateText(tr("template-settings-database"));
setTemplateText(tr("Lms.Admin.Database.template"));
addFunction("tr", &WTemplate::Functions::tr);
addFunction("id", &WTemplate::Functions::id);
@@ -249,13 +249,13 @@ DatabaseSettingsView::DatabaseSettingsView(Wt::WContainerWidget *parent)
// 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);
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);
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);
saveBtn->clicked().connect(std::bind([=] ()
@@ -267,7 +267,7 @@ DatabaseSettingsView::DatabaseSettingsView(Wt::WContainerWidget *parent)
model->saveData();
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.
@@ -284,7 +284,7 @@ DatabaseSettingsView::DatabaseSettingsView(Wt::WContainerWidget *parent)
immScanBtn->clicked().connect(std::bind([=] ()
{
LmsApp->getMediaScanner().scheduleImmediateScan();
LmsApp->notify(Wt::WString::tr("msg-notify-scan-launched"));
LmsApp->notify(Wt::WString::tr("Lms.Admin.Database.scan-launched"));
}));
updateView(model);
+1 -1
View File
@@ -60,7 +60,7 @@ DirectoryValidator::validate(const Wt::WString& input) const
else if (res)
return Wt::WValidator::Result(Wt::WValidator::Valid);
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;
}
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);
auto clusterContainers = new Wt::WContainerWidget();
@@ -82,7 +82,7 @@ Artist::refresh()
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);
}
@@ -90,7 +90,7 @@ Artist::refresh()
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);
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);
addBtn->clicked().connect(std::bind([=]
@@ -117,7 +117,7 @@ Artist::refresh()
{
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);
{
@@ -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);
playBtn->clicked().connect(std::bind([=]
{
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);
addBtn->clicked().connect(std::bind([=]
{
@@ -39,18 +39,18 @@ Artists::Artists(Filters* filters, Wt::WContainerWidget* parent)
: Wt::WContainerWidget(parent),
_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);
_search = new Wt::WLineEdit();
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);
_artistsContainer = new Wt::WContainerWidget();
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);
container->bindWidget("show-more", _showMore);
@@ -88,7 +88,7 @@ Artists::addSome()
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());
@@ -73,7 +73,7 @@ handlePathChange(Wt::WStackedWidget* stack)
Explore::Explore(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();
container->bindWidget("filters", _filters);
@@ -31,9 +31,9 @@ namespace UserInterface {
void
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);
dialog->contents()->addWidget(container);
@@ -44,12 +44,12 @@ Filters::showDialog()
auto valueCombo = new Wt::WComboBox();
container->bindWidget("value", valueCombo);
auto addBtn = new Wt::WPushButton(Wt::WString::tr("msg-add"));
container->bindWidget("add", addBtn);
auto addBtn = new Wt::WPushButton(Wt::WString::tr("Lms.add"));
container->bindWidget("add-btn", addBtn);
addBtn->clicked().connect(dialog, &Wt::WDialog::accept);
auto cancelBtn = new Wt::WPushButton(Wt::WString::tr("msg-cancel"));
container->bindWidget("cancel", cancelBtn);
auto cancelBtn = new Wt::WPushButton(Wt::WString::tr("Lms.cancel"));
container->bindWidget("cancel-btn", cancelBtn);
cancelBtn->clicked().connect(dialog, &Wt::WDialog::reject);
// Populate data
@@ -140,10 +140,10 @@ Filters::showDialog()
Filters::Filters(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
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);
_filters = new Wt::WContainerWidget();
@@ -72,7 +72,7 @@ Release::refresh()
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->bindString("name", Wt::WString::fromUTF8(release->getName()), Wt::PlainText);
@@ -95,7 +95,7 @@ Release::refresh()
auto artists = release->getArtists();
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
{
@@ -118,14 +118,14 @@ Release::refresh()
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);
}
}
{
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);
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);
addBtn->clicked().connect(std::bind([=]
{
@@ -154,7 +154,7 @@ Release::refresh()
{
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);
@@ -182,14 +182,14 @@ Release::refresh()
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);
playBtn->clicked().connect(std::bind([=]
{
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);
addBtn->clicked().connect(std::bind([=]
{
@@ -40,18 +40,18 @@ Releases::Releases(Filters* filters, Wt::WContainerWidget* parent)
: Wt::WContainerWidget(parent),
_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);
_search = new Wt::WLineEdit();
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);
_releasesContainer = new Wt::WContainerWidget();
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);
container->bindWidget("show-more", _showMore);
@@ -88,7 +88,7 @@ Releases::addSome()
{
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);
Wt::WAnchor* coverAnchor = LmsApplication::createReleaseAnchor(releaseId);
@@ -109,7 +109,7 @@ Releases::addSome()
auto artists = release->getArtists();
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
{
@@ -119,14 +119,14 @@ Releases::addSome()
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);
playBtn->clicked().connect(std::bind([=]
{
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);
addBtn->clicked().connect(std::bind([=]
{
@@ -134,8 +134,6 @@ Releases::addSome()
}));
}
std::cerr << "if-show-more = " << moreResults << "\n";
_showMore->setHidden(!moreResults);
}
@@ -39,15 +39,15 @@ Tracks::Tracks(Filters* filters, Wt::WContainerWidget* parent)
: Wt::WContainerWidget(parent),
_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);
_search = new Wt::WLineEdit();
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);
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);
playBtn->clicked().connect(std::bind([=]
{
@@ -55,7 +55,7 @@ Tracks::Tracks(Filters* filters, Wt::WContainerWidget* parent)
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);
addBtn->clicked().connect(std::bind([=]
{
@@ -66,7 +66,7 @@ Tracks::Tracks(Filters* filters, Wt::WContainerWidget* parent)
_tracksContainer = new Wt::WContainerWidget();
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);
container->bindWidget("show-more", _showMore);
@@ -116,7 +116,7 @@ Tracks::addSome()
for (auto track : tracks)
{
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);
@@ -146,14 +146,14 @@ Tracks::addSome()
cover->setWidth(64);
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);
playBtn->clicked().connect(std::bind([=]
{
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);
addBtn->clicked().connect(std::bind([=]
{