feat(plugin): discover external plugin packages from the plugins folder
Phase-2 groundwork: scan <config>/OpenCADStudio/plugins/<id>/plugin.toml, parse the documented keys (no new TOML dep), check for a platform native library beside it, and gate on the API version. The Plugin Manager gains an "External (plugins folder)" section showing each package with a status pill (Ready to load / API incompatible / No library). Discovery only — actually loading the cdylib is the next step. Part of the #100 extensibility epic (phase 2). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
5ccf5cfe36
commit
f6219a9609
6 changed files with 321 additions and 7 deletions
|
|
@ -297,6 +297,9 @@ pub(super) struct OpenCADStudio {
|
|||
/// keep their manifest listed but drop their ribbon tab and command
|
||||
/// dispatch. Persisted via [`settings::UserSettings::disabled_plugins`].
|
||||
disabled_plugins: rustc_hash::FxHashSet<String>,
|
||||
/// External add-on packages found in the plugins folder, refreshed when the
|
||||
/// Plugin Manager opens. Discovery only — not yet loaded (phase 2).
|
||||
external_plugins: Vec<crate::plugin::external::ExternalPlugin>,
|
||||
/// PDSIZE text buffer for the Point Style (DDPTYPE) dialog.
|
||||
point_size_buf: String,
|
||||
/// Point Style size mode: `true` = relative to screen, `false` = absolute.
|
||||
|
|
@ -1461,6 +1464,7 @@ impl OpenCADStudio {
|
|||
modal_drag_last: None,
|
||||
modal_dragging: false,
|
||||
disabled_plugins: rustc_hash::FxHashSet::default(),
|
||||
external_plugins: Vec::new(),
|
||||
point_size_buf: String::new(),
|
||||
point_size_relative: true,
|
||||
default_assoc_prompted: false,
|
||||
|
|
|
|||
|
|
@ -5526,6 +5526,9 @@ impl OpenCADStudio {
|
|||
|
||||
// ── Plugin Manager window ─────────────────────────────────────
|
||||
Message::PluginManagerOpen => {
|
||||
// Refresh the on-disk external-plugin list each time the manager
|
||||
// opens so newly dropped-in packages show up.
|
||||
self.external_plugins = crate::plugin::external::discover();
|
||||
self.active_modal = Some(super::ModalKind::PluginManager);
|
||||
Task::none()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1124,6 +1124,7 @@ impl OpenCADStudio {
|
|||
crate::ui::plugin_manager::view_window(
|
||||
&crate::plugin::installed_manifests(),
|
||||
&self.disabled_plugins,
|
||||
&self.external_plugins,
|
||||
),
|
||||
520,
|
||||
460,
|
||||
|
|
|
|||
Loading…
Reference in a new issue