yktoo / indicator-sound-switcher

Sound input/output selector indicator for Linux
https://yktoo.com/en/software/sound-switcher-indicator/
GNU General Public License v3.0
368 stars 29 forks source link

Input/output list isn't updated if port becomes available later #137

Open yktoo opened 3 weeks ago

yktoo commented 3 weeks ago

The list of available ports is read once a device is connected. If some time later a new port becomes available on that device, it isn't shown in the menu until a manual menu refresh.

That's the case, for instance, with Bluetooth headphones (B&W Px8): only a headset port combination (mike & output) is available upon connection, a few moments later the high-quality Headphone output port arrives — but it's not visible.

Here's a relevant piece of the app log:

DEBUG    .do_context_subscribe(facility: 9, kind: 0, index: 133)
DEBUG      + Card[133] added: `bluez_card.EC_66_D1_B6_33_89`, driver: `module-bluez5-device.c`
DEBUG        + Card profile added: `off` (Off), 0 sinks, 0 sources, priority: 0 -- Active
DEBUG        + Card profile added: `headset-head-unit` (Headset Head Unit (HSP/HFP)), 1 sinks, 1 sources, priority: 1
DEBUG        + Card profile added: `headset-head-unit-cvsd` (Headset Head Unit (HSP/HFP, codec CVSD)), 1 sinks, 1 sources, priority: 2
DEBUG        + Card profile added: `headset-head-unit-msbc` (Headset Head Unit (HSP/HFP, codec mSBC)), 1 sinks, 1 sources, priority: 3
DEBUG        + Card port added: `headphone-hf-input` (Handsfree); priority: 0; direction: 2; available: Yes
DEBUG          . Supported profile: `headset-head-unit`
DEBUG          . Supported profile: `headset-head-unit-cvsd`
DEBUG          . Supported profile: `headset-head-unit-msbc`
DEBUG        + Card port added: `headphone-hf-output` (Handsfree); priority: 0; direction: 1; available: Yes
DEBUG          . Supported profile: `headset-head-unit`
DEBUG          . Supported profile: `headset-head-unit-cvsd`
DEBUG          . Supported profile: `headset-head-unit-msbc`
DEBUG    .menu_insert_ordered_item(): inserting item `    Px8 ‣ Handsfree` at index 5
DEBUG    .menu_insert_ordered_item(): inserting item `    Px8 ‣ Handsfree` at index 12
DEBUG    .do_context_subscribe(facility: 9, kind: 16, index: 133)
DEBUG      * Card[133] `bluez_card.EC_66_D1_B6_33_89` updated
DEBUG        * Switched active profile: `off` (Off) ⇒ `headset-head-unit-msbc` (Headset Head Unit (HSP/HFP, codec mSBC))
DEBUG    .do_context_subscribe(facility: 1, kind: 0, index: 134)
DEBUG      + Source[134] added: `bluez_input.EC_66_D1_B6_33_89.0`, card 133
DEBUG        + Source port added: `headphone-hf-input` (Handsfree); priority: 0; available: Yes
DEBUG        * Activated source port `headphone-hf-input`
DEBUG    .do_context_subscribe(facility: 0, kind: 0, index: 135)
DEBUG      + Sink[135] added: `bluez_output.EC_66_D1_B6_33_89.1`, card 133
DEBUG        + Sink port added: `headphone-hf-output` (Handsfree); priority: 0; available: Yes
DEBUG        * Activated sink port `headphone-hf-output`
DEBUG    .do_context_subscribe(facility: 1, kind: 0, index: 135)
DEBUG    .do_context_subscribe(facility: 9, kind: 16, index: 133)
DEBUG      * Card[133] `bluez_card.EC_66_D1_B6_33_89` updated
DEBUG    .do_context_subscribe(facility: 7, kind: 16, index: 4294967295)
DEBUG    * Activated sink: `bluez_output.EC_66_D1_B6_33_89.1`
DEBUG    * Activated source: `bluez_input.EC_66_D1_B6_33_89.0`
DEBUG    .do_context_subscribe(facility: 0, kind: 16, index: 51)
DEBUG      * Sink[51] updated: `alsa_output.usb-Topping_D10-00.analog-stereo`, card 47
DEBUG        * Activated sink port `analog-output`
DEBUG    .do_context_subscribe(facility: 1, kind: 16, index: 51)
DEBUG    .do_context_subscribe(facility: 9, kind: 16, index: 47)
DEBUG      * Card[47] `alsa_card.usb-Topping_D10-00` updated
DEBUG    .do_context_subscribe(facility: 2, kind: 16, index: 127)
DEBUG    .do_context_subscribe(facility: 2, kind: 16, index: 127)
DEBUG    .do_context_subscribe(facility: 2, kind: 16, index: 127)
DEBUG    .do_context_subscribe(facility: 0, kind: 16, index: 135)
DEBUG      * Sink[135] updated: `bluez_output.EC_66_D1_B6_33_89.1`, card 133
DEBUG        * Activated sink port `headphone-hf-output`
DEBUG    .do_context_subscribe(facility: 1, kind: 16, index: 135)
DEBUG    .do_context_subscribe(facility: 1, kind: 16, index: 135)
DEBUG    .do_context_subscribe(facility: 9, kind: 16, index: 133)
DEBUG      * Card[133] `bluez_card.EC_66_D1_B6_33_89` updated
DEBUG    .do_context_subscribe(facility: 1, kind: 32, index: 134)
DEBUG      - Source[134] removed: `bluez_input.EC_66_D1_B6_33_89.0`
DEBUG    .do_context_subscribe(facility: 7, kind: 16, index: 4294967295)
DEBUG    * Activated sink: `alsa_output.usb-Topping_D10-00.analog-stereo`
DEBUG    * Activated source: `alsa_input.usb-046d_Logitech_Webcam_C925e_5EAD84BF-02.analog-stereo`
DEBUG    .do_context_subscribe(facility: 0, kind: 32, index: 135)
DEBUG      - Sink[135] removed: `bluez_output.EC_66_D1_B6_33_89.1`
DEBUG    .do_context_subscribe(facility: 1, kind: 32, index: 135)
DEBUG    .do_context_subscribe(facility: 7, kind: 16, index: 4294967295)
DEBUG    * Activated sink: `alsa_output.usb-Topping_D10-00.analog-stereo`
DEBUG    * Activated source: `alsa_input.usb-MICE_MICROPHONE_USB_MICROPHONE_201308-00.mono-fallback`
DEBUG    .do_context_subscribe(facility: 2, kind: 16, index: 127)
DEBUG    .do_context_subscribe(facility: 9, kind: 16, index: 133)
DEBUG      * Card[133] `bluez_card.EC_66_D1_B6_33_89` updated
DEBUG    .do_context_subscribe(facility: 0, kind: 0, index: 141)
DEBUG      + Sink[141] added: `bluez_output.EC_66_D1_B6_33_89.1`, card 133
DEBUG        + Sink port added: `headphone-output` (Headphone); priority: 0; available: Yes
DEBUG        * Activated sink port `headphone-output`
DEBUG    .do_context_subscribe(facility: 1, kind: 0, index: 141)
DEBUG    .do_context_subscribe(facility: 2, kind: 16, index: 127)
DEBUG    .do_context_subscribe(facility: 0, kind: 16, index: 141)
DEBUG      * Sink[141] updated: `bluez_output.EC_66_D1_B6_33_89.1`, card 133
DEBUG        * Activated sink port `headphone-output`
DEBUG    .do_context_subscribe(facility: 9, kind: 16, index: 133)
DEBUG      * Card[133] `bluez_card.EC_66_D1_B6_33_89` updated
DEBUG    .do_context_subscribe(facility: 2, kind: 16, index: 127)
DEBUG    .do_context_subscribe(facility: 0, kind: 16, index: 51)
DEBUG      * Sink[51] updated: `alsa_output.usb-Topping_D10-00.analog-stereo`, card 47
DEBUG        * Activated sink port `analog-output`
DEBUG    .do_context_subscribe(facility: 1, kind: 16, index: 51)
DEBUG    .do_context_subscribe(facility: 2, kind: 16, index: 127)
DEBUG    .do_context_subscribe(facility: 7, kind: 16, index: 4294967295)
DEBUG    * Activated sink: `bluez_output.EC_66_D1_B6_33_89.1`
DEBUG    * Activated source: `alsa_input.usb-MICE_MICROPHONE_USB_MICROPHONE_201308-00.mono-fallback`
DEBUG    .do_context_subscribe(facility: 0, kind: 16, index: 51)
DEBUG      * Sink[51] updated: `alsa_output.usb-Topping_D10-00.analog-stereo`, card 47
DEBUG        * Activated sink port `analog-output`
DEBUG    .do_context_subscribe(facility: 1, kind: 16, index: 51)
DEBUG    .do_context_subscribe(facility: 2, kind: 16, index: 127)
DEBUG    .do_context_subscribe(facility: 2, kind: 16, index: 127)
DEBUG    .do_context_subscribe(facility: 0, kind: 16, index: 141)
DEBUG      * Sink[141] updated: `bluez_output.EC_66_D1_B6_33_89.1`, card 133
DEBUG        * Activated sink port `headphone-output`
DEBUG    .do_context_subscribe(facility: 1, kind: 16, index: 141)
DEBUG    .do_context_subscribe(facility: 1, kind: 16, index: 141)
DEBUG    .do_context_subscribe(facility: 0, kind: 16, index: 141)
DEBUG      * Sink[141] updated: `bluez_output.EC_66_D1_B6_33_89.1`, card 133
DEBUG        * Activated sink port `headphone-output`
DEBUG    .do_context_subscribe(facility: 0, kind: 16, index: 51)
DEBUG      * Sink[51] updated: `alsa_output.usb-Topping_D10-00.analog-stereo`, card 47
DEBUG        * Activated sink port `analog-output`
DEBUG    .do_context_subscribe(facility: 1, kind: 16, index: 51)