static gboolean xmms_playlist_remove_unlocked (xmms_playlist_t *playlist, const gchar *plname, xmmsv_coll_t *plcoll, guint pos, xmms_error_t *err) { gint currpos; xmmsv_t *dict; g_return_val_if_fail (playlist, FALSE); currpos = xmms_playlist_coll_get_currpos (plcoll); if (!xmmsv_coll_idlist_remove (plcoll, pos)) { if (err) xmms_error_set (err, XMMS_ERROR_NOENT, "Entry was not in list!"); return FALSE; } dict = xmms_playlist_changed_msg_new (playlist, XMMS_PLAYLIST_CHANGED_REMOVE, 0, plname); xmmsv_dict_set_int (dict, "position", pos); xmms_playlist_changed_msg_send (playlist, dict); /* decrease current position if removed entry was before or if it's * the current entry, but only if current position is a valid entry. */ if (currpos != -1 && pos <= currpos) { currpos = MAX (0, currpos - 1); xmms_collection_set_int_attr (plcoll, "position", currpos); XMMS_PLAYLIST_CURRPOS_MSG (currpos, plname); } return TRUE; }
void Idlist::remove( unsigned int index ) { if( !xmmsv_coll_idlist_remove( coll_, index ) ) { std::stringstream err; err << "Failed to remove idlist entry at index " << index; throw collection_operation_error( err.str() ); } }