Improve online check for Chaturbate by determining the size of the offline fallback image

This commit is contained in:
0xb00bface 2023-11-05 14:52:28 +01:00
parent 0c5a2df61f
commit a9b1080d2f
1 changed files with 29 additions and 3 deletions

View File

@ -7,6 +7,7 @@ import com.iheartradio.m3u8.data.Playlist;
import com.iheartradio.m3u8.data.PlaylistData; import com.iheartradio.m3u8.data.PlaylistData;
import ctbrec.AbstractModel; import ctbrec.AbstractModel;
import ctbrec.Config; import ctbrec.Config;
import ctbrec.StringUtil;
import ctbrec.io.HttpException; import ctbrec.io.HttpException;
import ctbrec.io.json.ObjectMapperFactory; import ctbrec.io.json.ObjectMapperFactory;
import ctbrec.recorder.download.StreamSource; import ctbrec.recorder.download.StreamSource;
@ -38,6 +39,7 @@ public class ChaturbateModel extends AbstractModel {
private int[] resolution = new int[2]; private int[] resolution = new int[2];
private transient StreamInfo streamInfo; private transient StreamInfo streamInfo;
private transient Instant lastStreamInfoRequest = Instant.EPOCH; private transient Instant lastStreamInfoRequest = Instant.EPOCH;
private transient int offlineImageSize = 0;
private final transient ObjectMapper mapper = ObjectMapperFactory.getMapper(); private final transient ObjectMapper mapper = ObjectMapperFactory.getMapper();
/** /**
@ -74,19 +76,43 @@ public class ChaturbateModel extends AbstractModel {
private boolean isOffline() { private boolean isOffline() {
String normalizedName = getName().toLowerCase().trim(); String normalizedName = getName().toLowerCase().trim();
String previewUrl = "https://roomimg.stream.highwebmedia.com/ri/" + normalizedName + ".jpg?" + Instant.now().getEpochSecond(); String previewUrl = "https://roomimg.stream.highwebmedia.com/ri/" + normalizedName + ".jpg?" + Instant.now().getEpochSecond();
if (offlineImageSize == 0) {
offlineImageSize = getOfflineImageSize();
}
return getImageSize(previewUrl) == offlineImageSize;
}
private int getOfflineImageSize() {
String randomName = UUID.randomUUID().toString().replace("-", "").substring(0, 10);
String previewUrl = "https://roomimg.stream.highwebmedia.com/ri/" + randomName + ".jpg?" + Instant.now().getEpochSecond();
int imageSize = getImageSize(previewUrl);
if (imageSize == 0) {
imageSize = 21971;
}
return imageSize;
}
private int getImageSize(String url) {
int imageSize = 0;
Request req = new Request.Builder() Request req = new Request.Builder()
.url(previewUrl) .url(url)
.header(USER_AGENT, Config.getInstance().getSettings().httpUserAgent) .header(USER_AGENT, Config.getInstance().getSettings().httpUserAgent)
.head() .head()
.build(); .build();
try (Response response = getSite().getHttpClient().execute(req)) { try (Response response = getSite().getHttpClient().execute(req)) {
if (response.isSuccessful()) { if (response.isSuccessful()) {
return response.header("Content-Length", "0").equals("21971"); imageSize = Integer.parseInt(response.header("Content-Length", "0"));
if (StringUtil.isNotBlank(response.header("Cf-Polished"))) {
String[] parts = response.header("Cf-Polished").split("=");
if (parts.length > 1) {
imageSize = Integer.parseInt(parts[1].trim());
}
}
} }
} catch (Exception ex) { } catch (Exception ex) {
// fail silently // fail silently
} }
return false; return imageSize;
} }
@Override @Override