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.
72 lines
2.4 KiB
72 lines
2.4 KiB
/* |
|
* https://github.com/morethanwords/tweb |
|
* Copyright (C) 2019-2021 Eduard Kuzmenko |
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE |
|
*/ |
|
|
|
import type {InputFileLocation, InputStickerSet, InputWebFileLocation} from '../layer'; |
|
import type {DownloadOptions} from '../lib/mtproto/apiFileManager'; |
|
|
|
const FILENAME_JOINER = '_'; |
|
|
|
export function getFileNameByLocation(location: InputFileLocation | InputWebFileLocation, options?: Partial<{ |
|
fileName: string, |
|
downloadId: string |
|
}>) { |
|
const fileName = '';// (options?.fileName || '').split('.'); |
|
const ext = fileName[fileName.length - 1] || ''; |
|
|
|
let str: string; |
|
switch(location._) { |
|
case 'inputPhotoFileLocation': { |
|
str = ['photo', fileName[0], location.id, location.thumb_size].filter(Boolean).join(FILENAME_JOINER); |
|
break; |
|
} |
|
|
|
case 'inputDocumentFileLocation': { |
|
str = ['document', fileName[0], location.id, location.thumb_size].filter(Boolean).join(FILENAME_JOINER); |
|
break; |
|
} |
|
|
|
case 'inputPeerPhotoFileLocation': |
|
str = ['peerPhoto', location.photo_id, location.pFlags.big ? 'big' : 'small'].join(FILENAME_JOINER); |
|
break; |
|
|
|
case 'inputStickerSetThumb': { |
|
const id = (location.stickerset as InputStickerSet.inputStickerSetID).id || |
|
(location.stickerset as InputStickerSet.inputStickerSetShortName).short_name || |
|
(location.stickerset as InputStickerSet.inputStickerSetDice).emoticon || |
|
location.stickerset._; |
|
str = ['stickerSetThumb', id, location.thumb_version].join(FILENAME_JOINER); |
|
break; |
|
} |
|
|
|
case 'inputFileLocation': { |
|
str = location.volume_id + '_' + location.local_id; |
|
break; |
|
} |
|
|
|
case 'inputWebFileLocation': { |
|
str = ['webFile', location.url].join(FILENAME_JOINER); |
|
break; |
|
} |
|
|
|
default: { |
|
console.error('Unrecognized location:', location); |
|
str = ''; |
|
break; |
|
} |
|
} |
|
|
|
return str + (options.downloadId ? '_download' : '') + (ext ? '.' + ext : ext); |
|
} |
|
|
|
export type FileURLType = 'photo' | 'thumb' | 'document' | 'stream' | 'download'; |
|
export function getFileURL(type: FileURLType, options: DownloadOptions) { |
|
// console.log('getFileURL', location); |
|
// const perf = performance.now(); |
|
const encoded = encodeURIComponent(JSON.stringify(options)); |
|
// console.log('getFileURL encode:', performance.now() - perf, encoded); |
|
|
|
return '/' + type + '/' + encoded; |
|
}
|
|
|