Skip to content

Commit 3982a3f

Browse files
committed
Merge branch 'bugfix/ard1047' into hotfix/3.1.259
2 parents be49f30 + 02b4cc9 commit 3982a3f

1 file changed

Lines changed: 70 additions & 63 deletions

File tree

src/main/java/mServer/crawler/sender/ard/json/ArdFilmDeserializer.java

Lines changed: 70 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ private static Optional<String> parseTopic(final JsonObject playerPageObject) {
146146
private Optional<String> parseTitle(final JsonObject playerPageObject) {
147147
Optional<String> title = JsonUtils.getAttributeAsString(playerPageObject, ATTRIBUTE_TITLE);
148148
if (title.isPresent()) {
149-
String[] replaceWords = {" - Hörfassung", " (mit Gebärdensprache)", " mit Gebärdensprache"," (mit Audiodeskription)", "Audiodeskription"};
149+
String[] replaceWords = {" - Hörfassung", " (mit Gebärdensprache)", " mit Gebärdensprache"," (mit Audiodeskription)", "Audiodeskription", " - (Originalversion)", " (OV)"};
150150
String cleanTitle = title.get().trim();
151151
for (String replaceWord : replaceWords) {
152152
cleanTitle = cleanTitle.replace(replaceWord, "");
@@ -224,79 +224,43 @@ public List<ArdFilmDto> deserialize(
224224

225225
final Optional<String> topic = parseTopic(itemObject);
226226
final Optional<String> title = parseTitle(itemObject);
227-
final Optional<String> description
228-
= JsonUtils.getAttributeAsString(itemObject, ATTRIBUTE_SYNOPSIS);
227+
final Optional<String> titleoriginal = JsonUtils.getAttributeAsString(itemObject, ATTRIBUTE_TITLE);
228+
final Optional<String> description = JsonUtils.getAttributeAsString(itemObject, ATTRIBUTE_SYNOPSIS);
229229
final Optional<LocalDateTime> date = parseDate(itemObject);
230230
final Optional<Duration> duration = parseDuration(itemObject);
231231
final Optional<String> partner = parsePartner(itemObject);
232-
final Optional<Map<Qualities, String>> videoInfoStandard = parseVideoUrls(itemObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_STANDARD, MARKER_VIDEO_MP4, MARKER_VIDEO_DE);
233-
final Optional<Map<Qualities, String>> videoInfoAdaptive = parseVideoUrls(itemObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_STANDARD, MARKER_VIDEO_CATEGORY_MPEG, MARKER_VIDEO_DE);
234-
final Optional<Map<Qualities, String>> videoInfoAD = parseVideoUrls(itemObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_AD, MARKER_VIDEO_MP4, MARKER_VIDEO_DE);
235-
final Optional<Map<Qualities, String>> videoInfoDGS = parseVideoUrls(itemObject, MARKER_VIDEO_DGS, MARKER_VIDEO_STANDARD, MARKER_VIDEO_MP4, MARKER_VIDEO_DE);
236-
final Optional<Map<Qualities, String>> videoInfoOV = parseVideoUrls(itemObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_STANDARD, MARKER_VIDEO_MP4, MARKER_VIDEO_OV);
237-
final Optional<String> subtitles = prepareSubtitleUrl(itemObject);
232+
Optional<Map<Qualities, String>> videoInfoStandard = parseVideoUrls(itemObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_STANDARD, MARKER_VIDEO_MP4, MARKER_VIDEO_DE);
233+
Optional<Map<Qualities, String>> videoInfoAdaptive = parseVideoUrls(itemObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_STANDARD, MARKER_VIDEO_CATEGORY_MPEG, MARKER_VIDEO_DE);
234+
Optional<Map<Qualities, String>> videoInfoAD = parseVideoUrls(itemObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_AD, MARKER_VIDEO_MP4, MARKER_VIDEO_DE);
235+
Optional<Map<Qualities, String>> videoInfoDGS = parseVideoUrls(itemObject, MARKER_VIDEO_DGS, MARKER_VIDEO_STANDARD, MARKER_VIDEO_MP4, MARKER_VIDEO_DE);
236+
Optional<Map<Qualities, String>> videoInfoOV = parseVideoUrls(itemObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_STANDARD, MARKER_VIDEO_MP4, MARKER_VIDEO_OV);
237+
Optional<String> subtitles = prepareSubtitleUrl(itemObject);
238238

239239
if (topic.isEmpty() || title.isEmpty() || partner.isEmpty() || ADDITIONAL_SENDER.get(partner.get()) == null) {
240240
if (partner.isPresent() && ADDITIONAL_SENDER.get(partner.get()) == null) {
241241
LOG.warn("Missing Partner " + partner.get());
242242
}
243243
return films;
244244
}
245-
246-
247-
248-
if ((title.get().toUpperCase().contains("(OV)") || title.get().toUpperCase().contains("(ORIGINALVERSION)")) && videoInfoOV.isPresent()) {
249-
final ArdFilmDto filmDto
250-
= new ArdFilmDto(
251-
createFilm(
252-
ADDITIONAL_SENDER.get(partner.get()),
253-
topic.get(),
254-
title.get(),
255-
description,
256-
date,
257-
duration,
258-
videoInfoOV.get(),
259-
subtitles));
260-
films.add(filmDto);
261-
return films;
245+
// mainly funk
246+
if (videoInfoStandard.isEmpty() && videoInfoAD.isEmpty() && videoInfoDGS.isEmpty() && videoInfoOV.isEmpty() && videoInfoAdaptive.isPresent()) {
247+
videoInfoStandard = resolveFallbackFromPlaylist(videoInfoAdaptive);
262248
}
263-
264-
if(videoInfoStandard.isEmpty() && videoInfoAD.isEmpty() && videoInfoDGS.isEmpty() && videoInfoAdaptive.isPresent()) {
265-
// UUAAAARRGGGG - SAD
266-
Map<Qualities, URL> qualitiesUrls = videoInfoAdaptive.get().entrySet().stream()
267-
.collect(Collectors.toMap(Map.Entry::getKey, entry -> {
268-
try {
269-
return new URL(entry.getValue());
270-
} catch (MalformedURLException e) {
271-
LOG.error("failed converting string {} to url", entry.getValue(), e);
272-
return null;
273-
}
274-
}));
275-
if (!qualitiesUrls.containsKey(Qualities.NORMAL)) {
276-
qualitiesUrls.put(Qualities.NORMAL, qualitiesUrls.entrySet().stream().findFirst().get().getValue());
277-
}
278-
//
279-
ArdVideoInfoJsonDeserializer.loadM3U8(qualitiesUrls);
280-
//
281-
Map<Qualities, String> fallback = qualitiesUrls.entrySet().stream()
282-
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().toString()));
283-
284-
if (fallback.size() > 0) {
285-
final ArdFilmDto filmDto
286-
= new ArdFilmDto(
287-
createFilm(
288-
ADDITIONAL_SENDER.get(partner.get()),
289-
topic.get(),
290-
title.get(),
291-
description,
292-
date,
293-
duration,
294-
fallback,
295-
subtitles));
296-
films.add(filmDto);
297-
}
249+
// incorrect langueage code for OV
250+
if ((titleoriginal.get().contains(" - (Originalversion)") || titleoriginal.get().contains(" (OV)")) && videoInfoOV.isEmpty()) {
251+
videoInfoOV = parseVideoUrls(itemObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_STANDARD, MARKER_VIDEO_MP4, "*");
298252
}
299-
253+
// mainly tagesschau
254+
if ((titleoriginal.get().contains(" (mit Gebärdensprache)") || titleoriginal.get().contains(" mit Gebärdensprache")) && videoInfoStandard.isPresent() && videoInfoDGS.isEmpty()) {
255+
videoInfoDGS = videoInfoStandard;
256+
videoInfoStandard = Optional.empty();
257+
}
258+
// in aller freundschaft
259+
if ((titleoriginal.get().contains("- Hörfassung") || titleoriginal.get().contains("(mit Audiodeskription)")) && videoInfoStandard.isPresent() && videoInfoAD.isEmpty()) {
260+
videoInfoAD = videoInfoStandard;
261+
videoInfoStandard = Optional.empty();
262+
}
263+
//
300264
if (videoInfoStandard.isPresent() && videoInfoStandard.get().size() > 0) {
301265
// add film standard
302266
final ArdFilmDto filmDto
@@ -316,6 +280,22 @@ public List<ArdFilmDto> deserialize(
316280
films.add(filmDto);
317281
}
318282
//
283+
if (videoInfoOV.isPresent() && videoInfoOV.get().size() > 0) {
284+
Map<Qualities, String> vid = videoInfoOV.get();
285+
final ArdFilmDto filmDto
286+
= new ArdFilmDto(
287+
createFilm(
288+
ADDITIONAL_SENDER.get(partner.get()),
289+
topic.get(),
290+
title.get() + " (Originalversion)",
291+
description,
292+
date,
293+
duration,
294+
vid,
295+
subtitles));
296+
films.add(filmDto);
297+
}
298+
//
319299
if (videoInfoAD.isPresent() && videoInfoAD.get().size() > 0) {
320300
// add film ad
321301
final ArdFilmDto filmDto
@@ -473,7 +453,8 @@ private Optional<Map<Integer, String>> parseVideoUrlMap(final JsonObject playerP
473453
Optional<String> resh = JsonUtils.getElementValueAsString(video, ATTRIBUTE_RESOLUTION_H);
474454
Optional<String> url = JsonUtils.getElementValueAsString(video, ATTRIBUTE_URL);
475455
Optional<String> languageCode = JsonUtils.getElementValueAsString(audios.get().getAsJsonArray().get(0), ATTRIBUTE_ADUIO_LANG);
476-
if (url.isPresent() && resh.isPresent() && kind.isPresent() && kind.get().equalsIgnoreCase(aduioType) && languageCode.orElse("").equalsIgnoreCase(language)) {
456+
if (url.isPresent() && resh.isPresent() && kind.isPresent() && kind.get().equalsIgnoreCase(aduioType) &&
457+
(languageCode.orElse("").equalsIgnoreCase(language) || (language.equalsIgnoreCase("*") && !languageCode.orElse("").equalsIgnoreCase("deu")))) {
477458
videoInfo.put(Integer.parseInt(resh.get()), UrlUtils.removeParameters(url.get()));
478459
}
479460
}
@@ -486,4 +467,30 @@ private Optional<Map<Integer, String>> parseVideoUrlMap(final JsonObject playerP
486467
}
487468
return Optional.of(videoInfo);
488469
}
470+
471+
private Optional<Map<Qualities, String>> resolveFallbackFromPlaylist(Optional<Map<Qualities, String>> videoInfoAdaptive) {
472+
Map<Qualities, URL> qualitiesUrls = videoInfoAdaptive.get().entrySet().stream()
473+
.collect(Collectors.toMap(Map.Entry::getKey, entry -> {
474+
try {
475+
return new URL(entry.getValue());
476+
} catch (MalformedURLException e) {
477+
LOG.error("failed converting string {} to url", entry.getValue(), e);
478+
return null;
479+
}
480+
}));
481+
if (!qualitiesUrls.containsKey(Qualities.NORMAL)) {
482+
qualitiesUrls.put(Qualities.NORMAL, qualitiesUrls.entrySet().stream().findFirst().get().getValue());
483+
}
484+
//
485+
ArdVideoInfoJsonDeserializer.loadM3U8(qualitiesUrls);
486+
//
487+
Map<Qualities, String> fallback = qualitiesUrls.entrySet().stream()
488+
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().toString()));
489+
//
490+
if (!fallback.containsKey(Qualities.NORMAL) && !fallback.isEmpty()) {
491+
fallback.put(Qualities.NORMAL, fallback.entrySet().stream().findFirst().get().getValue());
492+
}
493+
494+
return Optional.of(fallback);
495+
}
489496
}

0 commit comments

Comments
 (0)