From 677e6d7fa99a83c606c2c81c6b14fd11355a9bd1 Mon Sep 17 00:00:00 2001 From: vikingowl Date: Thu, 26 Mar 2026 18:21:32 +0100 Subject: [PATCH] fix: send accept_all filter as None in IPC so runtime plugins appear in results --- crates/owlry-core/src/filter.rs | 5 +++++ crates/owlry/src/backend.rs | 38 +++++++++++++++++++++------------ 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/crates/owlry-core/src/filter.rs b/crates/owlry-core/src/filter.rs index 9cc160d..59142e0 100644 --- a/crates/owlry-core/src/filter.rs +++ b/crates/owlry-core/src/filter.rs @@ -184,6 +184,11 @@ impl ProviderFilter { self.accept_all || self.enabled.contains(&provider) } + /// Whether this filter accepts all provider types + pub fn is_accept_all(&self) -> bool { + self.accept_all + } + /// Get current active prefix if any #[allow(dead_code)] pub fn active_prefix(&self) -> Option { diff --git a/crates/owlry/src/backend.rs b/crates/owlry/src/backend.rs index 254f163..e73e0a4 100644 --- a/crates/owlry/src/backend.rs +++ b/crates/owlry/src/backend.rs @@ -39,13 +39,18 @@ impl SearchBackend { ) -> Vec { match self { SearchBackend::Daemon(client) => { - let modes: Vec = filter - .enabled_providers() - .iter() - .map(|p| p.to_string()) - .collect(); - - let modes_param = if modes.is_empty() { None } else { Some(modes) }; + // When accept_all, send None so daemon doesn't restrict to a specific set + // (otherwise dynamically loaded plugin types would be filtered out) + let modes_param = if filter.is_accept_all() { + None + } else { + let modes: Vec = filter + .enabled_providers() + .iter() + .map(|p| p.to_string()) + .collect(); + if modes.is_empty() { None } else { Some(modes) } + }; match client.query(query, modes_param) { Ok(items) => items.into_iter().map(result_to_launch_item).collect(), @@ -105,13 +110,18 @@ impl SearchBackend { query.to_string() }; - let modes: Vec = filter - .enabled_providers() - .iter() - .map(|p| p.to_string()) - .collect(); - - let modes_param = if modes.is_empty() { None } else { Some(modes) }; + // When accept_all, send None so daemon doesn't restrict to a specific set + // (otherwise dynamically loaded plugin types would be filtered out) + let modes_param = if filter.is_accept_all() { + None + } else { + let modes: Vec = filter + .enabled_providers() + .iter() + .map(|p| p.to_string()) + .collect(); + if modes.is_empty() { None } else { Some(modes) } + }; match client.query(&effective_query, modes_param) { Ok(items) => items.into_iter().map(result_to_launch_item).collect(),