diff options
author | Aram Drevekenin <aram@poor.dev> | 2023-12-19 15:29:33 +0100 |
---|---|---|
committer | Aram Drevekenin <aram@poor.dev> | 2023-12-19 15:29:33 +0100 |
commit | 76710e7261288332d5ba84106cf055bfcb32ab25 (patch) | |
tree | 9a5e6be39fadd7be7172a8713a0f1e5cfafb876c | |
parent | dcdb31e8515876ed8f78f53cd4a340a0ce532663 (diff) |
prototype - working after removing unused stuff
-rw-r--r-- | zellij-server/src/plugins/mod.rs | 16 | ||||
-rw-r--r-- | zellij-server/src/plugins/wasm_bridge.rs | 1 | ||||
-rw-r--r-- | zellij-server/src/plugins/zellij_exports.rs | 22 | ||||
-rw-r--r-- | zellij-tile/src/shim.rs | 8 | ||||
-rw-r--r-- | zellij-utils/assets/prost/api.plugin_command.rs | 13 | ||||
-rw-r--r-- | zellij-utils/assets/prost/api.plugin_permission.rs | 3 | ||||
-rw-r--r-- | zellij-utils/src/data.rs | 3 | ||||
-rw-r--r-- | zellij-utils/src/errors.rs | 1 | ||||
-rw-r--r-- | zellij-utils/src/plugin_api/plugin_command.proto | 10 | ||||
-rw-r--r-- | zellij-utils/src/plugin_api/plugin_command.rs | 10 | ||||
-rw-r--r-- | zellij-utils/src/plugin_api/plugin_permission.proto | 1 | ||||
-rw-r--r-- | zellij-utils/src/plugin_api/plugin_permission.rs | 2 |
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), } } } |