package com.limegroup.gnutella.downloader;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import org.limewire.bittorrent.TorrentParams;
import org.limewire.core.api.download.DownloadException;
import org.limewire.io.GUID;
import org.limewire.io.InvalidDataException;
import com.limegroup.bittorrent.BTDownloader;
import com.limegroup.bittorrent.BTTorrentFileDownloader;
import com.limegroup.gnutella.RemoteFileDesc;
import com.limegroup.gnutella.browser.MagnetOptions;
import com.limegroup.gnutella.downloader.serial.DownloadMemento;
/**
* Constructs all kinds of {@link CoreDownloader CoreDownloaders}.<p>
*
* This handles creating downloads from data as well as from mementos
* of prior downloads.
*/
public interface CoreDownloaderFactory {
public ManagedDownloader createManagedDownloader(RemoteFileDesc[] files,
GUID originalQueryGUID, File saveDirectory, String fileName, boolean overwrite)
throws DownloadException;
public MagnetDownloader createMagnetDownloader(MagnetOptions magnet, boolean overwrite,
File saveDir, String fileName) throws DownloadException;
public ResumeDownloader createResumeDownloader(File incompleteFile, String name, long size)
throws DownloadException;
/**
* Creates the appropriate kind of downloader from a given DownloadMemento.
*/
public CoreDownloader createFromMemento(DownloadMemento memento) throws InvalidDataException;
/**
* Creates a downloader to get the torrent file at the given url.
*/
public BTTorrentFileDownloader createTorrentFileDownloader(URI torrentURI, boolean overwrite);
/**
* Creates a BTDownloader from the provided Torrent Parameters.
*/
public BTDownloader createBTDownloader(TorrentParams params) throws IOException;
}