summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2024-01-10 14:24:47 +0100
committerAram Drevekenin <aram@poor.dev>2024-01-10 14:24:47 +0100
commit9b45f91e4b34e65c1e6ddbaf3468594fb20d128e (patch)
tree09b6cb7f48a019f7e8b150276e62a8297f5c9d64
parent241168a96f57b5c6a3a273c6335899713afc4d41 (diff)
fix: add is_private to pipes and change some naming
-rw-r--r--default-plugins/fixture-plugin-for-tests/src/main.rs4
-rw-r--r--zellij-server/src/plugins/mod.rs14
-rw-r--r--zellij-server/src/plugins/unit/plugin_tests.rs4
-rw-r--r--zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__pipe_message_to_plugin_plugin_command.snap12
-rw-r--r--zellij-tile/src/shim.rs2
-rw-r--r--zellij-utils/assets/prost/api.pipe_message.rs2
-rw-r--r--zellij-utils/src/data.rs6
-rw-r--r--zellij-utils/src/plugin_api/pipe_message.proto1
-rw-r--r--zellij-utils/src/plugin_api/pipe_message.rs4
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,
})
}
}