Пример #1
0
/** Clear the playlist */
static void
xmms_playlist_client_clear (xmms_playlist_t *playlist, const gchar *plname,
                            xmms_error_t *err)
{
	xmmsv_coll_t *plcoll;

	g_return_if_fail (playlist);

	g_mutex_lock (playlist->mutex);

	plcoll = xmms_playlist_get_coll (playlist, plname, err);
	if (plcoll == NULL) {
		g_mutex_unlock (playlist->mutex);
		return;
	}

	xmmsv_coll_idlist_clear (plcoll);
	xmms_collection_set_int_attr (plcoll, "position", -1);

	XMMS_PLAYLIST_CHANGED_MSG (XMMS_PLAYLIST_CHANGED_CLEAR, 0, plname);
	g_mutex_unlock (playlist->mutex);

}
Пример #2
0
	void Idlist::clear()
	{
		if( !xmmsv_coll_idlist_clear( coll_ ) ) {
			throw collection_operation_error( "Failed to clear the idlist" );
		}
	}
Пример #3
0
/** Sorts the playlist by properties.
 *
 *  This will sort the list.
 *  @param playlist The playlist to sort.
 *  @param properties Tells xmms_playlist_sort which properties it
 *  should use when sorting.
 *  @param err An #xmms_error_t - needed since xmms_playlist_sort is an ipc
 *  method handler.
 */
static void
xmms_playlist_client_replace (xmms_playlist_t *playlist, const gchar *plname,
                              xmmsv_coll_t *coll, xmms_playlist_position_action_t action,
                              xmms_error_t *err)
{
    xmms_medialib_entry_t id, current_id;
    xmmsv_coll_t *plcoll;
    xmmsv_t *result;
    gint current_position, i;

    g_return_if_fail (playlist);
    g_return_if_fail (coll);

    g_mutex_lock (playlist->mutex);

    plcoll = xmms_playlist_get_coll (playlist, plname, err);
    if (plcoll == NULL) {
        xmms_error_set (err, XMMS_ERROR_NOENT, "no such playlist!");
        g_mutex_unlock (playlist->mutex);
        return;
    }

    current_position = xmms_playlist_coll_get_currpos (plcoll);
    xmmsv_coll_idlist_get_index (plcoll, current_position, &current_id);

    result = xmms_collection_query_ids (playlist->colldag, coll, err);
    if (result == NULL) {
        g_mutex_unlock (playlist->mutex);
        return;
    }

    xmmsv_coll_idlist_clear (plcoll);

    current_position = -1;

    for (i = 0; xmmsv_list_get_int (result, i, &id); i++) {
        if (id == current_id)
            current_position = i;
        xmmsv_coll_idlist_append (plcoll, id);
    }

    switch (action) {
    case XMMS_PLAYLIST_CURRENT_ID_FORGET:
        current_position = -1;
        break;
    case XMMS_PLAYLIST_CURRENT_ID_MOVE_TO_FRONT:
        if (current_position > 0) {
            xmmsv_coll_idlist_move (plcoll, current_position, 0);
            current_position = 0;
        }
        break;
    default:
        break;
    }

    xmmsv_unref (result);

    xmms_collection_set_int_attr (plcoll, "position", current_position);

    XMMS_PLAYLIST_CHANGED_MSG (XMMS_PLAYLIST_CHANGED_REPLACE,
                               (current_position < 0) ? 0 : current_id, plname);
    XMMS_PLAYLIST_CURRPOS_MSG (current_position, plname);

    g_mutex_unlock (playlist->mutex);
}