diff --git a/common/src/main/java/ctbrec/io/HttpClient.java b/common/src/main/java/ctbrec/io/HttpClient.java index c80533ec..d65f212d 100644 --- a/common/src/main/java/ctbrec/io/HttpClient.java +++ b/common/src/main/java/ctbrec/io/HttpClient.java @@ -51,6 +51,7 @@ public abstract class HttpClient { protected OkHttpClient client; protected Cache cache; protected Config config; + @Getter protected boolean loggedIn = false; protected long cacheSize; protected int cacheLifeTime = 600; diff --git a/common/src/main/java/ctbrec/sites/chaturbate/ChaturbateModel.java b/common/src/main/java/ctbrec/sites/chaturbate/ChaturbateModel.java index 39d27a61..bb17b8e4 100644 --- a/common/src/main/java/ctbrec/sites/chaturbate/ChaturbateModel.java +++ b/common/src/main/java/ctbrec/sites/chaturbate/ChaturbateModel.java @@ -30,11 +30,14 @@ import java.util.concurrent.ExecutionException; import static ctbrec.Model.State.*; import static ctbrec.io.HttpConstants.*; import static java.nio.charset.StandardCharsets.UTF_8; +import java.util.regex.Pattern; @Slf4j public class ChaturbateModel extends AbstractModel { private static final String PUBLIC = "public"; + private static final Pattern serverPattern = Pattern.compile("live-.+amlst"); + private int[] resolution = new int[2]; private transient StreamInfo streamInfo; private transient Instant lastStreamInfoRequest = Instant.EPOCH; @@ -311,6 +314,21 @@ public class ChaturbateModel extends AbstractModel { String content = response.body().string(); log.trace("Raw stream info for model {}: {}", getName(), content); streamInfo = mapper.readValue(content, StreamInfo.class); + + if (streamInfo.cmaf_edge && streamInfo.url.contains("playlist.m3u8")) { + streamInfo.url = streamInfo.url.replace("playlist.m3u8", "playlist_sfm4s.m3u8"); + } else if (streamInfo.url.contains("playlist_sfm4s.m3u8")) { + streamInfo.url = streamInfo.url.replace("playlist_sfm4s.m3u8", "playlist.m3u8"); + } + + var match = serverPattern.matcher(streamInfo.url); + + if (getSite().getHttpClient().isLoggedIn()) { + streamInfo.url = match.replaceFirst("live-fhls/amlst"); + } else { + streamInfo.url = match.replaceFirst("live-c-fhls/amlst"); + } + return streamInfo; } else { int code = response.code(); diff --git a/common/src/main/java/ctbrec/sites/chaturbate/StreamInfo.java b/common/src/main/java/ctbrec/sites/chaturbate/StreamInfo.java index 285ea6c2..6b2d1a20 100644 --- a/common/src/main/java/ctbrec/sites/chaturbate/StreamInfo.java +++ b/common/src/main/java/ctbrec/sites/chaturbate/StreamInfo.java @@ -5,4 +5,5 @@ public class StreamInfo { public String room_status; public String hidden_message; public boolean success; + public boolean cmaf_edge; }