This commit is contained in:
bskjon 2024-04-14 03:39:07 +02:00
parent 22c0c0335c
commit 892aef3942
6 changed files with 25 additions and 6 deletions

View File

@ -40,7 +40,9 @@ class MetadataAndBaseInfoToCoverTask(@Autowired override var coordinator: Coordi
val baseInfo = events.findLast { it.data is BaseInfoPerformed }?.data as BaseInfoPerformed 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 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 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 val coverUrl = meta.data?.cover
return if (coverUrl.isNullOrBlank()) { return if (coverUrl.isNullOrBlank()) {
log.warn { "No cover available for ${baseInfo.title}" } log.warn { "No cover available for ${baseInfo.title}" }
@ -49,7 +51,7 @@ class MetadataAndBaseInfoToCoverTask(@Autowired override var coordinator: Coordi
CoverInfoPerformed( CoverInfoPerformed(
status = Status.COMPLETED, status = Status.COMPLETED,
url = coverUrl, url = coverUrl,
outFileBaseName = meta.data?.title ?: baseInfo.title, outFileBaseName = coverTitle,
outDir = fileOut.outDirectory, outDir = fileOut.outDirectory,
derivedFromEventId = event.eventId derivedFromEventId = event.eventId
) )

View File

@ -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.datasource.toEpochSeconds
import no.iktdev.mediaprocessing.shared.common.lastOrSuccessOf import no.iktdev.mediaprocessing.shared.common.lastOrSuccessOf
import no.iktdev.mediaprocessing.shared.common.parsing.FileNameDeterminate 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.common.persistance.PersistentMessage
import no.iktdev.mediaprocessing.shared.kafka.core.KafkaEnv import no.iktdev.mediaprocessing.shared.kafka.core.KafkaEnv
import no.iktdev.mediaprocessing.shared.kafka.core.KafkaEvents import no.iktdev.mediaprocessing.shared.kafka.core.KafkaEvents
@ -116,7 +117,8 @@ class MetadataAndBaseInfoToFileOut(@Autowired override var coordinator: Coordina
} }
fun getTitle(): String { 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? { fun getVideoPayload(): JsonObject? {

View File

@ -58,7 +58,7 @@ class FileNameDeterminate(val title: String, val sanitizedName: String, val ctyp
} }
} else title } else title
val fullName = "${useTitle.trim()} - $seasonEpisodeCombined ${if (episodeTitle.isNullOrEmpty()) "" else "- $episodeTitle"}".trim() 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? { private fun determineUndefinedFileName(): VideoInfo? {
@ -73,8 +73,10 @@ class FileNameDeterminate(val title: String, val sanitizedName: String, val ctyp
} }
private fun cleanup(input: String): String { private fun cleanup(input: String): String {
val cleaned = Regex("(?<=\\w)[_.](?=\\w)").replace(input, " ") var cleaned = Regex("(?<=\\w)[_.](?=\\w)").replace(input, " ")
return Regex("\\s{2,}").replace(cleaned, " ") cleaned = Regexes.illegalCharacters.replace(cleaned, " - ")
cleaned = Regexes.trimWhiteSpaces.replace(cleaned, " ")
return cleaned
} }
open internal class Base(val title: String, val sanitizedName: String) { open internal class Base(val title: String, val sanitizedName: String) {

View File

@ -1,6 +1,8 @@
package no.iktdev.mediaprocessing.shared.common.parsing package no.iktdev.mediaprocessing.shared.common.parsing
object Regexes { 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 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) val season = Regex("""(?i)\b(?:S|Season)\s*-?\s*(\d+)""", RegexOption.IGNORE_CASE)
} }

View File

@ -1,7 +1,6 @@
package no.iktdev.mediaprocessing.shared.common.parsing package no.iktdev.mediaprocessing.shared.common.parsing
import no.iktdev.mediaprocessing.shared.kafka.dto.events_result.EpisodeInfo 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.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Assertions.* import org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
@ -21,4 +20,14 @@ class FileNameDeterminateTest {
assertThat(ei.episode).isEqualTo(1) 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")
}
} }

View File

@ -23,4 +23,6 @@ class FileNameParserTest {
assertThat(parser.guessDesiredFileName()).isEqualTo("Fancy Name Test 99 - 01") assertThat(parser.guessDesiredFileName()).isEqualTo("Fancy Name Test 99 - 01")
} }
} }