mirror of
https://github.com/onyx-and-iris/simple-recorder.git
synced 2025-06-28 02:10:23 +01:00
72 lines
1.7 KiB
Python
72 lines
1.7 KiB
Python
import logging
|
|
|
|
from clypi import ClypiConfig, ClypiException, Command, arg, configure
|
|
from typing_extensions import override
|
|
|
|
from .errors import SimpleRecorderError
|
|
from .gui import SimpleRecorderWindow
|
|
from .pause import Pause
|
|
from .resume import Resume
|
|
from .start import Start
|
|
from .stop import Stop
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
config = ClypiConfig(
|
|
nice_errors=(SimpleRecorderError,),
|
|
)
|
|
configure(config)
|
|
|
|
themes = [
|
|
"Light Purple",
|
|
"Neutral Blue",
|
|
"Reds",
|
|
"Sandy Beach",
|
|
"Kayak",
|
|
"Light Blue 2",
|
|
]
|
|
|
|
|
|
def theme_parser(value: str) -> str:
|
|
"""Parse the theme argument."""
|
|
if value not in themes:
|
|
raise ClypiException(
|
|
f"Invalid theme: {value}. Available themes: {', '.join(themes)}"
|
|
)
|
|
return value
|
|
|
|
|
|
class SimpleRecorder(Command):
|
|
subcommand: Start | Stop | Pause | Resume | None = None
|
|
host: str = arg(default="localhost", env="OBS_HOST", help="OBS WebSocket host")
|
|
port: int = arg(default=4455, env="OBS_PORT", help="OBS WebSocket port")
|
|
password: str | None = arg(
|
|
default=None, env="OBS_PASSWORD", help="OBS WebSocket password"
|
|
)
|
|
theme: str = arg(
|
|
default="Reds",
|
|
parser=theme_parser,
|
|
env="OBS_THEME",
|
|
help=f"GUI theme ({', '.join(themes)})",
|
|
)
|
|
debug: bool = arg(
|
|
default=False,
|
|
env="DEBUG",
|
|
help="Enable debug logging",
|
|
hidden=True,
|
|
)
|
|
|
|
@override
|
|
async def run(self):
|
|
"""Run the Simple Recorder GUI."""
|
|
if self.debug:
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
|
|
window = SimpleRecorderWindow(self.host, self.port, self.password, self.theme)
|
|
await window.run()
|
|
|
|
|
|
def run():
|
|
"""Run the application."""
|
|
SimpleRecorder.parse().start()
|