Do not rerender artist and release views if the path is already rendered

This commit is contained in:
emeric
2023-04-30 21:45:54 +02:00
parent 118f20e3bf
commit 3a1ffc17e5
3 changed files with 30 additions and 17 deletions
+10 -5
View File
@@ -108,11 +108,16 @@ Artist::refreshView()
if (!wApp->internalPathMatches("/artist/")) if (!wApp->internalPathMatches("/artist/"))
return; return;
const auto artistId {extractArtistIdFromInternalPath()};
// consider everything is up to date is the same artist is being rendered
if (artistId && *artistId == _artistId)
return;
clear(); clear();
_artistId = {}; _artistId = {};
_trackContainer = nullptr; _trackContainer = nullptr;
const auto artistId {extractArtistIdFromInternalPath()};
if (!artistId) if (!artistId)
throw ArtistNotFoundException {}; throw ArtistNotFoundException {};
@@ -177,22 +182,22 @@ Artist::refreshView()
_playQueueController.processCommand(PlayQueueController::Command::PlayOrAddLast, {_artistId}); _playQueueController.processCommand(PlayQueueController::Command::PlayOrAddLast, {_artistId});
}); });
bindNew<Wt::WPushButton>("download", Wt::WString::tr("Lms.Explore.download")) bindNew<Wt::WPushButton>("download", Wt::WString::tr("Lms.Explore.download"))
->setLink(Wt::WLink {std::make_unique<DownloadArtistResource>(*artistId)}); ->setLink(Wt::WLink {std::make_unique<DownloadArtistResource>(_artistId)});
{ {
auto isStarred {[=] { return Service<Scrobbling::IScrobblingService>::get()->isStarred(LmsApp->getUserId(), *artistId); }}; auto isStarred {[=] { return Service<Scrobbling::IScrobblingService>::get()->isStarred(LmsApp->getUserId(), _artistId); }};
Wt::WPushButton* starBtn {bindNew<Wt::WPushButton>("star", Wt::WString::tr(isStarred() ? "Lms.Explore.unstar" : "Lms.Explore.star"))}; Wt::WPushButton* starBtn {bindNew<Wt::WPushButton>("star", Wt::WString::tr(isStarred() ? "Lms.Explore.unstar" : "Lms.Explore.star"))};
starBtn->clicked().connect([=] starBtn->clicked().connect([=]
{ {
if (isStarred()) if (isStarred())
{ {
Service<Scrobbling::IScrobblingService>::get()->unstar(LmsApp->getUserId(), *artistId); Service<Scrobbling::IScrobblingService>::get()->unstar(LmsApp->getUserId(), _artistId);
starBtn->setText(Wt::WString::tr("Lms.Explore.star")); starBtn->setText(Wt::WString::tr("Lms.Explore.star"));
} }
else else
{ {
Service<Scrobbling::IScrobblingService>::get()->star(LmsApp->getUserId(), *artistId); Service<Scrobbling::IScrobblingService>::get()->star(LmsApp->getUserId(), _artistId);
starBtn->setText(Wt::WString::tr("Lms.Explore.unstar")); starBtn->setText(Wt::WString::tr("Lms.Explore.unstar"));
} }
}); });
+19 -12
View File
@@ -217,9 +217,15 @@ Release::refreshView()
if (!wApp->internalPathMatches("/release/")) if (!wApp->internalPathMatches("/release/"))
return; return;
clear();
const auto releaseId {extractReleaseIdFromInternalPath()}; const auto releaseId {extractReleaseIdFromInternalPath()};
// consider everything is up to date is the same release is being rendered
if (releaseId && *releaseId == _releaseId)
return;
clear();
_releaseId = {};
if (!releaseId) if (!releaseId)
throw ReleaseNotFoundException {}; throw ReleaseNotFoundException {};
@@ -232,6 +238,7 @@ Release::refreshView()
throw ReleaseNotFoundException {}; throw ReleaseNotFoundException {};
LmsApp->setTitle(release->getName()); LmsApp->setTitle(release->getName());
_releaseId = *releaseId;
refreshCopyright(release); refreshCopyright(release);
refreshLinks(release); refreshLinks(release);
@@ -281,50 +288,50 @@ Release::refreshView()
bindNew<Wt::WPushButton>("play-btn", Wt::WString::tr("Lms.Explore.play"), Wt::TextFormat::XHTML) bindNew<Wt::WPushButton>("play-btn", Wt::WString::tr("Lms.Explore.play"), Wt::TextFormat::XHTML)
->clicked().connect([=] ->clicked().connect([=]
{ {
_playQueueController.processCommand(PlayQueueController::Command::Play, {*releaseId}); _playQueueController.processCommand(PlayQueueController::Command::Play, {_releaseId});
}); });
bindNew<Wt::WPushButton>("play-shuffled", Wt::WString::tr("Lms.Explore.play-shuffled"), Wt::TextFormat::Plain) bindNew<Wt::WPushButton>("play-shuffled", Wt::WString::tr("Lms.Explore.play-shuffled"), Wt::TextFormat::Plain)
->clicked().connect([=] ->clicked().connect([=]
{ {
_playQueueController.processCommand(PlayQueueController::Command::PlayShuffled, {*releaseId}); _playQueueController.processCommand(PlayQueueController::Command::PlayShuffled, {_releaseId});
}); });
bindNew<Wt::WPushButton>("play-next", Wt::WString::tr("Lms.Explore.play-next"), Wt::TextFormat::Plain) bindNew<Wt::WPushButton>("play-next", Wt::WString::tr("Lms.Explore.play-next"), Wt::TextFormat::Plain)
->clicked().connect([=] ->clicked().connect([=]
{ {
_playQueueController.processCommand(PlayQueueController::Command::PlayNext, {*releaseId}); _playQueueController.processCommand(PlayQueueController::Command::PlayNext, {_releaseId});
}); });
bindNew<Wt::WPushButton>("play-last", Wt::WString::tr("Lms.Explore.play-last"), Wt::TextFormat::Plain) bindNew<Wt::WPushButton>("play-last", Wt::WString::tr("Lms.Explore.play-last"), Wt::TextFormat::Plain)
->clicked().connect([=] ->clicked().connect([=]
{ {
_playQueueController.processCommand(PlayQueueController::Command::PlayOrAddLast, {*releaseId}); _playQueueController.processCommand(PlayQueueController::Command::PlayOrAddLast, {_releaseId});
}); });
bindNew<Wt::WPushButton>("download", Wt::WString::tr("Lms.Explore.download")) bindNew<Wt::WPushButton>("download", Wt::WString::tr("Lms.Explore.download"))
->setLink(Wt::WLink {std::make_unique<DownloadReleaseResource>(*releaseId)}); ->setLink(Wt::WLink {std::make_unique<DownloadReleaseResource>(_releaseId)});
bindNew<Wt::WPushButton>("release-info", Wt::WString::tr("Lms.Explore.release-info")) bindNew<Wt::WPushButton>("release-info", Wt::WString::tr("Lms.Explore.release-info"))
->clicked().connect([=] ->clicked().connect([=]
{ {
showReleaseInfoModal(*releaseId); showReleaseInfoModal(_releaseId);
}); });
{ {
auto isStarred {[=] { return Service<Scrobbling::IScrobblingService>::get()->isStarred(LmsApp->getUserId(), *releaseId); }}; auto isStarred {[=] { return Service<Scrobbling::IScrobblingService>::get()->isStarred(LmsApp->getUserId(), _releaseId); }};
Wt::WPushButton* starBtn {bindNew<Wt::WPushButton>("star", Wt::WString::tr(isStarred() ? "Lms.Explore.unstar" : "Lms.Explore.star"))}; Wt::WPushButton* starBtn {bindNew<Wt::WPushButton>("star", Wt::WString::tr(isStarred() ? "Lms.Explore.unstar" : "Lms.Explore.star"))};
starBtn->clicked().connect([=] starBtn->clicked().connect([=]
{ {
if (isStarred()) if (isStarred())
{ {
Service<Scrobbling::IScrobblingService>::get()->unstar(LmsApp->getUserId(), *releaseId); Service<Scrobbling::IScrobblingService>::get()->unstar(LmsApp->getUserId(), _releaseId);
starBtn->setText(Wt::WString::tr("Lms.Explore.star")); starBtn->setText(Wt::WString::tr("Lms.Explore.star"));
} }
else else
{ {
Service<Scrobbling::IScrobblingService>::get()->star(LmsApp->getUserId(), *releaseId); Service<Scrobbling::IScrobblingService>::get()->star(LmsApp->getUserId(), _releaseId);
starBtn->setText(Wt::WString::tr("Lms.Explore.unstar")); starBtn->setText(Wt::WString::tr("Lms.Explore.unstar"));
} }
}); });
@@ -373,7 +380,7 @@ Release::refreshView()
}; };
Database::Track::FindParameters params; Database::Track::FindParameters params;
params.setRelease(*releaseId); params.setRelease(_releaseId);
params.setSortMethod(Database::TrackSortMethod::Release); params.setSortMethod(Database::TrackSortMethod::Release);
params.setClusters(_filters.getClusterIds()); params.setClusters(_filters.getClusterIds());
+1
View File
@@ -47,6 +47,7 @@ namespace UserInterface
Filters& _filters; Filters& _filters;
PlayQueueController& _playQueueController; PlayQueueController& _playQueueController;
Database::ReleaseId _releaseId;
}; };
} // namespace UserInterface } // namespace UserInterface