From a61fb4e70a8110d65445e329a782edd79890a091 Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Thu, 2 Jan 2014 15:49:20 +0000 Subject: [PATCH] * support guessing idx/sub language from .idx file contents --- source/net/sourceforge/filebot/Language.java | 8 +++---- .../filebot/cli/CmdlineOperations.java | 11 +++------- .../filebot/format/MediaBindingBean.java | 21 +++++++++++++++++-- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/source/net/sourceforge/filebot/Language.java b/source/net/sourceforge/filebot/Language.java index fc2d17a6..db313655 100644 --- a/source/net/sourceforge/filebot/Language.java +++ b/source/net/sourceforge/filebot/Language.java @@ -94,18 +94,18 @@ public class Language implements Serializable { return null; } - public static Language getLanguageByName(String name) { + public static Language findLanguage(String lang) { for (Language it : availableLanguages()) { - if (name.equalsIgnoreCase(it.getName())) + if (lang.equalsIgnoreCase(it.getISO2()) || lang.equalsIgnoreCase(it.getISO3()) || lang.equalsIgnoreCase(it.getName())) { return it; + } } - return null; } public static String getISO3LanguageCodeByName(String languageName) { try { - return Language.getLanguageByName(languageName).getISO3(); + return Language.findLanguage(languageName).getISO3(); } catch (Exception e) { return null; } diff --git a/source/net/sourceforge/filebot/cli/CmdlineOperations.java b/source/net/sourceforge/filebot/cli/CmdlineOperations.java index 2e7402d1..4a4604ba 100644 --- a/source/net/sourceforge/filebot/cli/CmdlineOperations.java +++ b/source/net/sourceforge/filebot/cli/CmdlineOperations.java @@ -908,16 +908,11 @@ public class CmdlineOperations implements CmdlineInterface { private Language getLanguage(String lang) throws Exception { // try to look up by language code - Language language = Language.getLanguage(lang); + Language language = Language.findLanguage(lang); if (language == null) { - // try too look up by language name - language = Language.getLanguageByName(lang); - - if (language == null) { - // unable to lookup language - throw new Exception("Illegal language code: " + lang); - } + // unable to lookup language + throw new Exception("Illegal language code: " + lang); } return language; diff --git a/source/net/sourceforge/filebot/format/MediaBindingBean.java b/source/net/sourceforge/filebot/format/MediaBindingBean.java index 52cabfcb..24e333c0 100644 --- a/source/net/sourceforge/filebot/format/MediaBindingBean.java +++ b/source/net/sourceforge/filebot/format/MediaBindingBean.java @@ -25,6 +25,8 @@ import java.util.Scanner; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import net.sourceforge.filebot.Cache; import net.sourceforge.filebot.Language; @@ -436,11 +438,11 @@ public class MediaBindingBean { // exclude VobSub from any normal text-based subtitle processing if (hasExtension(mediaFile, "idx")) { - return null; + return Language.getLanguage(grepLanguageFromSUBIDX(mediaFile)); } else if (hasExtension(mediaFile, "sub")) { for (File idx : mediaFile.getParentFile().listFiles(new ExtensionFileFilter("idx"))) { if (isDerived(idx, mediaFile)) { - return null; + return Language.getLanguage(grepLanguageFromSUBIDX(idx)); } } } @@ -827,6 +829,21 @@ public class MediaBindingBean { return hash; } + private Locale grepLanguageFromSUBIDX(File idx) throws IOException { + String text = new String(readFile(idx), "UTF-8"); + + // # English + // id: en, index: 0 + Pattern pattern = Pattern.compile("^id: (\\w+), index: (\\d+)", Pattern.MULTILINE); + Matcher matcher = pattern.matcher(text); + + if (matcher.find()) { + return new Locale(matcher.group(1)); + } else { + return null; + } + } + private String getOriginalFileName(File file) { if (useExtendedFileAttributes()) { try {