mirror of
https://github.com/onyx-and-iris/gobs-cli.git
synced 2025-06-09 21:20:34 +01:00
add filter commands
upd README, CHANGELOG
This commit is contained in:
parent
da010d67a0
commit
90aa5d4423
@ -5,6 +5,12 @@ 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.6.0] - 2025-05-25
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- filter commands, see [Filter](https://github.com/onyx-and-iris/gobs-cli?tab=readme-ov-file#filter)
|
||||||
|
|
||||||
# [0.5.0] - 2025-05-22
|
# [0.5.0] - 2025-05-22
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
37
README.md
37
README.md
@ -477,5 +477,42 @@ gobs-cli hotkey trigger-sequence OBS_KEY_F1 --ctrl
|
|||||||
gobs-cli hotkey trigger-sequence OBS_KEY_F1 --shift --ctrl
|
gobs-cli hotkey trigger-sequence OBS_KEY_F1 --shift --ctrl
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### FilterCmd
|
||||||
|
|
||||||
|
- list: List all filters.
|
||||||
|
|
||||||
|
```console
|
||||||
|
gobs-cli filter list
|
||||||
|
```
|
||||||
|
|
||||||
|
- enable: Enable filter.
|
||||||
|
- args: SourceName FilterName
|
||||||
|
|
||||||
|
```console
|
||||||
|
gobs-cli enable 'Mic/Aux' 'Gain'
|
||||||
|
```
|
||||||
|
|
||||||
|
- disable: Disable filter.
|
||||||
|
- args: SourceName FilterName
|
||||||
|
|
||||||
|
```console
|
||||||
|
gobs-cli disable 'Mic/Aux' 'Gain'
|
||||||
|
```
|
||||||
|
|
||||||
|
- toggle: Toggle filter.
|
||||||
|
- args: SourceName FilterName
|
||||||
|
|
||||||
|
```console
|
||||||
|
gobs-cli toggle 'Mic/Aux' 'Gain'
|
||||||
|
```
|
||||||
|
|
||||||
|
- status: Get filter status.
|
||||||
|
- args: SourceName FilterName
|
||||||
|
|
||||||
|
```console
|
||||||
|
gobs-cli status 'Mic/Aux' 'Gain'
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
[userconfigdir]: https://pkg.go.dev/os#UserConfigDir
|
[userconfigdir]: https://pkg.go.dev/os#UserConfigDir
|
||||||
[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
|
149
filter.go
Normal file
149
filter.go
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/andreykaipov/goobs/api/requests/filters"
|
||||||
|
)
|
||||||
|
|
||||||
|
// FilterCmd provides commands to manage filters in OBS Studio.
|
||||||
|
type FilterCmd struct {
|
||||||
|
List FilterListCmd `cmd:"" help:"List all filters." aliases:"ls"`
|
||||||
|
Enable FilterEnableCmd `cmd:"" help:"Enable filter." aliases:"on"`
|
||||||
|
Disable FilterDisableCmd `cmd:"" help:"Disable filter." aliases:"off"`
|
||||||
|
Toggle FilterToggleCmd `cmd:"" help:"Toggle filter." aliases:"tg"`
|
||||||
|
Status FilterStatusCmd `cmd:"" help:"Get filter status." aliases:"ss"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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."`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run executes the command to list all filters in a scene.
|
||||||
|
func (cmd *FilterListCmd) Run(ctx *context) error {
|
||||||
|
filters, err := ctx.Client.Filters.GetSourceFilterList(
|
||||||
|
filters.NewGetSourceFilterListParams().WithSourceName(cmd.SourceName),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, filter := range filters.Filters {
|
||||||
|
fmt.Fprintf(ctx.Out, "Name: %s\n Kind: %s\n Enabled: %t\n Settings: %+v\n",
|
||||||
|
filter.FilterName, filter.FilterKind, filter.FilterEnabled, filter.FilterSettings)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// FilterEnableCmd provides a command to enable a filter in a scene.
|
||||||
|
type FilterEnableCmd struct {
|
||||||
|
SourceName string `arg:"" help:"Name of the source to enable filter from."`
|
||||||
|
FilterName string `arg:"" help:"Name of the filter to enable."`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run executes the command to enable a filter in a scene.
|
||||||
|
func (cmd *FilterEnableCmd) Run(ctx *context) error {
|
||||||
|
_, err := ctx.Client.Filters.SetSourceFilterEnabled(
|
||||||
|
filters.NewSetSourceFilterEnabledParams().
|
||||||
|
WithSourceName(cmd.SourceName).
|
||||||
|
WithFilterName(cmd.FilterName).
|
||||||
|
WithFilterEnabled(true),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to enable filter %s on source %s: %w",
|
||||||
|
cmd.FilterName, cmd.SourceName, err)
|
||||||
|
}
|
||||||
|
fmt.Fprintf(ctx.Out, "Filter %s enabled on source %s.\n",
|
||||||
|
cmd.FilterName, cmd.SourceName)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// FilterDisableCmd provides a command to disable a filter in a scene.
|
||||||
|
type FilterDisableCmd struct {
|
||||||
|
SourceName string `arg:"" help:"Name of the source to disable filter from."`
|
||||||
|
FilterName string `arg:"" help:"Name of the filter to disable."`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run executes the command to disable a filter in a scene.
|
||||||
|
func (cmd *FilterDisableCmd) Run(ctx *context) error {
|
||||||
|
_, err := ctx.Client.Filters.SetSourceFilterEnabled(
|
||||||
|
filters.NewSetSourceFilterEnabledParams().
|
||||||
|
WithSourceName(cmd.SourceName).
|
||||||
|
WithFilterName(cmd.FilterName).
|
||||||
|
WithFilterEnabled(false),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to disable filter %s on source %s: %w",
|
||||||
|
cmd.FilterName, cmd.SourceName, err)
|
||||||
|
}
|
||||||
|
fmt.Fprintf(ctx.Out, "Filter %s disabled on source %s.\n",
|
||||||
|
cmd.FilterName, cmd.SourceName)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// FilterToggleCmd provides a command to toggle a filter in a scene.
|
||||||
|
type FilterToggleCmd struct {
|
||||||
|
SourceName string `arg:"" help:"Name of the source to toggle filter from."`
|
||||||
|
FilterName string `arg:"" help:"Name of the filter to toggle."`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run executes the command to toggle a filter in a scene.
|
||||||
|
func (cmd *FilterToggleCmd) Run(ctx *context) error {
|
||||||
|
filter, err := ctx.Client.Filters.GetSourceFilter(
|
||||||
|
filters.NewGetSourceFilterParams().
|
||||||
|
WithSourceName(cmd.SourceName).
|
||||||
|
WithFilterName(cmd.FilterName),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to get filter %s on source %s: %w",
|
||||||
|
cmd.FilterName, cmd.SourceName, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
newStatus := !filter.FilterEnabled
|
||||||
|
_, err = ctx.Client.Filters.SetSourceFilterEnabled(
|
||||||
|
filters.NewSetSourceFilterEnabledParams().
|
||||||
|
WithSourceName(cmd.SourceName).
|
||||||
|
WithFilterName(cmd.FilterName).
|
||||||
|
WithFilterEnabled(newStatus),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to toggle filter %s on source %s: %w",
|
||||||
|
cmd.FilterName, cmd.SourceName, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if newStatus {
|
||||||
|
fmt.Fprintf(ctx.Out, "Filter %s on source %s is now enabled.\n",
|
||||||
|
cmd.FilterName, cmd.SourceName)
|
||||||
|
} else {
|
||||||
|
fmt.Fprintf(ctx.Out, "Filter %s on source %s is now disabled.\n",
|
||||||
|
cmd.FilterName, cmd.SourceName)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// FilterStatusCmd provides a command to get the status of a filter in a scene.
|
||||||
|
type FilterStatusCmd struct {
|
||||||
|
SourceName string `arg:"" help:"Name of the source to get filter status from."`
|
||||||
|
FilterName string `arg:"" help:"Name of the filter to get status."`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run executes the command to get the status of a filter in a scene.
|
||||||
|
func (cmd *FilterStatusCmd) Run(ctx *context) error {
|
||||||
|
filter, err := ctx.Client.Filters.GetSourceFilter(
|
||||||
|
filters.NewGetSourceFilterParams().
|
||||||
|
WithSourceName(cmd.SourceName).
|
||||||
|
WithFilterName(cmd.FilterName),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to get status of filter %s on source %s: %w",
|
||||||
|
cmd.FilterName, cmd.SourceName, err)
|
||||||
|
}
|
||||||
|
if filter.FilterEnabled {
|
||||||
|
fmt.Fprintf(ctx.Out, "Filter %s on source %s is enabled.\n",
|
||||||
|
cmd.FilterName, cmd.SourceName)
|
||||||
|
} else {
|
||||||
|
fmt.Fprintf(ctx.Out, "Filter %s on source %s is disabled.\n",
|
||||||
|
cmd.FilterName, cmd.SourceName)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
1
main.go
1
main.go
@ -44,6 +44,7 @@ type CLI struct {
|
|||||||
Studiomode StudioModeCmd `help:"Manage studio mode." cmd:"" aliases:"sm"`
|
Studiomode StudioModeCmd `help:"Manage studio mode." cmd:"" aliases:"sm"`
|
||||||
Virtualcam VirtualCamCmd `help:"Manage virtual camera." cmd:"" aliases:"vc"`
|
Virtualcam VirtualCamCmd `help:"Manage virtual camera." cmd:"" aliases:"vc"`
|
||||||
Hotkey HotkeyCmd `help:"Manage hotkeys." cmd:"" aliases:"hk"`
|
Hotkey HotkeyCmd `help:"Manage hotkeys." cmd:"" aliases:"hk"`
|
||||||
|
Filter FilterCmd `help:"Manage filters." cmd:"" aliases:"f"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type context struct {
|
type context struct {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user