vban-cli/src/vban_cli/gainlayer.py

48 lines
1.5 KiB
Python

from typing import Annotated, Optional
from cyclopts import App, Argument, Parameter
from .context import Context
from .help import GainlayerHelpFormatter
app = App(name='gainlayer', help_formatter=GainlayerHelpFormatter())
@app.meta.default
def launcher(
gainlayer_index: Annotated[int, Argument()],
/,
*tokens: Annotated[str, Parameter(show=False, allow_leading_hyphen=True)],
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Control the gainlayers."""
additional_kwargs = {}
command, bound, _ = app.parse_args(tokens)
additional_kwargs['strip_index'] = index
additional_kwargs['gainlayer_index'] = gainlayer_index
additional_kwargs['ctx'] = ctx
return command(*bound.args, **bound.kwargs, **additional_kwargs)
@app.command(name='level')
def level(
new_level: Annotated[Optional[float], Argument()] = None,
*,
strip_index: Annotated[int, Parameter(parse=False)],
gainlayer_index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the level of the specified gainlayer.
Parameters
----------
new_level : float, optional
If provided, sets the level to this value. If not provided, the current level is printed.
"""
if new_level is None:
app.console.print(ctx.client.strip[strip_index].gainlayer[gainlayer_index].gain)
return
ctx.client.strip[strip_index].gainlayer[gainlayer_index].gain = new_level