import Transfer from './Transfer';
import TransferEventType from '../enums/TransferEventType';
import TransferEventCallback from './events/TransferEventCallback';
/**
 * The Download interface, extension of {@link Transfer}
 */
export default interface Download extends Transfer {
    /**
     * Subscribe to a transfer event. Note that all subscriptions will automatically be removed once a
     * download has completed.
     *
     * @example
     * ```
     * addSubscriptions(download: Download) {
     *     const listener = (data: TransferEventCallbackData): Promise<void> => {
     *        const { transfer, transferEvent }: TransferEventCallbackData = data;
     *        const { type, eventData }: TransferEvent = transferEvent;
     *        switch (type) {
     *          case TransferEventType.TRANSFER_STARTED:
     *            //Cast to the associated type of event data
     *            const progressData: TransferProgressEventData = <TransferProgressEventData>eventData;
     *            // process as appropriate
     *            break;
     *          case TransferEventType.TRANSFER_COMPLETED:
     *            const completedData: TransferCompletedEventData = <TransferCompletedEventData>eventData;
     *            // process as appropriate
     *            break;
     *        }
     *     }
     *     download.subscribe(TransferEventType.TRANSFER_PROGRESS, startListener);
     *     download.subscribe(TransferEventType.TRANSFER_COMPLETED, startListener);
     * }
     * ```
     *
     * @param eventType The type of event we are subscribing to.
     * @param listener The listener we wish to assign to an event.
     */
    subscribe(eventType: TransferEventType, listener: TransferEventCallback<Download>): void;
    /**
     * Unsubscribe from a transfer event
     *
     * @param eventType The type of event we are unsubscribing from.
     * @param listener The listener we wish to unsubscribe.
     * @returns true if the listener was present and unsubscribed, false if there was no match for the
     * eventType / listener combination.
     */
    unsubscribe(eventType: TransferEventType, listener?: TransferEventCallback<Download>): boolean;
    /**
     * Opens destination folder chosen during the download initialization.
     *
     * This simplifies the process of finding the downloaded file or files on transfer
     * completion but is otherwise not required.
     *
     * This launches a finder window for Mac or an explorer window for windows
     * @returns A Promise which will resolve when the destination folder opens in a file browser.
     */
    openDestinationFolder(): Promise<void>;
    /**
     * Prompts for the destination folder for the downloaded files. This launches a native folder chooser.
     * @returns A Promise which will resolve when the destination folder is chosen in native file chooser window
     */
    selectDestinationFolder(): Promise<void>;
}
//# sourceMappingURL=Download.d.ts.map