directory_print: print a list of playlist files in "lsinfo"

Print those files which can be handled by a playlist plugin.
This commit is contained in:
Max Kellermann 2010-05-31 22:18:13 +02:00
parent 6f28eb4c0a
commit 37e69a89b9

View File

@ -22,6 +22,15 @@
#include "directory.h"
#include "client.h"
#include "song_print.h"
#include "mapper.h"
#include "playlist_list.h"
#include "decoder_list.h"
#include "path.h"
#include "uri.h"
#include "input_stream.h"
#include <sys/types.h>
#include <dirent.h>
static void
dirvec_print(struct client *client, const struct dirvec *dv)
@ -33,9 +42,61 @@ dirvec_print(struct client *client, const struct dirvec *dv)
directory_get_path(dv->base[i]));
}
static void
print_playlist_in_directory(struct client *client,
const struct directory *directory,
const char *name_utf8)
{
if (directory_is_root(directory))
client_printf(client, "playlist: %s\n", name_utf8);
else
client_printf(client, "playlist: %s/%s\n",
directory_get_path(directory), name_utf8);
}
/**
* Print a list of playlists in the specified directory.
*/
static void
directory_print_playlists(struct client *client,
const struct directory *directory)
{
char *path_fs = map_directory_fs(directory);
if (path_fs == NULL)
return;
DIR *dir = opendir(path_fs);
g_free(path_fs);
if (dir == NULL)
return;
struct dirent *ent;
while ((ent = readdir(dir))) {
char *name_utf8 = fs_charset_to_utf8(ent->d_name);
if (name_utf8 == NULL)
continue;
const char *suffix = uri_get_suffix(name_utf8);
if (suffix != NULL &&
/* ignore files which are handled by a decoder for
now, too expensive to probe them all, and most
of them probably don't contain a playlist
(e.g. FLAC files without embedded cue sheet) */
decoder_plugin_from_suffix(suffix, NULL) == NULL &&
playlist_suffix_supported(suffix))
print_playlist_in_directory(client, directory,
name_utf8);
g_free(name_utf8);
}
closedir(dir);
}
void
directory_print(struct client *client, const struct directory *directory)
{
dirvec_print(client, &directory->children);
songvec_print(client, &directory->songs);
directory_print_playlists(client, directory);
}