WIP V3: OBS scene changes working

This commit is contained in:
Keith Edmunds 2023-11-27 21:27:27 +00:00
parent b1442b2c7d
commit 00d7258afd

View File

@ -1,3 +1,5 @@
import obsws_python as obs # type: ignore
import re
from dataclasses import dataclass from dataclasses import dataclass
from datetime import datetime, timedelta from datetime import datetime, timedelta
from enum import auto, Enum from enum import auto, Enum
@ -35,6 +37,7 @@ from models import Playdates, PlaylistRows, Tracks
HEADER_NOTES_COLUMN = 1 HEADER_NOTES_COLUMN = 1
scene_change_re = re.compile(r"SetScene=\[([^[\]]*)\]")
class Col(Enum): class Col(Enum):
@ -234,6 +237,7 @@ class PlaylistModel(QAbstractTableModel):
Actions required: Actions required:
- sanity check - sanity check
- change OBS scene if needed
- update display - update display
- update track times - update track times
- update Playdates in database - update Playdates in database
@ -256,6 +260,9 @@ class PlaylistModel(QAbstractTableModel):
) )
return return
# Check for OBS scene change
self.obs_scene_change(row_number)
# Update Playdates in database # Update Playdates in database
with Session() as session: with Session() as session:
Playdates(session, track_sequence.now.track_id) Playdates(session, track_sequence.now.track_id)
@ -660,7 +667,9 @@ class PlaylistModel(QAbstractTableModel):
Return True if row is a header row, else False Return True if row is a header row, else False
""" """
return self.playlist_rows[row_number].path == "" if row_number in self.playlist_rows:
return self.playlist_rows[row_number].path == ""
return False
def is_played_row(self, row_number: int) -> bool: def is_played_row(self, row_number: int) -> bool:
""" """
@ -893,6 +902,39 @@ class PlaylistModel(QAbstractTableModel):
self.add_track_to_header(header_row_number, existing_prd.track_id, note) self.add_track_to_header(header_row_number, existing_prd.track_id, note)
self.delete_rows([existing_prd.plr_rownum]) self.delete_rows([existing_prd.plr_rownum])
def obs_scene_change(self, row_number: int) -> None:
"""
Check this row and any preceding headers for OBS scene change command
and execute any found
"""
# Check any headers before this row
idx = row_number - 1
while self.is_header_row(idx):
idx -= 1
# Step through headers in row order and finish with this row
for chkrow in range(idx + 1, row_number + 1):
match_obj = scene_change_re.search(self.playlist_rows[chkrow].note)
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("OBS connection refused")
return
try:
cl.set_current_program_scene(scene_name)
log.info(f"OBS scene changed to '{scene_name}'")
continue
except obs.error.OBSSDKError as e:
log.error(f"OBS SDK error ({e})")
return
def open_in_audacity(self, row_number: int) -> None: def open_in_audacity(self, row_number: int) -> None:
""" """
Open track at passed row number in Audacity Open track at passed row number in Audacity