summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2023-12-19 15:29:33 +0100
committerAram Drevekenin <aram@poor.dev>2023-12-19 15:29:33 +0100
commit76710e7261288332d5ba84106cf055bfcb32ab25 (patch)
tree9a5e6be39fadd7be7172a8713a0f1e5cfafb876c
parentdcdb31e8515876ed8f78f53cd4a340a0ce532663 (diff)
prototype - working after removing unused stuff
-rw-r--r--zellij-server/src/plugins/mod.rs16
-rw-r--r--zellij-server/src/plugins/wasm_bridge.rs1
-rw-r--r--zellij-server/src/plugins/zellij_exports.rs22
-rw-r--r--zellij-tile/src/shim.rs8
-rw-r--r--zellij-utils/assets/prost/api.plugin_command.rs13
-rw-r--r--zellij-utils/assets/prost/api.plugin_permission.rs3
-rw-r--r--zellij-utils/src/data.rs3
-rw-r--r--zellij-utils/src/errors.rs1
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.proto10
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.rs10
-rw-r--r--zellij-utils/src/plugin_api/plugin_permission.proto1
-rw-r--r--zellij-utils/src/plugin_api/plugin_permission.rs2
12 files changed, 28 insertions, 62 deletions
diff --git a/zellij-server/src/plugins/mod.rs b/zellij-server/src/plugins/mod.rs
index 65f18dcb0..2d34cabd8 100644
--- a/zellij-server/src/plugins/mod.rs
+++ b/zellij-server/src/plugins/mod.rs
@@ -100,7 +100,6 @@ pub enum PluginInstruction {
),
DumpLayout(SessionLayoutMetadata, ClientId),
LogLayoutToHd(SessionLayoutMetadata),
- SubscribePluginToCustomMessage(PluginId, ClientId, String), // String -> custom message name
Message {
name: String,
payload: Option<String>,
@@ -138,7 +137,6 @@ impl From<&PluginInstruction> for PluginContext {
},
PluginInstruction::DumpLayout(..) => PluginContext::DumpLayout,
PluginInstruction::LogLayoutToHd(..) => PluginContext::LogLayoutToHd,
- PluginInstruction::SubscribePluginToCustomMessage(..) => PluginContext::SubscribePluginToCustomMessage,
PluginInstruction::Message{..} => PluginContext::Message,
}
}
@@ -180,8 +178,6 @@ pub(crate) fn plugin_thread_main(
layout.clone(),
);
- let mut plugin_custom_message_subscriptions: HashMap<(PluginId, ClientId), HashSet<String>> = HashMap::new();
-
loop {
let (event, mut err_ctx) = bus.recv().expect("failed to receive event on channel");
err_ctx.add_call(ContextType::Plugin((&event).into()));
@@ -409,14 +405,16 @@ pub(crate) fn plugin_thread_main(
.send_to_pty(PtyInstruction::LogLayoutToHd(session_layout_metadata)),
);
},
- PluginInstruction::SubscribePluginToCustomMessage(plugin_id, client_id, custom_message_name) => {
- plugin_custom_message_subscriptions.entry((plugin_id, client_id)).or_insert_with(HashSet::new).insert(custom_message_name);
- },
PluginInstruction::Message{name, payload, plugin, args} => { // TODO: remove client_id,
// it's from the cli
// TODO CONTINUE HERE(18/12):
- // * make plugin pretty and make POC with pausing and filtering
- // * remove subscribe mechanism,
+ // * make plugin pretty and make POC with pausing and filtering - DONE
+ // * remove subscribe mechanism, - DONE
+ // * change unblock mechanism to block - Nah
+ // * add permissions - DONE
+ // * tests?
+ // * launch plugin if no instances exist and messaging/piping
+ // * allow plugins to send/pipe messages to each other
// * we send name+payload either to all plugins if
// plugin is None or to the specific plugin if it is Some, then adjust accordingly
// in cli_client et al. - DONE (untested with single plugin)
diff --git a/zellij-server/src/plugins/wasm_bridge.rs b/zellij-server/src/plugins/wasm_bridge.rs
index b4a594abc..961c9c402 100644
--- a/zellij-server/src/plugins/wasm_bridge.rs
+++ b/zellij-server/src/plugins/wasm_bridge.rs
@@ -866,6 +866,7 @@ fn check_event_permission(
| Event::CopyToClipboard(..)
| Event::SystemClipboardFailure
| Event::InputReceived => PermissionType::ReadApplicationState,
+ Event::Message {..} => PermissionType::ReadCliMessages,
_ => return (PermissionStatus::Granted, None),
};
diff --git a/zellij-server/src/plugins/zellij_exports.rs b/zellij-server/src/plugins/zellij_exports.rs
index 81ecbd146..a4d075806 100644
--- a/zellij-server/src/plugins/zellij_exports.rs
+++ b/zellij-server/src/plugins/zellij_exports.rs
@@ -240,13 +240,10 @@ fn host_run_plugin_command(env: FunctionEnvMut<ForeignFunctionEnv>) {
PluginCommand::RenameSession(new_session_name) => {
rename_session(env, new_session_name)
},
- PluginCommand::SubscribeToCustomMessage(custom_message_name) => {
- subscribe_to_custom_message(env, custom_message_name)?
- },
- PluginCommand::UnblockPipeInput(pipe_name) => { // TODO: permissions!
+ PluginCommand::UnblockPipeInput(pipe_name) => {
unblock_pipe_input(env, pipe_name)?
},
- PluginCommand::PipeOutput(pipe_name, output) => { // TODO: permissions!
+ PluginCommand::PipeOutput(pipe_name, output) => {
pipe_output(env, pipe_name, output)?
},
},
@@ -281,24 +278,11 @@ fn subscribe(env: &ForeignFunctionEnv, event_list: HashSet<EventType>) -> Result
))
}
-// TODO: permissions!!!111oneoneone
-fn subscribe_to_custom_message(env: &ForeignFunctionEnv, custom_message_name: String) -> Result<()> {
- env.plugin_env
- .senders
- .send_to_plugin(PluginInstruction::SubscribePluginToCustomMessage(
- env.plugin_env.plugin_id,
- env.plugin_env.client_id,
- custom_message_name,
- ))
-}
-
-// TODO: permissions!!!111oneoneone
fn unblock_pipe_input(env: &ForeignFunctionEnv, pipe_name: String) -> Result<()> {
env.plugin_env.input_pipes_to_unblock.lock().unwrap().insert(pipe_name);
Ok(()) // TODO: no result return
}
-// TODO: permissions!!!111oneoneone
fn pipe_output(env: &ForeignFunctionEnv, pipe_name: String, output: String) -> Result<()> {
env.plugin_env
.senders
@@ -1387,6 +1371,8 @@ fn check_command_permission(
| PluginCommand::DeleteAllDeadSessions
| PluginCommand::RenameSession(..)
| PluginCommand::RenameTab(..) => PermissionType::ChangeApplicationState,
+ PluginCommand::UnblockPipeInput(..)
+ | PluginCommand::PipeOutput(..) => PermissionType::ReadCliMessages,
_ => return (PermissionStatus::Granted, None),
};
diff --git a/zellij-tile/src/shim.rs b/zellij-tile/src/shim.rs
index 1bf8df794..1fa352daa 100644
--- a/zellij-tile/src/shim.rs
+++ b/zellij-tile/src/shim.rs
@@ -694,14 +694,6 @@ pub fn rename_session(name: &str) {
unsafe { host_run_plugin_command() };
}
-/// Allow sending this plugin custom messages with the given name
-pub fn subscribe_to_custom_message(name: &str) {
- let plugin_command = PluginCommand::SubscribeToCustomMessage(name.to_owned());
- let protobuf_plugin_command: ProtobufPluginCommand = plugin_command.try_into().unwrap();
- object_to_stdout(&protobuf_plugin_command.encode_to_vec());
- unsafe { host_run_plugin_command() };
-}
-
/// Unblock the input side of a pipe, requesting the next message be sent if there is one
pub fn unblock_pipe_input(pipe_name: &str) {
let plugin_command = PluginCommand::UnblockPipeInput(pipe_name.to_owned());
diff --git a/zellij-utils/assets/prost/api.plugin_command.rs b/zellij-utils/assets/prost/api.plugin_command.rs
index 9659e231e..5c1501493 100644
--- a/zellij-utils/assets/prost/api.plugin_command.rs
+++ b/zellij-utils/assets/prost/api.plugin_command.rs
@@ -5,7 +5,7 @@ pub struct PluginCommand {
pub name: i32,
#[prost(
oneof = "plugin_command::Payload",
- tags = "2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49"
+ tags = "2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48"
)]
pub payload: ::core::option::Option<plugin_command::Payload>,
}
@@ -105,10 +105,8 @@ pub mod plugin_command {
#[prost(string, tag = "46")]
RenameSessionPayload(::prost::alloc::string::String),
#[prost(string, tag = "47")]
- SubscribeToCustomMessagePayload(::prost::alloc::string::String),
- #[prost(string, tag = "48")]
UnblockPipeInputPayload(::prost::alloc::string::String),
- #[prost(message, tag = "49")]
+ #[prost(message, tag = "48")]
PipeOutputPayload(super::PipeOutputPayload),
}
}
@@ -332,9 +330,8 @@ pub enum CommandName {
DeleteDeadSession = 73,
DeleteAllDeadSessions = 74,
RenameSession = 75,
- SubscribeToCustomMessage = 76,
- UnblockPipeInput = 77,
- PipeOutput = 78,
+ UnblockPipeInput = 76,
+ PipeOutput = 77,
}
impl CommandName {
/// String value of the enum field names used in the ProtoBuf definition.
@@ -419,7 +416,6 @@ impl CommandName {
CommandName::DeleteDeadSession => "DeleteDeadSession",
CommandName::DeleteAllDeadSessions => "DeleteAllDeadSessions",
CommandName::RenameSession => "RenameSession",
- CommandName::SubscribeToCustomMessage => "SubscribeToCustomMessage",
CommandName::UnblockPipeInput => "UnblockPipeInput",
CommandName::PipeOutput => "PipeOutput",
}
@@ -503,7 +499,6 @@ impl CommandName {
"DeleteDeadSession" => Some(Self::DeleteDeadSession),
"DeleteAllDeadSessions" => Some(Self::DeleteAllDeadSessions),
"RenameSession" => Some(Self::RenameSession),
- "SubscribeToCustomMessage" => Some(Self::SubscribeToCustomMessage),
"UnblockPipeInput" => Some(Self::UnblockPipeInput),
"PipeOutput" => Some(Self::PipeOutput),
_ => None,
diff --git a/zellij-utils/assets/prost/api.plugin_permission.rs b/zellij-utils/assets/prost/api.plugin_permission.rs
index d33fa950a..21e23bc02 100644
--- a/zellij-utils/assets/prost/api.plugin_permission.rs
+++ b/zellij-utils/assets/prost/api.plugin_permission.rs
@@ -8,6 +8,7 @@ pub enum PermissionType {
OpenTerminalsOrPlugins = 4,
WriteToStdin = 5,
WebAccess = 6,
+ ReadCliMessages = 7,
}
impl PermissionType {
/// String value of the enum field names used in the ProtoBuf definition.
@@ -23,6 +24,7 @@ impl PermissionType {
PermissionType::OpenTerminalsOrPlugins => "OpenTerminalsOrPlugins",
PermissionType::WriteToStdin => "WriteToStdin",
PermissionType::WebAccess => "WebAccess",
+ PermissionType::ReadCliMessages => "ReadCliMessages",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
@@ -35,6 +37,7 @@ impl PermissionType {
"OpenTerminalsOrPlugins" => Some(Self::OpenTerminalsOrPlugins),
"WriteToStdin" => Some(Self::WriteToStdin),
"WebAccess" => Some(Self::WebAccess),
+ "ReadCliMessages" => Some(Self::ReadCliMessages),
_ => None,
}
}
diff --git a/zellij-utils/src/data.rs b/zellij-utils/src/data.rs
index f338db8a8..cd8bc278e 100644
--- a/zellij-utils/src/data.rs
+++ b/zellij-utils/src/data.rs
@@ -543,6 +543,7 @@ pub enum Permission {
OpenTerminalsOrPlugins,
WriteToStdin,
WebAccess,
+ ReadCliMessages,
}
impl PermissionType {
@@ -559,6 +560,7 @@ impl PermissionType {
PermissionType::OpenTerminalsOrPlugins => "Start new terminals and plugins".to_owned(),
PermissionType::WriteToStdin => "Write to standard input (STDIN)".to_owned(),
PermissionType::WebAccess => "Make web requests".to_owned(),
+ PermissionType::ReadCliMessages => "Read messages from the command line".to_owned(),
}
}
}
@@ -1110,7 +1112,6 @@ pub enum PluginCommand {
BTreeMap<String, String>, // context
),
RenameSession(String), // String -> new session name
- SubscribeToCustomMessage(String), // String -> message name
UnblockPipeInput(String), // String => pipe name
PipeOutput(String, String), // String => pipe name, String => output
}
diff --git a/zellij-utils/src/errors.rs b/zellij-utils/src/errors.rs
index 2ddb34895..06214e404 100644
--- a/zellij-utils/src/errors.rs
+++ b/zellij-utils/src/errors.rs
@@ -393,7 +393,6 @@ pub enum PluginContext {
PermissionRequestResult,
DumpLayout,
LogLayoutToHd,
- SubscribePluginToCustomMessage,
Message,
}
diff --git a/zellij-utils/src/plugin_api/plugin_command.proto b/zellij-utils/src/plugin_api/plugin_command.proto
index fb5c4d6bb..65c7d6967 100644
--- a/zellij-utils/src/plugin_api/plugin_command.proto
+++ b/zellij-utils/src/plugin_api/plugin_command.proto
@@ -87,9 +87,8 @@ enum CommandName {
DeleteDeadSession = 73;
DeleteAllDeadSessions = 74;
RenameSession = 75;
- SubscribeToCustomMessage = 76;
- UnblockPipeInput = 77;
- PipeOutput = 78;
+ UnblockPipeInput = 76;
+ PipeOutput = 77;
}
message PluginCommand {
@@ -140,9 +139,8 @@ message PluginCommand {
WebRequestPayload web_request_payload = 44;
string delete_dead_session_payload = 45;
string rename_session_payload = 46;
- string subscribe_to_custom_message_payload = 47;
- string unblock_pipe_input_payload = 48;
- PipeOutputPayload pipe_output_payload = 49;
+ string unblock_pipe_input_payload = 47;
+ PipeOutputPayload pipe_output_payload = 48;
}
}
diff --git a/zellij-utils/src/plugin_api/plugin_command.rs b/zellij-utils/src/plugin_api/plugin_command.rs
index 1f14082f3..9cf49a231 100644
--- a/zellij-utils/src/plugin_api/plugin_command.rs
+++ b/zellij-utils/src/plugin_api/plugin_command.rs
@@ -641,12 +641,6 @@ impl TryFrom<ProtobufPluginCommand> for PluginCommand {
},
_ => Err("Mismatched payload for RenameSession"),
},
- Some(CommandName::SubscribeToCustomMessage) => match protobuf_plugin_command.payload {
- Some(Payload::SubscribeToCustomMessagePayload(custom_message_name)) => {
- Ok(PluginCommand::SubscribeToCustomMessage(custom_message_name))
- },
- _ => Err("Mismatched payload for SubscribeToCustomMessage"),
- },
Some(CommandName::UnblockPipeInput) => match protobuf_plugin_command.payload {
Some(Payload::UnblockPipeInputPayload(pipe_name)) => {
Ok(PluginCommand::UnblockPipeInput(pipe_name))
@@ -1087,10 +1081,6 @@ impl TryFrom<PluginCommand> for ProtobufPluginCommand {
name: CommandName::RenameSession as i32,
payload: Some(Payload::RenameSessionPayload(new_session_name)),
}),
- PluginCommand::SubscribeToCustomMessage(custom_message_name) => Ok(ProtobufPluginCommand {
- name: CommandName::SubscribeToCustomMessage as i32,
- payload: Some(Payload::SubscribeToCustomMessagePayload(custom_message_name)),
- }),
PluginCommand::UnblockPipeInput(pipe_name) => Ok(ProtobufPluginCommand {
name: CommandName::UnblockPipeInput as i32,
payload: Some(Payload::UnblockPipeInputPayload(pipe_name)),
diff --git a/zellij-utils/src/plugin_api/plugin_permission.proto b/zellij-utils/src/plugin_api/plugin_permission.proto
index a796c7481..650567edb 100644
--- a/zellij-utils/src/plugin_api/plugin_permission.proto
+++ b/zellij-utils/src/plugin_api/plugin_permission.proto
@@ -10,4 +10,5 @@ enum PermissionType {
OpenTerminalsOrPlugins = 4;
WriteToStdin = 5;
WebAccess = 6;
+ ReadCliMessages = 7;
}
diff --git a/zellij-utils/src/plugin_api/plugin_permission.rs b/zellij-utils/src/plugin_api/plugin_permission.rs
index c9f0d49f5..20b890c7e 100644
--- a/zellij-utils/src/plugin_api/plugin_permission.rs
+++ b/zellij-utils/src/plugin_api/plugin_permission.rs
@@ -20,6 +20,7 @@ impl TryFrom<ProtobufPermissionType> for PermissionType {
},
ProtobufPermissionType::WriteToStdin => Ok(PermissionType::WriteToStdin),
ProtobufPermissionType::WebAccess => Ok(PermissionType::WebAccess),
+ ProtobufPermissionType::ReadCliMessages => Ok(PermissionType::ReadCliMessages),
}
}
}
@@ -41,6 +42,7 @@ impl TryFrom<PermissionType> for ProtobufPermissionType {
},
PermissionType::WriteToStdin => Ok(ProtobufPermissionType::WriteToStdin),
PermissionType::WebAccess => Ok(ProtobufPermissionType::WebAccess),
+ PermissionType::ReadCliMessages => Ok(ProtobufPermissionType::ReadCliMessages),
}
}
}