Compare commits

..

No commits in common. "23282a60d1503ea27d92f1e451967feff2c150e2" and "bff5d396a4c4d65431967e21ec005619db9f32b1" have entirely different histories.

10 changed files with 24 additions and 37 deletions

View File

@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
# [0.17.3] - 2025-06-20 # [0.17.0] - 2025-06-20
### Added ### Added
@ -15,7 +15,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed ### Changed
- scene list no longer prints the UUIDs by default, enable it with the --uuid flag. - scene list no longer prints the UUIDs by default, enable it with the --uuid flag.
- if NO_COLOR is set, print colourless check and cross marks in tables.
### Fixed ### Fixed

View File

@ -615,11 +615,7 @@ obsws-cli screenshot save --width=2560 --height=1440 "Scene" "C:\Users\me\Videos
## Disable Colouring ## Disable Colouring
If you prefer colourless output you can set the environment variable `NO_COLOR`, see [NO_COLOR][no-colour]. If you prefer colourless output you can set the environment variable `NO_COLOR`. See the [rich documentation][rich-doc-envvars]
```console
NO_COLOR="1" obsws-cli scene list
```
## License ## License
@ -628,4 +624,4 @@ NO_COLOR="1" obsws-cli scene list
[obs-studio]: https://obsproject.com/ [obs-studio]: https://obsproject.com/
[obs-keyids]: https://github.com/obsproject/obs-studio/blob/master/libobs/obs-hotkeys.h [obs-keyids]: https://github.com/obsproject/obs-studio/blob/master/libobs/obs-hotkeys.h
[no-colour]: https://no-color.org/ [rich-doc-envvars]: https://rich.readthedocs.io/en/stable/console.html#environment-variables

View File

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

View File

