diff --git a/src-tauri/src/events/inbound/mod.rs b/src-tauri/src/events/inbound/mod.rs index df4ef77b..7ba8262b 100644 --- a/src-tauri/src/events/inbound/mod.rs +++ b/src-tauri/src/events/inbound/mod.rs @@ -80,7 +80,6 @@ pub async fn process_incoming_message(data: Result, uuid: &str, if !(uuid.is_empty() && skip_auth) { if let Some(context) = match &decoded { InboundEventType::SetSettings(event) => Some(&event.context), - InboundEventType::GetSettings(event) => Some(&event.context), InboundEventType::SetTitle(event) => Some(&event.context), InboundEventType::SetImage(event) => Some(&event.context), InboundEventType::SetState(event) => Some(&event.context), @@ -123,7 +122,7 @@ pub async fn process_incoming_message(data: Result, uuid: &str, InboundEventType::EncoderUp(event) => devices::encoder_up(event).await, InboundEventType::TouchscreenPress(event) => devices::touchscreen_press(event).await, InboundEventType::SetSettings(event) => settings::set_settings(event, false).await, - InboundEventType::GetSettings(event) => settings::get_settings(event, false).await, + InboundEventType::GetSettings(event) => settings::get_settings(event, false, uuid).await, InboundEventType::SetGlobalSettings(event) => settings::set_global_settings(event, false).await, InboundEventType::GetGlobalSettings(event) => settings::get_global_settings(event, false).await, InboundEventType::OpenUrl(event) => misc::open_url(event).await, @@ -167,7 +166,7 @@ pub async fn process_incoming_message_pi(data: Result, uuid: &st if let Err(error) = match decoded { InboundEventType::SetSettings(event) => settings::set_settings(event, true).await, - InboundEventType::GetSettings(event) => settings::get_settings(event, true).await, + InboundEventType::GetSettings(event) => settings::get_settings(event, true, uuid).await, InboundEventType::SetGlobalSettings(event) => settings::set_global_settings(event, true).await, InboundEventType::GetGlobalSettings(event) => settings::get_global_settings(event, true).await, InboundEventType::OpenUrl(event) => misc::open_url(event).await, diff --git a/src-tauri/src/events/inbound/settings.rs b/src-tauri/src/events/inbound/settings.rs index 58e0e4a7..12684666 100644 --- a/src-tauri/src/events/inbound/settings.rs +++ b/src-tauri/src/events/inbound/settings.rs @@ -17,13 +17,18 @@ pub async fn set_settings(event: super::ContextAndPayloadEvent Result<(), anyhow::Error> { +pub async fn get_settings(event: super::ContextEvent, from_property_inspector: bool, requester: &str) -> Result<(), anyhow::Error> { let locks = acquire_locks().await; - if let Some(instance) = get_instance(&event.context, &locks).await? { + if let Some(instance) = get_instance(&event.context, &locks).await? + && (from_property_inspector || instance.action.plugin == requester) + { outbound::did_receive_settings(instance, from_property_inspector).await?; + return Ok(()); } + outbound::did_receive_settings_fallback(requester, &event.context, from_property_inspector).await?; + Ok(()) } diff --git a/src-tauri/src/events/outbound/mod.rs b/src-tauri/src/events/outbound/mod.rs index 8537352f..a5bce823 100644 --- a/src-tauri/src/events/outbound/mod.rs +++ b/src-tauri/src/events/outbound/mod.rs @@ -18,6 +18,21 @@ struct Coordinates { column: u8, } +impl Coordinates { + fn from_context(context: &crate::shared::ActionContext) -> Self { + if context.controller == "Encoder" { + return Coordinates { row: 0, column: context.position }; + } + match crate::shared::DEVICES.get(&context.device) { + Some(device) if device.columns > 0 => Coordinates { + row: context.position / device.columns, + column: context.position % device.columns, + }, + _ => Coordinates { row: 0, column: 0 }, + } + } +} + #[derive(Serialize)] #[allow(non_snake_case)] struct GenericInstancePayload { @@ -30,28 +45,24 @@ struct GenericInstancePayload { impl GenericInstancePayload { fn new(instance: &crate::shared::ActionInstance) -> Self { - let coordinates = match &instance.context.controller[..] { - "Encoder" => Coordinates { - row: 0, - column: instance.context.position, - }, - _ => { - let columns = crate::shared::DEVICES.get(&instance.context.device).unwrap().columns; - Coordinates { - row: instance.context.position / columns, - column: instance.context.position % columns, - } - } - }; - Self { settings: instance.settings.clone(), - coordinates, + coordinates: Coordinates::from_context(&instance.context), controller: instance.context.controller.clone(), state: instance.current_state, isInMultiAction: instance.context.index != 0, } } + + fn empty(context: &crate::shared::ActionContext) -> Self { + Self { + settings: serde_json::Value::Object(serde_json::Map::new()), + coordinates: Coordinates::from_context(context), + controller: context.controller.clone(), + state: 0, + isInMultiAction: context.index != 0, + } + } } async fn send_to_plugin(plugin: &str, data: &impl Serialize) -> Result<(), anyhow::Error> { diff --git a/src-tauri/src/events/outbound/settings.rs b/src-tauri/src/events/outbound/settings.rs index 39ba7d90..d0dc380c 100644 --- a/src-tauri/src/events/outbound/settings.rs +++ b/src-tauri/src/events/outbound/settings.rs @@ -30,6 +30,21 @@ pub async fn did_receive_settings(instance: &crate::shared::ActionInstance, to_p } } +pub async fn did_receive_settings_fallback(plugin: &str, context: &ActionContext, to_property_inspector: bool) -> Result<(), anyhow::Error> { + let data = DidReceiveSettingsEvent { + event: "didReceiveSettings", + action: String::new(), + context: context.clone(), + device: context.device.clone(), + payload: GenericInstancePayload::empty(context), + }; + if to_property_inspector { + send_to_property_inspector(context, &data).await + } else { + send_to_plugin(plugin, &data).await + } +} + #[derive(Serialize)] struct DidReceiveGlobalSettingsPayload { settings: serde_json::Value,