Fix live wiresheet: resolve type names and load schema gracefully
- Add type_name_map on SoxClient so components loaded after connect resolve proper names (e.g. control::And2) instead of kit::typeN. This lets the slot registry and final_components_registry match, so component boxes show their slots and property values. - Load live schema gracefully: skip missing kit manifests instead of aborting, compile the kits we have, and warn about missing ones in the status bar. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
+1
-1
@@ -8,7 +8,7 @@ so later rebinding would only ever be seen by the module that did it.
|
||||
import configparser
|
||||
import os
|
||||
|
||||
VERSION = "0.0.0.084"
|
||||
VERSION = "0.0.0.085"
|
||||
PROPERTIES_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "editor.properties")
|
||||
DEFAULT_GRID_SIZE = 10
|
||||
DEFAULT_ADD_TIMESTAMP = True
|
||||
|
||||
@@ -142,6 +142,7 @@ class DeviceSession:
|
||||
})
|
||||
registry[(kit_id, type_id_val)] = slots
|
||||
full_name = f"{kit_name}::{type_name}"
|
||||
self.sox_client.type_name_map[(kit_id, type_id_val)] = full_name
|
||||
# update type_name on any cached component of this type
|
||||
for c in self.sox_client.cache:
|
||||
if c is not None and c.kit_id == kit_id and c.type_id == type_id_val:
|
||||
|
||||
@@ -1969,13 +1969,29 @@ def _load_live_schema(ds):
|
||||
"""Loads schema kits from the device's schema parts into the editor registry."""
|
||||
app_state.active_schema_kits.clear()
|
||||
app_state.final_components_registry.clear()
|
||||
if ds.sox_client and ds.sox_client.schema_parts:
|
||||
for part in ds.sox_client.schema_parts:
|
||||
app_state.active_schema_kits[part.name] = f"{part.checksum & 0xFFFFFFFF:08x}"
|
||||
try:
|
||||
schema.load_schema_kits_and_manifests()
|
||||
except Exception:
|
||||
pass
|
||||
if not (ds.sox_client and ds.sox_client.schema_parts):
|
||||
return
|
||||
|
||||
for part in ds.sox_client.schema_parts:
|
||||
app_state.active_schema_kits[part.name] = f"{part.checksum & 0xFFFFFFFF:08x}"
|
||||
|
||||
# Collect manifests we have, skip missing kits (device may use kits
|
||||
# not installed on this computer — load what we can)
|
||||
manifest_paths = []
|
||||
missing = []
|
||||
for name, checksum in app_state.active_schema_kits.items():
|
||||
path = schema.find_manifest_path(name, checksum)
|
||||
if path:
|
||||
manifest_paths.append(path)
|
||||
else:
|
||||
missing.append(name)
|
||||
|
||||
if manifest_paths:
|
||||
schema.compile_schema_registry(manifest_paths)
|
||||
|
||||
if missing:
|
||||
app_state.set_status(
|
||||
f"Missing kit manifests: {', '.join(missing)}", warn=True)
|
||||
|
||||
|
||||
def do_device_disconnect():
|
||||
|
||||
@@ -363,6 +363,10 @@ class SoxClient:
|
||||
# each slot dict: {name, id, type_name, is_config, is_runtime, is_action, is_operator, is_as_str}
|
||||
self.slot_registry = {}
|
||||
|
||||
# type name map — set externally by device_session
|
||||
# maps (kit_id, type_id) -> "kit::TypeName" for proper type resolution
|
||||
self.type_name_map = {}
|
||||
|
||||
# event callback: called on main thread via queue
|
||||
self.on_event = None # fn(comp_id, what_char)
|
||||
|
||||
@@ -853,6 +857,9 @@ class SoxClient:
|
||||
comp.links = links
|
||||
|
||||
def _resolve_type_name(self, kit_id, type_id_val):
|
||||
resolved = self.type_name_map.get((kit_id, type_id_val))
|
||||
if resolved:
|
||||
return resolved
|
||||
if self.schema_parts and 0 <= kit_id < len(self.schema_parts):
|
||||
kit_name = self.schema_parts[kit_id].name
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user