From 439f57c3c8ce2301aa24ec55f78dfecb6f75dead Mon Sep 17 00:00:00 2001 From: Alex P Date: Sat, 20 Sep 2025 23:38:03 +0300 Subject: [PATCH] [WIP] CLeanup: Remove unused or redundant code or comments --- audio_handlers.go | 109 ------------------ .../popovers/AudioControlPopover.tsx | 8 +- ui/src/hooks/useMicrophone.ts | 98 +--------------- 3 files changed, 5 insertions(+), 210 deletions(-) diff --git a/audio_handlers.go b/audio_handlers.go index b133baf9..b906a720 100644 --- a/audio_handlers.go +++ b/audio_handlers.go @@ -5,7 +5,6 @@ import ( "github.com/coder/websocket" "github.com/jetkvm/kvm/internal/audio" - "github.com/pion/webrtc/v4" "github.com/rs/zerolog" ) @@ -16,19 +15,6 @@ func ensureAudioControlService() *audio.AudioControlService { sessionProvider := &SessionProviderImpl{} audioControlService = audio.NewAudioControlService(sessionProvider, logger) - // Set up callback for audio relay to get current session's audio track - audio.SetCurrentSessionCallback(func() audio.AudioTrackWriter { - return GetCurrentSessionAudioTrack() - }) - - // Set up callback for audio relay to replace WebRTC audio track - audio.SetTrackReplacementCallback(func(newTrack audio.AudioTrackWriter) error { - if track, ok := newTrack.(*webrtc.TrackLocalStaticSample); ok { - return ReplaceCurrentSessionAudioTrack(track) - } - return nil - }) - // Set up RPC callback functions for the audio package audio.SetRPCCallbacks( func() *audio.AudioControlService { return audioControlService }, @@ -42,101 +28,6 @@ func ensureAudioControlService() *audio.AudioControlService { return audioControlService } -// --- Global Convenience Functions for Audio Control --- - -// MuteAudioOutput is a global helper to mute audio output -func MuteAudioOutput() error { - return ensureAudioControlService().MuteAudio(true) -} - -// UnmuteAudioOutput is a global helper to unmute audio output -func UnmuteAudioOutput() error { - return ensureAudioControlService().MuteAudio(false) -} - -// StopMicrophone is a global helper to stop microphone subprocess -func StopMicrophone() error { - return ensureAudioControlService().StopMicrophone() -} - -// StartMicrophone is a global helper to start microphone subprocess -func StartMicrophone() error { - return ensureAudioControlService().StartMicrophone() -} - -// IsAudioOutputActive is a global helper to check if audio output subprocess is running -func IsAudioOutputActive() bool { - return ensureAudioControlService().IsAudioOutputActive() -} - -// IsMicrophoneActive is a global helper to check if microphone subprocess is running -func IsMicrophoneActive() bool { - return ensureAudioControlService().IsMicrophoneActive() -} - -// ResetMicrophone is a global helper to reset the microphone -func ResetMicrophone() error { - return ensureAudioControlService().ResetMicrophone() -} - -// GetCurrentSessionAudioTrack returns the current session's audio track for audio relay -func GetCurrentSessionAudioTrack() *webrtc.TrackLocalStaticSample { - if currentSession != nil { - return currentSession.AudioTrack - } - return nil -} - -// ConnectRelayToCurrentSession connects the audio relay to the current WebRTC session -func ConnectRelayToCurrentSession() error { - if currentTrack := GetCurrentSessionAudioTrack(); currentTrack != nil { - err := audio.UpdateAudioRelayTrack(currentTrack) - if err != nil { - logger.Error().Err(err).Msg("failed to connect current session's audio track to relay") - return err - } - logger.Info().Msg("connected current session's audio track to relay") - return nil - } - logger.Warn().Msg("no current session audio track found") - return nil -} - -// ReplaceCurrentSessionAudioTrack replaces the audio track in the current WebRTC session -func ReplaceCurrentSessionAudioTrack(newTrack *webrtc.TrackLocalStaticSample) error { - if currentSession == nil { - return nil // No session to update - } - - err := currentSession.ReplaceAudioTrack(newTrack) - if err != nil { - logger.Error().Err(err).Msg("failed to replace audio track in current session") - return err - } - - logger.Info().Msg("successfully replaced audio track in current session") - return nil -} - -// SetAudioQuality is a global helper to set audio output quality -func SetAudioQuality(quality audio.AudioQuality) error { - ensureAudioControlService() - audioControlService.SetAudioQuality(quality) - return nil -} - -// GetAudioQualityPresets is a global helper to get available audio quality presets -func GetAudioQualityPresets() map[audio.AudioQuality]audio.AudioConfig { - ensureAudioControlService() - return audioControlService.GetAudioQualityPresets() -} - -// GetCurrentAudioQuality is a global helper to get current audio quality configuration -func GetCurrentAudioQuality() audio.AudioConfig { - ensureAudioControlService() - return audioControlService.GetCurrentAudioQuality() -} - // handleSubscribeAudioEvents handles WebSocket audio event subscription func handleSubscribeAudioEvents(connectionID string, wsCon *websocket.Conn, runCtx context.Context, l *zerolog.Logger) { ensureAudioControlService() diff --git a/ui/src/components/popovers/AudioControlPopover.tsx b/ui/src/components/popovers/AudioControlPopover.tsx index d16b46e9..2988eaa0 100644 --- a/ui/src/components/popovers/AudioControlPopover.tsx +++ b/ui/src/components/popovers/AudioControlPopover.tsx @@ -39,9 +39,6 @@ interface AudioConfig { FrameSize: string; } -// Quality labels will be managed by the audio quality service -const getQualityLabels = () => audioQualityService.getQualityLabels(); - interface AudioControlPopoverProps { microphone: MicrophoneHookReturn; } @@ -94,9 +91,6 @@ export default function AudioControlPopover({ microphone }: AudioControlPopoverP const isMuted = audioMuted ?? false; const isConnected = wsConnected; - // Note: We now use hook state instead of WebSocket state for microphone Enable/Disable - // const isMicrophoneActiveFromWS = microphoneState?.running ?? false; - // Audio devices @@ -463,7 +457,7 @@ export default function AudioControlPopover({ microphone }: AudioControlPopoverP
- {Object.entries(getQualityLabels()).map(([quality, label]) => ( + {Object.entries(audioQualityService.getQualityLabels()).map(([quality, label]) => (