Files
Tobias Gesellchen 369ebc42fe Fix golangci-lint findings and improve code quality
Move example files to separate packages to avoid main redeclaration. Fix cyclomatic complexity and variable shadowing. Address errcheck and wsl linting issues. Update tests to handle capabilities and fix panics. Apply consistent formatting with gofmt.
2026-01-11 00:39:58 +01:00

400 lines
11 KiB
Go

package main
import (
"fmt"
"strconv"
"strings"
"github.com/urfave/cli/v2"
)
// getAudioDSPControls gets the current DSP audio controls
func getAudioDSPControls(c *cli.Context) error {
clientConfig := GetClientConfig(c)
PrintDeviceHeader("Getting DSP audio controls", clientConfig.Host, clientConfig.Port)
client, err := CreateSoundTouchClient(clientConfig)
if err != nil {
PrintError(fmt.Sprintf("Failed to create client: %v", err))
return err
}
dspControls, err := client.GetAudioDSPControls()
if err != nil {
PrintError(fmt.Sprintf("Failed to get DSP controls: %v", err))
return err
}
fmt.Println("DSP Audio Controls:")
fmt.Printf(" Audio Mode: %s\n", dspControls.AudioMode)
fmt.Printf(" Video Sync Audio Delay: %d ms\n", dspControls.VideoSyncAudioDelay)
supportedModes := dspControls.GetSupportedAudioModes()
if len(supportedModes) > 0 {
fmt.Printf(" Supported Audio Modes: %s\n", strings.Join(supportedModes, ", "))
}
return nil
}
// setAudioDSPControls sets the DSP audio controls
func setAudioDSPControls(c *cli.Context) error {
clientConfig := GetClientConfig(c)
audioMode := c.String("mode")
videoSyncDelay := c.Int("delay")
if audioMode == "" && videoSyncDelay == 0 {
return fmt.Errorf("at least one of --mode or --delay must be specified")
}
PrintDeviceHeader("Setting DSP audio controls", clientConfig.Host, clientConfig.Port)
client, err := CreateSoundTouchClient(clientConfig)
if err != nil {
PrintError(fmt.Sprintf("Failed to create client: %v", err))
return err
}
err = client.SetAudioDSPControls(audioMode, videoSyncDelay)
if err != nil {
PrintError(fmt.Sprintf("Failed to set DSP controls: %v", err))
return err
}
fmt.Println("✅ DSP controls updated successfully")
if audioMode != "" {
fmt.Printf(" Audio Mode: %s\n", audioMode)
}
if videoSyncDelay != 0 {
fmt.Printf(" Video Sync Delay: %d ms\n", videoSyncDelay)
}
return nil
}
// setAudioMode sets only the audio mode
func setAudioMode(c *cli.Context) error {
clientConfig := GetClientConfig(c)
audioMode := c.String("mode")
if audioMode == "" {
return fmt.Errorf("audio mode is required (use --mode)")
}
PrintDeviceHeader(fmt.Sprintf("Setting audio mode to '%s'", audioMode), clientConfig.Host, clientConfig.Port)
client, err := CreateSoundTouchClient(clientConfig)
if err != nil {
PrintError(fmt.Sprintf("Failed to create client: %v", err))
return err
}
err = client.SetAudioMode(audioMode)
if err != nil {
PrintError(fmt.Sprintf("Failed to set audio mode: %v", err))
return err
}
fmt.Printf("✅ Audio mode set to '%s'\n", audioMode)
return nil
}
// setVideoSyncDelay sets only the video sync audio delay
func setVideoSyncDelay(c *cli.Context) error {
clientConfig := GetClientConfig(c)
delay := c.Int("delay")
PrintDeviceHeader(fmt.Sprintf("Setting video sync audio delay to %d ms", delay), clientConfig.Host, clientConfig.Port)
client, err := CreateSoundTouchClient(clientConfig)
if err != nil {
PrintError(fmt.Sprintf("Failed to create client: %v", err))
return err
}
err = client.SetVideoSyncAudioDelay(delay)
if err != nil {
PrintError(fmt.Sprintf("Failed to set video sync delay: %v", err))
return err
}
fmt.Printf("✅ Video sync audio delay set to %d ms\n", delay)
return nil
}
// getAudioToneControls gets the current advanced tone controls
func getAudioToneControls(c *cli.Context) error {
clientConfig := GetClientConfig(c)
PrintDeviceHeader("Getting advanced tone controls", clientConfig.Host, clientConfig.Port)
client, err := CreateSoundTouchClient(clientConfig)
if err != nil {
PrintError(fmt.Sprintf("Failed to create client: %v", err))
return err
}
toneControls, err := client.GetAudioProductToneControls()
if err != nil {
PrintError(fmt.Sprintf("Failed to get tone controls: %v", err))
return err
}
fmt.Println("Advanced Tone Controls:")
fmt.Printf(" Bass: %d (range: %d to %d, step: %d)\n",
toneControls.Bass.Value, toneControls.Bass.MinValue, toneControls.Bass.MaxValue, toneControls.Bass.Step)
fmt.Printf(" Treble: %d (range: %d to %d, step: %d)\n",
toneControls.Treble.Value, toneControls.Treble.MinValue, toneControls.Treble.MaxValue, toneControls.Treble.Step)
return nil
}
// setAudioToneControls sets the advanced tone controls
func setAudioToneControls(c *cli.Context) error {
clientConfig := GetClientConfig(c)
bassStr := c.String("bass")
trebleStr := c.String("treble")
if bassStr == "" && trebleStr == "" {
return fmt.Errorf("at least one of --bass or --treble must be specified")
}
var bass, treble *int
var err error
if bassStr != "" {
bassVal, errVal := strconv.Atoi(bassStr)
if errVal != nil {
return fmt.Errorf("invalid bass value: %s", bassStr)
}
bass = &bassVal
}
if trebleStr != "" {
trebleVal, errVal := strconv.Atoi(trebleStr)
if errVal != nil {
return fmt.Errorf("invalid treble value: %s", trebleStr)
}
treble = &trebleVal
}
PrintDeviceHeader("Setting advanced tone controls", clientConfig.Host, clientConfig.Port)
client, err := CreateSoundTouchClient(clientConfig)
if err != nil {
PrintError(fmt.Sprintf("Failed to create client: %v", err))
return err
}
err = client.SetAudioProductToneControls(bass, treble)
if err != nil {
PrintError(fmt.Sprintf("Failed to set tone controls: %v", err))
return err
}
fmt.Println("✅ Advanced tone controls updated successfully")
if bass != nil {
fmt.Printf(" Bass: %d\n", *bass)
}
if treble != nil {
fmt.Printf(" Treble: %d\n", *treble)
}
return nil
}
// setAdvancedBass sets only the advanced bass control
func setAdvancedBass(c *cli.Context) error {
clientConfig := GetClientConfig(c)
level := c.Int("level")
PrintDeviceHeader(fmt.Sprintf("Setting advanced bass to %d", level), clientConfig.Host, clientConfig.Port)
client, err := CreateSoundTouchClient(clientConfig)
if err != nil {
PrintError(fmt.Sprintf("Failed to create client: %v", err))
return err
}
err = client.SetAdvancedBass(level)
if err != nil {
PrintError(fmt.Sprintf("Failed to set advanced bass: %v", err))
return err
}
fmt.Printf("✅ Advanced bass set to %d\n", level)
return nil
}
// setAdvancedTreble sets only the advanced treble control
func setAdvancedTreble(c *cli.Context) error {
clientConfig := GetClientConfig(c)
level := c.Int("level")
PrintDeviceHeader(fmt.Sprintf("Setting advanced treble to %d", level), clientConfig.Host, clientConfig.Port)
client, err := CreateSoundTouchClient(clientConfig)
if err != nil {
PrintError(fmt.Sprintf("Failed to create client: %v", err))
return err
}
err = client.SetAdvancedTreble(level)
if err != nil {
PrintError(fmt.Sprintf("Failed to set advanced treble: %v", err))
return err
}
fmt.Printf("✅ Advanced treble set to %d\n", level)
return nil
}
// getAudioLevelControls gets the current speaker level controls
func getAudioLevelControls(c *cli.Context) error {
clientConfig := GetClientConfig(c)
PrintDeviceHeader("Getting speaker level controls", clientConfig.Host, clientConfig.Port)
client, err := CreateSoundTouchClient(clientConfig)
if err != nil {
PrintError(fmt.Sprintf("Failed to create client: %v", err))
return err
}
levelControls, err := client.GetAudioProductLevelControls()
if err != nil {
PrintError(fmt.Sprintf("Failed to get level controls: %v", err))
return err
}
fmt.Println("Speaker Level Controls:")
fmt.Printf(" Front-Center Speaker: %d (range: %d to %d, step: %d)\n",
levelControls.FrontCenterSpeakerLevel.Value,
levelControls.FrontCenterSpeakerLevel.MinValue,
levelControls.FrontCenterSpeakerLevel.MaxValue,
levelControls.FrontCenterSpeakerLevel.Step)
fmt.Printf(" Rear-Surround Speakers: %d (range: %d to %d, step: %d)\n",
levelControls.RearSurroundSpeakersLevel.Value,
levelControls.RearSurroundSpeakersLevel.MinValue,
levelControls.RearSurroundSpeakersLevel.MaxValue,
levelControls.RearSurroundSpeakersLevel.Step)
return nil
}
// setAudioLevelControls sets the speaker level controls
func setAudioLevelControls(c *cli.Context) error {
clientConfig := GetClientConfig(c)
frontCenterStr := c.String("front-center")
rearSurroundStr := c.String("rear-surround")
if frontCenterStr == "" && rearSurroundStr == "" {
return fmt.Errorf("at least one of --front-center or --rear-surround must be specified")
}
var frontCenter, rearSurround *int
var err error
if frontCenterStr != "" {
frontCenterVal, errVal := strconv.Atoi(frontCenterStr)
if errVal != nil {
return fmt.Errorf("invalid front-center value: %s", frontCenterStr)
}
frontCenter = &frontCenterVal
}
if rearSurroundStr != "" {
rearSurroundVal, errVal := strconv.Atoi(rearSurroundStr)
if errVal != nil {
return fmt.Errorf("invalid rear-surround value: %s", rearSurroundStr)
}
rearSurround = &rearSurroundVal
}
PrintDeviceHeader("Setting speaker level controls", clientConfig.Host, clientConfig.Port)
client, err := CreateSoundTouchClient(clientConfig)
if err != nil {
PrintError(fmt.Sprintf("Failed to create client: %v", err))
return err
}
err = client.SetAudioProductLevelControls(frontCenter, rearSurround)
if err != nil {
PrintError(fmt.Sprintf("Failed to set level controls: %v", err))
return err
}
fmt.Println("✅ Speaker level controls updated successfully")
if frontCenter != nil {
fmt.Printf(" Front-Center Speaker: %d\n", *frontCenter)
}
if rearSurround != nil {
fmt.Printf(" Rear-Surround Speakers: %d\n", *rearSurround)
}
return nil
}
// setFrontCenterLevel sets only the front-center speaker level
func setFrontCenterLevel(c *cli.Context) error {
clientConfig := GetClientConfig(c)
level := c.Int("level")
PrintDeviceHeader(fmt.Sprintf("Setting front-center speaker level to %d", level), clientConfig.Host, clientConfig.Port)
client, err := CreateSoundTouchClient(clientConfig)
if err != nil {
PrintError(fmt.Sprintf("Failed to create client: %v", err))
return err
}
err = client.SetFrontCenterSpeakerLevel(level)
if err != nil {
PrintError(fmt.Sprintf("Failed to set front-center speaker level: %v", err))
return err
}
fmt.Printf("✅ Front-center speaker level set to %d\n", level)
return nil
}
// setRearSurroundLevel sets only the rear-surround speakers level
func setRearSurroundLevel(c *cli.Context) error {
clientConfig := GetClientConfig(c)
level := c.Int("level")
PrintDeviceHeader(fmt.Sprintf("Setting rear-surround speakers level to %d", level), clientConfig.Host, clientConfig.Port)
client, err := CreateSoundTouchClient(clientConfig)
if err != nil {
PrintError(fmt.Sprintf("Failed to create client: %v", err))
return err
}
err = client.SetRearSurroundSpeakersLevel(level)
if err != nil {
PrintError(fmt.Sprintf("Failed to set rear-surround speakers level: %v", err))
return err
}
fmt.Printf("✅ Rear-surround speakers level set to %d\n", level)
return nil
}