Simplify message receiver event

This commit is contained in:
Fedor Indutny 2025-05-22 09:39:45 -07:00 committed by GitHub
parent e80db63e6b
commit 6ab849400d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 28 additions and 90 deletions

View file

@ -587,25 +587,15 @@ export async function startApp(): Promise<void> {
});
function queuedEventListener<E extends Event>(
handler: (event: E) => Promise<void> | void,
track = true
handler: (event: E) => Promise<void> | void
): (event: E) => void {
return (event: E): void => {
drop(
eventHandlerQueue.add(
createTaskWithTimeout(async () => {
try {
await handler(event);
} finally {
// message/sent: Message.handleDataMessage has its own queue and will
// trigger this event itself when complete.
// error: Error processing (below) also has its own queue and
// self-trigger.
if (track) {
window.Whisper.events.trigger('incrementProgress');
}
}
}, `queuedEventListener(${event.type}, ${event.timeStamp})`)
createTaskWithTimeout(
async () => handler(event),
`queuedEventListener(${event.type}, ${event.timeStamp})`
)
)
);
};
@ -613,15 +603,15 @@ export async function startApp(): Promise<void> {
messageReceiver.addEventListener(
'envelopeUnsealed',
queuedEventListener(onEnvelopeUnsealed, false)
queuedEventListener(onEnvelopeUnsealed)
);
messageReceiver.addEventListener(
'envelopeQueued',
queuedEventListener(onEnvelopeQueued, false)
queuedEventListener(onEnvelopeQueued)
);
messageReceiver.addEventListener(
'message',
queuedEventListener(onMessageReceived, false)
queuedEventListener(onMessageReceived)
);
messageReceiver.addEventListener(
'delivery',
@ -633,7 +623,7 @@ export async function startApp(): Promise<void> {
);
messageReceiver.addEventListener(
'sent',
queuedEventListener(onSentMessage, false)
queuedEventListener(onSentMessage)
);
messageReceiver.addEventListener(
'readSync',
@ -651,10 +641,7 @@ export async function startApp(): Promise<void> {
'view',
queuedEventListener(onViewReceipt)
);
messageReceiver.addEventListener(
'error',
queuedEventListener(onError, false)
);
messageReceiver.addEventListener('error', queuedEventListener(onError));
messageReceiver.addEventListener(
'successful-decrypt',
@ -710,31 +697,31 @@ export async function startApp(): Promise<void> {
messageReceiver.addEventListener('keys', queuedEventListener(onKeysSync));
messageReceiver.addEventListener(
'storyRecipientUpdate',
queuedEventListener(onStoryRecipientUpdate, false)
queuedEventListener(onStoryRecipientUpdate)
);
messageReceiver.addEventListener(
'callEventSync',
queuedEventListener(onCallEventSync, false)
queuedEventListener(onCallEventSync)
);
messageReceiver.addEventListener(
'callLinkUpdateSync',
queuedEventListener(onCallLinkUpdateSync, false)
queuedEventListener(onCallLinkUpdateSync)
);
messageReceiver.addEventListener(
'callLogEventSync',
queuedEventListener(onCallLogEventSync, false)
queuedEventListener(onCallLogEventSync)
);
messageReceiver.addEventListener(
'deleteForMeSync',
queuedEventListener(onDeleteForMeSync, false)
queuedEventListener(onDeleteForMeSync)
);
messageReceiver.addEventListener(
'attachmentBackfillResponseSync',
queuedEventListener(onAttachmentBackfillResponseSync, false)
queuedEventListener(onAttachmentBackfillResponseSync)
);
messageReceiver.addEventListener(
'deviceNameChangeSync',
queuedEventListener(onDeviceNameChangeSync, false)
queuedEventListener(onDeviceNameChangeSync)
);
if (!window.storage.get('defaultConversationColor')) {
@ -2206,21 +2193,6 @@ export async function startApp(): Promise<void> {
}
}
let initialStartupCount = 0;
window.Whisper.events.on('incrementProgress', incrementProgress);
function incrementProgress() {
initialStartupCount += 1;
// Only update progress every 10 items
if (initialStartupCount % 10 !== 0) {
return;
}
log.info(`incrementProgress: Message count is ${initialStartupCount}`);
window.Whisper.events.trigger('loadingProgress', initialStartupCount);
}
window.Whisper.events.on('manualConnect', manualConnect);
function manualConnect() {
if (isSocketOnline()) {

View file

@ -127,7 +127,6 @@ import {
MessageEvent,
MessageRequestResponseEvent,
ProfileKeyUpdateEvent,
ProgressEvent,
ReadEvent,
ReadSyncEvent,
RetryRequestEvent,
@ -538,11 +537,6 @@ export default class MessageReceiver
handler: (ev: EmptyEvent) => void
): void;
public override addEventListener(
name: 'progress',
handler: (ev: ProgressEvent) => void
): void;
public override addEventListener(
name: 'typing',
handler: (ev: TypingEvent) => void
@ -746,13 +740,9 @@ export default class MessageReceiver
? this.#encryptedQueue
: this.#decryptedQueue;
try {
return await queue.add(
createTaskWithTimeout(task, id, TASK_WITH_TIMEOUT_OPTIONS)
);
} finally {
this.#updateProgress(this.#count);
}
return queue.add(
createTaskWithTimeout(task, id, TASK_WITH_TIMEOUT_OPTIONS)
);
}
#onEmpty(): void {
@ -835,14 +825,6 @@ export default class MessageReceiver
drop(waitForCacheAddBatcher());
}
#updateProgress(count: number): void {
// count by 10s
if (count % 10 !== 0) {
return;
}
this.dispatchEvent(new ProgressEvent({ count }));
}
async #queueAllCached(): Promise<void> {
if (this.#stoppingProcessing) {
log.info(
@ -1976,14 +1958,11 @@ export default class MessageReceiver
);
if (isAciString(uuid) && isNumber(deviceId)) {
const event = new SuccessfulDecryptEvent(
{
senderDevice: deviceId,
senderAci: uuid,
timestamp: envelope.timestamp,
},
() => this.#removeFromCache(envelope)
);
const event = new SuccessfulDecryptEvent({
senderDevice: deviceId,
senderAci: uuid,
timestamp: envelope.timestamp,
});
drop(
this.#addToQueue(
async () => this.dispatchEvent(event),

View file

@ -31,16 +31,6 @@ export class EmptyEvent extends Event {
}
}
export class ProgressEvent extends Event {
public readonly count: number;
constructor({ count }: { count: number }) {
super('progress');
this.count = count;
}
}
export type TypingEventData = Readonly<{
typingMessage: Proto.ITypingMessage;
timestamp: number;
@ -146,12 +136,9 @@ export type SuccessfulDecryptEventData = Readonly<{
timestamp: number;
}>;
export class SuccessfulDecryptEvent extends ConfirmableEvent {
constructor(
public readonly data: SuccessfulDecryptEventData,
confirm: ConfirmCallback
) {
super('successful-decrypt', confirm);
export class SuccessfulDecryptEvent extends Event {
constructor(public readonly data: SuccessfulDecryptEventData) {
super('successful-decrypt');
}
}