This commit is contained in:
Brage 2024-02-07 17:13:54 +01:00
parent fd468520d5
commit fc29b57cbe
6 changed files with 86 additions and 13 deletions

View File

@ -79,6 +79,12 @@ dependencies {
testImplementation(platform("org.junit:junit-bom:5.10.1")) testImplementation(platform("org.junit:junit-bom:5.10.1"))
testImplementation("org.junit.platform:junit-platform-runner:1.10.1")*/ testImplementation("org.junit.platform:junit-platform-runner:1.10.1")*/
testImplementation(platform("org.junit:junit-bom:5.9.1"))
testImplementation("org.junit.jupiter:junit-jupiter")
testImplementation("junit:junit:4.13.2")
testImplementation("org.mockito:mockito-core:3.+")
testImplementation("org.assertj:assertj-core:3.4.1")
} }
tasks.withType<Test> { tasks.withType<Test> {

View File

@ -0,0 +1,24 @@
package no.iktdev.mediaprocessing.shared.common.parsing
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.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.Test
class FileNameDeterminateTest {
@Test
fun testThatCorrectNumberIsSelected() {
val title = "Fancy Name Test 99"
val baseName = "Fancy Name Test 99 - 01"
val fnd = FileNameDeterminate(title, baseName, FileNameDeterminate.ContentType.UNDEFINED)
val result = fnd.getDeterminedVideoInfo()
assertNotNull(result)
assertThat(result!!.type).isEqualTo("serie")
assertThat(result).isInstanceOf(EpisodeInfo::class.java)
val ei = result as EpisodeInfo
assertThat(ei.episode).isEqualTo(1)
}
}

View File

@ -0,0 +1,18 @@
package no.iktdev.mediaprocessing.shared.common.parsing
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertDoesNotThrow
class FileNameParserTest {
@Test
fun serieNameWithNumbers() {
val name = "[TST] Fancy Name Test 99 - 01 [Nans][#00A8E6]"
val parser = FileNameParser(name)
val result = parser.guessDesiredTitle()
assertThat(result).isEqualTo("Fancy Name Test 99")
assertThat(parser.guessDesiredFileName()).isEqualTo("Fancy Name Test 99 - 01") }
}

View File

@ -6,26 +6,38 @@ import no.iktdev.exfl.coroutines.Coroutines
import no.iktdev.mediaprocessing.shared.common.datasource.MySqlDataSource import no.iktdev.mediaprocessing.shared.common.datasource.MySqlDataSource
import no.iktdev.mediaprocessing.shared.common.persistance.processerEvents import no.iktdev.mediaprocessing.shared.common.persistance.processerEvents
import no.iktdev.mediaprocessing.shared.common.socket.SocketImplementation import no.iktdev.mediaprocessing.shared.common.socket.SocketImplementation
import org.jetbrains.exposed.sql.transactions.TransactionManager
import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication import org.springframework.boot.runApplication
import org.springframework.scheduling.annotation.EnableScheduling
import org.springframework.scheduling.annotation.Scheduled
private val logger = KotlinLogging.logger {} private val logger = KotlinLogging.logger {}
@SpringBootApplication @SpringBootApplication
class ProcesserApplication { class ProcesserApplication {
} }
lateinit var dataSource: MySqlDataSource
fun main(args: Array<String>) { fun main(args: Array<String>) {
val dataSource = MySqlDataSource.fromDatabaseEnv() dataSource = MySqlDataSource.fromDatabaseEnv()
Coroutines.default().launch {
dataSource.createDatabase() dataSource.createDatabase()
dataSource.createTables( dataSource.createTables(
processerEvents processerEvents
) )
}
val context = runApplication<ProcesserApplication>(*args) val context = runApplication<ProcesserApplication>(*args)
} }
class SocketImplemented: SocketImplementation() { class SocketImplemented: SocketImplementation() {
} }
@EnableScheduling
class DatabaseReconnect() {
var lostConnectionCount = 0
@Scheduled(fixedDelay = (100_000))
fun checkIfConnected() {
if (TransactionManager.currentOrNull() == null) {
lostConnectionCount++
dataSource.toDatabase()
}
}
}

View File

@ -11,6 +11,9 @@ import org.jetbrains.exposed.sql.transactions.transaction
open class MySqlDataSource(databaseName: String, address: String, port: String = "", username: String, password: String): DataSource(databaseName = databaseName, address = address, port = port, username = username, password = password) { open class MySqlDataSource(databaseName: String, address: String, port: String = "", username: String, password: String): DataSource(databaseName = databaseName, address = address, port = port, username = username, password = password) {
val log = KotlinLogging.logger {} val log = KotlinLogging.logger {}
var database: Database? = null
private set
companion object { companion object {
fun fromDatabaseEnv(): MySqlDataSource { fun fromDatabaseEnv(): MySqlDataSource {
if (DatabaseConfig.database.isNullOrBlank()) throw RuntimeException("Database name is not defined in 'DATABASE_NAME'") if (DatabaseConfig.database.isNullOrBlank()) throw RuntimeException("Database name is not defined in 'DATABASE_NAME'")
@ -50,7 +53,10 @@ open class MySqlDataSource(databaseName: String, address: String, port: String =
} }
} }
return if (ok) toDatabase() else null return if (ok) toDatabase() else {
log.error { "No database to create or connect to" }
null
}
} }
override fun createTables(vararg tables: Table) { override fun createTables(vararg tables: Table) {
@ -65,19 +71,21 @@ open class MySqlDataSource(databaseName: String, address: String, port: String =
} }
protected fun toDatabaseServerConnection(): Database { protected fun toDatabaseServerConnection(): Database {
return Database.connect( database = Database.connect(
toConnectionUrl(), toConnectionUrl(),
user = username, user = username,
password = password password = password
) )
return database!!
} }
fun toDatabase(): Database { fun toDatabase(): Database {
return Database.connect( database = Database.connect(
"${toConnectionUrl()}/$databaseName", "${toConnectionUrl()}/$databaseName",
user = username, user = username,
password = password password = password
) )
return database!!
} }
override fun toConnectionUrl(): String { override fun toConnectionUrl(): String {

View File

@ -137,8 +137,13 @@ class FileNameDeterminate(val title: String, val sanitizedName: String, val ctyp
fun findEpisodeNumber(): String? { fun findEpisodeNumber(): String? {
val regex = Regex("\\b(\\d+)\\b") val regex = Regex("\\b(\\d+)\\b")
val matchResult = regex.find(sanitizedName) val matchResult = regex.findAll(sanitizedName)
return matchResult?.value?.trim() val usabeNumber = if (matchResult.toList().size > 1) {
Regex("[-_] \\b(\\d+)\\b").find(sanitizedName)?.groups?.lastOrNull()?.value
} else {
matchResult.lastOrNull()?.value
}
return usabeNumber?.trim()
} }
fun findEpisodeTitle(): String? { fun findEpisodeTitle(): String? {