extension_events.rs

 1use std::sync::Arc;
 2
 3use gpui::{App, AppContext as _, Context, Entity, EventEmitter, Global};
 4
 5use crate::ExtensionManifest;
 6
 7pub fn init(cx: &mut App) {
 8    let extension_events = cx.new(ExtensionEvents::new);
 9    cx.set_global(GlobalExtensionEvents(extension_events));
10}
11
12struct GlobalExtensionEvents(Entity<ExtensionEvents>);
13
14impl Global for GlobalExtensionEvents {}
15
16/// An event bus for broadcasting extension-related events throughout the app.
17pub struct ExtensionEvents;
18
19impl ExtensionEvents {
20    /// Returns the global [`ExtensionEvents`].
21    pub fn try_global(cx: &App) -> Option<Entity<Self>> {
22        return cx
23            .try_global::<GlobalExtensionEvents>()
24            .map(|g| g.0.clone());
25    }
26
27    fn new(_cx: &mut Context<Self>) -> Self {
28        Self
29    }
30
31    pub fn emit(&mut self, event: Event, cx: &mut Context<Self>) {
32        cx.emit(event)
33    }
34}
35
36#[derive(Clone)]
37pub enum Event {
38    ExtensionInstalled(Arc<ExtensionManifest>),
39    ExtensionUninstalled(Arc<ExtensionManifest>),
40    ExtensionsInstalledChanged,
41    ConfigureExtensionRequested(Arc<ExtensionManifest>),
42}
43
44impl EventEmitter<Event> for ExtensionEvents {}