import { Api } from "../tl"; import type { TelegramClient } from "./TelegramClient"; import { EntityLike, OutFile, ProgressCallback } from "../define"; import { RequestIter } from "../requestIter"; import bigInt from "big-integer"; /** * progress callback that will be called each time a new chunk is downloaded. */ export interface progressCallback { ( /** How much was downloaded */ downloaded: bigInt.BigInteger, /** Full size of the file to be downloaded */ fullSize: bigInt.BigInteger, /** other args to be passed if needed */ ...args: any[]): void; /** When this value is set to true the download will stop */ isCanceled?: boolean; /** Does nothing for now. */ acceptsBuffer?: boolean; } /** * Low level interface for downloading files */ export interface DownloadFileParams { /** The dcId that the file belongs to. Used to borrow a sender from that DC */ dcId: number; /** How much to download. The library will download until it reaches this amount.
* can be useful for downloading by chunks */ fileSize?: number; /** Used to determine how many download tasks should be run in parallel. anything above 16 is unstable. */ workers?: number; /** How much to download in each chunk. The larger the less requests to be made. (max is 512kb). */ partSizeKb?: number; /** Where to start downloading. useful for chunk downloading. */ start?: number; /** Where to stop downloading. useful for chunk downloading. */ end?: number; /** A callback function accepting two parameters: ``(received bytes, total)``. */ progressCallback?: progressCallback; } /** * Low level interface for downloading files */ export interface DownloadFileParamsV2 { /** * The output file path, directory,buffer, or stream-like object. * If the path exists and is a file, it will be overwritten. * If the file path is `undefined` or `Buffer`, then the result will be saved in memory and returned as `Buffer`. */ outputFile?: OutFile; /** The dcId that the file belongs to. Used to borrow a sender from that DC. The library should handle this for you */ dcId?: number; /** The file size that is about to be downloaded, if known.
Only used if ``progressCallback`` is specified. */ fileSize?: bigInt.BigInteger; /** How much to download in each chunk. The larger the less requests to be made. (max is 512kb). */ partSizeKb?: number; /** Progress callback accepting one param. (progress :number) which is a float between 0 and 1 */ progressCallback?: progressCallback; /** */ msgData?: [EntityLike, number]; } /** * contains optional download params for profile photo. */ export interface DownloadProfilePhotoParams { /** Whether to download the big version or the small one of the photo */ isBig?: boolean; outputFile?: OutFile; } export interface DirectDownloadIterInterface { fileLocation: Api.TypeInputFileLocation; dcId: number; offset: bigInt.BigInteger; stride: number; chunkSize: number; requestSize: number; fileSize: number; msgData: number; } export interface IterDownloadFunction { file?: Api.TypeMessageMedia | Api.TypeInputFile | Api.TypeInputFileLocation; offset?: bigInt.BigInteger; stride?: number; limit?: number; chunkSize?: number; requestSize: number; fileSize?: bigInt.BigInteger; dcId?: number; msgData?: [EntityLike, number]; } export declare class DirectDownloadIter extends RequestIter { protected request?: Api.upload.GetFile; private _sender?; private _timedOut; protected _stride?: number; protected _chunkSize?: number; protected _lastPart?: Buffer; protected buffer: Buffer[] | undefined; _init({ fileLocation, dcId, offset, stride, chunkSize, requestSize, fileSize, msgData, }: DirectDownloadIterInterface): Promise; _loadNextChunk(): Promise; _request(): Promise; close(): Promise; [Symbol.asyncIterator](): AsyncIterator; } export declare class GenericDownloadIter extends DirectDownloadIter { _loadNextChunk(): Promise; } /** @hidden */ export declare function iterDownload(client: TelegramClient, { file, offset, stride, limit, chunkSize, requestSize, fileSize, dcId, msgData, }: IterDownloadFunction): DirectDownloadIter; /** @hidden */ export declare function downloadFileV2(client: TelegramClient, inputLocation: Api.TypeInputFileLocation, { outputFile, partSizeKb, fileSize, progressCallback, dcId, msgData, }: DownloadFileParamsV2): Promise; /** * All of these are optional and will be calculated automatically if not specified. */ export interface DownloadMediaInterface { /** * The output file location, if left undefined this method will return a buffer */ outputFile?: OutFile; /** * Which thumbnail size from the document or photo to download, instead of downloading the document or photo itself.

If it's specified but the file does not have a thumbnail, this method will return `undefined`.

The parameter should be an integer index between ``0`` and ``sizes.length``.
``0`` will download the smallest thumbnail, and ``sizes.length - 1`` will download the largest thumbnail.

You can also pass the `Api.PhotoSize` instance to use. Alternatively, the thumb size type `string` may be used.

In short, use ``thumb=0`` if you want the smallest thumbnail and ``thumb=sizes.length`` if you want the largest thumbnail. */ thumb?: number | Api.TypePhotoSize; /** * A callback function accepting two parameters: * ``(received bytes, total)``. */ progressCallback?: ProgressCallback; } /** @hidden */ export declare function downloadMedia(client: TelegramClient, messageOrMedia: Api.Message | Api.TypeMessageMedia, outputFile?: OutFile, thumb?: number | Api.TypePhotoSize, progressCallback?: ProgressCallback): Promise; /** @hidden */ export declare function _downloadDocument(client: TelegramClient, doc: Api.MessageMediaDocument | Api.TypeDocument, outputFile: OutFile | undefined, date: number, thumb?: number | string | Api.TypePhotoSize, progressCallback?: ProgressCallback, msgData?: [EntityLike, number]): Promise; /** @hidden */ export declare function _downloadContact(client: TelegramClient, media: Api.MessageMediaContact, args: DownloadMediaInterface): Promise; /** @hidden */ export declare function _downloadWebDocument(client: TelegramClient, media: Api.WebDocument | Api.WebDocumentNoProxy, args: DownloadMediaInterface): Promise; /** @hidden */ export declare function _downloadCachedPhotoSize(size: Api.PhotoCachedSize | Api.PhotoStrippedSize, outputFile?: OutFile): Promise; /** @hidden */ export declare function _downloadPhoto(client: TelegramClient, photo: Api.MessageMediaPhoto | Api.Photo, file?: OutFile, date?: number, thumb?: number | string | Api.TypePhotoSize, progressCallback?: progressCallback): Promise; /** @hidden */ export declare function downloadProfilePhoto(client: TelegramClient, entity: EntityLike, fileParams: DownloadProfilePhotoParams): Promise;