Telegram Web K with changes to work inside I2P https://web.telegram.i2p/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

84 lines
2.9 KiB

/*
* https://github.com/morethanwords/tweb
* Copyright (C) 2019-2021 Eduard Kuzmenko
* https://github.com/morethanwords/tweb/blob/master/LICENSE
*/
import {PhotoSize, WebDocument} from '../layer';
import {REPLIES_HIDDEN_CHANNEL_ID} from '../lib/mtproto/mtproto_config';
import {MyDocument} from '../lib/appManagers/appDocsManager';
import {MyPhoto} from '../lib/appManagers/appPhotosManager';
import choosePhotoSize from '../lib/appManagers/utils/photos/choosePhotoSize';
import {MediaSize, makeMediaSize} from './mediaSize';
import isWebDocument from '../lib/appManagers/utils/webDocs/isWebDocument';
export default function setAttachmentSize(
photo: MyPhoto | MyDocument | WebDocument,
element: HTMLElement | SVGForeignObjectElement,
boxWidth: number,
boxHeight: number,
noZoom = true,
message?: any,
pushDocumentSize?: boolean,
photoSize?: ReturnType<typeof choosePhotoSize>
) {
const _isWebDocument = isWebDocument(photo);
// if(_isWebDocument && pushDocumentSize === undefined) {
// pushDocumentSize = true;
// }
if(!photoSize) {
photoSize = choosePhotoSize(photo, boxWidth, boxHeight, undefined, pushDocumentSize);
}
// console.log('setAttachmentSize', photo, photo.sizes[0].bytes, div);
let size: MediaSize;
const isDocument = photo._ === 'document';
if(isDocument || _isWebDocument) {
size = makeMediaSize(photo.w || (photoSize as PhotoSize.photoSize).w || 512, photo.h || (photoSize as PhotoSize.photoSize).h || 512);
} else {
size = makeMediaSize((photoSize as PhotoSize.photoSize).w || 100, (photoSize as PhotoSize.photoSize).h || 100);
}
let boxSize = makeMediaSize(boxWidth, boxHeight);
boxSize = size = size.aspect(boxSize, noZoom);
let isFit = true;
if(!isDocument || ['video', 'gif'].includes(photo.type) || _isWebDocument) {
if(boxSize.width < 200 && boxSize.height < 200) { // make at least one side this big
boxSize = size = size.aspectCovered(makeMediaSize(200, 200));
}
if(message &&
(message.message ||
message.reply_to_mid ||
message.media.webpage ||
(message.replies && message.replies.pFlags.comments && message.replies.channel_id.toChatId() !== REPLIES_HIDDEN_CHANNEL_ID)
)
) { // make sure that bubble block is human-readable
if(boxSize.width < 320) {
boxSize = makeMediaSize(320, boxSize.height);
isFit = false;
}
}
if(isFit && boxSize.width < 120 && message) { // if image is too narrow
boxSize = makeMediaSize(120, boxSize.height);
isFit = false;
}
}
// if(element instanceof SVGForeignObjectElement) {
// element.setAttributeNS(null, 'width', '' + w);
// element.setAttributeNS(null, 'height', '' + h);
// //console.log('set dimensions to svg element:', element, w, h);
// } else {
element.style.width = boxSize.width + 'px';
element.style.height = boxSize.height + 'px';
// }
return {photoSize, size, isFit};
}