diff options
Diffstat (limited to '')
-rw-r--r-- | src/Playlist.cxx (renamed from src/playlist.c) | 107 |
1 files changed, 40 insertions, 67 deletions
diff --git a/src/playlist.c b/src/Playlist.cxx index dc6d8c340..7f89e4ea9 100644 --- a/src/playlist.c +++ b/src/Playlist.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2011 The Music Player Daemon Project + * Copyright (C) 2003-2013 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -18,15 +18,13 @@ */ #include "config.h" -#include "playlist_internal.h" -#include "playlist_save.h" -#include "player_control.h" -#include "command.h" -#include "tag.h" +#include "PlaylistInternal.hxx" +#include "PlayerControl.hxx" #include "song.h" -#include "conf.h" -#include "stored_playlist.h" + +extern "C" { #include "idle.h" +} #include <glib.h> @@ -38,7 +36,7 @@ void playlist_increment_version_all(struct playlist *playlist) { - queue_modify_all(&playlist->queue); + playlist->queue.ModifyAll(); idle_add(IDLE_PLAYLIST); } @@ -50,27 +48,10 @@ playlist_tag_changed(struct playlist *playlist) assert(playlist->current >= 0); - queue_modify(&playlist->queue, playlist->current); + playlist->queue.ModifyAtOrder(playlist->current); idle_add(IDLE_PLAYLIST); } -void -playlist_init(struct playlist *playlist) -{ - queue_init(&playlist->queue, - config_get_positive(CONF_MAX_PLAYLIST_LENGTH, - DEFAULT_PLAYLIST_MAX_LENGTH)); - - playlist->queued = -1; - playlist->current = -1; -} - -void -playlist_finish(struct playlist *playlist) -{ - queue_finish(&playlist->queue); -} - /** * Queue a song, addressed by its order number. */ @@ -78,14 +59,15 @@ static void playlist_queue_song_order(struct playlist *playlist, struct player_control *pc, unsigned order) { - struct song *song; char *uri; - assert(queue_valid_order(&playlist->queue, order)); + assert(playlist->queue.IsValidOrder(order)); playlist->queued = order; - song = queue_get_order(&playlist->queue, order); + struct song *song = + song_dup_detached(playlist->queue.GetOrder(order)); + uri = song_get_uri(song); g_debug("queue song %i:\"%s\"", playlist->queued, uri); g_free(uri); @@ -111,8 +93,7 @@ playlist_song_started(struct playlist *playlist, struct player_control *pc) if(playlist->queue.consume) playlist_delete(playlist, pc, - queue_order_to_position(&playlist->queue, - current)); + playlist->queue.OrderToPosition(current)); idle_add(IDLE_PLAYER); } @@ -123,7 +104,7 @@ playlist_get_queued_song(struct playlist *playlist) if (!playlist->playing || playlist->queued < 0) return NULL; - return queue_get_order(&playlist->queue, playlist->queued); + return playlist->queue.GetOrder(playlist->queued); } void @@ -137,11 +118,11 @@ playlist_update_queued_song(struct playlist *playlist, if (!playlist->playing) return; - assert(!queue_is_empty(&playlist->queue)); + assert(!playlist->queue.IsEmpty()); assert((playlist->queued < 0) == (prev == NULL)); next_order = playlist->current >= 0 - ? queue_next_order(&playlist->queue, playlist->current) + ? playlist->queue.GetNextOrder(playlist->current) : 0; if (next_order == 0 && playlist->queue.random && @@ -150,21 +131,19 @@ playlist_update_queued_song(struct playlist *playlist, order each time the playlist is played completely */ unsigned current_position = - queue_order_to_position(&playlist->queue, - playlist->current); + playlist->queue.OrderToPosition(playlist->current); - queue_shuffle_order(&playlist->queue); + playlist->queue.ShuffleOrder(); /* make sure that the playlist->current still points to the current song, after the song order has been shuffled */ playlist->current = - queue_position_to_order(&playlist->queue, - current_position); + playlist->queue.PositionToOrder(current_position); } if (next_order >= 0) - next_song = queue_get_order(&playlist->queue, next_order); + next_song = playlist->queue.GetOrder(next_order); else next_song = NULL; @@ -186,13 +165,13 @@ void playlist_play_order(struct playlist *playlist, struct player_control *pc, int orderNum) { - struct song *song; char *uri; playlist->playing = true; playlist->queued = -1; - song = queue_get_order(&playlist->queue, orderNum); + struct song *song = + song_dup_detached(playlist->queue.GetOrder(orderNum)); uri = song_get_uri(song); g_debug("play %i:\"%s\"", orderNum, uri); @@ -257,15 +236,15 @@ playlist_resume_playback(struct playlist *playlist, struct player_control *pc) assert(playlist->playing); assert(pc_get_state(pc) == PLAYER_STATE_STOP); - error = pc_get_error(pc); - if (error == PLAYER_ERROR_NOERROR) + error = pc_get_error_type(pc); + if (error == PLAYER_ERROR_NONE) playlist->error_count = 0; else ++playlist->error_count; - if ((playlist->stop_on_error && error != PLAYER_ERROR_NOERROR) || - error == PLAYER_ERROR_AUDIO || error == PLAYER_ERROR_SYSTEM || - playlist->error_count >= queue_length(&playlist->queue)) + if ((playlist->stop_on_error && error != PLAYER_ERROR_NONE) || + error == PLAYER_ERROR_OUTPUT || + playlist->error_count >= playlist->queue.GetLength()) /* too many errors, or critical error: stop playback */ playlist_stop(playlist, pc); @@ -324,10 +303,9 @@ playlist_order(struct playlist *playlist) { if (playlist->current >= 0) /* update playlist.current, order==position now */ - playlist->current = queue_order_to_position(&playlist->queue, - playlist->current); + playlist->current = playlist->queue.OrderToPosition(playlist->current); - queue_restore_order(&playlist->queue); + playlist->queue.RestoreOrder(); } void @@ -380,20 +358,18 @@ playlist_set_random(struct playlist *playlist, struct player_control *pc, int current_position = playlist->playing && playlist->current >= 0 - ? (int)queue_order_to_position(&playlist->queue, - playlist->current) + ? (int)playlist->queue.OrderToPosition(playlist->current) : -1; - queue_shuffle_order(&playlist->queue); + playlist->queue.ShuffleOrder(); if (current_position >= 0) { /* make sure the current song is the first in the order list, so the whole rest of the playlist is played after that */ unsigned current_order = - queue_position_to_order(&playlist->queue, - current_position); - queue_swap_order(&playlist->queue, 0, current_order); + playlist->queue.PositionToOrder(current_position); + playlist->queue.SwapOrders(0, current_order); playlist->current = 0; } else playlist->current = -1; @@ -409,8 +385,7 @@ int playlist_get_current_song(const struct playlist *playlist) { if (playlist->current >= 0) - return queue_order_to_position(&playlist->queue, - playlist->current); + return playlist->queue.OrderToPosition(playlist->current); return -1; } @@ -421,13 +396,11 @@ playlist_get_next_song(const struct playlist *playlist) if (playlist->current >= 0) { if (playlist->queue.single == 1 && playlist->queue.repeat == 1) - return queue_order_to_position(&playlist->queue, - playlist->current); - else if (playlist->current + 1 < (int)queue_length(&playlist->queue)) - return queue_order_to_position(&playlist->queue, - playlist->current + 1); + return playlist->queue.OrderToPosition(playlist->current); + else if (playlist->current + 1 < (int)playlist->queue.GetLength()) + return playlist->queue.OrderToPosition(playlist->current + 1); else if (playlist->queue.repeat == 1) - return queue_order_to_position(&playlist->queue, 0); + return playlist->queue.OrderToPosition(0); } return -1; @@ -442,11 +415,11 @@ playlist_get_version(const struct playlist *playlist) int playlist_get_length(const struct playlist *playlist) { - return queue_length(&playlist->queue); + return playlist->queue.GetLength(); } unsigned playlist_get_song_id(const struct playlist *playlist, unsigned song) { - return queue_position_to_id(&playlist->queue, song); + return playlist->queue.PositionToId(song); } |