int glw_ps3_start(void) { glw_ps3_t *gp = calloc(1, sizeof(glw_ps3_t)); glwps3 = gp; prop_t *root = gp->gr.gr_prop_ui = prop_create(prop_get_global(), "ui"); gp->gr.gr_prop_nav = nav_spawn(); prop_set_int(prop_create(root, "fullscreen"), 1); if(glw_ps3_init(gp)) return 1; gp->gr.gr_prop_maxtime = 10000; glw_root_t *gr = &gp->gr; if(glw_init2(gr, GLW_INIT_KEYBOARD_MODE | GLW_INIT_OVERSCAN | GLW_INIT_IN_FULLSCREEN)) return 1; settings_create_separator(glw_settings.gs_settings, _p("Dual-Shock Remote")); setting_create(SETTING_MULTIOPT, glw_settings.gs_settings, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Seek using L2 and R2 button")), SETTING_OPTION("0", _p("Yes")), SETTING_OPTION("1", _p("Yes with Select button")), SETTING_OPTION("2", _p("No")), SETTING_COURIER(gr->gr_courier), SETTING_CALLBACK(set_seekmode, gp), SETTING_STORE("glw", "analogseekmode"), NULL); gr->gr_open_osk = osk_open; TRACE(TRACE_DEBUG, "GLW", "loading universe"); glw_load_universe(gr); glw_ps3_mainloop(gp); glw_unload_universe(gr); glw_reap(gr); glw_reap(gr); return 0; }
static JSBool js_createString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { js_setting_group_t *jsg = JS_GetPrivate(cx, obj); const char *id; const char *title; const char *def; JSObject *func; JSBool persistent = JS_FALSE; if(!JS_ConvertArguments(cx, argc, argv, "ssso/b", &id, &title, &def, &func, &persistent)) return JS_FALSE; js_setting_t *jss = jss_create(cx, obj, id, rval, func, jsg, persistent); if(jss == NULL) return JS_FALSE; rstr_t *r = NULL; if(persistent && jsg->jsg_kv_url) { r = kv_url_opt_get_rstr(jsg->jsg_kv_url, KVSTORE_DOMAIN_PLUGIN, id); if(r != NULL) def = rstr_get(r); } jss->jss_s = setting_create(SETTING_STRING, jsg->jsg_root, SETTINGS_INITIAL_UPDATE | jsg->jsg_settings_flags, SETTING_TITLE_CSTR(title), SETTING_COURIER(js_global_pc), SETTING_VALUE(def), SETTING_CALLBACK(js_store_update_string, jss), SETTING_HTSMSG_CUSTOM_SAVER(id, jsg->jsg_store, js_setting_group_save, jsg), NULL); jss->jss_cx = NULL; rstr_release(r); return JS_TRUE; }
static void * libcec_init_thread(void *aux) { prop_t *set = setting_get_dir("settings:tv"); libcec_clear_configuration(&cec_config); cec_config.callbacks = &g_callbacks; snprintf(cec_config.strDeviceName, sizeof(cec_config.strDeviceName), "%s", APPNAMEUSER); cec_config.deviceTypes.types[0] = CEC_DEVICE_TYPE_RECORDING_DEVICE; conn = libcec_initialise(&cec_config); if(conn == NULL) { TRACE(TRACE_ERROR, "CEC", "Unable to init libcec"); return NULL; } libcec_init_video_standalone(conn); cec_adapter ca; int num_adapters = libcec_find_adapters(conn, &ca, 1, NULL); if(num_adapters < 1) { libcec_destroy(conn); conn = NULL; TRACE(TRACE_ERROR, "CEC", "No adapters found"); return NULL; } TRACE(TRACE_DEBUG, "CEC", "Using adapter %s on %s", ca.comm, ca.path); setting_create(SETTING_BOOL, set, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Switch TV input source")), SETTING_VALUE(1), SETTING_CALLBACK(set_activate_source, NULL), SETTING_STORE("cec", "controlinput"), NULL); setting_create(SETTING_BOOL, set, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Use STOP key for combo input")), SETTING_VALUE(1), SETTING_CALLBACK(set_stop_combo_mode, NULL), SETTING_STORE("cec", "stopcombo"), NULL); setting_create(SETTING_BOOL, set, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Longpress SELECT for item menu")), SETTING_VALUE(1), SETTING_CALLBACK(set_longpress_select, NULL), SETTING_STORE("cec", "longpress_select"), NULL); #if 0 setting_create(SETTING_BOOL, set, SETTINGS_INITIAL_UPDATE, SETTING_TITLE_CSTR("Shutdown UI when TV is off"), SETTING_WRITE_BOOL(&auto_ui_shutdown), SETTING_STORE("cec", "auto_shutdown"), NULL); #endif if(!libcec_open(conn, ca.comm, 5000)) { TRACE(TRACE_ERROR, "CEC", "Unable to open connection to %s", ca.comm); libcec_destroy(conn); conn = NULL; return NULL; } return NULL; }
void i18n_init(void) { prop_t *s = settings_add_dir(NULL, _p("Languages"), "i18n", NULL, _p("Preferred languages"), "settings:i18n"); int i; nls_init(s); #ifdef STOS setting_create(SETTING_STRING, s, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Timezone")), SETTING_CALLBACK(set_timezone, NULL), SETTING_STORE("i18n", "timezone"), NULL); #endif setting_create(SETTING_MULTIOPT, s, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Time format")), SETTING_STORE("i18n", "timeformat"), SETTING_WRITE_INT(&gconf.time_format), SETTING_OPTION(gconf.time_format_system ? "0" : NULL, _p("System default")), SETTING_OPTION("1", _p("24 Hour")), SETTING_OPTION("2", _p("12 Hour")), NULL); settings_create_info(s, NULL, _p("Language codes should be configured as three character ISO codes, example (eng, swe, fra)")); setting_create(SETTING_STRING, s, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Primary audio language code")), SETTING_CALLBACK(set_lang, &lang_audio[0]), SETTING_STORE("i18n", "audio1"), NULL); setting_create(SETTING_STRING, s, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Secondary audio language code")), SETTING_CALLBACK(set_lang, &lang_audio[1]), SETTING_STORE("i18n", "audio2"), NULL); setting_create(SETTING_STRING, s, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Tertiary audio language code")), SETTING_CALLBACK(set_lang, &lang_audio[2]), SETTING_STORE("i18n", "audio3"), NULL); setting_create(SETTING_STRING, s, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Primary subtitle language code")), SETTING_CALLBACK(&set_lang, &lang_subtitle[0]), SETTING_STORE("i18n", "subtitle1"), NULL); setting_create(SETTING_STRING, s, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Secondary subtitle language code")), SETTING_CALLBACK(&set_lang, &lang_subtitle[1]), SETTING_STORE("i18n", "subtitle2"), NULL); setting_create(SETTING_STRING, s, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Tertiary subtitle language code")), SETTING_CALLBACK(&set_lang, &lang_subtitle[2]), SETTING_STORE("i18n", "subtitle3"), NULL); const char **optlist = NULL; const charset_t *cs; for(i = 0; (cs = charset_get_idx(i)) != NULL; i++) {} optlist = alloca((i * 2 + 3) * sizeof(const char *)); optlist[0] = "auto"; optlist[1] = "Auto"; for(i = 0; (cs = charset_get_idx(i)) != NULL; i++) { optlist[i * 2 + 2] = cs->id; optlist[i * 2 + 3] = cs->title; } optlist[i * 2 + 2] = NULL; setting_create(SETTING_MULTIOPT, s, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Default character set")), SETTING_STORE("i18n", "default_charset"), SETTING_CALLBACK(set_default_charset, NULL), SETTING_OPTION_LIST(optlist), NULL); setting_create(SETTING_BOOL, s, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Ignore 'The' at beginning of words when sorting")), SETTING_STORE("i18n", "skipthe"), SETTING_WRITE_BOOL(&gconf.ignore_the_prefix), NULL); }
static JSBool js_createMultiOpt(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { js_setting_group_t *jsg = JS_GetPrivate(cx, obj); const char *id; const char *title; JSObject *func; JSObject *optlist; JSBool persistent = JS_FALSE; if(!JS_ConvertArguments(cx, argc, argv, "ssoo/b", &id, &title, &optlist, &func, &persistent)) return JS_FALSE; js_setting_t *jss = jss_create(cx, obj, id, rval, func, jsg, persistent); if(jss == NULL) return JS_FALSE; char **options = NULL; JSIdArray *opts, *opt; int i; char *defvalue = NULL; if((opts = JS_Enumerate(cx, optlist)) != NULL) { for(i = 0; i < opts->length; i++) { jsval name, value, id, title, def; if(!JS_IdToValue(cx, opts->vector[i], &name) || !JSVAL_IS_INT(name) || !JS_GetElement(cx, optlist, JSVAL_TO_INT(name), &value) || !JSVAL_IS_OBJECT(value) || (opt = JS_Enumerate(cx, JSVAL_TO_OBJECT(value))) == NULL) continue; if(opt->length >= 2 && JS_GetElement(cx, JSVAL_TO_OBJECT(value), 0, &id) && JS_GetElement(cx, JSVAL_TO_OBJECT(value), 1, &title)) { if(opt->length < 3 || !JS_GetElement(cx, JSVAL_TO_OBJECT(value), 2, &def)) def = JSVAL_FALSE; const char *k = JS_GetStringBytes(JS_ValueToString(cx, id)); if(def == JSVAL_TRUE) mystrset(&defvalue, k); strvec_addp(&options, k); strvec_addp(&options, JS_GetStringBytes(JS_ValueToString(cx, title))); } JS_DestroyIdArray(cx, opt); } JS_DestroyIdArray(cx, opts); } rstr_t *r = NULL; if(persistent && jsg->jsg_kv_url) r = kv_url_opt_get_rstr(jsg->jsg_kv_url, KVSTORE_DOMAIN_PLUGIN, id); jss->jss_s = setting_create(SETTING_MULTIOPT, jsg->jsg_root, SETTINGS_INITIAL_UPDATE | jsg->jsg_settings_flags, SETTING_TITLE_CSTR(title), SETTING_COURIER(js_global_pc), SETTING_CALLBACK(js_store_update_string, jss), SETTING_VALUE(r ? rstr_get(r) : defvalue), SETTING_OPTION_LIST(options), SETTING_HTSMSG_CUSTOM_SAVER(id, jsg->jsg_store, js_setting_group_save, jsg), NULL); strvec_free(options); rstr_release(r); jss->jss_cx = NULL; return JS_TRUE; }
void mp_settings_init(media_pipe_t *mp, const char *url, const char *dir_url, const char *parent_title) { setting_t *p; prop_t *c = mp->mp_prop_ctrl; char set_directory_title[256]; char clr_directory_title[256]; mp_settings_clear(mp); if(url == NULL || !(mp->mp_flags & MP_VIDEO)) return; TRACE(TRACE_DEBUG, "media", "Settings initialized for URL %s in folder: %s [%s]", url, parent_title ?: "<unset>", dir_url ?: "<unset>"); if(dir_url != NULL) { rstr_t *fmt; fmt = _("Save as defaults for folder '%s'"); snprintf(set_directory_title, sizeof(set_directory_title), rstr_get(fmt), parent_title); rstr_release(fmt); fmt = _("Reset defaults for folder '%s'"); snprintf(clr_directory_title, sizeof(clr_directory_title), rstr_get(fmt), parent_title); rstr_release(fmt); } // --- Video ------------------------------------------------- p = make_dir_setting(SETTING_INT, "vzoom", &mp->mp_settings_video_dir, dir_url, video_settings.vzoom_setting, mp); setting_create(SETTING_INT, mp->mp_setting_video_root, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Video zoom")), SETTING_RANGE(50, 200), SETTING_UNIT_CSTR("%"), SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_WRITE_PROP(prop_create(c, "vzoom")), SETTING_KVSTORE(url, "vzoom"), SETTING_GROUP(&mp->mp_settings_video), SETTING_INHERIT(p), NULL); p = make_dir_setting(SETTING_INT, "panhorizontal", &mp->mp_settings_video_dir, dir_url, video_settings.pan_horizontal_setting, mp); setting_create(SETTING_INT, mp->mp_setting_video_root, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Horizontal pan")), SETTING_RANGE(-100, 100), SETTING_UNIT_CSTR("%"), SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_WRITE_PROP(prop_create(c, "panhorizontal")), SETTING_KVSTORE(url, "panhorizontal"), SETTING_GROUP(&mp->mp_settings_video), SETTING_INHERIT(p), NULL); p = make_dir_setting(SETTING_INT, "panvertical", &mp->mp_settings_video_dir, dir_url, video_settings.pan_vertical_setting, mp); setting_create(SETTING_INT, mp->mp_setting_video_root, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Vertical pan")), SETTING_RANGE(-100, 100), SETTING_UNIT_CSTR("%"), SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_WRITE_PROP(prop_create(c, "panvertical")), SETTING_KVSTORE(url, "panvertical"), SETTING_GROUP(&mp->mp_settings_video), SETTING_INHERIT(p), NULL); p = make_dir_setting(SETTING_BOOL, "hstretch", &mp->mp_settings_video_dir, dir_url, video_settings.stretch_horizontal_setting, mp); setting_create(SETTING_BOOL, mp->mp_setting_video_root, SETTINGS_INITIAL_UPDATE, SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_TITLE(_p("Stretch video to widescreen")), SETTING_WRITE_PROP(prop_create(c, "hstretch")), SETTING_KVSTORE(url, "hstretch"), SETTING_GROUP(&mp->mp_settings_video), SETTING_INHERIT(p), NULL); p = make_dir_setting(SETTING_BOOL, "fstretch", &mp->mp_settings_video_dir, dir_url, video_settings.stretch_fullscreen_setting, mp); setting_create(SETTING_BOOL, mp->mp_setting_video_root, SETTINGS_INITIAL_UPDATE, SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_TITLE(_p("Stretch video to fullscreen")), SETTING_WRITE_PROP(prop_create(c, "fstretch")), SETTING_KVSTORE(url, "fstretch"), SETTING_GROUP(&mp->mp_settings_video), SETTING_INHERIT(p), NULL); if(video_settings.vinterpolate_setting != NULL) { p = make_dir_setting(SETTING_BOOL, "vinterpolate", &mp->mp_settings_video_dir, dir_url, video_settings.vinterpolate_setting, mp); setting_create(SETTING_BOOL, mp->mp_setting_video_root, SETTINGS_INITIAL_UPDATE, SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_TITLE(_p("Video frame interpolation")), SETTING_WRITE_PROP(prop_create(c, "vinterpolate")), SETTING_KVSTORE(url, "vinterpolate"), SETTING_GROUP(&mp->mp_settings_video), SETTING_INHERIT(p), NULL); } setting_create(SETTING_SEPARATOR, mp->mp_setting_video_root, 0, SETTING_GROUP(&mp->mp_settings_video), NULL); setting_create(SETTING_ACTION, mp->mp_setting_video_root, 0, SETTING_TITLE(_p("Save as global default")), SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_CALLBACK(set_video_global_defaults, mp), SETTING_GROUP(&mp->mp_settings_video), NULL); if(dir_url != NULL) { setting_create(SETTING_ACTION, mp->mp_setting_video_root, 0, SETTING_TITLE_CSTR(set_directory_title), SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_CALLBACK(set_video_directory_defaults, mp), SETTING_GROUP(&mp->mp_settings_video), NULL); setting_create(SETTING_ACTION, mp->mp_setting_video_root, 0, SETTING_TITLE_CSTR(clr_directory_title), SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_CALLBACK(clr_video_directory_defaults, mp), SETTING_GROUP(&mp->mp_settings_video), NULL); } // --- Audio --------------------------------------------- p = make_dir_setting(SETTING_INT, "audiovolume", &mp->mp_settings_audio_dir, dir_url, gconf.setting_av_volume, mp); mp->mp_vol_setting = setting_create(SETTING_INT, mp->mp_setting_audio_root, SETTINGS_INITIAL_UPDATE, SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_TITLE(_p("Audio volume")), SETTING_RANGE(-12, MAX_USER_AUDIO_GAIN), SETTING_UNIT_CSTR("dB"), SETTING_CALLBACK(update_audio_volume_user, mp), SETTING_WRITE_PROP(prop_create(c, "audiovolume")), SETTING_KVSTORE(url, "audiovolume"), SETTING_PROP_ENABLER(prop_create(c, "canAdjustVolume")), SETTING_GROUP(&mp->mp_settings_audio), SETTING_INHERIT(p), NULL); p = make_dir_setting(SETTING_INT, "avdelta", &mp->mp_settings_audio_dir, dir_url, gconf.setting_av_sync, mp); setting_create(SETTING_INT, mp->mp_setting_audio_root, SETTINGS_INITIAL_UPDATE, SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_TITLE(_p("Audio delay")), SETTING_RANGE(-5000, 5000), SETTING_STEP(50), SETTING_UNIT_CSTR("ms"), SETTING_CALLBACK(update_av_delta, mp), SETTING_WRITE_PROP(prop_create(c, "avdelta")), SETTING_KVSTORE(url, "avdelta"), SETTING_GROUP(&mp->mp_settings_audio), SETTING_INHERIT(p), NULL); setting_create(SETTING_SEPARATOR, mp->mp_setting_audio_root, 0, SETTING_GROUP(&mp->mp_settings_audio), NULL); setting_create(SETTING_ACTION, mp->mp_setting_audio_root, 0, SETTING_TITLE(_p("Save as global default")), SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_CALLBACK(set_audio_global_defaults, mp), SETTING_GROUP(&mp->mp_settings_audio), NULL); if(dir_url != NULL) { setting_create(SETTING_ACTION, mp->mp_setting_audio_root, 0, SETTING_TITLE_CSTR(set_directory_title), SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_CALLBACK(set_audio_directory_defaults, mp), SETTING_GROUP(&mp->mp_settings_audio), NULL); setting_create(SETTING_ACTION, mp->mp_setting_audio_root, 0, SETTING_TITLE_CSTR(clr_directory_title), SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_CALLBACK(clr_audio_directory_defaults, mp), SETTING_GROUP(&mp->mp_settings_audio), NULL); } // --- Subtitle ------------------------------------------ setting_create(SETTING_INT, mp->mp_setting_subtitle_root, SETTINGS_INITIAL_UPDATE, SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_TITLE(_p("Subtitle delay")), SETTING_RANGE(-600000, 600000), SETTING_STEP(500), SETTING_UNIT_CSTR("ms"), SETTING_CALLBACK(update_sv_delta, mp), SETTING_WRITE_PROP(prop_create(c, "svdelta")), SETTING_KVSTORE(url, "svdelta"), SETTING_GROUP(&mp->mp_settings_subtitle), NULL); p = make_dir_setting(SETTING_INT, "subscale", &mp->mp_settings_subtitle_dir, dir_url, subtitle_settings.scaling_setting, mp); setting_create(SETTING_INT, mp->mp_setting_subtitle_root, SETTINGS_INITIAL_UPDATE, SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_TITLE(_p("Subtitle scaling")), SETTING_RANGE(30, 500), SETTING_STEP(5), SETTING_UNIT_CSTR("%"), SETTING_WRITE_PROP(prop_create(c, "subscale")), SETTING_KVSTORE(url, "subscale"), SETTING_GROUP(&mp->mp_settings_subtitle), SETTING_INHERIT(p), NULL); p = make_dir_setting(SETTING_BOOL, "subalign", &mp->mp_settings_subtitle_dir, dir_url, subtitle_settings.align_on_video_setting, mp); setting_create(SETTING_BOOL, mp->mp_setting_subtitle_root, SETTINGS_INITIAL_UPDATE, SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_TITLE(_p("Align subtitles on video frame")), SETTING_WRITE_PROP(prop_create(c, "subalign")), SETTING_KVSTORE(url, "subalign"), SETTING_GROUP(&mp->mp_settings_subtitle), SETTING_INHERIT(p), NULL); p = make_dir_setting(SETTING_INT, "subvdisplace", &mp->mp_settings_subtitle_dir, dir_url, subtitle_settings.vertical_displacement_setting, mp); setting_create(SETTING_INT, mp->mp_setting_subtitle_root, SETTINGS_INITIAL_UPDATE, SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_RANGE(-300, 300), SETTING_STEP(5), SETTING_UNIT_CSTR("px"), SETTING_TITLE(_p("Subtitle vertical displacement")), SETTING_WRITE_PROP(prop_create(c, "subvdisplace")), SETTING_KVSTORE(url, "subvdisplace"), SETTING_GROUP(&mp->mp_settings_subtitle), SETTING_INHERIT(p), NULL); p = make_dir_setting(SETTING_INT, "subhdisplace", &mp->mp_settings_subtitle_dir, dir_url, subtitle_settings.horizontal_displacement_setting, mp); setting_create(SETTING_INT, mp->mp_setting_subtitle_root, SETTINGS_INITIAL_UPDATE, SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_RANGE(-300, 300), SETTING_STEP(5), SETTING_UNIT_CSTR("px"), SETTING_TITLE(_p("Subtitle horizontal displacement")), SETTING_WRITE_PROP(prop_create(c, "subhdisplace")), SETTING_KVSTORE(url, "subhdisplace"), SETTING_GROUP(&mp->mp_settings_subtitle), SETTING_INHERIT(p), NULL); setting_create(SETTING_SEPARATOR, mp->mp_setting_subtitle_root, 0, SETTING_GROUP(&mp->mp_settings_subtitle), NULL); setting_create(SETTING_ACTION, mp->mp_setting_subtitle_root, 0, SETTING_TITLE(_p("Save as global default")), SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_CALLBACK(set_subtitle_global_defaults, mp), SETTING_GROUP(&mp->mp_settings_subtitle), NULL); if(dir_url != NULL) { setting_create(SETTING_ACTION, mp->mp_setting_subtitle_root, 0, SETTING_TITLE_CSTR(set_directory_title), SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_CALLBACK(set_subtitle_directory_defaults, mp), SETTING_GROUP(&mp->mp_settings_subtitle), NULL); setting_create(SETTING_ACTION, mp->mp_setting_subtitle_root, 0, SETTING_TITLE_CSTR(clr_directory_title), SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_CALLBACK(clr_subtitle_directory_defaults, mp), SETTING_GROUP(&mp->mp_settings_subtitle), NULL); } // ---------------------------------------------------------------- if(gconf.can_standby) { setting_create(SETTING_BOOL, mp->mp_setting_root, SETTINGS_INITIAL_UPDATE, SETTING_MUTEX(mp), SETTING_LOCKMGR(mp_lockmgr), SETTING_WRITE_INT(&mp->mp_auto_standby), SETTING_TITLE(_p("Go to standby after video ends")), SETTING_GROUP(&mp->mp_settings_other), NULL); } }
void torrent_settings_init(void) { prop_t *dir = setting_get_dir("general:filebrowse"); prop_t *s = settings_add_dir(dir, _p("BitTorrent"), NULL, NULL, NULL, "settings:bittorrent"); char defpath[1024]; int freespace = 10; #ifdef STOS freespace = 75; #endif snprintf(defpath, sizeof(defpath), "%s/bittorrentcache", gconf.cache_path); setting_create(SETTING_BOOL, s, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Enable bittorrent")), SETTING_MUTEX(&bittorrent_mutex), SETTING_WRITE_BOOL(&btg.btg_enabled), SETTING_VALUE(1), SETTING_STORE("bittorrent", "enable"), NULL); setting_create(SETTING_INT, s, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Max upload speed")), SETTING_MUTEX(&bittorrent_mutex), SETTING_CALLBACK(set_torrent_upload_speed, NULL), SETTING_VALUE(5), SETTING_RANGE(0, 100), SETTING_UNIT_CSTR("Mbit/s"), SETTING_STORE("bittorrent", "uploadspeed"), NULL); setting_create(SETTING_INT, s, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Max usage of free space for caching torrents")), SETTING_MUTEX(&bittorrent_mutex), SETTING_CALLBACK(set_torrent_free_percentage, NULL), SETTING_VALUE(freespace), SETTING_RANGE(1, 90), SETTING_UNIT_CSTR("%"), SETTING_STORE("bittorrent", "freepercentage"), NULL); setting_create(SETTING_STRING, s, SETTINGS_INITIAL_UPDATE | SETTINGS_DIR, SETTING_TITLE(_p("Torrent cache path")), SETTING_MUTEX(&bittorrent_mutex), SETTING_CALLBACK(set_torrent_cache_path, NULL), SETTING_VALUE(defpath), SETTING_STORE("bittorrent", "path"), NULL); setting_create(SETTING_ACTION, s, 0, SETTING_TITLE(_p("Clear cache")), SETTING_MUTEX(&bittorrent_mutex), SETTING_CALLBACK(torrent_diskio_cache_clear, NULL), NULL); settings_create_separator(s, _p("Status")); btg.btg_torrent_status = prop_create_root(NULL); settings_create_info(s, NULL, btg.btg_torrent_status); btg.btg_disk_status = prop_create_root(NULL); settings_create_info(s, NULL, btg.btg_disk_status); allow_update = 1; torrent_diskio_scan(0); }