Fix Showup.tv loading of overviews and thumbnails
This commit is contained in:
parent
3ed7fd1aff
commit
74459d61fc
|
@ -11,8 +11,8 @@ import javafx.concurrent.Task;
|
||||||
|
|
||||||
public class ShowupUpdateService extends PaginatedScheduledService {
|
public class ShowupUpdateService extends PaginatedScheduledService {
|
||||||
|
|
||||||
private Showup showup;
|
private final Showup showup;
|
||||||
private String category;
|
private final String category;
|
||||||
|
|
||||||
public ShowupUpdateService(Showup showup, String category) {
|
public ShowupUpdateService(Showup showup, String category) {
|
||||||
this.showup = showup;
|
this.showup = showup;
|
||||||
|
@ -21,12 +21,12 @@ public class ShowupUpdateService extends PaginatedScheduledService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Task<List<Model>> createTask() {
|
protected Task<List<Model>> createTask() {
|
||||||
return new Task<List<Model>>() {
|
return new Task<>() {
|
||||||
@Override
|
@Override
|
||||||
public List<Model> call() throws IOException {
|
public List<Model> call() throws IOException {
|
||||||
ShowupHttpClient httpClient = (ShowupHttpClient) showup.getHttpClient();
|
ShowupHttpClient httpClient = (ShowupHttpClient) showup.getHttpClient();
|
||||||
httpClient.setCookie("category", category);
|
httpClient.setCookie("category", category);
|
||||||
return showup.getModelList();
|
return showup.getModelList(true);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
package ctbrec;
|
package ctbrec;
|
||||||
|
|
||||||
import java.io.IOException;
|
import kotlin.Pair;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import okhttp3.Interceptor;
|
import okhttp3.Interceptor;
|
||||||
import okhttp3.Request;
|
import okhttp3.Request;
|
||||||
import okhttp3.Response;
|
import okhttp3.Response;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
public class LoggingInterceptor implements Interceptor {
|
public class LoggingInterceptor implements Interceptor {
|
||||||
|
|
||||||
|
@ -17,13 +17,19 @@ public class LoggingInterceptor implements Interceptor {
|
||||||
public Response intercept(Chain chain) throws IOException {
|
public Response intercept(Chain chain) throws IOException {
|
||||||
long t1 = System.nanoTime();
|
long t1 = System.nanoTime();
|
||||||
Request request = chain.request();
|
Request request = chain.request();
|
||||||
LOG.debug("OkHttp Sending request {} on {}\n{}", request.url(), chain.connection(), request.headers());
|
LOG.debug("OkHttp Sending request {} on {}", request.url(), chain.connection());
|
||||||
if(request.method().equalsIgnoreCase("POST")) {
|
for (Pair<?, ?> header : request.headers()) {
|
||||||
|
LOG.debug("{}: {}", header.getFirst(), header.getSecond());
|
||||||
|
}
|
||||||
|
if (request.method().equalsIgnoreCase("POST")) {
|
||||||
LOG.debug("Body: {}", request.body());
|
LOG.debug("Body: {}", request.body());
|
||||||
}
|
}
|
||||||
Response response = chain.proceed(request);
|
Response response = chain.proceed(request);
|
||||||
long t2 = System.nanoTime();
|
long t2 = System.nanoTime();
|
||||||
LOG.debug("OkHttp Received {} response for {} in {}ms\n{}", response.code(), response.request().url(), (t2 - t1) / 1e6d, response.headers());
|
LOG.debug("OkHttp Received {} response for {} in {}ms", response.code(), response.request().url(), (t2 - t1) / 1e6d);
|
||||||
|
for (Pair<?, ?> header : response.headers()) {
|
||||||
|
LOG.debug("{}: {}", header.getFirst(), header.getSecond());
|
||||||
|
}
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,30 +1,30 @@
|
||||||
package ctbrec.sites.showup;
|
package ctbrec.sites.showup;
|
||||||
|
|
||||||
import static ctbrec.Model.State.*;
|
|
||||||
import static ctbrec.io.HttpConstants.*;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.net.URLEncoder;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
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 org.json.JSONArray;
|
|
||||||
import org.json.JSONObject;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import ctbrec.Model;
|
import ctbrec.Model;
|
||||||
import ctbrec.io.HttpClient;
|
import ctbrec.io.HttpClient;
|
||||||
import ctbrec.io.HttpException;
|
import ctbrec.io.HttpException;
|
||||||
import ctbrec.sites.AbstractSite;
|
import ctbrec.sites.AbstractSite;
|
||||||
import okhttp3.Request;
|
import okhttp3.Request;
|
||||||
import okhttp3.Response;
|
import okhttp3.Response;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
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.Objects;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import static ctbrec.ErrorMessages.HTTP_RESPONSE_BODY_IS_NULL;
|
||||||
|
import static ctbrec.Model.State.ONLINE;
|
||||||
|
import static ctbrec.io.HttpConstants.USER_AGENT;
|
||||||
|
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||||
|
|
||||||
public class Showup extends AbstractSite {
|
public class Showup extends AbstractSite {
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ public class Showup extends AbstractSite {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Model createModel(String name) {
|
public ShowupModel createModel(String name) {
|
||||||
ShowupModel model = new ShowupModel();
|
ShowupModel model = new ShowupModel();
|
||||||
model.setSite(this);
|
model.setSite(this);
|
||||||
model.setName(name);
|
model.setName(name);
|
||||||
|
@ -60,15 +60,15 @@ public class Showup extends AbstractSite {
|
||||||
}
|
}
|
||||||
|
|
||||||
private String safeUrlEncode(String s) {
|
private String safeUrlEncode(String s) {
|
||||||
try {
|
return URLEncoder.encode(s, UTF_8);
|
||||||
return URLEncoder.encode(s, StandardCharsets.UTF_8.name());
|
|
||||||
} catch (UnsupportedEncodingException e) {
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Model> getModelList() throws IOException {
|
public List<Model> getModelList() throws IOException {
|
||||||
if(Duration.between(lastModelListUpdate, Instant.now()).getSeconds() > 10) {
|
return getModelList(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Model> getModelList(boolean forceUpdate) throws IOException {
|
||||||
|
if (Duration.between(lastModelListUpdate, Instant.now()).getSeconds() > 10 || forceUpdate) {
|
||||||
lastModelListUpdate = Instant.now();
|
lastModelListUpdate = Instant.now();
|
||||||
String url = getBaseUrl() + "/site/get_stream_list/big";
|
String url = getBaseUrl() + "/site/get_stream_list/big";
|
||||||
Request req = new Request.Builder()
|
Request req = new Request.Builder()
|
||||||
|
@ -78,14 +78,15 @@ public class Showup extends AbstractSite {
|
||||||
|
|
||||||
try (Response response = getHttpClient().execute(req)) {
|
try (Response response = getHttpClient().execute(req)) {
|
||||||
if (response.isSuccessful()) {
|
if (response.isSuccessful()) {
|
||||||
String body = response.body().string();
|
String body = Objects.requireNonNull(response.body(), HTTP_RESPONSE_BODY_IS_NULL).string();
|
||||||
LOG.trace(body);
|
LOG.trace(body);
|
||||||
JSONObject json = new JSONObject(body);
|
JSONObject json = new JSONObject(body);
|
||||||
models = new ArrayList<>();
|
models = new ArrayList<>();
|
||||||
JSONArray list = json.getJSONArray("list");
|
JSONArray list = json.getJSONArray("list");
|
||||||
for (int i = 0; i < list.length(); i++) {
|
for (int i = 0; i < list.length(); i++) {
|
||||||
JSONObject entry = list.getJSONObject(i);
|
JSONObject entry = list.getJSONObject(i);
|
||||||
ShowupModel model = new ShowupModel();
|
ShowupModel model = createModel(entry.getString("username"));
|
||||||
|
model.setUid(entry.optString("uid", null));
|
||||||
model.setPreview(getBaseUrl() + "/files/" + entry.optString("small_img") + ".jpg");
|
model.setPreview(getBaseUrl() + "/files/" + entry.optString("small_img") + ".jpg");
|
||||||
model.setDescription(entry.optString("description"));
|
model.setDescription(entry.optString("description"));
|
||||||
model.setName(entry.optString("username"));
|
model.setName(entry.optString("username"));
|
||||||
|
|
|
@ -1,17 +1,5 @@
|
||||||
package ctbrec.sites.showup;
|
package ctbrec.sites.showup;
|
||||||
|
|
||||||
import static ctbrec.io.HttpConstants.*;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import com.google.common.base.Objects;
|
|
||||||
|
|
||||||
import ctbrec.Config;
|
import ctbrec.Config;
|
||||||
import ctbrec.io.HttpClient;
|
import ctbrec.io.HttpClient;
|
||||||
import ctbrec.io.HttpException;
|
import ctbrec.io.HttpException;
|
||||||
|
@ -19,9 +7,24 @@ import okhttp3.Cookie;
|
||||||
import okhttp3.Request;
|
import okhttp3.Request;
|
||||||
import okhttp3.Response;
|
import okhttp3.Response;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InterruptedIOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.concurrent.Semaphore;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import static ctbrec.ErrorMessages.HTTP_RESPONSE_BODY_IS_NULL;
|
||||||
|
import static ctbrec.io.HttpConstants.ACCEPT_LANGUAGE;
|
||||||
|
import static ctbrec.io.HttpConstants.USER_AGENT;
|
||||||
|
|
||||||
public class ShowupHttpClient extends HttpClient {
|
public class ShowupHttpClient extends HttpClient {
|
||||||
|
|
||||||
private String csrfToken;
|
private String csrfToken;
|
||||||
|
private final Semaphore requestThrottle = new Semaphore(8, true);
|
||||||
|
|
||||||
protected ShowupHttpClient(Config config) {
|
protected ShowupHttpClient(Config config) {
|
||||||
super("showup", config);
|
super("showup", config);
|
||||||
|
@ -37,16 +40,12 @@ public class ShowupHttpClient extends HttpClient {
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
Map<String, List<Cookie>> cookies = cookieJar.getCookies();
|
Map<String, List<Cookie>> cookies = cookieJar.getCookies();
|
||||||
List<Cookie> cookiesForDomain = cookies.computeIfAbsent(cookie.domain(), k -> new ArrayList<Cookie>());
|
List<Cookie> cookiesForDomain = cookies.computeIfAbsent(cookie.domain(), k -> new ArrayList<>());
|
||||||
for (Iterator<Cookie> iterator = cookiesForDomain.iterator(); iterator.hasNext();) {
|
cookiesForDomain.removeIf(existingCookie -> Objects.equals(existingCookie.name(), cookie.name()));
|
||||||
Cookie existingCookie = iterator.next();
|
|
||||||
if (Objects.equal(existingCookie.name(), cookie.name())) {
|
|
||||||
iterator.remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cookiesForDomain.add(cookie);
|
cookiesForDomain.add(cookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
public String getCsrfToken() throws IOException {
|
public String getCsrfToken() throws IOException {
|
||||||
if (csrfToken == null) {
|
if (csrfToken == null) {
|
||||||
Request req = new Request.Builder()
|
Request req = new Request.Builder()
|
||||||
|
@ -56,7 +55,7 @@ public class ShowupHttpClient extends HttpClient {
|
||||||
|
|
||||||
try (Response response = execute(req)) {
|
try (Response response = execute(req)) {
|
||||||
if (response.isSuccessful()) {
|
if (response.isSuccessful()) {
|
||||||
String body = response.body().string();
|
String body = Objects.requireNonNull(response.body(), HTTP_RESPONSE_BODY_IS_NULL).string();
|
||||||
Matcher m = Pattern.compile("var csrf = '(.*?)';").matcher(body);
|
Matcher m = Pattern.compile("var csrf = '(.*?)';").matcher(body);
|
||||||
if (m.matches()) {
|
if (m.matches()) {
|
||||||
csrfToken = m.group(1);
|
csrfToken = m.group(1);
|
||||||
|
@ -71,6 +70,19 @@ public class ShowupHttpClient extends HttpClient {
|
||||||
return csrfToken;
|
return csrfToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Response execute(Request req) throws IOException {
|
||||||
|
try {
|
||||||
|
requestThrottle.acquire();
|
||||||
|
return super.execute(req);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
Thread.currentThread().interrupt();
|
||||||
|
throw new InterruptedIOException("Interrupted during request");
|
||||||
|
} finally {
|
||||||
|
requestThrottle.release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean login() throws IOException {
|
public boolean login() throws IOException {
|
||||||
return checkLoginSuccess();
|
return checkLoginSuccess();
|
||||||
|
@ -93,7 +105,7 @@ public class ShowupHttpClient extends HttpClient {
|
||||||
//
|
//
|
||||||
// try (Response response = execute(req)) {
|
// try (Response response = execute(req)) {
|
||||||
// if (response.isSuccessful()) {
|
// if (response.isSuccessful()) {
|
||||||
// String responseBody = response.body().string();
|
// String responseBody = Objects.requireNonNull(response.body(), HTTP_RESPONSE_BODY_IS_NULL).string();
|
||||||
// if (responseBody.startsWith("{")) {
|
// if (responseBody.startsWith("{")) {
|
||||||
// JSONObject json = new JSONObject(responseBody);
|
// JSONObject json = new JSONObject(responseBody);
|
||||||
// return json.optString("status").equalsIgnoreCase("success");
|
// return json.optString("status").equalsIgnoreCase("success");
|
||||||
|
@ -114,7 +126,7 @@ public class ShowupHttpClient extends HttpClient {
|
||||||
.build();
|
.build();
|
||||||
try (Response response = execute(req)) {
|
try (Response response = execute(req)) {
|
||||||
if (response.isSuccessful()) {
|
if (response.isSuccessful()) {
|
||||||
String responseBody = response.body().string();
|
String responseBody = Objects.requireNonNull(response.body(), HTTP_RESPONSE_BODY_IS_NULL).string();
|
||||||
loggedIn = responseBody.contains("Wyloguj");
|
loggedIn = responseBody.contains("Wyloguj");
|
||||||
return loggedIn;
|
return loggedIn;
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue