BREAKING: Restructure from monolithic binary to modular plugin ecosystem Architecture changes: - Convert to Cargo workspace with crates/ directory - Create owlry-plugin-api crate with ABI-stable interface (abi_stable) - Move core binary to crates/owlry/ - Extract providers to native plugin crates (13 plugins) - Add owlry-lua crate for Lua plugin runtime Plugin system: - Plugins loaded from /usr/lib/owlry/plugins/*.so - Widget providers refresh automatically (universal, not hardcoded) - Per-plugin config via [plugins.<name>] sections in config.toml - Backwards compatible with [providers] config format New features: - just install-local: build and install core + all plugins - Plugin config: weather and pomodoro read from [plugins.*] - HostAPI for plugins: notifications, logging Documentation: - Update README with new package structure - Add docs/PLUGINS.md with all plugin documentation - Add docs/PLUGIN_DEVELOPMENT.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
53 lines
1.5 KiB
Rust
53 lines
1.5 KiB
Rust
//! Lua API implementations for plugins
|
|
//!
|
|
//! This module provides the `owlry` global table and its submodules
|
|
//! that plugins can use to interact with owlry.
|
|
|
|
mod provider;
|
|
mod utils;
|
|
|
|
use mlua::{Lua, Result as LuaResult};
|
|
use owlry_plugin_api::PluginItem;
|
|
|
|
use crate::loader::ProviderRegistration;
|
|
|
|
/// Register all owlry APIs in the Lua runtime
|
|
pub fn register_apis(lua: &Lua, plugin_dir: &std::path::Path, plugin_id: &str) -> LuaResult<()> {
|
|
let globals = lua.globals();
|
|
|
|
// Create the main owlry table
|
|
let owlry = lua.create_table()?;
|
|
|
|
// Register utility APIs (log, path, fs, json)
|
|
utils::register_log_api(lua, &owlry)?;
|
|
utils::register_path_api(lua, &owlry, plugin_dir)?;
|
|
utils::register_fs_api(lua, &owlry, plugin_dir)?;
|
|
utils::register_json_api(lua, &owlry)?;
|
|
|
|
// Register provider API
|
|
provider::register_provider_api(lua, &owlry)?;
|
|
|
|
// Set owlry as global
|
|
globals.set("owlry", owlry)?;
|
|
|
|
// Suppress unused warnings
|
|
let _ = plugin_id;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
/// Get provider registrations from the Lua runtime
|
|
pub fn get_provider_registrations(lua: &Lua) -> LuaResult<Vec<ProviderRegistration>> {
|
|
provider::get_registrations(lua)
|
|
}
|
|
|
|
/// Call a provider's refresh function
|
|
pub fn call_refresh(lua: &Lua, provider_name: &str) -> LuaResult<Vec<PluginItem>> {
|
|
provider::call_refresh(lua, provider_name)
|
|
}
|
|
|
|
/// Call a provider's query function
|
|
pub fn call_query(lua: &Lua, provider_name: &str, query: &str) -> LuaResult<Vec<PluginItem>> {
|
|
provider::call_query(lua, provider_name, query)
|
|
}
|