package org.limewire.ui.swing.search.resultpanel;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.limewire.ui.swing.downloads.MainDownloadPanel;
import org.limewire.ui.swing.library.LibraryMediator;
import org.limewire.ui.swing.search.model.BasicDownloadState;
import org.limewire.ui.swing.search.model.SearchResultsModel;
import org.limewire.ui.swing.search.model.VisualSearchResult;
class DownloadHandlerImpl implements DownloadHandler {
private final SearchResultsModel searchResultsModel;
private List<DownloadPreprocessor> downloadPreprocessors = new ArrayList<DownloadPreprocessor>();
private LibraryMediator libraryMediator;
private final MainDownloadPanel mainDownloadPanel;
/**
* Starts all downloads from searches. Navigates to Library or Downloads without downloading if the file is in either of those locations.
*/
public DownloadHandlerImpl(SearchResultsModel searchResultsModel,
LibraryMediator libraryMediator, MainDownloadPanel mainDownloadPanel) {
this.searchResultsModel = searchResultsModel;
this.libraryMediator = libraryMediator;
this.mainDownloadPanel = mainDownloadPanel;
this.downloadPreprocessors.add(new LicenseWarningDownloadPreprocessor());
}
@Override
public void download(final VisualSearchResult vsr) {
download(vsr, null);
}
/**
* Downloads the file specified in vsr if it is not already downloading or in Library. Navigates to Downloads or Library if it is already in the locations.
*/
@Override
public void download(final VisualSearchResult vsr, File saveFile) {
if (maybeNavigate(vsr)){
//do not download if we navigate away
return;
}
// execute the download preprocessors
for (DownloadPreprocessor preprocessor : downloadPreprocessors) {
boolean shouldDownload = preprocessor.execute(vsr);
if (!shouldDownload) {
// do not download!
return;
}
}
// Start download.
searchResultsModel.download(vsr, saveFile);
}
private boolean maybeNavigate(VisualSearchResult vsr) {
if (vsr.getDownloadState() == BasicDownloadState.DOWNLOADED
|| vsr.getDownloadState() == BasicDownloadState.DOWNLOADING) {
mainDownloadPanel.selectAndScrollTo(vsr.getUrn());
return true;
} else if (vsr.getDownloadState() == BasicDownloadState.LIBRARY) {
libraryMediator.selectInLibrary(vsr.getUrn());
return true;
}
return false;
}
}