From 5c3d4ea28b193aa4e2693fbd7f3f6be8f2176e6a Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Fri, 14 Oct 2016 15:49:27 +0200 Subject: [PATCH] code cleanup --- advanced-scene-switcher.cpp | 141 +++++++++++++++++++----------------- advanced-scene-switcher.hpp | 22 ------ 2 files changed, 74 insertions(+), 89 deletions(-) diff --git a/advanced-scene-switcher.cpp b/advanced-scene-switcher.cpp index 05068943..d8ecbb02 100644 --- a/advanced-scene-switcher.cpp +++ b/advanced-scene-switcher.cpp @@ -88,14 +88,6 @@ static inline bool WeakSourceValid(obs_weak_source_t *ws) return !!source; } -static inline bool WeakTransitionValid(obs_weak_source_t *ws) -{ - obs_source_t *source = obs_weak_source_get_source(ws); - if (source) - obs_source_release(source);; - return !!source; -} - struct SwitcherData { thread th; condition_variable cv; @@ -126,7 +118,7 @@ struct SwitcherData { { for (size_t i = 0; i < switches.size(); i++) { SceneSwitch &s = switches[i]; - if (!WeakSourceValid(s.scene) || !WeakTransitionValid(s.transition)) + if (!WeakSourceValid(s.scene) || !WeakSourceValid(s.transition)) switches.erase(switches.begin() + i--); } @@ -137,7 +129,7 @@ struct SwitcherData { for (size_t i = 0; i < screenRegionSwitches.size(); i++) { ScreenRegionSwitch &s = screenRegionSwitches[i]; - if (!WeakSourceValid(s.scene) || !WeakTransitionValid(s.transition)) + if (!WeakSourceValid(s.scene) || !WeakSourceValid(s.transition)) screenRegionSwitches.erase(screenRegionSwitches.begin() + i--); } @@ -149,13 +141,13 @@ struct SwitcherData { for (size_t i = 0; i < sceneRoundTripSwitches.size(); i++) { SceneRoundTripSwitch &s = sceneRoundTripSwitches[i]; - if (!WeakSourceValid(s.scene1) || !WeakSourceValid(s.scene2) || !WeakTransitionValid(s.transition)) + if (!WeakSourceValid(s.scene1) || !WeakSourceValid(s.scene2) || !WeakSourceValid(s.transition)) sceneRoundTripSwitches.erase(sceneRoundTripSwitches.begin() + i--); } for (size_t i = 0; i < sceneTransitions.size(); i++) { SceneTransition &s = sceneTransitions[i]; - if (!WeakSourceValid(s.scene1) || !WeakSourceValid(s.scene2) || !WeakTransitionValid(s.transition)) + if (!WeakSourceValid(s.scene1) || !WeakSourceValid(s.scene2) || !WeakSourceValid(s.transition)) sceneTransitions.erase(sceneTransitions.begin() + i--); } } @@ -172,17 +164,16 @@ static inline QString MakeSwitchName(const QString &scene, const QString &value, const QString &transition, bool fullscreen) { if (!fullscreen) - return QStringLiteral("[") + scene + QStringLiteral(", ") + - transition + QStringLiteral("]: ") + value; - return QStringLiteral("[") + scene + QStringLiteral(", ") + - transition + QStringLiteral("]: ") + value + QStringLiteral(" (only if window is fullscreen)"); + return QStringLiteral("[") + scene + QStringLiteral(", ") + transition + QStringLiteral("]: ") + + value; + return QStringLiteral("[") + scene + QStringLiteral(", ") + transition + QStringLiteral("]: ") + + value + QStringLiteral(" (only if window is fullscreen)"); } static inline QString MakeScreenRegionSwitchName(const QString &scene, const QString &transition, int minX, int minY, int maxX, int maxY) { - return QStringLiteral("[") + scene + QStringLiteral(", ") + - transition + QStringLiteral("]: ") + + return QStringLiteral("[") + scene + QStringLiteral(", ") + transition + QStringLiteral("]: ") + QString::number(minX) + QStringLiteral(", ") + QString::number(minY) + QStringLiteral(" x ") + QString::number(maxX) + QStringLiteral(", ") + QString::number(maxY); } @@ -241,6 +232,7 @@ static inline OBSWeakSource GetWeakTransitionByName(const char *transitionName) obs_weak_source_release(weak); return weak; } + obs_frontend_source_list *transitions = new obs_frontend_source_list(); obs_frontend_get_transitions(transitions); @@ -251,9 +243,10 @@ static inline OBSWeakSource GetWeakTransitionByName(const char *transitionName) break; } } - obs_frontend_source_list_free(transitions); weak = obs_source_get_weak_source(source); + + obs_frontend_source_list_free(transitions); obs_weak_source_release(weak); return weak; @@ -736,7 +729,7 @@ void SceneSwitcher::on_add_clicked() QString transitionName = ui->transitions->currentText(); bool fullscreen = ui->fullscreenCheckBox->isChecked(); - if (windowName.isEmpty()) + if (windowName.isEmpty() || sceneName.isEmpty()) return; OBSWeakSource source = GetWeakSourceByQString(sceneName); @@ -809,8 +802,10 @@ void SceneSwitcher::on_screenRegionAdd_clicked() { QString sceneName = ui->screenRegionScenes->currentText(); QString transitionName = ui->screenRegionsTransitions->currentText(); + if (sceneName.isEmpty()) return; + int minX = ui->screenRegionMinX->value(); int minY = ui->screenRegionMinY->value(); int maxX = ui->screenRegionMaxX->value(); @@ -886,6 +881,7 @@ void SceneSwitcher::on_screenRegionRemove_clicked() void SceneSwitcher::on_pauseScenesAdd_clicked() { QString sceneName = ui->pauseScenesScenes->currentText(); + if (sceneName.isEmpty()) return; @@ -934,6 +930,7 @@ void SceneSwitcher::on_pauseScenesRemove_clicked() void SceneSwitcher::on_pauseWindowsAdd_clicked() { QString windowName = ui->pauseWindowsWindows->currentText(); + if (windowName.isEmpty()) return; @@ -981,6 +978,7 @@ void SceneSwitcher::on_pauseWindowsRemove_clicked() void SceneSwitcher::on_ignoreWindowsAdd_clicked() { QString windowName = ui->ignoreWindowsWindows->currentText(); + if (windowName.isEmpty()) return; @@ -1030,8 +1028,10 @@ void SceneSwitcher::on_sceneRoundTripAdd_clicked() QString scene1Name = ui->sceneRoundTripScenes1->currentText(); QString scene2Name = ui->sceneRoundTripScenes2->currentText(); QString transitionName = ui->sceneRoundTripTransitions->currentText(); + if (scene1Name.isEmpty() || scene2Name.isEmpty()) return; + int delay = ui->sceneRoundTripSpinBox->value(); if (scene1Name == scene2Name) @@ -1105,6 +1105,7 @@ void SceneSwitcher::on_transitionsAdd_clicked() QString scene1Name = ui->transitionsScene1->currentText(); QString scene2Name = ui->transitionsScene2->currentText(); QString transitionName = ui->transitionsTransitions->currentText(); + if (scene1Name.isEmpty() || scene2Name.isEmpty()) return; @@ -1185,6 +1186,7 @@ void SceneSwitcher::on_readFileCheckBox_stateChanged(int state) { if (loading) return; + lock_guard lock(switcher->m); if (!state){ ui->browseButton_2->setDisabled(true); @@ -1202,6 +1204,7 @@ void SceneSwitcher::on_readPathLineEdit_textChanged(const QString & text) { if (loading) return; + lock_guard lock(switcher->m); if (text.isEmpty()){ switcher->fileIO.readEnabled = false; @@ -1215,6 +1218,7 @@ void SceneSwitcher::on_writePathLineEdit_textChanged(const QString & text) { if (loading) return; + lock_guard lock(switcher->m); if (text.isEmpty()){ switcher->fileIO.writeEnabled = false; @@ -1309,14 +1313,13 @@ void SceneSwitcher::on_toggleStartButton_clicked() switcher->Stop(); SetStopped(); } - else { - if (switcher->stop){ - switcher->Start(); - SetStarted(); - } + else if (switcher->stop){ + switcher->Start(); + SetStarted(); } } +//TODO rename the save values (clears settings!) static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) { if (saving) { @@ -1514,7 +1517,12 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) obs_data_t *obj = obs_data_get_obj(save_data, "advanced-scene-switcher"); obs_data_array_t *array = obs_data_get_array(obj, "switches"); - size_t count = obs_data_array_count(array); + obs_data_array_t *screenRegionArray = obs_data_get_array(obj, "screenRegion"); + obs_data_array_t *pauseScenesArray = obs_data_get_array(obj, "pauseScenes"); + obs_data_array_t *pauseWindowsArray = obs_data_get_array(obj, "pauseWindows"); + obs_data_array_t *ignoreWindowsArray = obs_data_get_array(obj, "ignoreWindows"); + obs_data_array_t *sceneRoundTripArray = obs_data_get_array(obj, "sceneRoundTrip"); + obs_data_array_t *sceneTransitionsArray = obs_data_get_array(obj, "sceneTransitions"); if (!obj) obj = obs_data_create(); @@ -1532,6 +1540,7 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) GetWeakSourceByName(nonMatchingScene.c_str()); switcher->switches.clear(); + size_t count = obs_data_array_count(array); for (size_t i = 0; i < count; i++) { obs_data_t *array_obj = obs_data_array_item(array, i); @@ -1552,12 +1561,8 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) obs_data_release(array_obj); } - obs_data_array_release(array); - - obs_data_array_t *screenRegionArray = obs_data_get_array(obj, "screenRegion"); - count = obs_data_array_count(screenRegionArray); - switcher->screenRegionSwitches.clear(); + count = obs_data_array_count(screenRegionArray); for (size_t i = 0; i < count; i++) { obs_data_t *array_obj = obs_data_array_item(screenRegionArray, i); @@ -1581,12 +1586,8 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) obs_data_release(array_obj); } - obs_data_array_release(screenRegionArray); - - obs_data_array_t *pauseScenesArray = obs_data_get_array(obj, "pauseScenes"); - count = obs_data_array_count(pauseScenesArray); - switcher->pauseScenesSwitches.clear(); + count = obs_data_array_count(pauseScenesArray); for (size_t i = 0; i < count; i++) { obs_data_t *array_obj = obs_data_array_item(pauseScenesArray, i); @@ -1599,12 +1600,8 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) obs_data_release(array_obj); } - obs_data_array_release(pauseScenesArray); - - obs_data_array_t *pauseWindowsArray = obs_data_get_array(obj, "pauseWindows"); - count = obs_data_array_count(pauseWindowsArray); - switcher->pauseWindowsSwitches.clear(); + count = obs_data_array_count(pauseWindowsArray); for (size_t i = 0; i < count; i++) { obs_data_t *array_obj = obs_data_array_item(pauseWindowsArray, i); @@ -1619,10 +1616,8 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) obs_data_array_release(pauseWindowsArray); - obs_data_array_t *ignoreWindowsArray = obs_data_get_array(obj, "ignoreWindows"); - count = obs_data_array_count(ignoreWindowsArray); - switcher->ignoreWindowsSwitches.clear(); + count = obs_data_array_count(ignoreWindowsArray); for (size_t i = 0; i < count; i++) { obs_data_t *array_obj = obs_data_array_item(ignoreWindowsArray, i); @@ -1635,12 +1630,8 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) obs_data_release(array_obj); } - obs_data_array_release(ignoreWindowsArray); - - obs_data_array_t *sceneRoundTripArray = obs_data_get_array(obj, "sceneRoundTrip"); - count = obs_data_array_count(sceneRoundTripArray); - switcher->sceneRoundTripSwitches.clear(); + count = obs_data_array_count(sceneRoundTripArray); for (size_t i = 0; i < count; i++) { obs_data_t *array_obj = obs_data_array_item(sceneRoundTripArray, i); @@ -1665,12 +1656,8 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) obs_data_release(array_obj); } - obs_data_array_release(sceneRoundTripArray); - - obs_data_array_t *sceneTransitionsArray = obs_data_get_array(obj, "sceneTransitions"); - count = obs_data_array_count(sceneTransitionsArray); - switcher->sceneTransitions.clear(); + count = obs_data_array_count(sceneTransitionsArray); for (size_t i = 0; i < count; i++) { obs_data_t *array_obj = obs_data_array_item(sceneTransitionsArray, i); @@ -1693,13 +1680,18 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) obs_data_release(array_obj); } - obs_data_array_release(sceneTransitionsArray); - switcher->fileIO.readEnabled = obs_data_get_bool(obj, "readEnabled"); switcher->fileIO.readPath = obs_data_get_string(obj, "readPath"); switcher->fileIO.writeEnabled = obs_data_get_bool(obj, "writeEnabled"); switcher->fileIO.writePath = obs_data_get_string(obj, "writePath"); + obs_data_array_release(array); + obs_data_array_release(screenRegionArray); + obs_data_array_release(pauseScenesArray); + obs_data_array_release(ignoreWindowsArray); + obs_data_array_release(sceneRoundTripArray); + obs_data_array_release(sceneTransitionsArray); + obs_data_release(obj); switcher->m.unlock(); @@ -1715,9 +1707,7 @@ static inline OBSWeakSource getNextTransition(OBSWeakSource scene1, OBSWeakSourc { OBSWeakSource ws; for (SceneTransition &t : switcher->sceneTransitions){ - if (t.scene1 == scene1 && t.scene2 == scene2){ - ws = t.transition; - } + if (t.scene1 == scene1 && t.scene2 == scene2) ws = t.transition; } return ws; } @@ -1829,8 +1819,10 @@ void SwitcherData::Thread() //Scene Round Trip - for (SceneRoundTripSwitch &s : sceneRoundTripSwitches) { + for (SceneRoundTripSwitch &s : sceneRoundTripSwitches) + { OBSWeakSource ws = obs_source_get_weak_source(currentSource); + if (s.scene1 == ws) { sceneRoundTripActive = true; int dur = s.delay * 1000 - interval; @@ -1838,6 +1830,7 @@ void SwitcherData::Thread() cv.wait_for(lock, chrono::milliseconds(dur)); else cv.wait_for(lock, chrono::milliseconds(30)); + obs_source_t *source = obs_weak_source_get_source(s.scene2); obs_source_t *currentSource2 = @@ -1846,17 +1839,22 @@ void SwitcherData::Thread() if (currentSource == currentSource2){ obs_source_t *transition; OBSWeakSource transitionWs = getNextTransition(s.scene1, s.scene2); + if (transitionWs) transition = obs_weak_source_get_source(transitionWs); else transition = obs_weak_source_get_source(s.transition); + obs_frontend_set_current_transition(transition); obs_frontend_set_current_scene(source); + obs_source_release(transition); } + obs_source_release(source); obs_weak_source_release(ws); obs_source_release(currentSource2); + break; } obs_weak_source_release(ws); @@ -1880,6 +1878,7 @@ void SwitcherData::Thread() break; } } + lastTitle = title; //End Ignore Windows @@ -1966,6 +1965,7 @@ void SwitcherData::Thread() obs_source_t *nextTransition; OBSWeakSource currentScene = obs_source_get_weak_source(currentSource); OBSWeakSource nextTransitionWs = getNextTransition(currentScene, scene); + if (nextTransitionWs){ obs_source_t *nextTransition = obs_weak_source_get_source(nextTransitionWs); obs_frontend_set_current_transition(nextTransition); @@ -1976,6 +1976,7 @@ void SwitcherData::Thread() obs_frontend_set_current_transition(nextTransition); obs_source_release(nextTransition); } + obs_frontend_set_current_scene(source); } obs_source_release(currentSource); @@ -2009,9 +2010,11 @@ void SwitcherData::Stop() //HOTKEY -void startStopHotkeyFunc(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey, bool pressed) { +void startStopHotkeyFunc(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey, bool pressed) +{ UNUSED_PARAMETER(data); UNUSED_PARAMETER(hotkey); + if (pressed) { if (switcher->th.joinable()) @@ -2021,6 +2024,7 @@ void startStopHotkeyFunc(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey, boo } obs_data_array *hotkeyData = obs_hotkey_save(id); + if (hotkeyData != NULL) { char *path = obs_module_config_path(""); ofstream file; @@ -2040,11 +2044,13 @@ void startStopHotkeyFunc(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey, boo obs_data_array_release(hotkeyData); } -string loadConfigFile(string filename) { +string loadConfigFile(string filename) +{ ifstream settingsFile; char *path = obs_module_config_path(""); - settingsFile.open(string(path).append(filename)); string value; + + settingsFile.open(string(path).append(filename)); if (settingsFile.is_open()) { settingsFile.seekg(0, ios::end); @@ -2057,12 +2063,13 @@ string loadConfigFile(string filename) { return value; } -void loadKeybinding(obs_hotkey_id hotkeyId) { - string temp = loadConfigFile("hotkey.txt"); - if (!temp.empty()) +void loadKeybinding(obs_hotkey_id hotkeyId) +{ + string bindings = loadConfigFile("hotkey.txt"); + if (!bindings.empty()) { obs_data_array_t *hotkeyData = obs_data_array_create(); - obs_data_t *data = obs_data_create_from_json(temp.c_str()); + obs_data_t *data = obs_data_create_from_json(bindings.c_str()); obs_data_array_insert(hotkeyData, 0, data); obs_data_release(data); obs_hotkey_load(hotkeyId, hotkeyData); diff --git a/advanced-scene-switcher.hpp b/advanced-scene-switcher.hpp index b8684aeb..4df968bc 100644 --- a/advanced-scene-switcher.hpp +++ b/advanced-scene-switcher.hpp @@ -75,25 +75,3 @@ void GetWindowList(std::vector &windows); void GetCurrentWindowTitle(std::string &title); std::pair getCursorPos(); bool isFullscreen(); - -//Test for hotkey signal - -//class ThreadStopValue : public QObject -//{ -// Q_OBJECT -//public: -// ThreadStopValue() { stop = false; } -// bool value() const { return stop; } -// public slots : -// void setValue(bool value) -// { -// if (value != stop) { -// stop = value; -// emit valueChanged(value); -// } -// }; -//signals: -// void valueChanged(bool newValue); -//private: -// bool stop; -//}; \ No newline at end of file