aboutsummaryrefslogtreecommitdiffstats
path: root/src/Playlist.cxx
diff options
context:
space:
mode:
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);
}