Updated
This commit is contained in:
parent
cf35aa6ea7
commit
fbb710b8f8
@ -3,6 +3,7 @@ package no.iktdev.mediaprocessing.coordinator.tasks.event
|
||||
import mu.KotlinLogging
|
||||
import no.iktdev.mediaprocessing.coordinator.Coordinator
|
||||
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.kafka.core.KafkaEvents
|
||||
import no.iktdev.mediaprocessing.shared.kafka.dto.MessageDataWrapper
|
||||
@ -51,7 +52,7 @@ class MetadataAndBaseInfoToCoverTask(@Autowired override var coordinator: Coordi
|
||||
CoverInfoPerformed(
|
||||
status = Status.COMPLETED,
|
||||
url = coverUrl,
|
||||
outFileBaseName = coverTitle,
|
||||
outFileBaseName = NameHelper.normalize(coverTitle),
|
||||
outDir = fileOut.outDirectory,
|
||||
derivedFromEventId = event.eventId
|
||||
)
|
||||
|
||||
@ -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.NameHelper
|
||||
import no.iktdev.mediaprocessing.shared.common.parsing.Regexes
|
||||
import no.iktdev.mediaprocessing.shared.common.persistance.PersistentMessage
|
||||
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()))
|
||||
|
||||
|
||||
|
||||
|
||||
@ -39,6 +39,8 @@ dependencies {
|
||||
implementation("org.jetbrains.exposed:exposed-jdbc:$exposedVersion")
|
||||
implementation("org.jetbrains.exposed:exposed-java-time:$exposedVersion")
|
||||
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:contract")))
|
||||
|
||||
@ -76,7 +76,7 @@ class FileNameDeterminate(val title: String, val sanitizedName: String, val ctyp
|
||||
var cleaned = Regex("(?<=\\w)[_.](?=\\w)").replace(input, " ")
|
||||
cleaned = Regexes.illegalCharacters.replace(cleaned, " - ")
|
||||
cleaned = Regexes.trimWhiteSpaces.replace(cleaned, " ")
|
||||
return cleaned
|
||||
return NameHelper.normalize(cleaned)
|
||||
}
|
||||
|
||||
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
|
||||
*/
|
||||
fun findSeasonAndEpisode(inputText: String): Pair<String?, String?> {
|
||||
val regex = Regex("""(?i)\b(?:S|Season)\s*(\d+).*?(?:E|Episode)?\s*(\d+)\b""")
|
||||
val matchResult = regex.find(inputText)
|
||||
val matchResult = Regexes.SeasonEpisodeBlock.find(inputText)
|
||||
val season = matchResult?.groups?.get(1)?.value
|
||||
val episode = matchResult?.groups?.get(2)?.value
|
||||
return season to episode
|
||||
@ -149,10 +148,15 @@ class FileNameDeterminate(val title: String, val sanitizedName: String, val ctyp
|
||||
}
|
||||
|
||||
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 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
|
||||
val availableText = sanitizedName.substring(startPosition)
|
||||
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
@ -3,6 +3,6 @@ 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 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)
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user