package com.limegroup.gnutella.gui.download; import java.io.File; import java.util.List; import com.limegroup.gnutella.Downloader; import com.limegroup.gnutella.GUID; import com.limegroup.gnutella.RemoteFileDesc; import com.limegroup.gnutella.RouterService; import com.limegroup.gnutella.SaveLocationException; import com.limegroup.gnutella.URN; import com.limegroup.gnutella.settings.SharingSettings; /** * Implements the DownloaderFactory interface to start downloads from * incoming search results. */ public class SearchResultDownloaderFactory implements DownloaderFactory { private RemoteFileDesc[] rfds; private List alts; private GUID queryGUID; private File saveDir; private String fileName; public SearchResultDownloaderFactory(RemoteFileDesc[] rfds, List alts, GUID queryGUID, File saveDir, String fileName) { this.rfds = rfds; this.alts = alts; this.queryGUID = queryGUID; this.saveDir = saveDir; this.fileName = fileName != null ? fileName : rfds[0].getFileName(); } public URN getURN() { return rfds[0].getSHA1Urn(); } public Downloader createDownloader(boolean overwrite) throws SaveLocationException { return RouterService.download(rfds, alts, queryGUID, overwrite, saveDir, fileName); } public File getSaveFile() { return new File(saveDir != null ? saveDir : SharingSettings.getSaveDirectory(), fileName); } public void setSaveFile(File saveFile) { File parentDir = saveFile.getParentFile(); if (!parentDir.equals(SharingSettings.getSaveDirectory())) { saveDir = parentDir; } fileName = saveFile.getName(); } public int getFileSize() { return rfds[0].getSize(); } }