* 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
This commit is contained in:
Reinhard Pointner 2011-07-07 02:08:50 +00:00
parent ac774306f4
commit b59ab7e6ee
5 changed files with 40 additions and 3 deletions

View File

@ -143,6 +143,7 @@ class MovieHashMatcher implements AutoCompleteMatcher {
protected MovieDescriptor determineMovie(File movieFile) throws Exception {
List<MovieDescriptor> options = new ArrayList<MovieDescriptor>();
// 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);
}

View File

@ -3,10 +3,14 @@ package net.sourceforge.filebot.web;
import java.io.File;
import java.util.List;
public interface MovieIdentificationService {
public List<MovieDescriptor> searchMovie(String query) throws Exception;
public MovieDescriptor getMovieDescriptor(int imdbid) throws Exception;

View File

@ -146,6 +146,15 @@ public class OpenSubtitlesClient implements SubtitleProvider, VideoHashSubtitleS
}
@Override
public List<MovieDescriptor> searchMovie(String query) throws Exception {
// require login
login();
return xmlrpc.searchMoviesOnIMDB(query);
}
@Override
public MovieDescriptor getMovieDescriptor(int imdbid) throws Exception {
// require login

View File

@ -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<MovieDescriptor> searchMovie(String query) throws IOException, SAXException {
return getMovies("Movie.search", query);
@Override
public List<MovieDescriptor> 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));

View File

@ -198,7 +198,7 @@ public final class FileUtilities {
public static Map<String, List<File>> mapByExtension(Iterable<File> files) {
HashMap<String, List<File>> map = new HashMap<String, List<File>>();
Map<String, List<File>> map = new HashMap<String, List<File>>();
for (File file : files) {
String key = getExtension(file);