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.
102 lines
3.0 KiB
102 lines
3.0 KiB
/* |
|
* https://github.com/morethanwords/tweb |
|
* Copyright (C) 2019-2021 Eduard Kuzmenko |
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE |
|
*/ |
|
|
|
import {ChatAutoDownloadSettings} from '../../helpers/autoDownload'; |
|
import mediaSizes from '../../helpers/mediaSizes'; |
|
import {Middleware} from '../../helpers/middleware'; |
|
import {Message, PhotoSize} from '../../layer'; |
|
import {AppManagers} from '../../lib/appManagers/managers'; |
|
import getMediaFromMessage from '../../lib/appManagers/utils/messages/getMediaFromMessage'; |
|
import choosePhotoSize from '../../lib/appManagers/utils/photos/choosePhotoSize'; |
|
import rootScope from '../../lib/rootScope'; |
|
import Chat from '../chat/chat'; |
|
import LazyLoadQueue from '../lazyLoadQueue'; |
|
import prepareAlbum from '../prepareAlbum'; |
|
import wrapPhoto from './photo'; |
|
import wrapVideo from './video'; |
|
|
|
export default function wrapAlbum({messages, attachmentDiv, middleware, uploading, lazyLoadQueue, isOut, chat, loadPromises, autoDownload, managers = rootScope.managers}: { |
|
messages: Message.message[], |
|
attachmentDiv: HTMLElement, |
|
middleware?: Middleware, |
|
lazyLoadQueue?: LazyLoadQueue, |
|
uploading?: boolean, |
|
isOut: boolean, |
|
chat: Chat, |
|
loadPromises?: Promise<any>[], |
|
autoDownload?: ChatAutoDownloadSettings, |
|
managers?: AppManagers |
|
}) { |
|
const items: {size: PhotoSize.photoSize, media: any, message: any}[] = []; |
|
|
|
// !lowest msgID will be the FIRST in album |
|
for(const message of messages) { |
|
const media = getMediaFromMessage(message); |
|
|
|
const size: any = media._ === 'photo' ? choosePhotoSize(media, 480, 480) : {w: media.w, h: media.h}; |
|
items.push({size, media, message}); |
|
} |
|
|
|
/* // * pending |
|
if(storage[0] < 0) { |
|
items.reverse(); |
|
} */ |
|
|
|
prepareAlbum({ |
|
container: attachmentDiv, |
|
items: items.map((i) => ({w: i.size.w, h: i.size.h})), |
|
maxWidth: mediaSizes.active.album.width, |
|
minWidth: 100, |
|
spacing: 2, |
|
forMedia: true |
|
}); |
|
|
|
items.forEach((item, idx) => { |
|
const {size, media, message} = item; |
|
|
|
const div = attachmentDiv.children[idx] as HTMLElement; |
|
div.dataset.mid = '' + message.mid; |
|
div.dataset.peerId = '' + message.peerId; |
|
const mediaDiv = div.firstElementChild as HTMLElement; |
|
const isPhoto = media._ === 'photo'; |
|
let thumbPromise: Promise<any>; |
|
if(isPhoto) { |
|
thumbPromise = wrapPhoto({ |
|
photo: media, |
|
message, |
|
container: mediaDiv, |
|
boxWidth: 0, |
|
boxHeight: 0, |
|
isOut, |
|
lazyLoadQueue, |
|
middleware, |
|
size, |
|
loadPromises, |
|
autoDownloadSize: autoDownload.photo, |
|
managers |
|
}); |
|
} else { |
|
thumbPromise = wrapVideo({ |
|
doc: message.media.document, |
|
container: mediaDiv, |
|
message, |
|
boxWidth: 0, |
|
boxHeight: 0, |
|
withTail: false, |
|
isOut, |
|
lazyLoadQueue, |
|
middleware, |
|
loadPromises, |
|
autoDownload, |
|
managers |
|
}); |
|
} |
|
|
|
if(thumbPromise && loadPromises) { |
|
loadPromises.push(thumbPromise); |
|
} |
|
}); |
|
}
|
|
|