From fa64611c29f4b96e0414faf1bda9ee793227698f Mon Sep 17 00:00:00 2001 From: CodingPF Date: Sat, 14 Feb 2026 18:06:51 +0100 Subject: [PATCH] another source for urls --- .../orfon/json/OrfOnEpisodeDeserializer.java | 44 ++++++++++++++++--- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/src/main/java/mServer/crawler/sender/orfon/json/OrfOnEpisodeDeserializer.java b/src/main/java/mServer/crawler/sender/orfon/json/OrfOnEpisodeDeserializer.java index d33ee3209..8d7af82ee 100644 --- a/src/main/java/mServer/crawler/sender/orfon/json/OrfOnEpisodeDeserializer.java +++ b/src/main/java/mServer/crawler/sender/orfon/json/OrfOnEpisodeDeserializer.java @@ -103,13 +103,17 @@ public OrfOnVideoInfoDTO deserialize( private Optional> optimizeUrls(Optional> urls) { if (urls.isPresent() && urls.get().size() == 1) { final Map urlMap = urls.get(); - final String urlToOptimize = urlMap.get(Qualities.NORMAL); - urlMap.put(Qualities.SMALL, urlToOptimize.replace("QXA", "Q4A")); - urlMap.put(Qualities.NORMAL, urlToOptimize.replace("QXA", "Q6A")); - urlMap.put(Qualities.HD, urlToOptimize.replace("QXA", "Q8C")); + String urlToOptimize = urlMap.get(Qualities.NORMAL); + for (String s : List.of("QXA","QXB")) { + urlToOptimize = urlToOptimize.replace(s, "#Q#"); + } + urlMap.put(Qualities.SMALL, urlToOptimize.replace("#Q#", "Q4A")); + urlMap.put(Qualities.NORMAL, urlToOptimize.replace("#Q#", "Q6A")); + urlMap.put(Qualities.HD, urlToOptimize.replace("#Q#", "Q8C")); } return urls; } + private Optional buildOrResolveSubs(JsonElement jsonElement) { Optional subtitleSource = JsonUtils.getElementValueAsString(jsonElement, TAG_SUBTITLE); @@ -185,7 +189,15 @@ private Optional> parseVideoFromSources(JsonElement root) } } } - return parseVideoFromThumbnail(root); + Optional> fallbackThumbnail = parseVideoFromThumbnail(root); + if (fallbackThumbnail.isPresent()) { + return fallbackThumbnail; + } + Optional> fallbackGapless = parseVideoFromGapless(root); + if (fallbackGapless.isPresent()) { + return fallbackGapless; + } + return Optional.empty(); } private Optional> parseVideoFromThumbnail(JsonElement root) { @@ -212,6 +224,28 @@ private Optional> parseVideoFromThumbnail(JsonElement roo return Optional.of(urls); } + private Optional> parseVideoFromGapless(JsonElement root) { + Map urls = new EnumMap<>(Qualities.class); + try { + Optional gaplessSourceAT = JsonUtils.getElement(root, "gapless_sources_austria", "hls"); + if (gaplessSourceAT.isPresent()) { + gaplessSourceAT.get().getAsJsonArray().forEach( e -> { + Optional url = JsonUtils.getElementValueAsString(e, "src"); + Optional drm = JsonUtils.getElementValueAsString(e, "is_drm_protected"); + if (url.isPresent() && drm.orElse("").equalsIgnoreCase("false")) { + urls.put(Qualities.NORMAL, url.get()); + } + }); + } + } catch (Exception e) { + LOG.error("generateFallbackVideo {}", e); + } + if (urls.size() == 0) { + return Optional.empty(); + } + return Optional.of(urls); + } + private Optional> readVideoForTargetCodec(JsonElement urlArray, String targetCodec) { Map urls = new EnumMap<>(Qualities.class); for (JsonElement videoElement : urlArray.getAsJsonArray()) {