command: "listplaylist" dumps playlist files

Same for "listplaylistinfo".
This commit is contained in:
Max Kellermann
2010-02-08 10:19:43 +01:00
parent 7fbb856eee
commit 059d1dc7f2
4 changed files with 74 additions and 5 deletions

View File

@@ -733,6 +733,9 @@ handle_load(struct client *client, G_GNUC_UNUSED int argc, char *argv[])
static enum command_return
handle_listplaylist(struct client *client, G_GNUC_UNUSED int argc, char *argv[])
{
if (playlist_file_print(client, argv[1], false))
return COMMAND_RETURN_OK;
bool ret;
ret = spl_print(client, argv[1], false);
@@ -748,6 +751,9 @@ static enum command_return
handle_listplaylistinfo(struct client *client,
G_GNUC_UNUSED int argc, char *argv[])
{
if (playlist_file_print(client, argv[1], true))
return COMMAND_RETURN_OK;
bool ret;
ret = spl_print(client, argv[1], true);

View File

@@ -19,6 +19,10 @@
#include "config.h"
#include "playlist_print.h"
#include "playlist_list.h"
#include "playlist_plugin.h"
#include "playlist_mapper.h"
#include "playlist_song.h"
#include "queue_print.h"
#include "stored_playlist.h"
#include "song_print.h"
@@ -139,3 +143,36 @@ spl_print(struct client *client, const char *name_utf8, bool detail)
spl_free(list);
return true;
}
static void
playlist_provider_print(struct client *client, const char *uri,
struct playlist_provider *playlist, bool detail)
{
struct song *song;
char *base_uri = uri != NULL ? g_path_get_dirname(uri) : NULL;
while ((song = playlist_plugin_read(playlist)) != NULL) {
song = playlist_check_translate_song(song, base_uri);
if (song == NULL)
continue;
if (detail)
song_print_info(client, song);
else
song_print_uri(client, song);
}
g_free(base_uri);
}
bool
playlist_file_print(struct client *client, const char *uri, bool detail)
{
struct playlist_provider *playlist = playlist_mapper_open(uri);
if (playlist == NULL)
return false;
playlist_provider_print(client, uri, playlist, detail);
playlist_plugin_close(playlist);
return true;
}

View File

@@ -101,4 +101,15 @@ playlist_print_changes_position(struct client *client,
bool
spl_print(struct client *client, const char *name_utf8, bool detail);
/**
* Send the playlist file to the client.
*
* @param client the client which requested the playlist
* @param uri the URI of the playlist file in UTF-8 encoding
* @param detail true if all details should be printed
* @return true on success, false if the playlist does not exist
*/
bool
playlist_file_print(struct client *client, const char *uri, bool detail);
#endif