UI: Rename existing (corrupt) collection file if loading fails

This commit is contained in:
derrod
2024-07-29 22:46:38 +02:00
committed by Ryan Foster
parent c723b3ba04
commit 6d20327bbc

View File

@@ -1165,12 +1165,34 @@ void OBSBasic::Load(const char *file)
obs_data_t *data = obs_data_create_from_json_file_safe(file, "bak");
if (!data) {
disableSaving--;
blog(LOG_INFO, "No scene file found, creating default scene");
const string name = filesystem::u8path(file).stem().u8string();
const auto path = filesystem::u8path(file);
const string name = path.stem().u8string();
/* Check if file exists but failed to load. */
if (filesystem::exists(path)) {
/* Assume the file is corrupt and rename it to allow
* for manual recovery if possible. */
auto newPath = path;
newPath.concat(".invalid");
blog(LOG_WARNING,
"File exists but appears to be corrupt, renaming "
"to \"%s\" before continuing.",
newPath.filename().u8string().c_str());
error_code ec;
filesystem::rename(path, newPath, ec);
if (ec) {
blog(LOG_ERROR,
"Failed renaming corrupt file with %d",
ec.value());
}
}
config_set_string(App()->GlobalConfig(), "Basic",
"SceneCollection", name.c_str());
config_set_string(App()->GlobalConfig(), "Basic",
"SceneCollectionFile", name.c_str());
blog(LOG_INFO, "No scene file found, creating default scene");
CreateDefaultScene(true);
SaveProject();
return;