use common interface for adding item(s) to playlist
this also removes a few code duplications.
This commit is contained in:
121
src/browser.cpp
121
src/browser.cpp
@@ -107,53 +107,15 @@ void Browser::EnterPressed()
|
||||
}
|
||||
case itSong:
|
||||
{
|
||||
BlockItemListUpdate = 1;
|
||||
if (Config.ncmpc_like_songs_adding && w->isBold())
|
||||
{
|
||||
bool found = 0;
|
||||
unsigned hash = w->Current().song->GetHash();
|
||||
for (size_t i = 0; i < myPlaylist->Main()->Size(); ++i)
|
||||
{
|
||||
if (myPlaylist->Main()->at(i).GetHash() == hash)
|
||||
{
|
||||
Mpd.Play(i);
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (found)
|
||||
break;
|
||||
}
|
||||
Song &s = *item.song;
|
||||
int id = Mpd.AddSong(s);
|
||||
if (id >= 0)
|
||||
{
|
||||
Mpd.PlayID(id);
|
||||
ShowMessage("Added to playlist: %s", s.toString(Config.song_status_format).c_str());
|
||||
w->BoldOption(w->Choice(), 1);
|
||||
}
|
||||
w->BoldOption(w->Choice(), myPlaylist->Add(*item.song, w->isBold(), 1));
|
||||
break;
|
||||
}
|
||||
case itPlaylist:
|
||||
{
|
||||
SongList list;
|
||||
Mpd.GetPlaylistContent(locale_to_utf_cpy(item.name), list);
|
||||
Mpd.StartCommandsList();
|
||||
SongList::const_iterator it = list.begin();
|
||||
for (; it != list.end(); ++it)
|
||||
if (Mpd.AddSong(**it) < 0)
|
||||
break;
|
||||
Mpd.CommitCommandsList();
|
||||
|
||||
if (it != list.begin())
|
||||
{
|
||||
if (myPlaylist->Add(list, 1))
|
||||
ShowMessage("Loading and playing playlist %s...", item.name.c_str());
|
||||
Song *s = &myPlaylist->Main()->at(myPlaylist->Main()->Size()-list.size());
|
||||
if (s->GetHash() == list[0]->GetHash())
|
||||
Mpd.PlayID(s->GetID());
|
||||
else
|
||||
ShowMessage("%s", MPD::Message::PartOfSongsAdded);
|
||||
}
|
||||
FreeSongList(list);
|
||||
break;
|
||||
}
|
||||
@@ -180,95 +142,36 @@ void Browser::SpacePressed()
|
||||
if (itsBrowsedDir != "/" && !w->Choice())
|
||||
break; // do not let add parent dir.
|
||||
|
||||
bool everything_was_added = 1;
|
||||
SongList list;
|
||||
if (Config.local_browser)
|
||||
{
|
||||
ItemList list;
|
||||
|
||||
ItemList items;
|
||||
ShowMessage("Scanning \"%s\"...", item.name.c_str());
|
||||
myBrowser->GetLocalDirectory(list, item.name, 1);
|
||||
|
||||
Mpd.StartCommandsList();
|
||||
for (ItemList::const_iterator it = list.begin(); it != list.end(); ++it)
|
||||
{
|
||||
if (everything_was_added && Mpd.AddSong(*it->song) < 0)
|
||||
everything_was_added = 0;
|
||||
delete it->song;
|
||||
}
|
||||
Mpd.CommitCommandsList();
|
||||
myBrowser->GetLocalDirectory(items, item.name, 1);
|
||||
list.reserve(items.size());
|
||||
for (MPD::ItemList::const_iterator it = items.begin(); it != items.end(); ++it)
|
||||
list.push_back(it->song);
|
||||
}
|
||||
else
|
||||
{
|
||||
SongList list;
|
||||
Mpd.GetDirectoryRecursive(locale_to_utf_cpy(item.name), list);
|
||||
Mpd.StartCommandsList();
|
||||
for (SongList::const_iterator it = list.begin(); it != list.end(); ++it)
|
||||
{
|
||||
if (Mpd.AddSong(**it) < 0)
|
||||
{
|
||||
everything_was_added = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
Mpd.CommitCommandsList();
|
||||
FreeSongList(list);
|
||||
}
|
||||
|
||||
if (everything_was_added)
|
||||
if (myPlaylist->Add(list, 0))
|
||||
ShowMessage("Added folder: %s", item.name.c_str());
|
||||
|
||||
FreeSongList(list);
|
||||
break;
|
||||
}
|
||||
case itSong:
|
||||
{
|
||||
BlockItemListUpdate = 1;
|
||||
if (Config.ncmpc_like_songs_adding && w->isBold())
|
||||
{
|
||||
Playlist::BlockUpdate = 1;
|
||||
unsigned hash = w->Current().song->GetHash();
|
||||
Mpd.StartCommandsList();
|
||||
for (size_t i = 0; i < myPlaylist->Main()->Size(); ++i)
|
||||
{
|
||||
if (myPlaylist->Main()->at(i).GetHash() == hash)
|
||||
{
|
||||
Mpd.Delete(i);
|
||||
myPlaylist->Main()->DeleteOption(i);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
Mpd.CommitCommandsList();
|
||||
w->BoldOption(w->Choice(), 0);
|
||||
Playlist::BlockUpdate = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
Song &s = *item.song;
|
||||
if (Mpd.AddSong(s) != -1)
|
||||
{
|
||||
ShowMessage("Added to playlist: %s", s.toString(Config.song_status_format).c_str());
|
||||
w->BoldOption(w->Choice(), 1);
|
||||
}
|
||||
}
|
||||
w->BoldOption(w->Choice(), myPlaylist->Add(*item.song, w->isBold(), 0));
|
||||
break;
|
||||
}
|
||||
case itPlaylist:
|
||||
{
|
||||
SongList list;
|
||||
Mpd.GetPlaylistContent(locale_to_utf_cpy(item.name), list);
|
||||
Mpd.StartCommandsList();
|
||||
SongList::const_iterator it = list.begin();
|
||||
for (; it != list.end(); ++it)
|
||||
if (Mpd.AddSong(**it) < 0)
|
||||
break;
|
||||
Mpd.CommitCommandsList();
|
||||
|
||||
if (it != list.begin())
|
||||
{
|
||||
if (myPlaylist->Add(list, 0))
|
||||
ShowMessage("Loading playlist %s...", item.name.c_str());
|
||||
Song &s = myPlaylist->Main()->at(myPlaylist->Main()->Size()-list.size());
|
||||
if (s.GetHash() != list[0]->GetHash())
|
||||
ShowMessage("%s", MPD::Message::PartOfSongsAdded);
|
||||
}
|
||||
FreeSongList(list);
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user