diff --git a/data/locale/de-DE.ini b/data/locale/de-DE.ini index dc367ed8..9d851147 100644 --- a/data/locale/de-DE.ini +++ b/data/locale/de-DE.ini @@ -195,6 +195,8 @@ AdvSceneSwitcher.hotkey.startSwitcherHotkey="Starte den Erweiteren Szenenwechsle AdvSceneSwitcher.hotkey.stopSwitcherHotkey="Stoppe den Erweiteren Szenenwechsler" AdvSceneSwitcher.hotkey.startStopToggleSwitcherHotkey="Starte/Stoppe den Erweiteren Szenenwechsler" +AdvSceneSwitcher.askBackup="Neue Version des Erweiterten Automatischen Szenenwechslers wurde erkannt.\nSoll ein Backup der alten Einstellungen angelegt werden?" + AdvSceneSwitcher.close="Schließen" AdvSceneSwitcher.browse="Öffnen" diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 646b0938..ca6b6353 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -195,6 +195,8 @@ AdvSceneSwitcher.hotkey.startSwitcherHotkey="Start the Advanced Scene Switcher" AdvSceneSwitcher.hotkey.stopSwitcherHotkey="Stop the Advanced Scene Switcher" AdvSceneSwitcher.hotkey.startStopToggleSwitcherHotkey="Toggle Start/Stop for the Advanced Scene Switcher" +AdvSceneSwitcher.askBackup="Detected a new version of the Advanced Scene Switcher.\nShould a backup of the old settings be created?" + AdvSceneSwitcher.close="Close" AdvSceneSwitcher.browse="Browse" diff --git a/src/advanced-scene-switcher.cpp b/src/advanced-scene-switcher.cpp index 0c389ef0..296d62cb 100644 --- a/src/advanced-scene-switcher.cpp +++ b/src/advanced-scene-switcher.cpp @@ -38,8 +38,9 @@ bool translationAvailable() void AdvSceneSwitcher::loadUI() { if (!translationAvailable()) { - DisplayMessage("Failed to find plug-in's 'data' directory.\n" - "Please check installation instructions!"); + (void)DisplayMessage( + "Failed to find plug-in's 'data' directory.\n" + "Please check installation instructions!"); } #if __APPLE__ @@ -67,12 +68,26 @@ void AdvSceneSwitcher::loadUI() /******************************************************************************** * UI helpers ********************************************************************************/ -void AdvSceneSwitcher::DisplayMessage(QString msg) +bool AdvSceneSwitcher::DisplayMessage(QString msg, bool question) { - QMessageBox Msgbox; - Msgbox.setWindowTitle("Advanced Scene Switcher"); - Msgbox.setText(msg); - Msgbox.exec(); + if (question) { + QMessageBox::StandardButton reply; + reply = QMessageBox::question( + nullptr, "Advanced Scene Switcher", msg, + QMessageBox::Yes | QMessageBox::No); + if (reply == QMessageBox::Yes) { + return true; + } else { + return false; + } + } else { + QMessageBox Msgbox; + Msgbox.setWindowTitle("Advanced Scene Switcher"); + Msgbox.setText(msg); + Msgbox.exec(); + } + + return false; } void addSelectionEntry(QComboBox *sel, const char *description, @@ -346,6 +361,7 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) switcher->saveAudioSwitches(obj); switcher->saveGeneralSettings(obj); switcher->saveHotkeys(obj); + switcher->saveVersion(obj, g_GIT_SHA1); obs_data_set_obj(save_data, "advanced-scene-switcher", obj); @@ -358,6 +374,8 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) if (!obj) obj = obs_data_create(); + if (switcher->versionChanged(obj, g_GIT_SHA1)) + AdvSceneSwitcher::AskBackup(obj); switcher->loadWindowTitleSwitches(obj); switcher->loadScreenRegionSwitches(obj); diff --git a/src/general.cpp b/src/general.cpp index 40c2d117..6d4cb924 100644 --- a/src/general.cpp +++ b/src/general.cpp @@ -302,6 +302,31 @@ void AdvSceneSwitcher::on_uiHintsDisable_stateChanged(int state) switcher->disableHints = state; } +void AdvSceneSwitcher::AskBackup(obs_data_t *obj) +{ + bool backupSettings = DisplayMessage( + obs_module_text("AdvSceneSwitcher.askBackup"), true); + + if (!backupSettings) + return; + + QString directory = QFileDialog::getSaveFileName( + nullptr, + obs_module_text( + "AdvSceneSwitcher.generalTab.saveOrLoadsettings.importWindowTitle"), + QDir::currentPath(), + obs_module_text( + "AdvSceneSwitcher.generalTab.saveOrLoadsettings.textType")); + if (directory.isEmpty()) + return; + + QFile file(directory); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) + return; + + obs_data_save_json(obj, file.fileName().toUtf8().constData()); +} + void AdvSceneSwitcher::on_exportSettings_clicked() { QString directory = QFileDialog::getSaveFileName( @@ -367,7 +392,7 @@ void AdvSceneSwitcher::on_importSettings_clicked() file.fileName().toUtf8().constData()); if (!obj) { - DisplayMessage(obs_module_text( + (void)DisplayMessage(obs_module_text( "AdvSceneSwitcher.generalTab.saveOrLoadsettings.loadFail")); return; } @@ -389,7 +414,7 @@ void AdvSceneSwitcher::on_importSettings_clicked() obs_data_release(obj); - DisplayMessage(obs_module_text( + (void)DisplayMessage(obs_module_text( "AdvSceneSwitcher.generalTab.saveOrLoadsettings.loadSuccess")); close(); diff --git a/src/headers/advanced-scene-switcher.hpp b/src/headers/advanced-scene-switcher.hpp index 315134d0..ca4098b2 100644 --- a/src/headers/advanced-scene-switcher.hpp +++ b/src/headers/advanced-scene-switcher.hpp @@ -56,7 +56,8 @@ public: void setupAudioTab(); void setTabOrder(); - void DisplayMessage(QString msg); + static bool DisplayMessage(QString msg, bool question = false); + static void AskBackup(obs_data_t *obj); static void populateSceneSelection(QComboBox *sel, bool addPrevious = false, bool addSelect = true); diff --git a/src/headers/switcher-data-structs.hpp b/src/headers/switcher-data-structs.hpp index b2d74d41..259d3049 100644 --- a/src/headers/switcher-data-structs.hpp +++ b/src/headers/switcher-data-structs.hpp @@ -153,6 +153,8 @@ struct SwitcherData { obs_hotkey_id stopHotkey = 0; obs_hotkey_id toggleHotkey = 0; + bool versionChanged(obs_data_t *obj, std::string currentVersion); + void Thread(); void Start(); void Stop(); @@ -210,6 +212,7 @@ struct SwitcherData { void saveAudioSwitches(obs_data_t *obj); void saveGeneralSettings(obs_data_t *obj); void saveHotkeys(obs_data_t *obj); + void saveVersion(obs_data_t *obj, std::string currentVersion); void loadWindowTitleSwitches(obs_data_t *obj); void loadScreenRegionSwitches(obs_data_t *obj); diff --git a/src/switcher-data-structs.cpp b/src/switcher-data-structs.cpp index 53389268..6b922e67 100644 --- a/src/switcher-data-structs.cpp +++ b/src/switcher-data-structs.cpp @@ -93,3 +93,14 @@ void SwitcherData::Prune() audioSwitches.erase(audioSwitches.begin() + i--); } } + +bool SwitcherData::versionChanged(obs_data_t *obj, std::string currentVersion) +{ + std::string previousVersion = obs_data_get_string(obj, "version"); + return previousVersion != currentVersion; +} + +void SwitcherData::saveVersion(obs_data_t *obj, std::string currentVersion) +{ + obs_data_set_string(obj, "version", currentVersion.c_str()); +}