bool Connection::AddRandomTag(mpd_tag_type tag, size_t number) { std::vector<std::string> tags( std::make_move_iterator(GetList(tag)), std::make_move_iterator(StringIterator()) ); if (number > tags.size()) return false; std::random_shuffle(tags.begin(), tags.end()); auto it = tags.begin()+rand()%(tags.size()-number); for (size_t i = 0; i < number && it != tags.end(); ++i) { StartSearch(true); AddSearch(tag, *it++); std::vector<std::string> paths; MPD::SongIterator s = CommitSearchSongs(), end; for (; s != end; ++s) paths.push_back(s->getURI()); StartCommandsList(); for (const auto &path : paths) AddSong(path); CommitCommandsList(); } return true; }