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:
parent
6f28eb4c0a
commit
37e69a89b9
@ -22,6 +22,15 @@
|
|||||||
#include "directory.h"
|
#include "directory.h"
|
||||||
#include "client.h"
|
#include "client.h"
|
||||||
#include "song_print.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
|
static void
|
||||||
dirvec_print(struct client *client, const struct dirvec *dv)
|
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]));
|
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
|
void
|
||||||
directory_print(struct client *client, const struct directory *directory)
|
directory_print(struct client *client, const struct directory *directory)
|
||||||
{
|
{
|
||||||
dirvec_print(client, &directory->children);
|
dirvec_print(client, &directory->children);
|
||||||
songvec_print(client, &directory->songs);
|
songvec_print(client, &directory->songs);
|
||||||
|
directory_print_playlists(client, directory);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user