package com.limegroup.gnutella.gui.download; import java.io.File; import com.limegroup.gnutella.Downloader; import com.limegroup.gnutella.RouterService; import com.limegroup.gnutella.SaveLocationException; import com.limegroup.gnutella.URN; import com.limegroup.gnutella.browser.MagnetOptions; import com.limegroup.gnutella.gui.GUIMediator; import com.limegroup.gnutella.settings.SharingSettings; /** * Creates a Downloader from a magnet * */ public class MagnetDownloaderFactory implements DownloaderFactory { private MagnetOptions magnet; private File saveFile; /** * Constructs a factory for a magnet * @param magnet * @throws IllegalArgumentException if the magnet is not * {@link MagnetOptions#isDownloadable() valid for download} */ public MagnetDownloaderFactory(MagnetOptions magnet) { this.magnet = magnet; String fileName = magnet.getFileNameForSaving(); if (fileName == null) { fileName = GUIMediator.getStringResource("NO_FILENAME_LABEL"); } this.saveFile = new File(SharingSettings.getSaveDirectory(), fileName); if (!magnet.isDownloadable()) { throw new IllegalArgumentException("Invalid magnet"); } } public File getSaveFile() { return saveFile; } public void setSaveFile(File saveFile) { this.saveFile = saveFile; } public int getFileSize() { return 0; } public URN getURN() { return magnet.getSHA1Urn(); } public Downloader createDownloader(boolean overwrite) throws SaveLocationException { return RouterService.download(magnet, overwrite, saveFile.getParentFile(), getSaveFile().getName()); } }