/** * Try to open the given URL with a playqueue context */ static int file_open_audio(prop_t *page, const char *url) { char parent[URL_MAX]; char parent2[URL_MAX]; struct fa_stat fs; prop_t *model; if(fa_parent(parent, sizeof(parent), url)) return 1; if(fa_stat(parent, &fs, NULL, 0)) return 1; model = prop_create(page, "model"); prop_set_string(prop_create(model, "type"), "directory"); /* Find a meaningful page title (last component of URL) */ rstr_t *title = title_from_url(parent); prop_setv(model, "metadata", "title", NULL, PROP_SET_RSTRING, title); // Set parent if(!fa_parent(parent2, sizeof(parent2), parent)) prop_set_string(prop_create(page, "parent"), parent2); fa_scanner_page(parent, fs.fs_mtime, model, url, prop_create(page, "directClose"), title); rstr_release(title); return 0; }
static void update_global_state(void) { plugin_t *pl; int num_upgradable = 0; LIST_FOREACH(pl, &plugins, pl_link) if(pl->pl_new_version_avail) num_upgradable++; prop_setv(prop_get_global(), "plugins", "status", "upgradeable", NULL, PROP_SET_INT, num_upgradable); }
static void file_open_browse(prop_t *page, const char *url, time_t mtime) { prop_t *model; char parent[URL_MAX]; model = prop_create(page, "model"); prop_set_string(prop_create(model, "type"), "directory"); /* Find a meaningful page title (last component of URL) */ rstr_t *title = title_from_url(url); prop_setv(model, "metadata", "title", NULL, PROP_SET_RSTRING, title); // Set parent if(!fa_parent(parent, sizeof(parent), url)) prop_set_string(prop_create(page, "parent"), parent); fa_scanner_page(url, mtime, model, NULL, prop_create(page, "directClose"), title); rstr_release(title); }
int glw_init(glw_root_t *gr) { char skinbuf[PATH_MAX]; const char *skin = gconf.skin; if(gr->gr_prop_dispatcher == NULL) gr->gr_prop_dispatcher = &prop_courier_poll_timed; gr->gr_prop_maxtime = -1; assert(glw_settings.gs_settings != NULL); if(prop_set_parent(gr->gr_prop_ui, prop_get_global())) abort(); if(prop_set_parent(gr->gr_prop_nav, prop_get_global())) abort(); if(skin == NULL) { snprintf(skinbuf, sizeof(skinbuf), "%s/glwskins/"SHOWTIME_GLW_DEFAULT_SKIN, showtime_dataroot()); skin = skinbuf; } hts_mutex_init(&gr->gr_mutex); gr->gr_courier = prop_courier_create_passive(); gr->gr_token_pool = pool_create("glwtokens", sizeof(token_t), POOL_ZERO_MEM); gr->gr_clone_pool = pool_create("glwclone", sizeof(glw_clone_t), POOL_ZERO_MEM); gr->gr_skin = strdup(skin); gr->gr_vpaths[0] = "skin"; gr->gr_vpaths[1] = gr->gr_skin; gr->gr_vpaths[2] = NULL; gr->gr_font_domain = freetype_get_context(); glw_text_bitmap_init(gr); prop_setv(gr->gr_prop_ui, "skin", "path", NULL, PROP_SET_STRING, gr->gr_skin); gr->gr_pointer_visible = prop_create(gr->gr_prop_ui, "pointerVisible"); gr->gr_is_fullscreen = prop_create(gr->gr_prop_ui, "fullscreen"); gr->gr_screensaver_active = prop_create(gr->gr_prop_ui, "screensaverActive"); gr->gr_prop_width = prop_create(gr->gr_prop_ui, "width"); gr->gr_prop_height = prop_create(gr->gr_prop_ui, "height"); prop_set_int(gr->gr_screensaver_active, 0); gr->gr_evsub = prop_subscribe(0, PROP_TAG_CALLBACK, glw_eventsink, gr, PROP_TAG_NAME("ui", "eventSink"), PROP_TAG_ROOT, gr->gr_prop_ui, PROP_TAG_COURIER, gr->gr_courier, NULL); TAILQ_INIT(&gr->gr_destroyer_queue); glw_tex_init(gr); gr->gr_framerate = 60; gr->gr_frameduration = 1000000 / gr->gr_framerate; gr->gr_ui_start = showtime_get_ts(); gr->gr_open_osk = glw_osk_open; return 0; }