mirror of
https://github.com/onyx-and-iris/gobs-cli.git
synced 2026-04-18 07:03:37 +00:00
add projector commands
add ProjectorCmd section to README
This commit is contained in:
66
projector.go
Normal file
66
projector.go
Normal file
@@ -0,0 +1,66 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/andreykaipov/goobs/api/requests/ui"
|
||||
"github.com/aquasecurity/table"
|
||||
)
|
||||
|
||||
// ProjectorCmd provides a command to manage projectors in OBS.
|
||||
type ProjectorCmd struct {
|
||||
ListMonitors ProjectorListMonitorsCmd `cmd:"" help:"List available monitors." aliases:"ls-m"`
|
||||
Open ProjectorOpenCmd `cmd:"" help:"Open a fullscreen projector for a source on a specific monitor." aliases:"o"`
|
||||
}
|
||||
|
||||
// ProjectorListMonitorsCmd provides a command to list all monitors available for projectors.
|
||||
type ProjectorListMonitorsCmd struct{} // size = 0x0
|
||||
|
||||
// Run executes the command to list all monitors available for projectors.
|
||||
func (cmd *ProjectorListMonitorsCmd) Run(ctx *context) error {
|
||||
monitors, err := ctx.Client.Ui.GetMonitorList()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if len(monitors.Monitors) == 0 {
|
||||
ctx.Out.Write([]byte("No monitors found for projectors.\n"))
|
||||
return nil
|
||||
}
|
||||
|
||||
t := table.New(ctx.Out)
|
||||
t.SetPadding(3)
|
||||
t.SetAlignment(table.AlignCenter, table.AlignLeft)
|
||||
t.SetHeaders("Monitor ID", "Monitor Name")
|
||||
|
||||
for _, monitor := range monitors.Monitors {
|
||||
t.AddRow(fmt.Sprintf("%d", monitor.MonitorIndex), monitor.MonitorName)
|
||||
}
|
||||
|
||||
t.Render()
|
||||
return nil
|
||||
}
|
||||
|
||||
// ProjectorOpenCmd provides a command to open a fullscreen projector for a specific source.
|
||||
type ProjectorOpenCmd struct {
|
||||
MonitorIndex int `flag:"" help:"Index of the monitor to open the projector on." default:"0"`
|
||||
SourceName string ` help:"Name of the source to project." default:"" arg:""`
|
||||
}
|
||||
|
||||
// Run executes the command to show details of a specific projector.
|
||||
func (cmd *ProjectorOpenCmd) Run(ctx *context) error {
|
||||
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
|
||||
}
|
||||
|
||||
ctx.Client.Ui.OpenSourceProjector(ui.NewOpenSourceProjectorParams().
|
||||
WithSourceName(cmd.SourceName).
|
||||
WithMonitorIndex(cmd.MonitorIndex))
|
||||
|
||||
fmt.Fprintf(ctx.Out, "Opened projector for source '%s' on monitor index %d.\n", cmd.SourceName, cmd.MonitorIndex)
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user