#search #gnome #provider #dbus

search-provider

Rust 包装的 GNOME Shell 搜索提供者 API

13 个版本 (8 个破坏性版本)

0.10.0 2024年7月10日
0.8.1 2024年2月22日
0.7.0 2024年2月4日
0.6.0 2023年7月24日
0.1.0 2019年5月6日

#564GUI

Download history 112/week @ 2024-05-04 120/week @ 2024-05-11 99/week @ 2024-05-18 583/week @ 2024-05-25 262/week @ 2024-06-01 223/week @ 2024-06-08 216/week @ 2024-06-15 150/week @ 2024-06-22 130/week @ 2024-06-29 431/week @ 2024-07-06 269/week @ 2024-07-13 151/week @ 2024-07-20 130/week @ 2024-07-27 106/week @ 2024-08-03 91/week @ 2024-08-10 94/week @ 2024-08-17

每月445 次下载
用于 2 crates

GPL-3.0-or-later

19KB
296

search-provider

Rust 包装的 GNOME Shell 搜索提供者 API


lib.rs:

该包旨在提供一个简单的包装器,用于围绕 GNOME Shell 搜索提供者 DBus 接口。

如何使用

use search_provider::{ResultID, ResultMeta, SearchProviderImpl};
use std::collections::HashMap;

#[derive(Debug)]
struct Application {
    results: HashMap<String, String>,
}
impl SearchProviderImpl for Application {
    fn activate_result(&self, identifier: ResultID, terms: &[String], timestamp: u32) {
        let result = self.results.get(&identifier);
        println!(
            "activating result {:#?} identified by {}",
            result, identifier
        );
    }

    fn initial_result_set(&self, terms: &[String]) -> Vec<ResultID> {
        // Here do your search logic
        if terms.contains(&"some_value".to_owned()) {
            vec!["some_key".to_owned()]
        } else {
            vec![]
        }
    }

    fn result_metas(&self, identifiers: &[ResultID]) -> Vec<ResultMeta> {
        self.results
            .iter()
            .map(|(identifier, value)| {
                ResultMeta::builder(identifier.to_owned(), "Some name")
                    .description("Some description of the current identifier")
                    .build()
            })
            .collect::<Vec<_>>()
    }
}
use search_provider::SearchProvider;
use std::collections::HashMap;

async fn main_entry() -> zbus::Result<()> {
    let mut results = HashMap::new();
    results.insert("some_key".to_string(), "some_value".to_string());
    let app = Application { results };
    let provider = SearchProvider::new(
        app,
        "org.gnome.design.IconLibrary.SearchProvider",
        "/org/gnome/design/IconLibrary/SearchProvider",
    )
    .await?;
    Ok(())
}

依赖关系

~6–19MB
~279K SLoC