* update & enable OpenSubtitles GuessMovie RPC method again

This commit is contained in:
Reinhard Pointner 2015-11-06 19:44:55 +00:00
parent e80c9d855a
commit 4a95aaf029
2 changed files with 19 additions and 26 deletions

View File

@ -94,21 +94,18 @@ public class OpenSubtitlesClient implements SubtitleProvider, VideoHashSubtitleS
@Override
public List<SubtitleSearchResult> guess(String tag) throws Exception {
// !!! XML-RPC CURRENTLY METHOD BROKEN !!!
return emptyList();
List<SubtitleSearchResult> subtitles = getCache().getSearchResult("guess", tag);
if (subtitles != null) {
return subtitles;
}
// List<SubtitleSearchResult> subtitles = getCache().getSearchResult("guess", tag);
// if (subtitles != null) {
// return subtitles;
// }
//
// // require login
// login();
//
// subtitles = xmlrpc.guessMovie(singleton(tag)).getOrDefault(tag, emptyList());
//
// getCache().putSearchResult("guess", tag, subtitles);
// return subtitles;
// require login
login();
subtitles = xmlrpc.guessMovie(singleton(tag)).getOrDefault(tag, emptyList());
getCache().putSearchResult("guess", tag, subtitles);
return subtitles;
}
@Override

View File

@ -233,31 +233,27 @@ public class OpenSubtitlesXmlRpc {
return subHashMap;
}
@Deprecated
public Map<String, List<SubtitleSearchResult>> guessMovie(Collection<String> tags) throws XmlRpcFault {
Map<String, List<SubtitleSearchResult>> results = new HashMap<String, List<SubtitleSearchResult>>();
Map<?, ?> response = invoke("GuessMovie", token, tags);
Map<?, ?> response = invoke("GuessMovieFromString", token, tags);
Object payload = response.get("data");
if (payload instanceof Map) {
Map<String, List<Map<String, ?>>> guessMovieData = (Map<String, List<Map<String, ?>>>) payload;
Map<String, Map<String, Map<String, ?>>> dataByTag = (Map<String, Map<String, Map<String, ?>>>) payload;
for (String tag : tags) {
List<SubtitleSearchResult> value = new ArrayList<>();
List<Map<String, ?>> matches = guessMovieData.get(tag);
if (matches != null) {
for (Map<String, ?> match : matches) {
List<SubtitleSearchResult> value = new ArrayList<SubtitleSearchResult>();
Map<String, Map<String, ?>> data = dataByTag.get(tag);
if (data != null) {
Map<String, ?> match = data.get("BestGuess");
if (match != null) {
String name = String.valueOf(match.get("MovieName"));
String kind = String.valueOf(match.get("MovieKind"));
int imdbid = Integer.parseInt(String.valueOf(match.get("IDMovieIMDB")));
int year = Integer.parseInt(String.valueOf(match.get("MovieYear")));
int score = Integer.parseInt(String.valueOf(match.get("score")));
value.add(new SubtitleSearchResult(imdbid, name, year, kind, score));
value.add(new SubtitleSearchResult(imdbid, name, year, kind, -1));
}
}
results.put(tag, value);
}
}