diff --git a/source/net/sourceforge/filebot/MediaTypes.java b/source/net/sourceforge/filebot/MediaTypes.java index e78a3b38..f9618844 100644 --- a/source/net/sourceforge/filebot/MediaTypes.java +++ b/source/net/sourceforge/filebot/MediaTypes.java @@ -1,7 +1,5 @@ - package net.sourceforge.filebot; - import static java.util.Collections.*; import static net.sourceforge.tuned.XPathUtilities.*; @@ -18,75 +16,81 @@ import net.sourceforge.tuned.FileUtilities.ExtensionFileFilter; import org.w3c.dom.Document; import org.w3c.dom.Node; - public class MediaTypes { - + private static final MediaTypes defaultInstance = parseDefault(); - - + private static MediaTypes parseDefault() { try { Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(MediaTypes.class.getResourceAsStream("media.types")); Map> types = new HashMap>(); - + for (Node it : getChildren("type", dom.getFirstChild())) { List extensions = new ArrayList(2); for (Node ie : getChildren("extension", it)) { extensions.add(getTextContent(ie)); } - + types.put(getAttribute("name", it), extensions); } - + return new MediaTypes(types); } catch (Exception e) { throw new RuntimeException(e); } } - + private Map> types; private Map filters = synchronizedMap(new HashMap()); - - + public MediaTypes(Map> types) { this.types = types; } - - + public List getExtensionList(String name) { List list = new ArrayList(); - + for (Entry> type : types.entrySet()) { if (type.getKey().startsWith(name)) { list.addAll(type.getValue()); } } - + return list; } - - + public ExtensionFileFilter getFilter(String name) { ExtensionFileFilter filter = filters.get(name); - + if (filter == null) { filter = new ExtensionFileFilter(getExtensionList(name)); filters.put(name, filter); } - + return filter; } - - + public static MediaTypes getDefault() { return defaultInstance; } - - + + public Map> getTypes() { + return types; + } + + public String getMediaType(String extension) { + for (Entry> it : getTypes().entrySet()) { + if (it.getValue().contains(extension)) { + return it.getKey(); + } + } + return null; + } + public static ExtensionFileFilter getDefaultFilter(String name) { return defaultInstance.getFilter(name); } - + // some convenience filters public static final ExtensionFileFilter AUDIO_FILES = getDefaultFilter("audio"); public static final ExtensionFileFilter VIDEO_FILES = getDefaultFilter("video"); diff --git a/source/net/sourceforge/filebot/format/MediaBindingBean.java b/source/net/sourceforge/filebot/format/MediaBindingBean.java index e26bf621..60cb39d3 100644 --- a/source/net/sourceforge/filebot/format/MediaBindingBean.java +++ b/source/net/sourceforge/filebot/format/MediaBindingBean.java @@ -27,6 +27,7 @@ import java.util.SortedSet; import java.util.TreeSet; import net.sourceforge.filebot.Cache; +import net.sourceforge.filebot.MediaTypes; import net.sourceforge.filebot.WebServices; import net.sourceforge.filebot.hash.HashType; import net.sourceforge.filebot.media.MetaAttributes; @@ -626,6 +627,11 @@ public class MediaBindingBean { return null; } + @Define("mediaType") + public List getMediaType() throws Exception { + return asList(MediaTypes.getDefault().getMediaType(getExtension()).split("/")); // format engine does not allow / in binding value + } + @Define("file") public File getMediaFile() { return mediaFile; diff --git a/source/net/sourceforge/filebot/ui/rename/FormatDialog.java b/source/net/sourceforge/filebot/ui/rename/FormatDialog.java index 85e2ad8a..632ce11b 100644 --- a/source/net/sourceforge/filebot/ui/rename/FormatDialog.java +++ b/source/net/sourceforge/filebot/ui/rename/FormatDialog.java @@ -225,7 +225,7 @@ public class FormatDialog extends JDialog { // initialize window properties setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); - setSize(620, 445); + setSize(650, 450); // initialize data setState(initMode, lockOnBinding != null ? lockOnBinding : restoreSample(initMode), lockOnBinding != null);