Updated
This commit is contained in:
parent
22c0c0335c
commit
892aef3942
@ -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
|
||||||
)
|
)
|
||||||
|
|||||||
@ -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? {
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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)
|
||||||
}
|
}
|
||||||
@ -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")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -23,4 +23,6 @@ class FileNameParserTest {
|
|||||||
assertThat(parser.guessDesiredFileName()).isEqualTo("Fancy Name Test 99 - 01")
|
assertThat(parser.guessDesiredFileName()).isEqualTo("Fancy Name Test 99 - 01")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user