Skip to content

Commit cad68da

Browse files
committed
add more url sources #1123
1 parent 7b2199e commit cad68da

1 file changed

Lines changed: 43 additions & 6 deletions

File tree

src/main/java/de/mediathekview/mserver/crawler/orfon/json/OrfOnEpisodeDeserializer.java

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.Collection;
2323
import java.util.EnumMap;
2424
import java.util.HashSet;
25+
import java.util.List;
2526
import java.util.Map;
2627
import java.util.Optional;
2728
import java.util.Set;
@@ -43,7 +44,6 @@ public class OrfOnEpisodeDeserializer implements JsonDeserializer<OrfOnVideoInfo
4344
private static final String TAG_DESCRIPTION = "description";
4445
private static final String TAG_SHARE_BODY = "share_body";
4546
private static final String TAG_RIGHT = "right";
46-
private static final String TAG_VIDEO_TYPE ="video_type";
4747
private static final String[] TAG_SUBTITLE = {"_links", "subtitle", "href"};
4848
private static final String[] TAG_VIDEO_PATH_1 = {"_embedded","segments"};
4949
private static final String[] TAG_VIDEO_PATH_2 = {"_embedded", "playlist", "sources"};
@@ -97,11 +97,14 @@ private Optional<Map<Resolution, FilmUrl>> optimizeUrls(Optional<Map<Resolution,
9797
if (urls.isPresent() && urls.get().size() == 1) {
9898
final Map<Resolution, FilmUrl> urlMap = urls.get();
9999
final FilmUrl url = urlMap.get(Resolution.NORMAL);
100-
final String urlToOptimize = url.getUrl().toString();
100+
String urlToOptimize = url.getUrl().toString();
101+
for (String s : List.of("QXA","QXB")) {
102+
urlToOptimize = urlToOptimize.replace(s, "#Q#");
103+
}
101104
try {
102-
urlMap.put(Resolution.SMALL, new FilmUrl(urlToOptimize.replace("QXA", "Q4A"), 0L));
103-
urlMap.put(Resolution.NORMAL, new FilmUrl(urlToOptimize.replace("QXA", "Q6A"), 0L));
104-
urlMap.put(Resolution.HD, new FilmUrl(urlToOptimize.replace("QXA", "Q8C"), 0L));
105+
urlMap.put(Resolution.SMALL, new FilmUrl(urlToOptimize.replace("#Q#", "Q4A"), 0L));
106+
urlMap.put(Resolution.NORMAL, new FilmUrl(urlToOptimize.replace("#Q#", "Q6A"), 0L));
107+
urlMap.put(Resolution.HD, new FilmUrl(urlToOptimize.replace("#Q#", "Q8C"), 0L));
105108
} catch (MalformedURLException e) {}
106109
}
107110
return urls;
@@ -215,7 +218,15 @@ private Optional<Map<Resolution, FilmUrl>> parseVideoFromSources(JsonElement roo
215218
}
216219
}
217220
}
218-
return parseVideoFromThumbnail(root);
221+
Optional<Map<Resolution, FilmUrl>> fallbackThumbnail = parseVideoFromThumbnail(root);
222+
if (fallbackThumbnail.isPresent()) {
223+
return fallbackThumbnail;
224+
}
225+
Optional<Map<Resolution, FilmUrl>> fallbackGapless = parseVideoFromGapless(root);
226+
if (fallbackGapless.isPresent()) {
227+
return fallbackGapless;
228+
}
229+
return Optional.empty();
219230
}
220231

221232

@@ -248,6 +259,32 @@ private Optional<Map<Resolution, FilmUrl>> parseVideoFromThumbnail(JsonElement r
248259
return Optional.of(urls);
249260
}
250261

262+
private Optional<Map<Resolution, FilmUrl>> parseVideoFromGapless(JsonElement root) {
263+
Map<Resolution, FilmUrl> urls = new EnumMap<>(Resolution.class);
264+
try {
265+
Optional<JsonElement> gaplessSourceAT = JsonUtils.getElement(root, "gapless_sources_austria", "hls");
266+
if (gaplessSourceAT.isPresent()) {
267+
gaplessSourceAT.get().getAsJsonArray().forEach( e -> {
268+
Optional<String> url = JsonUtils.getElementValueAsString(e, "src");
269+
Optional<String> drm = JsonUtils.getElementValueAsString(e, "is_drm_protected");
270+
try {
271+
if (url.isPresent() && drm.orElse("").equalsIgnoreCase("false")) {
272+
urls.put(Resolution.NORMAL, new FilmUrl(url.get(), 0L));
273+
}
274+
} catch (MalformedURLException err) {
275+
LOG.error("Malformed video url {} {}", url, err);
276+
}
277+
});
278+
}
279+
} catch (Exception e) {
280+
LOG.error("generateFallbackVideo {}", e);
281+
}
282+
if (urls.size() == 0) {
283+
return Optional.empty();
284+
}
285+
return Optional.of(urls);
286+
}
287+
251288
private Optional<Map<Resolution, FilmUrl>> readVideoForTargetCodec(JsonElement urlArray, String targetCodec) {
252289
Map<Resolution, FilmUrl> urls = new EnumMap<>(Resolution.class);
253290
for (JsonElement videoElement : urlArray.getAsJsonArray()) {

0 commit comments

Comments
 (0)