/** * Retrieves all playlist contents from MPD. Requires that the local playlist * index is updated using `update_playlist_index()`. * * Returns true on success, false on failure. */ bool Control::update_playlists() { vector<Playlist *>::iterator playlist_iterator; Playlist * playlist; EXIT_IDLE; pms->log(MSG_DEBUG, 0, "Synchronizing all playlists with MPD\n"); playlist_iterator = playlists.begin(); while (playlist_iterator != playlists.end()) { playlist = *playlist_iterator; if (!playlist->exists_in_mpd()) { pms->disp->remove_list(playlist); delete playlist; playlist_iterator = playlists.erase(playlist_iterator); continue; } else if (!playlist->is_synchronized()) { if (!update_playlist(playlist)) { return false; } playlist->set_synchronized(true); } else { pms->log(MSG_DEBUG, 0, "Playlist %s is already synchronized.\n", playlist->filename.c_str()); } ++playlist_iterator; } pms->log(MSG_DEBUG, 0, "Playlist synchronization is finished.\n"); return get_error_bool(); }