diff --git a/service/src/lib.rs b/service/src/lib.rs index 21c936f..4504574 100644 --- a/service/src/lib.rs +++ b/service/src/lib.rs @@ -454,6 +454,24 @@ impl Service { other => other, } }); + + active_search.sort_by(|a, b| { + let plug1 = match plugins.get(a.0) { + Some(plug) => plug, + None => return Ordering::Greater, + }; + + let plug2 = match plugins.get(b.0) { + Some(plug) => plug, + None => return Ordering::Less, + }; + + plug1 + .config + .query + .priority + .cmp(&plug2.config.query.priority) + }) } let take = if last_query.starts_with('/') | last_query.starts_with('~') { diff --git a/service/src/plugins/config.rs b/service/src/plugins/config.rs index 65a2fb0..d0febcf 100644 --- a/service/src/plugins/config.rs +++ b/service/src/plugins/config.rs @@ -52,6 +52,9 @@ pub struct PluginQuery { #[serde(default)] pub persistent: bool, + #[serde(default)] + pub priority: PluginPriority, + #[serde( default, skip_serializing_if = "Option::is_none", @@ -60,6 +63,19 @@ pub struct PluginQuery { pub regex: Option>, } +#[derive(Copy, Clone, Debug, Deserialize, Eq, PartialEq, PartialOrd, Ord)] +pub enum PluginPriority { + High = 0, + Default = 1, + Low = 2, +} + +impl Default for PluginPriority { + fn default() -> Self { + Self::Default + } +} + pub fn load(source: &Path, config_path: &Path) -> Option<(PathBuf, PluginConfig, Option)> { if let Ok(config_bytes) = std::fs::read_to_string(&config_path) { let config = match ron::from_str::(&config_bytes) { diff --git a/service/src/plugins/help.rs b/service/src/plugins/help.rs index 737ef4b..79855f6 100644 --- a/service/src/plugins/help.rs +++ b/service/src/plugins/help.rs @@ -16,6 +16,7 @@ pub const CONFIG: PluginConfig = PluginConfig { isolate: true, no_sort: true, persistent: false, + priority: PluginPriority::Default, regex: None, }, icon: Some(IconSource::Name(Cow::Borrowed("system-help-symbolic"))), diff --git a/service/src/plugins/mod.rs b/service/src/plugins/mod.rs index 43d06d9..adeea6e 100644 --- a/service/src/plugins/mod.rs +++ b/service/src/plugins/mod.rs @@ -2,7 +2,7 @@ mod config; pub(crate) mod external; pub mod help; -pub use self::config::{PluginBinary, PluginConfig, PluginQuery}; +pub use self::config::{PluginBinary, PluginConfig, PluginPriority, PluginQuery}; pub use self::external::ExternalPlugin; pub use self::help::HelpPlugin;