aboutsummaryrefslogtreecommitdiff
path: root/src/app/api/plugins/context.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-06-18 16:05:05 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-06-18 16:05:43 +0300
commitd74ba8ca9e49d9d94a4e59a0ee0bdbd1128af76e (patch)
tree13473d5a8c3fd137f40e645e9f9eff3081ce3238 /src/app/api/plugins/context.rs
parentb7a504b35e54e68ca7aceb01d21f066124f7a536 (diff)
fix: emit plugin lifecycle events from ui worktree flows
refs #662
Diffstat (limited to 'src/app/api/plugins/context.rs')
-rw-r--r--src/app/api/plugins/context.rs49
1 files changed, 37 insertions, 12 deletions
diff --git a/src/app/api/plugins/context.rs b/src/app/api/plugins/context.rs
index cd7d1818..92d0d4c6 100644
--- a/src/app/api/plugins/context.rs
+++ b/src/app/api/plugins/context.rs
@@ -63,14 +63,31 @@ impl App {
})
}),
EventData::WorkspaceRenamed { workspace_id, .. }
- | EventData::WorkspaceFocused { workspace_id }
- | EventData::WorktreeRemoved { workspace_id, .. } => self
+ | EventData::WorkspaceFocused { workspace_id } => self
.plugin_context_for_workspace_id(workspace_id, correlation_id)
.unwrap_or_else(|| {
let mut context = empty_plugin_context(correlation_id);
context.workspace_id = Some(workspace_id.clone());
context
}),
+ EventData::WorktreeRemoved {
+ workspace_id,
+ workspace,
+ worktree,
+ ..
+ } => workspace
+ .as_ref()
+ .map(|workspace| {
+ self.plugin_context_for_workspace_snapshot(workspace, correlation_id)
+ })
+ .or_else(|| self.plugin_context_for_workspace_id(workspace_id, correlation_id))
+ .unwrap_or_else(|| {
+ let mut context = empty_plugin_context(correlation_id);
+ context.workspace_id = Some(workspace_id.clone());
+ context.workspace_label = Some(worktree.label.clone());
+ context.workspace_cwd = Some(worktree.path.clone());
+ context
+ }),
EventData::TabCreated { tab } => self.plugin_context_for_tab_info(tab, correlation_id),
EventData::TabClosed {
tab_id,
@@ -168,19 +185,27 @@ impl App {
) -> PluginInvocationContext {
self.plugin_context_for_workspace_id(&workspace.workspace_id, correlation_id)
.unwrap_or_else(|| {
- let mut context = empty_plugin_context(correlation_id);
- context.workspace_id = Some(workspace.workspace_id.clone());
- context.workspace_label = Some(workspace.label.clone());
- context.workspace_cwd = workspace
- .worktree
- .as_ref()
- .map(|worktree| worktree.checkout_path.clone());
- context.worktree = workspace.worktree.clone();
- context.tab_id = Some(workspace.active_tab_id.clone());
- context
+ self.plugin_context_for_workspace_snapshot(workspace, correlation_id)
})
}
+ fn plugin_context_for_workspace_snapshot(
+ &self,
+ workspace: &crate::api::schema::WorkspaceInfo,
+ correlation_id: &str,
+ ) -> PluginInvocationContext {
+ let mut context = empty_plugin_context(correlation_id);
+ context.workspace_id = Some(workspace.workspace_id.clone());
+ context.workspace_label = Some(workspace.label.clone());
+ context.workspace_cwd = workspace
+ .worktree
+ .as_ref()
+ .map(|worktree| worktree.checkout_path.clone());
+ context.worktree = workspace.worktree.clone();
+ context.tab_id = Some(workspace.active_tab_id.clone());
+ context
+ }
+
fn plugin_context_for_tab_id(
&self,
tab_id: &str,