summaryrefslogtreecommitdiffstats
path: root/zellij-server/src/plugins/plugin_loader.rs
diff options
context:
space:
mode:
Diffstat (limited to 'zellij-server/src/plugins/plugin_loader.rs')
-rw-r--r--zellij-server/src/plugins/plugin_loader.rs17
1 files changed, 17 insertions, 0 deletions
diff --git a/zellij-server/src/plugins/plugin_loader.rs b/zellij-server/src/plugins/plugin_loader.rs
index b74c80b18..fafeeb22c 100644
--- a/zellij-server/src/plugins/plugin_loader.rs
+++ b/zellij-server/src/plugins/plugin_loader.rs
@@ -66,6 +66,7 @@ pub struct PluginLoader<'a> {
client_attributes: ClientAttributes,
default_shell: Option<TerminalAction>,
default_layout: Box<Layout>,
+ layout_dir: Option<PathBuf>,
}
impl<'a> PluginLoader<'a> {
@@ -84,6 +85,7 @@ impl<'a> PluginLoader<'a> {
client_attributes: ClientAttributes,
default_shell: Option<TerminalAction>,
default_layout: Box<Layout>,
+ layout_dir: Option<PathBuf>,
) -> Result<()> {
let err_context = || format!("failed to reload plugin {plugin_id} from memory");
let mut connected_clients: Vec<ClientId> =
@@ -108,6 +110,7 @@ impl<'a> PluginLoader<'a> {
client_attributes,
default_shell,
default_layout,
+ layout_dir,
)?;
plugin_loader
.load_module_from_memory()
@@ -149,6 +152,7 @@ impl<'a> PluginLoader<'a> {
default_shell: Option<TerminalAction>,
default_layout: Box<Layout>,
skip_cache: bool,
+ layout_dir: Option<PathBuf>,
) -> Result<()> {
let err_context = || format!("failed to start plugin {plugin_id} for client {client_id}");
let mut plugin_loader = PluginLoader::new(
@@ -168,6 +172,7 @@ impl<'a> PluginLoader<'a> {
client_attributes,
default_shell,
default_layout,
+ layout_dir,
)?;
if skip_cache {
plugin_loader
@@ -231,6 +236,7 @@ impl<'a> PluginLoader<'a> {
client_attributes: ClientAttributes,
default_shell: Option<TerminalAction>,
default_layout: Box<Layout>,
+ layout_dir: Option<PathBuf>,
) -> Result<()> {
let mut new_plugins = HashSet::new();
for plugin_id in plugin_map.lock().unwrap().plugin_ids() {
@@ -252,6 +258,7 @@ impl<'a> PluginLoader<'a> {
client_attributes.clone(),
default_shell.clone(),
default_layout.clone(),
+ layout_dir.clone(),
)?;
plugin_loader
.load_module_from_memory()
@@ -285,6 +292,7 @@ impl<'a> PluginLoader<'a> {
client_attributes: ClientAttributes,
default_shell: Option<TerminalAction>,
default_layout: Box<Layout>,
+ layout_dir: Option<PathBuf>,
) -> Result<()> {
let err_context = || format!("failed to reload plugin id {plugin_id}");
@@ -310,6 +318,7 @@ impl<'a> PluginLoader<'a> {
client_attributes,
default_shell,
default_layout,
+ layout_dir,
)?;
plugin_loader
.compile_module()
@@ -347,6 +356,7 @@ impl<'a> PluginLoader<'a> {
client_attributes: ClientAttributes,
default_shell: Option<TerminalAction>,
default_layout: Box<Layout>,
+ layout_dir: Option<PathBuf>,
) -> Result<Self> {
let plugin_own_data_dir = ZELLIJ_SESSION_CACHE_DIR
.join(Url::from(&plugin.location).to_string())
@@ -373,6 +383,7 @@ impl<'a> PluginLoader<'a> {
client_attributes,
default_shell,
default_layout,
+ layout_dir,
})
}
pub fn new_from_existing_plugin_attributes(
@@ -390,6 +401,7 @@ impl<'a> PluginLoader<'a> {
client_attributes: ClientAttributes,
default_shell: Option<TerminalAction>,
default_layout: Box<Layout>,
+ layout_dir: Option<PathBuf>,
) -> Result<Self> {
let err_context = || "Failed to find existing plugin";
let (running_plugin, _subscriptions, _workers) = {
@@ -423,6 +435,7 @@ impl<'a> PluginLoader<'a> {
client_attributes,
default_shell,
default_layout,
+ layout_dir,
)
}
pub fn new_from_different_client_id(
@@ -440,6 +453,7 @@ impl<'a> PluginLoader<'a> {
client_attributes: ClientAttributes,
default_shell: Option<TerminalAction>,
default_layout: Box<Layout>,
+ layout_dir: Option<PathBuf>,
) -> Result<Self> {
let err_context = || "Failed to find existing plugin";
let running_plugin = {
@@ -474,6 +488,7 @@ impl<'a> PluginLoader<'a> {
client_attributes,
default_shell,
default_layout,
+ layout_dir,
)
}
pub fn load_module_from_memory(&mut self) -> Result<Module> {
@@ -737,6 +752,7 @@ impl<'a> PluginLoader<'a> {
self.client_attributes.clone(),
self.default_shell.clone(),
self.default_layout.clone(),
+ self.layout_dir.clone(),
)?;
plugin_loader_for_client
.load_module_from_memory()
@@ -845,6 +861,7 @@ impl<'a> PluginLoader<'a> {
plugin_cwd: self.zellij_cwd.clone(),
input_pipes_to_unblock: Arc::new(Mutex::new(HashSet::new())),
input_pipes_to_block: Arc::new(Mutex::new(HashSet::new())),
+ layout_dir: self.layout_dir.clone(),
};
let subscriptions = Arc::new(Mutex::new(HashSet::new()));