Skip to content

Commit 90ce8f8

Browse files
author
Ted Roberts
committed
Craft screenLayerLayout request body from detailList
1 parent dc11e85 commit 90ce8f8

2 files changed

Lines changed: 57 additions & 17 deletions

File tree

custom_components/novastar_h/api.py

Lines changed: 56 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -767,8 +767,9 @@ async def async_set_audio_input(
767767
)
768768
return False
769769

770-
layers_key = "screenLayers" if isinstance(layout_data.get("screenLayers"), list) else "layers"
771-
raw_layers = layout_data.get(layers_key)
770+
raw_layers = layout_data.get("screenLayers")
771+
if not isinstance(raw_layers, list):
772+
raw_layers = layout_data.get("layers")
772773
if not isinstance(raw_layers, list):
773774
self._debug_log(
774775
"Audio input set aborted: no layers in detailList host=%s keys=%s",
@@ -777,41 +778,80 @@ async def async_set_audio_input(
777778
)
778779
return False
779780

780-
updated_layers: list[dict[str, Any]] = []
781+
crafted_layers: list[dict[str, Any]] = []
781782
selected_found = False
782783
for layer in raw_layers:
783784
if not isinstance(layer, dict):
784785
continue
785-
layer_copy = dict(layer)
786-
layer_id = self._coerce_audio_id(layer_copy.get("layerId"))
787-
audio_status = layer_copy.get("audioStatus")
786+
787+
layer_id = self._coerce_audio_id(layer.get("layerId"))
788+
if layer_id is None:
789+
continue
790+
791+
general = layer.get("general")
792+
if not isinstance(general, dict):
793+
general = {}
794+
795+
source = layer.get("source")
796+
if not isinstance(source, dict):
797+
source = {}
798+
799+
window = layer.get("window")
800+
if not isinstance(window, dict):
801+
window = {}
802+
803+
audio_status = layer.get("audioStatus")
788804
if not isinstance(audio_status, dict):
789805
audio_status = {}
806+
790807
updated_audio_status = dict(audio_status)
791808
if layer_id == selected_layer_id:
792809
updated_audio_status["isOpen"] = 1
793810
selected_found = True
794811
else:
795812
updated_audio_status["isOpen"] = 0
796-
layer_copy["audioStatus"] = updated_audio_status
797-
updated_layers.append(layer_copy)
813+
814+
crafted_layer = {
815+
"layerId": int(layer_id),
816+
"general": {
817+
"layerId": int(self._coerce_audio_id(general.get("layerId")) or layer_id),
818+
"zorder": int(general.get("zorder", 0)),
819+
"name": str(general.get("name", f"Layer {layer_id}")),
820+
"isBackground": bool(general.get("isBackground", False)),
821+
"isFreeze": bool(general.get("isFreeze", False)),
822+
"flipType": int(general.get("flipType", 0)),
823+
},
824+
"lock": int(layer.get("lock", 0)),
825+
"source": {
826+
"sourceType": int(source.get("sourceType", 0)),
827+
"inputId": int(source.get("inputId", 0)),
828+
"cropId": int(source.get("cropId", 255)),
829+
"interfaceType": int(source.get("interfaceType", 0)),
830+
"connectCapacity": int(source.get("connectCapacity", 0)),
831+
"name": str(source.get("name", "")),
832+
},
833+
"window": {
834+
"width": int(window.get("width", 0)),
835+
"height": int(window.get("height", 0)),
836+
"x": int(window.get("x", 0)),
837+
"y": int(window.get("y", 0)),
838+
},
839+
"audioStatus": updated_audio_status,
840+
}
841+
crafted_layers.append(crafted_layer)
798842

799843
if not selected_found:
800844
self._debug_log(
801845
"Audio input set aborted: selected layer not found selected_layer_id=%s available=%s",
802846
selected_layer_id,
803-
[self._coerce_audio_id(layer.get("layerId")) for layer in updated_layers],
847+
[self._coerce_audio_id(layer.get("layerId")) for layer in crafted_layers],
804848
)
805849
return False
806850

807851
write_payload = {
808-
**detail_payload,
809-
**{
810-
key: value
811-
for key, value in layout_data.items()
812-
if key not in ("screenLayers", "layers")
813-
},
814-
layers_key: updated_layers,
852+
"deviceId": int(device_id),
853+
"screenId": int(screen_id),
854+
"layers": crafted_layers,
815855
}
816856

817857
self._debug_log(

custom_components/novastar_h/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,5 @@
2121
}
2222
],
2323
"zeroconf": ["_novastar._tcp.local."],
24-
"version": "0.2.56"
24+
"version": "0.2.57"
2525
}

0 commit comments

Comments
 (0)