mirror of
https://github.com/onyx-and-iris/gobs-cli.git
synced 2025-04-26 13:23:45 +01:00
115 lines
3.4 KiB
Go
115 lines
3.4 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/andreykaipov/goobs/api/requests/inputs"
|
|
)
|
|
|
|
// InputCmd provides commands to manage inputs in OBS Studio.
|
|
type InputCmd struct {
|
|
List InputListCmd `cmd:"" help:"List all inputs." aliases:"ls"`
|
|
Mute InputMuteCmd `cmd:"" help:"Mute input." aliases:"m"`
|
|
Unmute InputUnmuteCmd `cmd:"" help:"Unmute input." aliases:"um"`
|
|
Toggle InputToggleCmd `cmd:"" help:"Toggle input." aliases:"tg"`
|
|
}
|
|
|
|
// InputListCmd provides a command to list all inputs.
|
|
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"`
|
|
}
|
|
|
|
// Run executes the command to list all inputs.
|
|
func (cmd *InputListCmd) Run(ctx *context) error {
|
|
resp, err := ctx.Client.Inputs.GetInputList(inputs.NewGetInputListParams())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for _, input := range resp.Inputs {
|
|
if cmd.Input && strings.Contains(input.InputKind, "input") {
|
|
fmt.Fprintln(ctx.Out, "Input:", input.InputName)
|
|
}
|
|
if cmd.Output && strings.Contains(input.InputKind, "output") {
|
|
fmt.Fprintln(ctx.Out, "Output:", input.InputName)
|
|
}
|
|
if cmd.Colour && strings.Contains(input.InputKind, "color") { // nolint
|
|
fmt.Fprintln(ctx.Out, "Colour Source:", input.InputName)
|
|
}
|
|
|
|
if !cmd.Input && !cmd.Output && !cmd.Colour {
|
|
fmt.Fprintln(ctx.Out, "Source:", input.InputName)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// InputMuteCmd provides a command to mute an input.
|
|
type InputMuteCmd struct {
|
|
InputName string `arg:"" help:"Name of the input to mute."`
|
|
}
|
|
|
|
// Run executes the command to mute an input.
|
|
func (cmd *InputMuteCmd) Run(ctx *context) error {
|
|
_, err := ctx.Client.Inputs.SetInputMute(
|
|
inputs.NewSetInputMuteParams().WithInputName(cmd.InputName).WithInputMuted(true),
|
|
)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to mute input: %w", err)
|
|
}
|
|
|
|
fmt.Fprintf(ctx.Out, "Muted input: %s\n", cmd.InputName)
|
|
return nil
|
|
}
|
|
|
|
// InputUnmuteCmd provides a command to unmute an input.
|
|
type InputUnmuteCmd struct {
|
|
InputName string `arg:"" help:"Name of the input to unmute."`
|
|
}
|
|
|
|
// Run executes the command to unmute an input.
|
|
func (cmd *InputUnmuteCmd) Run(ctx *context) error {
|
|
_, err := ctx.Client.Inputs.SetInputMute(
|
|
inputs.NewSetInputMuteParams().WithInputName(cmd.InputName).WithInputMuted(false),
|
|
)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to unmute input: %w", err)
|
|
}
|
|
|
|
fmt.Fprintf(ctx.Out, "Unmuted input: %s\n", cmd.InputName)
|
|
return nil
|
|
}
|
|
|
|
// InputToggleCmd provides a command to toggle the mute state of an input.
|
|
type InputToggleCmd struct {
|
|
InputName string `arg:"" help:"Name of the input to toggle."`
|
|
}
|
|
|
|
// Run executes the command to toggle the mute state of an input.
|
|
func (cmd *InputToggleCmd) Run(ctx *context) error {
|
|
// Get the current mute state of the input
|
|
resp, err := ctx.Client.Inputs.GetInputMute(
|
|
inputs.NewGetInputMuteParams().WithInputName(cmd.InputName),
|
|
)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to get input mute state: %w", err)
|
|
}
|
|
// Toggle the mute state
|
|
newMuteState := !resp.InputMuted
|
|
_, err = ctx.Client.Inputs.SetInputMute(
|
|
inputs.NewSetInputMuteParams().WithInputName(cmd.InputName).WithInputMuted(newMuteState),
|
|
)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to toggle input mute state: %w", err)
|
|
}
|
|
|
|
if newMuteState {
|
|
fmt.Fprintf(ctx.Out, "Muted input: %s\n", cmd.InputName)
|
|
} else {
|
|
fmt.Fprintf(ctx.Out, "Unmuted input: %s\n", cmd.InputName)
|
|
}
|
|
return nil
|
|
}
|