addSongsToPlaylist: add all valid entries instead of stopping at first failure

This commit is contained in:
James Pike
2013-12-31 02:14:34 +00:00
committed by Andrzej Rybczak
parent 4415fe8684
commit 7094852c20

View File

@@ -488,32 +488,42 @@ template <typename BufferT> void ShowTag(BufferT &buf, const std::string &tag)
template <typename SongIterator>
void addSongsToPlaylist(SongIterator first, SongIterator last, bool play, int position)
{
auto addSongNoError = [&](SongIterator song) -> int {
try
{
return Mpd.AddSong(*song, position);
}
catch (...)
{
return -1;
}
};
if (last-first >= 1)
{
int id = Mpd.AddSong(*first, position);
if (id > 0)
{
Mpd.StartCommandsList();
int id = addSongNoError(first);
while (id < 0) {
if (++first == last)
return;
id = addSongNoError(first);
}
if (position == -1)
{
++first;
for(; first != last; ++first)
if (Mpd.AddSong(*first) < 0)
break;
addSongNoError(first);
}
else
{
++position;
--last;
for (; first != last; --last)
if (Mpd.AddSong(*last, position) < 0)
break;
addSongNoError(last);
}
Mpd.CommitCommandsList();
if (play)
Mpd.PlayID(id);
}
}
}
bool addSongToPlaylist(const MPD::Song &s, bool play, int position = -1);