DavidRisch/steamvr_utils

Daemon crashes when sink input has no client ID

Closed this issue · 1 comments

Hi,

in my PulseAudio setup I use the modules module-echo-cancel and module-loopback. Both will create sink inputs without a client ID:

$ pact list short sink-inputs
0	1	-	module-echo-cancel.c	float32le 2ch 32000Hz
3	4	-	module-loopback.c	s16le 2ch 44100Hz

resulting in a ValueError

2021-01-21 18:52:52 [ERROR]: 
Traceback (most recent call last):
  File "/home/cyberworm/Applications/steamvr_utils/scripts/steamvr_utils.py", line 124, in main
    steamvr_utils.action(selected_action)
  File "/home/cyberworm/Applications/steamvr_utils/scripts/steamvr_utils.py", line 45, in action
    self.start_daemon()
  File "/home/cyberworm/Applications/steamvr_utils/scripts/steamvr_utils.py", line 51, in start_daemon
    SteamvrDaemon.create_daemon(self)
  File "/home/cyberworm/Applications/steamvr_utils/scripts/steamvr_daemon.py", line 45, in create_daemon
    steamvr_daemon.loop()
  File "/home/cyberworm/Applications/steamvr_utils/scripts/steamvr_daemon.py", line 57, in loop
    self.steamvr_utils.turn_on()
  File "/home/cyberworm/Applications/steamvr_utils/scripts/steamvr_utils.py", line 69, in turn_on
    self.audio_switcher.switch_to_vr()
  File "/home/cyberworm/Applications/steamvr_utils/scripts/audio_switcher.py", line 99, in switch_to_vr
    self.set_sink(self.vr_sink)
  File "/home/cyberworm/Applications/steamvr_utils/scripts/audio_switcher.py", line 106, in set_sink
    self.set_sink_for_all_sink_inputs(sink)
  File "/home/cyberworm/Applications/steamvr_utils/scripts/audio_switcher.py", line 126, in set_sink_for_all_sink_inputs
    sink_inputs = pactl_interface.SinkInput.get_all_sink_inputs(self)
  File "/home/cyberworm/Applications/steamvr_utils/scripts/pactl_interface/sink_input.py", line 24, in get_all_sink_inputs
    sink_inputs = [cls(line) for line in sink_inputs_lines]
  File "/home/cyberworm/Applications/steamvr_utils/scripts/pactl_interface/sink_input.py", line 24, in <listcomp>
    sink_inputs = [cls(line) for line in sink_inputs_lines]
  File "/home/cyberworm/Applications/steamvr_utils/scripts/pactl_interface/sink_input.py", line 9, in __init__
    self.client_id = int(line.split('\t')[2])
ValueError: invalid literal for int() with base 10: '-'

Fixed by aaedc50 and 72e3ff8.
Thanks for debugging the problem yourself.