db/update/Walk: clear `Song::in_playlist`
Without clearing all `in_playlist` flags, the songs will never be revealed again if they were hidden once by a CUE sheet, not even after the CUE sheet gets deleted or modified. Closes https://github.com/MusicPlayerDaemon/MPD/issues/1784
This commit is contained in:
parent
dc127f39a7
commit
068cd559e1
2
NEWS
2
NEWS
|
@ -3,6 +3,8 @@ ver 0.23.13 (not yet released)
|
||||||
- curl: fix busy loop after connection failed
|
- curl: fix busy loop after connection failed
|
||||||
* archive
|
* archive
|
||||||
- zzip: fix crash bug
|
- zzip: fix crash bug
|
||||||
|
* database
|
||||||
|
- simple: reveal hidden songs after deleting containing CUE
|
||||||
* decoder
|
* decoder
|
||||||
- ffmpeg: reorder to a lower priority than "gme"
|
- ffmpeg: reorder to a lower priority than "gme"
|
||||||
- gme: require GME 0.6 or later
|
- gme: require GME 0.6 or later
|
||||||
|
|
|
@ -126,6 +126,18 @@ Directory::LookupTargetSong(std::string_view _target) noexcept
|
||||||
return lr.directory->FindSong(lr.rest);
|
return lr.directory->FindSong(lr.rest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Directory::ClearInPlaylist() noexcept
|
||||||
|
{
|
||||||
|
assert(holding_db_lock());
|
||||||
|
|
||||||
|
for (auto &child : children)
|
||||||
|
child.ClearInPlaylist();
|
||||||
|
|
||||||
|
for (auto &song : songs)
|
||||||
|
song.in_playlist = false;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Directory::PruneEmpty() noexcept
|
Directory::PruneEmpty() noexcept
|
||||||
{
|
{
|
||||||
|
|
|
@ -287,6 +287,14 @@ public:
|
||||||
*/
|
*/
|
||||||
SongPtr RemoveSong(Song *song) noexcept;
|
SongPtr RemoveSong(Song *song) noexcept;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recursively walk through the whole tree and set all
|
||||||
|
* `Song::in_playlist` fields to `false`.
|
||||||
|
*
|
||||||
|
* Caller must lock the #db_mutex.
|
||||||
|
*/
|
||||||
|
void ClearInPlaylist() noexcept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Caller must lock the #db_mutex.
|
* Caller must lock the #db_mutex.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -531,6 +531,7 @@ UpdateWalk::Walk(Directory &root, const char *path, bool discard) noexcept
|
||||||
|
|
||||||
{
|
{
|
||||||
const ScopeDatabaseLock protect;
|
const ScopeDatabaseLock protect;
|
||||||
|
root.ClearInPlaylist();
|
||||||
PurgeDanglingFromPlaylists(root);
|
PurgeDanglingFromPlaylists(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue