summaryrefslogtreecommitdiff
path: root/playlist.c
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2011-01-31 19:29:57 +0100
committerGravatar waker <wakeroid@gmail.com>2011-01-31 19:29:57 +0100
commit80e8e0f4a5a214de8884be245049b5fbc53cf4aa (patch)
tree1c108752208456d9d2da0410926f73779b7a8042 /playlist.c
parentc3d28f081ec9263980e863316a3eeae177a15be4 (diff)
added container support to vfs plugin api
Diffstat (limited to 'playlist.c')
-rw-r--r--playlist.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/playlist.c b/playlist.c
index fb170f98..a6ff3633 100644
--- a/playlist.c
+++ b/playlist.c
@@ -1305,6 +1305,9 @@ pl_insert_pls (playItem_t *after, const char *fname, int *pabort, int (*cb)(play
}
playItem_t *
+pl_insert_dir_int (DB_vfs_t *vfs, playItem_t *after, const char *dirname, int *pabort, int (*cb)(playItem_t *it, void *data), void *user_data);
+
+playItem_t *
pl_insert_file (playItem_t *after, const char *fname, int *pabort, int (*cb)(playItem_t *it, void *data), void *user_data) {
trace ("count: %d\n", playlist->count[PL_MAIN]);
trace ("pl_insert_file %s\n", fname);
@@ -1312,6 +1315,21 @@ pl_insert_file (playItem_t *after, const char *fname, int *pabort, int (*cb)(pla
return NULL;
}
+ // check if that is supported container format
+ DB_vfs_t **vfsplugs = plug_get_vfs_list ();
+ for (int i = 0; vfsplugs[i]; i++) {
+ if (vfsplugs[i]->is_container) {
+ const char *scheme = vfsplugs[i]->is_container (fname);
+ if (scheme) {
+ playItem_t *it = pl_insert_dir_int (vfsplugs[i], after, fname, pabort, cb, user_data);
+ if (it) {
+ return it;
+ }
+ }
+ }
+ }
+
+
// detect decoder
const char *eol = strrchr (fname, '.');
if (!eol) {
@@ -1428,7 +1446,7 @@ static int dirent_alphasort (const struct dirent **a, const struct dirent **b) {
static int follow_symlinks = 0;
playItem_t *
-pl_insert_dir_int (playItem_t *after, const char *dirname, int *pabort, int (*cb)(playItem_t *it, void *data), void *user_data) {
+pl_insert_dir_int (DB_vfs_t *vfs, playItem_t *after, const char *dirname, int *pabort, int (*cb)(playItem_t *it, void *data), void *user_data) {
if (!memcmp (dirname, "file://", 7)) {
dirname += 7;
}
@@ -1459,7 +1477,7 @@ pl_insert_dir_int (playItem_t *after, const char *dirname, int *pabort, int (*cb
{
char fullname[PATH_MAX];
snprintf (fullname, sizeof (fullname), "%s/%s", dirname, namelist[i]->d_name);
- playItem_t *inserted = pl_insert_dir_int (after, fullname, pabort, cb, user_data);
+ playItem_t *inserted = pl_insert_dir_int (vfs, after, fullname, pabort, cb, user_data);
if (!inserted) {
inserted = pl_insert_file (after, fullname, pabort, cb, user_data);
}
@@ -1480,7 +1498,7 @@ pl_insert_dir_int (playItem_t *after, const char *dirname, int *pabort, int (*cb
playItem_t *
pl_insert_dir (playItem_t *after, const char *dirname, int *pabort, int (*cb)(playItem_t *it, void *data), void *user_data) {
follow_symlinks = conf_get_int ("add_folders_follow_symlinks", 0);
- return pl_insert_dir_int (after, dirname, pabort, cb, user_data);
+ return pl_insert_dir_int (NULL, after, dirname, pabort, cb, user_data);
}
int