From 23b8312f02317b61a3abb0d639a9304083181f01 Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Fri, 31 Dec 2021 18:17:52 +0100 Subject: [PATCH] Message: Fix support for edited media --- src/api/gramjs/apiBuilders/messages.ts | 4 ++++ src/api/gramjs/methods/media.ts | 2 +- src/api/types/messages.ts | 2 ++ src/modules/helpers/messageMedia.ts | 3 ++- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/api/gramjs/apiBuilders/messages.ts b/src/api/gramjs/apiBuilders/messages.ts index 98a614290..0ccfa49ae 100644 --- a/src/api/gramjs/apiBuilders/messages.ts +++ b/src/api/gramjs/apiBuilders/messages.ts @@ -396,6 +396,7 @@ function buildAudio(media: GramJs.TypeMessageMedia): ApiAudio | undefined { .map((thumb) => buildApiPhotoSize(thumb)); return { + id: String(media.document.id), fileName: getFilenameFromDocument(media.document, 'audio'), thumbnailSizes, ...pick(media.document, ['size', 'mimeType']), @@ -424,6 +425,7 @@ function buildVoice(media: GramJs.TypeMessageMedia): ApiVoice | undefined { const { duration, waveform } = audioAttribute; return { + id: String(media.document.id), duration, waveform: waveform ? Array.from(waveform) : undefined, }; @@ -981,6 +983,7 @@ function buildUploadingMedia( const { data: inputWaveform } = interpolateArray(waveform, INPUT_WAVEFORM_LENGTH); return { voice: { + id: LOCAL_MEDIA_UPLOADING_TEMP_ID, duration, waveform: inputWaveform, }, @@ -988,6 +991,7 @@ function buildUploadingMedia( } else if (mimeType.startsWith('audio/')) { return { audio: { + id: LOCAL_MEDIA_UPLOADING_TEMP_ID, mimeType, fileName, size, diff --git a/src/api/gramjs/methods/media.ts b/src/api/gramjs/methods/media.ts index 3528c9e59..fbfa6ee9c 100644 --- a/src/api/gramjs/methods/media.ts +++ b/src/api/gramjs/methods/media.ts @@ -75,7 +75,7 @@ async function download( ) { const mediaMatch = url.startsWith('webDocument') ? url.match(/(webDocument):(.+)/) - : url.match(/(avatar|profile|photo|msg|stickerSet|sticker|wallpaper|gif|file)([-\d\w./]+)(\?size=\w+)?/); + : url.match(/(avatar|profile|photo|msg|stickerSet|sticker|wallpaper|gif|file)([-\d\w./]+)(?::\d+)?(\?size=\w+)?/); if (!mediaMatch) { return undefined; } diff --git a/src/api/types/messages.ts b/src/api/types/messages.ts index ebb712649..b5bd43fcb 100644 --- a/src/api/types/messages.ts +++ b/src/api/types/messages.ts @@ -63,6 +63,7 @@ export interface ApiVideo { } export interface ApiAudio { + id: string; size: number; mimeType: string; fileName: string; @@ -73,6 +74,7 @@ export interface ApiAudio { } export interface ApiVoice { + id: string; duration: number; waveform?: number[]; } diff --git a/src/modules/helpers/messageMedia.ts b/src/modules/helpers/messageMedia.ts index 038c86e83..7adcacac2 100644 --- a/src/modules/helpers/messageMedia.ts +++ b/src/modules/helpers/messageMedia.ts @@ -140,7 +140,8 @@ export function getMessageMediaHash( return undefined; } - const base = getMessageKey(message); + const mediaId = (messagePhoto || messageVideo || sticker || audio || voice || document)!.id; + const base = `${getMessageKey(message)}${mediaId ? `:${mediaId}` : ''}`; if (messageVideo) { switch (target) {