From 6b14b6043bfecfc6987805fb6c98ddeea0643825 Mon Sep 17 00:00:00 2001 From: Pawel12d Date: Tue, 3 Mar 2026 23:13:18 +0100 Subject: [PATCH 1/3] render animated avif files correctly --- src/components/appMediaViewerBase.ts | 2 +- src/components/popups/newMedia.ts | 3 ++- src/components/wrappers/video.ts | 4 ++-- src/lib/appManagers/appDocsManager.ts | 2 +- src/lib/appManagers/appMessagesManager.ts | 3 +++ 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/components/appMediaViewerBase.ts b/src/components/appMediaViewerBase.ts index 8f46578f61..ff8bcdccd7 100644 --- a/src/components/appMediaViewerBase.ts +++ b/src/components/appMediaViewerBase.ts @@ -1748,7 +1748,7 @@ export default class AppMediaViewerBase< const isLiveStream = media._ === 'inputGroupCall'; const isDocument = media._ === 'document'; - const isVideo = isDocument && media.mime_type && ((['video', 'gif'] as MyDocument['type'][]).includes(media.type) || media.mime_type.indexOf('video/') === 0); + const isVideo = isDocument && media.mime_type && media.mime_type !== 'image/avif' && ((['video', 'gif'] as MyDocument['type'][]).includes(media.type) || media.mime_type.indexOf('video/') === 0); let isHlsStream: boolean; this.log('openMedia', media, fromId, prevTargets, nextTargets, isLiveStream, isDocument, isVideo); diff --git a/src/components/popups/newMedia.ts b/src/components/popups/newMedia.ts index ded4b463b7..26de5daa2d 100644 --- a/src/components/popups/newMedia.ts +++ b/src/components/popups/newMedia.ts @@ -936,7 +936,7 @@ export default class PopupNewMedia extends PopupElement { const PHOTO_SIDE_LIMIT = 2560; let url = image.src, scaledBlob: Blob; if( - mimeType !== 'image/gif' && + mimeType !== 'image/gif' && mimeType !== 'image/avif' && (Math.max(image.naturalWidth, image.naturalHeight) > PHOTO_SIDE_LIMIT || (convertIncompatible && !SERVER_IMAGE_MIME_TYPES.has(mimeType))) ) { const {blob} = await scaleMediaElement({ @@ -1413,6 +1413,7 @@ export default class PopupNewMedia extends PopupElement { params.itemDiv = itemDiv; const promise = shouldCompress ? this.attachMedia(params) : this.attachDocument(params); + console.log("deboog", params, params.objectURL); willAttach.sendFileDetails.push(params); return promise.catch((err) => { itemDiv.style.backgroundColor = '#000'; diff --git a/src/components/wrappers/video.ts b/src/components/wrappers/video.ts index 8de09708d9..042b0f626e 100644 --- a/src/components/wrappers/video.ts +++ b/src/components/wrappers/video.ts @@ -166,7 +166,7 @@ export default async function wrapVideo({doc, altDoc, container, message, boxWid } } } else { - spanTime.innerText = 'GIF'; + spanTime.innerText = (doc.mime_type == "image/avif" && 'AVIF') || 'GIF'; if(!canAutoplay && !noPlayButton) { needPlayButton = true; @@ -186,7 +186,7 @@ export default async function wrapVideo({doc, altDoc, container, message, boxWid loadPromise: Promise } = {} as any; - if(doc.mime_type === 'image/gif') { + if(doc.mime_type === 'image/gif' || doc.mime_type === 'image/avif') { const photoRes = await wrapPhoto({ photo: doc, message, diff --git a/src/lib/appManagers/appDocsManager.ts b/src/lib/appManagers/appDocsManager.ts index e41d8327e4..7f3384e409 100644 --- a/src/lib/appManagers/appDocsManager.ts +++ b/src/lib/appManagers/appDocsManager.ts @@ -251,7 +251,7 @@ export class AppDocsManager extends AppManager { } } else if(doc.mime_type === EXTENSION_MIME_TYPE_MAP.pdf) { doc.type = 'pdf'; - } else if(doc.mime_type === EXTENSION_MIME_TYPE_MAP.gif) { + } else if(doc.mime_type === EXTENSION_MIME_TYPE_MAP.gif || doc.mime_type === EXTENSION_MIME_TYPE_MAP.avif) { doc.type = 'gif'; } else if(doc.mime_type === EXTENSION_MIME_TYPE_MAP.tgs && doc.file_name === 'AnimatedSticker.tgs') { doc.type = 'sticker'; diff --git a/src/lib/appManagers/appMessagesManager.ts b/src/lib/appManagers/appMessagesManager.ts index d30b13b031..62fbee605a 100644 --- a/src/lib/appManagers/appMessagesManager.ts +++ b/src/lib/appManagers/appMessagesManager.ts @@ -1507,6 +1507,9 @@ export class AppMessagesManager extends AppManager { if(isDocument) { file = this.appDocsManager.getDoc((file as MyDocument).id) || file; } + if(file.type === 'image/avif') { + options.isMedia = null; + } const hadMessageBefore = !!options.groupedMessage; const message = options.groupedMessage || this.generateOutgoingMessage(peerId, options); From e23b7c8bed3cbc312403fb1ee1a753192bc5d2a0 Mon Sep 17 00:00:00 2001 From: Pawel12d Date: Tue, 3 Mar 2026 23:44:20 +0100 Subject: [PATCH 2/3] removed a debug log --- src/components/popups/newMedia.ts | 2 +- src/lib/appManagers/appMessagesManager.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/popups/newMedia.ts b/src/components/popups/newMedia.ts index 26de5daa2d..1658e33af6 100644 --- a/src/components/popups/newMedia.ts +++ b/src/components/popups/newMedia.ts @@ -1413,7 +1413,7 @@ export default class PopupNewMedia extends PopupElement { params.itemDiv = itemDiv; const promise = shouldCompress ? this.attachMedia(params) : this.attachDocument(params); - console.log("deboog", params, params.objectURL); + willAttach.sendFileDetails.push(params); return promise.catch((err) => { itemDiv.style.backgroundColor = '#000'; diff --git a/src/lib/appManagers/appMessagesManager.ts b/src/lib/appManagers/appMessagesManager.ts index 62fbee605a..b39b330f96 100644 --- a/src/lib/appManagers/appMessagesManager.ts +++ b/src/lib/appManagers/appMessagesManager.ts @@ -1508,7 +1508,7 @@ export class AppMessagesManager extends AppManager { file = this.appDocsManager.getDoc((file as MyDocument).id) || file; } if(file.type === 'image/avif') { - options.isMedia = null; + options.isMedia = null; // telegram server rejects the request if isMedia is true } const hadMessageBefore = !!options.groupedMessage; From 6cdd84683c445fa6a4795b5fb44335bd55d23463 Mon Sep 17 00:00:00 2001 From: Pawel12d <68199836+Pawel12d@users.noreply.github.com> Date: Tue, 3 Mar 2026 23:47:09 +0100 Subject: [PATCH 3/3] Remove debug log from newMedia.ts Remove debug console log from media attachment process. --- src/components/popups/newMedia.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/popups/newMedia.ts b/src/components/popups/newMedia.ts index 26de5daa2d..1658e33af6 100644 --- a/src/components/popups/newMedia.ts +++ b/src/components/popups/newMedia.ts @@ -1413,7 +1413,7 @@ export default class PopupNewMedia extends PopupElement { params.itemDiv = itemDiv; const promise = shouldCompress ? this.attachMedia(params) : this.attachDocument(params); - console.log("deboog", params, params.objectURL); + willAttach.sendFileDetails.push(params); return promise.catch((err) => { itemDiv.style.backgroundColor = '#000';