fix: Profile duplication on device connect

DeviceKey resolver was falling back to deviceId when publicKey wasn't
yet available during early connection. This created two different keys
(id:xxx then pk:yyy) for the same device, causing a new profile to be
created each time.

Now returns null until publicKey is available, so profile sync waits
for the stable identifier.
This commit is contained in:
Janez T
2026-03-18 14:45:55 +01:00
parent 9303d24b69
commit 01fbb7de6c

View File

@@ -5,25 +5,17 @@ class ProfileDeviceKeyResolver {
required DeviceInfo deviceInfo,
required ConnectionMode connectionMode,
}) {
// Always prefer the public key — it's the only truly stable identifier.
// Don't fall back to deviceId to avoid creating duplicate profiles when
// publicKey arrives late (after initial connection but before DeviceInfo).
final publicKey = deviceInfo.publicKey;
if (publicKey != null && publicKey.isNotEmpty) {
if (publicKey == null || publicKey.isEmpty) {
return null; // Wait until publicKey is available
}
final hex = publicKey
.map((byte) => byte.toRadixString(16).padLeft(2, '0'))
.join();
if (hex.isNotEmpty) {
return 'pk:$hex';
}
}
final deviceId = deviceInfo.deviceId?.trim();
if (deviceId == null || deviceId.isEmpty) {
return null;
}
if (connectionMode == ConnectionMode.usb && deviceId == 'usb') {
return null;
}
return 'id:$deviceId';
return hex.isNotEmpty ? 'pk:$hex' : null;
}
}