status: always replace song, but deselect only when path changes
This commit is contained in:
@@ -427,23 +427,19 @@ void Status::Changes::playlist(unsigned previous_version)
|
|||||||
for (; s != end; ++s)
|
for (; s != end; ++s)
|
||||||
{
|
{
|
||||||
size_t pos = s->getPosition();
|
size_t pos = s->getPosition();
|
||||||
|
myPlaylist->registerSong(*s);
|
||||||
if (pos < myPlaylist->main().size())
|
if (pos < myPlaylist->main().size())
|
||||||
{
|
{
|
||||||
// if song's already in playlist, replace it with a new one
|
// if song's already in playlist, replace it with a new one
|
||||||
MPD::Song &old_s = myPlaylist->main()[pos].value();
|
MPD::Song &old_s = myPlaylist->main()[pos].value();
|
||||||
|
myPlaylist->unregisterSong(old_s);
|
||||||
|
// remove selection only if the path is different
|
||||||
if (old_s != *s)
|
if (old_s != *s)
|
||||||
{
|
|
||||||
myPlaylist->registerSong(*s);
|
|
||||||
myPlaylist->unregisterSong(old_s);
|
|
||||||
myPlaylist->main()[pos].setSelected(false);
|
myPlaylist->main()[pos].setSelected(false);
|
||||||
old_s = std::move(*s);
|
old_s = std::move(*s);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else // otherwise just add it to playlist
|
else // otherwise just add it to playlist
|
||||||
{
|
|
||||||
myPlaylist->registerSong(*s);
|
|
||||||
myPlaylist->main().addItem(std::move(*s));
|
myPlaylist->main().addItem(std::move(*s));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
myPlaylist->reloadTotalLength();
|
myPlaylist->reloadTotalLength();
|
||||||
|
|||||||
Reference in New Issue
Block a user