Support device name change sync message

This commit is contained in:
trevor-signal 2024-12-09 13:22:15 -05:00 committed by GitHub
parent 1c4e7bc85d
commit 96de2c2a38
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 190 additions and 12 deletions

View file

@ -113,6 +113,7 @@ import {
DecryptionErrorEvent,
DeleteForMeSyncEvent,
DeliveryEvent,
DeviceNameChangeSyncEvent,
EmptyEvent,
EnvelopeQueuedEvent,
EnvelopeUnsealedEvent,
@ -701,6 +702,11 @@ export default class MessageReceiver
handler: (ev: DeleteForMeSyncEvent) => void
): void;
public override addEventListener(
name: 'deviceNameChangeSync',
handler: (ev: DeviceNameChangeSyncEvent) => void
): void;
public override addEventListener(name: string, handler: EventHandler): void {
return super.addEventListener(name, handler);
}
@ -3191,6 +3197,12 @@ export default class MessageReceiver
if (syncMessage.deleteForMe) {
return this.handleDeleteForMeSync(envelope, syncMessage.deleteForMe);
}
if (syncMessage.deviceNameChange) {
return this.handleDeviceNameChangeSync(
envelope,
syncMessage.deviceNameChange
);
}
this.removeFromCache(envelope);
const envelopeId = getEnvelopeId(envelope);
@ -3817,6 +3829,39 @@ export default class MessageReceiver
log.info('handleDeleteForMeSync: finished');
}
private async handleDeviceNameChangeSync(
envelope: ProcessedEnvelope,
deviceNameChange: Proto.SyncMessage.IDeviceNameChange
): Promise<void> {
const logId = `MessageReceiver.handleDeviceNameChangeSync: ${getEnvelopeId(envelope)}`;
log.info(logId);
logUnexpectedUrgentValue(envelope, 'deviceNameChangeSync');
const { deviceId } = deviceNameChange;
const localDeviceId = parseIntOrThrow(
this.storage.user.getDeviceId(),
'MessageReceiver.handleDeviceNameChangeSync: localDeviceId'
);
if (deviceId == null) {
log.warn(logId, 'deviceId was falsey');
this.removeFromCache(envelope);
return;
}
if (deviceId !== localDeviceId) {
log.info(logId, 'meant for other device:', deviceId);
this.removeFromCache(envelope);
return;
}
const deviceNameChangeEvent = new DeviceNameChangeSyncEvent(
this.removeFromCache.bind(this, envelope)
);
await this.dispatchAndWait(logId, deviceNameChangeEvent);
}
private async handleContacts(
envelope: ProcessedEnvelope,
contactSyncProto: Proto.SyncMessage.IContacts