From 3a06c4f7ef7d809a0f4d8dc101ad953693c8d0ea Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Tue, 11 Nov 2014 07:51:56 +0000 Subject: [PATCH] * optimize subtitle lookup --- source/net/filebot/cli/ScriptShellBaseClass.java | 9 ++++----- source/net/filebot/media/MediaDetection.java | 13 +++++++++++++ source/net/filebot/subtitle/SubtitleUtilities.java | 2 +- source/net/filebot/web/OpenSubtitlesClient.java | 2 +- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/source/net/filebot/cli/ScriptShellBaseClass.java b/source/net/filebot/cli/ScriptShellBaseClass.java index 36c7f458..c7136da9 100644 --- a/source/net/filebot/cli/ScriptShellBaseClass.java +++ b/source/net/filebot/cli/ScriptShellBaseClass.java @@ -233,18 +233,17 @@ public abstract class ScriptShellBaseClass extends Script { // 2. perfect filename match try { - List names = new ArrayList(); - for (File it : FileUtilities.listPathTail(file, 4, true)) { - names.add(it.getName()); + Movie match = MediaDetection.matchMovie(file, 4); + if (match != null) { + return match; } - return MediaDetection.matchMovieName(names, true, 0).get(0); } catch (Exception e) { // ignore and move on } // 3. run full-fledged movie detection try { - return MediaDetection.detectMovie(file, WebServices.OpenSubtitles, WebServices.TheMovieDB, Locale.ENGLISH, strict).get(0); + return MediaDetection.detectMovie(file, WebServices.OpenSubtitles.isAnonymous() ? null : WebServices.OpenSubtitles, WebServices.TheMovieDB, Locale.ENGLISH, strict).get(0); } catch (Exception e) { // ignore and fail } diff --git a/source/net/filebot/media/MediaDetection.java b/source/net/filebot/media/MediaDetection.java index 27944428..ec28c2b8 100644 --- a/source/net/filebot/media/MediaDetection.java +++ b/source/net/filebot/media/MediaDetection.java @@ -1113,6 +1113,19 @@ public class MediaDetection { return result; } + public static Movie matchMovie(File file, int depth) { + try { + List names = new ArrayList(depth); + for (File it : listPathTail(file, depth, true)) { + names.add(it.getName()); + } + List matches = matchMovieName(names, true, 0); + return matches.size() > 0 ? matches.get(0) : null; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + public static File guessMediaFolder(File file) { List tail = listPathTail(file, 3, true); diff --git a/source/net/filebot/subtitle/SubtitleUtilities.java b/source/net/filebot/subtitle/SubtitleUtilities.java index 20d30aa0..3729579f 100644 --- a/source/net/filebot/subtitle/SubtitleUtilities.java +++ b/source/net/filebot/subtitle/SubtitleUtilities.java @@ -69,7 +69,7 @@ public final class SubtitleUtilities { List files = bySeries.getValue(); // try to guess what type of search might be required (minimize false negatives) - boolean searchBySeries = files.stream().anyMatch(f -> isEpisode(getName(f), false)); + boolean searchBySeries = files.stream().anyMatch(f -> isEpisode(getName(f), true) || (isEpisode(getName(f), false) && matchMovie(f, 2) == null)); boolean searchByMovie = files.stream().anyMatch(f -> !isEpisode(getName(f), true)); if (forceQuery != null && forceQuery.length() > 0) { diff --git a/source/net/filebot/web/OpenSubtitlesClient.java b/source/net/filebot/web/OpenSubtitlesClient.java index ab5a8ae0..b56c8ca2 100644 --- a/source/net/filebot/web/OpenSubtitlesClient.java +++ b/source/net/filebot/web/OpenSubtitlesClient.java @@ -67,7 +67,7 @@ public class OpenSubtitlesClient implements SubtitleProvider, VideoHashSubtitleS } public boolean isAnonymous() { - return username.isEmpty(); + return username == null || username.isEmpty(); } @Override