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.
 
 
 
 
 

80 lines
2.4 KiB

/*
* https://github.com/morethanwords/tweb
* Copyright (C) 2019-2021 Eduard Kuzmenko
* https://github.com/morethanwords/tweb/blob/master/LICENSE
*/
import {UserProfilePhoto, ChatPhoto, InputFileLocation} from '../../layer';
import {DownloadOptions} from '../mtproto/apiFileManager';
import {AppManager} from './manager';
export type PeerPhotoSize = 'photo_small' | 'photo_big';
export class AppAvatarsManager extends AppManager {
private savedAvatarURLs: {
[peerId: PeerId]: {
[size in PeerPhotoSize]?: string | Promise<string>
}
} = {};
protected after() {
this.rootScope.addEventListener('avatar_update', (peerId) => {
this.removeFromAvatarsCache(peerId);
});
}
public isAvatarCached(peerId: PeerId, size?: PeerPhotoSize) {
const saved = this.savedAvatarURLs[peerId];
if(size === undefined) {
return !!saved;
}
return !!(saved && saved[size] && !(saved[size] instanceof Promise));
}
public removeFromAvatarsCache(peerId: PeerId) {
if(this.savedAvatarURLs[peerId]) {
delete this.savedAvatarURLs[peerId];
}
}
public loadAvatar(peerId: PeerId, photo: UserProfilePhoto.userProfilePhoto | ChatPhoto.chatPhoto, size: PeerPhotoSize) {
let saved = this.savedAvatarURLs[peerId];
if(!saved || !saved[size]) {
if(!saved) {
saved = this.savedAvatarURLs[peerId] = {};
}
// console.warn('will invoke downloadSmallFile:', peerId);
const peerPhotoFileLocation: InputFileLocation.inputPeerPhotoFileLocation = {
_: 'inputPeerPhotoFileLocation',
pFlags: {},
peer: this.appPeersManager.getInputPeerById(peerId),
photo_id: photo.photo_id
};
const downloadOptions: DownloadOptions = {dcId: photo.dc_id, location: peerPhotoFileLocation};
if(size === 'photo_big') {
peerPhotoFileLocation.pFlags.big = true;
downloadOptions.limitPart = 512 * 1024;
}
/* let str: string;
const time = Date.now();
if(peerId === 0) {
str = `download avatar ${peerId}`;
} */
const promise = this.apiFileManager.download(downloadOptions);
return saved[size] = promise.then((blob) => {
return saved[size] = URL.createObjectURL(blob);
/* if(str) {
console.log(str, Date.now() / 1000, Date.now() - time);
} */
});
} else {
return saved[size];
}
}
}