github.com/gkstretton/dark/services/goo@v0.0.0-20231114224855-2d1a2074d446/obs/source.go (about)

     1  package obs
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/andreykaipov/goobs/api/requests/filters"
     7  	"github.com/andreykaipov/goobs/api/requests/inputs"
     8  	"github.com/gkstretton/dark/services/goo/config"
     9  	"github.com/gkstretton/dark/services/goo/keyvalue"
    10  	"gopkg.in/yaml.v3"
    11  )
    12  
    13  func setSessionNumber(number int, production bool) {
    14  	lock.Lock()
    15  	defer lock.Unlock()
    16  	if c == nil {
    17  		fmt.Println("cannot set obs session number because client is nil")
    18  		return
    19  	}
    20  	prefix := ""
    21  	if !production {
    22  		prefix = "dev"
    23  	}
    24  
    25  	_, err := c.Inputs.SetInputSettings(&inputs.SetInputSettingsParams{
    26  		InputName: "Session Number",
    27  		InputSettings: map[string]interface{}{
    28  			"text": fmt.Sprintf("%s#%d", prefix, number),
    29  		},
    30  	})
    31  	if err != nil {
    32  		fmt.Printf("error setting obs session number: %v\n", err)
    33  		return
    34  	}
    35  }
    36  
    37  func setCropConfig() {
    38  	lock.Lock()
    39  	defer lock.Unlock()
    40  	if c == nil {
    41  		fmt.Println("cannot set obs crop config because client is nil")
    42  		return
    43  	}
    44  
    45  	err := setSourceCrop("TopCam", config.CC_TOP_CAM)
    46  	if err != nil {
    47  		fmt.Printf("failed to set OBS TopCam crop settings: %v\n", err)
    48  	}
    49  
    50  	err = setSourceCrop("FrontCam", config.CC_FRONT_CAM)
    51  	if err != nil {
    52  		fmt.Printf("failed to set OBS FrontCam crop settings: %v\n", err)
    53  	}
    54  }
    55  
    56  func setSourceCrop(sourceName, cropConfigKey string) error {
    57  	cc := &config.CropConfig{}
    58  	b := keyvalue.Get(cropConfigKey)
    59  	if len(b) == 0 {
    60  		return fmt.Errorf("config key %s is empty", cropConfigKey)
    61  	}
    62  	err := yaml.Unmarshal(b, cc)
    63  	if err != nil {
    64  		return fmt.Errorf("failed to unmarshall crop config: %v", err)
    65  	}
    66  
    67  	settings := map[string]interface{}{
    68  		"left":   cc.LeftRel,
    69  		"top":    cc.TopRel,
    70  		"right":  cc.RightRel,
    71  		"bottom": cc.BottomRel,
    72  	}
    73  	fmt.Printf("setting %s in obs to settings %+v\n", sourceName, settings)
    74  
    75  	resp, err := c.Filters.SetSourceFilterSettings(&filters.SetSourceFilterSettingsParams{
    76  		SourceName:     sourceName,
    77  		FilterName:     "Crop",
    78  		FilterSettings: settings,
    79  	})
    80  	if err != nil {
    81  		return fmt.Errorf("failed to set source filter settings: %v", err)
    82  	}
    83  	fmt.Println(resp)
    84  
    85  	return nil
    86  }