diff --git a/.idea/copilot.data.migration.agent.xml b/.idea/copilot.data.migration.agent.xml
new file mode 100644
index 00000000..4ea72a91
--- /dev/null
+++ b/.idea/copilot.data.migration.agent.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copilot.data.migration.ask.xml b/.idea/copilot.data.migration.ask.xml
new file mode 100644
index 00000000..7ef04e2e
--- /dev/null
+++ b/.idea/copilot.data.migration.ask.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copilot.data.migration.ask2agent.xml b/.idea/copilot.data.migration.ask2agent.xml
new file mode 100644
index 00000000..1f2ea11e
--- /dev/null
+++ b/.idea/copilot.data.migration.ask2agent.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copilot.data.migration.edit.xml b/.idea/copilot.data.migration.edit.xml
new file mode 100644
index 00000000..8648f940
--- /dev/null
+++ b/.idea/copilot.data.migration.edit.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 9b706bb3..b459ecf3 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -16,7 +16,8 @@
-
+
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 5cbe6eaf..336886a4 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 2f67f95d..8df4529b 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,194 +4,86 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -263,9 +155,10 @@
@@ -282,6 +175,9 @@
+
+
+
{
"customColor": "",
"associatedIndex": 8
@@ -303,6 +199,9 @@
"Gradle.ConvertWorkTaskListenerTest.validate_shouldIProcessAndHandleEvent1.executor": "Run",
"Gradle.ConvertWorkTaskListenerTest.validate_shouldIProcessAndHandleEvent2.executor": "Run",
"Gradle.ConvertWorkTaskListenerTest.validate_shouldIProcessAndHandleEvent3.executor": "Run",
+ "Gradle.ConverterApplicationTest.Verify that we can access TaskStore.executor": "Debug",
+ "Gradle.ConverterApplicationTest.context loads and common configuration is available.executor": "Run",
+ "Gradle.ConverterApplicationTest.executor": "Run",
"Gradle.DatabaseDeserializerTest.executor": "Run",
"Gradle.DatabaseDeserializerTest.validateMediaInfo.executor": "Run",
"Gradle.DatabaseDeserializerTest.validateMetadataRead.executor": "Debug",
@@ -314,6 +213,8 @@
"Gradle.FileNameParserTest.assertDotRemoval.executor": "Run",
"Gradle.FileNameParserTest.assertTitleFails.executor": "Run",
"Gradle.FileNameParserTest.executor": "Run",
+ "Gradle.FlywayMigrationTest.executor": "Run",
+ "Gradle.FlywayMigrationTest.should run flyway migrations and create expected tables.executor": "Debug",
"Gradle.MediaProcessing2 [apps:build].executor": "Run",
"Gradle.MediaProcessing2 [apps:clean].executor": "Run",
"Gradle.MediaProcessing2 [build].executor": "Run",
@@ -354,10 +255,10 @@
"git-widget-placeholder": "v5",
"ignore.virus.scanning.warn.message": "true",
"kotlin-language-version-configured": "true",
- "last_opened_file_path": "/mount/870 EVO 1TB/Workspace/mediaprocesserv5",
+ "last_opened_file_path": "/mount/870 EVO 1TB/Workspace/mediaprocesserv5/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/model",
"project.structure.last.edited": "Modules",
- "project.structure.proportion": "0.0",
- "project.structure.side.proportion": "0.0",
+ "project.structure.proportion": "0.15",
+ "project.structure.side.proportion": "0.2",
"settings.editor.selected.configurable": "reference.settingsdialog.project.gradle"
},
"keyToStringList": {
@@ -368,10 +269,11 @@
}]]>
-
-
-
-
+
+
+
+
+
@@ -392,11 +294,16 @@
+
+
-
-
+
+
+
+
+
@@ -412,30 +319,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- true
- false
- false
-
-
-
+
+
@@ -446,7 +331,9 @@
-
+
+
+
@@ -457,7 +344,7 @@
true
-
+
@@ -468,9 +355,9 @@
-
+
-
+
@@ -481,7 +368,7 @@
true
-
+
@@ -492,9 +379,9 @@
-
+
-
+
@@ -505,7 +392,7 @@
true
-
+
@@ -516,9 +403,33 @@
-
+
-
+
+
+
+
+
+ false
+ true
+ false
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -530,20 +441,20 @@
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
@@ -556,13 +467,6 @@
1722029797420
-
-
- 1742149170986
-
-
- 1742149170987
-
1742231127291
@@ -906,7 +810,15 @@
1755640931383
-
+
+
+ 1762600047515
+
+
+
+ 1762600047516
+
+
@@ -933,7 +845,6 @@
-
@@ -958,7 +869,8 @@
-
+
+
@@ -1028,16 +940,6 @@
31
-
- file://$PROJECT_DIR$/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/DatabaseDeserializerTest.kt
- 18
-
-
-
- file://$PROJECT_DIR$/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/DatabaseDeserializerTest.kt
- 96
-
-
file://$PROJECT_DIR$/apps/ui/src/main/kotlin/no/iktdev/mediaprocessing/ui/explorer/ExplorerCore.kt
40
@@ -1279,6 +1181,85 @@
32
+
+ file://$PROJECT_DIR$/shared/ffmpeg/src/main/kotlin/no/iktdev/mediaprocessing/ffmpeg/FFinfo.kt
+ 20
+
+
+
+ file://$PROJECT_DIR$/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/FlywayMigrationTest.kt
+ 32
+
+
+
+ file://$PROJECT_DIR$/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/FlywayMigrationTest.kt
+ 41
+
+
+
+ file://$PROJECT_DIR$/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/FlywayMigrationTest.kt
+ 45
+
+
+
+
+
+
+ file://$PROJECT_DIR$/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/FlywayMigrationTest.kt
+ 52
+
+
+
+ file://$PROJECT_DIR$/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/FlywayMigrationTest.kt
+ 53
+
+
+
+ file://$PROJECT_DIR$/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/stores/TaskStore.kt
+ 20
+
+
+
+ file://$PROJECT_DIR$/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/stores/TaskStore.kt
+ 24
+
+
+
+
+
+
+ file://$PROJECT_DIR$/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/stores/TaskStore.kt
+ 31
+
+
+
+ file://$PROJECT_DIR$/apps/converter/src/test/kotlin/no/iktdev/mediaprocessing/converter/ConverterApplicationTest.kt
+ 42
+
+
+
+ file://$PROJECT_DIR$/apps/converter/src/test/kotlin/no/iktdev/mediaprocessing/converter/ConverterApplicationTest.kt
+ 40
+
+
+
+ file://$PROJECT_DIR$/apps/converter/src/test/kotlin/no/iktdev/mediaprocessing/converter/ConverterApplicationTest.kt
+ 38
+
+
+
+ file://$PROJECT_DIR$/apps/converter/src/test/kotlin/no/iktdev/mediaprocessing/converter/ConverterApplicationTest.kt
+ 37
+
+
+
+ file://$PROJECT_DIR$/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/stores/TaskStore.kt
+ 25
+
+
+
+
+
diff --git a/apps/build.gradle.kts b/apps/build.gradle.kts
index 6daca501..379611eb 100644
--- a/apps/build.gradle.kts
+++ b/apps/build.gradle.kts
@@ -20,5 +20,5 @@ tasks.test {
useJUnitPlatform()
}
kotlin {
- jvmToolchain(17)
+ jvmToolchain(21)
}
\ No newline at end of file
diff --git a/apps/converter/build.gradle.kts b/apps/converter/build.gradle.kts
index 51e36f39..10ecd66e 100644
--- a/apps/converter/build.gradle.kts
+++ b/apps/converter/build.gradle.kts
@@ -1,9 +1,8 @@
plugins {
id("java")
kotlin("jvm")
- kotlin("plugin.spring") version "1.5.31"
- id("org.springframework.boot") version "2.5.5"
- id("io.spring.dependency-management") version "1.0.11.RELEASE"
+ id("org.springframework.boot")
+ id("io.spring.dependency-management")
}
group = "no.iktdev.mediaprocessing.apps"
@@ -27,40 +26,32 @@ repositories {
}
}
-val exposedVersion = "0.44.0"
dependencies {
-
/*Spring boot*/
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter:2.7.0")
- // implementation("org.springframework.kafka:spring-kafka:3.0.1")
implementation("org.springframework.boot:spring-boot-starter-websocket:2.6.3")
- implementation("org.springframework.kafka:spring-kafka:2.8.5")
- implementation("org.jetbrains.exposed:exposed-core:$exposedVersion")
- implementation("org.jetbrains.exposed:exposed-dao:$exposedVersion")
- implementation("org.jetbrains.exposed:exposed-jdbc:$exposedVersion")
- implementation("org.jetbrains.exposed:exposed-java-time:$exposedVersion")
- implementation ("mysql:mysql-connector-java:8.0.29")
-
implementation("io.github.microutils:kotlin-logging-jvm:2.0.11")
implementation("com.google.code.gson:gson:2.8.9")
implementation("org.json:json:20210307")
implementation("no.iktdev:exfl:0.0.16-SNAPSHOT")
implementation("no.iktdev.library:subtitle:1.8.1-SNAPSHOT")
+ implementation("no.iktdev:eventi:1.0-rc13")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1")
implementation("com.github.vishna:watchservice-ktx:master-SNAPSHOT")
implementation("com.github.pgreze:kotlin-process:1.4.1")
- implementation(project(mapOf("path" to ":shared:eventi")))
implementation(project(mapOf("path" to ":shared:common")))
-
implementation(kotlin("stdlib-jdk8"))
+
+ testImplementation("io.mockk:mockk:1.12.0")
+ testImplementation("org.springframework.boot:spring-boot-starter-test")
}
tasks.test {
@@ -78,5 +69,5 @@ tasks.jar {
}
kotlin {
- jvmToolchain(17)
+ jvmToolchain(21)
}
\ No newline at end of file
diff --git a/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/ConverterApplication.kt b/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/ConverterApplication.kt
new file mode 100644
index 00000000..29693777
--- /dev/null
+++ b/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/ConverterApplication.kt
@@ -0,0 +1,57 @@
+package no.iktdev.mediaprocessing.converter
+
+import mu.KotlinLogging
+import no.iktdev.eventi.events.EventTypeRegistry
+import no.iktdev.eventi.tasks.TaskTypeRegistry
+import no.iktdev.exfl.coroutines.CoroutinesDefault
+import no.iktdev.exfl.coroutines.CoroutinesIO
+import no.iktdev.exfl.observable.Observables
+import no.iktdev.mediaprocessing.shared.common.event_task_contract.EventRegistry
+import no.iktdev.mediaprocessing.shared.common.event_task_contract.TaskRegistry
+import no.iktdev.mediaprocessing.shared.common.DatabaseApplication
+import no.iktdev.mediaprocessing.shared.common.getAppVersion
+import org.springframework.boot.autoconfigure.SpringBootApplication
+import org.springframework.boot.runApplication
+import org.springframework.context.annotation.Configuration
+
+@SpringBootApplication(scanBasePackages = [
+ "no.iktdev.converter",
+ "no.iktdev.mediaprocessing.shared.common"
+])
+open class ConverterApplication: DatabaseApplication() {
+}
+
+val ioCoroutine = CoroutinesIO()
+val defaultCoroutine = CoroutinesDefault()
+
+private val log = KotlinLogging.logger {}
+
+fun main(args: Array) {
+ ioCoroutine.addListener(listener = object: Observables.ObservableValue.ValueListener {
+ override fun onUpdated(value: Throwable) {
+ value.printStackTrace()
+ }
+ })
+ defaultCoroutine.addListener(listener = object: Observables.ObservableValue.ValueListener {
+ override fun onUpdated(value: Throwable) {
+ value.printStackTrace()
+ }
+ })
+
+
+ runApplication(*args)
+ log.info { "App Version: ${getAppVersion()}" }
+}
+//private val logger = KotlinLogging.logger {}
+
+@Configuration
+open class ApplicationConfiguration() {
+ init {
+ EventRegistry.getEvents().let {
+ EventTypeRegistry.register(it)
+ }
+ TaskRegistry.getTasks().let {
+ TaskTypeRegistry.register(it)
+ }
+ }
+}
diff --git a/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/ConverterEnv.kt b/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/ConverterEnv.kt
new file mode 100755
index 00000000..8cf84efb
--- /dev/null
+++ b/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/ConverterEnv.kt
@@ -0,0 +1,15 @@
+package no.iktdev.mediaprocessing.converter
+
+import no.iktdev.exfl.using
+import java.io.File
+
+class ConverterEnv {
+ companion object {
+ val allowOverwrite = System.getenv("ALLOW_OVERWRITE").toBoolean() ?: false
+ val syncDialogs = System.getenv("SYNC_DIALOGS").toBoolean()
+ val outFormats: List = System.getenv("OUT_FORMATS")?.split(",")?.toList() ?: emptyList()
+
+ val logDirectory = if (!System.getenv("LOG_DIR").isNullOrBlank()) File(System.getenv("LOG_DIR")) else
+ File("data").using("logs", "convert")
+ }
+}
\ No newline at end of file
diff --git a/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/convert/ConvertListener.kt b/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/convert/ConvertListener.kt
new file mode 100755
index 00000000..8ee527a3
--- /dev/null
+++ b/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/convert/ConvertListener.kt
@@ -0,0 +1,7 @@
+package no.iktdev.mediaprocessing.converter.convert
+
+interface ConvertListener {
+ fun onStarted(inputFile: String)
+ fun onCompleted(inputFile: String, outputFiles: List)
+ fun onError(inputFile: String, message: String) {}
+}
\ No newline at end of file
diff --git a/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/convert/Converter2.kt b/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/convert/Converter2.kt
new file mode 100644
index 00000000..5d732cf9
--- /dev/null
+++ b/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/convert/Converter2.kt
@@ -0,0 +1,87 @@
+package no.iktdev.mediaprocessing.converter.convert
+
+import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.Data
+import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.SubtitleFormats
+import no.iktdev.library.subtitle.Configuration
+import no.iktdev.library.subtitle.Syncro
+import no.iktdev.library.subtitle.classes.Dialog
+import no.iktdev.library.subtitle.classes.DialogType
+import no.iktdev.library.subtitle.export.Export
+import no.iktdev.library.subtitle.reader.BaseReader
+import no.iktdev.library.subtitle.reader.Reader
+import no.iktdev.mediaprocessing.converter.ConverterEnv
+import java.io.File
+import kotlin.jvm.Throws
+
+class Converter2(val data: Data,
+ private val listener: ConvertListener) {
+
+ @Throws(FileUnavailableException::class)
+ private fun getReader(): BaseReader? {
+ val file = File(data.inputFile)
+ if (!file.canRead())
+ throw FileUnavailableException("Can't open file for reading..")
+ return Reader(file).getSubtitleReader()
+ }
+
+ private fun syncDialogs(input: List