fix(v2): Fix DM contact names showing as pubkey prefix

- DM handler: don't overwrite contact name with prefix when name unknown
- Migration: upsert contact with sender name from v1 PRIV entries
- Fixes conversations showing "4e45565e" instead of "demo mc-webui"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
MarekWo
2026-03-01 13:58:15 +01:00
parent 4b463fecfa
commit c20e7c20ad
2 changed files with 16 additions and 6 deletions
+6 -5
View File
@@ -312,19 +312,20 @@ class DeviceManager:
sender_key = data.get('public_key', data.get('pubkey_prefix', ''))
# Look up sender from contacts — resolve prefix to full public key
sender_name = 'Unknown'
sender_name = ''
if sender_key and self.mc:
contact = self.mc.get_contact_by_key_prefix(sender_key)
if contact:
sender_name = contact.get('name', sender_key[:8])
sender_name = contact.get('name', '')
# Use the full public key from contacts (not the short prefix)
full_key = contact.get('public_key', '')
if full_key:
sender_key = full_key
if sender_key:
# Only upsert with name if we have a real name (not just a prefix)
self.db.upsert_contact(
public_key=sender_key,
name=sender_name,
name=sender_name, # empty string won't overwrite existing name
source='message',
)
@@ -340,13 +341,13 @@ class DeviceManager:
raw_json=json.dumps(data, default=str),
)
logger.info(f"DM #{dm_id} from {sender_name}")
logger.info(f"DM #{dm_id} from {sender_name or sender_key[:12]}")
if self.socketio:
self.socketio.emit('new_message', {
'type': 'dm',
'contact_pubkey': sender_key,
'sender': sender_name,
'sender': sender_name or sender_key[:12],
'content': content,
'timestamp': ts,
'id': dm_id,
+10 -1
View File
@@ -254,12 +254,21 @@ def _migrate_dm_incoming(db, entry: dict):
return
pubkey_prefix = entry.get('pubkey_prefix', '')
sender_name = entry.get('name', '')
# Use None if pubkey not in contacts table (FK constraint)
# Resolve prefix to full key if contact exists
contact_key = pubkey_prefix if pubkey_prefix else None
if contact_key:
contact_key = _resolve_pubkey(db, contact_key)
# Create/update contact with sender name from v1 data
if contact_key and sender_name:
db.upsert_contact(
public_key=contact_key,
name=sender_name,
source='message',
)
db.insert_direct_message(
contact_pubkey=contact_key,
direction='in',