Simplify message receiver event
This commit is contained in:
parent
e80db63e6b
commit
6ab849400d
3 changed files with 28 additions and 90 deletions
|
@ -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()) {
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue