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.
113 lines
3.7 KiB
113 lines
3.7 KiB
/* |
|
* https://github.com/morethanwords/tweb |
|
* Copyright (C) 2019-2021 Eduard Kuzmenko |
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE |
|
* |
|
* Originally from: |
|
* https://github.com/zhukov/webogram |
|
* Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com> |
|
* https://github.com/zhukov/webogram/blob/master/LICENSE |
|
*/ |
|
|
|
import {Photo, PhotoSize, PhotosPhotos} from '../../layer'; |
|
import {ReferenceContext} from '../mtproto/referenceDatabase'; |
|
import isObject from '../../helpers/object/isObject'; |
|
import safeReplaceArrayInObject from '../../helpers/object/safeReplaceArrayInObject'; |
|
import {AppManager} from './manager'; |
|
|
|
export type MyPhoto = Photo.photo; |
|
|
|
// TIMES = 2 DUE TO SIDEBAR AND CHAT |
|
// let TEST_FILE_REFERENCE = "5440692274120994569", TEST_FILE_REFERENCE_TIMES = 2; |
|
|
|
export class AppPhotosManager extends AppManager { |
|
private photos: { |
|
[id: string]: MyPhoto |
|
} = {}; |
|
|
|
public savePhoto(photo: Photo, context?: ReferenceContext) { |
|
if(!photo || photo._ === 'photoEmpty') return; |
|
|
|
/* if(photo.id === TEST_FILE_REFERENCE) { |
|
console.warn('Testing FILE_REFERENCE_EXPIRED'); |
|
const bytes = [2, 67, 175, 43, 190, 0, 0, 20, 62, 95, 111, 33, 45, 99, 220, 116, 218, 11, 167, 127, 213, 18, 127, 32, 243, 202, 117, 80, 30]; |
|
//photo.file_reference = new Uint8Array(bytes); |
|
photo.file_reference = bytes; |
|
if(!--TEST_FILE_REFERENCE_TIMES) { |
|
TEST_FILE_REFERENCE = ''; |
|
} |
|
} */ |
|
|
|
const oldPhoto = this.photos[photo.id]; |
|
if(photo.file_reference) { // * because we can have a new object w/o the file_reference while sending |
|
safeReplaceArrayInObject('file_reference', oldPhoto, photo); |
|
this.referenceDatabase.saveContext(photo.file_reference, context); |
|
} |
|
|
|
if(photo.sizes?.length) { |
|
const size = photo.sizes[photo.sizes.length - 1]; |
|
if(size._ === 'photoSizeProgressive') { |
|
size.size = size.sizes[size.sizes.length - 1]; |
|
} |
|
} |
|
|
|
if(oldPhoto) { |
|
return Object.assign(oldPhoto, photo); |
|
} |
|
|
|
return this.photos[photo.id] = photo; |
|
} |
|
|
|
public getUserPhotos(userId: UserId, maxId: Photo.photo['id'] = '0', limit: number = 20) { |
|
const inputUser = this.appUsersManager.getUserInput(userId); |
|
return this.apiManager.invokeApiCacheable('photos.getUserPhotos', { |
|
user_id: inputUser, |
|
offset: 0, |
|
limit, |
|
max_id: maxId |
|
}, {cacheSeconds: 60}).then((photosResult) => { |
|
this.appUsersManager.saveApiUsers(photosResult.users); |
|
const photoIds = photosResult.photos.map((photo, idx) => { |
|
photosResult.photos[idx] = this.savePhoto(photo, {type: 'profilePhoto', peerId: userId.toPeerId()}); |
|
return photo.id; |
|
}); |
|
|
|
// ! WARNING ! |
|
if(maxId !== '0' && maxId) { |
|
const idx = photoIds.indexOf(maxId); |
|
if(idx !== -1) { |
|
photoIds.splice(idx, 1); |
|
} |
|
} |
|
|
|
return { |
|
count: (photosResult as PhotosPhotos.photosPhotosSlice).count || photoIds.length, |
|
photos: photoIds |
|
}; |
|
}); |
|
} |
|
|
|
/* public getPhotoURL(photo: MTPhoto | MTMyDocument, photoSize: MTPhotoSize) { |
|
const downloadOptions = this.getPhotoDownloadOptions(photo, photoSize); |
|
|
|
return {url: getFileURL('photo', downloadOptions), location: downloadOptions.location}; |
|
} */ |
|
|
|
/* public isDownloaded(media: any) { |
|
const isPhoto = media._ === 'photo'; |
|
const photo = isPhoto ? this.getPhoto(media.id) : null; |
|
let isDownloaded: boolean; |
|
if(photo) { |
|
isDownloaded = photo.downloaded > 0; |
|
} else { |
|
const cachedThumb = this.getDocumentCachedThumb(media.id); |
|
isDownloaded = cachedThumb?.downloaded > 0; |
|
} |
|
|
|
return isDownloaded; |
|
} */ |
|
|
|
public getPhoto(photoId: any/* MyPhoto | string */): MyPhoto { |
|
return isObject(photoId) ? photoId as MyPhoto : this.photos[photoId as any as string]; |
|
} |
|
}
|
|
|