addSongsToPlaylist: add all valid entries instead of stopping at first failure
This commit is contained in:
committed by
Andrzej Rybczak
parent
4415fe8684
commit
7094852c20
@@ -488,31 +488,41 @@ template <typename BufferT> void ShowTag(BufferT &buf, const std::string &tag)
|
|||||||
template <typename SongIterator>
|
template <typename SongIterator>
|
||||||
void addSongsToPlaylist(SongIterator first, SongIterator last, bool play, int position)
|
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)
|
if (last-first >= 1)
|
||||||
{
|
{
|
||||||
int id = Mpd.AddSong(*first, position);
|
int id = addSongNoError(first);
|
||||||
if (id > 0)
|
while (id < 0) {
|
||||||
{
|
if (++first == last)
|
||||||
Mpd.StartCommandsList();
|
return;
|
||||||
if (position == -1)
|
id = addSongNoError(first);
|
||||||
{
|
|
||||||
++first;
|
|
||||||
for(; first != last; ++first)
|
|
||||||
if (Mpd.AddSong(*first) < 0)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
++position;
|
|
||||||
--last;
|
|
||||||
for (; first != last; --last)
|
|
||||||
if (Mpd.AddSong(*last, position) < 0)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
Mpd.CommitCommandsList();
|
|
||||||
if (play)
|
|
||||||
Mpd.PlayID(id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (position == -1)
|
||||||
|
{
|
||||||
|
++first;
|
||||||
|
for(; first != last; ++first)
|
||||||
|
addSongNoError(first);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++position;
|
||||||
|
--last;
|
||||||
|
for (; first != last; --last)
|
||||||
|
addSongNoError(last);
|
||||||
|
}
|
||||||
|
if (play)
|
||||||
|
Mpd.PlayID(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user