diff options
author | Aram Drevekenin <aram@poor.dev> | 2024-01-10 14:24:47 +0100 |
---|---|---|
committer | Aram Drevekenin <aram@poor.dev> | 2024-01-10 14:24:47 +0100 |
commit | 9b45f91e4b34e65c1e6ddbaf3468594fb20d128e (patch) | |
tree | 09b6cb7f48a019f7e8b150276e62a8297f5c9d64 | |
parent | 241168a96f57b5c6a3a273c6335899713afc4d41 (diff) |
fix: add is_private to pipes and change some naming
-rw-r--r-- | default-plugins/fixture-plugin-for-tests/src/main.rs | 4 | ||||
-rw-r--r-- | zellij-server/src/plugins/mod.rs | 14 | ||||
-rw-r--r-- | zellij-server/src/plugins/unit/plugin_tests.rs | 4 | ||||
-rw-r--r-- | zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__pipe_message_to_plugin_plugin_command.snap | 12 | ||||
-rw-r--r-- | zellij-tile/src/shim.rs | 2 | ||||
-rw-r--r-- | zellij-utils/assets/prost/api.pipe_message.rs | 2 | ||||
-rw-r--r-- | zellij-utils/src/data.rs | 6 | ||||
-rw-r--r-- | zellij-utils/src/plugin_api/pipe_message.proto | 1 | ||||
-rw-r--r-- | zellij-utils/src/plugin_api/pipe_message.rs | 4 |
9 files changed, 38 insertions, 11 deletions
diff --git a/default-plugins/fixture-plugin-for-tests/src/main.rs b/default-plugins/fixture-plugin-for-tests/src/main.rs index 1083a9293..a98c4d56a 100644 --- a/default-plugins/fixture-plugin-for-tests/src/main.rs +++ b/default-plugins/fixture-plugin-for-tests/src/main.rs @@ -314,8 +314,8 @@ impl ZellijPlugin for State { block_cli_pipe_input(&input_pipe_id); } else if name == "pipe_output" { cli_pipe_output(&name, "this_is_my_output"); - } else if name == "send_message_to_plugin" { - send_message_to_plugin(MessageToPlugin::new("message_to_plugin").with_payload("my_cool_payload")); + } else if name == "pipe_message_to_plugin" { + pipe_message_to_plugin(MessageToPlugin::new("message_to_plugin").with_payload("my_cool_payload")); } else if name == "message_to_plugin" { self.message_to_plugin_payload = payload.clone(); } diff --git a/zellij-server/src/plugins/mod.rs b/zellij-server/src/plugins/mod.rs index 97c4d06f6..3503791ba 100644 --- a/zellij-server/src/plugins/mod.rs +++ b/zellij-server/src/plugins/mod.rs @@ -444,6 +444,8 @@ pub(crate) fn plugin_thread_main( let mut pipe_messages = vec![]; match plugin { Some(plugin_url) => { + // send to specific plugin(s) + let is_private = true; match RunPlugin::from_url(&plugin_url) { Ok(mut run_plugin) => { if let Some(configuration) = configuration.take() { @@ -464,7 +466,7 @@ pub(crate) fn plugin_thread_main( pipe_messages.push(( Some(plugin_id), client_id, - PipeMessage::new(PipeSource::Cli(pipe_id.clone()), &name, &payload, &args) + PipeMessage::new(PipeSource::Cli(pipe_id.clone()), &name, &payload, &args, is_private) )); } }, @@ -477,12 +479,13 @@ pub(crate) fn plugin_thread_main( }, None => { // send to all plugins + let is_private = false; let all_plugin_ids = wasm_bridge.all_plugin_ids(); for (plugin_id, client_id) in all_plugin_ids { pipe_messages.push(( Some(plugin_id), Some(client_id), - PipeMessage::new(PipeSource::Cli(pipe_id.clone()), &name, &payload, &args) + PipeMessage::new(PipeSource::Cli(pipe_id.clone()), &name, &payload, &args, is_private) )); } } @@ -510,6 +513,8 @@ pub(crate) fn plugin_thread_main( .and_then(|n| n.pane_id_to_replace); match message.plugin_url { Some(plugin_url) => { + // send to specific plugin(s) + let is_private = true; match RunPlugin::from_url(&plugin_url) { Ok(mut run_plugin) => { run_plugin.configuration = PluginUserConfiguration::new(message.plugin_config); @@ -528,7 +533,7 @@ pub(crate) fn plugin_thread_main( pipe_messages.push(( Some(plugin_id), client_id, - PipeMessage::new(PipeSource::Plugin(source_plugin_id), &message.message_name, &message.message_payload, &Some(message.message_args.clone())), + PipeMessage::new(PipeSource::Plugin(source_plugin_id), &message.message_name, &message.message_payload, &Some(message.message_args.clone()), is_private), )) } }, @@ -539,12 +544,13 @@ pub(crate) fn plugin_thread_main( }, None => { // send to all plugins + let is_private = false; let all_plugin_ids = wasm_bridge.all_plugin_ids(); for (plugin_id, client_id) in all_plugin_ids { pipe_messages.push(( Some(plugin_id), Some(client_id), - PipeMessage::new(PipeSource::Plugin(source_plugin_id), &message.message_name, &message.message_payload, &Some(message.message_args.clone())) + PipeMessage::new(PipeSource::Plugin(source_plugin_id), &message.message_name, &message.message_payload, &Some(message.message_args.clone()), is_private) )); } } diff --git a/zellij-server/src/plugins/unit/plugin_tests.rs b/zellij-server/src/plugins/unit/plugin_tests.rs index 1a6760159..651422d75 100644 --- a/zellij-server/src/plugins/unit/plugin_tests.rs +++ b/zellij-server/src/plugins/unit/plugin_tests.rs @@ -5878,7 +5878,7 @@ pub fn pipe_output_plugin_command() { #[test] #[ignore] -pub fn send_message_to_plugin_plugin_command() { +pub fn pipe_message_to_plugin_plugin_command() { let temp_folder = tempdir().unwrap(); // placed explicitly in the test scope because its // destructor removes the directory let plugin_host_folder = PathBuf::from(temp_folder.path()); @@ -5926,7 +5926,7 @@ pub fn send_message_to_plugin_plugin_command() { std::thread::sleep(std::time::Duration::from_millis(500)); let _ = plugin_thread_sender.send(PluginInstruction::CliPipe { pipe_id: "input_pipe_id".to_owned(), - name: "send_message_to_plugin".to_owned(), + name: "pipe_message_to_plugin".to_owned(), payload: Some("payload_sent_to_self".to_owned()), plugin: None, // broadcast args: None, diff --git a/zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__pipe_message_to_plugin_plugin_command.snap b/zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__pipe_message_to_plugin_plugin_command.snap new file mode 100644 index 000000000..b363559b7 --- /dev/null +++ b/zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__pipe_message_to_plugin_plugin_command.snap @@ -0,0 +1,12 @@ +--- +source: zellij-server/src/plugins/./unit/plugin_tests.rs +assertion_line: 5961 +expression: "format!(\"{:#?}\", plugin_bytes_event)" +--- +Some( + ( + 0, + 1, + "Payload from self: \"my_cool_payload\"\n\r", + ), +) diff --git a/zellij-tile/src/shim.rs b/zellij-tile/src/shim.rs index cff267e70..975e3499d 100644 --- a/zellij-tile/src/shim.rs +++ b/zellij-tile/src/shim.rs @@ -719,7 +719,7 @@ pub fn cli_pipe_output(pipe_name: &str, output: &str) { } /// Send a message to a plugin, it will be launched if it is not already running -pub fn send_message_to_plugin(message_to_plugin: MessageToPlugin) { +pub fn pipe_message_to_plugin(message_to_plugin: MessageToPlugin) { let plugin_command = PluginCommand::MessageToPlugin(message_to_plugin); let protobuf_plugin_command: ProtobufPluginCommand = plugin_command.try_into().unwrap(); object_to_stdout(&protobuf_plugin_command.encode_to_vec()); diff --git a/zellij-utils/assets/prost/api.pipe_message.rs b/zellij-utils/assets/prost/api.pipe_message.rs index 347661d9a..96c566ff8 100644 --- a/zellij-utils/assets/prost/api.pipe_message.rs +++ b/zellij-utils/assets/prost/api.pipe_message.rs @@ -13,6 +13,8 @@ pub struct PipeMessage { pub payload: ::core::option::Option<::prost::alloc::string::String>, #[prost(message, repeated, tag = "6")] pub args: ::prost::alloc::vec::Vec<Arg>, + #[prost(bool, tag = "7")] + pub is_private: bool, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] diff --git a/zellij-utils/src/data.rs b/zellij-utils/src/data.rs index 02ce8bbed..17a13bfdb 100644 --- a/zellij-utils/src/data.rs +++ b/zellij-utils/src/data.rs @@ -1107,7 +1107,7 @@ pub struct PipeMessage { pub name: String, pub payload: Option<String>, pub args: BTreeMap<String, String>, - // TODO: add audience: Audience::Self, Audience::All + pub is_private: bool, } impl PipeMessage { @@ -1115,13 +1115,15 @@ impl PipeMessage { source: PipeSource, name: impl Into<String>, payload: &Option<String>, - args: &Option<BTreeMap<String, String>> + args: &Option<BTreeMap<String, String>>, + is_private: bool, ) -> Self { PipeMessage { source, name: name.into(), payload: payload.clone(), args: args.clone().unwrap_or_else(|| Default::default()), + is_private, } } } diff --git a/zellij-utils/src/plugin_api/pipe_message.proto b/zellij-utils/src/plugin_api/pipe_message.proto index d2eace6fe..5f488a758 100644 --- a/zellij-utils/src/plugin_api/pipe_message.proto +++ b/zellij-utils/src/plugin_api/pipe_message.proto @@ -9,6 +9,7 @@ message PipeMessage { string name = 4; optional string payload = 5; repeated Arg args = 6; + bool is_private = 7; } enum PipeSource { diff --git a/zellij-utils/src/plugin_api/pipe_message.rs b/zellij-utils/src/plugin_api/pipe_message.rs index dd6a151c8..80ccaf6d2 100644 --- a/zellij-utils/src/plugin_api/pipe_message.rs +++ b/zellij-utils/src/plugin_api/pipe_message.rs @@ -14,11 +14,13 @@ impl TryFrom<ProtobufPipeMessage> for PipeMessage { let name = protobuf_pipe_message.name; let payload = protobuf_pipe_message.payload; let args = protobuf_pipe_message.args.into_iter().map(|arg| (arg.key, arg.value)).collect(); + let is_private = protobuf_pipe_message.is_private; Ok(PipeMessage { source, name, payload, args, + is_private, }) } } @@ -36,6 +38,7 @@ impl TryFrom<PipeMessage> for ProtobufPipeMessage { .into_iter() .map(|(key, value)| ProtobufArg { key, value }) .collect(); + let is_private = pipe_message.is_private; Ok(ProtobufPipeMessage { source, cli_source_id, @@ -43,6 +46,7 @@ impl TryFrom<PipeMessage> for ProtobufPipeMessage { name, payload, args, + is_private, }) } } |