mirror of https://github.com/jetkvm/kvm.git
157 lines
4.6 KiB
Go
157 lines
4.6 KiB
Go
package audio
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
// RPC wrapper functions for audio control
|
|
// These functions bridge the RPC layer to the AudioControlService
|
|
|
|
// These variables will be set by the main package to provide access to the global service
|
|
var (
|
|
getAudioControlServiceFunc func() *AudioControlService
|
|
getAudioQualityFunc func() AudioConfig
|
|
setAudioQualityFunc func(AudioQuality) error
|
|
)
|
|
|
|
// SetRPCCallbacks sets the callback functions for RPC operations
|
|
func SetRPCCallbacks(
|
|
getService func() *AudioControlService,
|
|
getQuality func() AudioConfig,
|
|
setQuality func(AudioQuality) error,
|
|
) {
|
|
getAudioControlServiceFunc = getService
|
|
getAudioQualityFunc = getQuality
|
|
setAudioQualityFunc = setQuality
|
|
}
|
|
|
|
// RPCAudioMute handles audio mute/unmute RPC requests
|
|
func RPCAudioMute(muted bool) error {
|
|
if getAudioControlServiceFunc == nil {
|
|
return fmt.Errorf("audio control service not available")
|
|
}
|
|
service := getAudioControlServiceFunc()
|
|
if service == nil {
|
|
return fmt.Errorf("audio control service not initialized")
|
|
}
|
|
return service.MuteAudio(muted)
|
|
}
|
|
|
|
// RPCAudioQuality handles audio quality change RPC requests
|
|
func RPCAudioQuality(quality int) (map[string]any, error) {
|
|
if getAudioQualityFunc == nil || setAudioQualityFunc == nil {
|
|
return nil, fmt.Errorf("audio quality functions not available")
|
|
}
|
|
|
|
// Convert int to AudioQuality type
|
|
audioQuality := AudioQuality(quality)
|
|
|
|
// Get current audio quality configuration
|
|
currentConfig := getAudioQualityFunc()
|
|
|
|
// Set new quality if different
|
|
if currentConfig.Quality != audioQuality {
|
|
err := setAudioQualityFunc(audioQuality)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to set audio quality: %w", err)
|
|
}
|
|
// Get updated config after setting
|
|
newConfig := getAudioQualityFunc()
|
|
return map[string]any{"config": newConfig}, nil
|
|
}
|
|
|
|
// Return current config if no change needed
|
|
return map[string]any{"config": currentConfig}, nil
|
|
}
|
|
|
|
// RPCMicrophoneStart handles microphone start RPC requests
|
|
func RPCMicrophoneStart() error {
|
|
if getAudioControlServiceFunc == nil {
|
|
return fmt.Errorf("audio control service not available")
|
|
}
|
|
service := getAudioControlServiceFunc()
|
|
if service == nil {
|
|
return fmt.Errorf("audio control service not initialized")
|
|
}
|
|
return service.StartMicrophone()
|
|
}
|
|
|
|
// RPCMicrophoneStop handles microphone stop RPC requests
|
|
func RPCMicrophoneStop() error {
|
|
if getAudioControlServiceFunc == nil {
|
|
return fmt.Errorf("audio control service not available")
|
|
}
|
|
service := getAudioControlServiceFunc()
|
|
if service == nil {
|
|
return fmt.Errorf("audio control service not initialized")
|
|
}
|
|
return service.StopMicrophone()
|
|
}
|
|
|
|
// RPCAudioStatus handles audio status RPC requests (read-only)
|
|
func RPCAudioStatus() (map[string]interface{}, error) {
|
|
if getAudioControlServiceFunc == nil {
|
|
return nil, fmt.Errorf("audio control service not available")
|
|
}
|
|
service := getAudioControlServiceFunc()
|
|
if service == nil {
|
|
return nil, fmt.Errorf("audio control service not initialized")
|
|
}
|
|
return service.GetAudioStatus(), nil
|
|
}
|
|
|
|
// RPCAudioQualityPresets handles audio quality presets RPC requests (read-only)
|
|
func RPCAudioQualityPresets() (map[string]any, error) {
|
|
if getAudioControlServiceFunc == nil || getAudioQualityFunc == nil {
|
|
return nil, fmt.Errorf("audio control service not available")
|
|
}
|
|
service := getAudioControlServiceFunc()
|
|
if service == nil {
|
|
return nil, fmt.Errorf("audio control service not initialized")
|
|
}
|
|
|
|
presets := service.GetAudioQualityPresets()
|
|
current := getAudioQualityFunc()
|
|
|
|
return map[string]any{
|
|
"presets": presets,
|
|
"current": current,
|
|
}, nil
|
|
}
|
|
|
|
// RPCMicrophoneStatus handles microphone status RPC requests (read-only)
|
|
func RPCMicrophoneStatus() (map[string]interface{}, error) {
|
|
if getAudioControlServiceFunc == nil {
|
|
return nil, fmt.Errorf("audio control service not available")
|
|
}
|
|
service := getAudioControlServiceFunc()
|
|
if service == nil {
|
|
return nil, fmt.Errorf("audio control service not initialized")
|
|
}
|
|
return service.GetMicrophoneStatus(), nil
|
|
}
|
|
|
|
// RPCMicrophoneReset handles microphone reset RPC requests
|
|
func RPCMicrophoneReset() error {
|
|
if getAudioControlServiceFunc == nil {
|
|
return fmt.Errorf("audio control service not available")
|
|
}
|
|
service := getAudioControlServiceFunc()
|
|
if service == nil {
|
|
return fmt.Errorf("audio control service not initialized")
|
|
}
|
|
return service.ResetMicrophone()
|
|
}
|
|
|
|
// RPCMicrophoneMute handles microphone mute RPC requests
|
|
func RPCMicrophoneMute(muted bool) error {
|
|
if getAudioControlServiceFunc == nil {
|
|
return fmt.Errorf("audio control service not available")
|
|
}
|
|
service := getAudioControlServiceFunc()
|
|
if service == nil {
|
|
return fmt.Errorf("audio control service not initialized")
|
|
}
|
|
return service.MuteMicrophone(muted)
|
|
}
|