@ -65,7 +65,7 @@ def list_(
table.add_row( table.add_row(
filter['filterName'], filter['filterName'],
util.snakecase_to_titlecase(filter['filterKind']), util.snakecase_to_titlecase(filter['filterKind']),
util.check_mark(filter['filterEnabled']), ':white_heavy_check_mark:' if filter['filterEnabled'] else ':x:',
'\n'.join( '\n'.join(
[ [
f'{util.snakecase_to_titlecase(k):<20} {v:>10}' f'{util.snakecase_to_titlecase(k):<20} {v:>10}'

View File

@ -5,7 +5,7 @@ from typing import Annotated, Optional
import typer import typer
from rich.table import Table from rich.table import Table
from . import console, util, validate from . import console, validate
from .alias import AliasGroup from .alias import AliasGroup
from .protocols import DataclassProtocol from .protocols import DataclassProtocol
@ -61,7 +61,7 @@ def list_(
table.add_row( table.add_row(
str(item_id), str(item_id),
group_name, group_name,
util.check_mark(is_enabled), ':white_heavy_check_mark:' if is_enabled else ':x:',
) )
console.out.print(table) console.out.print(table)

View File

@ -81,7 +81,7 @@ def list_(
input_mark = '' input_mark = ''
try: try:
input_muted = ctx.obj.get_input_mute(name=input_name).input_muted input_muted = ctx.obj.get_input_mute(name=input_name).input_muted
input_mark = util.check_mark(input_muted) input_mark = ':white_heavy_check_mark:' if input_muted else ':x:'
except obsws.error.OBSSDKRequestError as e: except obsws.error.OBSSDKRequestError as e:
if e.code == 604: # Input does not support audio if e.code == 604: # Input does not support audio
input_mark = 'N/A' input_mark = 'N/A'

View File

@ -5,7 +5,7 @@ from typing import Annotated
import typer import typer
from rich.table import Table from rich.table import Table
from . import console, util, validate from . import console, validate
from .alias import AliasGroup from .alias import AliasGroup
app = typer.Typer(cls=AliasGroup) app = typer.Typer(cls=AliasGroup)
@ -32,7 +32,7 @@ def list_(ctx: typer.Context):
for profile in resp.profiles: for profile in resp.profiles:
table.add_row( table.add_row(
profile, profile,
util.check_mark(profile == resp.current_profile_name, empty_if_false=True), ':white_heavy_check_mark:' if profile == resp.current_profile_name else '',
) )
console.out.print(table) console.out.print(table)

View File

@ -5,7 +5,7 @@ from typing import Annotated
import typer import typer
from rich.table import Table from rich.table import Table
from . import console, util, validate from . import console, validate
from .alias import AliasGroup from .alias import AliasGroup
app = typer.Typer(cls=AliasGroup) app = typer.Typer(cls=AliasGroup)
@ -48,20 +48,20 @@ def list_(
for scene_name, scene_uuid in scenes: for scene_name, scene_uuid in scenes:
if scene_name == active_scene: if scene_name == active_scene:
scene_output = f'[bold]{scene_name}[/bold]' scene_output = f'[bold green]{scene_name}[/bold green]'
else: else:
scene_output = f'[dim]{scene_name}[/dim]' scene_output = f'[dim]{scene_name}[/dim]'
if uuid: if uuid:
table.add_row( table.add_row(
scene_output, scene_output,
util.check_mark(scene_name == active_scene, empty_if_false=True), ':white_heavy_check_mark:' if scene_name == active_scene else '',
scene_uuid, scene_uuid,
) )
else: else:
table.add_row( table.add_row(
scene_output, scene_output,
util.check_mark(scene_name == active_scene, empty_if_false=True), ':white_heavy_check_mark:' if scene_name == active_scene else '',
) )
console.out.print(table) console.out.print(table)

View File

@ -5,7 +5,7 @@ from typing import Annotated, Optional
import typer import typer
from rich.table import Table from rich.table import Table
from . import console, util, validate from . import console, validate
from .alias import AliasGroup from .alias import AliasGroup
app = typer.Typer(cls=AliasGroup) app = typer.Typer(cls=AliasGroup)
@ -102,7 +102,9 @@ def list_(
str(group_item_id), str(group_item_id),
group_item_name, group_item_name,
item_name, item_name,
util.check_mark(is_enabled and group_item_enabled), ':white_heavy_check_mark:'
if is_enabled and group_item_enabled
else ':x:',
group_item_source_uuid, group_item_source_uuid,
) )
else: else:
@ -110,7 +112,9 @@ def list_(
str(group_item_id), str(group_item_id),
group_item_name, group_item_name,
item_name, item_name,
util.check_mark(is_enabled and group_item_enabled), ':white_heavy_check_mark:'
if is_enabled and group_item_enabled
else ':x:',
) )
else: else:
if uuid: if uuid:
@ -118,7 +122,7 @@ def list_(
str(item_id), str(item_id),
item_name, item_name,
'', '',
util.check_mark(is_enabled), ':white_heavy_check_mark:' if is_enabled else ':x:',
source_uuid, source_uuid,
) )
else: else:
@ -126,7 +130,7 @@ def list_(
str(item_id), str(item_id),
item_name, item_name,
'', '',
util.check_mark(is_enabled), ':white_heavy_check_mark:' if is_enabled else ':x:',
) )
console.out.print(table) console.out.print(table)

View File

@ -1,18 +1,6 @@
"""module contains utility functions for the obsws_cli package.""" """module contains utility functions for the obsws_cli package."""
import os
def snakecase_to_titlecase(snake_str):
def snakecase_to_titlecase(snake_str: str) -> str:
"""Convert a snake_case string to a title case string.""" """Convert a snake_case string to a title case string."""
return snake_str.replace('_', ' ').title() return snake_str.replace('_', ' ').title()
def check_mark(value: bool, empty_if_false: bool = False) -> str:
"""Return a check mark or cross mark based on the boolean value."""
if empty_if_false and not value:
return ''
if os.getenv('NO_COLOR', '') != '':
return '' if value else ''
return '' if value else ''