From b59ab7e6ee8a43a90c78eb5daff69f8b7526305a Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Thu, 7 Jul 2011 02:08:50 +0000 Subject: [PATCH] * added lookup by filename/foldername to movie mode * search order is now like this: lookup moviehash->lookup imdbid from .nfo->search by filename->search by foldername --- .../filebot/ui/panel/rename/MovieHashMatcher.java | 13 +++++++++++++ .../filebot/web/MovieIdentificationService.java | 4 ++++ .../filebot/web/OpenSubtitlesClient.java | 9 +++++++++ .../net/sourceforge/filebot/web/TMDbClient.java | 15 +++++++++++++-- source/net/sourceforge/tuned/FileUtilities.java | 2 +- 5 files changed, 40 insertions(+), 3 deletions(-) diff --git a/source/net/sourceforge/filebot/ui/panel/rename/MovieHashMatcher.java b/source/net/sourceforge/filebot/ui/panel/rename/MovieHashMatcher.java index 01e750e6..41861d91 100644 --- a/source/net/sourceforge/filebot/ui/panel/rename/MovieHashMatcher.java +++ b/source/net/sourceforge/filebot/ui/panel/rename/MovieHashMatcher.java @@ -143,6 +143,7 @@ class MovieHashMatcher implements AutoCompleteMatcher { protected MovieDescriptor determineMovie(File movieFile) throws Exception { List options = new ArrayList(); + // try to grep imdb id from nfo files for (int imdbid : grepImdbId(movieFile.getParentFile().listFiles(getDefaultFilter("application/nfo")))) { MovieDescriptor movie = service.getMovieDescriptor(imdbid); @@ -151,6 +152,18 @@ class MovieHashMatcher implements AutoCompleteMatcher { } } + // search by file name + if (options.isEmpty()) { + String query = getName(movieFile).replaceAll("\\p{Punct}", "").trim(); + options = service.searchMovie(query); + + // search by folder name + if (options.isEmpty()) { + query = getName(movieFile.getParentFile()).replaceAll("\\p{Punct}", "").trim(); + options = service.searchMovie(query); + } + } + return options.isEmpty() ? null : selectMovie(options); } diff --git a/source/net/sourceforge/filebot/web/MovieIdentificationService.java b/source/net/sourceforge/filebot/web/MovieIdentificationService.java index 3ba6f13f..b8bcb6f9 100644 --- a/source/net/sourceforge/filebot/web/MovieIdentificationService.java +++ b/source/net/sourceforge/filebot/web/MovieIdentificationService.java @@ -3,10 +3,14 @@ package net.sourceforge.filebot.web; import java.io.File; +import java.util.List; public interface MovieIdentificationService { + public List searchMovie(String query) throws Exception; + + public MovieDescriptor getMovieDescriptor(int imdbid) throws Exception; diff --git a/source/net/sourceforge/filebot/web/OpenSubtitlesClient.java b/source/net/sourceforge/filebot/web/OpenSubtitlesClient.java index 4199dc07..8d3bea59 100644 --- a/source/net/sourceforge/filebot/web/OpenSubtitlesClient.java +++ b/source/net/sourceforge/filebot/web/OpenSubtitlesClient.java @@ -146,6 +146,15 @@ public class OpenSubtitlesClient implements SubtitleProvider, VideoHashSubtitleS } + @Override + public List searchMovie(String query) throws Exception { + // require login + login(); + + return xmlrpc.searchMoviesOnIMDB(query); + } + + @Override public MovieDescriptor getMovieDescriptor(int imdbid) throws Exception { // require login diff --git a/source/net/sourceforge/filebot/web/TMDbClient.java b/source/net/sourceforge/filebot/web/TMDbClient.java index f441dac1..bf732b48 100644 --- a/source/net/sourceforge/filebot/web/TMDbClient.java +++ b/source/net/sourceforge/filebot/web/TMDbClient.java @@ -10,8 +10,11 @@ import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Scanner; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.swing.Icon; @@ -44,8 +47,15 @@ public class TMDbClient implements MovieIdentificationService { } - public List searchMovie(String query) throws IOException, SAXException { - return getMovies("Movie.search", query); + @Override + public List searchMovie(String query) throws IOException { + try { + return getMovies("Movie.search", query); + } catch (SAXException e) { + // TMDb output is sometimes malformed xml + Logger.getLogger(getClass().getName()).log(Level.WARNING, e.getMessage()); + return Collections.emptyList(); + } } @@ -59,6 +69,7 @@ public class TMDbClient implements MovieIdentificationService { } + @Override public MovieDescriptor getMovieDescriptor(int imdbid) throws Exception { URL resource = getResource("Movie.imdbLookup", String.format("tt%07d", imdbid)); Node movie = selectNode("//movie", getDocument(resource)); diff --git a/source/net/sourceforge/tuned/FileUtilities.java b/source/net/sourceforge/tuned/FileUtilities.java index 7c3d3575..235bfecb 100644 --- a/source/net/sourceforge/tuned/FileUtilities.java +++ b/source/net/sourceforge/tuned/FileUtilities.java @@ -198,7 +198,7 @@ public final class FileUtilities { public static Map> mapByExtension(Iterable files) { - HashMap> map = new HashMap>(); + Map> map = new HashMap>(); for (File file : files) { String key = getExtension(file);