From c9dc02d94174544eda085855af0364ad26c3ee27 Mon Sep 17 00:00:00 2001 From: Julian Bouzas Date: Wed, 25 Oct 2023 12:11:06 -0400 Subject: [PATCH] rescan: make sure disabled smart filters are unlinked before rescanning This patch improves the smart filters unlinking logic by only unlinking smart filters that are disabled, instead of any kind of filters. The patch also removes redundant filter hooks. --- src/scripts/lib/filter-utils.lua | 17 ------------ src/scripts/linking/rescan.lua | 44 ++++++++++++-------------------- 2 files changed, 16 insertions(+), 45 deletions(-) diff --git a/src/scripts/lib/filter-utils.lua b/src/scripts/lib/filter-utils.lua index 38f17f1c..f9967ae5 100644 --- a/src/scripts/lib/filter-utils.lua +++ b/src/scripts/lib/filter-utils.lua @@ -324,23 +324,6 @@ SimpleEventHook { end }:register () -SimpleEventHook { - name = "lib/filter-utils/rescan-metadata-changed", - interests = { - EventInterest { - Constraint { "event.type", "=", "metadata-changed" }, - Constraint { "metadata.name", "=", "filters" }, - }, - }, - execute = function (event) - local source = event:get_source () - local om = source:call ("get-object-manager", "session-item") - local metadata_om = source:call ("get-object-manager", "metadata") - - rescanFilters (om, metadata_om) - end -}:register () - function module.is_filter_smart (direction, link_group) -- Make sure direction and link_group is valid if direction == nil or link_group == nil then diff --git a/src/scripts/linking/rescan.lua b/src/scripts/linking/rescan.lua index 5f10b99a..505c4e15 100644 --- a/src/scripts/linking/rescan.lua +++ b/src/scripts/linking/rescan.lua @@ -144,9 +144,24 @@ SimpleEventHook { }, execute = function (event) local source = event:get_source () + local om = source:call ("get-object-manager", "session-item") log:info ("rescanning...") + -- always unlink all filters that are smart and disabled + for si in om:iterate { + type = "SiLinkable", + Constraint { "node.link-group", "+" }, + } do + local node = si:get_associated_proxy ("node") + local link_group = node.properties["node.link-group"] + local direction = cutils.getTargetDirection (si.properties) + if futils.is_filter_smart (direction, link_group) and + futils.is_filter_disabled (direction, link_group) then + unhandleLinkable (si, om) + end + end + handleLinkables (source) end }:register () @@ -172,8 +187,7 @@ SimpleEventHook { }:register () SimpleEventHook { - name = "linking/rescan-trigger-before-filters-metadata-changed", - before = "lib/filter-utils/rescan-metadata-changed", + name = "linking/rescan-trigger-on-filters-metadata-changed", interests = { EventInterest { Constraint { "event.type", "=", "metadata-changed" }, @@ -182,32 +196,6 @@ SimpleEventHook { }, execute = function (event) local source = event:get_source () - local om = source:call ("get-object-manager", "session-item") - - -- unlink all filters - for si in om:iterate { - type = "SiLinkable", - Constraint { "node.link-group", "+" }, - } do - unhandleLinkable (si, om) - end - - end -}:register () - -SimpleEventHook { - name = "linking/rescan-trigger-after-filters-metadata-changed", - after = "lib/filter-utils/rescan-metadata-changed", - interests = { - EventInterest { - Constraint { "event.type", "=", "metadata-changed" }, - Constraint { "metadata.name", "=", "filters" }, - }, - }, - execute = function (event) - local source = event:get_source () - local om = source:call ("get-object-manager", "session-item") - source:call ("schedule-rescan", "linking") end }:register ()