forked from j62/ctbrec
1
0
Fork 0

Fix Cam4 stackvaults streams

This commit is contained in:
0xb00bface 2022-08-13 18:32:29 +02:00
parent 4e5287c177
commit dd67df7445
1 changed files with 39 additions and 67 deletions

View File

@ -1,40 +1,13 @@
package ctbrec.sites.cam4; package ctbrec.sites.cam4;
import static ctbrec.Model.State.*; import com.iheartradio.m3u8.*;
import static ctbrec.io.HttpClient.*;
import static ctbrec.io.HttpConstants.*;
import static java.util.regex.Pattern.*;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.iheartradio.m3u8.Encoding;
import com.iheartradio.m3u8.Format;
import com.iheartradio.m3u8.ParseException;
import com.iheartradio.m3u8.ParsingMode;
import com.iheartradio.m3u8.PlaylistException;
import com.iheartradio.m3u8.PlaylistParser;
import com.iheartradio.m3u8.data.MasterPlaylist; import com.iheartradio.m3u8.data.MasterPlaylist;
import com.iheartradio.m3u8.data.Playlist; import com.iheartradio.m3u8.data.Playlist;
import com.iheartradio.m3u8.data.PlaylistData; import com.iheartradio.m3u8.data.PlaylistData;
import com.iheartradio.m3u8.data.StreamInfo; import com.iheartradio.m3u8.data.StreamInfo;
import ctbrec.AbstractModel; import ctbrec.AbstractModel;
import ctbrec.Config; import ctbrec.Config;
import ctbrec.NotImplementedExcetion;
import ctbrec.StringUtil; import ctbrec.StringUtil;
import ctbrec.io.HttpException; import ctbrec.io.HttpException;
import ctbrec.recorder.download.HttpHeaderFactory; import ctbrec.recorder.download.HttpHeaderFactory;
@ -42,6 +15,22 @@ import ctbrec.recorder.download.HttpHeaderFactoryImpl;
import ctbrec.recorder.download.StreamSource; import ctbrec.recorder.download.StreamSource;
import okhttp3.Request; import okhttp3.Request;
import okhttp3.Response; import okhttp3.Response;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.concurrent.ExecutionException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static ctbrec.Model.State.*;
import static ctbrec.io.HttpClient.bodyToJsonObject;
import static ctbrec.io.HttpConstants.*;
import static java.util.regex.Pattern.DOTALL;
import static java.util.regex.Pattern.MULTILINE;
public class Cam4Model extends AbstractModel { public class Cam4Model extends AbstractModel {
@ -74,32 +63,17 @@ public class Cam4Model extends AbstractModel {
public void setOnlineStateByShowType(String showType) { public void setOnlineStateByShowType(String showType) {
switch (showType) { switch (showType) {
case "NORMAL": case "NORMAL", "ACCEPTING", "GROUP_SHOW_SELLING_TICKETS", "GS_SELLING_TICKETS", "GS_SELLING_TICKETS_UNSUCCESSFUL", "GS_GOAL_REACHED" ->
case "ACCEPTING":
case "GROUP_SHOW_SELLING_TICKETS":
case "GS_SELLING_TICKETS":
case "GS_SELLING_TICKETS_UNSUCCESSFUL":
case "GS_GOAL_REACHED":
onlineState = ONLINE; onlineState = ONLINE;
break; case "PRIVATE_SHOW", "INSIDE_PS" -> onlineState = PRIVATE;
case "PRIVATE_SHOW": case "INSIDE_GS", "GROUP_SHOW" -> onlineState = GROUP;
case "INSIDE_PS": case "PAUSED" -> onlineState = AWAY;
onlineState = PRIVATE; case "OFFLINE" -> onlineState = OFFLINE;
break; default -> {
case "INSIDE_GS":
case "GROUP_SHOW":
onlineState = GROUP;
break;
case "PAUSED":
onlineState = AWAY;
break;
case "OFFLINE":
onlineState = OFFLINE;
break;
default:
LOG.debug("############################## Unknown show type [{} {}]", this, showType); LOG.debug("############################## Unknown show type [{} {}]", this, showType);
onlineState = UNKNOWN; onlineState = UNKNOWN;
} }
}
} }
@ -131,7 +105,7 @@ public class Cam4Model extends AbstractModel {
} }
private void getPlaylistUrlFromStreamUrl() throws IOException { private void getPlaylistUrlFromStreamUrl() throws IOException {
String url = getSite().getBaseUrl() + "/_profile/streamURL?username=" + getName(); String url = getSite().getBaseUrl() + "/rest/v1.0/profile/" + getName() + "/streamInfo";
LOG.trace("Getting playlist url from {}", url); LOG.trace("Getting playlist url from {}", url);
Request req = new Request.Builder() // @formatter:off Request req = new Request.Builder() // @formatter:off
.url(url) .url(url)
@ -228,7 +202,7 @@ public class Cam4Model extends AbstractModel {
@Override @Override
public void receiveTip(Double tokens) throws IOException { public void receiveTip(Double tokens) throws IOException {
throw new RuntimeException("Not implemented for Cam4, yet"); throw new NotImplementedExcetion("Tipping is not implemented for Cam4, yet");
} }
@Override @Override
@ -253,10 +227,8 @@ public class Cam4Model extends AbstractModel {
LOG.warn("Couldn't determine stream resolution for {} - {}", getName(), e.getMessage()); LOG.warn("Couldn't determine stream resolution for {} - {}", getName(), e.getMessage());
resolution = new int[2]; resolution = new int[2];
} }
return resolution;
} else {
return resolution;
} }
return resolution;
} }
@Override @Override