From 892aef394287ccee423085cc0a4bd09e5d558808 Mon Sep 17 00:00:00 2001 From: bskjon Date: Sun, 14 Apr 2024 03:39:07 +0200 Subject: [PATCH] Updated --- .../tasks/event/MetadataAndBaseInfoToCoverTask.kt | 4 +++- .../tasks/event/MetadataAndBaseInfoToFileOut.kt | 4 +++- .../shared/common/parsing/FileNameDeterminate.kt | 8 +++++--- .../mediaprocessing/shared/common/parsing/Regexes.kt | 2 ++ .../shared/common/parsing/FileNameDeterminateTest.kt | 11 ++++++++++- .../shared/common/parsing/FileNameParserTest.kt | 2 ++ 6 files changed, 25 insertions(+), 6 deletions(-) rename {apps/coordinator => shared/common}/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameDeterminateTest.kt (64%) diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasks/event/MetadataAndBaseInfoToCoverTask.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasks/event/MetadataAndBaseInfoToCoverTask.kt index 8bf2f047..9d6f803c 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasks/event/MetadataAndBaseInfoToCoverTask.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasks/event/MetadataAndBaseInfoToCoverTask.kt @@ -40,7 +40,9 @@ class MetadataAndBaseInfoToCoverTask(@Autowired override var coordinator: Coordi val baseInfo = events.findLast { it.data is BaseInfoPerformed }?.data as BaseInfoPerformed val meta = events.findLast { it.data is MetadataPerformed }?.data as MetadataPerformed? ?: return null val fileOut = events.findLast { it.data is VideoInfoPerformed }?.data as VideoInfoPerformed? ?: return null + val videoInfo = fileOut.toValueObject() + val coverTitle = videoInfo?.title ?: meta.data?.title ?: baseInfo.title val coverUrl = meta.data?.cover return if (coverUrl.isNullOrBlank()) { log.warn { "No cover available for ${baseInfo.title}" } @@ -49,7 +51,7 @@ class MetadataAndBaseInfoToCoverTask(@Autowired override var coordinator: Coordi CoverInfoPerformed( status = Status.COMPLETED, url = coverUrl, - outFileBaseName = meta.data?.title ?: baseInfo.title, + outFileBaseName = coverTitle, outDir = fileOut.outDirectory, derivedFromEventId = event.eventId ) diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasks/event/MetadataAndBaseInfoToFileOut.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasks/event/MetadataAndBaseInfoToFileOut.kt index dbe7d85b..46e894a8 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasks/event/MetadataAndBaseInfoToFileOut.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasks/event/MetadataAndBaseInfoToFileOut.kt @@ -9,6 +9,7 @@ import no.iktdev.mediaprocessing.shared.common.SharedConfig import no.iktdev.mediaprocessing.shared.common.datasource.toEpochSeconds import no.iktdev.mediaprocessing.shared.common.lastOrSuccessOf import no.iktdev.mediaprocessing.shared.common.parsing.FileNameDeterminate +import no.iktdev.mediaprocessing.shared.common.parsing.Regexes import no.iktdev.mediaprocessing.shared.common.persistance.PersistentMessage import no.iktdev.mediaprocessing.shared.kafka.core.KafkaEnv import no.iktdev.mediaprocessing.shared.kafka.core.KafkaEvents @@ -116,7 +117,8 @@ class MetadataAndBaseInfoToFileOut(@Autowired override var coordinator: Coordina } fun getTitle(): String { - return getAlreadyUsedForCollectionOrTitle()?: metadata?.data?.title ?: baseInfo.title + val title = getAlreadyUsedForCollectionOrTitle()?: metadata?.data?.title ?: baseInfo.title + return Regexes.illegalCharacters.replace(title, "-") } fun getVideoPayload(): JsonObject? { diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameDeterminate.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameDeterminate.kt index cac2faa3..87c5c6cb 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameDeterminate.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameDeterminate.kt @@ -58,7 +58,7 @@ class FileNameDeterminate(val title: String, val sanitizedName: String, val ctyp } } else title val fullName = "${useTitle.trim()} - $seasonEpisodeCombined ${if (episodeTitle.isNullOrEmpty()) "" else "- $episodeTitle"}".trim() - return EpisodeInfo(title = title, episode = episodeNumber.toInt(), season = seasonNumber.toInt(), episodeTitle = episodeTitle, fullName = fullName) + return EpisodeInfo(title = title, episode = episodeNumber.toInt(), season = seasonNumber.toInt(), episodeTitle = episodeTitle, fullName = cleanup(fullName)) } private fun determineUndefinedFileName(): VideoInfo? { @@ -73,8 +73,10 @@ class FileNameDeterminate(val title: String, val sanitizedName: String, val ctyp } private fun cleanup(input: String): String { - val cleaned = Regex("(?<=\\w)[_.](?=\\w)").replace(input, " ") - return Regex("\\s{2,}").replace(cleaned, " ") + var cleaned = Regex("(?<=\\w)[_.](?=\\w)").replace(input, " ") + cleaned = Regexes.illegalCharacters.replace(cleaned, " - ") + cleaned = Regexes.trimWhiteSpaces.replace(cleaned, " ") + return cleaned } open internal class Base(val title: String, val sanitizedName: String) { diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/Regexes.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/Regexes.kt index 2fccae51..69b721e2 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/Regexes.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/Regexes.kt @@ -1,6 +1,8 @@ package no.iktdev.mediaprocessing.shared.common.parsing object Regexes { + val illegalCharacters = Regex("""[\\\\\\/\\:\\*\\?\\\"\\<\\>|!`()\[\]]""") + val trimWhiteSpaces = Regex("\\s{2,}") val seasonAndEpisode = Regex("""(?i)\b(?:S|Season)\s*(\d+).*?(?:E|Episode)?\s*(\d+)\b""", RegexOption.IGNORE_CASE) val season = Regex("""(?i)\b(?:S|Season)\s*-?\s*(\d+)""", RegexOption.IGNORE_CASE) } \ No newline at end of file diff --git a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameDeterminateTest.kt b/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameDeterminateTest.kt similarity index 64% rename from apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameDeterminateTest.kt rename to shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameDeterminateTest.kt index d1ffc00b..07858bfc 100644 --- a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameDeterminateTest.kt +++ b/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameDeterminateTest.kt @@ -1,7 +1,6 @@ package no.iktdev.mediaprocessing.shared.common.parsing import no.iktdev.mediaprocessing.shared.kafka.dto.events_result.EpisodeInfo -import org.assertj.core.api.Assertions import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Assertions.* import org.junit.jupiter.api.Test @@ -21,4 +20,14 @@ class FileNameDeterminateTest { assertThat(ei.episode).isEqualTo(1) } + @Test + fun serieWithTitleFroMMetadata() { + val given = "Fancy Name Test 99: Watashi wa Testo desu ga deta" + + val fnd = FileNameDeterminate(given, "Fancy Name Test 99 - 01", FileNameDeterminate.ContentType.SERIE) + val data = fnd.getDeterminedVideoInfo() + + assertThat(data?.title).isEqualTo(given) + assertThat(data?.fullName).isEqualTo("Fancy Name Test 99 - Watashi wa Testo desu ga deta - S01E01") + } } \ No newline at end of file diff --git a/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameParserTest.kt b/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameParserTest.kt index b20e796a..2eb6c06a 100644 --- a/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameParserTest.kt +++ b/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameParserTest.kt @@ -23,4 +23,6 @@ class FileNameParserTest { assertThat(parser.guessDesiredFileName()).isEqualTo("Fancy Name Test 99 - 01") } + + } \ No newline at end of file