diff --git a/src/config/wireplumber.conf b/src/config/wireplumber.conf index b94c06b6..1f90077e 100644 --- a/src/config/wireplumber.conf +++ b/src/config/wireplumber.conf @@ -656,6 +656,11 @@ wireplumber.components = [ name = linking/rescan.lua, type = script/lua provides = hooks.linking.rescan } + { + name = linking/rescan-on-linkable.lua, type = script/lua + provides = hooks.linking.rescan-on-linkable + requires = [ hooks.linking.rescan ] + } { name = linking/find-media-role-target.lua, type = script/lua provides = hooks.linking.target.find-media-role @@ -709,7 +714,8 @@ wireplumber.components = [ requires = [ hooks.linking.rescan, hooks.linking.target.prepare-link, hooks.linking.target.link ] - wants = [ hooks.linking.target.find-media-role, + wants = [ hooks.linking.rescan-on-linkable, + hooks.linking.target.find-media-role, hooks.linking.target.find-defined, hooks.linking.target.find-audio-group, hooks.linking.target.find-filter, diff --git a/src/scripts/linking/rescan-on-linkable.lua b/src/scripts/linking/rescan-on-linkable.lua new file mode 100644 index 00000000..17de615b --- /dev/null +++ b/src/scripts/linking/rescan-on-linkable.lua @@ -0,0 +1,25 @@ +-- WirePlumber +-- +-- Copyright © 2026 Axis Communications AB. +-- +-- SPDX-License-Identifier: MIT +-- +-- Trigger a full rescan when linkable session items are added or removed. +-- This can be disabled by setting hooks.linking.rescan-on-linkable = disabled +-- in wireplumber.profiles. + +log = Log.open_topic ("s-linking") + +SimpleEventHook { + name = "linking/rescan-trigger-on-linkable-added-removed", + interests = { + EventInterest { + Constraint { "event.type", "c", "session-item-added", "session-item-removed" }, + Constraint { "event.session-item.interface", "=", "linkable" }, + }, + }, + execute = function (event) + local source = event:get_source () + source:call ("schedule-rescan", "linking") + end +}:register () diff --git a/src/scripts/linking/rescan.lua b/src/scripts/linking/rescan.lua index 1cae5b86..db59d6a8 100644 --- a/src/scripts/linking/rescan.lua +++ b/src/scripts/linking/rescan.lua @@ -218,11 +218,6 @@ SimpleEventHook { SimpleEventHook { name = "linking/rescan-trigger", interests = { - -- on linkable added or removed, where linkable is adapter or plain node - EventInterest { - Constraint { "event.type", "c", "session-item-added", "session-item-removed" }, - Constraint { "event.session-item.interface", "=", "linkable" }, - }, -- on device Routes changed EventInterest { Constraint { "event.type", "=", "device-params-changed" },