diff options
author | Max Kellermann <max@duempel.org> | 2009-11-06 01:07:39 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-11-06 01:07:39 +0100 |
commit | 7e66f341544488c839c05e5c1589c8b8ca959334 (patch) | |
tree | e1f51e6e482bcd3cb0f5a249d98653255adc3ea9 | |
parent | f3203b5de50dd40e014fd4d3829b8bc172976649 (diff) | |
download | mpd-7e66f341544488c839c05e5c1589c8b8ca959334.tar.gz mpd-7e66f341544488c839c05e5c1589c8b8ca959334.tar.xz mpd-7e66f341544488c839c05e5c1589c8b8ca959334.zip |
playlist_list: added function playlist_list_open_path()
Added an interface for loading playlists from a local file.
-rw-r--r-- | src/playlist_list.c | 36 | ||||
-rw-r--r-- | src/playlist_list.h | 11 |
2 files changed, 47 insertions, 0 deletions
diff --git a/src/playlist_list.c b/src/playlist_list.c index 9b2395ad4..b5df72ed8 100644 --- a/src/playlist_list.c +++ b/src/playlist_list.c @@ -204,3 +204,39 @@ playlist_list_open_stream(struct input_stream *is, const char *uri) return NULL; } + +static bool +playlist_suffix_supported(const char *suffix) +{ + assert(suffix != NULL); + + for (unsigned i = 0; playlist_plugins[i] != NULL; ++i) { + const struct playlist_plugin *plugin = playlist_plugins[i]; + + if (playlist_plugins_enabled[i] && + stringFoundInStringArray(plugin->suffixes, suffix)) + return true; + } + + return false; +} + +struct playlist_provider * +playlist_list_open_path(struct input_stream *is, const char *path_fs) +{ + const char *suffix; + struct playlist_provider *playlist; + + assert(path_fs != NULL); + + suffix = uri_get_suffix(path_fs); + if (suffix == NULL || !playlist_suffix_supported(suffix) || + !input_stream_open(is, path_fs)) + return NULL; + + playlist = playlist_list_open_stream_suffix(is, suffix); + if (playlist == NULL) + input_stream_close(is); + + return playlist; +} diff --git a/src/playlist_list.h b/src/playlist_list.h index b5ac52a6f..ebfc5c509 100644 --- a/src/playlist_list.h +++ b/src/playlist_list.h @@ -51,4 +51,15 @@ playlist_list_open_uri(const char *uri); struct playlist_provider * playlist_list_open_stream(struct input_stream *is, const char *uri); +/** + * Opens a playlist from a local file. + * + * @param is an uninitialized #input_stream object (must be closed + * with input_stream_close() if this function succeeds) + * @param path_fs the path of the playlist file + * @return a playlist, or NULL on error + */ +struct playlist_provider * +playlist_list_open_path(struct input_stream *is, const char *path_fs); + #endif |