diff --git a/custom_components/supernotify/const.py b/custom_components/supernotify/const.py index e953da34..2ae6801a 100644 --- a/custom_components/supernotify/const.py +++ b/custom_components/supernotify/const.py @@ -83,6 +83,7 @@ ATTR_SCENARIOS_REQUIRE = "require_scenarios" ATTR_SCENARIOS_APPLY = "apply_scenarios" ATTR_FORCE_RESEND: Final[str] = "force_resend" +ATTR_CHANNEL_MESSAGE: Final[str] = "channel_message" ATTR_SCENARIOS_CONSTRAIN = "constrain_scenarios" ATTR_DELIVERY = "delivery" ATTR_DEFAULT = "default" diff --git a/custom_components/supernotify/notification.py b/custom_components/supernotify/notification.py index 6c614256..2e3a4993 100644 --- a/custom_components/supernotify/notification.py +++ b/custom_components/supernotify/notification.py @@ -15,6 +15,7 @@ from .const import ( ATTR_ACTION_GROUPS, ATTR_ACTIONS, + ATTR_CHANNEL_MESSAGE, ATTR_DEBUG, ATTR_DELIVERY, ATTR_DELIVERY_SELECTION, @@ -71,7 +72,7 @@ KEY_SKIPPED = "skipped" # supernotify specific data items not to be passed to transports in data -INTERNAL_DATA_KEYS = (ATTR_FORCE_RESEND, ATTR_SPOKEN_MESSAGE) +INTERNAL_DATA_KEYS = (ATTR_FORCE_RESEND, ATTR_SPOKEN_MESSAGE, ATTR_CHANNEL_MESSAGE) type t_delivery_name = str type t_outcome = str @@ -600,12 +601,8 @@ def base_filename(self) -> str: """ArchiveableObject implementation""" return f"{self.created.isoformat()[:16].replace(':', '-')}_{self.id}" - def delivery_data(self, delivery: Delivery) -> dict[str, Any]: - if delivery is None: - return {} - delivery_override: DeliveryCustomization | None = self.delivery_overrides.get(delivery.name) - if delivery_override is None: - delivery_override = self.delivery_overrides.get(delivery.transport.name) + def delivery_data(self, delivery_name: str) -> dict[str, Any]: + delivery_override: DeliveryCustomization | None = self.delivery_overrides.get(delivery_name) return delivery_override.data if delivery_override and delivery_override.data else {} @property @@ -792,16 +789,17 @@ def generate_envelopes(self, delivery: Delivery, targets: list[Target]) -> list[ if target.has_resolved_target() or delivery.target_required != TargetRequired.ALWAYS: envelope_data = {} envelope_data.update(delivery.data) - envelope_data.update({ - k: v for k, v in self.extra_data.items() if k not in INTERNAL_DATA_KEYS - }) # action call data - if target.target_data: - envelope_data.update(target.target_data) # scenario applied at cross-delivery level in apply_enabled_scenarios for scenario in self.enabled_scenarios.values(): customization: DeliveryCustomization | None = scenario.delivery_customization(delivery.name) if customization and customization.data: envelope_data.update(customization.data) + # action call data overrides scenario data + envelope_data.update({ + k: v for k, v in self.extra_data.items() if k not in INTERNAL_DATA_KEYS + }) # action call data + if target.target_data: + envelope_data.update(target.target_data) envelopes.append(Envelope(delivery, self, target, envelope_data, context=self.context)) return envelopes