static int file_open_dir(prop_t *page, const char *url) { prop_t *model; int type; char parent[URL_MAX]; int r; fa_handle_t *ref; ref = fa_reference(url); type = fa_probe_dir(NULL, url); if(type == CONTENT_DVD) { r = backend_open_video(page, url); } else { model = prop_create(page, "model"); prop_set_string(prop_create(model, "type"), "directory"); /* Find a meaningful page title (last component of URL) */ set_title_from_url(prop_create(model, "metadata"), url); // Set parent if(!fa_parent(parent, sizeof(parent), url)) prop_set_string(prop_create(page, "parent"), parent); fa_scanner(url, model, NULL); r = 0; } fa_unreference(ref); return r; }
static int file_open_file(prop_t *page, const char *url, struct fa_stat *fs) { char redir[URL_MAX]; char errbuf[200]; int c; prop_t *meta; meta = prop_create_root("metadata"); c = fa_probe(meta, url, redir, sizeof(redir), errbuf, sizeof(errbuf), fs, 1); switch(c) { case CONTENT_ARCHIVE: case CONTENT_ALBUM: prop_destroy(meta); return file_open_dir(page, redir); case CONTENT_AUDIO: if(!file_open_audio(page, url)) { prop_destroy(meta); return 0; } playqueue_play(url, meta, 0); return playqueue_open(page); case CONTENT_VIDEO: case CONTENT_DVD: prop_destroy(meta); return backend_open_video(page, url); case CONTENT_IMAGE: return file_open_image(page, meta); case CONTENT_PLUGIN: plugin_open_file(page, url); return 0; default: prop_destroy(meta); return nav_open_error(page, errbuf); } }
static void file_open_dir(prop_t *page, const char *url, time_t mtime) { fa_handle_t *ref = fa_reference(url); metadata_t *md = fa_probe_dir(url); switch(md->md_contenttype) { case CONTENT_DVD: backend_open_video(page, url, 0); break; case CONTENT_DIR: case CONTENT_ARCHIVE: file_open_browse(page, url, mtime); break; default: nav_open_errorf(page, _("Can't handle content type %d"), md->md_contenttype); break; } metadata_destroy(md); fa_unreference(ref); }
static int rtmp_open(prop_t *page, const char *url, int sync) { usage_page_open(sync, "RTMP"); return backend_open_video(page, url, sync); }
static void file_open_file(prop_t *page, const char *url, fa_stat_t *fs) { char errbuf[200]; metadata_t *md; void *db = metadb_get(); md = metadb_metadata_get(db, url, fs->fs_mtime); metadb_close(db); if(md == NULL) md = fa_probe_metadata(url, errbuf, sizeof(errbuf), NULL); if(md == NULL) { nav_open_errorf(page, _("Unable to open file: %s"), errbuf); return; } if(md->md_redirect != NULL) url = md->md_redirect; prop_t *meta = prop_create_root("metadata"); metadata_to_proptree(md, meta, 0); switch(md->md_contenttype) { case CONTENT_ARCHIVE: case CONTENT_ALBUM: file_open_browse(page, url, fs->fs_mtime); break; case CONTENT_AUDIO: if(!file_open_audio(page, url)) { break; } playqueue_play(url, meta, 0); playqueue_open(page); meta = NULL; break; case CONTENT_VIDEO: case CONTENT_DVD: backend_open_video(page, url, 0); break; case CONTENT_IMAGE: file_open_image(page, meta); meta = NULL; break; case CONTENT_PLUGIN: plugin_open_file(page, url); break; default: nav_open_errorf(page, _("Can't handle content type %d"), md->md_contenttype); break; } prop_destroy(meta); metadata_destroy(md); }
static int be_dvd_open(prop_t *page, const char *url, int sync) { usage_page_open(sync, "DVD"); return backend_open_video(page, url, sync); }