diff --git a/approot/messages_zh.xml b/approot/messages_zh.xml
index ac634b2d..40f02769 100644
--- a/approot/messages_zh.xml
+++ b/approot/messages_zh.xml
@@ -165,6 +165,7 @@
+
搜索中...
diff --git a/src/lms/ui/explore/Explore.cpp b/src/lms/ui/explore/Explore.cpp
index c1b00ddd..c0c2a18e 100644
--- a/src/lms/ui/explore/Explore.cpp
+++ b/src/lms/ui/explore/Explore.cpp
@@ -52,8 +52,8 @@ handleContentsPathChange(Wt::WStackedWidget* stack)
{
IdxArtists = 0,
IdxArtist,
- IdxTracklists,
- IdxTracklist,
+ IdxTrackLists,
+ IdxTrackList,
IdxReleases,
IdxRelease,
IdxSearch,
@@ -64,8 +64,8 @@ handleContentsPathChange(Wt::WStackedWidget* stack)
{
{ "/artists", IdxArtists },
{ "/artist", IdxArtist },
- { "/tracklists", IdxTracklists },
- { "/tracklist", IdxTracklist },
+ { "/tracklists", IdxTrackLists },
+ { "/tracklist", IdxTrackList },
{ "/releases", IdxReleases },
{ "/release", IdxRelease },
{ "/search", IdxSearch },
@@ -103,14 +103,18 @@ Explore::Explore(Filters* filters)
artist->tracksAction.connect(this, &Explore::handleTracksAction);
contentsStack->addWidget(std::move(artist));
- auto tracklists {std::make_unique(*_filters)};
- tracklists->trackListAction.connect(this, &Explore::handleTrackListAction);
- contentsStack->addWidget(std::move(tracklists));
+ auto trackLists {std::make_unique(*_filters)};
+ TrackLists* trackListsPtr {trackLists.get()};
+ trackLists->trackListAction.connect(this, &Explore::handleTrackListAction);
+ contentsStack->addWidget(std::move(trackLists));
- auto tracklist {std::make_unique(*_filters)};
- tracklist->trackListAction.connect(this, &Explore::handleTrackListAction);
- tracklist->tracksAction.connect(this, &Explore::handleTracksAction);
- contentsStack->addWidget(std::move(tracklist));
+ auto trackList {std::make_unique(*_filters)};
+ TrackList* trackListPtr {trackList.get()};
+ trackList->trackListAction.connect(this, &Explore::handleTrackListAction);
+ trackList->tracksAction.connect(this, &Explore::handleTracksAction);
+ contentsStack->addWidget(std::move(trackList));
+
+ trackListPtr->trackListDeleted.connect(trackListsPtr, &TrackLists::onTrackListDeleted);
auto releases = std::make_unique(*_filters);
releases->releasesAction.connect(this, &Explore::handleReleasesAction);
diff --git a/src/lms/ui/explore/TrackListView.cpp b/src/lms/ui/explore/TrackListView.cpp
index 5ebf7d0b..7926a174 100644
--- a/src/lms/ui/explore/TrackListView.cpp
+++ b/src/lms/ui/explore/TrackListView.cpp
@@ -133,6 +133,7 @@ namespace UserInterface
}
clear();
+ trackListDeleted.emit(*trackListId);
LmsApp->setInternalPath("/tracklists", true);
LmsApp->getModalManager().dispose(modalPtr);
diff --git a/src/lms/ui/explore/TrackListView.hpp b/src/lms/ui/explore/TrackListView.hpp
index fa5e8a9b..a8b2ec5a 100644
--- a/src/lms/ui/explore/TrackListView.hpp
+++ b/src/lms/ui/explore/TrackListView.hpp
@@ -38,6 +38,8 @@ namespace UserInterface
PlayQueueActionTrackListSignal trackListAction;
PlayQueueActionTrackSignal tracksAction;
+ Wt::Signal trackListDeleted;
+
private:
void refreshView();
void addSome();
diff --git a/src/lms/ui/explore/TrackListsView.cpp b/src/lms/ui/explore/TrackListsView.cpp
index 5216d194..9a878a8d 100644
--- a/src/lms/ui/explore/TrackListsView.cpp
+++ b/src/lms/ui/explore/TrackListsView.cpp
@@ -78,10 +78,23 @@ namespace UserInterface
refreshView();
}
+ void
+ TrackLists::onTrackListDeleted(Database::TrackListId trackListId)
+ {
+ auto itTrackList {_trackListWidgets.find(trackListId)};
+ if (itTrackList == std::end(_trackListWidgets))
+ return;
+
+ _container->remove(*itTrackList->second);
+ _trackListWidgets.erase(itTrackList);
+
+ }
+
void
TrackLists::refreshView()
{
_container->clear();
+ _trackListWidgets.clear();
addSome();
}
@@ -125,6 +138,9 @@ namespace UserInterface
WTemplate* entry {_container->addNew(Wt::WString::tr("Lms.Explore.TrackLists.template.entry"))};
entry->bindWidget("name", LmsApplication::createTrackListAnchor(trackList));
+
+ assert(_trackListWidgets.find(trackListId) == std::cend(_trackListWidgets));
+ _trackListWidgets.emplace(trackListId, entry);
}
} // namespace UserInterface
diff --git a/src/lms/ui/explore/TrackListsView.hpp b/src/lms/ui/explore/TrackListsView.hpp
index c2aac02f..5a7e5b89 100644
--- a/src/lms/ui/explore/TrackListsView.hpp
+++ b/src/lms/ui/explore/TrackListsView.hpp
@@ -19,9 +19,11 @@
#pragma once
+#include
#include
#include "services/database/Object.hpp"
+#include "services/database/TrackListId.hpp"
#include "services/database/Types.hpp"
#include "common/Template.hpp"
@@ -44,6 +46,8 @@ namespace UserInterface
PlayQueueActionTrackListSignal trackListAction;
+ void onTrackListDeleted(Database::TrackListId trackListId);
+
private:
enum class Mode
{
@@ -62,6 +66,7 @@ namespace UserInterface
Filters& _filters;
Wt::WWidget* _currentActiveItem {};
InfiniteScrollingContainer* _container {};
+ std::unordered_map _trackListWidgets;
};
} // namespace UserInterface