diff options
author | 2011-01-31 19:29:57 +0100 | |
---|---|---|
committer | 2011-01-31 19:29:57 +0100 | |
commit | 80e8e0f4a5a214de8884be245049b5fbc53cf4aa (patch) | |
tree | 1c108752208456d9d2da0410926f73779b7a8042 /playlist.c | |
parent | c3d28f081ec9263980e863316a3eeae177a15be4 (diff) |
added container support to vfs plugin api
Diffstat (limited to 'playlist.c')
-rw-r--r-- | playlist.c | 24 |
1 files changed, 21 insertions, 3 deletions
@@ -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 |