mirror of
https://github.com/onyx-and-iris/vban-cli.git
synced 2026-03-12 01:49:11 +00:00
136 lines
3.4 KiB
Python
136 lines
3.4 KiB
Python
from pathlib import Path
|
|
from typing import Annotated
|
|
|
|
from cyclopts import App, Parameter, validators
|
|
|
|
from . import validation
|
|
from .context import Context
|
|
from .help import BaseHelpFormatter
|
|
|
|
app = App(
|
|
name='recorder',
|
|
help='Control the recorder playback and recording',
|
|
help_formatter=BaseHelpFormatter(),
|
|
)
|
|
|
|
|
|
@app.command(name='play')
|
|
def play(
|
|
*,
|
|
ctx: Annotated[Context, Parameter(parse=False)],
|
|
):
|
|
"""Start the recorder playback."""
|
|
ctx.client.recorder.play()
|
|
app.console.print('Recorder playback started.')
|
|
|
|
|
|
@app.command(name='pause')
|
|
def pause(
|
|
*,
|
|
ctx: Annotated[Context, Parameter(parse=False)],
|
|
):
|
|
"""Pause the recorder playback."""
|
|
ctx.client.recorder.stop()
|
|
app.console.print('Recorder playback paused.')
|
|
|
|
|
|
@app.command(name='stop')
|
|
def stop(
|
|
*,
|
|
ctx: Annotated[Context, Parameter(parse=False)],
|
|
):
|
|
"""Stop the recorder playback/recording and reset to the beginning."""
|
|
ctx.client.recorder.stop()
|
|
ctx.client.recorder.goto('00:00:00')
|
|
# We have no way of knowing if the recorder was playing or recording, so we print a generic message.
|
|
# See https://github.com/onyx-and-iris/vban-cli?tab=readme-ov-file#implementation-notes - 4.
|
|
app.console.print('Recorder stopped.')
|
|
|
|
|
|
@app.command(name='replay')
|
|
def replay(
|
|
*,
|
|
ctx: Annotated[Context, Parameter(parse=False)],
|
|
):
|
|
"""Replay the recorder playback."""
|
|
ctx.client.recorder.replay()
|
|
app.console.print('Recorder playback replay started.')
|
|
|
|
|
|
@app.command(name='record')
|
|
def record(
|
|
*,
|
|
ctx: Annotated[Context, Parameter(parse=False)],
|
|
):
|
|
"""Start recording."""
|
|
ctx.client.recorder.record()
|
|
app.console.print('Recorder recording started.')
|
|
|
|
|
|
@app.command(name='pause-recording')
|
|
def pause_recording(
|
|
*,
|
|
ctx: Annotated[Context, Parameter(parse=False)],
|
|
):
|
|
"""Pause the recorder recording."""
|
|
ctx.client.recorder.pause()
|
|
app.console.print('Recorder recording paused.')
|
|
|
|
|
|
@app.command(name='ff')
|
|
def ff(
|
|
*,
|
|
ctx: Annotated[Context, Parameter(parse=False)],
|
|
):
|
|
"""Fast forward the recorder playback."""
|
|
ctx.client.recorder.ff()
|
|
app.console.print('Recorder playback fast forwarded.')
|
|
|
|
|
|
@app.command(name='rew')
|
|
def rew(
|
|
*,
|
|
ctx: Annotated[Context, Parameter(parse=False)],
|
|
):
|
|
"""Rewind the recorder playback."""
|
|
ctx.client.recorder.rew()
|
|
app.console.print('Recorder playback rewound.')
|
|
|
|
|
|
@app.command(name='load')
|
|
def load(
|
|
file_path: Annotated[
|
|
Path,
|
|
Parameter(
|
|
help='The path to the recording file to load.',
|
|
validator=validators.Path(exists=True),
|
|
),
|
|
],
|
|
/,
|
|
*,
|
|
ctx: Annotated[Context, Parameter(parse=False)],
|
|
):
|
|
"""Load a file into the recorder.
|
|
|
|
note: This command may only work if vban-cli is running on localhost and may not work if vban-cli is running on a remote server."""
|
|
ctx.client.recorder.load(file_path)
|
|
app.console.print(f'Loaded file: {file_path}')
|
|
|
|
|
|
@app.command(name='goto')
|
|
def goto(
|
|
time_string: Annotated[
|
|
str,
|
|
Parameter(
|
|
help='The timestamp to go to in the recorder playback (format: HH:MM:SS).',
|
|
validator=validation.is_valid_time_string,
|
|
),
|
|
],
|
|
/,
|
|
*,
|
|
ctx: Annotated[Context, Parameter(parse=False)],
|
|
):
|
|
"""Go to a specific timestamp in the recorder playback."""
|
|
ctx.client.recorder.goto(time_string)
|
|
app.console.print(f'Went to timestamp {time_string} in recorder playback.')
|