aboutsummaryrefslogtreecommitdiffstats
path: root/src/playlist_print.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/PlaylistPrint.cxx (renamed from src/playlist_print.c)111
1 files changed, 56 insertions, 55 deletions
diff --git a/src/playlist_print.c b/src/PlaylistPrint.cxx
index 59c42f969..7df7a9c39 100644
--- a/src/playlist_print.c
+++ b/src/PlaylistPrint.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,37 +18,41 @@
*/
#include "config.h"
-#include "playlist_print.h"
+#include "PlaylistPrint.hxx"
+#include "PlaylistFile.hxx"
+#include "PlaylistAny.hxx"
+#include "PlaylistSong.hxx"
+#include "Playlist.hxx"
+#include "QueuePrint.hxx"
+#include "SongPrint.hxx"
+#include "DatabaseGlue.hxx"
+#include "DatabasePlugin.hxx"
+#include "Client.hxx"
+
+extern "C" {
#include "playlist_list.h"
#include "playlist_plugin.h"
-#include "playlist_any.h"
-#include "playlist_song.h"
-#include "playlist.h"
-#include "queue_print.h"
-#include "stored_playlist.h"
-#include "song_print.h"
#include "song.h"
-#include "database.h"
-#include "client.h"
#include "input_stream.h"
+}
void
-playlist_print_uris(struct client *client, const struct playlist *playlist)
+playlist_print_uris(Client *client, const struct playlist *playlist)
{
const struct queue *queue = &playlist->queue;
- queue_print_uris(client, queue, 0, queue_length(queue));
+ queue_print_uris(client, queue, 0, queue->GetLength());
}
bool
-playlist_print_info(struct client *client, const struct playlist *playlist,
+playlist_print_info(Client *client, const struct playlist *playlist,
unsigned start, unsigned end)
{
const struct queue *queue = &playlist->queue;
- if (end > queue_length(queue))
+ if (end > queue->GetLength())
/* correct the "end" offset */
- end = queue_length(queue);
+ end = queue->GetLength();
if (start > end)
/* an invalid "start" offset is fatal */
@@ -59,13 +63,13 @@ playlist_print_info(struct client *client, const struct playlist *playlist,
}
bool
-playlist_print_id(struct client *client, const struct playlist *playlist,
+playlist_print_id(Client *client, const struct playlist *playlist,
unsigned id)
{
const struct queue *queue = &playlist->queue;
int position;
- position = queue_id_to_position(queue, id);
+ position = queue->IdToPosition(id);
if (position < 0)
/* no such song */
return false;
@@ -74,7 +78,7 @@ playlist_print_id(struct client *client, const struct playlist *playlist,
}
bool
-playlist_print_current(struct client *client, const struct playlist *playlist)
+playlist_print_current(Client *client, const struct playlist *playlist)
{
int current_position = playlist_get_current_song(playlist);
@@ -87,21 +91,14 @@ playlist_print_current(struct client *client, const struct playlist *playlist)
}
void
-playlist_print_find(struct client *client, const struct playlist *playlist,
- const struct locate_item_list *list)
-{
- queue_find(client, &playlist->queue, list);
-}
-
-void
-playlist_print_search(struct client *client, const struct playlist *playlist,
- const struct locate_item_list *list)
+playlist_print_find(Client *client, const struct playlist *playlist,
+ const SongFilter &filter)
{
- queue_search(client, &playlist->queue, list);
+ queue_find(client, &playlist->queue, filter);
}
void
-playlist_print_changes_info(struct client *client,
+playlist_print_changes_info(Client *client,
const struct playlist *playlist,
uint32_t version)
{
@@ -109,46 +106,51 @@ playlist_print_changes_info(struct client *client,
}
void
-playlist_print_changes_position(struct client *client,
+playlist_print_changes_position(Client *client,
const struct playlist *playlist,
uint32_t version)
{
queue_print_changes_position(client, &playlist->queue, version);
}
+static bool
+PrintSongDetails(Client *client, const char *uri_utf8)
+{
+ const Database *db = GetDatabase(nullptr);
+ if (db == nullptr)
+ return false;
+
+ song *song = db->GetSong(uri_utf8, nullptr);
+ if (song == nullptr)
+ return false;
+
+ song_print_info(client, song);
+ db->ReturnSong(song);
+ return true;
+}
+
bool
-spl_print(struct client *client, const char *name_utf8, bool detail,
+spl_print(Client *client, const char *name_utf8, bool detail,
GError **error_r)
{
- GPtrArray *list;
-
- list = spl_load(name_utf8, error_r);
- if (list == NULL)
+ GError *error = NULL;
+ PlaylistFileContents contents = LoadPlaylistFile(name_utf8, &error);
+ if (contents.empty() && error != nullptr) {
+ g_propagate_error(error_r, error);
return false;
+ }
- for (unsigned i = 0; i < list->len; ++i) {
- const char *temp = g_ptr_array_index(list, i);
- bool wrote = false;
-
- if (detail) {
- struct song *song = db_get_song(temp);
- if (song) {
- song_print_info(client, song);
- wrote = true;
- }
- }
-
- if (!wrote) {
- client_printf(client, SONG_FILE "%s\n", temp);
- }
+ for (const auto &uri_utf8 : contents) {
+ if (!detail || !PrintSongDetails(client, uri_utf8.c_str()))
+ client_printf(client, SONG_FILE "%s\n",
+ uri_utf8.c_str());
}
- spl_free(list);
return true;
}
static void
-playlist_provider_print(struct client *client, const char *uri,
+playlist_provider_print(Client *client, const char *uri,
struct playlist_provider *playlist, bool detail)
{
struct song *song;
@@ -164,15 +166,14 @@ playlist_provider_print(struct client *client, const char *uri,
else
song_print_uri(client, song);
- if (!song_in_database(song))
- song_free(song);
+ song_free(song);
}
g_free(base_uri);
}
bool
-playlist_file_print(struct client *client, const char *uri, bool detail)
+playlist_file_print(Client *client, const char *uri, bool detail)
{
GMutex *mutex = g_mutex_new();
GCond *cond = g_cond_new();