Show "unplayed" dot on incoming audio messages

This commit is contained in:
Evan Hahn
2021-08-12 13:15:55 -05:00
committed by GitHub
parent 9fd191ae00
commit b0750e5f4e
36 changed files with 812 additions and 175 deletions

View File

@@ -91,6 +91,7 @@ import {
StickerPackEvent,
VerifiedEvent,
ReadSyncEvent,
ViewSyncEvent,
ContactEvent,
ContactSyncEvent,
GroupEvent,
@@ -440,6 +441,11 @@ export default class MessageReceiver
handler: (ev: ReadSyncEvent) => void
): void;
public addEventListener(
name: 'viewSync',
handler: (ev: ViewSyncEvent) => void
): void;
public addEventListener(
name: 'contact',
handler: (ev: ContactEvent) => void
@@ -2206,6 +2212,9 @@ export default class MessageReceiver
if (syncMessage.keys) {
return this.handleKeys(envelope, syncMessage.keys);
}
if (syncMessage.viewed && syncMessage.viewed.length) {
return this.handleViewed(envelope, syncMessage.viewed);
}
this.removeFromCache(envelope);
window.log.warn(
@@ -2388,6 +2397,32 @@ export default class MessageReceiver
await Promise.all(results);
}
private async handleViewed(
envelope: ProcessedEnvelope,
viewed: ReadonlyArray<Proto.SyncMessage.IViewed>
): Promise<void> {
window.log.info(
'MessageReceiver.handleViewed',
this.getEnvelopeId(envelope)
);
await Promise.all(
viewed.map(async ({ timestamp, senderE164, senderUuid }) => {
const ev = new ViewSyncEvent(
{
envelopeTimestamp: envelope.timestamp,
timestamp: normalizeNumber(dropNull(timestamp)),
senderE164: dropNull(senderE164),
senderUuid: senderUuid
? normalizeUuid(senderUuid, 'handleViewed.senderUuid')
: undefined,
},
this.removeFromCache.bind(this, envelope)
);
await this.dispatchAndWait(ev);
})
);
}
private async handleContacts(
envelope: ProcessedEnvelope,
contacts: Proto.SyncMessage.IContacts

View File

@@ -1297,6 +1297,33 @@ export default class MessageSender {
});
}
async syncView(
views: ReadonlyArray<{
senderUuid?: string;
senderE164?: string;
timestamp: number;
}>,
options?: SendOptionsType
): Promise<CallbackResultType> {
const myNumber = window.textsecure.storage.user.getNumber();
const myUuid = window.textsecure.storage.user.getUuid();
const syncMessage = this.createSyncMessage();
syncMessage.viewed = views.map(view => new Proto.SyncMessage.Viewed(view));
const contentMessage = new Proto.Content();
contentMessage.syncMessage = syncMessage;
const { ContentHint } = Proto.UnidentifiedSenderMessage.Message;
return this.sendIndividualProto({
identifier: myUuid || myNumber,
proto: contentMessage,
timestamp: Date.now(),
contentHint: ContentHint.RESENDABLE,
options,
});
}
async syncViewOnceOpen(
sender: string | undefined,
senderUuid: string,

View File

@@ -399,3 +399,19 @@ export class ReadSyncEvent extends ConfirmableEvent {
super('readSync', confirm);
}
}
export type ViewSyncEventData = Readonly<{
timestamp?: number;
envelopeTimestamp: number;
senderE164?: string;
senderUuid?: string;
}>;
export class ViewSyncEvent extends ConfirmableEvent {
constructor(
public readonly view: ViewSyncEventData,
confirm: ConfirmCallback
) {
super('viewSync', confirm);
}
}