* 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:
parent
ac774306f4
commit
b59ab7e6ee
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue