mirror of
https://github.com/MarekWo/mc-webui.git
synced 2026-04-30 18:42:29 +02:00
fix(v2): Use event.payload instead of event.data throughout
The meshcore Event class has 'payload' not 'data'. All event handlers were silently getting empty dicts, causing: - Channel messages showing 'Unknown' sender - Channel info not returning name/secret - Sent message event data being lost Also normalizes channel_name/channel_secret keys from CHANNEL_INFO events and converts secret bytes to hex string. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -253,7 +253,7 @@ class DeviceManager:
|
||||
async def _on_channel_message(self, event):
|
||||
"""Handle incoming channel message."""
|
||||
try:
|
||||
data = event.data if hasattr(event, 'data') else {}
|
||||
data = getattr(event, 'payload', {})
|
||||
ts = data.get('timestamp', int(time.time()))
|
||||
sender = data.get('sender_name', data.get('name', 'Unknown'))
|
||||
content = data.get('text', '')
|
||||
@@ -289,7 +289,7 @@ class DeviceManager:
|
||||
async def _on_dm_received(self, event):
|
||||
"""Handle incoming direct message."""
|
||||
try:
|
||||
data = event.data if hasattr(event, 'data') else {}
|
||||
data = getattr(event, 'payload', {})
|
||||
ts = data.get('timestamp', int(time.time()))
|
||||
content = data.get('text', '')
|
||||
sender_key = data.get('public_key', data.get('pubkey_prefix', ''))
|
||||
@@ -333,7 +333,7 @@ class DeviceManager:
|
||||
async def _on_msg_sent(self, event):
|
||||
"""Handle confirmation that our message was sent."""
|
||||
try:
|
||||
data = event.data if hasattr(event, 'data') else {}
|
||||
data = getattr(event, 'payload', {})
|
||||
expected_ack = data.get('expected_ack', '')
|
||||
msg_type = data.get('txt_type', 0)
|
||||
|
||||
@@ -348,7 +348,7 @@ class DeviceManager:
|
||||
async def _on_ack(self, event):
|
||||
"""Handle ACK (delivery confirmation for DM)."""
|
||||
try:
|
||||
data = event.data if hasattr(event, 'data') else {}
|
||||
data = getattr(event, 'payload', {})
|
||||
expected_ack = data.get('expected_ack', '')
|
||||
|
||||
if expected_ack:
|
||||
@@ -372,7 +372,7 @@ class DeviceManager:
|
||||
async def _on_advertisement(self, event):
|
||||
"""Handle received advertisement from another node."""
|
||||
try:
|
||||
data = event.data if hasattr(event, 'data') else {}
|
||||
data = getattr(event, 'payload', {})
|
||||
pubkey = data.get('public_key', '')
|
||||
name = data.get('adv_name', data.get('name', ''))
|
||||
|
||||
@@ -406,7 +406,7 @@ class DeviceManager:
|
||||
async def _on_path_update(self, event):
|
||||
"""Handle path update for a contact."""
|
||||
try:
|
||||
data = event.data if hasattr(event, 'data') else {}
|
||||
data = getattr(event, 'payload', {})
|
||||
pubkey = data.get('public_key', '')
|
||||
|
||||
if pubkey:
|
||||
@@ -424,7 +424,7 @@ class DeviceManager:
|
||||
async def _on_new_contact(self, event):
|
||||
"""Handle new contact discovered."""
|
||||
try:
|
||||
data = event.data if hasattr(event, 'data') else {}
|
||||
data = getattr(event, 'payload', {})
|
||||
pubkey = data.get('public_key', '')
|
||||
name = data.get('adv_name', data.get('name', ''))
|
||||
|
||||
@@ -497,7 +497,7 @@ class DeviceManager:
|
||||
|
||||
# Store sent DM in database
|
||||
ts = int(time.time())
|
||||
event_data = event.data if hasattr(event, 'data') else {}
|
||||
event_data = getattr(event, 'payload', {})
|
||||
dm_id = self.db.insert_direct_message(
|
||||
contact_pubkey=recipient_pubkey.lower(),
|
||||
direction='out',
|
||||
@@ -567,7 +567,7 @@ class DeviceManager:
|
||||
try:
|
||||
event = self.execute(self.mc.commands.send_appstart())
|
||||
if event and hasattr(event, 'data'):
|
||||
self._self_info = event.data
|
||||
self._self_info = getattr(event, 'payload', {})
|
||||
return dict(self._self_info)
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to get device info: {e}")
|
||||
@@ -580,8 +580,21 @@ class DeviceManager:
|
||||
|
||||
try:
|
||||
event = self.execute(self.mc.commands.get_channel(idx))
|
||||
if event and hasattr(event, 'data'):
|
||||
return event.data
|
||||
if event:
|
||||
data = getattr(event, 'payload', None) or getattr(event, 'data', None)
|
||||
if data and isinstance(data, dict):
|
||||
# Normalize keys: channel_name -> name, channel_secret -> secret
|
||||
secret = data.get('channel_secret', data.get('secret', ''))
|
||||
if isinstance(secret, bytes):
|
||||
secret = secret.hex()
|
||||
name = data.get('channel_name', data.get('name', ''))
|
||||
if isinstance(name, str):
|
||||
name = name.strip('\x00').strip()
|
||||
return {
|
||||
'name': name,
|
||||
'secret': secret,
|
||||
'channel_idx': data.get('channel_idx', idx),
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to get channel {idx}: {e}")
|
||||
return None
|
||||
@@ -695,7 +708,7 @@ class DeviceManager:
|
||||
try:
|
||||
event = self.execute(self.mc.commands.get_bat(), timeout=5)
|
||||
if event and hasattr(event, 'data'):
|
||||
return event.data
|
||||
return getattr(event, 'payload', {})
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to get battery: {e}")
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user