This commit is contained in:
bskjon 2024-04-14 20:17:14 +02:00
parent cf35aa6ea7
commit fbb710b8f8
6 changed files with 27 additions and 7 deletions

View File

@ -3,6 +3,7 @@ package no.iktdev.mediaprocessing.coordinator.tasks.event
import mu.KotlinLogging import mu.KotlinLogging
import no.iktdev.mediaprocessing.coordinator.Coordinator import no.iktdev.mediaprocessing.coordinator.Coordinator
import no.iktdev.mediaprocessing.coordinator.TaskCreator import no.iktdev.mediaprocessing.coordinator.TaskCreator
import no.iktdev.mediaprocessing.shared.common.parsing.NameHelper
import no.iktdev.mediaprocessing.shared.common.persistance.PersistentMessage import no.iktdev.mediaprocessing.shared.common.persistance.PersistentMessage
import no.iktdev.mediaprocessing.shared.kafka.core.KafkaEvents import no.iktdev.mediaprocessing.shared.kafka.core.KafkaEvents
import no.iktdev.mediaprocessing.shared.kafka.dto.MessageDataWrapper import no.iktdev.mediaprocessing.shared.kafka.dto.MessageDataWrapper
@ -51,7 +52,7 @@ class MetadataAndBaseInfoToCoverTask(@Autowired override var coordinator: Coordi
CoverInfoPerformed( CoverInfoPerformed(
status = Status.COMPLETED, status = Status.COMPLETED,
url = coverUrl, url = coverUrl,
outFileBaseName = coverTitle, outFileBaseName = NameHelper.normalize(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.NameHelper
import no.iktdev.mediaprocessing.shared.common.parsing.Regexes 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
@ -134,7 +135,7 @@ class MetadataAndBaseInfoToFileOut(@Autowired override var coordinator: Coordina
} }
} }
fun getOutputDirectory() = SharedConfig.outgoingContent.using(getTitle()) fun getOutputDirectory() = SharedConfig.outgoingContent.using(NameHelper.normalize(getTitle()))

View File

@ -39,6 +39,8 @@ dependencies {
implementation("org.jetbrains.exposed:exposed-jdbc:$exposedVersion") implementation("org.jetbrains.exposed:exposed-jdbc:$exposedVersion")
implementation("org.jetbrains.exposed:exposed-java-time:$exposedVersion") implementation("org.jetbrains.exposed:exposed-java-time:$exposedVersion")
implementation ("mysql:mysql-connector-java:8.0.29") implementation ("mysql:mysql-connector-java:8.0.29")
implementation("org.apache.commons:commons-lang3:3.12.0")
implementation(project(mapOf("path" to ":shared:kafka"))) implementation(project(mapOf("path" to ":shared:kafka")))
implementation(project(mapOf("path" to ":shared:contract"))) implementation(project(mapOf("path" to ":shared:contract")))

View File

@ -76,7 +76,7 @@ class FileNameDeterminate(val title: String, val sanitizedName: String, val ctyp
var cleaned = Regex("(?<=\\w)[_.](?=\\w)").replace(input, " ") var cleaned = Regex("(?<=\\w)[_.](?=\\w)").replace(input, " ")
cleaned = Regexes.illegalCharacters.replace(cleaned, " - ") cleaned = Regexes.illegalCharacters.replace(cleaned, " - ")
cleaned = Regexes.trimWhiteSpaces.replace(cleaned, " ") cleaned = Regexes.trimWhiteSpaces.replace(cleaned, " ")
return cleaned return NameHelper.normalize(cleaned)
} }
open internal class Base(val title: String, val sanitizedName: String) { open internal class Base(val title: String, val sanitizedName: String) {
@ -130,8 +130,7 @@ class FileNameDeterminate(val title: String, val sanitizedName: String, val ctyp
* Cool - S1 13 * Cool - S1 13
*/ */
fun findSeasonAndEpisode(inputText: String): Pair<String?, String?> { fun findSeasonAndEpisode(inputText: String): Pair<String?, String?> {
val regex = Regex("""(?i)\b(?:S|Season)\s*(\d+).*?(?:E|Episode)?\s*(\d+)\b""") val matchResult = Regexes.SeasonEpisodeBlock.find(inputText)
val matchResult = regex.find(inputText)
val season = matchResult?.groups?.get(1)?.value val season = matchResult?.groups?.get(1)?.value
val episode = matchResult?.groups?.get(2)?.value val episode = matchResult?.groups?.get(2)?.value
return season to episode return season to episode
@ -149,10 +148,15 @@ class FileNameDeterminate(val title: String, val sanitizedName: String, val ctyp
} }
fun findEpisodeTitle(): String? { fun findEpisodeTitle(): String? {
var startPosition: Int = 0
startPosition = Regexes.SeasonEpisodeBlock.find(sanitizedName)?.value?.let { block ->
sanitizedName.indexOf(block) + block.length
} ?: 0
val seCombo = findSeasonAndEpisode(sanitizedName) val seCombo = findSeasonAndEpisode(sanitizedName)
val episodeNumber = findEpisodeNumber() val episodeNumber = findEpisodeNumber()
val startPosition = if (seCombo.second != null) sanitizedName.indexOf(seCombo.second!!)+ seCombo.second!!.length startPosition = if (startPosition != 0) startPosition else if (seCombo.second != null) sanitizedName.indexOf(seCombo.second!!)+ seCombo.second!!.length
else if (episodeNumber != null) sanitizedName.indexOf(episodeNumber) + episodeNumber.length else 0 else if (episodeNumber != null) sanitizedName.indexOf(episodeNumber) + episodeNumber.length else 0
val availableText = sanitizedName.substring(startPosition) val availableText = sanitizedName.substring(startPosition)

View File

@ -0,0 +1,12 @@
package no.iktdev.mediaprocessing.shared.common.parsing
import org.apache.commons.lang3.StringUtils
import java.text.Normalizer
object NameHelper {
fun normalize(text: String): String {
val normalized = Normalizer.normalize(text, Normalizer.Form.NFC)
val result = normalized.replace("\\p{M}".toRegex(), "")
return StringUtils.stripAccents(result)
}
}

View File

@ -3,6 +3,6 @@ package no.iktdev.mediaprocessing.shared.common.parsing
object Regexes { object Regexes {
val illegalCharacters = Regex("""[\\\\\\/\\:\\*\\?\\\"\\<\\>|!`()\[\]]""") val illegalCharacters = Regex("""[\\\\\\/\\:\\*\\?\\\"\\<\\>|!`()\[\]]""")
val trimWhiteSpaces = Regex("\\s{2,}") val trimWhiteSpaces = Regex("\\s{2,}")
val seasonAndEpisode = Regex("""(?i)\b(?:S|Season)\s*(\d+).*?(?:E|Episode)?\s*(\d+)\b""", RegexOption.IGNORE_CASE) val SeasonEpisodeBlock = 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)
} }