1
0
mirror of https://github.com/mitb-archive/filebot synced 2025-03-09 22:09:47 -04:00

* only allow 1 single concurrent connection at any time (to reduce abuse)

This commit is contained in:
Reinhard Pointner 2014-10-28 16:13:04 +00:00
parent f7436eee9e
commit f14aa89625
3 changed files with 13 additions and 6 deletions

View File

@ -290,7 +290,7 @@ public class SubtitlePanel extends AbstractSearchPanel<SubtitleProvider, Subtitl
try { try {
if (osdbUser.getText().length() > 0 && osdbPass.getPassword().length > 0) { if (osdbUser.getText().length() > 0 && osdbPass.getPassword().length > 0) {
OpenSubtitlesClient osdb = new OpenSubtitlesClient(String.format("%s %s", getApplicationName(), getApplicationVersion())); OpenSubtitlesClient osdb = new OpenSubtitlesClient(String.format("%s v%s", getApplicationName(), getApplicationVersion()));
osdb.setUser(osdbUser.getText(), new String(osdbPass.getPassword())); osdb.setUser(osdbUser.getText(), new String(osdbPass.getPassword()));
osdb.login(); osdb.login();
} }

View File

@ -55,7 +55,7 @@ public class OpenSubtitlesClient implements SubtitleProvider, VideoHashSubtitleS
private String password = ""; private String password = "";
public OpenSubtitlesClient(String useragent) { public OpenSubtitlesClient(String useragent) {
this.xmlrpc = new OpenSubtitlesXmlRpcWithRetry(useragent, 2, 3000); this.xmlrpc = new OpenSubtitlesXmlRpcWithRetryAndFloodLimit(useragent, 2, 3000);
} }
public synchronized void setUser(String username, String password) { public synchronized void setUser(String username, String password) {
@ -674,15 +674,16 @@ public class OpenSubtitlesClient implements SubtitleProvider, VideoHashSubtitleS
return null; return null;
} }
} }
protected static class OpenSubtitlesXmlRpcWithRetry extends OpenSubtitlesXmlRpc { protected static class OpenSubtitlesXmlRpcWithRetryAndFloodLimit extends OpenSubtitlesXmlRpc {
private final Object lock = new Object();
private int retryCountLimit; private int retryCountLimit;
private long retryWaitTime; private long retryWaitTime;
public OpenSubtitlesXmlRpcWithRetry(String useragent, int retryCountLimit, long retryWaitTime) { public OpenSubtitlesXmlRpcWithRetryAndFloodLimit(String useragent, int retryCountLimit, long retryWaitTime) {
super(useragent); super(useragent);
this.retryCountLimit = retryCountLimit; this.retryCountLimit = retryCountLimit;
this.retryWaitTime = retryWaitTime; this.retryWaitTime = retryWaitTime;
@ -695,7 +696,11 @@ public class OpenSubtitlesClient implements SubtitleProvider, VideoHashSubtitleS
if (i > 0) { if (i > 0) {
Thread.sleep(retryWaitTime); Thread.sleep(retryWaitTime);
} }
return super.invoke(method, arguments);
// only allow 1 single concurrent connection at any time (to reduce abuse)
synchronized (lock) {
return super.invoke(method, arguments);
}
} catch (XmlRpcException e) { } catch (XmlRpcException e) {
IOException ioException = ExceptionUtilities.findCause(e, IOException.class); IOException ioException = ExceptionUtilities.findCause(e, IOException.class);
if (ioException == null || i >= 0 && i >= retryCountLimit) { if (ioException == null || i >= 0 && i >= retryCountLimit) {

View File

@ -112,6 +112,7 @@ public class OpenSubtitlesXmlRpc {
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Deprecated
public List<Movie> searchMoviesOnIMDB(String query) throws XmlRpcFault { public List<Movie> searchMoviesOnIMDB(String query) throws XmlRpcFault {
Map<?, ?> response = invoke("SearchMoviesOnIMDB", token, query); Map<?, ?> response = invoke("SearchMoviesOnIMDB", token, query);
@ -265,6 +266,7 @@ public class OpenSubtitlesXmlRpc {
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Deprecated
public Movie getIMDBMovieDetails(int imdbid) throws XmlRpcFault { public Movie getIMDBMovieDetails(int imdbid) throws XmlRpcFault {
Map<?, ?> response = invoke("GetIMDBMovieDetails", token, imdbid); Map<?, ?> response = invoke("GetIMDBMovieDetails", token, imdbid);