send dataExtractionNotificaionMessage on saving attachment on priv chats
parent
b87faa9291
commit
810ccdf675
@ -0,0 +1,79 @@
|
|||||||
|
import { SignalService } from '../../../../protobuf';
|
||||||
|
import { MessageParams } from '../Message';
|
||||||
|
import { ContentMessage } from '..';
|
||||||
|
import { v4 as uuid } from 'uuid';
|
||||||
|
import { PubKey } from '../../../types';
|
||||||
|
import { getMessageQueue } from '../../..';
|
||||||
|
import { ConversationController } from '../../../conversations';
|
||||||
|
import { UserUtils } from '../../../utils';
|
||||||
|
interface DataExtractionNotificationMessageParams extends MessageParams {
|
||||||
|
referencedAttachmentTimestamp: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class DataExtractionNotificationMessage extends ContentMessage {
|
||||||
|
public readonly referencedAttachmentTimestamp: number;
|
||||||
|
|
||||||
|
constructor(params: DataExtractionNotificationMessageParams) {
|
||||||
|
super({ timestamp: params.timestamp, identifier: params.identifier });
|
||||||
|
this.referencedAttachmentTimestamp = params.referencedAttachmentTimestamp;
|
||||||
|
// this does not make any sense
|
||||||
|
if (!this.referencedAttachmentTimestamp) {
|
||||||
|
throw new Error('referencedAttachmentTimestamp must be set');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public contentProto(): SignalService.Content {
|
||||||
|
return new SignalService.Content({
|
||||||
|
dataExtractionNotification: this.dataExtractionProto(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected dataExtractionProto(): SignalService.DataExtractionNotification {
|
||||||
|
const ACTION_ENUM = SignalService.DataExtractionNotification.Type;
|
||||||
|
|
||||||
|
const action = ACTION_ENUM.MEDIA_SAVED; // we cannot know when user screenshots, so it can only be a media saved
|
||||||
|
|
||||||
|
const dataExtraction = new SignalService.DataExtractionNotification();
|
||||||
|
dataExtraction.type = action;
|
||||||
|
dataExtraction.timestamp = this.referencedAttachmentTimestamp;
|
||||||
|
|
||||||
|
return dataExtraction;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Currently only enabled for private chats
|
||||||
|
*/
|
||||||
|
export const sendDataExtractionNotification = async (
|
||||||
|
conversationId: string,
|
||||||
|
attachmentSender: string,
|
||||||
|
referencedAttachmentTimestamp?: number
|
||||||
|
) => {
|
||||||
|
const convo = ConversationController.getInstance().get(conversationId);
|
||||||
|
if (
|
||||||
|
!convo ||
|
||||||
|
!convo.isPrivate() ||
|
||||||
|
convo.isMe() ||
|
||||||
|
UserUtils.isUsFromCache(PubKey.cast(attachmentSender)) ||
|
||||||
|
!referencedAttachmentTimestamp
|
||||||
|
) {
|
||||||
|
window.log.warn('Not sending saving attachment notification for', attachmentSender);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const dataExtractionNotificationMessage = new DataExtractionNotificationMessage({
|
||||||
|
referencedAttachmentTimestamp,
|
||||||
|
identifier: uuid(),
|
||||||
|
timestamp: Date.now(),
|
||||||
|
});
|
||||||
|
const pubkey = PubKey.cast(conversationId);
|
||||||
|
window.log.info(
|
||||||
|
`Sending DataExtractionNotification to ${conversationId} about attachment: ${referencedAttachmentTimestamp}`
|
||||||
|
);
|
||||||
|
|
||||||
|
try {
|
||||||
|
await getMessageQueue().sendToPubKey(pubkey, dataExtractionNotificationMessage);
|
||||||
|
} catch (e) {
|
||||||
|
window.log.warn('failed to send data extraction notification', e);
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue