Skip to content

Commit

Permalink
add disable, enable and remove functionality to plugins
Browse files Browse the repository at this point in the history
add plugins.toml to record disabled plugins

revert change to Cargo.toml

fix clippy
  • Loading branch information
bbrabbitt committed Jul 28, 2022
1 parent b315e10 commit 2838788
Show file tree
Hide file tree
Showing 12 changed files with 592 additions and 184 deletions.
17 changes: 14 additions & 3 deletions lapce-data/src/command.rs
Expand Up @@ -398,6 +398,13 @@ pub enum LapceWorkbenchCommand {
PreviousEditorTab,
}

#[derive(Debug, Clone)]
pub enum PluginLoadingStatus {
Loading,
Failed,
Ok(Vec<PluginDescription>),
}

#[derive(Debug)]
pub enum EnsureVisiblePosition {
// Move the view so the cursor line will be at the center of the window. If
Expand Down Expand Up @@ -495,9 +502,13 @@ pub enum LapceUICommand {
UpdateExplorerItems(PathBuf, HashMap<PathBuf, FileNodeItem>, bool),
UpdateInstalledPlugins(HashMap<String, PluginDescription>),
UpdatePluginDescriptions(Vec<PluginDescription>),
UpdateInstalledPluginDescriptions(Option<Vec<PluginDescription>>),
UpdateUninstalledPluginDescriptions(Option<Vec<PluginDescription>>),
DeleteUninstalledPluginDescriptions(Vec<PluginDescription>),
UpdateInstalledPluginDescriptions(PluginLoadingStatus),
UpdateUninstalledPluginDescriptions(PluginLoadingStatus),
UpdatePluginInstallationChange(HashMap<String, PluginDescription>),
UpdateDisabledPlugins(HashMap<String, PluginDescription>),
DisablePlugin(PluginDescription),
EnablePlugin(PluginDescription),
RemovePlugin(PluginDescription),
RequestLayout,
RequestPaint,
ResetFade,
Expand Down
62 changes: 37 additions & 25 deletions lapce-data/src/data.rs
Expand Up @@ -47,8 +47,8 @@ use crate::{
alert::{AlertContentData, AlertData},
command::{
CommandKind, EnsureVisiblePosition, LapceCommand, LapceUICommand,
LapceWorkbenchCommand, LAPCE_COMMAND, LAPCE_OPEN_FILE, LAPCE_OPEN_FOLDER,
LAPCE_UI_COMMAND,
LapceWorkbenchCommand, PluginLoadingStatus, LAPCE_COMMAND, LAPCE_OPEN_FILE,
LAPCE_OPEN_FOLDER, LAPCE_UI_COMMAND,
},
completion::CompletionData,
config::{Config, ConfigWatcher, GetConfig, LapceTheme},
Expand Down Expand Up @@ -188,38 +188,47 @@ impl LapceData {
.collect::<Vec<PluginDescription>>();
let _ = event_sink.submit_command(
LAPCE_UI_COMMAND,
LapceUICommand::UpdateInstalledPluginDescriptions(Some(
plugins.clone(),
)),
LapceUICommand::UpdateInstalledPluginDescriptions(
PluginLoadingStatus::Ok(plugins.clone()),
),
Target::Auto,
);
let _ = event_sink.submit_command(
LAPCE_UI_COMMAND,
LapceUICommand::UpdateDisabledPlugins(catalog.disabled.clone()),
Target::Auto,
);
if let Ok(fetched_plugins) = LapceData::load_plugin_descriptions() {
let (installed, uninstalled) =
fetched_plugins.into_iter().partition(|p| {
plugins
.iter()
.find(|ip| ip.name == p.name)
.ok_or(())
.is_ok()
});
let (installed, uninstalled): (
Vec<PluginDescription>,
Vec<PluginDescription>,
) = fetched_plugins.into_iter().partition(|p| {
plugins
.iter()
.find(|ip| ip.name == p.name)
.ok_or(())
.is_ok()
});
let _ = event_sink.submit_command(
LAPCE_UI_COMMAND,
LapceUICommand::UpdateInstalledPluginDescriptions(Some(
installed,
)),
LapceUICommand::UpdateInstalledPluginDescriptions(
PluginLoadingStatus::Ok(installed),
),
Target::Auto,
);
let _ = event_sink.submit_command(
LAPCE_UI_COMMAND,
LapceUICommand::UpdateUninstalledPluginDescriptions(Some(
uninstalled,
)),
LapceUICommand::UpdateUninstalledPluginDescriptions(
PluginLoadingStatus::Ok(uninstalled),
),
Target::Auto,
);
} else {
let _ = event_sink.submit_command(
LAPCE_UI_COMMAND,
LapceUICommand::UpdateUninstalledPluginDescriptions(None),
LapceUICommand::UpdateUninstalledPluginDescriptions(
PluginLoadingStatus::Failed,
),
Target::Auto,
);
}
Expand Down Expand Up @@ -262,7 +271,7 @@ impl LapceData {
env.set(LapceTheme::INPUT_FONT_SIZE, 13u64);
}

fn load_plugin_descriptions() -> Result<Vec<PluginDescription>> {
pub fn load_plugin_descriptions() -> Result<Vec<PluginDescription>> {
let plugins: Vec<String> =
reqwest::blocking::get("https://lapce.github.io/plugins.json")?
.json()?;
Expand Down Expand Up @@ -509,9 +518,10 @@ pub struct LapceTabData {
pub plugin: Arc<PluginData>,
pub picker: Arc<FilePickerData>,
pub plugins: Arc<Vec<PluginDescription>>,
pub installed_plugins_desc: Arc<Option<Vec<PluginDescription>>>,
pub uninstalled_plugins_desc: Arc<Option<Vec<PluginDescription>>>,
pub installed_plugins_desc: Arc<PluginLoadingStatus>,
pub uninstalled_plugins_desc: Arc<PluginLoadingStatus>,
pub installed_plugins: Arc<HashMap<String, PluginDescription>>,
pub disabled_plugins: Arc<HashMap<String, PluginDescription>>,
pub file_explorer: Arc<FileExplorerData>,
pub proxy: Arc<LapceProxy>,
pub proxy_status: Arc<ProxyStatus>,
Expand Down Expand Up @@ -557,6 +567,7 @@ impl Data for LapceTabData {
&& self
.uninstalled_plugins_desc
.same(&other.uninstalled_plugins_desc)
&& self.disabled_plugins.same(&other.disabled_plugins)
&& self.installed_plugins.same(&other.installed_plugins)
&& self.picker.same(&other.picker)
&& self.drag.same(&other.drag)
Expand Down Expand Up @@ -690,8 +701,9 @@ impl LapceTabData {
problem,
search,
plugins: Arc::new(Vec::new()),
installed_plugins_desc: Arc::new(Some(Vec::new())),
uninstalled_plugins_desc: Arc::new(Some(Vec::new())),
disabled_plugins: Arc::new(HashMap::new()),
installed_plugins_desc: Arc::new(PluginLoadingStatus::Ok(Vec::new())),
uninstalled_plugins_desc: Arc::new(PluginLoadingStatus::Ok(Vec::new())),
installed_plugins: Arc::new(HashMap::new()),
find: Arc::new(Find::new(0)),
picker: file_picker,
Expand Down
1 change: 1 addition & 0 deletions lapce-data/src/plugin.rs
Expand Up @@ -28,4 +28,5 @@ pub enum PluginStatus {
Installed,
Install,
Upgrade,
Disabled,
}
31 changes: 20 additions & 11 deletions lapce-data/src/proxy.rs
Expand Up @@ -125,23 +125,17 @@ impl Handler for LapceProxy {
LapceUICommand::UpdateInstalledPlugins(plugins.clone()),
Target::Widget(self.tab_id),
);
let plugins_desc = plugins
.iter()
.map(|(_, desc)| desc.to_owned())
.collect::<Vec<PluginDescription>>();
let _ = self.event_sink.submit_command(
LAPCE_UI_COMMAND,
LapceUICommand::UpdateInstalledPluginDescriptions(Some(
plugins_desc.clone(),
)),
LapceUICommand::UpdatePluginInstallationChange(plugins),
Target::Widget(self.tab_id),
);
}
DisabledPlugins { plugins } => {
let _ = self.event_sink.submit_command(
LAPCE_UI_COMMAND,
LapceUICommand::DeleteUninstalledPluginDescriptions(
plugins_desc,
),
Target::Widget(self.tab_id),
LapceUICommand::UpdateDisabledPlugins(plugins),
Target::Auto,
);
}
DiffInfo { diff } => {
Expand Down Expand Up @@ -437,6 +431,21 @@ impl LapceProxy {
.send_rpc_notification("install_plugin", &json!({ "plugin": plugin }));
}

pub fn disable_plugin(&self, plugin: &PluginDescription) {
self.rpc
.send_rpc_notification("disable_plugin", &json!({ "plugin": plugin }))
}

pub fn enable_plugin(&self, plugin: &PluginDescription) {
self.rpc
.send_rpc_notification("enable_plugin", &json!({ "plugin": plugin }))
}

pub fn remove_plugin(&self, plugin: &PluginDescription) {
self.rpc
.send_rpc_notification("remove_plugin", &json!({ "plugin": plugin }));
}

pub fn get_buffer_head(
&self,
buffer_id: BufferId,
Expand Down
65 changes: 65 additions & 0 deletions lapce-proxy/src/dispatch.rs
Expand Up @@ -372,6 +372,71 @@ impl Dispatcher {
);
});
}
DisablePlugin { plugin } => {
let catalog = self.plugins.clone();
let dispatcher = self.clone();
std::thread::spawn(move || {
if let Err(e) = catalog
.lock()
.disable_plugin(dispatcher.clone(), plugin.clone())
{
eprintln!("disable plugin error {e}");
}
let plugins = { dispatcher.plugins.lock().disabled.clone() };
dispatcher.send_notification(
"disabled_plugins",
json!({
"plugins": plugins,
}),
)
});
}
EnablePlugin { plugin } => {
let catalog = self.plugins.clone();
let dispatcher = self.clone();
std::thread::spawn(move || {
if let Err(e) = catalog
.lock()
.enable_plugin(dispatcher.clone(), plugin.clone())
{
eprintln!("enable plugin error {e}");
}
let plugins = { dispatcher.plugins.lock().disabled.clone() };
dispatcher.send_notification(
"disabled_plugins",
json!({
"plugins": plugins,
}),
)
});
}
RemovePlugin { plugin } => {
let catalog = self.plugins.clone();
let dispatcher = self.clone();
std::thread::spawn(move || {
if let Err(e) = catalog
.lock()
.remove_plugin(dispatcher.clone(), plugin.clone())
{
eprintln!("remove plugin error {e}");
}
let plugins = { dispatcher.plugins.lock().items.clone() };
dispatcher.send_notification(
"installed_plugins",
json!({
"plugins": plugins,
}),
);
let disabled_plugins =
{ dispatcher.plugins.lock().disabled.clone() };
dispatcher.send_notification(
"disabled_plugins",
json!({
"plugins": disabled_plugins,
}),
);
});
}
NewTerminal {
term_id,
cwd,
Expand Down
6 changes: 6 additions & 0 deletions lapce-proxy/src/lsp.rs
Expand Up @@ -114,6 +114,12 @@ impl LspCatalog {
self.dispatcher.take();
}

pub fn stop_language_lsp(&mut self, lang: &String) {
if let Some(lsp) = self.clients.get(lang) {
lsp.stop();
}
}

pub fn start_server(
&mut self,
exec_path: &str,
Expand Down

0 comments on commit 2838788

Please sign in to comment.