static void load_script_data(obs_data_t *load_data, bool, void *) { obs_data_array_t *array = obs_data_get_array(load_data, "scripts-tool"); delete scriptData; scriptData = new ScriptData; size_t size = obs_data_array_count(array); for (size_t i = 0; i < size; i++) { obs_data_t *obj = obs_data_array_item(array, i); const char *path = obs_data_get_string(obj, "path"); obs_data_t *settings = obs_data_get_obj(obj, "settings"); obs_script_t *script = obs_script_create(path, settings); if (script) { scriptData->scripts.emplace_back(script); } obs_data_release(settings); obs_data_release(obj); } if (scriptsWindow) scriptsWindow->RefreshLists(); obs_data_array_release(array); }
static inline bool enum_load_bindings(void *data, size_t idx, obs_hotkey_t *hotkey) { UNUSED_PARAMETER(idx); obs_data_array_t *hotkey_data = obs_data_get_array(data, hotkey->name); if (!hotkey_data) return true; load_bindings(hotkey, hotkey_data); obs_data_array_release(hotkey_data); return true; }
static void scene_load(void *scene, obs_data_t *settings) { obs_data_array_t *items = obs_data_get_array(settings, "items"); size_t count, i; remove_all_items(scene); if (!items) return; count = obs_data_array_count(items); for (i = 0; i < count; i++) { obs_data_t *item_data = obs_data_array_item(items, i); scene_load_item(scene, item_data); obs_data_release(item_data); } obs_data_array_release(items); }
static inline obs_hotkey_id obs_hotkey_register_internal( obs_hotkey_registerer_t type, void *registerer, struct obs_context_data *context, const char *name, const char *description, obs_hotkey_func func, void *data) { if ((obs->hotkeys.next_id + 1) == OBS_INVALID_HOTKEY_ID) blog(LOG_WARNING, "obs-hotkey: Available hotkey ids exhausted"); obs_hotkey_t *base_addr = obs->hotkeys.hotkeys.array; obs_hotkey_id result = obs->hotkeys.next_id++; obs_hotkey_t *hotkey = da_push_back_new(obs->hotkeys.hotkeys); hotkey->id = result; hotkey->name = bstrdup(name); hotkey->description = bstrdup(description); hotkey->func = func; hotkey->data = data; hotkey->registerer_type = type; hotkey->registerer = registerer; hotkey->pair_partner_id = OBS_INVALID_HOTKEY_PAIR_ID; if (context) { obs_data_array_t *data = obs_data_get_array(context->hotkey_data, name); load_bindings(hotkey, data); obs_data_array_release(data); context_add_hotkey(context, result); } if (base_addr != obs->hotkeys.hotkeys.array) fixup_pointers(); hotkey_signal("hotkey_register", hotkey); return result; }
static void enum_files(obs_data_t *package, bool (*enum_func)(void *param, obs_data_t *file), void *param) { obs_data_array_t *array = obs_data_get_array(package, "files"); size_t num; if (!array) return; num = obs_data_array_count(array); for (size_t i = 0; i < num; i++) { obs_data_t *file = obs_data_array_item(array, i); bool continue_enum = enum_func(param, file); obs_data_release(file); if (!continue_enum) break; } obs_data_array_release(array); }
void BiLiOBSMainWid::mLoad(const char *file) { LoadScene(); LoadAudioDeviceConfig(); LoadFrontendHotkeys(); #if 0 if (!file || !os_file_exists(file)) { blog(LOG_INFO, "No scene file found, creating default scene"); mCreateDefaultScene(true); mSaveProject(); return; } mDisableSaving++; obs_data_t *data = obs_data_create_from_json_file_safe(file, "bak"); if (!data) { mDisableSaving--; blog(LOG_ERROR, "Failed to load '%s', creating default scene", file); mCreateDefaultScene(true); mSaveProject(); return; } mClearSceneData(); obs_data_array_t *sceneOrder = obs_data_get_array(data, "scene_order"); obs_data_array_t *sources = obs_data_get_array(data, "sources"); const char *sceneName = obs_data_get_string(data, "current_scene"); const char *curSceneCollection = config_get_string( App()->mGetGlobalConfig(), "Basic", "SceneCollection"); obs_data_set_default_string(data, "name", curSceneCollection); const char *name = obs_data_get_string(data, "name"); obs_source_t *curScene; if (!name || !*name) name = curSceneCollection; LoadAudioDevice(DESKTOP_AUDIO_1, 1, data); LoadAudioDevice(DESKTOP_AUDIO_2, 2, data); LoadAudioDevice(AUX_AUDIO_1, 3, data); LoadAudioDevice(AUX_AUDIO_2, 4, data); LoadAudioDevice(AUX_AUDIO_3, 5, data); obs_load_sources(sources); if (sceneOrder) mLoadSceneListOrder(sceneOrder); curScene = obs_get_source_by_name(sceneName); obs_set_output_source(0, curScene); obs_source_release(curScene); obs_data_array_release(sources); obs_data_array_release(sceneOrder); std::string file_base = strrchr(file, '/') + 1; file_base.erase(file_base.size() - 5, 5); config_set_string(App()->mGetGlobalConfig(), "Basic", "SceneCollection", name); config_set_string(App()->mGetGlobalConfig(), "Basic", "SceneCollectionFile", file_base.c_str()); obs_data_release(data); mCleanupUnusedSources(); mDisableSaving--; #endif }