MPD::SongList Browser::getSelectedSongs() { MPD::SongList result; auto item_handler = [this, &result](const MPD::Item &item) { if (item.type == itDirectory) { # ifndef WIN32 if (isLocal()) { MPD::ItemList list; GetLocalDirectory(list, item.name, true); for (auto it = list.begin(); it != list.end(); ++it) result.push_back(*it->song); } else # endif // !WIN32 { auto list = Mpd.GetDirectoryRecursive(item.name); result.insert(result.end(), list.begin(), list.end()); } } else if (item.type == itSong) result.push_back(*item.song); else if (item.type == itPlaylist) { auto list = Mpd.GetPlaylistContent(item.name); result.insert(result.end(), list.begin(), list.end()); } }; for (auto it = w.begin(); it != w.end(); ++it) if (it->isSelected()) item_handler(it->value()); // if no item is selected, add current one if (result.empty() && !w.empty()) item_handler(w.current().value()); return result; }
MPD::SongList MediaLibrary::getSelectedSongs() { MPD::SongList result; if (isActiveWindow(Tags)) { auto tag_handler = [&result](const std::string &tag) { Mpd.StartSearch(true); Mpd.AddSearch(Config.media_lib_primary_tag, tag); Mpd.CommitSearchSongs(vectorMoveInserter(result)); }; bool any_selected = false; for (auto &e : Tags) { if (e.isSelected()) { any_selected = true; tag_handler(e.value().tag()); } } // if no item is selected, add current one if (!any_selected && !Tags.empty()) tag_handler(Tags.current().value().tag()); } else if (isActiveWindow(Albums)) { bool any_selected = false; for (auto it = Albums.begin(); it != Albums.end() && !it->isSeparator(); ++it) { if (it->isSelected()) { any_selected = true; auto &sc = it->value(); Mpd.StartSearch(true); if (hasTwoColumns) Mpd.AddSearch(Config.media_lib_primary_tag, sc.entry().tag()); else Mpd.AddSearch(Config.media_lib_primary_tag, Tags.current().value().tag()); Mpd.AddSearch(MPD_TAG_ALBUM, sc.entry().album()); Mpd.AddSearch(MPD_TAG_DATE, sc.entry().date()); size_t begin = result.size(); Mpd.CommitSearchSongs(vectorMoveInserter(result)); std::sort(result.begin()+begin, result.end(), SortSongs(false)); } } // if no item is selected, add songs from right column if (!any_selected && !Albums.empty()) { withUnfilteredMenu(Songs, [this, &result]() { result.insert(result.end(), Songs.beginV(), Songs.endV()); }); } } else if (isActiveWindow(Songs)) { for (auto it = Songs.begin(); it != Songs.end(); ++it) if (it->isSelected()) result.push_back(it->value()); // if no item is selected, add current one if (result.empty() && !Songs.empty()) result.push_back(Songs.current().value()); } return result; }