package org.rr.jeborker.gui.action; import static org.rr.jeborker.app.JeboorkerConstants.SUPPORTED_MIMES.MIME_CBR; import static org.rr.jeborker.app.JeboorkerConstants.SUPPORTED_MIMES.MIME_CBZ; import static org.rr.jeborker.app.JeboorkerConstants.SUPPORTED_MIMES.MIME_EPUB; import static org.rr.jeborker.app.JeboorkerConstants.SUPPORTED_MIMES.MIME_MOBI; import static org.rr.jeborker.app.JeboorkerConstants.SUPPORTED_MIMES.MIME_AZW; import java.util.logging.Level; import javax.swing.Action; import javax.swing.JFileChooser; import org.rr.commons.log.LoggerFactory; import org.rr.commons.mufs.IResourceHandler; import org.rr.commons.net.imagefetcher.IImageFetcherFactory; import org.rr.commons.net.imagefetcher.ImageMobiFileFetcherFactory; import org.rr.commons.net.imagefetcher.ImageZipFileFetcherFactory; import org.rr.commons.swing.SwingUtils; import org.rr.commons.swing.dialogs.JImageDownloadDialog; import org.rr.commons.utils.ListUtils; import org.rr.jeborker.db.item.EbookPropertyItem; import org.rr.jeborker.db.item.EbookPropertyItemUtils; import org.rr.jeborker.gui.MainController; import org.rr.jeborker.gui.resources.ImageResourceBundle; class SetCoverFromEbook extends SetCoverFrom<JImageDownloadDialog> implements IDoOnlyOnceAction<JImageDownloadDialog> { private static final long serialVersionUID = -6464113132395695332L; private JImageDownloadDialog imageDownloadDialog; SetCoverFromEbook(IResourceHandler resourceHandler) { super(resourceHandler); String name = Bundle.getString("SetCoverFromEbookAction.name"); putValue(Action.NAME, SwingUtils.removeMnemonicMarker(name)); putValue(Action.SMALL_ICON, ImageResourceBundle.getResourceAsImageIcon("image_ebook_16.png")); putValue(Action.LARGE_ICON_KEY, ImageResourceBundle.getResourceAsImageIcon("image_ebook_22.png")); putValue(ApplicationAction.NON_THREADED_ACTION_KEY, Boolean.TRUE); //No threading putValue(MNEMONIC_KEY, SwingUtils.getMnemonicKeyCode(name)); } @Override public JImageDownloadDialog doOnce() { if(imageDownloadDialog == null) { final MainController controller = MainController.getController(); final EbookPropertyItem item = ListUtils.first(EbookPropertyItemUtils.getEbookPropertyItemByResource(resourceHandler)); IImageFetcherFactory fetcher; if(item != null) { if(MIME_CBZ.getMime().equals(item.getMimeType()) || MIME_CBR.getMime().equals(item.getMimeType()) || MIME_EPUB.getMime().equals(item.getMimeType())) { fetcher = new ImageZipFileFetcherFactory(item.getResourceHandler()); } else if(MIME_MOBI.getMime().equals(item.getMimeType()) || MIME_AZW.getMime().equals(item.getMimeType())) { fetcher = new ImageMobiFileFetcherFactory(item.getResourceHandler()); } else { LoggerFactory.log(Level.WARNING, this, "No image fetcher instance for " + item.getResourceHandler()); return null; } imageDownloadDialog = new JImageDownloadDialog(controller.getMainWindow(), fetcher); imageDownloadDialog.setVisible(true); IResourceHandler selectedImage = imageDownloadDialog.getSelectedImage(); if(selectedImage != null) { setDialogOption(JFileChooser.APPROVE_OPTION); setDialogResult(selectedImage); } else { setDialogOption(JFileChooser.CANCEL_OPTION); } } } return this.imageDownloadDialog; } @Override public void setDoOnceResult(JImageDownloadDialog result) { this.imageDownloadDialog = result; if(this.imageDownloadDialog != null) { IResourceHandler selectedImage = imageDownloadDialog.getSelectedImage(); if(selectedImage != null) { setDialogOption(JFileChooser.APPROVE_OPTION); setDialogResult(selectedImage); } else { setDialogOption(JFileChooser.CANCEL_OPTION); } } } }