mirror of
https://github.com/onyx-and-iris/gobs-cli.git
synced 2025-06-10 05:30:34 +01:00
Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
d9c0e40d8f | |||
42ab45b9fb | |||
27c3c5369b | |||
0a0c75ae51 | |||
cf5da68137 | |||
14d9feb43e | |||
8204d6520d |
22
CHANGELOG.md
22
CHANGELOG.md
@ -5,13 +5,29 @@ 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/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
# [0.10.0]
|
||||
# [0.10.3] - 2025-06-07
|
||||
|
||||
### Added
|
||||
|
||||
- filter list:
|
||||
- --ffmpeg, --vlc flags
|
||||
- Muted column to list table
|
||||
|
||||
# [0.10.2] - 2025-06-04
|
||||
|
||||
### Added
|
||||
|
||||
- screenshot save command, see [ScreenshotCmd](https://github.com/onyx-and-iris/gobs-cli?tab=readme-ov-file#screenshotcmd)
|
||||
|
||||
# [0.9.0]
|
||||
### Fixed
|
||||
|
||||
- filter list:
|
||||
- sourceName arg now defaults to current scene.
|
||||
- defaults are printed for any unmodified values.
|
||||
- sceneitem list:
|
||||
- prints enabled mark instead of true/false
|
||||
|
||||
# [0.9.0] - 2025-06-02
|
||||
|
||||
### Added
|
||||
|
||||
@ -21,7 +37,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
- version command renamed to obs-version
|
||||
|
||||
# [0.8.2]
|
||||
# [0.8.2] - 2025-05-29
|
||||
|
||||
### Added
|
||||
|
||||
|
10
README.md
10
README.md
@ -223,6 +223,8 @@ gobs-cli group status START "test_group"
|
||||
- --input: List all inputs.
|
||||
- --output: List all outputs.
|
||||
- --colour: List all colour sources.
|
||||
- --ffmpeg: List all ffmpeg sources.
|
||||
- --vlc: List all VLC sources.
|
||||
|
||||
```console
|
||||
gobs-cli input list
|
||||
@ -513,6 +515,10 @@ gobs-cli hotkey trigger-sequence OBS_KEY_F1 --shift --ctrl
|
||||
|
||||
- list: List all filters.
|
||||
|
||||
*optional*
|
||||
- args: SourceName
|
||||
- defaults to current scene
|
||||
|
||||
```console
|
||||
gobs-cli filter list
|
||||
```
|
||||
@ -561,7 +567,7 @@ gobs-cli projector list-monitors
|
||||
- defaults to 0
|
||||
|
||||
*optional*
|
||||
- args: <source_name>
|
||||
- args: SourceName
|
||||
- defaults to current scene
|
||||
|
||||
```console
|
||||
@ -585,7 +591,7 @@ gobs-cli projector open --monitor-index=1 "test_group"
|
||||
- --quality:
|
||||
- defaults to -1
|
||||
|
||||
- args: <source_name> <output_path>
|
||||
- args: SourceName FilePath
|
||||
|
||||
```console
|
||||
gobs-cli screenshot save --width=2560 --height=1440 "Scene" "C:\Users\me\Videos\screenshot.png"
|
||||
|
31
filter.go
31
filter.go
@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"maps"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
@ -20,19 +21,27 @@ type FilterCmd struct {
|
||||
|
||||
// FilterListCmd provides a command to list all filters in a scene.
|
||||
type FilterListCmd struct {
|
||||
SourceName string `arg:"" help:"Name of the source to list filters from."`
|
||||
SourceName string `arg:"" help:"Name of the source to list filters from." default:""`
|
||||
}
|
||||
|
||||
// Run executes the command to list all filters in a scene.
|
||||
func (cmd *FilterListCmd) Run(ctx *context) error {
|
||||
filters, err := ctx.Client.Filters.GetSourceFilterList(
|
||||
if cmd.SourceName == "" {
|
||||
currentScene, err := ctx.Client.Scenes.GetCurrentProgramScene()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get current program scene: %w", err)
|
||||
}
|
||||
cmd.SourceName = currentScene.SceneName
|
||||
}
|
||||
|
||||
sourceFilters, err := ctx.Client.Filters.GetSourceFilterList(
|
||||
filters.NewGetSourceFilterListParams().WithSourceName(cmd.SourceName),
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if len(filters.Filters) == 0 {
|
||||
if len(sourceFilters.Filters) == 0 {
|
||||
fmt.Fprintf(ctx.Out, "No filters found for source %s.\n", cmd.SourceName)
|
||||
return nil
|
||||
}
|
||||
@ -42,10 +51,20 @@ func (cmd *FilterListCmd) Run(ctx *context) error {
|
||||
t.SetAlignment(table.AlignLeft, table.AlignLeft, table.AlignCenter, table.AlignLeft)
|
||||
t.SetHeaders("Filter Name", "Kind", "Enabled", "Settings")
|
||||
|
||||
for _, filter := range filters.Filters {
|
||||
for _, filter := range sourceFilters.Filters {
|
||||
defaultSettings, err := ctx.Client.Filters.GetSourceFilterDefaultSettings(
|
||||
filters.NewGetSourceFilterDefaultSettingsParams().
|
||||
WithFilterKind(filter.FilterKind),
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get default settings for filter %s: %w",
|
||||
filter.FilterName, err)
|
||||
}
|
||||
maps.Insert(defaultSettings.DefaultFilterSettings, maps.All(filter.FilterSettings))
|
||||
|
||||
var lines []string
|
||||
for k, v := range filter.FilterSettings {
|
||||
lines = append(lines, fmt.Sprintf("%s %v", k, v))
|
||||
for k, v := range defaultSettings.DefaultFilterSettings {
|
||||
lines = append(lines, fmt.Sprintf("%s: %v", snakeCaseToTitleCase(k), v))
|
||||
}
|
||||
sort.Slice(lines, func(i, j int) bool {
|
||||
return strings.ToLower(lines[i]) < strings.ToLower(lines[j])
|
||||
|
47
input.go
47
input.go
@ -21,6 +21,8 @@ type InputListCmd struct {
|
||||
Input bool `flag:"" help:"List all inputs." aliases:"i"`
|
||||
Output bool `flag:"" help:"List all outputs." aliases:"o"`
|
||||
Colour bool `flag:"" help:"List all colour sources." aliases:"c"`
|
||||
Ffmpeg bool `flag:"" help:"List all ffmpeg sources." aliases:"f"`
|
||||
Vlc bool `flag:"" help:"List all VLC sources." aliases:"v"`
|
||||
}
|
||||
|
||||
// Run executes the command to list all inputs.
|
||||
@ -32,22 +34,47 @@ func (cmd *InputListCmd) Run(ctx *context) error {
|
||||
|
||||
t := table.New(ctx.Out)
|
||||
t.SetPadding(3)
|
||||
t.SetAlignment(table.AlignLeft, table.AlignLeft)
|
||||
t.SetHeaders("Input Name", "Kind")
|
||||
t.SetAlignment(table.AlignLeft, table.AlignLeft, table.AlignCenter)
|
||||
t.SetHeaders("Input Name", "Kind", "Muted")
|
||||
|
||||
for _, input := range resp.Inputs {
|
||||
if cmd.Input && strings.Contains(input.InputKind, "input") {
|
||||
t.AddRow(input.InputName, input.InputKind)
|
||||
var muteMark string
|
||||
for _, kind := range []string{"input", "output", "ffmpeg", "vlc"} {
|
||||
if strings.Contains(input.InputKind, kind) {
|
||||
resp, err := ctx.Client.Inputs.GetInputMute(
|
||||
inputs.NewGetInputMuteParams().WithInputName(input.InputName),
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get input mute state: %w", err)
|
||||
}
|
||||
if cmd.Output && strings.Contains(input.InputKind, "output") {
|
||||
t.AddRow(input.InputName, input.InputKind)
|
||||
muteMark = getEnabledMark(resp.InputMuted)
|
||||
break
|
||||
}
|
||||
if cmd.Colour && strings.Contains(input.InputKind, "color") { // nolint
|
||||
t.AddRow(input.InputName, input.InputKind)
|
||||
}
|
||||
|
||||
if !cmd.Input && !cmd.Output && !cmd.Colour {
|
||||
t.AddRow(input.InputName, input.InputKind)
|
||||
type filter struct {
|
||||
enabled bool
|
||||
keyword string
|
||||
}
|
||||
filters := []filter{
|
||||
{cmd.Input, "input"},
|
||||
{cmd.Output, "output"},
|
||||
{cmd.Colour, "color"}, // nolint: misspell
|
||||
{cmd.Ffmpeg, "ffmpeg"},
|
||||
{cmd.Vlc, "vlc"},
|
||||
}
|
||||
|
||||
var added bool
|
||||
for _, f := range filters {
|
||||
if f.enabled && strings.Contains(input.InputKind, f.keyword) {
|
||||
t.AddRow(input.InputName, input.InputKind, muteMark)
|
||||
added = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if !added && (!cmd.Input && !cmd.Output && !cmd.Colour && !cmd.Ffmpeg && !cmd.Vlc) {
|
||||
t.AddRow(input.InputName, input.InputKind, muteMark)
|
||||
}
|
||||
}
|
||||
t.Render()
|
||||
|
@ -71,11 +71,11 @@ func (cmd *SceneItemListCmd) Run(ctx *context) error {
|
||||
fmt.Sprintf("%d", groupItem.SceneItemID),
|
||||
groupItem.SourceName,
|
||||
item.SourceName,
|
||||
fmt.Sprintf("%t", item.SceneItemEnabled && groupItem.SceneItemEnabled),
|
||||
getEnabledMark(item.SceneItemEnabled && groupItem.SceneItemEnabled),
|
||||
)
|
||||
}
|
||||
} else {
|
||||
t.AddRow(fmt.Sprintf("%d", item.SceneItemID), item.SourceName, "", fmt.Sprintf("%t", item.SceneItemEnabled))
|
||||
t.AddRow(fmt.Sprintf("%d", item.SceneItemID), item.SourceName, "", getEnabledMark(item.SceneItemEnabled))
|
||||
}
|
||||
}
|
||||
t.Render()
|
||||
|
Loading…
x
Reference in New Issue
Block a user