import { SaveProgressInfo } from "../../types.js";
export type ProgramSlice = {
    start: number;
    end: number;
};
export type DownloadSlice = (startChunk: number, endChunk: number) => Promise<void>;
export default abstract class BaseDownloadProgram {
    protected savedProgress: SaveProgressInfo;
    protected readonly _downloadSlice: DownloadSlice;
    protected _aborted: boolean;
    protected _parallelStreams: number;
    protected _reload?: () => void;
    protected _activeDownloads: Promise<any>[];
    protected constructor(_savedProgress: SaveProgressInfo, _downloadSlice: DownloadSlice);
    get parallelStreams(): number;
    set parallelStreams(value: number);
    incParallelStreams(): void;
    decParallelStreams(): void;
    waitForStreamToEnd(): Promise<any>;
    download(): Promise<void>;
    private _waitForStreamEndWithReload;
    private _createDownload;
    /**
     * Create all the first slices at one - make sure they will not overlap to reduce stream aborts at later stages
     */
    private _createFirstSlices;
    protected abstract _createOneSlice(): ProgramSlice | null;
    abort(): void;
}
