diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
deleted file mode 100644
index 614499a6..00000000
--- a/.github/workflows/main.yml
+++ /dev/null
@@ -1,250 +0,0 @@
-name: Build Modules
-
-on:
- push:
- branches:
- - master
- pull_request:
- branches:
- - master
- workflow_dispatch:
-
-jobs:
- pre-check:
- runs-on: ubuntu-latest
- outputs:
- pyMetadata: ${{ steps.filter.outputs.pyMetadata }}
- commonCode: ${{ steps.filter.outputs.commonCode }}
- reader: ${{ steps.filter.outputs.reader }}
- encode: ${{ steps.filter.outputs.encode }}
- convert: ${{ steps.filter.outputs.convert }}
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- - uses: dorny/paths-filter@v2
- id: filter
- with:
- filters: |
- pyMetadata:
- - 'pyMetadata/**'
- reader:
- - 'Reader/**'
- encode:
- - 'Encode/**'
- convert:
- - 'Convert/**'
- commonCode:
- - 'CommonCode/**'
- # Step to print the outputs from "pre-check" job
- - name: Print Outputs from pre-check job
- run: |
- echo "pyMetadata: ${{ needs.pre-check.outputs.pyMetadata }}"
- echo "commonCode: ${{ needs.pre-check.outputs.commonCode }}"
- echo "reader: ${{ needs.pre-check.outputs.reader }}"
- echo "encode: ${{ needs.pre-check.outputs.encode }}"
- echo "convert: ${{ needs.pre-check.outputs.convert }}"
-
- build-commoncode:
- runs-on: ubuntu-latest
- needs: pre-check
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- - name: Cache CommonCode Gradle dependencies
- id: cache-gradle
- uses: actions/cache@v2
- with:
- path: ~/.gradle/caches
- key: ${{ runner.os }}-gradle-${{ hashFiles('CommonCode/gradle/wrapper/gradle-wrapper.properties') }}
-
- - name: Build CommonCode
- if: steps.cache-gradle.outputs.cache-hit != 'true' || needs.pre-check.outputs.commonCode == 'true' || github.event_name == 'workflow_dispatch'
- run: |
- cd CommonCode
- chmod +x ./gradlew
- ./gradlew build
-
- build-encode:
- needs: build-commoncode
- if: ${{ needs.pre-check.outputs.encode == 'true' || github.event_name == 'workflow_dispatch' || needs.pre-check.outputs.commonCode == 'true' }}
- runs-on: ubuntu-latest
- #if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }}
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- - name: Cache CommonCode Gradle dependencies
- id: cache-gradle
- uses: actions/cache@v2
- with:
- path: ~/.gradle/caches
- key: ${{ runner.os }}-gradle-${{ hashFiles('CommonCode/gradle/wrapper/gradle-wrapper.properties') }}
-
-
- - name: Build Encode module
- id: build-encode
- run: |
- cd Encode
- chmod +x ./gradlew
- ./gradlew build
- echo "Build completed"
-
-
- - name: Generate Docker image tag
- id: docker-tag
- run: echo "::set-output name=tag::$(date -u +'%Y.%m.%d')-$(uuidgen | cut -c 1-8)"
-
- - name: Docker login
- uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
- with:
- username: ${{ secrets.DOCKER_HUB_NAME }}
- password: ${{ secrets.DOCKER_HUB_TOKEN }}
-
- - name: Build and push Docker image
- uses: docker/build-push-action@v2
- with:
- context: ./Encode
- push: true
- tags: |
- bskjon/mediaprocessing-encoder:latest
- bskjon/mediaprocessing-encoder:${{ github.sha }}
- bskjon/mediaprocessing-encoder:${{ steps.docker-tag.outputs.tag }}
-
- build-reader:
- needs: build-commoncode
- runs-on: ubuntu-latest
- if: ${{ needs.pre-check.outputs.reader == 'true' || github.event_name == 'workflow_dispatch' || needs.pre-check.outputs.commonCode == 'true' }}
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- - name: Cache CommonCode Gradle dependencies
- id: cache-gradle
- uses: actions/cache@v2
- with:
- path: ~/.gradle/caches
- key: ${{ runner.os }}-gradle-${{ hashFiles('CommonCode/gradle/wrapper/gradle-wrapper.properties') }}
-
- - name: Build Reader module
- id: build-reader
- run: |
- cd Reader
- chmod +x ./gradlew
- ./gradlew build
- echo "Build completed"
-
- - name: Generate Docker image tag
- id: docker-tag
- run: echo "::set-output name=tag::$(date -u +'%Y.%m.%d')-$(uuidgen | cut -c 1-8)"
-
- - name: Docker login
- uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
- with:
- username: ${{ secrets.DOCKER_HUB_NAME }}
- password: ${{ secrets.DOCKER_HUB_TOKEN }}
-
- - name: Build and push Docker image
- uses: docker/build-push-action@v2
- with:
- context: ./Reader
- push: true
- tags: |
- bskjon/mediaprocessing-reader:latest
- bskjon/mediaprocessing-reader:${{ github.sha }}
- bskjon/mediaprocessing-reader:${{ steps.docker-tag.outputs.tag }}
-
-
-
- build-pymetadata:
- needs: pre-check
- if: ${{ needs.pre-check.outputs.pyMetadata == 'true' || github.event_name == 'workflow_dispatch' }}
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- - name: Build pyMetadata module
- id: build-pymetadata
- run: |
- if [[ "${{ steps.check-pymetadata.outputs.changed }}" == "true" || "${{ github.event_name }}" == "push" || "${{ github.event_name }}" == "workflow_dispatch" ]]; then
- cd pyMetadata
- # Add the necessary build steps for your Python module here
- echo "Build completed"
- else
- echo "pyMetadata has not changed. Skipping pyMetadata module build."
- echo "::set-output name=job_skipped::true"
- fi
-
- - name: Generate Docker image tag
- id: docker-tag
- run: echo "::set-output name=tag::$(date -u +'%Y.%m.%d')-$(uuidgen | cut -c 1-8)"
-
- - name: Docker login
- uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
- with:
- username: ${{ secrets.DOCKER_HUB_NAME }}
- password: ${{ secrets.DOCKER_HUB_TOKEN }}
-
- - name: Build and push Docker image
- uses: docker/build-push-action@v2
- with:
- context: ./pyMetadata
- push: true
- tags: |
- bskjon/mediaprocessing-pymetadata:latest
- bskjon/mediaprocessing-pymetadata:${{ github.sha }}
- bskjon/mediaprocessing-pymetadata:${{ steps.docker-tag.outputs.tag }}
-
-
- build-convert:
- needs: build-commoncode
- if: ${{ needs.pre-check.outputs.convert == 'true' || github.event_name == 'workflow_dispatch' || needs.pre-check.outputs.commonCode == 'true' }}
- runs-on: ubuntu-latest
- #if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }}
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- - name: Cache CommonCode Gradle dependencies
- id: cache-gradle
- uses: actions/cache@v2
- with:
- path: ~/.gradle/caches
- key: ${{ runner.os }}-gradle-${{ hashFiles('CommonCode/gradle/wrapper/gradle-wrapper.properties') }}
-
-
- - name: Build Convert module
- id: build-convert
- run: |
- cd Convert
- chmod +x ./gradlew
- ./gradlew build
- echo "Build completed"
-
-
- - name: Generate Docker image tag
- id: docker-tag
- run: echo "::set-output name=tag::$(date -u +'%Y.%m.%d')-$(uuidgen | cut -c 1-8)"
-
- - name: Docker login
- uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
- with:
- username: ${{ secrets.DOCKER_HUB_NAME }}
- password: ${{ secrets.DOCKER_HUB_TOKEN }}
-
- - name: Build and push Docker image
- uses: docker/build-push-action@v2
- with:
- context: ./Convert
- push: true
- tags: |
- bskjon/mediaprocessing-converter:latest
- bskjon/mediaprocessing-converter:${{ github.sha }}
- bskjon/mediaprocessing-converter:${{ steps.docker-tag.outputs.tag }}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 4ac4a0aa..b63da455 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,8 +5,6 @@ build/
!**/src/test/**/build/
### IntelliJ IDEA ###
-.idea
-**/.idea/*
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 00000000..26d33521
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 00000000..9cd68be8
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
new file mode 100644
index 00000000..e805548a
--- /dev/null
+++ b/.idea/kotlinc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 00000000..bf8f806e
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 00000000..2b63946d
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 00000000..35eb1ddf
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CommonCode/.gitignore b/CommonCode/.gitignore
deleted file mode 100644
index b63da455..00000000
--- a/CommonCode/.gitignore
+++ /dev/null
@@ -1,42 +0,0 @@
-.gradle
-build/
-!gradle/wrapper/gradle-wrapper.jar
-!**/src/main/**/build/
-!**/src/test/**/build/
-
-### IntelliJ IDEA ###
-.idea/modules.xml
-.idea/jarRepositories.xml
-.idea/compiler.xml
-.idea/libraries/
-*.iws
-*.iml
-*.ipr
-out/
-!**/src/main/**/out/
-!**/src/test/**/out/
-
-### Eclipse ###
-.apt_generated
-.classpath
-.factorypath
-.project
-.settings
-.springBeans
-.sts4-cache
-bin/
-!**/src/main/**/bin/
-!**/src/test/**/bin/
-
-### NetBeans ###
-/nbproject/private/
-/nbbuild/
-/dist/
-/nbdist/
-/.nb-gradle/
-
-### VS Code ###
-.vscode/
-
-### Mac OS ###
-.DS_Store
\ No newline at end of file
diff --git a/CommonCode/gradle/wrapper/gradle-wrapper.properties b/CommonCode/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index dfb7e10f..00000000
--- a/CommonCode/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Sat Jul 15 17:55:49 CEST 2023
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/CommonCode/settings.gradle.kts b/CommonCode/settings.gradle.kts
deleted file mode 100644
index 47b4e959..00000000
--- a/CommonCode/settings.gradle.kts
+++ /dev/null
@@ -1,2 +0,0 @@
-rootProject.name = "CommonCode"
-
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/CommonConfig.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/CommonConfig.kt
deleted file mode 100644
index b533ee99..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/CommonConfig.kt
+++ /dev/null
@@ -1,9 +0,0 @@
-package no.iktdev.streamit.content.common
-
-import java.io.File
-
-object CommonConfig {
- var kafkaTopic: String = System.getenv("KAFKA_TOPIC") ?: "contentEvents"
- var incomingContent: File = if (!System.getenv("DIRECTORY_CONTENT_INCOMING").isNullOrBlank()) File(System.getenv("DIRECTORY_CONTENT_INCOMING")) else File("/src/input")
- val outgoingContent: File = if (!System.getenv("DIRECTORY_CONTENT_OUTGOING").isNullOrBlank()) File(System.getenv("DIRECTORY_CONTENT_OUTGOING")) else File("/src/output")
-}
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/DefaultKafkaReader.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/DefaultKafkaReader.kt
deleted file mode 100644
index 8c723f9d..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/DefaultKafkaReader.kt
+++ /dev/null
@@ -1,53 +0,0 @@
-package no.iktdev.streamit.content.common
-
-import no.iktdev.streamit.content.common.CommonConfig
-import no.iktdev.streamit.library.kafka.KafkaEvents
-import no.iktdev.streamit.library.kafka.consumers.DefaultConsumer
-import no.iktdev.streamit.library.kafka.dto.Message
-import no.iktdev.streamit.library.kafka.dto.Status
-import no.iktdev.streamit.library.kafka.dto.StatusType
-import no.iktdev.streamit.library.kafka.listener.deserializer.IMessageDataDeserialization
-import no.iktdev.streamit.library.kafka.producer.DefaultProducer
-import java.util.*
-
-abstract class DefaultKafkaReader(val subId: String = UUID.randomUUID().toString()) {
- val messageProducer = DefaultProducer(CommonConfig.kafkaTopic)
- val defaultConsumer = DefaultConsumer(subId = subId)
-
- open fun loadDeserializers(): Map> {
- return emptyMap()
- }
-
- fun produceErrorMessage(event: KafkaEvents, baseMessage: Message, reason: String) {
- val message = Message(
- referenceId = baseMessage.referenceId,
- Status(statusType = StatusType.ERROR, message = reason)
- )
- messageProducer.sendMessage(event.event, message)
- }
-
- fun produceErrorMessage(event: KafkaEvents, referenceId: String, reason: String) {
- val message = Message(
- referenceId = referenceId,
- Status(statusType = StatusType.ERROR, message = reason)
- )
- messageProducer.sendMessage(event.event, message)
- }
-
- fun produceMessage(event: KafkaEvents, baseMessage: Message, data: Any?) {
- val message = Message(
- referenceId = baseMessage.referenceId,
- baseMessage.status,
- data = data
- )
- messageProducer.sendMessage(event.event, message)
- }
- fun produceSuccessMessage(event: KafkaEvents, referenceId: String, data: Any? = null) {
- val message = Message(
- referenceId = referenceId,
- status = Status(StatusType.SUCCESS),
- data = data
- )
- messageProducer.sendMessage(event.event, message)
- }
-}
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/FileAccess.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/FileAccess.kt
deleted file mode 100644
index 0ed74b82..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/FileAccess.kt
+++ /dev/null
@@ -1,25 +0,0 @@
-package no.iktdev.streamit.content.common
-
-import mu.KotlinLogging
-import java.io.File
-import java.io.RandomAccessFile
-
-private val logger = KotlinLogging.logger {}
-class FileAccess {
- companion object {
- fun isFileAvailable(file: File): Boolean {
- if (!file.exists()) return false
- var stream: RandomAccessFile? = null
- try {
- stream = RandomAccessFile(file, "rw")
- stream.close()
- logger.info { "File ${file.name} is read and writable" }
- return true
- } catch (e: Exception) {
- stream?.close()
- }
- return false
- }
- }
-
-}
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/SequentialKafkaReader.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/SequentialKafkaReader.kt
deleted file mode 100644
index 53eb2f4b..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/SequentialKafkaReader.kt
+++ /dev/null
@@ -1,20 +0,0 @@
-package no.iktdev.streamit.content.common
-
-import no.iktdev.streamit.content.common.CommonConfig
-import no.iktdev.streamit.library.kafka.KafkaEvents
-import no.iktdev.streamit.library.kafka.consumers.DefaultConsumer
-import no.iktdev.streamit.library.kafka.dto.Message
-import no.iktdev.streamit.library.kafka.dto.Status
-import no.iktdev.streamit.library.kafka.dto.StatusType
-import no.iktdev.streamit.library.kafka.listener.deserializer.IMessageDataDeserialization
-import no.iktdev.streamit.library.kafka.listener.sequential.ISequentialMessageEvent
-import no.iktdev.streamit.library.kafka.listener.sequential.SequentialMessageListener
-import no.iktdev.streamit.library.kafka.producer.DefaultProducer
-
-abstract class SequentialKafkaReader(subId: String): DefaultKafkaReader(subId), ISequentialMessageEvent {
-
- abstract val accept: KafkaEvents
- abstract val subAccepts: List
-
-
-}
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/ContentOutNameDeserializer.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/ContentOutNameDeserializer.kt
deleted file mode 100644
index 322a2909..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/ContentOutNameDeserializer.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package no.iktdev.streamit.content.common.deserializers
-
-import no.iktdev.streamit.content.common.dto.ContentOutName
-import no.iktdev.streamit.library.kafka.dto.Message
-import no.iktdev.streamit.library.kafka.listener.deserializer.IMessageDataDeserialization
-
-class ContentOutNameDeserializer: IMessageDataDeserialization {
- override fun deserialize(incomingMessage: Message): ContentOutName? {
- return incomingMessage.dataAs(ContentOutName::class.java)
- }
-}
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/ConvertWorkDeserializer.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/ConvertWorkDeserializer.kt
deleted file mode 100644
index 183f0447..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/ConvertWorkDeserializer.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package no.iktdev.streamit.content.common.deserializers
-
-import no.iktdev.streamit.content.common.dto.reader.work.ConvertWork
-import no.iktdev.streamit.content.common.dto.reader.work.EncodeWork
-import no.iktdev.streamit.content.common.dto.reader.work.ExtractWork
-import no.iktdev.streamit.library.kafka.dto.Message
-import no.iktdev.streamit.library.kafka.listener.deserializer.IMessageDataDeserialization
-
-class ConvertWorkDeserializer: IMessageDataDeserialization {
- override fun deserialize(incomingMessage: Message): ConvertWork? {
- return incomingMessage.dataAs(ConvertWork::class.java)
- }
-}
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/DeserializerRegistry.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/DeserializerRegistry.kt
deleted file mode 100644
index 71082dc5..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/DeserializerRegistry.kt
+++ /dev/null
@@ -1,52 +0,0 @@
-package no.iktdev.streamit.content.common.deserializers
-
-import no.iktdev.streamit.library.kafka.KafkaEvents
-import no.iktdev.streamit.library.kafka.listener.deserializer.IMessageDataDeserialization
-
-class DeserializerRegistry {
- companion object {
- private val _registry = mutableMapOf>(
- KafkaEvents.EVENT_READER_RECEIVED_FILE to FileResultDeserializer(),
- KafkaEvents.EVENT_READER_RECEIVED_STREAMS to MediaStreamsDeserializer(),
- KafkaEvents.EVENT_METADATA_OBTAINED to MetadataResultDeserializer(),
- KafkaEvents.EVENT_READER_DETERMINED_SERIE to EpisodeInfoDeserializer(),
- KafkaEvents.EVENT_READER_DETERMINED_MOVIE to MovieInfoDeserializer(),
- KafkaEvents.EVENT_READER_DETERMINED_FILENAME to ContentOutNameDeserializer(),
-
- KafkaEvents.EVENT_READER_ENCODE_GENERATED_VIDEO to EncodeWorkDeserializer(),
- KafkaEvents.EVENT_ENCODER_VIDEO_FILE_QUEUED to EncodeWorkDeserializer(),
- KafkaEvents.EVENT_ENCODER_VIDEO_FILE_STARTED to EncodeWorkDeserializer(),
-
- KafkaEvents.EVENT_ENCODER_VIDEO_FILE_ENDED to EncodeWorkDeserializer(),
- KafkaEvents.EVENT_READER_ENCODE_GENERATED_SUBTITLE to ExtractWorkDeserializer(),
- KafkaEvents.EVENT_ENCODER_SUBTITLE_FILE_ENDED to ExtractWorkDeserializer(),
- KafkaEvents.EVENT_CONVERTER_SUBTITLE_FILE_ENDED to ConvertWorkDeserializer()
-
- )
- fun getRegistry(): Map> = _registry.toMap()
- fun getEventToDeserializer(vararg keys: KafkaEvents): Map> {
- val missingFields = keys.filter { !getRegistry().keys.contains(it) }
-
- if (missingFields.isNotEmpty()) {
- throw MissingDeserializerException("Missing deserializers for: ${missingFields.joinToString(", ")}")
- }
- return getRegistry().filter { keys.contains(it.key) }.map { it.key.event to it.value }.toMap()
- }
-
- private fun toEvent(event: String): KafkaEvents? {
- return KafkaEvents.values().find { it.event == event }
- }
-
- fun getDeserializerForEvent(event: String): IMessageDataDeserialization<*>? {
- val deszEvent = toEvent(event) ?: return null
- return getEventToDeserializer(deszEvent).values.first()
- }
-
- fun addDeserializer(key: KafkaEvents, deserializer: IMessageDataDeserialization<*>) {
- _registry[key] = deserializer
- }
-
- }
-}
-
-class MissingDeserializerException(override val message: String): RuntimeException()
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/EncodeWorkDeserializer.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/EncodeWorkDeserializer.kt
deleted file mode 100644
index 847fa1f5..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/EncodeWorkDeserializer.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package no.iktdev.streamit.content.common.deserializers
-
-import no.iktdev.streamit.content.common.dto.reader.work.EncodeWork
-import no.iktdev.streamit.library.kafka.dto.Message
-import no.iktdev.streamit.library.kafka.listener.deserializer.IMessageDataDeserialization
-
-class EncodeWorkDeserializer: IMessageDataDeserialization {
- override fun deserialize(incomingMessage: Message): EncodeWork? {
- return incomingMessage.dataAs(EncodeWork::class.java)
- }
-}
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/EpisodeInfoDeserializer.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/EpisodeInfoDeserializer.kt
deleted file mode 100644
index 8c6cddf8..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/EpisodeInfoDeserializer.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package no.iktdev.streamit.content.common.deserializers
-
-import no.iktdev.streamit.content.common.dto.reader.EpisodeInfo
-import no.iktdev.streamit.library.kafka.dto.Message
-import no.iktdev.streamit.library.kafka.listener.deserializer.IMessageDataDeserialization
-
-class EpisodeInfoDeserializer: IMessageDataDeserialization {
- override fun deserialize(incomingMessage: Message): EpisodeInfo? {
- return incomingMessage.dataAs(EpisodeInfo::class.java)
- }
-}
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/ExtractWorkDeserializer.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/ExtractWorkDeserializer.kt
deleted file mode 100644
index 155fb56b..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/ExtractWorkDeserializer.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package no.iktdev.streamit.content.common.deserializers
-
-import no.iktdev.streamit.content.common.dto.reader.work.EncodeWork
-import no.iktdev.streamit.content.common.dto.reader.work.ExtractWork
-import no.iktdev.streamit.library.kafka.dto.Message
-import no.iktdev.streamit.library.kafka.listener.deserializer.IMessageDataDeserialization
-
-class ExtractWorkDeserializer: IMessageDataDeserialization {
- override fun deserialize(incomingMessage: Message): ExtractWork? {
- return incomingMessage.dataAs(ExtractWork::class.java)
- }
-}
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/FileResultDeserializer.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/FileResultDeserializer.kt
deleted file mode 100644
index 97809fe4..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/FileResultDeserializer.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package no.iktdev.streamit.content.common.deserializers
-
-import no.iktdev.streamit.content.common.dto.reader.FileResult
-import no.iktdev.streamit.library.kafka.KafkaEvents
-import no.iktdev.streamit.library.kafka.dto.Message
-import no.iktdev.streamit.library.kafka.dto.StatusType
-import no.iktdev.streamit.library.kafka.listener.deserializer.IMessageDataDeserialization
-
-class FileResultDeserializer: IMessageDataDeserialization {
- override fun deserialize(incomingMessage: Message): FileResult? {
- return incomingMessage.dataAs(FileResult::class.java)
- }
-}
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/MediaStreamsDeserializer.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/MediaStreamsDeserializer.kt
deleted file mode 100644
index f2248f32..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/MediaStreamsDeserializer.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-package no.iktdev.streamit.content.common.deserializers
-
-import com.google.gson.Gson
-import com.google.gson.JsonObject
-import no.iktdev.streamit.content.common.streams.AudioStream
-import no.iktdev.streamit.content.common.streams.MediaStreams
-import no.iktdev.streamit.content.common.streams.SubtitleStream
-import no.iktdev.streamit.content.common.streams.VideoStream
-import no.iktdev.streamit.library.kafka.dto.Message
-import no.iktdev.streamit.library.kafka.dto.StatusType
-import no.iktdev.streamit.library.kafka.listener.deserializer.IMessageDataDeserialization
-
-class MediaStreamsDeserializer: IMessageDataDeserialization {
- override fun deserialize(incomingMessage: Message): MediaStreams? {
- return try {
- val gson = Gson()
- val jsonObject = if (incomingMessage.data is String) {
- gson.fromJson(incomingMessage.data as String, JsonObject::class.java)
- } else {
- gson.fromJson(incomingMessage.dataAsJson(), JsonObject::class.java)
- }
-
- val streamsJsonArray = jsonObject.getAsJsonArray("streams")
-
- val rstreams = streamsJsonArray.mapNotNull { streamJson ->
- val streamObject = streamJson.asJsonObject
-
- val codecType = streamObject.get("codec_type").asString
- if (streamObject.has("codec_name") && streamObject.get("codec_name").asString == "mjpeg") {
- null
- } else {
- when (codecType) {
- "video" -> gson.fromJson(streamObject, VideoStream::class.java)
- "audio" -> gson.fromJson(streamObject, AudioStream::class.java)
- "subtitle" -> gson.fromJson(streamObject, SubtitleStream::class.java)
- else -> null //throw IllegalArgumentException("Unknown stream type: $codecType")
- }
- }
- }
-
- return MediaStreams(rstreams)
- } catch (e: Exception) {
- e.printStackTrace()
- null
- }
- }
-}
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/MetadataResultDeserializer.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/MetadataResultDeserializer.kt
deleted file mode 100644
index d0ee0b5e..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/MetadataResultDeserializer.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package no.iktdev.streamit.content.common.deserializers
-
-import no.iktdev.streamit.content.common.dto.Metadata
-import no.iktdev.streamit.library.kafka.dto.Message
-import no.iktdev.streamit.library.kafka.listener.deserializer.IMessageDataDeserialization
-
-class MetadataResultDeserializer: IMessageDataDeserialization {
- override fun deserialize(incomingMessage: Message): Metadata? {
- return incomingMessage.dataAs(Metadata::class.java)
- }
-}
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/MovieInfoDeserializer.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/MovieInfoDeserializer.kt
deleted file mode 100644
index fcc7b2b0..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/deserializers/MovieInfoDeserializer.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package no.iktdev.streamit.content.common.deserializers
-
-import no.iktdev.streamit.content.common.dto.reader.MovieInfo
-import no.iktdev.streamit.library.kafka.dto.Message
-import no.iktdev.streamit.library.kafka.listener.deserializer.IMessageDataDeserialization
-
-class MovieInfoDeserializer: IMessageDataDeserialization {
- override fun deserialize(incomingMessage: Message): MovieInfo? {
- return incomingMessage.dataAs(MovieInfo::class.java)
- }
-}
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/ContentOutName.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/ContentOutName.kt
deleted file mode 100644
index 2c3b76ea..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/ContentOutName.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package no.iktdev.streamit.content.common.dto
-
-data class ContentOutName(
- val baseName: String
-)
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/Metadata.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/Metadata.kt
deleted file mode 100644
index 7eaba43a..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/Metadata.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package no.iktdev.streamit.content.common.dto
-
-data class Metadata(
- val title: String,
- val altTitle: List = emptyList(),
- val cover: String? = null,
- val type: String,
- val summary: String? = null,
- val genres: List = emptyList()
-)
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/WorkOrderItem.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/WorkOrderItem.kt
deleted file mode 100644
index 2bcccb1b..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/WorkOrderItem.kt
+++ /dev/null
@@ -1,19 +0,0 @@
-package no.iktdev.streamit.content.common.dto
-
-data class WorkOrderItem(
- val id: String,
- val inputFile: String,
- val outputFile: String,
- val collection: String,
- val state: State,
- val progress: Int = 0,
- val remainingTime: Long? = null
-)
-
-enum class State {
- QUEUED,
- STARTED,
- UPDATED,
- FAILURE,
- ENDED
-}
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/EpisodeInfo.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/EpisodeInfo.kt
deleted file mode 100644
index ce8fc0f1..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/EpisodeInfo.kt
+++ /dev/null
@@ -1,9 +0,0 @@
-package no.iktdev.streamit.content.common.dto.reader
-
-data class EpisodeInfo(
- val title: String,
- val episode: Int,
- val season: Int,
- val episodeTitle: String?,
- override val fullName: String
-): VideoInfo(fullName)
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/FileResult.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/FileResult.kt
deleted file mode 100644
index 30d4685a..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/FileResult.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-package no.iktdev.streamit.content.common.dto.reader
-
-data class FileResult(
- val file: String,
- val title: String = "",
- val sanitizedName: String = ""
-)
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/MovieInfo.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/MovieInfo.kt
deleted file mode 100644
index 4c2b6794..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/MovieInfo.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package no.iktdev.streamit.content.common.dto.reader
-
-data class MovieInfo(
- val title: String,
- override val fullName: String
-) : VideoInfo(fullName)
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/SubtitleInfo.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/SubtitleInfo.kt
deleted file mode 100644
index 1883dfb0..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/SubtitleInfo.kt
+++ /dev/null
@@ -1,9 +0,0 @@
-package no.iktdev.streamit.content.common.dto.reader
-
-import java.io.File
-
-data class SubtitleInfo(
- val inputFile: String,
- val collection: String,
- val language: String
-)
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/VideoInfo.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/VideoInfo.kt
deleted file mode 100644
index 1bed99bc..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/VideoInfo.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package no.iktdev.streamit.content.common.dto.reader
-
-abstract class VideoInfo(
- @Transient open val fullName: String
-)
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/work/ConvertWork.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/work/ConvertWork.kt
deleted file mode 100644
index 24fca8f9..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/work/ConvertWork.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package no.iktdev.streamit.content.common.dto.reader.work
-
-import java.util.*
-
-data class ConvertWork(
- val workId: String = UUID.randomUUID().toString(),
- val collection: String,
- val language: String,
- val inFile: String,
- val outFiles: List
-)
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/work/EncodeWork.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/work/EncodeWork.kt
deleted file mode 100644
index cc26a1ab..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/work/EncodeWork.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package no.iktdev.streamit.content.common.dto.reader.work
-
-import java.util.*
-
-data class EncodeWork(
- override val workId: String = UUID.randomUUID().toString(),
- override val collection: String,
- override val inFile: String,
- override val outFile: String,
- val arguments: List
-) : WorkBase(collection = collection, inFile = inFile, outFile = outFile)
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/work/ExtractWork.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/work/ExtractWork.kt
deleted file mode 100644
index 92585bd4..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/work/ExtractWork.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package no.iktdev.streamit.content.common.dto.reader.work
-
-import java.util.*
-
-data class ExtractWork(
- override val workId: String = UUID.randomUUID().toString(),
- override val collection: String,
- val language: String,
- override val inFile: String,
- val arguments: List,
- override val outFile: String,
- var produceConvertEvent: Boolean = true
-) : WorkBase(collection = collection, inFile = inFile, outFile = outFile)
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/work/WorkBase.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/work/WorkBase.kt
deleted file mode 100644
index a162ebcf..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/dto/reader/work/WorkBase.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package no.iktdev.streamit.content.common.dto.reader.work
-
-import java.util.UUID
-
-abstract class WorkBase(
- @Transient open val workId: String = UUID.randomUUID().toString(),
- @Transient open val collection: String,
- @Transient open val inFile: String,
- @Transient open val outFile: String
-)
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/streams/SubtitleStreamSelector.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/streams/SubtitleStreamSelector.kt
deleted file mode 100644
index 1c362194..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/streams/SubtitleStreamSelector.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-package no.iktdev.streamit.content.common.streams
-
-class SubtitleStreamSelector(val streams: List) {
-
- fun getCandidateForConversion(): List {
- val languageGrouped = getDesiredStreams().groupBy { it.tags.language ?: "eng" }
- val priority = listOf("subrip", "srt", "webvtt", "vtt", "ass")
-
- val result = mutableListOf()
- for ((language, streams) in languageGrouped) {
- val selectedStream = streams.firstOrNull { it.codec_name in priority }
- if (selectedStream != null) {
- result.add(selectedStream)
- }
- }
- return result
- }
-
- fun getDesiredStreams(): List {
- val desiredTypes = listOf(SubtitleType.DEFAULT, SubtitleType.CC, SubtitleType.SHD)
- val typeGuesser = SubtitleTypeGuesser()
- val codecFiltered = streams.filter { getFormatToCodec(it.codec_name) != null }
-
- val mappedToType = codecFiltered.map { typeGuesser.guessType(it) to it }.filter { it.first in desiredTypes }
- .groupBy { it.second.tags.language ?: "eng" }
- .mapValues { entry ->
- val languageStreams = entry.value
- val sortedStreams = languageStreams.sortedBy { desiredTypes.indexOf(it.first) }
- sortedStreams.firstOrNull()?.second
- }.mapNotNull { it.value }
-
-
- return mappedToType
- }
-
-
- fun getFormatToCodec(codecName: String): String? {
- return when(codecName) {
- "ass" -> "ass"
- "subrip" -> "srt"
- "webvtt", "vtt" -> "vtt"
- "smi" -> "smi"
- "hdmv_pgs_subtitle" -> null
- else -> null
- }
- }
-}
\ No newline at end of file
diff --git a/CommonCode/src/main/java/no/iktdev/streamit/content/common/streams/SubtitleTypeGuesser.kt b/CommonCode/src/main/java/no/iktdev/streamit/content/common/streams/SubtitleTypeGuesser.kt
deleted file mode 100644
index 595a48c0..00000000
--- a/CommonCode/src/main/java/no/iktdev/streamit/content/common/streams/SubtitleTypeGuesser.kt
+++ /dev/null
@@ -1,56 +0,0 @@
-package no.iktdev.streamit.content.common.streams
-
-/**
- * @property SHD is Hard of hearing
- * @property CC is Closed-Captions
- * @property NON_DIALOGUE is for Signs or Song (as in lyrics)
- * @property DEFAULT is default subtitle as dialog
- */
-enum class SubtitleType {
- SHD,
- CC,
- NON_DIALOGUE,
- DEFAULT
-}
-
-class SubtitleTypeGuesser {
- fun guessType(subtitle: SubtitleStream): SubtitleType {
- if (subtitle.tags != null && subtitle.tags.title?.isBlank() == false) {
- val title = subtitle.tags.title!!
- if (title.lowercase().contains("song")
- || title.lowercase().contains("songs")
- || title.lowercase().contains("sign")
- || title.lowercase().contains("signs")
- ) {
- return SubtitleType.NON_DIALOGUE
- }
- if (getSubtitleType(title, listOf("cc", "closed caption"),
- SubtitleType.CC
- ) == SubtitleType.CC
- ) return SubtitleType.CC
- if (getSubtitleType(title, listOf("shd", "hh", "Hard-of-Hearing", "Hard of Hearing"),
- SubtitleType.SHD
- ) == SubtitleType.SHD
- ) return SubtitleType.SHD
- }
-
- return SubtitleType.DEFAULT
- }
-
- private fun getSubtitleType(title: String, keys: List, expected: SubtitleType): SubtitleType {
- val bracedText = Regex.fromLiteral("[(](?<=\\().*?(?=\\))[)]").find(title)
- val brakedText = Regex.fromLiteral("[(](?<=\\().*?(?=\\))[)]").find(title)
-
- if (bracedText == null || brakedText == null)
- return SubtitleType.DEFAULT
-
- var text = bracedText.value.ifBlank { brakedText.value }
- text = Regex.fromLiteral("[\\[\\]()-.,_+]").replace(text, "")
-
- return if (keys.find { item ->
- item.lowercase().contains(text.lowercase()) || text.lowercase().contains(item.lowercase())
- }.isNullOrEmpty()) SubtitleType.DEFAULT else expected
-
- }
-}
-
diff --git a/CommonCode/src/test/java/no/iktdev/streamit/content/common/NamingTest.kt b/CommonCode/src/test/java/no/iktdev/streamit/content/common/NamingTest.kt
deleted file mode 100644
index 5870942e..00000000
--- a/CommonCode/src/test/java/no/iktdev/streamit/content/common/NamingTest.kt
+++ /dev/null
@@ -1,62 +0,0 @@
-package no.iktdev.streamit.content.common
-
-import no.iktdev.streamit.content.common.dto.reader.FileResult
-import no.iktdev.streamit.library.kafka.dto.Message
-import no.iktdev.streamit.library.kafka.dto.Status
-import no.iktdev.streamit.library.kafka.dto.StatusType
-import org.assertj.core.api.Assertions.assertThat
-import org.junit.jupiter.api.Named
-import org.junit.jupiter.api.Test
-import org.junit.jupiter.params.ParameterizedTest
-import org.junit.jupiter.params.provider.MethodSource
-
-class NamingTest {
-
- @Test
- fun checkThatBracketsGetsRemoved() {
- val input = "[AAA] Sir fancy - 13 [1080p HEVC][000000]"
- val name = Naming(input)
- assertThat(name.guessDesiredTitle()).doesNotContain("[")
-
- }
-
- @Test
- fun checkThatSeasonIsStripped() {
- val input = "[AAA] Kafka Topic S2 - 01"
- val naming = Naming(input)
- val result = naming.guessDesiredTitle()
- assertThat(result).isEqualTo("Kafka Topic")
- }
-
-/*
- @ParameterizedTest
- @MethodSource("serieOnlyTest")
- fun ensureOnlySerieAndDecodedCorrectly(testData: TestData) {
- val naming = Naming(testData.input).getName() ?: throw NullPointerException("Named is null")
- assertThat(naming.type).isEqualTo("serie")
- assertThat(naming.season).isEqualTo(testData.expected.season)
- assertThat(naming.episode).isEqualTo(testData.expected.episode)
- }
-
- @Test
- fun testTest() {
- val tmp = TestData(Naming.Name(title = "Demo", season = 1, episode = 1, type = "serie"), "[Kametsu] Ghost in the Shell Arise - 05 - Pyrophoric Cult (BD 1080p Hi10 FLAC) [13FF85A7]")
- val naming = Naming(tmp.input).getName()
- assertThat(naming).isNotNull()
- }
-
-
- fun serieOnlyTest(): List> {
- return listOf(
- Named.of("Is defined", TestData(Naming.Name(title = "Demo", season = 1, episode = 1, type = "serie"), "Demo - S01E01")),
- Named.of("Is decoded", TestData(Naming.Name("Demo!", "serie", season = 1, episode = 1), "[TMP] Demo! - 03")),
- Named.of("Is only Episode", TestData(Naming.Name("Demo", "serie", 1, 1), "Demo E1"))
- )
- }*/
-
-/*
- data class TestData(
- val expected: Naming.Name,
- val input: String
- )*/
-}
\ No newline at end of file
diff --git a/Convert/.gitignore b/Convert/.gitignore
deleted file mode 100644
index b63da455..00000000
--- a/Convert/.gitignore
+++ /dev/null
@@ -1,42 +0,0 @@
-.gradle
-build/
-!gradle/wrapper/gradle-wrapper.jar
-!**/src/main/**/build/
-!**/src/test/**/build/
-
-### IntelliJ IDEA ###
-.idea/modules.xml
-.idea/jarRepositories.xml
-.idea/compiler.xml
-.idea/libraries/
-*.iws
-*.iml
-*.ipr
-out/
-!**/src/main/**/out/
-!**/src/test/**/out/
-
-### Eclipse ###
-.apt_generated
-.classpath
-.factorypath
-.project
-.settings
-.springBeans
-.sts4-cache
-bin/
-!**/src/main/**/bin/
-!**/src/test/**/bin/
-
-### NetBeans ###
-/nbproject/private/
-/nbbuild/
-/dist/
-/nbdist/
-/.nb-gradle/
-
-### VS Code ###
-.vscode/
-
-### Mac OS ###
-.DS_Store
\ No newline at end of file
diff --git a/Convert/Dockerfile b/Convert/Dockerfile
deleted file mode 100644
index 973b9031..00000000
--- a/Convert/Dockerfile
+++ /dev/null
@@ -1,4 +0,0 @@
-FROM bskjon/azuljava:17
-EXPOSE 8080
-
-COPY ./build/libs/converter.jar /usr/share/app/app.jar
\ No newline at end of file
diff --git a/Convert/gradle/wrapper/gradle-wrapper.jar b/Convert/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 249e5832..00000000
Binary files a/Convert/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/Convert/gradle/wrapper/gradle-wrapper.properties b/Convert/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 249c54e8..00000000
--- a/Convert/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Sun Jul 23 01:48:17 CEST 2023
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/Convert/gradlew b/Convert/gradlew
deleted file mode 100644
index 1b6c7873..00000000
--- a/Convert/gradlew
+++ /dev/null
@@ -1,234 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright © 2015-2021 the original authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##############################################################################
-#
-# Gradle start up script for POSIX generated by Gradle.
-#
-# Important for running:
-#
-# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
-# noncompliant, but you have some other compliant shell such as ksh or
-# bash, then to run this script, type that shell name before the whole
-# command line, like:
-#
-# ksh Gradle
-#
-# Busybox and similar reduced shells will NOT work, because this script
-# requires all of these POSIX shell features:
-# * functions;
-# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
-# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
-# * compound commands having a testable exit status, especially «case»;
-# * various built-in commands including «command», «set», and «ulimit».
-#
-# Important for patching:
-#
-# (2) This script targets any POSIX shell, so it avoids extensions provided
-# by Bash, Ksh, etc; in particular arrays are avoided.
-#
-# The "traditional" practice of packing multiple parameters into a
-# space-separated string is a well documented source of bugs and security
-# problems, so this is (mostly) avoided, by progressively accumulating
-# options in "$@", and eventually passing that to Java.
-#
-# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
-# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
-# see the in-line comments for details.
-#
-# There are tweaks for specific operating systems such as AIX, CygWin,
-# Darwin, MinGW, and NonStop.
-#
-# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
-# within the Gradle project.
-#
-# You can find Gradle at https://github.com/gradle/gradle/.
-#
-##############################################################################
-
-# Attempt to set APP_HOME
-
-# Resolve links: $0 may be a link
-app_path=$0
-
-# Need this for daisy-chained symlinks.
-while
- APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
- [ -h "$app_path" ]
-do
- ls=$( ls -ld "$app_path" )
- link=${ls#*' -> '}
- case $link in #(
- /*) app_path=$link ;; #(
- *) app_path=$APP_HOME$link ;;
- esac
-done
-
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-APP_NAME="Gradle"
-APP_BASE_NAME=${0##*/}
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD=maximum
-
-warn () {
- echo "$*"
-} >&2
-
-die () {
- echo
- echo "$*"
- echo
- exit 1
-} >&2
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "$( uname )" in #(
- CYGWIN* ) cygwin=true ;; #(
- Darwin* ) darwin=true ;; #(
- MSYS* | MINGW* ) msys=true ;; #(
- NONSTOP* ) nonstop=true ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD=$JAVA_HOME/jre/sh/java
- else
- JAVACMD=$JAVA_HOME/bin/java
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD=java
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
- case $MAX_FD in #(
- max*)
- MAX_FD=$( ulimit -H -n ) ||
- warn "Could not query maximum file descriptor limit"
- esac
- case $MAX_FD in #(
- '' | soft) :;; #(
- *)
- ulimit -n "$MAX_FD" ||
- warn "Could not set maximum file descriptor limit to $MAX_FD"
- esac
-fi
-
-# Collect all arguments for the java command, stacking in reverse order:
-# * args from the command line
-# * the main class name
-# * -classpath
-# * -D...appname settings
-# * --module-path (only if needed)
-# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if "$cygwin" || "$msys" ; then
- APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
- CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
-
- JAVACMD=$( cygpath --unix "$JAVACMD" )
-
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- for arg do
- if
- case $arg in #(
- -*) false ;; # don't mess with options #(
- /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
- [ -e "$t" ] ;; #(
- *) false ;;
- esac
- then
- arg=$( cygpath --path --ignore --mixed "$arg" )
- fi
- # Roll the args list around exactly as many times as the number of
- # args, so each arg winds up back in the position where it started, but
- # possibly modified.
- #
- # NB: a `for` loop captures its iteration list before it begins, so
- # changing the positional parameters here affects neither the number of
- # iterations, nor the values presented in `arg`.
- shift # remove old arg
- set -- "$@" "$arg" # push replacement arg
- done
-fi
-
-# Collect all arguments for the java command;
-# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
-# shell script including quotes and variable substitutions, so put them in
-# double quotes to make sure that they get re-expanded; and
-# * put everything else in single quotes, so that it's not re-expanded.
-
-set -- \
- "-Dorg.gradle.appname=$APP_BASE_NAME" \
- -classpath "$CLASSPATH" \
- org.gradle.wrapper.GradleWrapperMain \
- "$@"
-
-# Use "xargs" to parse quoted args.
-#
-# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
-#
-# In Bash we could simply go:
-#
-# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
-# set -- "${ARGS[@]}" "$@"
-#
-# but POSIX shell has neither arrays nor command substitution, so instead we
-# post-process each arg (as a line of input to sed) to backslash-escape any
-# character that might be a shell metacharacter, then use eval to reverse
-# that process (while maintaining the separation between arguments), and wrap
-# the whole thing up as a single "set" statement.
-#
-# This will of course break if any of these variables contains a newline or
-# an unmatched quote.
-#
-
-eval "set -- $(
- printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
- xargs -n1 |
- sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
- tr '\n' ' '
- )" '"$@"'
-
-exec "$JAVACMD" "$@"
diff --git a/Convert/gradlew.bat b/Convert/gradlew.bat
deleted file mode 100644
index 107acd32..00000000
--- a/Convert/gradlew.bat
+++ /dev/null
@@ -1,89 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/Convert/settings.gradle.kts b/Convert/settings.gradle.kts
deleted file mode 100644
index b3c13572..00000000
--- a/Convert/settings.gradle.kts
+++ /dev/null
@@ -1,4 +0,0 @@
-rootProject.name = "Convert"
-
-include(":CommonCode")
-project(":CommonCode").projectDir = File("../CommonCode")
\ No newline at end of file
diff --git a/Convert/src/main/kotlin/no/iktdev/streamit/content/convert/ConvertApplication.kt b/Convert/src/main/kotlin/no/iktdev/streamit/content/convert/ConvertApplication.kt
deleted file mode 100644
index 4486842d..00000000
--- a/Convert/src/main/kotlin/no/iktdev/streamit/content/convert/ConvertApplication.kt
+++ /dev/null
@@ -1,19 +0,0 @@
-package no.iktdev.streamit.content.convert
-
-import mu.KotlinLogging
-import org.springframework.boot.autoconfigure.SpringBootApplication
-import org.springframework.boot.runApplication
-import org.springframework.context.ApplicationContext
-
-@SpringBootApplication
-class ConvertApplication
-
-private var context: ApplicationContext? = null
-@Suppress("unused")
-fun getContext(): ApplicationContext? {
- return context
-}
-fun main(args: Array) {
- context = runApplication(*args)
-}
-private val logger = KotlinLogging.logger {}
\ No newline at end of file
diff --git a/Convert/src/main/kotlin/no/iktdev/streamit/content/convert/ConvertEnv.kt b/Convert/src/main/kotlin/no/iktdev/streamit/content/convert/ConvertEnv.kt
deleted file mode 100644
index 9d3ce1b6..00000000
--- a/Convert/src/main/kotlin/no/iktdev/streamit/content/convert/ConvertEnv.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-package no.iktdev.streamit.content.convert
-
-class ConvertEnv {
- companion object {
- val allowOverwrite = System.getenv("ALLOW_OVERWRITE").toBoolean() ?: false
- }
-}
\ No newline at end of file
diff --git a/Convert/src/main/kotlin/no/iktdev/streamit/content/convert/ConvertRunner.kt b/Convert/src/main/kotlin/no/iktdev/streamit/content/convert/ConvertRunner.kt
deleted file mode 100644
index 00005c49..00000000
--- a/Convert/src/main/kotlin/no/iktdev/streamit/content/convert/ConvertRunner.kt
+++ /dev/null
@@ -1,88 +0,0 @@
-package no.iktdev.streamit.content.convert
-
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.delay
-import kotlinx.coroutines.withContext
-import mu.KotlinLogging
-import no.iktdev.library.subtitle.Syncro
-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.streamit.content.common.dto.reader.SubtitleInfo
-import no.iktdev.streamit.content.common.dto.reader.work.ConvertWork
-import no.iktdev.streamit.content.common.dto.reader.work.ExtractWork
-import no.iktdev.streamit.content.common.streams.SubtitleType
-import java.io.File
-
-private val logger = KotlinLogging.logger {}
-
-
-class ConvertRunner(val referenceId: String, val listener: IConvertListener) {
-
- private fun getReade(inputFile: File): BaseReader? {
- return Reader(inputFile).getSubtitleReader()
- }
- private val maxDelay = 1000 * 5
- private var currentDelayed = 0
- suspend fun readAndConvert (subtitleInfo: SubtitleInfo) {
- val inFile = File(subtitleInfo.inputFile)
- while (!inFile.canRead()) {
- if (currentDelayed > maxDelay) {
- logger.error { "Could not out wait lock on file!" }
- withContext(Dispatchers.Default) {
- listener.onError(referenceId, subtitleInfo, "Cant read file!")
- }
- return
- }
- logger.error { "$referenceId ${subtitleInfo.inputFile}: Cant read file!" }
- delay(500)
- currentDelayed += 500
- }
- val reader = getReade(inFile)
- val dialogs = reader?.read()
- if (dialogs.isNullOrEmpty()) {
- logger.error { "$referenceId ${subtitleInfo.inputFile}: Dialogs read from file is null or empty!" }
- withContext(Dispatchers.Default) {
- listener.onError(referenceId, subtitleInfo, "Dialogs read from file is null or empty!")
- }
- return
- }
-
- withContext(Dispatchers.Default) {
- listener.onStarted(referenceId)
- }
-
- val filtered = dialogs.filter { !it.ignore && it.type !in listOf(DialogType.SIGN_SONG, DialogType.CAPTION) }
-
- val syncedDialogs = Syncro().sync(filtered)
-
- try {
- val converted = Export(inFile, syncedDialogs, ConvertEnv.allowOverwrite).write()
- val item = ConvertWork(
- inFile = inFile.absolutePath,
- collection = subtitleInfo.collection,
- language = subtitleInfo.language,
- outFiles = converted.map { it.absolutePath }
- )
-
- withContext(Dispatchers.Default) {
- listener.onEnded(referenceId, subtitleInfo, work = item)
- }
- } catch (e: Exception) {
- e.printStackTrace()
- withContext(Dispatchers.Default) {
- listener.onError(referenceId, subtitleInfo, "See log")
- }
- }
-
- }
-
-
-}
-
-interface IConvertListener {
- fun onStarted(referenceId: String)
- fun onError(referenceId: String, info: SubtitleInfo, message: String)
- fun onEnded(referenceId: String, info: SubtitleInfo, work: ConvertWork)
-}
\ No newline at end of file
diff --git a/Convert/src/main/kotlin/no/iktdev/streamit/content/convert/kafka/SubtitleConsumer.kt b/Convert/src/main/kotlin/no/iktdev/streamit/content/convert/kafka/SubtitleConsumer.kt
deleted file mode 100644
index f914adb1..00000000
--- a/Convert/src/main/kotlin/no/iktdev/streamit/content/convert/kafka/SubtitleConsumer.kt
+++ /dev/null
@@ -1,69 +0,0 @@
-package no.iktdev.streamit.content.convert.kafka
-
-import kotlinx.coroutines.launch
-import mu.KotlinLogging
-import no.iktdev.exfl.coroutines.Coroutines
-import no.iktdev.streamit.content.common.CommonConfig
-import no.iktdev.streamit.content.common.DefaultKafkaReader
-import no.iktdev.streamit.content.common.dto.reader.SubtitleInfo
-import no.iktdev.streamit.content.common.dto.reader.work.ConvertWork
-import no.iktdev.streamit.content.common.dto.reader.work.ExtractWork
-import no.iktdev.streamit.content.convert.ConvertRunner
-import no.iktdev.streamit.content.convert.IConvertListener
-import no.iktdev.streamit.library.kafka.KafkaEvents
-import no.iktdev.streamit.library.kafka.dto.Message
-import no.iktdev.streamit.library.kafka.dto.Status
-import no.iktdev.streamit.library.kafka.dto.StatusType
-import no.iktdev.streamit.library.kafka.listener.SimpleMessageListener
-import org.apache.kafka.clients.consumer.ConsumerRecord
-import org.springframework.stereotype.Service
-import java.io.File
-
-private val logger = KotlinLogging.logger {}
-
-@Service
-class SubtitleConsumer: DefaultKafkaReader("convertHandlerSubtitle"), IConvertListener {
-
- private final val listener = object : SimpleMessageListener(
- topic = CommonConfig.kafkaTopic,
- consumer = defaultConsumer,
- accepts = listOf(KafkaEvents.EVENT_ENCODER_SUBTITLE_FILE_ENDED.event)
- ) {
- override fun onMessageReceived(data: ConsumerRecord) {
- val referenceId = data.value().referenceId
- val workResult = data.value().dataAs(ExtractWork::class.java)
-
- if (workResult?.produceConvertEvent == true) {
- logger.info { "Using ${data.value().referenceId} ${workResult.outFile} as it is a convert candidate" }
- val convertWork = SubtitleInfo(
- inputFile = workResult.outFile,
- collection = workResult.collection,
- language = workResult.language,
- )
- produceMessage(KafkaEvents.EVENT_CONVERTER_SUBTITLE_FILE_STARTED, Message(referenceId = referenceId, Status(statusType = StatusType.PENDING)), convertWork)
- Coroutines.io().launch {
- ConvertRunner(referenceId, this@SubtitleConsumer).readAndConvert(convertWork)
- }
- } else {
- logger.info { "Skipping ${data.value().referenceId} ${workResult?.outFile} as it is not a convert candidate" }
- }
- }
- }
-
- init {
- listener.listen()
- }
-
- override fun onStarted(referenceId: String) {
- produceMessage(KafkaEvents.EVENT_CONVERTER_SUBTITLE_FILE_STARTED, Message(referenceId = referenceId, Status(statusType = StatusType.SUCCESS)), null)
- }
-
- override fun onError(referenceId: String, info: SubtitleInfo, message: String) {
- produceMessage(KafkaEvents.EVENT_CONVERTER_SUBTITLE_FILE_ENDED, Message(referenceId = referenceId, Status(statusType = StatusType.ERROR, message = message)), null)
- }
-
- override fun onEnded(referenceId: String, info: SubtitleInfo, work: ConvertWork) {
- produceMessage(KafkaEvents.EVENT_CONVERTER_SUBTITLE_FILE_ENDED, Message(referenceId = referenceId, Status(statusType = StatusType.SUCCESS)), work)
- }
-
-}
\ No newline at end of file
diff --git a/Convert/src/main/resources/application.properties b/Convert/src/main/resources/application.properties
deleted file mode 100644
index b67553fc..00000000
--- a/Convert/src/main/resources/application.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-spring.output.ansi.enabled=always
-logging.level.org.apache.kafka=INFO
-#logging.level.root=DEBUG
diff --git a/Encode/.gitignore b/Encode/.gitignore
deleted file mode 100644
index b63da455..00000000
--- a/Encode/.gitignore
+++ /dev/null
@@ -1,42 +0,0 @@
-.gradle
-build/
-!gradle/wrapper/gradle-wrapper.jar
-!**/src/main/**/build/
-!**/src/test/**/build/
-
-### IntelliJ IDEA ###
-.idea/modules.xml
-.idea/jarRepositories.xml
-.idea/compiler.xml
-.idea/libraries/
-*.iws
-*.iml
-*.ipr
-out/
-!**/src/main/**/out/
-!**/src/test/**/out/
-
-### Eclipse ###
-.apt_generated
-.classpath
-.factorypath
-.project
-.settings
-.springBeans
-.sts4-cache
-bin/
-!**/src/main/**/bin/
-!**/src/test/**/bin/
-
-### NetBeans ###
-/nbproject/private/
-/nbbuild/
-/dist/
-/nbdist/
-/.nb-gradle/
-
-### VS Code ###
-.vscode/
-
-### Mac OS ###
-.DS_Store
\ No newline at end of file
diff --git a/Encode/Dockerfile b/Encode/Dockerfile
deleted file mode 100644
index cd8a8172..00000000
--- a/Encode/Dockerfile
+++ /dev/null
@@ -1,4 +0,0 @@
-FROM bskjon/debian-azuljava17-ffmpeg:latest
-EXPOSE 8080
-
-COPY ./build/libs/encoder.jar /usr/share/app/app.jar
\ No newline at end of file
diff --git a/Encode/build.gradle.kts b/Encode/build.gradle.kts
deleted file mode 100644
index 712ddcd3..00000000
--- a/Encode/build.gradle.kts
+++ /dev/null
@@ -1,66 +0,0 @@
-import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
-
-plugins {
- kotlin("jvm") version "1.8.21"
- id("org.springframework.boot") version "2.5.5"
- id("io.spring.dependency-management") version "1.0.11.RELEASE"
- kotlin("plugin.spring") version "1.5.31"
-}
-
-group = "no.iktdev.streamit.content"
-version = "1.0-SNAPSHOT"
-
-repositories {
- mavenCentral()
- maven("https://jitpack.io")
- maven {
- url = uri("https://reposilite.iktdev.no/releases")
- }
- maven {
- url = uri("https://reposilite.iktdev.no/snapshots")
- }
-}
-dependencies {
- implementation(project(":CommonCode"))
-
- implementation("no.iktdev.streamit.library:streamit-library-kafka:0.0.2-alpha84")
- implementation("no.iktdev:exfl:0.0.13-SNAPSHOT")
-
- implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1")
-
-
- implementation("com.github.pgreze:kotlin-process:1.3.1")
- implementation("io.github.microutils:kotlin-logging-jvm:2.0.11")
-
- implementation("com.google.code.gson:gson:2.8.9")
-
- implementation("org.springframework.boot:spring-boot-starter-web")
- implementation("org.springframework.boot:spring-boot-starter:2.7.0")
- implementation("org.springframework.kafka:spring-kafka:2.8.5")
- implementation("org.springframework.boot:spring-boot-starter-websocket:2.6.3")
-
-
-
- testImplementation("junit:junit:4.13.2")
- testImplementation("org.junit.jupiter:junit-jupiter")
- testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.1")
- testImplementation("org.junit.jupiter:junit-jupiter-params:5.8.1")
- testImplementation("org.assertj:assertj-core:3.4.1")
- testImplementation("org.mockito:mockito-core:3.+")
-
-}
-
-tasks.test {
- useJUnitPlatform()
-}
-
-tasks.bootJar {
- archiveFileName.set("encoder.jar")
- launchScript()
-}
-
-tasks.jar {
- archivesName.set("encoder.jar")
- archiveBaseName.set("encoder")
-}
-archivesName.set("encoder.jar")
\ No newline at end of file
diff --git a/Encode/gradle/wrapper/gradle-wrapper.jar b/Encode/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 249e5832..00000000
Binary files a/Encode/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/Encode/gradle/wrapper/gradle-wrapper.properties b/Encode/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index ab96900a..00000000
--- a/Encode/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Tue Jul 11 02:14:45 CEST 2023
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/Encode/gradlew b/Encode/gradlew
deleted file mode 100644
index 1b6c7873..00000000
--- a/Encode/gradlew
+++ /dev/null
@@ -1,234 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright © 2015-2021 the original authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##############################################################################
-#
-# Gradle start up script for POSIX generated by Gradle.
-#
-# Important for running:
-#
-# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
-# noncompliant, but you have some other compliant shell such as ksh or
-# bash, then to run this script, type that shell name before the whole
-# command line, like:
-#
-# ksh Gradle
-#
-# Busybox and similar reduced shells will NOT work, because this script
-# requires all of these POSIX shell features:
-# * functions;
-# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
-# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
-# * compound commands having a testable exit status, especially «case»;
-# * various built-in commands including «command», «set», and «ulimit».
-#
-# Important for patching:
-#
-# (2) This script targets any POSIX shell, so it avoids extensions provided
-# by Bash, Ksh, etc; in particular arrays are avoided.
-#
-# The "traditional" practice of packing multiple parameters into a
-# space-separated string is a well documented source of bugs and security
-# problems, so this is (mostly) avoided, by progressively accumulating
-# options in "$@", and eventually passing that to Java.
-#
-# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
-# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
-# see the in-line comments for details.
-#
-# There are tweaks for specific operating systems such as AIX, CygWin,
-# Darwin, MinGW, and NonStop.
-#
-# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
-# within the Gradle project.
-#
-# You can find Gradle at https://github.com/gradle/gradle/.
-#
-##############################################################################
-
-# Attempt to set APP_HOME
-
-# Resolve links: $0 may be a link
-app_path=$0
-
-# Need this for daisy-chained symlinks.
-while
- APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
- [ -h "$app_path" ]
-do
- ls=$( ls -ld "$app_path" )
- link=${ls#*' -> '}
- case $link in #(
- /*) app_path=$link ;; #(
- *) app_path=$APP_HOME$link ;;
- esac
-done
-
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-APP_NAME="Gradle"
-APP_BASE_NAME=${0##*/}
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD=maximum
-
-warn () {
- echo "$*"
-} >&2
-
-die () {
- echo
- echo "$*"
- echo
- exit 1
-} >&2
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "$( uname )" in #(
- CYGWIN* ) cygwin=true ;; #(
- Darwin* ) darwin=true ;; #(
- MSYS* | MINGW* ) msys=true ;; #(
- NONSTOP* ) nonstop=true ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD=$JAVA_HOME/jre/sh/java
- else
- JAVACMD=$JAVA_HOME/bin/java
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD=java
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
- case $MAX_FD in #(
- max*)
- MAX_FD=$( ulimit -H -n ) ||
- warn "Could not query maximum file descriptor limit"
- esac
- case $MAX_FD in #(
- '' | soft) :;; #(
- *)
- ulimit -n "$MAX_FD" ||
- warn "Could not set maximum file descriptor limit to $MAX_FD"
- esac
-fi
-
-# Collect all arguments for the java command, stacking in reverse order:
-# * args from the command line
-# * the main class name
-# * -classpath
-# * -D...appname settings
-# * --module-path (only if needed)
-# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if "$cygwin" || "$msys" ; then
- APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
- CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
-
- JAVACMD=$( cygpath --unix "$JAVACMD" )
-
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- for arg do
- if
- case $arg in #(
- -*) false ;; # don't mess with options #(
- /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
- [ -e "$t" ] ;; #(
- *) false ;;
- esac
- then
- arg=$( cygpath --path --ignore --mixed "$arg" )
- fi
- # Roll the args list around exactly as many times as the number of
- # args, so each arg winds up back in the position where it started, but
- # possibly modified.
- #
- # NB: a `for` loop captures its iteration list before it begins, so
- # changing the positional parameters here affects neither the number of
- # iterations, nor the values presented in `arg`.
- shift # remove old arg
- set -- "$@" "$arg" # push replacement arg
- done
-fi
-
-# Collect all arguments for the java command;
-# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
-# shell script including quotes and variable substitutions, so put them in
-# double quotes to make sure that they get re-expanded; and
-# * put everything else in single quotes, so that it's not re-expanded.
-
-set -- \
- "-Dorg.gradle.appname=$APP_BASE_NAME" \
- -classpath "$CLASSPATH" \
- org.gradle.wrapper.GradleWrapperMain \
- "$@"
-
-# Use "xargs" to parse quoted args.
-#
-# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
-#
-# In Bash we could simply go:
-#
-# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
-# set -- "${ARGS[@]}" "$@"
-#
-# but POSIX shell has neither arrays nor command substitution, so instead we
-# post-process each arg (as a line of input to sed) to backslash-escape any
-# character that might be a shell metacharacter, then use eval to reverse
-# that process (while maintaining the separation between arguments), and wrap
-# the whole thing up as a single "set" statement.
-#
-# This will of course break if any of these variables contains a newline or
-# an unmatched quote.
-#
-
-eval "set -- $(
- printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
- xargs -n1 |
- sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
- tr '\n' ' '
- )" '"$@"'
-
-exec "$JAVACMD" "$@"
diff --git a/Encode/gradlew.bat b/Encode/gradlew.bat
deleted file mode 100644
index 107acd32..00000000
--- a/Encode/gradlew.bat
+++ /dev/null
@@ -1,89 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/Encode/settings.gradle.kts b/Encode/settings.gradle.kts
deleted file mode 100644
index 783ff466..00000000
--- a/Encode/settings.gradle.kts
+++ /dev/null
@@ -1,4 +0,0 @@
-rootProject.name = "Encode"
-
-include(":CommonCode")
-project(":CommonCode").projectDir = File("../CommonCode")
\ No newline at end of file
diff --git a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/Configuration.kt b/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/Configuration.kt
deleted file mode 100644
index add5e85e..00000000
--- a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/Configuration.kt
+++ /dev/null
@@ -1,35 +0,0 @@
-package no.iktdev.streamit.content.encode
-
-import org.springframework.beans.factory.annotation.Value
-import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory
-import org.springframework.boot.web.server.WebServerFactoryCustomizer
-import org.springframework.context.annotation.Bean
-import org.springframework.context.annotation.Configuration
-import org.springframework.messaging.simp.config.MessageBrokerRegistry
-import org.springframework.web.bind.annotation.RestController
-import org.springframework.web.method.HandlerTypePredicate
-import org.springframework.web.servlet.config.annotation.CorsRegistry
-import org.springframework.web.servlet.config.annotation.PathMatchConfigurer
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer
-import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker
-import org.springframework.web.socket.config.annotation.StompEndpointRegistry
-import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer
-
-@Configuration
-@EnableWebSocketMessageBroker
-class WebSocketConfig : WebSocketMessageBrokerConfigurer {
-
- override fun registerStompEndpoints(registry: StompEndpointRegistry) {
- registry.addEndpoint("/ws")
- // .setAllowedOrigins("*")
- .withSockJS()
-
- registry.addEndpoint("/")
- }
-
- override fun configureMessageBroker(registry: MessageBrokerRegistry) {
- registry.enableSimpleBroker("/topic")
- registry.setApplicationDestinationPrefixes("/app")
- }
-}
\ No newline at end of file
diff --git a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/EncodeEnv.kt b/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/EncodeEnv.kt
deleted file mode 100644
index ac83adda..00000000
--- a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/EncodeEnv.kt
+++ /dev/null
@@ -1,9 +0,0 @@
-package no.iktdev.streamit.content.encode
-
-class EncodeEnv {
- companion object {
- val ffmpeg: String = System.getenv("SUPPORTING_EXECUTABLE_FFMPEG") ?: "ffmpeg"
- val allowOverwrite = System.getenv("ALLOW_OVERWRITE").toBoolean() ?: false
- val maxRunners: Int = try {System.getenv("SIMULTANEOUS_ENCODE_RUNNERS").toIntOrNull() ?: 1 } catch (e: Exception) {1}
- }
-}
\ No newline at end of file
diff --git a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/EncodeWorkConsumer.kt b/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/EncodeWorkConsumer.kt
deleted file mode 100644
index 39741a02..00000000
--- a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/EncodeWorkConsumer.kt
+++ /dev/null
@@ -1,60 +0,0 @@
-package no.iktdev.streamit.content.encode
-
-import com.google.gson.Gson
-import mu.KotlinLogging
-import no.iktdev.streamit.content.common.CommonConfig
-import no.iktdev.streamit.content.common.DefaultKafkaReader
-import no.iktdev.streamit.content.common.deserializers.DeserializerRegistry
-import no.iktdev.streamit.content.common.deserializers.EncodeWorkDeserializer
-import no.iktdev.streamit.content.encode.runner.RunnerCoordinator
-import no.iktdev.streamit.library.kafka.KafkaEvents
-import no.iktdev.streamit.library.kafka.consumers.DefaultConsumer
-import no.iktdev.streamit.library.kafka.dto.Message
-import no.iktdev.streamit.library.kafka.listener.SimpleMessageListener
-import no.iktdev.streamit.library.kafka.listener.deserializer.IMessageDataDeserialization
-import no.iktdev.streamit.library.kafka.listener.deserializer.deserializeIfSuccessful
-import org.apache.kafka.clients.consumer.ConsumerRecord
-import org.springframework.stereotype.Service
-
-private val logger = KotlinLogging.logger {}
-
-@Service
-class EncodeWorkConsumer(private val runnerCoordinator: RunnerCoordinator) : DefaultKafkaReader("encodeWork") {
-
- lateinit var encodeInstructionsListener: EncodeInformationListener
-
- init {
- encodeInstructionsListener = EncodeInformationListener(
- topic = CommonConfig.kafkaTopic,
- defaultConsumer,
- accepts = listOf(KafkaEvents.EVENT_READER_ENCODE_GENERATED_VIDEO.event),
- runnerCoordinator
- )
- encodeInstructionsListener.listen()
- }
-
- override fun loadDeserializers(): Map> {
- return DeserializerRegistry.getEventToDeserializer(
- KafkaEvents.EVENT_READER_ENCODE_GENERATED_VIDEO
- )
- }
-
-
- class EncodeInformationListener(
- topic: String,
- consumer: DefaultConsumer,
- accepts: List,
- val runnerCoordinator: RunnerCoordinator
- ) : SimpleMessageListener(
- topic, consumer,
- accepts
- ) {
- override fun onMessageReceived(data: ConsumerRecord) {
- logger.info { "\nreferenceId: ${data.value().referenceId} \nEvent: ${data.key()} \nData:\n${Gson().toJson(data.value())}" }
- val message = data.value().apply {
- this.data = EncodeWorkDeserializer().deserializeIfSuccessful(data.value())
- }
- runnerCoordinator.addEncodeMessageToQueue(message)
- }
- }
-}
\ No newline at end of file
diff --git a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/EncoderApplication.kt b/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/EncoderApplication.kt
deleted file mode 100644
index 4177968d..00000000
--- a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/EncoderApplication.kt
+++ /dev/null
@@ -1,35 +0,0 @@
-package no.iktdev.streamit.content.encode
-
-import no.iktdev.exfl.observable.ObservableMap
-import no.iktdev.exfl.observable.observableMapOf
-import no.iktdev.streamit.content.common.dto.WorkOrderItem
-import no.iktdev.streamit.content.encode.progress.Progress
-import org.springframework.boot.autoconfigure.SpringBootApplication
-import org.springframework.boot.runApplication
-import org.springframework.context.ApplicationContext
-
-@SpringBootApplication
-class EncoderApplication
-
-private var context: ApplicationContext? = null
-val progressMap = observableMapOf()
-
-@Suppress("unused")
-fun getContext(): ApplicationContext? {
- return context
-}
-fun main(args: Array) {
- context = runApplication(*args)
-}
-
-val encoderItems = ObservableMap()
-val extractItems = ObservableMap()
-
-/*val progress = ObservableMap().also {
- it.addListener(object: ObservableMap.Listener {
- override fun onPut(key: String, value: EncodeInformation) {
- super.onPut(key, value)
- logger.info { "$key with progress: $value." }
- }
- })
-}*/
\ No newline at end of file
diff --git a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/ExtractWorkConsumer.kt b/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/ExtractWorkConsumer.kt
deleted file mode 100644
index 361d2fa6..00000000
--- a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/ExtractWorkConsumer.kt
+++ /dev/null
@@ -1,59 +0,0 @@
-package no.iktdev.streamit.content.encode
-
-import com.google.gson.Gson
-import mu.KotlinLogging
-import no.iktdev.streamit.content.common.CommonConfig
-import no.iktdev.streamit.content.common.DefaultKafkaReader
-import no.iktdev.streamit.content.common.deserializers.DeserializerRegistry
-import no.iktdev.streamit.content.common.deserializers.ExtractWorkDeserializer
-import no.iktdev.streamit.content.common.dto.reader.work.ExtractWork
-import no.iktdev.streamit.content.encode.runner.RunnerCoordinator
-import no.iktdev.streamit.library.kafka.KafkaEvents
-import no.iktdev.streamit.library.kafka.consumers.DefaultConsumer
-import no.iktdev.streamit.library.kafka.dto.Message
-import no.iktdev.streamit.library.kafka.listener.SimpleMessageListener
-import no.iktdev.streamit.library.kafka.listener.deserializer.IMessageDataDeserialization
-import no.iktdev.streamit.library.kafka.listener.deserializer.deserializeIfSuccessful
-import org.apache.kafka.clients.consumer.ConsumerRecord
-import org.springframework.stereotype.Service
-private val logger = KotlinLogging.logger {}
-
-@Service
-class ExtractWorkConsumer(private val runnerCoordinator: RunnerCoordinator) : DefaultKafkaReader("extractWork") {
- lateinit var encodeInstructionsListener: ExtractWorkListener
-
- init {
- encodeInstructionsListener = ExtractWorkListener(
- topic = CommonConfig.kafkaTopic,
- defaultConsumer,
- accepts = listOf(KafkaEvents.EVENT_READER_ENCODE_GENERATED_SUBTITLE.event),
- runnerCoordinator
- )
- encodeInstructionsListener.listen()
- }
-
- override fun loadDeserializers(): Map> {
- return DeserializerRegistry.getEventToDeserializer(
- KafkaEvents.EVENT_READER_ENCODE_GENERATED_SUBTITLE
- )
- }
-
-
- class ExtractWorkListener(
- topic: String,
- consumer: DefaultConsumer,
- accepts: List,
- val runnerCoordinator: RunnerCoordinator
- ) : SimpleMessageListener(
- topic, consumer,
- accepts
- ) {
- override fun onMessageReceived(data: ConsumerRecord) {
- logger.info { "\nreferenceId: ${data.value().referenceId} \nEvent: ${data.key()} \nData:\n${Gson().toJson(data.value())}" }
- val message = data.value().apply {
- this.data = ExtractWorkDeserializer().deserializeIfSuccessful(data.value())
- }
- runnerCoordinator.addExtractMessageToQueue(message)
- }
- }
-}
\ No newline at end of file
diff --git a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/controllers/ProgressController.kt b/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/controllers/ProgressController.kt
deleted file mode 100644
index 29f5edee..00000000
--- a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/controllers/ProgressController.kt
+++ /dev/null
@@ -1,16 +0,0 @@
-package no.iktdev.streamit.content.encode.controllers
-
-import com.google.gson.Gson
-import no.iktdev.streamit.content.encode.progressMap
-import org.springframework.web.bind.annotation.GetMapping
-import org.springframework.web.bind.annotation.RestController
-import javax.servlet.http.HttpServletResponse
-
-@RestController
-class ProgressController {
- @GetMapping("/progress")
- fun getValue(response: HttpServletResponse): String {
- response.setHeader("Refresh", "5")
- return Gson().toJson(progressMap.values)
- }
-}
diff --git a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/progress/DecodedProgressData.kt b/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/progress/DecodedProgressData.kt
deleted file mode 100644
index 5705b35a..00000000
--- a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/progress/DecodedProgressData.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-package no.iktdev.streamit.content.encode.progress
-
-data class DecodedProgressData(
- val frame: Int?,
- val fps: Double?,
- val stream_0_0_q: Double?,
- val bitrate: String?,
- val total_size: Int?,
- val out_time_us: Long?,
- val out_time_ms: Long?,
- val out_time: String?,
- val dup_frames: Int?,
- val drop_frames: Int?,
- val speed: Double?,
- val progress: String?
-)
-
-data class ECT(val day: Int = 0, val hour: Int = 0, val minute: Int = 0, val second: Int = 0)
diff --git a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/progress/Progress.kt b/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/progress/Progress.kt
deleted file mode 100644
index bebf3271..00000000
--- a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/progress/Progress.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package no.iktdev.streamit.content.encode.progress
-
-data class Progress(
- val workId: String,
- val outFileName: String,
- val progress: Int = -1,
- val time: String,
- val duration: String,
- val speed: String,
- val estimatedCompletionSeconds: Long = -1,
- val estimatedCompletion: String = "Unknown",
-)
\ No newline at end of file
diff --git a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/progress/ProgressDecoder.kt b/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/progress/ProgressDecoder.kt
deleted file mode 100644
index 9349c8fd..00000000
--- a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/progress/ProgressDecoder.kt
+++ /dev/null
@@ -1,141 +0,0 @@
-package no.iktdev.streamit.content.encode.progress
-
-import no.iktdev.streamit.content.common.dto.reader.work.WorkBase
-import java.io.File
-import java.lang.StringBuilder
-import java.time.LocalTime
-import java.time.format.DateTimeFormatter
-import java.util.concurrent.TimeUnit
-import kotlin.math.floor
-
-class ProgressDecoder(val workBase: WorkBase) {
- val expectedKeys = listOf(
- "frame=",
- "fps=",
- "stream_0_0_q=",
- "bitrate=",
- "total_size=",
- "out_time_us=",
- "out_time_ms=",
- "out_time=",
- "dup_frames=",
- "drop_frames=",
- "speed=",
- "progress="
- )
- var duration: Int? = null
- set(value) {
- if (field == null || field == 0)
- field = value
- }
- var durationTime: String = "NA"
- fun parseVideoProgress(lines: List): DecodedProgressData? {
- var frame: Int? = null
- var progress: String? = null
- val metadataMap = mutableMapOf()
-
- for (line in lines) {
- val keyValuePairs = Regex("=\\s*").replace(line, "=").split(" ").filter { it.isNotBlank() }
- for (keyValuePair in keyValuePairs) {
- val (key, value) = keyValuePair.split("=")
- metadataMap[key] = value
- }
-
- if (frame == null) {
- frame = metadataMap["frame"]?.toIntOrNull()
- }
-
- progress = metadataMap["progress"]
- }
-
- return if (progress != null) {
- // When "progress" is found, build and return the VideoMetadata object
- DecodedProgressData(
- frame, metadataMap["fps"]?.toDoubleOrNull(), metadataMap["stream_0_0_q"]?.toDoubleOrNull(),
- metadataMap["bitrate"], metadataMap["total_size"]?.toIntOrNull(), metadataMap["out_time_us"]?.toLongOrNull(),
- metadataMap["out_time_ms"]?.toLongOrNull(), metadataMap["out_time"], metadataMap["dup_frames"]?.toIntOrNull(),
- metadataMap["drop_frames"]?.toIntOrNull(), metadataMap["speed"]?.replace("x", "", ignoreCase = true)?.toDoubleOrNull(), progress
- )
- } else {
- null // If "progress" is not found, return null
- }
- }
-
-
- fun isDuration(value: String): Boolean {
- return value.contains("Duration", ignoreCase = true)
- }
- fun setDuration(value: String) {
- val results = Regex("Duration:\\s*([^,]+),").find(value)?.groupValues?.firstOrNull()
- durationTime = Regex("[0-9]+:[0-9]+:[0-9]+.[0-9]+").find(results.toString())?.value ?: "NA"
- duration = timeSpanToSeconds(results)
- }
-
- private fun timeSpanToSeconds(time: String?): Int?
- {
- time ?: return null
- val timeString = Regex("[0-9]+:[0-9]+:[0-9]+.[0-9]+").find(time) ?: return null
- val strippedMS = Regex("[0-9]+:[0-9]+:[0-9]+").find(timeString.value) ?: return null
- val outTime = LocalTime.parse(strippedMS.value, DateTimeFormatter.ofPattern("HH:mm:ss"))
- return outTime.toSecondOfDay()
- }
-
-
- fun getProgress(decoded: DecodedProgressData): Progress {
- if (duration == null)
- return Progress(workId = workBase.workId, outFileName = File(workBase.outFile).name, duration = durationTime, time = "NA", speed = "NA")
- val progressTime = timeSpanToSeconds(decoded.out_time) ?: 0
- val progress = floor((progressTime.toDouble() / duration!!.toDouble()) *100).toInt()
-
- val ect = getEstimatedTimeRemaining(decoded)
-
- return Progress(
- workId = workBase.workId, outFileName = File(workBase.outFile).name,
- progress = progress,
- estimatedCompletionSeconds = ect,
- estimatedCompletion = getETA(ect),
- duration = durationTime,
- time = decoded.out_time ?: "NA",
- speed = decoded.speed?.toString() ?: "NA"
- )
- }
-
- fun getEstimatedTimeRemaining(decoded: DecodedProgressData): Long {
- val position = timeSpanToSeconds(decoded.out_time) ?: 0
- return if(duration == null || decoded.speed == null) -1 else
- Math.round(Math.round(duration!!.toDouble() - position.toDouble()) / decoded.speed)
- }
-
- fun getECT(time: Long): ECT {
- var seconds = time
- val day = TimeUnit.SECONDS.toDays(seconds)
- seconds -= java.util.concurrent.TimeUnit.DAYS.toSeconds(day)
-
- val hour = TimeUnit.SECONDS.toHours(seconds)
- seconds -= java.util.concurrent.TimeUnit.HOURS.toSeconds(hour)
-
- val minute = TimeUnit.SECONDS.toMinutes(seconds)
- seconds -= java.util.concurrent.TimeUnit.MINUTES.toSeconds(minute)
-
- return ECT(day.toInt(), hour.toInt(), minute.toInt(), seconds.toInt())
- }
- private fun getETA(time: Long): String {
- val etc = getECT(time) ?: return "Unknown"
- val str = StringBuilder()
- if (etc.day > 0) {
- str.append("${etc.day}d").append(" ")
- }
- if (etc.hour > 0) {
- str.append("${etc.hour}h").append(" ")
- }
- if (etc.day == 0 && etc.minute > 0) {
- str.append("${etc.minute}m").append(" ")
- }
- if (etc.hour == 0 && etc.second > 0) {
- str.append("${etc.second}s").append(" ")
- }
- return str.toString().trim()
- }
-
-
-}
\ No newline at end of file
diff --git a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/runner/EncodeDaemon.kt b/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/runner/EncodeDaemon.kt
deleted file mode 100644
index 9458f257..00000000
--- a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/runner/EncodeDaemon.kt
+++ /dev/null
@@ -1,108 +0,0 @@
-package no.iktdev.streamit.content.encode.runner
-
-import mu.KotlinLogging
-import no.iktdev.streamit.content.encode.EncodeEnv
-import no.iktdev.exfl.observable.ObservableList
-import no.iktdev.exfl.observable.observableListOf
-import no.iktdev.exfl.using
-import no.iktdev.streamit.content.common.deamon.Daemon
-import no.iktdev.streamit.content.common.deamon.IDaemon
-import no.iktdev.streamit.content.common.dto.reader.work.EncodeWork
-import no.iktdev.streamit.content.encode.progress.DecodedProgressData
-import no.iktdev.streamit.content.encode.progress.Progress
-import no.iktdev.streamit.content.encode.progress.ProgressDecoder
-import java.io.BufferedWriter
-import java.io.File
-import java.io.FileWriter
-
-private val logger = KotlinLogging.logger {}
-
-class EncodeDaemon(val referenceId: String, val work: EncodeWork, val daemonInterface: IEncodeListener, val outFile: File = File("src").using("logs", "${work.workId}-${work.collection}.log")): IDaemon {
- var outputCache = observableListOf()
- private val decoder = ProgressDecoder(work)
- fun produceProgress(items: List): Progress? {
- try {
- val decodedProgress = decoder.parseVideoProgress(items)
- if (decodedProgress != null) {
- val progress = decoder.getProgress(decodedProgress)
- outputCache.clear()
- return progress
- }
- } catch (e: IndexOutOfBoundsException) {
- // Do nothing
- } catch (e: Exception) {
- //logger.error { e.message }
- e.printStackTrace()
- }
- return null
- }
-
- init {
- outputCache.addListener(object : ObservableList.Listener {
- override fun onAdded(item: String) {
- val progress = produceProgress(outputCache)
- progress?.let {
- daemonInterface.onProgress(referenceId, work, progress)
- }
- }
- })
- outFile.parentFile.mkdirs()
- }
-
- suspend fun runUsingWorkItem(): Int {
- val outFile = File(work.outFile)
- if (!outFile.parentFile.exists()) {
- outFile.parentFile.mkdirs()
- }
- val adjustedArgs = (if (EncodeEnv.allowOverwrite) listOf("-y") else listOf("-nostdin")) + listOf(
- "-hide_banner", "-i", File(work.inFile).absolutePath, *work.arguments.toTypedArray(), outFile.absolutePath,
- "-progress", "pipe:1"
- )
- logger.info { "$referenceId @ ${work.workId} ${adjustedArgs.joinToString(" ")}" }
- return Daemon(EncodeEnv.ffmpeg, this).run(adjustedArgs)
- }
-
- override fun onStarted() {
- super.onStarted()
- daemonInterface.onStarted(referenceId, work)
- }
-
- override fun onEnded() {
- super.onEnded()
- daemonInterface.onEnded(referenceId, work)
- }
-
- override fun onError(code: Int) {
- daemonInterface.onError(referenceId, work, code)
- }
-
- override fun onOutputChanged(line: String) {
- super.onOutputChanged(line)
- if (decoder.isDuration(line))
- decoder.setDuration(line)
- if (decoder.expectedKeys.any { line.startsWith(it) }) {
- outputCache.add(line)
- }
- writeToLog(line)
- }
- fun writeToLog(line: String) {
- val fileWriter = FileWriter(outFile, true) // true indikerer at vi ønsker å appende til filen
- val bufferedWriter = BufferedWriter(fileWriter)
-
- // Skriv logglinjen til filen
- bufferedWriter.write(line)
- bufferedWriter.newLine() // Legg til en ny linje etter logglinjen
-
- // Lukk BufferedWriter og FileWriter for å frigjøre ressurser
- bufferedWriter.close()
- fileWriter.close()
- }
-
-}
-
-interface IEncodeListener {
- fun onStarted(referenceId: String, work: EncodeWork)
- fun onError(referenceId: String, work: EncodeWork, code: Int)
- fun onProgress(referenceId: String, work: EncodeWork, progress: Progress)
- fun onEnded(referenceId: String, work: EncodeWork)
-}
\ No newline at end of file
diff --git a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/runner/ExtractDaemon.kt b/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/runner/ExtractDaemon.kt
deleted file mode 100644
index edb06b99..00000000
--- a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/runner/ExtractDaemon.kt
+++ /dev/null
@@ -1,54 +0,0 @@
-package no.iktdev.streamit.content.encode.runner
-
-import mu.KotlinLogging
-import no.iktdev.streamit.content.encode.EncodeEnv
-import no.iktdev.exfl.observable.observableListOf
-import no.iktdev.streamit.content.common.deamon.Daemon
-import no.iktdev.streamit.content.common.deamon.IDaemon
-import no.iktdev.streamit.content.common.dto.reader.work.ExtractWork
-import no.iktdev.streamit.content.encode.progress.DecodedProgressData
-import java.io.File
-private val logger = KotlinLogging.logger {}
-
-class ExtractDaemon(val referenceId: String, val work: ExtractWork, val daemonInterface: IExtractListener): IDaemon {
- var outputCache = observableListOf()
-
-
- suspend fun runUsingWorkItem(): Int {
- val outFile = File(work.outFile)
- if (!outFile.parentFile.exists()) {
- outFile.parentFile.mkdirs()
- }
- val adjustedArgs = (if (EncodeEnv.allowOverwrite) listOf("-y") else emptyList()) + listOf(
- "-i", File(work.inFile).absolutePath, *work.arguments.toTypedArray(), outFile.absolutePath
- )
- logger.info { "$referenceId @ ${work.workId} ${adjustedArgs.joinToString(" ")}" }
- return Daemon(EncodeEnv.ffmpeg, this).run(adjustedArgs)
- }
-
- override fun onStarted() {
- super.onStarted()
- daemonInterface.onStarted(referenceId, work)
- }
-
- override fun onEnded() {
- super.onEnded()
- daemonInterface.onEnded(referenceId, work)
- }
-
- override fun onError(code: Int) {
- daemonInterface.onError(referenceId, work, code)
- }
- override fun onOutputChanged(line: String) {
- super.onOutputChanged(line)
- outputCache.add(line)
- }
-
-}
-
-interface IExtractListener {
- fun onStarted(referenceId: String, work: ExtractWork)
- fun onError(referenceId: String, work: ExtractWork, code: Int)
- fun onProgress(referenceId: String, work: ExtractWork, progress: DecodedProgressData) {}
- fun onEnded(referenceId: String, work: ExtractWork)
-}
\ No newline at end of file
diff --git a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/runner/RunnerCoordinator.kt b/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/runner/RunnerCoordinator.kt
deleted file mode 100644
index a7f3885f..00000000
--- a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/runner/RunnerCoordinator.kt
+++ /dev/null
@@ -1,324 +0,0 @@
-package no.iktdev.streamit.content.encode.runner
-
-import com.google.gson.Gson
-import kotlinx.coroutines.*
-import kotlinx.coroutines.channels.Channel
-import no.iktdev.streamit.content.encode.EncodeEnv
-import mu.KotlinLogging
-import no.iktdev.exfl.coroutines.Coroutines
-import no.iktdev.streamit.content.common.CommonConfig
-import no.iktdev.streamit.content.common.dto.State
-import no.iktdev.streamit.content.common.dto.WorkOrderItem
-import no.iktdev.streamit.content.common.dto.reader.work.EncodeWork
-import no.iktdev.streamit.content.common.dto.reader.work.ExtractWork
-import no.iktdev.streamit.content.encode.encoderItems
-import no.iktdev.streamit.content.encode.extractItems
-import no.iktdev.streamit.content.encode.progress.Progress
-import no.iktdev.streamit.content.encode.progressMap
-import no.iktdev.streamit.library.kafka.KafkaEvents
-import no.iktdev.streamit.library.kafka.dto.Message
-import no.iktdev.streamit.library.kafka.dto.Status
-import no.iktdev.streamit.library.kafka.dto.StatusType
-import no.iktdev.streamit.library.kafka.producer.DefaultProducer
-import org.springframework.stereotype.Service
-import java.util.concurrent.atomic.AtomicInteger
-
-private val logger = KotlinLogging.logger {}
-
-data class ExecutionBlock(
- val workId: String,
- val type: String,
- val work: suspend () -> Int
-)
-
-@Service
-class RunnerCoordinator(
- private var maxConcurrentJobs: Int = 1,
-) {
- private val logger = KotlinLogging.logger {}
-
- val producer = DefaultProducer(CommonConfig.kafkaTopic)
- final val defaultScope = Coroutines.default()
-
- private val jobsInProgress = AtomicInteger(0)
- private var inProgressJobs = mutableListOf()
- val queue = Channel(Channel.UNLIMITED)
-
-
- init {
- maxConcurrentJobs = EncodeEnv.maxRunners
- repeat(EncodeEnv.maxRunners) {
- launchWorker()
- }
- }
-
- fun launchWorker() = defaultScope.launch {
- while (true) {
- logger.info("Worker is waiting for a work item...")
- val workItem = queue.receive() // Coroutine will wait here until a work item is available
- logger.info("Worker received a work item.")
- if (jobsInProgress.get() < maxConcurrentJobs) {
- jobsInProgress.incrementAndGet()
- val job = processWorkItem(workItem)
- inProgressJobs.add(job)
- job.invokeOnCompletion {
- logger.info { "OnCompletion invoked!\n\nWorkId: ${workItem.workId}-${workItem.type} \n\tCurrent active worksers: ${jobsInProgress.get()}" }
- val workers = jobsInProgress.decrementAndGet()
- logger.info { "Worker Released: $workers" }
- logger.info { "Available: ${workers}/${maxConcurrentJobs}" }
- inProgressJobs.remove(job)
- }
- }
- logger.info { "Available workers: ${jobsInProgress.get()}/$maxConcurrentJobs" }
-
- }
- }
-
- private suspend fun processWorkItem(workItem: ExecutionBlock): Job {
- logger.info { "Processing work: ${workItem.type}" }
- workItem.work()
- return Job().apply { complete() }
- }
-
-
- fun addEncodeMessageToQueue(message: Message) {
- producer.sendMessage(
- KafkaEvents.EVENT_ENCODER_VIDEO_FILE_QUEUED.event,
- message.withNewStatus(Status(StatusType.PENDING))
- )
- try {
- if (message.data != null && message.data is EncodeWork) {
- val work = message.data as EncodeWork
- encoderItems.put(
- message.referenceId, WorkOrderItem(
- id = message.referenceId,
- inputFile = work.inFile,
- outputFile = work.outFile,
- collection = work.collection,
- state = State.QUEUED
- )
- )
-
- val workBlock = suspend {
- val data: EncodeWork = work
- val encodeDaemon = EncodeDaemon(message.referenceId, data, encodeListener)
- logger.info { "\nreferenceId: ${message.referenceId} \nStarting encoding. \nWorkId: ${data.workId}" }
- encodeDaemon.runUsingWorkItem()
- }
- val result = queue.trySend(ExecutionBlock(work.workId, "encode", workBlock))
- val statusType = when (result.isClosed) {
- true -> StatusType.IGNORED // Køen er lukket, jobben ble ignorert
- false -> {
- if (result.isSuccess) {
- StatusType.SUCCESS // Jobben ble sendt til køen
- } else {
- StatusType.ERROR // Feil ved sending av jobben
- }
- }
- }
- producer.sendMessage(
- KafkaEvents.EVENT_ENCODER_VIDEO_FILE_QUEUED.event,
- message.withNewStatus(Status(statusType))
- )
- } else {
- producer.sendMessage(
- KafkaEvents.EVENT_ENCODER_VIDEO_FILE_QUEUED.event,
- message.withNewStatus(Status(StatusType.ERROR, "Data is not an instance of EncodeWork or null"))
- )
- }
- } catch (e: Exception) {
- e.printStackTrace()
- producer.sendMessage(
- KafkaEvents.EVENT_ENCODER_VIDEO_FILE_QUEUED.event,
- message.withNewStatus(Status(StatusType.ERROR, e.message))
- )
- }
- }
-
- fun addExtractMessageToQueue(message: Message) {
- producer.sendMessage(
- KafkaEvents.EVENT_ENCODER_SUBTITLE_FILE_QUEUED.event,
- message.withNewStatus(Status(StatusType.PENDING))
- )
- try {
- if (message.data != null && message.data is ExtractWork) {
- val work = message.data as ExtractWork
- extractItems.put(
- message.referenceId, WorkOrderItem(
- id = message.referenceId,
- inputFile = work.inFile,
- outputFile = work.outFile,
- collection = work.collection,
- state = State.QUEUED
- )
- )
- val workBlock = suspend {
- val data: ExtractWork = work
- val extractDaemon = ExtractDaemon(message.referenceId, data, extractListener)
- logger.info { "\nreferenceId: ${message.referenceId} \nStarting extracting. \nWorkId: ${data.workId}" }
- extractDaemon.runUsingWorkItem()
- }
- val result = queue.trySend(ExecutionBlock(work.workId, "extract", workBlock))
- val statusType = when (result.isClosed) {
- true -> StatusType.IGNORED // Køen er lukket, jobben ble ignorert
- false -> {
- if (result.isSuccess) {
- StatusType.SUCCESS // Jobben ble sendt til køen
- } else {
- StatusType.ERROR // Feil ved sending av jobben
- }
- }
- }
- producer.sendMessage(
- KafkaEvents.EVENT_ENCODER_SUBTITLE_FILE_QUEUED.event,
- message.withNewStatus(Status(statusType))
- )
- } else {
- producer.sendMessage(
- KafkaEvents.EVENT_ENCODER_SUBTITLE_FILE_QUEUED.event,
- message.withNewStatus(Status(StatusType.ERROR, "Data is not an instance of ExtractWork"))
- )
- }
- } catch (e: Exception) {
- e.printStackTrace()
- producer.sendMessage(
- KafkaEvents.EVENT_ENCODER_SUBTITLE_FILE_QUEUED.event,
- message.withNewStatus(Status(StatusType.ERROR, e.message))
- )
- }
- }
-
-
- val encodeListener = object : IEncodeListener {
- override fun onStarted(referenceId: String, work: EncodeWork) {
- logger.info { "\nreferenceId: $referenceId \nWorkId ${work.workId} \nEncode: Started\n${work.outFile}" }
- producer.sendMessage(
- KafkaEvents.EVENT_ENCODER_VIDEO_FILE_STARTED.event,
- Message(referenceId, Status(statusType = StatusType.SUCCESS), work)
- )
- encoderItems.put(
- referenceId, WorkOrderItem(
- id = referenceId,
- inputFile = work.inFile,
- outputFile = work.outFile,
- collection = work.collection,
- state = State.STARTED
- )
- )
- }
-
- override fun onError(referenceId: String, work: EncodeWork, code: Int) {
- logger.error { "\nreferenceId: $referenceId \nWorkId ${work.workId} \nEncode: Failed\n${work.outFile} \nError: $code" }
- producer.sendMessage(
- KafkaEvents.EVENT_ENCODER_VIDEO_FILE_ENDED.event,
- Message(referenceId, Status(StatusType.ERROR, message = code.toString()), work)
- )
- encoderItems.put(
- referenceId, WorkOrderItem(
- id = referenceId,
- inputFile = work.inFile,
- outputFile = work.outFile,
- collection = work.collection,
- state = State.FAILURE
- )
- )
- }
-
- override fun onProgress(referenceId: String, work: EncodeWork, progress: Progress) {
- logger.debug {
- "Work progress for $referenceId with WorkId ${work.workId} @ ${work.outFile}: Progress: ${
- Gson().toJson(
- progress
- )
- }"
- }
- progressMap.put(work.workId, progress)
- encoderItems.put(
- referenceId, WorkOrderItem(
- id = referenceId,
- inputFile = work.inFile,
- outputFile = work.outFile,
- collection = work.collection,
- state = State.UPDATED,
- progress = progress.progress,
- remainingTime = progress.estimatedCompletionSeconds
- )
- )
- }
-
- override fun onEnded(referenceId: String, work: EncodeWork) {
- logger.info { "\nreferenceId: $referenceId \nWorkId ${work.workId} \nEncode: Ended\n${work.outFile}" }
- producer.sendMessage(
- KafkaEvents.EVENT_ENCODER_VIDEO_FILE_ENDED.event,
- Message(referenceId, Status(statusType = StatusType.SUCCESS), work)
- )
- encoderItems.put(
- referenceId, WorkOrderItem(
- id = referenceId,
- inputFile = work.inFile,
- outputFile = work.outFile,
- collection = work.collection,
- state = State.ENDED,
- progress = 100,
- remainingTime = null
- )
- )
- }
- }
-
- val extractListener = object : IExtractListener {
- override fun onStarted(referenceId: String, work: ExtractWork) {
- logger.info { "\nreferenceId: $referenceId \nWorkId ${work.workId} \nExtract: Started\n${work.outFile}" }
- producer.sendMessage(
- KafkaEvents.EVENT_ENCODER_SUBTITLE_FILE_STARTED.event,
- Message(referenceId, Status(statusType = StatusType.SUCCESS), work)
- )
- extractItems.put(
- referenceId, WorkOrderItem(
- id = referenceId,
- inputFile = work.inFile,
- outputFile = work.outFile,
- collection = work.collection,
- state = State.STARTED
- )
- )
- }
-
- override fun onError(referenceId: String, work: ExtractWork, code: Int) {
- logger.error { "\nreferenceId: $referenceId \nWorkId ${work.workId} \nExtract: Failed\n${work.outFile} \nError: $code" }
-
- producer.sendMessage(
- KafkaEvents.EVENT_ENCODER_SUBTITLE_FILE_ENDED.event,
- Message(referenceId, Status(StatusType.ERROR, code.toString()), work)
- )
- extractItems.put(
- referenceId, WorkOrderItem(
- id = referenceId,
- inputFile = work.inFile,
- outputFile = work.outFile,
- collection = work.collection,
- state = State.FAILURE
- )
- )
- }
-
- override fun onEnded(referenceId: String, work: ExtractWork) {
- logger.info { "\nreferenceId: $referenceId \nWorkId ${work.workId} \nExtract: Ended\n${work.outFile}" }
- producer.sendMessage(
- KafkaEvents.EVENT_ENCODER_SUBTITLE_FILE_ENDED.event,
- Message(referenceId, Status(statusType = StatusType.SUCCESS), work)
- )
- extractItems.put(
- referenceId, WorkOrderItem(
- id = referenceId,
- inputFile = work.inFile,
- outputFile = work.outFile,
- collection = work.collection,
- state = State.ENDED
- )
- )
- }
-
- }
-
-}
diff --git a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/topics/EncoderTopic.kt b/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/topics/EncoderTopic.kt
deleted file mode 100644
index e4d8b5c1..00000000
--- a/Encode/src/main/kotlin/no/iktdev/streamit/content/encode/topics/EncoderTopic.kt
+++ /dev/null
@@ -1,65 +0,0 @@
-package no.iktdev.streamit.content.encode.topics
-
-import no.iktdev.exfl.observable.ObservableMap
-import no.iktdev.streamit.content.common.dto.WorkOrderItem
-import no.iktdev.streamit.content.encode.encoderItems
-import no.iktdev.streamit.content.encode.extractItems
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.messaging.handler.annotation.MessageMapping
-import org.springframework.messaging.simp.SimpMessagingTemplate
-import org.springframework.stereotype.Controller
-
-@Controller
-class EncoderTopic(
- @Autowired val template: SimpMessagingTemplate?,
-) {
-
- init {
- encoderItems.addListener(object : ObservableMap.Listener {
- override fun onMapUpdated(map: Map) {
- super.onMapUpdated(map)
- pushEncoderQueue()
- }
-
- override fun onPut(key: String, value: WorkOrderItem) {
- super.onPut(key, value)
- pushEncoderWorkOrder(value)
- }
- })
- extractItems.addListener(object : ObservableMap.Listener {
- override fun onMapUpdated(map: Map) {
- super.onMapUpdated(map)
- pushExtractorQueue()
- }
-
- override fun onPut(key: String, value: WorkOrderItem) {
- super.onPut(key, value)
- pushExtractorWorkOrder(value)
- }
- })
- }
-
- fun pushEncoderWorkOrder(item: WorkOrderItem) {
- template?.convertAndSend("/topic/encoder/workorder", item)
- }
-
- fun pushExtractorWorkOrder(item: WorkOrderItem) {
- template?.convertAndSend("/topic/extractor/workorder", item)
- }
-
- @MessageMapping("/encoder/queue")
- fun pushEncoderQueue() {
- template?.convertAndSend("/topic/encoder/queue", encoderItems.values)
- }
-
- @MessageMapping("/extractor/queue")
- fun pushExtractorQueue() {
- template?.convertAndSend("/topic/extractor/queue", extractItems.values)
-
- }
-
-
-
-
-
-}
\ No newline at end of file
diff --git a/Encode/src/main/resources/application.properties b/Encode/src/main/resources/application.properties
deleted file mode 100644
index f0fe28f8..00000000
--- a/Encode/src/main/resources/application.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-spring.output.ansi.enabled=always
-logging.level.org.apache.kafka=WARN
-#logging.level.root=DEBUG
diff --git a/Encode/src/test/kotlin/no/iktdev/streamit/content/encode/Resources.kt b/Encode/src/test/kotlin/no/iktdev/streamit/content/encode/Resources.kt
deleted file mode 100644
index 22bb2314..00000000
--- a/Encode/src/test/kotlin/no/iktdev/streamit/content/encode/Resources.kt
+++ /dev/null
@@ -1,29 +0,0 @@
-package no.iktdev.streamit.content.encode
-
-import org.apache.kafka.clients.consumer.ConsumerRecord
-
-open class Resources {
-
- fun getText(path: String): String? {
- return this.javaClass.classLoader.getResource(path)?.readText()
- }
-
- open class Streams(): Resources() {
- fun all(): List {
- return listOf(
- getSample(0),
- getSample(1),
- getSample(2),
- getSample(3),
- getSample(4),
- getSample(5),
- getSample(6),
- )
- }
-
- fun getSample(number: Int): String {
- return getText("streams/sample$number.json")!!
- }
- }
-
-}
\ No newline at end of file
diff --git a/Encode/src/test/kotlin/no/iktdev/streamit/content/encode/progress/DecodedProgressDataDecoderTest.kt b/Encode/src/test/kotlin/no/iktdev/streamit/content/encode/progress/DecodedProgressDataDecoderTest.kt
deleted file mode 100644
index e3ee40ce..00000000
--- a/Encode/src/test/kotlin/no/iktdev/streamit/content/encode/progress/DecodedProgressDataDecoderTest.kt
+++ /dev/null
@@ -1,176 +0,0 @@
-package no.iktdev.streamit.content.encode.progress
-
-import no.iktdev.streamit.content.common.dto.reader.work.EncodeWork
-import no.iktdev.streamit.content.encode.Resources
-import no.iktdev.streamit.content.encode.runner.EncodeDaemon
-import no.iktdev.streamit.content.encode.runner.IEncodeListener
-import org.assertj.core.api.Assertions.assertThat
-import org.junit.BeforeClass
-import org.junit.jupiter.api.Test
-import org.junit.jupiter.api.assertDoesNotThrow
-import org.mockito.ArgumentMatchers.anyBoolean
-import org.mockito.ArgumentMatchers.anyString
-import org.mockito.Mockito.*
-import java.io.BufferedWriter
-import java.io.File
-import java.io.FileWriter
-import java.util.UUID
-
-class DecodedProgressDataDecoderTest {
-
- @Test
- fun test() {
- val progress = ProgressDecoder(EncodeWork(
- workId = UUID.randomUUID().toString(),
- collection = "Demo",
- inFile = "Demo.mkv",
- outFile = "FancyDemo.mp4",
- arguments = emptyList()
- ))
- val lines = text.split("\n")
- val cache: MutableList = mutableListOf()
- lines.forEach {
- cache.add(it)
- assertDoesNotThrow {
- val progressItem = progress.parseVideoProgress(cache)
- progressItem?.progress
- }
- }
- assertThat(lines).isNotEmpty()
- }
-
-
-
- @Test
- fun testCanRead() {
- val res = Resources()
- val data = res.getText("Output1.txt") ?: ""
- assertThat(data).isNotEmpty()
- val lines = data.split("\n").map { it.trim() }
- assertThat(lines).isNotEmpty()
-
- val encodeWork = EncodeWork(
- workId = UUID.randomUUID().toString(),
- collection = "Demo",
- inFile = "Demo.mkv",
- outFile = "FancyDemo.mp4",
- arguments = emptyList()
- )
- val decoder = ProgressDecoder(encodeWork)
- lines.forEach { decoder.setDuration(it) }
- assertThat(decoder.duration).isNotNull()
- val produced = mutableListOf