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>( function queuedEventListener<E extends Event>(
handler: (event: E) => Promise<void> | void, handler: (event: E) => Promise<void> | void
track = true
): (event: E) => void { ): (event: E) => void {
return (event: E): void => { return (event: E): void => {
drop( drop(
eventHandlerQueue.add( eventHandlerQueue.add(
createTaskWithTimeout(async () => { createTaskWithTimeout(
try { async () => handler(event),
await handler(event); `queuedEventListener(${event.type}, ${event.timeStamp})`
} 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})`)
) )
); );
}; };
@ -613,15 +603,15 @@ export async function startApp(): Promise<void> {
messageReceiver.addEventListener( messageReceiver.addEventListener(
'envelopeUnsealed', 'envelopeUnsealed',
queuedEventListener(onEnvelopeUnsealed, false) queuedEventListener(onEnvelopeUnsealed)
); );
messageReceiver.addEventListener( messageReceiver.addEventListener(
'envelopeQueued', 'envelopeQueued',
queuedEventListener(onEnvelopeQueued, false) queuedEventListener(onEnvelopeQueued)
); );
messageReceiver.addEventListener( messageReceiver.addEventListener(
'message', 'message',
queuedEventListener(onMessageReceived, false) queuedEventListener(onMessageReceived)
); );
messageReceiver.addEventListener( messageReceiver.addEventListener(
'delivery', 'delivery',
@ -633,7 +623,7 @@ export async function startApp(): Promise<void> {
); );
messageReceiver.addEventListener( messageReceiver.addEventListener(
'sent', 'sent',
queuedEventListener(onSentMessage, false) queuedEventListener(onSentMessage)
); );
messageReceiver.addEventListener( messageReceiver.addEventListener(
'readSync', 'readSync',
@ -651,10 +641,7 @@ export async function startApp(): Promise<void> {
'view', 'view',
queuedEventListener(onViewReceipt) queuedEventListener(onViewReceipt)
); );
messageReceiver.addEventListener( messageReceiver.addEventListener('error', queuedEventListener(onError));
'error',
queuedEventListener(onError, false)
);
messageReceiver.addEventListener( messageReceiver.addEventListener(
'successful-decrypt', 'successful-decrypt',
@ -710,31 +697,31 @@ export async function startApp(): Promise<void> {
messageReceiver.addEventListener('keys', queuedEventListener(onKeysSync)); messageReceiver.addEventListener('keys', queuedEventListener(onKeysSync));
messageReceiver.addEventListener( messageReceiver.addEventListener(
'storyRecipientUpdate', 'storyRecipientUpdate',
queuedEventListener(onStoryRecipientUpdate, false) queuedEventListener(onStoryRecipientUpdate)
); );
messageReceiver.addEventListener( messageReceiver.addEventListener(
'callEventSync', 'callEventSync',
queuedEventListener(onCallEventSync, false) queuedEventListener(onCallEventSync)
); );
messageReceiver.addEventListener( messageReceiver.addEventListener(
'callLinkUpdateSync', 'callLinkUpdateSync',
queuedEventListener(onCallLinkUpdateSync, false) queuedEventListener(onCallLinkUpdateSync)
); );
messageReceiver.addEventListener( messageReceiver.addEventListener(
'callLogEventSync', 'callLogEventSync',
queuedEventListener(onCallLogEventSync, false) queuedEventListener(onCallLogEventSync)
); );
messageReceiver.addEventListener( messageReceiver.addEventListener(
'deleteForMeSync', 'deleteForMeSync',
queuedEventListener(onDeleteForMeSync, false) queuedEventListener(onDeleteForMeSync)
); );
messageReceiver.addEventListener( messageReceiver.addEventListener(
'attachmentBackfillResponseSync', 'attachmentBackfillResponseSync',
queuedEventListener(onAttachmentBackfillResponseSync, false) queuedEventListener(onAttachmentBackfillResponseSync)
); );
messageReceiver.addEventListener( messageReceiver.addEventListener(
'deviceNameChangeSync', 'deviceNameChangeSync',
queuedEventListener(onDeviceNameChangeSync, false) queuedEventListener(onDeviceNameChangeSync)
); );
if (!window.storage.get('defaultConversationColor')) { 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); window.Whisper.events.on('manualConnect', manualConnect);
function manualConnect() { function manualConnect() {
if (isSocketOnline()) { if (isSocketOnline()) {

View file

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