Compare commits

...

3 Commits

Author SHA1 Message Date
4bae164124 remove trailing comma 2025-05-06 20:40:36 +01:00
9a65c0067e remove trailing comma 2025-05-06 20:38:57 +01:00
3f33af6219 write to stderr
patch bump
2025-05-06 20:36:12 +01:00
8 changed files with 59 additions and 89 deletions

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2025-present onyx-and-iris <code@onyxandiris.online>
#
# SPDX-License-Identifier: MIT
__version__ = "0.10.1"
__version__ = "0.10.2"

View File

@ -18,10 +18,7 @@ def main():
def list(ctx: typer.Context, scene_name: str):
"""List groups in a scene."""
if not validate.scene_in_scenes(ctx, scene_name):
typer.echo(
f"Scene '{scene_name}' not found.",
err=True,
)
typer.echo(f"Scene '{scene_name}' not found.", err=True)
raise typer.Exit(code=1)
resp = ctx.obj.get_scene_item_list(scene_name)
@ -48,18 +45,12 @@ def _get_group(group_name: str, resp: DataclassProtocol) -> dict | None:
def show(ctx: typer.Context, scene_name: str, group_name: str):
"""Show a group in a scene."""
if not validate.scene_in_scenes(ctx, scene_name):
typer.echo(
f"Scene '{scene_name}' not found.",
err=True,
)
typer.echo(f"Scene '{scene_name}' not found.", err=True)
raise typer.Exit(code=1)
resp = ctx.obj.get_scene_item_list(scene_name)
if (group := _get_group(group_name, resp)) is None:
typer.echo(
f"Group '{group_name}' not found in scene {scene_name}.",
err=True,
)
typer.echo(f"Group '{group_name}' not found in scene {scene_name}.", err=True)
raise typer.Exit(code=1)
ctx.obj.set_scene_item_enabled(
@ -75,18 +66,12 @@ def show(ctx: typer.Context, scene_name: str, group_name: str):
def hide(ctx: typer.Context, scene_name: str, group_name: str):
"""Hide a group in a scene."""
if not validate.scene_in_scenes(ctx, scene_name):
typer.echo(
f"Scene '{scene_name}' not found.",
err=True,
)
typer.echo(f"Scene '{scene_name}' not found.", err=True)
raise typer.Exit(code=1)
resp = ctx.obj.get_scene_item_list(scene_name)
if (group := _get_group(group_name, resp)) is None:
typer.echo(
f"Group '{group_name}' not found in scene {scene_name}.",
err=True,
)
typer.echo(f"Group '{group_name}' not found in scene {scene_name}.", err=True)
raise typer.Exit(code=1)
ctx.obj.set_scene_item_enabled(
@ -102,18 +87,12 @@ def hide(ctx: typer.Context, scene_name: str, group_name: str):
def toggle(ctx: typer.Context, scene_name: str, group_name: str):
"""Toggle a group in a scene."""
if not validate.scene_in_scenes(ctx, scene_name):
typer.echo(
f"Scene '{scene_name}' not found.",
err=True,
)
typer.echo(f"Scene '{scene_name}' not found.", err=True)
raise typer.Exit(code=1)
resp = ctx.obj.get_scene_item_list(scene_name)
if (group := _get_group(group_name, resp)) is None:
typer.echo(
f"Group '{group_name}' not found in scene {scene_name}.",
err=True,
)
typer.echo(f"Group '{group_name}' not found in scene {scene_name}.", err=True)
raise typer.Exit(code=1)
new_state = not group.get('sceneItemEnabled')
@ -133,18 +112,12 @@ def toggle(ctx: typer.Context, scene_name: str, group_name: str):
def status(ctx: typer.Context, scene_name: str, group_name: str):
"""Get the status of a group in a scene."""
if not validate.scene_in_scenes(ctx, scene_name):
typer.echo(
f"Scene '{scene_name}' not found.",
err=True,
)
typer.echo(f"Scene '{scene_name}' not found.", err=True)
raise typer.Exit(code=1)
resp = ctx.obj.get_scene_item_list(scene_name)
if (group := _get_group(group_name, resp)) is None:
typer.echo(
f"Group '{group_name}' not found in scene {scene_name}.",
err=True,
)
typer.echo(f"Group '{group_name}' not found in scene {scene_name}.", err=True)
raise typer.Exit(code=1)
enabled = ctx.obj.get_scene_item_enabled(

View File

@ -46,10 +46,7 @@ def list(
def mute(ctx: typer.Context, input_name: str):
"""Mute an input."""
if not validate.input_in_inputs(ctx, input_name):
typer.echo(
f"Input '{input_name}' not found.",
err=True,
)
typer.echo(f"Input '{input_name}' not found.", err=True)
raise typer.Exit(code=1)
ctx.obj.set_input_mute(
@ -64,10 +61,7 @@ def mute(ctx: typer.Context, input_name: str):
def unmute(ctx: typer.Context, input_name: str):
"""Unmute an input."""
if not validate.input_in_inputs(ctx, input_name):
typer.echo(
f"Input '{input_name}' not found.",
err=True,
)
typer.echo(f"Input '{input_name}' not found.", err=True)
raise typer.Exit(code=1)
ctx.obj.set_input_mute(
@ -82,10 +76,7 @@ def unmute(ctx: typer.Context, input_name: str):
def toggle(ctx: typer.Context, input_name: str):
"""Toggle an input."""
if not validate.input_in_inputs(ctx, input_name):
typer.echo(
f"Input '{input_name}' not found.",
err=True,
)
typer.echo(f"Input '{input_name}' not found.", err=True)
raise typer.Exit(code=1)
# Get the current mute state

View File

@ -32,17 +32,13 @@ def current(ctx: typer.Context):
def switch(ctx: typer.Context, profile_name: str):
"""Switch to a profile."""
if not validate.profile_exists(ctx, profile_name):
typer.echo(
f"Profile '{profile_name}' not found.",
err=True,
)
typer.echo(f"Profile '{profile_name}' not found.", err=True)
raise typer.Exit(code=1)
resp = ctx.obj.get_profile_list()
if resp.current_profile_name == profile_name:
typer.echo(
f"Profile '{profile_name}' is already the current profile.",
err=True,
f"Profile '{profile_name}' is already the current profile.", err=True
)
raise typer.Exit(code=1)
@ -54,10 +50,7 @@ def switch(ctx: typer.Context, profile_name: str):
def create(ctx: typer.Context, profile_name: str):
"""Create a new profile."""
if validate.profile_exists(ctx, profile_name):
typer.echo(
f"Profile '{profile_name}' already exists.",
err=True,
)
typer.echo(f"Profile '{profile_name}' already exists.", err=True)
raise typer.Exit(code=1)
ctx.obj.create_profile(profile_name)
@ -68,10 +61,7 @@ def create(ctx: typer.Context, profile_name: str):
def remove(ctx: typer.Context, profile_name: str):
"""Remove a profile."""
if not validate.profile_exists(ctx, profile_name):
typer.echo(
f"Profile '{profile_name}' not found.",
err=True,
)
typer.echo(f"Profile '{profile_name}' not found.", err=True)
raise typer.Exit(code=1)
ctx.obj.remove_profile(profile_name)

View File

@ -27,7 +27,7 @@ def start(ctx: typer.Context):
if paused:
err_msg += ' Try resuming it.'
typer.echo(err_msg)
typer.echo(err_msg, err=True)
raise typer.Exit(1)
ctx.obj.start_record()
@ -39,7 +39,7 @@ def stop(ctx: typer.Context):
"""Stop recording."""
active, _ = _get_recording_status(ctx)
if not active:
typer.echo('Recording is not in progress, cannot stop.')
typer.echo('Recording is not in progress, cannot stop.', err=True)
raise typer.Exit(1)
ctx.obj.stop_record()
@ -74,10 +74,10 @@ def resume(ctx: typer.Context):
"""Resume recording."""
active, paused = _get_recording_status(ctx)
if not active:
typer.echo('Recording is not in progress, cannot resume.')
typer.echo('Recording is not in progress, cannot resume.', err=True)
raise typer.Exit(1)
if not paused:
typer.echo('Recording is in progress but not paused, cannot resume.')
typer.echo('Recording is in progress but not paused, cannot resume.', err=True)
raise typer.Exit(1)
ctx.obj.resume_record()
@ -89,10 +89,12 @@ def pause(ctx: typer.Context):
"""Pause recording."""
active, paused = _get_recording_status(ctx)
if not active:
typer.echo('Recording is not in progress, cannot pause.')
typer.echo('Recording is not in progress, cannot pause.', err=True)
raise typer.Exit(1)
if paused:
typer.echo('Recording is in progress but already paused, cannot pause.')
typer.echo(
'Recording is in progress but already paused, cannot pause.', err=True
)
raise typer.Exit(1)
ctx.obj.pause_record()

View File

@ -32,7 +32,7 @@ def current(
):
"""Get the current program scene or preview scene."""
if preview and not validate.studio_mode_enabled(ctx):
typer.echo('Studio mode is not enabled, cannot get preview scene.')
typer.echo('Studio mode is not enabled, cannot get preview scene.', err=True)
raise typer.Exit(1)
if preview:
@ -54,14 +54,13 @@ def switch(
):
"""Switch to a scene."""
if preview and not validate.studio_mode_enabled(ctx):
typer.echo('Studio mode is not enabled, cannot set the preview scene.')
typer.echo(
'Studio mode is not enabled, cannot set the preview scene.', err=True
)
raise typer.Exit(1)
if not validate.scene_in_scenes(ctx, scene_name):
typer.echo(
f"Scene '{scene_name}' not found.",
err=True,
)
typer.echo(f"Scene '{scene_name}' not found.", err=True)
raise typer.Exit(code=1)
if preview:

View File

@ -20,7 +20,7 @@ def main():
def list(ctx: typer.Context, scene_name: str):
"""List all items in a scene."""
if not validate.scene_in_scenes(ctx, scene_name):
typer.echo(f"Scene '{scene_name}' not found.")
typer.echo(f"Scene '{scene_name}' not found.", err=True)
typer.Exit(code=1)
resp = ctx.obj.get_scene_item_list(scene_name)
@ -40,18 +40,21 @@ def _validate_scene_name_and_item_name(
parent: Optional[str] = None,
):
if not validate.scene_in_scenes(ctx, scene_name):
typer.echo(f"Scene '{scene_name}' not found.")
typer.echo(f"Scene '{scene_name}' not found.", err=True)
raise typer.Exit(code=1)
if parent:
if not validate.item_in_scene_item_list(ctx, scene_name, parent):
typer.echo(
f"Parent group '{parent}' not found in scene '{scene_name}'."
f"Parent group '{parent}' not found in scene '{scene_name}'.",
err=True,
)
raise typer.Exit(code=1)
else:
if not validate.item_in_scene_item_list(ctx, scene_name, item_name):
typer.echo(f"Item '{item_name}' not found in scene '{scene_name}'.")
typer.echo(
f"Item '{item_name}' not found in scene '{scene_name}'.", err=True
)
raise typer.Exit(code=1)
return func(ctx, scene_name, item_name, parent)
@ -70,7 +73,7 @@ def _get_scene_name_and_item_id(
scene_item_id = item.get('sceneItemId')
break
else:
typer.echo(f"Item '{item_name}' not found in group '{parent}'.")
typer.echo(f"Item '{item_name}' not found in group '{parent}'.", err=True)
raise typer.Exit(code=1)
else:
resp = ctx.obj.get_scene_item_id(scene_name, item_name)
@ -138,11 +141,15 @@ def toggle(
if parent:
if not validate.item_in_scene_item_list(ctx, scene_name, parent):
typer.echo(f"Parent group '{parent}' not found in scene '{scene_name}'.")
typer.echo(
f"Parent group '{parent}' not found in scene '{scene_name}'.", err=True
)
raise typer.Exit(code=1)
else:
if not validate.item_in_scene_item_list(ctx, scene_name, item_name):
typer.echo(f"Item '{item_name}' not found in scene '{scene_name}'.")
typer.echo(
f"Item '{item_name}' not found in scene '{scene_name}'.", err=True
)
raise typer.Exit(code=1)
scene_name, scene_item_id = _get_scene_name_and_item_id(
@ -177,11 +184,15 @@ def visible(
"""Check if an item in a scene is visible."""
if parent:
if not validate.item_in_scene_item_list(ctx, scene_name, parent):
typer.echo(f"Parent group '{parent}' not found in scene '{scene_name}'.")
typer.echo(
f"Parent group '{parent}' not found in scene '{scene_name}'.", err=True
)
raise typer.Exit(code=1)
else:
if not validate.item_in_scene_item_list(ctx, scene_name, item_name):
typer.echo(f"Item '{item_name}' not found in scene '{scene_name}'.")
typer.echo(
f"Item '{item_name}' not found in scene '{scene_name}'.", err=True
)
raise typer.Exit(code=1)
old_scene_name = scene_name
@ -264,11 +275,15 @@ def transform(
"""Set the transform of an item in a scene."""
if parent:
if not validate.item_in_scene_item_list(ctx, scene_name, parent):
typer.echo(f"Parent group '{parent}' not found in scene '{scene_name}'.")
typer.echo(
f"Parent group '{parent}' not found in scene '{scene_name}'.", err=True
)
raise typer.Exit(code=1)
else:
if not validate.item_in_scene_item_list(ctx, scene_name, item_name):
typer.echo(f"Item '{item_name}' not found in scene '{scene_name}'.")
typer.echo(
f"Item '{item_name}' not found in scene '{scene_name}'.", err=True
)
raise typer.Exit(code=1)
old_scene_name = scene_name
@ -309,7 +324,7 @@ def transform(
transform['scaleY'] = scale_y
if not transform:
typer.echo('No transform options provided.')
typer.echo('No transform options provided.', err=True)
raise typer.Exit(code=1)
transform = ctx.obj.set_scene_item_transform(

View File

@ -23,7 +23,7 @@ def start(ctx: typer.Context):
"""Start streaming."""
active, _ = _get_streaming_status(ctx)
if active:
typer.echo('Streaming is already in progress, cannot start.')
typer.echo('Streaming is already in progress, cannot start.', err=True)
raise typer.Exit(code=1)
ctx.obj.start_stream()
@ -35,7 +35,7 @@ def stop(ctx: typer.Context):
"""Stop streaming."""
active, _ = _get_streaming_status(ctx)
if not active:
typer.echo('Streaming is not in progress, cannot stop.')
typer.echo('Streaming is not in progress, cannot stop.', err=True)
raise typer.Exit(code=1)
ctx.obj.stop_stream()