diff --git a/apps/coordinator/build.gradle.kts b/apps/coordinator/build.gradle.kts index fd3d33a0..b4754651 100644 --- a/apps/coordinator/build.gradle.kts +++ b/apps/coordinator/build.gradle.kts @@ -37,7 +37,7 @@ dependencies { implementation("org.json:json:20210307") implementation("no.iktdev:exfl:0.0.13-SNAPSHOT") - implementation("no.iktdev.streamit.library:streamit-library-db:0.0.6-alpha22") + implementation("no.iktdev.streamit.library:streamit-library-db:0.0.6-alpha25") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1") diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/mapping/MetadataMapping.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/mapping/MetadataMapping.kt index ac65dab7..a12e522e 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/mapping/MetadataMapping.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/mapping/MetadataMapping.kt @@ -25,6 +25,8 @@ class MetadataMapping(val events: List) { } val videoInfo = mediaReadOut?.toValueObject() + val collection = mediaReadOut?.outDirectory?.let { File(it).name } ?: baseInfo?.title + val mediaCover = if (coverDownloadTask != null || cover != null) { val coverFile = cover?.coverFile?.let { File(it) } @@ -36,13 +38,15 @@ class MetadataMapping(val events: List) { } else null return if (meta != null || videoInfo != null) { + MetadataDto( - title = meta?.data?.title ?: videoInfo?.fullName ?: return null, - collection = baseInfo?.title ?: return null, + title = videoInfo?.title ?: meta?.data?.title ?: baseInfo?.title ?: return null, + collection = collection ?: return null, cover = mediaCover, type = meta?.data?.type ?: videoInfo?.type ?: return null, summary = meta?.data?.summary?.filter {it.summary != null }?.map { SummaryInfo(language = it.language, summary = it.summary!! ) } ?: emptyList(), genres = meta?.data?.genres ?: emptyList(), + titles = meta?.data?.altTitle ?: emptyList() ) } else null } diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasks/event/CollectAndStoreTask.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasks/event/CollectAndStoreTask.kt index 1c01bc67..27a5084e 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasks/event/CollectAndStoreTask.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasks/event/CollectAndStoreTask.kt @@ -19,7 +19,9 @@ import no.iktdev.mediaprocessing.shared.kafka.dto.SimpleMessageData import no.iktdev.mediaprocessing.shared.kafka.dto.Status import no.iktdev.mediaprocessing.shared.kafka.dto.isSuccess import no.iktdev.streamit.library.db.query.* +import no.iktdev.streamit.library.db.tables.titles import org.jetbrains.exposed.exceptions.ExposedSQLException +import org.jetbrains.exposed.sql.insertIgnore import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service import java.io.File @@ -70,6 +72,7 @@ class CollectAndStoreTask(@Autowired override var coordinator: Coordinator) : Ta mapped.metadata?.let { storeMetadata(catalogId = catalogId, metadata = it) + storeTitles(collection = it.collection, it.title, contentTitles = it.titles) } return SimpleMessageData(Status.COMPLETED, derivedFromEventId = event.eventId) @@ -104,6 +107,21 @@ class CollectAndStoreTask(@Autowired override var coordinator: Coordinator) : Ta } } + private fun storeTitles(collection: String, usedTitle: String, contentTitles: List) { + withTransaction(getStoreDatabase()) { + titles.insertIgnore { + it[titles.collection] = collection + it[titles.title] = usedTitle + } + contentTitles.forEach { title -> + titles.insertIgnore { + it[titles.collection] = collection + it[titles.title] = title + } + } + } + } + private fun storeAndGetGenres(genres: List): String? { return withTransaction(getStoreDatabase()) { val gq = GenreQuery( *genres.toTypedArray() ) 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 9d02599a..8dd84d6e 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 @@ -5,7 +5,7 @@ import no.iktdev.mediaprocessing.shared.kafka.dto.events_result.MovieInfo import no.iktdev.mediaprocessing.shared.kafka.dto.events_result.VideoInfo -class FileNameDeterminate(val title: String, val sanitizedName: String, val ctype: ContentType = ContentType.UNDEFINED) { +class FileNameDeterminate(val title: String, val sanitizedName: String, val ctype: ContentType = ContentType.UNDEFINED, val metaTitle: String? = null) { enum class ContentType { MOVIE, @@ -29,7 +29,7 @@ class FileNameDeterminate(val title: String, val sanitizedName: String, val ctyp else -> sanitizedName } val nonResolutioned = movieEx.removeResolutionAndBeyond(stripped) ?: stripped - return MovieInfo(title = cleanup(nonResolutioned), fullName = cleanup(nonResolutioned)) + return MovieInfo(title = metaTitle ?: cleanup(nonResolutioned), fullName = cleanup(nonResolutioned)) } private fun determineSerieFileName(): EpisodeInfo? { @@ -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 = cleanup(fullName)) + return EpisodeInfo(title = metaTitle ?: title, episode = episodeNumber.toInt(), season = seasonNumber.toInt(), episodeTitle = episodeTitle, fullName = cleanup(fullName)) } private fun determineUndefinedFileName(): VideoInfo? { diff --git a/shared/contract/src/main/kotlin/no/iktdev/mediaprocessing/shared/contract/reader/MetadataDto.kt b/shared/contract/src/main/kotlin/no/iktdev/mediaprocessing/shared/contract/reader/MetadataDto.kt index ecf2b204..c4eef868 100644 --- a/shared/contract/src/main/kotlin/no/iktdev/mediaprocessing/shared/contract/reader/MetadataDto.kt +++ b/shared/contract/src/main/kotlin/no/iktdev/mediaprocessing/shared/contract/reader/MetadataDto.kt @@ -7,6 +7,7 @@ data class MetadataDto( val cover: MetadataCoverDto?, val summary: List = emptyList(), val genres: List, + val titles: List = emptyList() ) data class SummaryInfo(