mirror of
https://github.com/onyx-and-iris/gobs-cli.git
synced 2026-04-18 07:03:37 +00:00
first commit
This commit is contained in:
173
group.go
Normal file
173
group.go
Normal file
@@ -0,0 +1,173 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/andreykaipov/goobs/api/requests/sceneitems"
|
||||
)
|
||||
|
||||
// GroupCmd provides commands to manage groups in OBS Studio.
|
||||
type GroupCmd struct {
|
||||
List GroupListCmd `cmd:"" help:"List all groups." aliases:"ls"`
|
||||
Show GroupShowCmd `cmd:"" help:"Show group details." aliases:"sh"`
|
||||
Hide GroupHideCmd `cmd:"" help:"Hide group." aliases:"h"`
|
||||
Toggle GroupToggleCmd `cmd:"" help:"Toggle group." aliases:"tg"`
|
||||
Status GroupStatusCmd `cmd:"" help:"Get group status." aliases:"ss"`
|
||||
}
|
||||
|
||||
// GroupListCmd provides a command to list all groups in a scene.
|
||||
type GroupListCmd struct {
|
||||
SceneName string `arg:"" help:"Name of the scene to list groups from."`
|
||||
}
|
||||
|
||||
// Run executes the command to list all groups in a scene.
|
||||
func (cmd *GroupListCmd) Run(ctx *context) error {
|
||||
resp, err := ctx.Client.SceneItems.GetSceneItemList(sceneitems.NewGetSceneItemListParams().
|
||||
WithSceneName(cmd.SceneName))
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get scene item list: %w", err)
|
||||
}
|
||||
for _, item := range resp.SceneItems {
|
||||
if item.IsGroup {
|
||||
fmt.Fprintf(ctx.Out, "Group ID: %d, Source Name: %s\n", item.SceneItemID, item.SourceName)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GroupShowCmd provides a command to show a group in a scene.
|
||||
type GroupShowCmd struct {
|
||||
SceneName string `arg:"" help:"Name of the scene to show group from."`
|
||||
GroupName string `arg:"" help:"Name of the group to show."`
|
||||
}
|
||||
|
||||
// Run executes the command to show a group in a scene.
|
||||
func (cmd *GroupShowCmd) Run(ctx *context) error {
|
||||
resp, err := ctx.Client.SceneItems.GetSceneItemList(sceneitems.NewGetSceneItemListParams().
|
||||
WithSceneName(cmd.SceneName))
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get scene item list: %w", err)
|
||||
}
|
||||
|
||||
var found bool
|
||||
for _, item := range resp.SceneItems {
|
||||
if item.IsGroup && item.SourceName == cmd.GroupName {
|
||||
_, err := ctx.Client.SceneItems.SetSceneItemEnabled(sceneitems.NewSetSceneItemEnabledParams().
|
||||
WithSceneName(cmd.SceneName).
|
||||
WithSceneItemId(item.SceneItemID).
|
||||
WithSceneItemEnabled(true))
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to set scene item enabled: %w", err)
|
||||
}
|
||||
fmt.Fprintf(ctx.Out, "Group %s is now shown.\n", cmd.GroupName)
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
return fmt.Errorf("group '%s' not found", cmd.GroupName)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GroupHideCmd provides a command to hide a group in a scene.
|
||||
type GroupHideCmd struct {
|
||||
SceneName string `arg:"" help:"Name of the scene to hide group from."`
|
||||
GroupName string `arg:"" help:"Name of the group to hide."`
|
||||
}
|
||||
|
||||
// Run executes the command to hide a group in a scene.
|
||||
func (cmd *GroupHideCmd) Run(ctx *context) error {
|
||||
resp, err := ctx.Client.SceneItems.GetSceneItemList(sceneitems.NewGetSceneItemListParams().
|
||||
WithSceneName(cmd.SceneName))
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get scene item list: %w", err)
|
||||
}
|
||||
|
||||
var found bool
|
||||
for _, item := range resp.SceneItems {
|
||||
if item.IsGroup && item.SourceName == cmd.GroupName {
|
||||
_, err := ctx.Client.SceneItems.SetSceneItemEnabled(sceneitems.NewSetSceneItemEnabledParams().
|
||||
WithSceneName(cmd.SceneName).
|
||||
WithSceneItemId(item.SceneItemID).
|
||||
WithSceneItemEnabled(false))
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to set scene item enabled: %w", err)
|
||||
}
|
||||
fmt.Fprintf(ctx.Out, "Group %s is now hidden.\n", cmd.GroupName)
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
return fmt.Errorf("group '%s' not found", cmd.GroupName)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GroupToggleCmd provides a command to toggle a group in a scene.
|
||||
type GroupToggleCmd struct {
|
||||
SceneName string `arg:"" help:"Name of the scene to toggle group from."`
|
||||
GroupName string `arg:"" help:"Name of the group to toggle."`
|
||||
}
|
||||
|
||||
// Run executes the command to toggle a group in a scene.
|
||||
func (cmd *GroupToggleCmd) Run(ctx *context) error {
|
||||
resp, err := ctx.Client.SceneItems.GetSceneItemList(sceneitems.NewGetSceneItemListParams().
|
||||
WithSceneName(cmd.SceneName))
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get scene item list: %w", err)
|
||||
}
|
||||
|
||||
var found bool
|
||||
for _, item := range resp.SceneItems {
|
||||
if item.IsGroup && item.SourceName == cmd.GroupName {
|
||||
newState := !item.SceneItemEnabled
|
||||
_, err := ctx.Client.SceneItems.SetSceneItemEnabled(sceneitems.NewSetSceneItemEnabledParams().
|
||||
WithSceneName(cmd.SceneName).
|
||||
WithSceneItemId(item.SceneItemID).
|
||||
WithSceneItemEnabled(newState))
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to set scene item enabled: %w", err)
|
||||
}
|
||||
if newState {
|
||||
fmt.Fprintf(ctx.Out, "Group %s is now shown.\n", cmd.GroupName)
|
||||
} else {
|
||||
fmt.Fprintf(ctx.Out, "Group %s is now hidden.\n", cmd.GroupName)
|
||||
}
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
return fmt.Errorf("group '%s' not found", cmd.GroupName)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GroupStatusCmd provides a command to get the status of a group in a scene.
|
||||
type GroupStatusCmd struct {
|
||||
SceneName string `arg:"" help:"Name of the scene to get group status from."`
|
||||
GroupName string `arg:"" help:"Name of the group to get status."`
|
||||
}
|
||||
|
||||
// Run executes the command to get the status of a group in a scene.
|
||||
func (cmd *GroupStatusCmd) Run(ctx *context) error {
|
||||
resp, err := ctx.Client.SceneItems.GetSceneItemList(sceneitems.NewGetSceneItemListParams().
|
||||
WithSceneName(cmd.SceneName))
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get scene item list: %w", err)
|
||||
}
|
||||
for _, item := range resp.SceneItems {
|
||||
if item.IsGroup && item.SourceName == cmd.GroupName {
|
||||
if item.SceneItemEnabled {
|
||||
fmt.Fprintf(ctx.Out, "Group %s is shown.\n", cmd.GroupName)
|
||||
} else {
|
||||
fmt.Fprintf(ctx.Out, "Group %s is hidden.\n", cmd.GroupName)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return fmt.Errorf("group '%s' not found", cmd.GroupName)
|
||||
}
|
||||
Reference in New Issue
Block a user