mirror of
https://github.com/mitb-archive/filebot
synced 2024-12-26 09:48:56 -05:00
* make OpenSubtitlesClient fault tolerant via automatic retries
* try for exact matches in internal movie index first before running a query
This commit is contained in:
parent
fede643336
commit
f902b04dee
@ -234,8 +234,8 @@ def detectSeriesName(files, locale = Locale.ENGLISH) {
|
|||||||
return names == null || names.isEmpty() ? null : names.toList()[0]
|
return names == null || names.isEmpty() ? null : names.toList()[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
def detectMovie(File movieFile, strict = true, queryLookupService = TheMovieDB, hashLookupService = OpenSubtitles, locale = Locale.ENGLISH) {
|
def detectMovie(File file, strict = true, queryLookupService = TheMovieDB, hashLookupService = OpenSubtitles, locale = Locale.ENGLISH) {
|
||||||
def movies = MediaDetection.detectMovie(movieFile, hashLookupService, queryLookupService, locale, strict)
|
def movies = MediaDetection.matchMovieName([file.name, file.parentFile.name], true, 0) ?: MediaDetection.detectMovie(file, hashLookupService, queryLookupService, locale, strict)
|
||||||
return movies == null || movies.isEmpty() ? null : movies.toList()[0]
|
return movies == null || movies.isEmpty() ? null : movies.toList()[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,8 +38,10 @@ import net.sourceforge.filebot.web.OpenSubtitlesXmlRpc.BaseInfo;
|
|||||||
import net.sourceforge.filebot.web.OpenSubtitlesXmlRpc.Query;
|
import net.sourceforge.filebot.web.OpenSubtitlesXmlRpc.Query;
|
||||||
import net.sourceforge.filebot.web.OpenSubtitlesXmlRpc.SubFile;
|
import net.sourceforge.filebot.web.OpenSubtitlesXmlRpc.SubFile;
|
||||||
import net.sourceforge.filebot.web.OpenSubtitlesXmlRpc.TryUploadResponse;
|
import net.sourceforge.filebot.web.OpenSubtitlesXmlRpc.TryUploadResponse;
|
||||||
|
import net.sourceforge.tuned.ExceptionUtilities;
|
||||||
import net.sourceforge.tuned.Timer;
|
import net.sourceforge.tuned.Timer;
|
||||||
import redstone.xmlrpc.XmlRpcException;
|
import redstone.xmlrpc.XmlRpcException;
|
||||||
|
import redstone.xmlrpc.XmlRpcFault;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SubtitleClient for OpenSubtitles.
|
* SubtitleClient for OpenSubtitles.
|
||||||
@ -52,7 +54,7 @@ public class OpenSubtitlesClient implements SubtitleProvider, VideoHashSubtitleS
|
|||||||
private String password = "";
|
private String password = "";
|
||||||
|
|
||||||
public OpenSubtitlesClient(String useragent) {
|
public OpenSubtitlesClient(String useragent) {
|
||||||
this.xmlrpc = new OpenSubtitlesXmlRpc(useragent);
|
this.xmlrpc = new OpenSubtitlesXmlRpcWithRetry(useragent, 2, 3000);
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void setUser(String username, String password) {
|
public synchronized void setUser(String username, String password) {
|
||||||
@ -576,4 +578,37 @@ public class OpenSubtitlesClient implements SubtitleProvider, VideoHashSubtitleS
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected static class OpenSubtitlesXmlRpcWithRetry extends OpenSubtitlesXmlRpc {
|
||||||
|
|
||||||
|
private int retryCountLimit;
|
||||||
|
private long retryWaitTime;
|
||||||
|
|
||||||
|
public OpenSubtitlesXmlRpcWithRetry(String useragent, int retryCountLimit, long retryWaitTime) {
|
||||||
|
super(useragent);
|
||||||
|
this.retryCountLimit = retryCountLimit;
|
||||||
|
this.retryWaitTime = retryWaitTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Map<?, ?> invoke(String method, Object... arguments) throws XmlRpcFault {
|
||||||
|
for (int i = 0; retryCountLimit < 0 || i <= retryCountLimit; i++) {
|
||||||
|
try {
|
||||||
|
if (i > 0) {
|
||||||
|
Thread.sleep(retryWaitTime);
|
||||||
|
}
|
||||||
|
return super.invoke(method, arguments);
|
||||||
|
} catch (XmlRpcFault | XmlRpcException e) {
|
||||||
|
IOException ioException = ExceptionUtilities.findCause(e, IOException.class);
|
||||||
|
if (ioException == null || i >= 0 && i >= retryCountLimit) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null; // can't happen
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user