mirror of
https://github.com/signalapp/Signal-Desktop.git
synced 2026-04-18 23:49:20 +01:00
Implement megaphone conditional standard_donate with local device createdAt
This commit is contained in:
@@ -27,41 +27,45 @@ export async function onDeviceNameChangeSync(
|
||||
const { confirm } = event;
|
||||
|
||||
const maybeQueueAndThenConfirm = async () => {
|
||||
await maybeQueueDeviceNameFetch();
|
||||
await maybeQueueDeviceInfoFetch();
|
||||
confirm();
|
||||
};
|
||||
|
||||
drop(maybeQueueAndThenConfirm());
|
||||
}
|
||||
|
||||
export async function maybeQueueDeviceNameFetch(): Promise<void> {
|
||||
export async function maybeQueueDeviceInfoFetch(): Promise<void> {
|
||||
if (deviceNameFetchQueue.size >= 1) {
|
||||
log.info('maybeQueueDeviceNameFetch: skipping; fetch already queued');
|
||||
log.info('maybeQueueDeviceInfoFetch: skipping; fetch already queued');
|
||||
}
|
||||
|
||||
try {
|
||||
await deviceNameFetchQueue.add(fetchAndUpdateDeviceName);
|
||||
await deviceNameFetchQueue.add(fetchAndUpdateDeviceInfo);
|
||||
} catch (e) {
|
||||
log.error(
|
||||
'maybeQueueDeviceNameFetch: error when fetching device name',
|
||||
'maybeQueueDeviceInfoFetch: error when fetching device name',
|
||||
toLogFormat(e)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async function fetchAndUpdateDeviceName() {
|
||||
async function fetchAndUpdateDeviceInfo() {
|
||||
const { devices } = await getDevices();
|
||||
const localDeviceId = parseIntOrThrow(
|
||||
itemStorage.user.getDeviceId(),
|
||||
'fetchAndUpdateDeviceName: localDeviceId'
|
||||
'fetchAndUpdateDeviceInfo: localDeviceId'
|
||||
);
|
||||
const ourDevice = devices.find(device => device.id === localDeviceId);
|
||||
strictAssert(ourDevice, 'ourDevice must be returned from devices endpoint');
|
||||
|
||||
const newNameEncrypted = ourDevice.name;
|
||||
await maybeUpdateDeviceCreatedAt(
|
||||
ourDevice.createdAtCiphertext,
|
||||
localDeviceId
|
||||
);
|
||||
|
||||
const newNameEncrypted = ourDevice.name;
|
||||
if (!newNameEncrypted) {
|
||||
log.error('fetchAndUpdateDeviceName: device had empty name');
|
||||
log.error('fetchAndUpdateDeviceInfo: device had empty name');
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -71,20 +75,49 @@ async function fetchAndUpdateDeviceName() {
|
||||
} catch (e) {
|
||||
const deviceNameWasEncrypted = itemStorage.user.getDeviceNameEncrypted();
|
||||
log.error(
|
||||
`fetchAndUpdateDeviceName: failed to decrypt device name. Was encrypted local state: ${deviceNameWasEncrypted}`
|
||||
`fetchAndUpdateDeviceInfo: failed to decrypt device name. Was encrypted local state: ${deviceNameWasEncrypted}`
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const existingName = itemStorage.user.getDeviceName();
|
||||
if (newName === existingName) {
|
||||
log.info('fetchAndUpdateDeviceName: new name matches existing name');
|
||||
log.info('fetchAndUpdateDeviceInfo: new name matches existing name');
|
||||
return;
|
||||
}
|
||||
|
||||
await itemStorage.user.setDeviceName(newName);
|
||||
window.Whisper.events.emit('deviceNameChanged');
|
||||
log.info(
|
||||
'fetchAndUpdateDeviceName: successfully updated new device name locally'
|
||||
'fetchAndUpdateDeviceInfo: successfully updated new device name locally'
|
||||
);
|
||||
}
|
||||
|
||||
async function maybeUpdateDeviceCreatedAt(
|
||||
createdAtCiphertext: string,
|
||||
deviceId: number
|
||||
): Promise<void> {
|
||||
const existingCreatedAt = itemStorage.user.getDeviceCreatedAt();
|
||||
if (existingCreatedAt) {
|
||||
return;
|
||||
}
|
||||
|
||||
const createdAtEncrypted = createdAtCiphertext;
|
||||
let createdAt: number | undefined;
|
||||
try {
|
||||
createdAt = await accountManager.decryptDeviceCreatedAt(
|
||||
createdAtEncrypted,
|
||||
deviceId
|
||||
);
|
||||
} catch (e) {
|
||||
log.error(
|
||||
'maybeUpdateDeviceCreatedAt: failed to decrypt device createdAt',
|
||||
toLogFormat(e)
|
||||
);
|
||||
}
|
||||
|
||||
if (createdAt) {
|
||||
await itemStorage.user.setDeviceCreatedAt(createdAt);
|
||||
log.info('maybeUpdateDeviceCreatedAt: saved createdAt');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user