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..1658e33af6 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); + 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..b39b330f96 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; // telegram server rejects the request if isMedia is true + } const hadMessageBefore = !!options.groupedMessage; const message = options.groupedMessage || this.generateOutgoingMessage(peerId, options);