status: always replace song, but deselect only when path changes

This commit is contained in:
Andrzej Rybczak
2015-05-18 00:04:04 +02:00
parent a6c120037f
commit a800226cd4

View File

@@ -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();