diff --git a/common/src/main/java/ctbrec/recorder/OnlineMonitor.java b/common/src/main/java/ctbrec/recorder/OnlineMonitor.java index 3723b537..503802df 100644 --- a/common/src/main/java/ctbrec/recorder/OnlineMonitor.java +++ b/common/src/main/java/ctbrec/recorder/OnlineMonitor.java @@ -24,7 +24,6 @@ import static ctbrec.Model.State.UNKNOWN; public class OnlineMonitor extends Thread { private static final Logger LOG = LoggerFactory.getLogger(OnlineMonitor.class); private static final boolean IGNORE_CACHE = true; - private static final long TIMEOUT_IN_MILLIS = 2000; private volatile boolean running = false; private final Recorder recorder; @@ -81,15 +80,16 @@ public class OnlineMonitor extends Thread { } // wait for all jobs to finish for (ModelAwareFuture future : futures) { + Duration timeout = future.getModel().getSite().getOnlineCheckTimeout(); try { - future.get(TIMEOUT_IN_MILLIS, TimeUnit.MILLISECONDS); + future.get(timeout.toMillis(), TimeUnit.MILLISECONDS); } catch (InterruptedException e) { LOG.debug("Online check interrupted for model {}", future.getModel(), e); Thread.currentThread().interrupt(); } catch (ExecutionException e) { LOG.info("Error while checking online state for model {}", future.getModel(), e); } catch (TimeoutException e) { - LOG.debug("Online check didn't finish after {}ms for model {}", TIMEOUT_IN_MILLIS, future.getModel()); + LOG.debug("Online check didn't finish after {}ms for model {}", timeout.toMillis(), future.getModel()); } } } diff --git a/common/src/main/java/ctbrec/sites/Site.java b/common/src/main/java/ctbrec/sites/Site.java index 34ff3cbc..9b665824 100644 --- a/common/src/main/java/ctbrec/sites/Site.java +++ b/common/src/main/java/ctbrec/sites/Site.java @@ -1,36 +1,64 @@ package ctbrec.sites; -import java.io.IOException; -import java.util.List; - import ctbrec.Config; import ctbrec.Model; import ctbrec.io.HttpClient; import ctbrec.recorder.Recorder; +import java.io.IOException; +import java.time.Duration; +import java.util.List; + public interface Site { - public String getTitle(); - public String getName(); - public String getBaseUrl(); - public String getAffiliateLink(); - public void setRecorder(Recorder recorder); - public Recorder getRecorder(); - public Model createModel(String name); - public Double getTokenBalance() throws IOException; - public String getBuyTokensLink(); - public boolean login() throws IOException; - public HttpClient getHttpClient(); - public void init() throws IOException; - public void shutdown(); - public boolean supportsTips(); - public boolean supportsFollow(); - public boolean supportsSearch(); - public boolean isSiteForModel(Model m); - public boolean credentialsAvailable(); - public void setEnabled(boolean enabled); - public boolean isEnabled(); - public List search(String q) throws IOException, InterruptedException; - public boolean searchRequiresLogin(); - public Model createModelFromUrl(String url); - public void setConfig(Config config); + String getTitle(); + + String getName(); + + String getBaseUrl(); + + String getAffiliateLink(); + + void setRecorder(Recorder recorder); + + Recorder getRecorder(); + + Model createModel(String name); + + Double getTokenBalance() throws IOException; + + String getBuyTokensLink(); + + boolean login() throws IOException; + + HttpClient getHttpClient(); + + void init() throws IOException; + + void shutdown(); + + boolean supportsTips(); + + boolean supportsFollow(); + + boolean supportsSearch(); + + boolean isSiteForModel(Model m); + + boolean credentialsAvailable(); + + void setEnabled(boolean enabled); + + boolean isEnabled(); + + List search(String q) throws IOException, InterruptedException; + + boolean searchRequiresLogin(); + + Model createModelFromUrl(String url); + + void setConfig(Config config); + + default Duration getOnlineCheckTimeout() { + return Duration.ofSeconds(2); + } } diff --git a/common/src/main/java/ctbrec/sites/chaturbate/Chaturbate.java b/common/src/main/java/ctbrec/sites/chaturbate/Chaturbate.java index dcec5683..d88c301d 100644 --- a/common/src/main/java/ctbrec/sites/chaturbate/Chaturbate.java +++ b/common/src/main/java/ctbrec/sites/chaturbate/Chaturbate.java @@ -1,18 +1,5 @@ package ctbrec.sites.chaturbate; -import static ctbrec.io.HttpConstants.*; - -import java.io.IOException; -import java.net.URLEncoder; -import java.time.Instant; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.json.JSONArray; -import org.json.JSONObject; - import ctbrec.Model; import ctbrec.StringUtil; import ctbrec.io.HtmlParser; @@ -20,6 +7,20 @@ import ctbrec.io.HttpClient; import ctbrec.sites.AbstractSite; import okhttp3.Request; import okhttp3.Response; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.io.IOException; +import java.net.URLEncoder; +import java.time.Duration; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static ctbrec.io.HttpConstants.*; +import static java.nio.charset.StandardCharsets.UTF_8; public class Chaturbate extends AbstractSite { @@ -69,14 +70,15 @@ public class Chaturbate extends AbstractSite { .url(url) .header(USER_AGENT, getConfig().getSettings().httpUserAgent) .build(); - Response resp = getHttpClient().execute(req); - if (resp.isSuccessful()) { - String profilePage = resp.body().string(); - String tokenText = HtmlParser.getText(profilePage, "span.tokencount"); - int tokens = Integer.parseInt(tokenText); - return (double) tokens; - } else { - throw new IOException("HTTP response: " + resp.code() + " - " + resp.message()); + try (Response resp = getHttpClient().execute(req)) { + if (resp.isSuccessful()) { + String profilePage = resp.body().string(); + String tokenText = HtmlParser.getText(profilePage, "span.tokencount"); + int tokens = Integer.parseInt(tokenText); + return (double) tokens; + } else { + throw new IOException("HTTP response: " + resp.code() + " - " + resp.message()); + } } } @@ -122,7 +124,7 @@ public class Chaturbate extends AbstractSite { @Override public List search(String q) throws IOException, InterruptedException { - String url = baseUrl + "/ax/search/?keywords=" + URLEncoder.encode(q, "utf-8"); + String url = baseUrl + "/ax/search/?keywords=" + URLEncoder.encode(q, UTF_8); List result = new ArrayList<>(); // search online models @@ -170,11 +172,17 @@ public class Chaturbate extends AbstractSite { @Override public Model createModelFromUrl(String url) { Matcher m = Pattern.compile("https?://.*?chaturbate.com(?:/p)?/([^/]*?)/?").matcher(url); - if(m.matches()) { + if (m.matches()) { String modelName = m.group(1); return createModel(modelName); } else { return super.createModelFromUrl(url); } } + + @Override + public Duration getOnlineCheckTimeout() { + int msBetweenRequests = getConfig().getSettings().chaturbateMsBetweenRequests; + return Duration.ofMillis(msBetweenRequests + 2000L); + } }