From 38abf4f52241b0c276ca4797d1f9345cb542c15a Mon Sep 17 00:00:00 2001 From: bskjon Date: Thu, 20 Feb 2025 20:36:17 +0100 Subject: [PATCH] Indexing --- .../services/UnattendedIndexing.kt | 42 +++++++++++++++++++ .../shared/common/SharedConfig.kt | 1 + 2 files changed, 43 insertions(+) create mode 100644 apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/services/UnattendedIndexing.kt diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/services/UnattendedIndexing.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/services/UnattendedIndexing.kt new file mode 100644 index 00000000..8c80a669 --- /dev/null +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/services/UnattendedIndexing.kt @@ -0,0 +1,42 @@ +package no.iktdev.mediaprocessing.coordinator.services + +import mu.KotlinLogging +import no.iktdev.eventi.database.withTransaction +import no.iktdev.mediaprocessing.coordinator.eventDatabase +import no.iktdev.mediaprocessing.shared.common.SharedConfig +import no.iktdev.mediaprocessing.shared.common.database.tables.files +import no.iktdev.mediaprocessing.shared.common.extended.isSupportedVideoFile +import no.iktdev.mediaprocessing.shared.common.md5 +import no.iktdev.streamit.library.db.withTransaction +import org.jetbrains.exposed.sql.insertIgnore +import org.jetbrains.exposed.sql.select +import org.springframework.scheduling.annotation.EnableScheduling +import org.springframework.scheduling.annotation.Scheduled +import org.springframework.stereotype.Service +import java.io.File + +@Service +@EnableScheduling +class UnattendedIndexing { + private val logger = KotlinLogging.logger {} + + @Scheduled(fixedDelay = 60_000*60) + fun indexContent() { + logger.info { "Performing indexing of input root: ${SharedConfig.inputRoot.absolutePath}" } + val foundFiles: MutableList = mutableListOf() + SharedConfig.inputRoot.walkTopDown().filter { it.isFile && it.isSupportedVideoFile() }.also { + foundFiles.addAll(it) + } + + withTransaction(eventDatabase.database) { + foundFiles.forEach { file -> + files.insertIgnore { + it[this.fileName] = file.absolutePath + it[this.baseName] = file.nameWithoutExtension + it[this.folder] = file.parentFile.absolutePath + it[this.checksum] = file.md5() + } + } + } + } +} \ No newline at end of file diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/SharedConfig.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/SharedConfig.kt index a0e7f862..902dfb3c 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/SharedConfig.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/SharedConfig.kt @@ -5,6 +5,7 @@ import no.iktdev.eventi.database.MySqlDataSource import java.io.File object SharedConfig { + var inputRoot: File = if (!System.getenv("INPUT_ROOT").isNullOrBlank()) File(System.getenv("INPUT_ROOT")) else File("/src/input") var incomingContent: List = if (!System.getenv("DIRECTORY_CONTENT_INCOMING").isNullOrBlank()) { System.getenv("DIRECTORY_CONTENT_INCOMING").split(",") .map { File(it) }