Add follow / unfollow for Streamray
This commit is contained in:
parent
a9b1080d2f
commit
b07a478d03
|
@ -14,8 +14,11 @@ import java.util.function.Predicate;
|
|||
|
||||
public class StreamrayTabProvider extends AbstractTabProvider {
|
||||
|
||||
private final Tab followedTab;
|
||||
|
||||
public StreamrayTabProvider(Streamray site) {
|
||||
super(site);
|
||||
followedTab = favoritesTab();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -25,7 +28,7 @@ public class StreamrayTabProvider extends AbstractTabProvider {
|
|||
tabs.add(createTab("Boys", m -> Objects.equals("M", m.getGender())));
|
||||
tabs.add(createTab("Trans", m -> Objects.equals("TS", m.getGender())));
|
||||
tabs.add(createTab("New", StreamrayModel::isNew));
|
||||
tabs.add(favoritesTab());
|
||||
tabs.add(followedTab);
|
||||
return tabs;
|
||||
}
|
||||
|
||||
|
@ -45,4 +48,8 @@ public class StreamrayTabProvider extends AbstractTabProvider {
|
|||
return tab;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Tab getFollowedTab() {
|
||||
return followedTab;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -107,7 +107,7 @@ public class Streamray extends AbstractSite {
|
|||
|
||||
@Override
|
||||
public boolean supportsFollow() {
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -4,6 +4,7 @@ import com.iheartradio.m3u8.ParseException;
|
|||
import com.iheartradio.m3u8.PlaylistException;
|
||||
import ctbrec.AbstractModel;
|
||||
import ctbrec.Config;
|
||||
import ctbrec.StringUtil;
|
||||
import ctbrec.io.HttpException;
|
||||
import ctbrec.recorder.download.RecordingProcess;
|
||||
import ctbrec.recorder.download.StreamSource;
|
||||
|
@ -11,7 +12,9 @@ import ctbrec.recorder.download.hls.FfmpegHlsDownload;
|
|||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import okhttp3.MediaType;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.RequestBody;
|
||||
import okhttp3.Response;
|
||||
import org.json.JSONObject;
|
||||
|
||||
|
@ -28,6 +31,7 @@ import java.util.concurrent.ExecutionException;
|
|||
|
||||
import static ctbrec.Model.State.*;
|
||||
import static ctbrec.io.HttpConstants.*;
|
||||
import static ctbrec.sites.streamray.Streamray.API_URL;
|
||||
|
||||
@Slf4j
|
||||
public class StreamrayModel extends AbstractModel {
|
||||
|
@ -117,7 +121,7 @@ public class StreamrayModel extends AbstractModel {
|
|||
|
||||
private JSONObject loadModelInfo() throws IOException {
|
||||
lastInfoRequest = Instant.now();
|
||||
String url = "https://beta-api.cams.com/models/stream/" + getName() + "/";
|
||||
String url = API_URL + "/models/stream/" + getName() + "/";
|
||||
Request req = new Request.Builder().url(url)
|
||||
.header(USER_AGENT, Config.getInstance().getSettings().httpUserAgent)
|
||||
.header(ACCEPT, MIMETYPE_APPLICATION_JSON)
|
||||
|
@ -133,6 +137,24 @@ public class StreamrayModel extends AbstractModel {
|
|||
}
|
||||
}
|
||||
|
||||
private JSONObject loadModelProfileInfo() throws IOException {
|
||||
String url = API_URL + "/models/new/" + getName() + "/";
|
||||
Request req = new Request.Builder().url(url)
|
||||
.header(USER_AGENT, Config.getInstance().getSettings().httpUserAgent)
|
||||
.header(ACCEPT, MIMETYPE_APPLICATION_JSON)
|
||||
.header(ACCEPT_LANGUAGE, "en")
|
||||
.header(REFERER, getSite().getBaseUrl() + '/' + getName())
|
||||
.build();
|
||||
try (Response response = site.getHttpClient().execute(req)) {
|
||||
if (response.isSuccessful()) {
|
||||
JSONObject jsonResponse = new JSONObject(response.body().string());
|
||||
return jsonResponse;
|
||||
} else {
|
||||
throw new HttpException(response.code(), response.message());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public RecordingProcess createDownload() {
|
||||
return new FfmpegHlsDownload(getSite().getHttpClient());
|
||||
|
@ -140,12 +162,70 @@ public class StreamrayModel extends AbstractModel {
|
|||
|
||||
@Override
|
||||
public boolean follow() throws IOException {
|
||||
return false;
|
||||
JSONObject info = loadModelProfileInfo();
|
||||
String id = info.optString("id");
|
||||
if (StringUtil.isBlank(id)) {
|
||||
log.debug("Can't get model id");
|
||||
return false;
|
||||
}
|
||||
String token = ((StreamrayHttpClient) site.getHttpClient()).getUserToken();
|
||||
if (StringUtil.isBlank(token)) {
|
||||
log.debug("Not logged in");
|
||||
return false;
|
||||
}
|
||||
String url = API_URL + "/favorites/member_favorites/";
|
||||
JSONObject json = new JSONObject().put("model", id);
|
||||
RequestBody requestBody = RequestBody.create(json.toString(), MediaType.parse("application/json"));
|
||||
Request req = new Request.Builder()
|
||||
.url(url)
|
||||
.header(USER_AGENT, Config.getInstance().getSettings().httpUserAgent)
|
||||
.header(ACCEPT, MIMETYPE_APPLICATION_JSON)
|
||||
.header(ACCEPT_LANGUAGE, "en")
|
||||
.header(REFERER, getSite().getBaseUrl() + '/' + getName())
|
||||
.header(ORIGIN, getSite().getBaseUrl())
|
||||
.header(AUTHORIZATION, "Bearer " + token)
|
||||
.post(requestBody)
|
||||
.build();
|
||||
try (Response response = site.getHttpClient().execute(req)) {
|
||||
if (response.isSuccessful()) {
|
||||
return true;
|
||||
} else {
|
||||
throw new HttpException(response.code(), response.message());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean unfollow() throws IOException {
|
||||
return false;
|
||||
JSONObject info = loadModelProfileInfo();
|
||||
String id = info.optString("id");
|
||||
if (StringUtil.isBlank(id)) {
|
||||
log.debug("Can't get model id");
|
||||
return false;
|
||||
}
|
||||
String token = ((StreamrayHttpClient) site.getHttpClient()).getUserToken();
|
||||
if (StringUtil.isBlank(token)) {
|
||||
log.debug("Not logged in");
|
||||
return false;
|
||||
}
|
||||
String url = API_URL + "/favorites/member_favorites/" + id + "/";
|
||||
Request req = new Request.Builder()
|
||||
.url(url)
|
||||
.header(USER_AGENT, Config.getInstance().getSettings().httpUserAgent)
|
||||
.header(ACCEPT, "*/*")
|
||||
.header(ACCEPT_LANGUAGE, "en")
|
||||
.header(REFERER, getSite().getBaseUrl() + '/' + getName())
|
||||
.header(ORIGIN, getSite().getBaseUrl())
|
||||
.header(AUTHORIZATION, "Bearer " + token)
|
||||
.delete()
|
||||
.build();
|
||||
try (Response response = site.getHttpClient().execute(req)) {
|
||||
if (response.isSuccessful()) {
|
||||
return true;
|
||||
} else {
|
||||
throw new HttpException(response.code(), response.message());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in New Issue