2018-12-23 19:41:18 +01:00
|
|
|
package org.schabi.newpipe.extractor.services.media_ccc.linkHandler;
|
|
|
|
|
|
|
|
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
|
|
|
import org.schabi.newpipe.extractor.linkhandler.LinkHandlerFactory;
|
2020-12-27 13:25:48 +01:00
|
|
|
import org.schabi.newpipe.extractor.services.media_ccc.extractors.MediaCCCParsingHelper;
|
2020-04-11 16:57:31 +02:00
|
|
|
import org.schabi.newpipe.extractor.utils.Parser;
|
2018-12-23 19:41:18 +01:00
|
|
|
|
2023-06-29 19:08:34 +02:00
|
|
|
public final class MediaCCCStreamLinkHandlerFactory extends LinkHandlerFactory {
|
|
|
|
|
|
|
|
private static final MediaCCCStreamLinkHandlerFactory INSTANCE =
|
|
|
|
new MediaCCCStreamLinkHandlerFactory();
|
|
|
|
|
2020-04-09 20:25:22 +02:00
|
|
|
public static final String VIDEO_API_ENDPOINT = "https://api.media.ccc.de/public/events/";
|
|
|
|
private static final String VIDEO_PATH = "https://media.ccc.de/v/";
|
2022-03-18 09:41:05 +01:00
|
|
|
private static final String RECORDING_ID_PATTERN
|
|
|
|
= "(?:(?:(?:api\\.)?media\\.ccc\\.de/public/events/)"
|
|
|
|
+ "|(?:media\\.ccc\\.de/v/))([^/?&#]*)";
|
2020-12-27 13:25:48 +01:00
|
|
|
private static final String LIVE_STREAM_PATH = "https://streaming.media.ccc.de/";
|
2022-03-18 09:41:05 +01:00
|
|
|
private static final String LIVE_STREAM_ID_PATTERN
|
|
|
|
= "streaming\\.media\\.ccc\\.de\\/(\\w+\\/\\w+)";
|
2020-04-09 20:25:22 +02:00
|
|
|
|
2023-06-29 19:08:34 +02:00
|
|
|
private MediaCCCStreamLinkHandlerFactory() {
|
|
|
|
}
|
|
|
|
|
|
|
|
public static MediaCCCStreamLinkHandlerFactory getInstance() {
|
|
|
|
return INSTANCE;
|
|
|
|
}
|
|
|
|
|
2018-12-23 19:41:18 +01:00
|
|
|
@Override
|
2023-06-29 19:08:34 +02:00
|
|
|
public String getId(final String url) throws ParsingException, UnsupportedOperationException {
|
2020-12-27 13:25:48 +01:00
|
|
|
String streamId = null;
|
|
|
|
try {
|
|
|
|
streamId = Parser.matchGroup1(LIVE_STREAM_ID_PATTERN, url);
|
2022-03-18 09:41:05 +01:00
|
|
|
} catch (final Parser.RegexException ignored) {
|
2020-12-27 13:25:48 +01:00
|
|
|
}
|
2022-03-18 09:41:05 +01:00
|
|
|
|
2020-12-27 13:25:48 +01:00
|
|
|
if (streamId == null) {
|
|
|
|
return Parser.matchGroup1(RECORDING_ID_PATTERN, url);
|
|
|
|
}
|
|
|
|
return streamId;
|
2018-12-23 19:41:18 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2023-06-29 19:08:34 +02:00
|
|
|
public String getUrl(final String id) throws ParsingException, UnsupportedOperationException {
|
2020-12-27 13:25:48 +01:00
|
|
|
if (MediaCCCParsingHelper.isLiveStreamId(id)) {
|
|
|
|
return LIVE_STREAM_PATH + id;
|
|
|
|
}
|
2020-04-09 20:25:22 +02:00
|
|
|
return VIDEO_PATH + id;
|
2018-12-23 19:41:18 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2020-04-01 11:40:03 +02:00
|
|
|
public boolean onAcceptUrl(final String url) {
|
2020-02-12 00:25:34 +01:00
|
|
|
try {
|
2020-04-11 16:57:31 +02:00
|
|
|
return getId(url) != null;
|
2022-03-18 09:41:05 +01:00
|
|
|
} catch (final ParsingException e) {
|
2020-02-12 00:25:34 +01:00
|
|
|
return false;
|
|
|
|
}
|
2018-12-23 19:41:18 +01:00
|
|
|
}
|
|
|
|
}
|