diff --git a/app/playlists.py b/app/playlists.py index f1f853d..ae7226c 100644 --- a/app/playlists.py +++ b/app/playlists.py @@ -668,25 +668,7 @@ class PlaylistTab(QTableWidget): self._update_start_end_times(session) # Change OBS scene if needed - check_row = current_row - while True: - # If we have a note and it has a scene change command, - # execute it - note_text = self._get_row_note(check_row) - if note_text: - match_obj = scene_change_re.search(note_text) - if match_obj: - scene_name = match_obj.group(1) - if scene_name: - self._obs_change_scene(scene_name) - break - # After current track row, only check header rows and stop - # at first non-header row - check_row -= 1 - if check_row < 0: - break - if self._get_row_track_id(check_row): - break + self._obs_change_scene(current_row) # Update hidden tracks QTimer.singleShot(Config.HIDE_AFTER_PLAYING_OFFSET, @@ -1467,25 +1449,43 @@ class PlaylistTab(QTableWidget): target=self._run_subprocess, args=(cmd_list,)) thread.start() - def _obs_change_scene(self, scene_name: str) -> None: + def _obs_change_scene(self, current_row: int) -> None: """ Try to change OBS scene to the name passed """ - try: - cl = obs.ReqClient(host=Config.OBS_HOST, - port=Config.OBS_PORT, - password=Config.OBS_PASSWORD) - except ConnectionRefusedError: - log.error(f"OBS connection refused") - return + check_row = current_row + while True: + # If we have a note and it has a scene change command, + # execute it + note_text = self._get_row_note(check_row) + if note_text: + match_obj = scene_change_re.search(note_text) + if match_obj: + scene_name = match_obj.group(1) + if scene_name: + try: + cl = obs.ReqClient(host=Config.OBS_HOST, + port=Config.OBS_PORT, + password=Config.OBS_PASSWORD) + except ConnectionRefusedError: + log.error(f"OBS connection refused") + return - try: - cl.set_current_program_scene(scene_name) - log.info(f"OBS scene changed to '{scene_name}'") - except obs.error.OBSSDKError as e: - log.error(f"OBS SDK error ({e})") - return + try: + cl.set_current_program_scene(scene_name) + log.info(f"OBS scene changed to '{scene_name}'") + return + except obs.error.OBSSDKError as e: + log.error(f"OBS SDK error ({e})") + return + # After current track row, only check header rows and stop + # at first non-header row + check_row -= 1 + if check_row < 0: + break + if self._get_row_track_id(check_row): + break def _open_in_audacity(self, row_number: int) -> None: """Open track in Audacity. Audacity must be already running"""