mirror of
https://github.com/signalapp/Signal-Desktop.git
synced 2026-04-24 10:28:03 +01:00
Show "unplayed" dot on incoming audio messages
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user