From ab3e93ab840de39cf5e4fdced4d00de7208e58c3 Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Sun, 2 Aug 2020 20:22:13 +0200 Subject: [PATCH] add fallback to old format for sequence import --- src/scene-round-trip.cpp | 64 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 3 deletions(-) diff --git a/src/scene-round-trip.cpp b/src/scene-round-trip.cpp index 3e062bdf..149ba195 100644 --- a/src/scene-round-trip.cpp +++ b/src/scene-round-trip.cpp @@ -146,6 +146,50 @@ void SceneSwitcher::on_sceneRoundTripSave_clicked() obs_data_release(obj); } +// to be removed once support for old file format is dropped +bool oldSceneRoundTripLoad(QFile *file) +{ + QTextStream in(file); + std::vector lines; + + std::vector newSceneRoundTripSwitch; + + while (!in.atEnd()) { + QString line = in.readLine(); + lines.push_back(line); + if (lines.size() == 5) { + OBSWeakSource scene1 = GetWeakSourceByQString(lines[0]); + OBSWeakSource scene2 = GetWeakSourceByQString(lines[1]); + OBSWeakSource transition = + GetWeakTransitionByQString(lines[4]); + + if (WeakSourceValid(scene1) && + ((lines[1] == QString(PREVIOUS_SCENE_NAME)) || + (WeakSourceValid(scene2))) && + WeakSourceValid(transition)) { + newSceneRoundTripSwitch.emplace_back( + SceneRoundTripSwitch( + GetWeakSourceByQString(lines[0]), + GetWeakSourceByQString(lines[1]), + GetWeakTransitionByQString( + lines[4]), + lines[2].toDouble() / 1000., + (lines[1] == + QString(PREVIOUS_SCENE_NAME)), + lines[3].toStdString())); + } + lines.clear(); + } + } + + if (lines.size() != 0 || newSceneRoundTripSwitch.size() == 0) + return false; + + switcher->sceneRoundTripSwitches.clear(); + switcher->sceneRoundTripSwitches = newSceneRoundTripSwitch; + return true; +} + void SceneSwitcher::on_sceneRoundTripLoad_clicked() { std::lock_guard lock(switcher->m); @@ -165,9 +209,23 @@ void SceneSwitcher::on_sceneRoundTripLoad_clicked() if (!obj) { QMessageBox Msgbox; - Msgbox.setText( - "Advanced Scene Switcher failed to import settings (try import with previous version of the plugin)"); + QString txt = + "Advanced Scene Switcher failed to import settings!\n"; + txt += "Falling back to old format."; + Msgbox.setText(txt); Msgbox.exec(); + if (oldSceneRoundTripLoad(&file)) { + QString txt = + "Advanced Scene Switcher settings imported successfully!\n"; + txt += "Please resave settings as support for old format will be dropped in next version."; + Msgbox.setText(txt); + Msgbox.exec(); + close(); + } else { + Msgbox.setText( + "Advanced Scene Switcher failed to import settings!"); + Msgbox.exec(); + } return; } switcher->loadSceneRoundTripSwitches(obj); @@ -175,7 +233,7 @@ void SceneSwitcher::on_sceneRoundTripLoad_clicked() QMessageBox Msgbox; Msgbox.setText( - "Advanced Scene Switcher settings imported successfully"); + "Advanced Scene Switcher settings imported successfully!"); Msgbox.exec(); close(); }