mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-01-18 11:18:36 -05:00
UI: Fix bugs with missing files refactor
With https://github.com/obsproject/obs-studio/pull/5148, it was brought up that the loading of the missing files was not thread safe, as the missing files were being loaded late in the loading process. This PR tries to fix that problem, while still simplifying the original missing files code.
This commit is contained in:
committed by
Matt Gajownik
parent
8514c6c1e2
commit
aae15fc497
@@ -956,6 +956,15 @@ void OBSBasic::Load(const char *file)
|
||||
LoadData(data, file);
|
||||
}
|
||||
|
||||
static inline void AddMissingFiles(void *data, obs_source_t *source)
|
||||
{
|
||||
obs_missing_files_t *f = (obs_missing_files_t *)data;
|
||||
obs_missing_files_t *sf = obs_source_get_missing_files(source);
|
||||
|
||||
obs_missing_files_append(f, sf);
|
||||
obs_missing_files_destroy(sf);
|
||||
}
|
||||
|
||||
void OBSBasic::LoadData(obs_data_t *data, const char *file)
|
||||
{
|
||||
ClearSceneData();
|
||||
@@ -1024,10 +1033,11 @@ void OBSBasic::LoadData(obs_data_t *data, const char *file)
|
||||
obs_data_array_push_back_array(sources, groups);
|
||||
}
|
||||
|
||||
obs_load_sources(sources, nullptr, nullptr);
|
||||
obs_missing_files_t *files = obs_missing_files_create();
|
||||
obs_load_sources(sources, AddMissingFiles, files);
|
||||
|
||||
if (transitions)
|
||||
LoadTransitions(transitions);
|
||||
LoadTransitions(transitions, AddMissingFiles, files);
|
||||
if (sceneOrder)
|
||||
LoadSceneListOrder(sceneOrder);
|
||||
|
||||
@@ -1149,7 +1159,7 @@ retryScene:
|
||||
LogScenes();
|
||||
|
||||
if (!App()->IsMissingFilesCheckDisabled())
|
||||
on_actionShowMissingFiles_triggered();
|
||||
ShowMissingFilesDialog(files);
|
||||
|
||||
disableSaving--;
|
||||
|
||||
@@ -4854,34 +4864,8 @@ void OBSBasic::on_action_Settings_triggered()
|
||||
}
|
||||
}
|
||||
|
||||
static inline void AddMissingFiles(void *data, obs_source_t *source)
|
||||
void OBSBasic::ShowMissingFilesDialog(obs_missing_files_t *files)
|
||||
{
|
||||
obs_missing_files_t *f = (obs_missing_files_t *)data;
|
||||
obs_missing_files_t *sf = obs_source_get_missing_files(source);
|
||||
|
||||
obs_missing_files_append(f, sf);
|
||||
obs_missing_files_destroy(sf);
|
||||
}
|
||||
|
||||
void OBSBasic::on_actionShowMissingFiles_triggered()
|
||||
{
|
||||
obs_missing_files_t *files = obs_missing_files_create();
|
||||
|
||||
auto cb_sources = [](void *data, obs_source_t *source) {
|
||||
AddMissingFiles(data, source);
|
||||
return true;
|
||||
};
|
||||
obs_enum_sources(cb_sources, files);
|
||||
|
||||
auto cb_transitions = [](void *data, obs_source_t *source) {
|
||||
if (obs_source_get_type(source) != OBS_SOURCE_TYPE_TRANSITION)
|
||||
return true;
|
||||
|
||||
AddMissingFiles(data, source);
|
||||
return true;
|
||||
};
|
||||
obs_enum_all_sources(cb_transitions, files);
|
||||
|
||||
if (obs_missing_files_count(files) > 0) {
|
||||
/* When loading the missing files dialog on launch, the
|
||||
* window hasn't fully initialized by this point on macOS,
|
||||
@@ -4904,6 +4888,19 @@ void OBSBasic::on_actionShowMissingFiles_triggered()
|
||||
}
|
||||
}
|
||||
|
||||
void OBSBasic::on_actionShowMissingFiles_triggered()
|
||||
{
|
||||
obs_missing_files_t *files = obs_missing_files_create();
|
||||
|
||||
auto cb_sources = [](void *data, obs_source_t *source) {
|
||||
AddMissingFiles(data, source);
|
||||
return true;
|
||||
};
|
||||
|
||||
obs_enum_all_sources(cb_sources, files);
|
||||
ShowMissingFilesDialog(files);
|
||||
}
|
||||
|
||||
void OBSBasic::on_actionAdvAudioProperties_triggered()
|
||||
{
|
||||
if (advAudioWindow != nullptr) {
|
||||
|
||||
Reference in New Issue
Block a user