package org.limewire.ui.swing.util; import java.io.File; import javax.swing.JOptionPane; import org.limewire.core.api.download.DownloadAction; import org.limewire.core.api.download.DownloadListManager; import org.limewire.core.api.download.DownloadException; import org.limewire.core.api.magnet.MagnetLink; import org.limewire.core.api.search.SearchCategory; import org.limewire.inject.LazySingleton; import org.limewire.ui.swing.components.FocusJOptionPane; import org.limewire.ui.swing.search.DefaultSearchInfo; import org.limewire.ui.swing.search.SearchHandler; import com.google.inject.Inject; import com.google.inject.Provider; @LazySingleton class MagnetHandlerImpl implements MagnetHandler { private final DownloadListManager downloadListManager; private final SearchHandler searchHandler; private final Provider<DownloadExceptionHandler> downloadExceptionHandler; @Inject MagnetHandlerImpl(SearchHandler searchHandler, DownloadListManager downloadListManager, Provider<DownloadExceptionHandler> downloadExceptionHandler) { this.downloadListManager = downloadListManager; this.searchHandler = searchHandler; this.downloadExceptionHandler = downloadExceptionHandler; } /** * Handles the given magnet file by either starting a search or starting to * download the file specified in the magnet. */ public void handleMagnet(final MagnetLink magnet) { SwingUtils.invokeLater(new Runnable() { @Override public void run() { if (magnet.isDownloadable()) { downloadMagnet(downloadListManager, downloadExceptionHandler, magnet); } else if (magnet.isKeywordTopicOnly()) { searchHandler.doSearch(DefaultSearchInfo.createKeywordSearch(magnet .getQueryString(), SearchCategory.ALL)); } else { FocusJOptionPane.showMessageDialog(GuiUtils.getMainFrame(), I18n .tr("Invalid magnet option."), I18n.tr("Open Link"), JOptionPane.INFORMATION_MESSAGE); } } }); } private void downloadMagnet(final DownloadListManager downloadListManager, final Provider<DownloadExceptionHandler> downloadExceptionHandler, final MagnetLink magnet) { try { downloadListManager.addDownload(magnet, null, false); } catch (DownloadException e1) { downloadExceptionHandler.get().handleDownloadException(new DownloadAction() { @Override public void download(File saveFile, boolean overwrite) throws DownloadException { downloadListManager .addDownload(magnet, saveFile, overwrite); } @Override public void downloadCanceled(DownloadException ignored) { //nothing to do } }, e1, true); } } }