diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/CoordinatorEventCoordinator.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/CoordinatorEventCoordinator.kt index 4b6251b6..09394d34 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/CoordinatorEventCoordinator.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/CoordinatorEventCoordinator.kt @@ -64,10 +64,10 @@ class Coordinator( } fun permitWorkToProceedOn(referenceId: String, events: List, message: String) { - val defaultRequiredBy = listOf(Events.EventMediaParameterEncodeCreated, Events.EventMediaParameterExtractCreated) + val defaultRequiredBy = listOf(Events.ParameterEncodeCreated, Events.ParameterExtractCreated) val eventToAttachTo = if (events.any { it.eventType in defaultRequiredBy }) { events.findLast { it.eventType in defaultRequiredBy } - } else events.find { it.eventType == Events.EventMediaProcessStarted } + } else events.find { it.eventType == Events.ProcessStarted } if (eventToAttachTo == null) { log.error { "No event to attach permit to" } return diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/implementations/WorkTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/implementations/WorkTaskListener.kt index 1bf254a5..c7afc451 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/implementations/WorkTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/implementations/WorkTaskListener.kt @@ -12,11 +12,11 @@ abstract class WorkTaskListener: CoordinatorEventListener() { private val log = KotlinLogging.logger {} fun canStart(incomingEvent: Event, events: List): Boolean { - val autoStart = events.find { it.eventType == Events.EventMediaProcessStarted }?.az()?.data + val autoStart = events.find { it.eventType == Events.ProcessStarted }?.az()?.data if (autoStart == null) { log.error { "Start event not found. Requiring permitt event" } } - return if (incomingEvent.eventType == Events.EventMediaWorkProceedPermitted) { + return if (incomingEvent.eventType == Events.WorkProceedPermitted) { return true } else { if (autoStart == null || autoStart.type == ProcessType.MANUAL) { diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/BaseInfoFromFileTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/BaseInfoFromFileTaskListener.kt index be0408e7..164f4cb4 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/BaseInfoFromFileTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/BaseInfoFromFileTaskListener.kt @@ -23,8 +23,8 @@ class BaseInfoFromFileTaskListener() : CoordinatorEventListener() { val log = KotlinLogging.logger {} - override val produceEvent: Events = Events.EventMediaReadBaseInfoPerformed - override val listensForEvents: List = listOf(Events.EventMediaProcessStarted) + override val produceEvent: Events = Events.ReadBaseInfoPerformed + override val listensForEvents: List = listOf(Events.ProcessStarted) override fun getProducerName(): String { return this::class.java.simpleName diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/CompletedTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/CompletedTaskListener.kt index eaf688d7..b5400852 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/CompletedTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/CompletedTaskListener.kt @@ -41,17 +41,18 @@ class CompletedTaskListener : CoordinatorEventListener() { @Autowired override var coordinator: Coordinator? = null - override val produceEvent: Events = Events.EventMediaProcessCompleted + override val produceEvent: Events = Events.ProcessCompleted override val listensForEvents: List = listOf( - Events.EventWorkDownloadCoverPerformed, - Events.EventWorkConvertPerformed, - Events.EventWorkEncodePerformed, - Events.EventWorkExtractPerformed + Events.WorkDownloadCoverPerformed, + Events.WorkConvertPerformed, + Events.WorkEncodePerformed, + Events.WorkExtractPerformed, + Events.PersistContentPerformed ) override fun isPrerequisitesFulfilled(incomingEvent: Event, events: List): Boolean { - val started = events.find { it.eventType == Events.EventMediaProcessStarted }?.az() + val started = events.find { it.eventType == Events.ProcessStarted }?.az() if (started == null) { log.info { "No Start event" } return false @@ -78,9 +79,9 @@ class CompletedTaskListener : CoordinatorEventListener() { } fun getVideo(events: List): VideoDetails? { - val mediaInfo = events.find { it.eventType == Events.EventMediaReadOutNameAndType } + val mediaInfo = events.find { it.eventType == Events.ReadOutNameAndType } ?.az() - val encoded = events.find { it.eventType == Events.EventWorkEncodePerformed }?.dataAs()?.outputFile + val encoded = events.find { it.eventType == Events.WorkEncodePerformed }?.dataAs()?.outputFile if (encoded == null) { log.warn { "No encode no video details!" } return null @@ -101,8 +102,6 @@ class CompletedTaskListener : CoordinatorEventListener() { return details } - - override fun shouldIProcessAndHandleEvent(incomingEvent: Event, events: List): Boolean { val result = super.shouldIProcessAndHandleEvent(incomingEvent, events) return result @@ -125,50 +124,64 @@ class CompletedTaskListener : CoordinatorEventListener() { mediaInfo.fallbackCollection } else mediaInfo.fallbackCollection - val mover = ContentCompletionMover(usableCollection, events) - - val genreIdsForCatalog = ContentGenresStore.storeAndGetIds(mediaInfo.genres) - val newCoverPath = mover.moveCover() - ContentCatalogStore.storeCatalog( - title = mediaInfo.title, - collection = usableCollection, - type = mediaInfo.type, - cover = newCoverPath?.second?.let { dp -> File(dp).name }, - genres = genreIdsForCatalog, - )?.also { cid -> - mediaInfo.summaries.forEach { - ContentMetadataStore.storeSummary(cid, it) + val persistedContent: PersistedContent? = events.find { it.eventType == Events.PersistContentPerformed }?.dataAs()?.data + if (persistedContent == null) { + log.error { "PersistedContent is null! can't continue" } + return + } + + val completedData = CompletedData( + eventIdsCollected = events.map { it.eventId() }, + metadataStored = MetadataStored( + title = mediaInfo.title, + titles = mediaInfo.titles, + type = mediaInfo.type, + cover = persistedContent.cover?.storeDestinationFileName?.let { File(it).name }, + collection = usableCollection, + summary = mediaInfo.summaries, + foundTitles = existingTitles, + genres = mediaInfo.genres, + genreIds = genreIdsForCatalog + ) + ) + + completedData.metadataStored.let { meta -> + val catalogId = ContentCatalogStore.storeCatalog( + title = meta.title, + collection = meta.collection, + type = meta.type, + cover = meta.cover, + genres = meta.genreIds + ) + catalogId?.let { id -> + meta.summary.forEach { summary -> + ContentMetadataStore.storeSummary(id, summary) + } } - ContentTitleStore.store(mediaInfo.title, mediaInfo.titles) + ContentTitleStore.store(meta.title, meta.titles) } - - val newVideoPath = mover.moveVideo() val videoInfo = getVideo(events) if (videoInfo != null) { - assert(newVideoPath == null) + assert(persistedContent.video == null) ContentCatalogStore.storeMedia( - title = mediaInfo.title, - collection = usableCollection, - type = mediaInfo.type, + title = completedData.metadataStored.title, + collection = completedData.metadataStored.collection, + type = completedData.metadataStored.type, videoDetails = videoInfo ) } - - val newSubtitles = mover.moveSubtitles() - try { - newSubtitles?.let { subtitles -> + persistedContent.subtitles.let { subtitles -> subtitles.map { ContentSubtitleStore.storeSubtitles( - collection = usableCollection, - language = it.language, - destinationFile = File(it.destination) + collection = completedData.metadataStored.collection, + destinationFile = File(it.storeDestinationFileName) ) } } @@ -176,25 +189,18 @@ class CompletedTaskListener : CoordinatorEventListener() { e.printStackTrace() } - val summary = EventsSummaryMapping().map(events) - ProcessedFileStore.store( mediaInfo.title, events, - summary + EventsSummaryMapping().map(events) ) if (!doNotProduceComplete) { onProduceEvent(MediaProcessCompletedEvent( metadata = event.makeDerivedEventInfo(EventStatus.Success, getProducerName()), - data = CompletedEventData( - eventIdsCollected = events.map { it.eventId() }, - coverMoved = newCoverPath?.let { c -> CoverMoved(c.first, c.second) }, - videoMoved = newVideoPath?.let { v -> VideoMoved(v.first, v.second) }, - subtitlesMoved = newSubtitles?.map { s -> SubtitlesMoved(s.source, s.destination) } ?: emptyList() - ) + data = completedData )) } else { log.warn { "Do not produce complete is enabled!" } @@ -217,23 +223,23 @@ class CompletedTaskListener : CoordinatorEventListener() { private fun composeMediaInfo(events: List): ComposedMediaInfo? { val baseInfo = - events.find { it.eventType == Events.EventMediaReadBaseInfoPerformed }?.az()?.let { + events.find { it.eventType == Events.ReadBaseInfoPerformed }?.az()?.let { it.data } ?: run { - log.info { "Cant find BaseInfoEvent on ${Events.EventMediaReadBaseInfoPerformed}" } + log.info { "Cant find BaseInfoEvent on ${Events.ReadBaseInfoPerformed}" } return null } val metadataInfo = - events.find { it.eventType == Events.EventMediaMetadataSearchPerformed }?.az()?.data + events.find { it.eventType == Events.MetadataSearchPerformed }?.az()?.data ?: run { - log.info { "Cant find MediaMetadataReceivedEvent on ${Events.EventMediaMetadataSearchPerformed}" } + log.info { "Cant find MediaMetadataReceivedEvent on ${Events.MetadataSearchPerformed}" } null } - val mediaInfo: MediaInfo = events.find { it.eventType == Events.EventMediaReadOutNameAndType } + val mediaInfo: MediaInfo = events.find { it.eventType == Events.ReadOutNameAndType } ?.az()?.let { it.data?.toValueObject() } ?: run { - log.info { "Cant find MediaOutInformationConstructedEvent on ${Events.EventMediaReadOutNameAndType}" } + log.info { "Cant find MediaOutInformationConstructedEvent on ${Events.ReadOutNameAndType}" } return null } diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ConvertWorkTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ConvertWorkTaskListener.kt index e53e5589..5bae1921 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ConvertWorkTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ConvertWorkTaskListener.kt @@ -26,9 +26,9 @@ class ConvertWorkTaskListener: WorkTaskListener() { @Autowired override var coordinator: Coordinator? = null - override val produceEvent: Events = Events.EventWorkConvertCreated + override val produceEvent: Events = Events.WorkConvertCreated override val listensForEvents: List = listOf( - Events.EventWorkExtractPerformed + Events.WorkExtractPerformed ) override fun canProduceMultipleEvents(): Boolean { @@ -63,18 +63,18 @@ class ConvertWorkTaskListener: WorkTaskListener() { var storeAsFile: String? = null - val file = if (event.eventType == Events.EventWorkExtractPerformed) { + val file = if (event.eventType == Events.WorkExtractPerformed) { val foundEvent = event.az()?.data language = foundEvent?.language storeAsFile = foundEvent?.storeFileName foundEvent?.outputFile - } else if (event.eventType == Events.EventMediaProcessStarted) { + } else if (event.eventType == Events.ProcessStarted) { val startEvent = event.az()?.data if (startEvent?.operations?.isOnly(OperationEvents.CONVERT) == true) { startEvent.file } else null } else { - events.find { it.eventType == Events.EventWorkExtractPerformed } + events.find { it.eventType == Events.WorkExtractPerformed } ?.az()?.data?.outputFile } diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/CoverDownloadTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/CoverDownloadTaskListener.kt index 3e543a6f..cbd62b32 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/CoverDownloadTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/CoverDownloadTaskListener.kt @@ -5,19 +5,14 @@ import mu.KotlinLogging import no.iktdev.eventi.core.ConsumableEvent import no.iktdev.eventi.core.WGson import no.iktdev.eventi.data.EventStatus -import no.iktdev.eventi.implementations.EventCoordinator -import no.iktdev.exfl.using import no.iktdev.mediaprocessing.coordinator.Coordinator import no.iktdev.mediaprocessing.coordinator.CoordinatorEventListener import no.iktdev.mediaprocessing.shared.common.DownloadClient import no.iktdev.mediaprocessing.shared.common.SharedConfig import no.iktdev.mediaprocessing.shared.common.contract.Events -import no.iktdev.mediaprocessing.shared.common.contract.EventsListenerContract -import no.iktdev.mediaprocessing.shared.common.contract.EventsManagerContract import no.iktdev.mediaprocessing.shared.common.contract.data.* import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service -import java.io.File @Service class CoverDownloadTaskListener : CoordinatorEventListener() { @@ -29,8 +24,8 @@ class CoverDownloadTaskListener : CoordinatorEventListener() { @Autowired override var coordinator: Coordinator? = null - override val produceEvent: Events = Events.EventWorkDownloadCoverPerformed - override val listensForEvents: List = listOf(Events.EventMediaReadOutCover) + override val produceEvent: Events = Events.WorkDownloadCoverPerformed + override val listensForEvents: List = listOf(Events.ReadOutCover) override fun onEventsReceived(incomingEvent: ConsumableEvent, events: List) { val event = incomingEvent.consume() if (event == null) { diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/CoverFromMetadataTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/CoverFromMetadataTaskListener.kt index 0827d9b7..13caf6c4 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/CoverFromMetadataTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/CoverFromMetadataTaskListener.kt @@ -25,13 +25,13 @@ class CoverFromMetadataTaskListener: CoordinatorEventListener() { @Autowired override var coordinator: Coordinator? = null - override val produceEvent: Events = Events.EventMediaReadOutCover + override val produceEvent: Events = Events.ReadOutCover override val listensForEvents: List = listOf( - Events.EventMediaMetadataSearchPerformed + Events.MetadataSearchPerformed ) override fun isPrerequisitesFulfilled(incomingEvent: Event, events: List): Boolean { - return (events.any { it.eventType == Events.EventMediaReadOutNameAndType && it.isSuccessful() }) + return (events.any { it.eventType == Events.ReadOutNameAndType && it.isSuccessful() }) } override fun shouldIProcessAndHandleEvent(incomingEvent: Event, events: List): Boolean { @@ -52,17 +52,17 @@ class CoverFromMetadataTaskListener: CoordinatorEventListener() { } active = true - val baseInfo = events.find { it.eventType == Events.EventMediaReadBaseInfoPerformed }?.az()?.data + val baseInfo = events.find { it.eventType == Events.ReadBaseInfoPerformed }?.az()?.data if (baseInfo == null) { log.info { "No base info" } active = false return } - val metadataEvent = if (event.eventType == Events.EventMediaMetadataSearchPerformed) event else events.findLast { it.eventType == Events.EventMediaMetadataSearchPerformed } + val metadataEvent = if (event.eventType == Events.MetadataSearchPerformed) event else events.findLast { it.eventType == Events.MetadataSearchPerformed } val metadata = metadataEvent?.az()?.data ?: return - val mediaOutInfo = events.find { it.eventType == Events.EventMediaReadOutNameAndType }?.az()?.data + val mediaOutInfo = events.find { it.eventType == Events.ReadOutNameAndType }?.az()?.data if (mediaOutInfo == null) { log.info { "No Media out info" } active = false diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/EncodeWorkArgumentsTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/EncodeWorkArgumentsTaskListener.kt index 9a0357a5..de66448e 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/EncodeWorkArgumentsTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/EncodeWorkArgumentsTaskListener.kt @@ -25,11 +25,11 @@ class EncodeWorkArgumentsTaskListener: CoordinatorEventListener() { @Autowired override var coordinator: Coordinator? = null - override val produceEvent: Events = Events.EventMediaParameterEncodeCreated + override val produceEvent: Events = Events.ParameterEncodeCreated override val listensForEvents: List = listOf( - Events.EventMediaParseStreamPerformed, - Events.EventMediaReadOutNameAndType + Events.ParseStreamPerformed, + Events.ReadOutNameAndType ) val preference = Preference.getPreference() @@ -46,7 +46,7 @@ class EncodeWorkArgumentsTaskListener: CoordinatorEventListener() { return } active = true - val started = events.find { it.eventType == Events.EventMediaProcessStarted }?.az() + val started = events.find { it.eventType == Events.ProcessStarted }?.az() if (started == null) { active = false return @@ -55,13 +55,13 @@ class EncodeWorkArgumentsTaskListener: CoordinatorEventListener() { active = false return } - val streams = events.find { it.eventType == Events.EventMediaParseStreamPerformed }?.az()?.data + val streams = events.find { it.eventType == Events.ParseStreamPerformed }?.az()?.data if (streams == null) { active = false return } - val mediaInfo = events.find { it.eventType == Events.EventMediaReadOutNameAndType }?.az() + val mediaInfo = events.find { it.eventType == Events.ReadOutNameAndType }?.az() if (mediaInfo?.data == null) { active = false return diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/EncodeWorkTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/EncodeWorkTaskListener.kt index c5009c59..b646120a 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/EncodeWorkTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/EncodeWorkTaskListener.kt @@ -7,13 +7,11 @@ import no.iktdev.eventi.data.EventStatus import no.iktdev.eventi.data.derivedFromEventId import no.iktdev.eventi.data.eventId import no.iktdev.eventi.data.referenceId -import no.iktdev.eventi.implementations.EventCoordinator import no.iktdev.mediaprocessing.coordinator.Coordinator import no.iktdev.mediaprocessing.coordinator.taskManager import no.iktdev.mediaprocessing.coordinator.tasksV2.implementations.WorkTaskListener import no.iktdev.mediaprocessing.shared.common.task.TaskType import no.iktdev.mediaprocessing.shared.common.contract.Events -import no.iktdev.mediaprocessing.shared.common.contract.EventsManagerContract import no.iktdev.mediaprocessing.shared.common.contract.data.* import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service @@ -28,10 +26,10 @@ class EncodeWorkTaskListener : WorkTaskListener() { @Autowired override var coordinator: Coordinator? = null - override val produceEvent: Events = Events.EventWorkEncodeCreated + override val produceEvent: Events = Events.WorkEncodeCreated override val listensForEvents: List = listOf( - Events.EventMediaParameterEncodeCreated, - Events.EventMediaWorkProceedPermitted + Events.ParameterEncodeCreated, + Events.WorkProceedPermitted ) override fun canProduceMultipleEvents(): Boolean { @@ -49,10 +47,10 @@ class EncodeWorkTaskListener : WorkTaskListener() { return } - val encodeArguments = if (event.eventType == Events.EventMediaParameterEncodeCreated) { + val encodeArguments = if (event.eventType == Events.ParameterEncodeCreated) { event.az()?.data } else { - events.find { it.eventType == Events.EventMediaParameterEncodeCreated } + events.find { it.eventType == Events.ParameterEncodeCreated } ?.az()?.data } if (encodeArguments == null) { diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ExtractWorkArgumentsTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ExtractWorkArgumentsTaskListener.kt index 28f79b62..5cf202a2 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ExtractWorkArgumentsTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ExtractWorkArgumentsTaskListener.kt @@ -23,10 +23,10 @@ class ExtractWorkArgumentsTaskListener: CoordinatorEventListener() { @Autowired override var coordinator: Coordinator? = null - override val produceEvent: Events = Events.EventMediaParameterExtractCreated + override val produceEvent: Events = Events.ParameterExtractCreated override val listensForEvents: List = listOf( - Events.EventMediaParseStreamPerformed, - Events.EventMediaReadOutNameAndType + Events.ParseStreamPerformed, + Events.ReadOutNameAndType ) override fun shouldIProcessAndHandleEvent(incomingEvent: Event, events: List): Boolean { @@ -42,18 +42,18 @@ class ExtractWorkArgumentsTaskListener: CoordinatorEventListener() { return } active = true - val started = events.find { it.eventType == Events.EventMediaProcessStarted }?.az() ?: return + val started = events.find { it.eventType == Events.ProcessStarted }?.az() ?: return if (started.data == null || started.data?.operations?.contains(OperationEvents.EXTRACT) == false) { active = false return } - val streams = events.find { it.eventType == Events.EventMediaParseStreamPerformed }?.az()?.data + val streams = events.find { it.eventType == Events.ParseStreamPerformed }?.az()?.data if (streams == null) { active = false return } - val mediaInfo = events.find { it.eventType == Events.EventMediaReadOutNameAndType }?.az() + val mediaInfo = events.find { it.eventType == Events.ReadOutNameAndType }?.az() if (mediaInfo?.data == null) { active = false return diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ExtractWorkTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ExtractWorkTaskListener.kt index ed7084af..6a673bbb 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ExtractWorkTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ExtractWorkTaskListener.kt @@ -7,13 +7,11 @@ import no.iktdev.eventi.data.EventStatus import no.iktdev.eventi.data.derivedFromEventId import no.iktdev.eventi.data.eventId import no.iktdev.eventi.data.referenceId -import no.iktdev.eventi.implementations.EventCoordinator import no.iktdev.mediaprocessing.coordinator.Coordinator import no.iktdev.mediaprocessing.coordinator.taskManager import no.iktdev.mediaprocessing.coordinator.tasksV2.implementations.WorkTaskListener import no.iktdev.mediaprocessing.shared.common.task.TaskType import no.iktdev.mediaprocessing.shared.common.contract.Events -import no.iktdev.mediaprocessing.shared.common.contract.EventsManagerContract import no.iktdev.mediaprocessing.shared.common.contract.data.* import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service @@ -28,10 +26,10 @@ class ExtractWorkTaskListener: WorkTaskListener() { @Autowired override var coordinator: Coordinator? = null - override val produceEvent: Events = Events.EventWorkExtractCreated + override val produceEvent: Events = Events.WorkExtractCreated override val listensForEvents: List = listOf( - Events.EventMediaParameterExtractCreated, - Events.EventMediaWorkProceedPermitted + Events.ParameterExtractCreated, + Events.WorkProceedPermitted ) override fun canProduceMultipleEvents(): Boolean { @@ -58,10 +56,10 @@ class ExtractWorkTaskListener: WorkTaskListener() { return } - val arguments = if (event.eventType == Events.EventMediaParameterExtractCreated) { + val arguments = if (event.eventType == Events.ParameterExtractCreated) { event.az()?.data } else { - events.find { it.eventType == Events.EventMediaParameterExtractCreated } + events.find { it.eventType == Events.ParameterExtractCreated } ?.az()?.data } if (arguments == null) { diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/MediaOutInformationTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/MediaOutInformationTaskListener.kt index b7b13cfd..9c80433e 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/MediaOutInformationTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/MediaOutInformationTaskListener.kt @@ -4,7 +4,6 @@ import com.google.gson.JsonObject import no.iktdev.eventi.core.ConsumableEvent import no.iktdev.eventi.core.WGson import no.iktdev.eventi.data.EventStatus -import no.iktdev.exfl.using import no.iktdev.mediaprocessing.coordinator.Coordinator import no.iktdev.mediaprocessing.coordinator.CoordinatorEventListener import no.iktdev.mediaprocessing.coordinator.log @@ -19,7 +18,6 @@ import no.iktdev.mediaprocessing.shared.common.contract.data.pyMetadata import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service import java.io.FileFilter -import javax.naming.Name @Service @@ -32,9 +30,9 @@ class MediaOutInformationTaskListener: CoordinatorEventListener() { @Autowired override var coordinator: Coordinator? = null - override val produceEvent: Events = Events.EventMediaReadOutNameAndType + override val produceEvent: Events = Events.ReadOutNameAndType override val listensForEvents: List = listOf( - Events.EventMediaMetadataSearchPerformed + Events.MetadataSearchPerformed ) override fun shouldIHandleFailedEvents(incomingEvent: Event): Boolean { @@ -50,9 +48,9 @@ class MediaOutInformationTaskListener: CoordinatorEventListener() { active = true val metadataResult = event.az() - val mediaBaseInfo = events.findLast { it.eventType == Events.EventMediaReadBaseInfoPerformed }?.az()?.data + val mediaBaseInfo = events.findLast { it.eventType == Events.ReadBaseInfoPerformed }?.az()?.data if (mediaBaseInfo == null) { - log.error { "Required event ${Events.EventMediaReadBaseInfoPerformed} is not present" } + log.error { "Required event ${Events.ReadBaseInfoPerformed} is not present" } coordinator?.produceNewEvent( MediaOutInformationConstructedEvent( metadata = event.makeDerivedEventInfo(EventStatus.Failed, getProducerName()) diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/MetadataWaitOrDefaultTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/MetadataWaitOrDefaultTaskListener.kt index 24a9bd56..1823104b 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/MetadataWaitOrDefaultTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/MetadataWaitOrDefaultTaskListener.kt @@ -40,10 +40,10 @@ class MetadataWaitOrDefaultTaskListener() : CoordinatorEventListener() { val log = KotlinLogging.logger {} - override val produceEvent: Events = Events.EventMediaMetadataSearchPerformed + override val produceEvent: Events = Events.MetadataSearchPerformed override val listensForEvents: List = listOf( - Events.EventMediaReadBaseInfoPerformed, - Events.EventMediaMetadataSearchPerformed + Events.ReadBaseInfoPerformed, + Events.MetadataSearchPerformed ) @@ -58,8 +58,8 @@ class MetadataWaitOrDefaultTaskListener() : CoordinatorEventListener() { if (metadataTimeoutMinutes <= 0) { return } - val hasReadBaseInfo = events.any { it.eventType == Events.EventMediaReadBaseInfoPerformed && it.isSuccessful() } - val hasMetadataSearched = events.any { it.eventType == Events.EventMediaMetadataSearchPerformed } + val hasReadBaseInfo = events.any { it.eventType == Events.ReadBaseInfoPerformed && it.isSuccessful() } + val hasMetadataSearched = events.any { it.eventType == Events.MetadataSearchPerformed } val hasPollerForMetadataEvent = waitingProcessesForMeta.containsKey(incomingEvent.metadata().referenceId) if (!hasReadBaseInfo) { @@ -76,7 +76,7 @@ class MetadataWaitOrDefaultTaskListener() : CoordinatorEventListener() { return } - val baseInfo = events.find { it.eventType == Events.EventMediaReadBaseInfoPerformed}?.az()?.data + val baseInfo = events.find { it.eventType == Events.ReadBaseInfoPerformed}?.az()?.data if (baseInfo == null) { log.error { "BaseInfoEvent is null for referenceId: ${consumedIncoming.metadata.referenceId} on eventId: ${consumedIncoming.metadata.eventId}" } return diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ParseMediaFileStreamsTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ParseMediaFileStreamsTaskListener.kt index ec2fe8f7..eb2b2316 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ParseMediaFileStreamsTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ParseMediaFileStreamsTaskListener.kt @@ -7,15 +7,11 @@ import no.iktdev.eventi.core.ConsumableEvent import no.iktdev.eventi.core.WGson import no.iktdev.eventi.data.EventStatus import no.iktdev.eventi.data.dataAs -import no.iktdev.eventi.implementations.EventCoordinator import no.iktdev.mediaprocessing.coordinator.Coordinator import no.iktdev.mediaprocessing.coordinator.CoordinatorEventListener import no.iktdev.mediaprocessing.shared.common.contract.Events -import no.iktdev.mediaprocessing.shared.common.contract.EventsListenerContract -import no.iktdev.mediaprocessing.shared.common.contract.EventsManagerContract import no.iktdev.mediaprocessing.shared.common.contract.data.Event import no.iktdev.mediaprocessing.shared.common.contract.data.MediaFileStreamsParsedEvent -import no.iktdev.mediaprocessing.shared.common.contract.data.MediaFileStreamsReadEvent import no.iktdev.mediaprocessing.shared.common.contract.ffmpeg.AudioStream import no.iktdev.mediaprocessing.shared.common.contract.ffmpeg.ParsedMediaStreams import no.iktdev.mediaprocessing.shared.common.contract.ffmpeg.SubtitleStream @@ -35,9 +31,9 @@ class ParseMediaFileStreamsTaskListener() : CoordinatorEventListener() { override var coordinator: Coordinator? = null - override val produceEvent: Events = Events.EventMediaParseStreamPerformed + override val produceEvent: Events = Events.ParseStreamPerformed override val listensForEvents: List = listOf( - Events.EventMediaReadStreamPerformed + Events.ReadStreamPerformed ) override fun shouldIProcessAndHandleEvent(incomingEvent: Event, events: List): Boolean { diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/PersistContentTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/PersistContentTaskListener.kt new file mode 100644 index 00000000..0c18b06e --- /dev/null +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/PersistContentTaskListener.kt @@ -0,0 +1,174 @@ +package no.iktdev.mediaprocessing.coordinator.tasksV2.listeners + +import mu.KotlinLogging +import no.iktdev.eventi.core.ConsumableEvent +import no.iktdev.eventi.data.* +import no.iktdev.mediaprocessing.coordinator.Coordinator +import no.iktdev.mediaprocessing.coordinator.CoordinatorEventListener +import no.iktdev.mediaprocessing.coordinator.tasksV2.mapping.store.* +import no.iktdev.mediaprocessing.coordinator.tasksV2.validator.CompletionValidator +import no.iktdev.mediaprocessing.shared.common.parsing.NameHelper +import no.iktdev.mediaprocessing.shared.common.contract.Events +import no.iktdev.mediaprocessing.shared.common.contract.data.* +import no.iktdev.mediaprocessing.shared.common.contract.reader.* +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.stereotype.Service + +@Service +class PersistContentTaskListener : CoordinatorEventListener() { + val log = KotlinLogging.logger {} + + var doNotProduceComplete = System.getenv("DISABLE_COMPLETE").toBoolean() ?: false + + override fun getProducerName(): String { + return this::class.java.simpleName + } + + override fun onReady() { + super.onReady() + if (doNotProduceComplete) { + log.warn { "DoNotProduceComplete is set!\n\tNo complete event will be triggered!\n\tTo enable production of complete vents, remove this line in your environment: \"DISABLE_COMPLETE\"" } + } + } + + override fun shouldIHandleFailedEvents(incomingEvent: Event): Boolean { + return true + } + + + @Autowired + override var coordinator: Coordinator? = null + + override val produceEvent: Events = Events.PersistContentPerformed + override val listensForEvents: List = listOf( + Events.WorkDownloadCoverPerformed, + Events.WorkConvertPerformed, + Events.WorkEncodePerformed, + Events.WorkExtractPerformed + ) + + + override fun isPrerequisitesFulfilled(incomingEvent: Event, events: List): Boolean { + val started = events.find { it.eventType == Events.ProcessStarted }?.az() + if (started == null) { + log.info { "No Start event" } + return false + } + val viableEvents = events.filter { it.isSuccessful() } + + if (!CompletionValidator.req1(started, events)) { + return false + } + + if (!CompletionValidator.req2(started.data?.operations ?: emptyList(), viableEvents)) { + return false + } + + if (!CompletionValidator.req3(started.data?.operations ?: emptyList(), events)) { + return false + } + + if (!CompletionValidator.req4(events)) { + return false + } + + return super.isPrerequisitesFulfilled(incomingEvent, events) + } + + override fun shouldIProcessAndHandleEvent(incomingEvent: Event, events: List): Boolean { + val result = super.shouldIProcessAndHandleEvent(incomingEvent, events) + return result + } + + override fun onEventsReceived(incomingEvent: ConsumableEvent, events: List) { + val event = incomingEvent.consume() ?: return + active = true + + val mediaInfo: ComposedMediaInfo = composeMediaInfo(events) ?: run { + log.error { "Unable to compose media info for ${event.referenceId()}" } + return + } + + val existingTitles = ContentTitleStore.findMasterTitles(mediaInfo.titles) + + val usableCollection: String = if (existingTitles.isNotEmpty()) + ContentCatalogStore.getCollectionByTitleAndType(mediaInfo.type, existingTitles) ?: run { + log.warn { "Did not receive collection based on titles provided in list ${existingTitles.joinToString(",")}, falling back to fallbackCollection: ${mediaInfo.fallbackCollection}" } + mediaInfo.fallbackCollection + } else mediaInfo.fallbackCollection + + val mover = ContentCompletionMover(usableCollection, events) + + val newCoverPath = mover.moveCover() + val newVideoPath = mover.moveVideo() + val newSubtitles = mover.moveSubtitles() + + + val contentEvent = PersistedContent( + cover = newCoverPath?.let { PersistedItem(it.first, it.second) }, + video = newVideoPath?.let { PersistedItem(it.first, it.second) }, + subtitles = newSubtitles?.map { PersistedItem(it.source, it.destination) } ?: emptyList() + ) + + onProduceEvent(PersistedContentEvent( + metadata = event.makeDerivedEventInfo(EventStatus.Success, getProducerName()), + data = contentEvent + )) + + active = false + } + + internal data class ComposedMediaInfo( + val title: String, + val fallbackCollection: String, + + val titles: List, + val type: String, + val summaries: List, + val genres: List + ) + + private fun composeMediaInfo(events: List): ComposedMediaInfo? { + val baseInfo = + events.find { it.eventType == Events.ReadBaseInfoPerformed }?.az()?.let { + it.data + } ?: run { + log.info { "Cant find BaseInfoEvent on ${Events.ReadBaseInfoPerformed}" } + return null + } + val metadataInfo = + events.find { it.eventType == Events.MetadataSearchPerformed }?.az()?.data + ?: run { + log.info { "Cant find MediaMetadataReceivedEvent on ${Events.MetadataSearchPerformed}" } + null + } + val mediaInfo: MediaInfo = events.find { it.eventType == Events.ReadOutNameAndType } + ?.az()?.let { + it.data?.toValueObject() + } ?: run { + log.info { "Cant find MediaOutInformationConstructedEvent on ${Events.ReadOutNameAndType}" } + return null + } + + val summaries = metadataInfo?.summary?.filter { it.summary != null } + ?.map { SummaryInfo(language = it.language, summary = it.summary!!) } ?: emptyList() + + val titles: MutableList = mutableListOf(mediaInfo.title) + metadataInfo?.let { + titles.addAll(it.altTitle) + titles.add(it.title) + titles.add(NameHelper.normalize(it.title)) + } + + return ComposedMediaInfo( + title = NameHelper.normalize(metadataInfo?.title ?: mediaInfo.title), + fallbackCollection = baseInfo.title, + titles = titles, + type = metadataInfo?.type ?: mediaInfo.type, + summaries = summaries, + genres = metadataInfo?.genres ?: emptyList() + ) + } + + +} \ No newline at end of file diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ReadMediaFileStreamsTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ReadMediaFileStreamsTaskListener.kt index 37acdbdf..58ead22a 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ReadMediaFileStreamsTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ReadMediaFileStreamsTaskListener.kt @@ -35,8 +35,8 @@ class ReadMediaFileStreamsTaskListener() : CoordinatorEventListener() { val log = KotlinLogging.logger {} val requiredOperations = listOf(OperationEvents.ENCODE, OperationEvents.EXTRACT) - override val produceEvent: Events = Events.EventMediaReadStreamPerformed - override val listensForEvents: List = listOf(Events.EventMediaProcessStarted) + override val produceEvent: Events = Events.ReadStreamPerformed + override val listensForEvents: List = listOf(Events.ProcessStarted) override fun shouldIProcessAndHandleEvent(incomingEvent: Event, events: List): Boolean { val status = super.shouldIProcessAndHandleEvent(incomingEvent, events) diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/mapping/EventsSummaryMapping.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/mapping/EventsSummaryMapping.kt index bc0d717c..9a96dbb2 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/mapping/EventsSummaryMapping.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/mapping/EventsSummaryMapping.kt @@ -13,7 +13,7 @@ import no.iktdev.mediaprocessing.shared.common.getChecksum class EventsSummaryMapping { fun map(events: List): EventSummary { - val startOperations = events.find { it.eventType == Events.EventMediaProcessStarted }?.dataAs() ?: throw RuntimeException("No start event found") + val startOperations = events.find { it.eventType == Events.ProcessStarted }?.dataAs() ?: throw RuntimeException("No start event found") val successOperations = listOfNotNull( if (isEncodedSuccessful(events)) OperationEvents.ENCODE else null, if (isExtractedSuccessful(events)) OperationEvents.EXTRACT else null, @@ -33,26 +33,26 @@ class EventsSummaryMapping { } - fun isEncodedSuccessful(events: List) = events.filter { it.eventType == Events.EventWorkEncodePerformed }.any { it.isSuccessful() } - fun isExtractedSuccessful(events: List) = events.filter { it.eventType == Events.EventWorkExtractPerformed }.any { it.isSuccessful() } - fun isConvertedSuccessful(events: List) = events.filter { it.eventType == Events.EventWorkConvertPerformed }.any { it.isSuccessful() } + fun isEncodedSuccessful(events: List) = events.filter { it.eventType == Events.WorkEncodePerformed }.any { it.isSuccessful() } + fun isExtractedSuccessful(events: List) = events.filter { it.eventType == Events.WorkExtractPerformed }.any { it.isSuccessful() } + fun isConvertedSuccessful(events: List) = events.filter { it.eventType == Events.WorkConvertPerformed }.any { it.isSuccessful() } fun getProducesFiles(events: List): OutputFiles { val encoded = if (isEncodedSuccessful(events)) { - events.filter { it.eventType == Events.EventWorkEncodePerformed } + events.filter { it.eventType == Events.WorkEncodePerformed } .filter { it.isSuccessful() } .mapNotNull { it.dataAs()?.outputFile } } else emptyList() val extracted = if (isExtractedSuccessful(events)) { - events.filter { it.eventType == Events.EventWorkExtractPerformed } + events.filter { it.eventType == Events.WorkExtractPerformed } .filter { it.isSuccessful() } .mapNotNull { it.dataAs() } .map { it.outputFile } } else emptyList() val converted = if (isConvertedSuccessful(events)) { - events.filter { it.eventType == Events.EventWorkConvertPerformed } + events.filter { it.eventType == Events.WorkConvertPerformed } .filter { it.isSuccessful() } .mapNotNull { it.dataAs() } .flatMap { it.outputFiles } diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/mapping/store/ContentCompletionMover.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/mapping/store/ContentCompletionMover.kt index 8b81850b..4e93d628 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/mapping/store/ContentCompletionMover.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/mapping/store/ContentCompletionMover.kt @@ -27,7 +27,7 @@ class ContentCompletionMover(val collection: String, val events: List) { * @return Pair or null if no file found */ fun moveVideo(): Pair? { - val encodedFile = events.find { it.eventType == Events.EventWorkEncodePerformed }?.dataAs()?.outputFile?.let { + val encodedFile = events.find { it.eventType == Events.WorkEncodePerformed }?.dataAs()?.outputFile?.let { File(it) } ?: return null if (!encodedFile.exists()) { @@ -44,7 +44,7 @@ class ContentCompletionMover(val collection: String, val events: List) { } fun moveCover(): Pair? { - val coverFile = events.find { it.eventType == Events.EventWorkDownloadCoverPerformed }?. + val coverFile = events.find { it.eventType == Events.WorkDownloadCoverPerformed }?. az()?.data?.absoluteFilePath?.let { File(it) } ?: return null @@ -74,9 +74,9 @@ class ContentCompletionMover(val collection: String, val events: List) { fun getMovableSubtitles(): List { val extracted = - events.filter { it.eventType == Events.EventWorkExtractPerformed }.mapNotNull { it.dataAs() } + events.filter { it.eventType == Events.WorkExtractPerformed }.mapNotNull { it.dataAs() } val converted = - events.filter { it.eventType == Events.EventWorkConvertPerformed }.mapNotNull { it.dataAs() } + events.filter { it.eventType == Events.WorkConvertPerformed }.mapNotNull { it.dataAs() } val items = mutableListOf() diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/mapping/store/ContentSubtitleStore.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/mapping/store/ContentSubtitleStore.kt index 23388a08..d74edfb6 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/mapping/store/ContentSubtitleStore.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/mapping/store/ContentSubtitleStore.kt @@ -11,11 +11,11 @@ import java.io.File object ContentSubtitleStore { val log = KotlinLogging.logger {} - fun storeSubtitles(collection: String, language: String, destinationFile: File): Boolean { + fun storeSubtitles(collection: String, destinationFile: File): Boolean { return executeWithStatus (getStoreDatabase().database, block = { subtitle.insert { it[this.associatedWithVideo] = destinationFile.nameWithoutExtension - it[this.language] = language + it[this.language] = destinationFile.parentFile.nameWithoutExtension it[this.collection] = collection it[this.format] = destinationFile.extension.uppercase() it[this.subtitle] = destinationFile.name diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/validator/CompletionValidator.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/validator/CompletionValidator.kt index 182d004b..80c515ee 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/validator/CompletionValidator.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/validator/CompletionValidator.kt @@ -19,11 +19,11 @@ object CompletionValidator { */ fun req1(started: MediaProcessStartEvent, events: List): Boolean { val encodeFulfilledOrSkipped = if (started.data?.operations?.contains(OperationEvents.ENCODE) == true) { - events.any { it.eventType == Events.EventMediaParameterEncodeCreated } + events.any { it.eventType == Events.ParameterEncodeCreated } } else true val extractFulfilledOrSkipped = if (started.data?.operations?.contains(OperationEvents.EXTRACT) == true) { - events.any { it.eventType == Events.EventMediaParameterExtractCreated } + events.any { it.eventType == Events.ParameterExtractCreated } } else true if (!encodeFulfilledOrSkipped || !extractFulfilledOrSkipped) { @@ -37,21 +37,21 @@ object CompletionValidator { */ fun req2(operations: List, events: List): Boolean { if (OperationEvents.ENCODE in operations) { - val encodeParamter = events.find { it.eventType == Events.EventMediaParameterEncodeCreated }?.az() - val encodeWork = events.find { it.eventType == Events.EventWorkEncodeCreated } + val encodeParamter = events.find { it.eventType == Events.ParameterEncodeCreated }?.az() + val encodeWork = events.find { it.eventType == Events.WorkEncodeCreated } if (encodeParamter?.isSuccessful() == true && (encodeWork == null)) return false } - val extractParamter = events.find { it.eventType == Events.EventMediaParameterExtractCreated }?.az() - val extractWork = events.filter { it.eventType == Events.EventWorkExtractCreated } + val extractParamter = events.find { it.eventType == Events.ParameterExtractCreated }?.az() + val extractWork = events.filter { it.eventType == Events.WorkExtractCreated } if (OperationEvents.EXTRACT in operations) { if (extractParamter?.isSuccessful() == true && extractParamter.data?.size != extractWork.size) return false } if (OperationEvents.CONVERT in operations) { - val convertWork = events.filter { it.eventType == Events.EventWorkConvertCreated } + val convertWork = events.filter { it.eventType == Events.WorkConvertCreated } val supportedSubtitleFormats = SubtitleFormats.entries.map { it.name } val eventsSupportsConvert = extractWork.filter { it.data is ExtractArgumentData } @@ -69,22 +69,22 @@ object CompletionValidator { */ fun req3(operations: List, events: List): Boolean { if (OperationEvents.ENCODE in operations) { - val encodeWork = events.filter { it.eventType == Events.EventWorkEncodeCreated } - val encodePerformed = events.filter { it.eventType == Events.EventWorkEncodePerformed } + val encodeWork = events.filter { it.eventType == Events.WorkEncodeCreated } + val encodePerformed = events.filter { it.eventType == Events.WorkEncodePerformed } if (encodePerformed.size < encodeWork.size) return false } if (OperationEvents.EXTRACT in operations) { - val extractWork = events.filter { it.eventType == Events.EventWorkExtractCreated } - val extractPerformed = events.filter { it.eventType == Events.EventWorkExtractPerformed } + val extractWork = events.filter { it.eventType == Events.WorkExtractCreated } + val extractPerformed = events.filter { it.eventType == Events.WorkExtractPerformed } if (extractPerformed.size < extractWork.size) return false } if (OperationEvents.CONVERT in operations) { - val convertWork = events.filter { it.eventType == Events.EventWorkConvertCreated } - val convertPerformed = events.filter { it.eventType == Events.EventWorkConvertPerformed } + val convertWork = events.filter { it.eventType == Events.WorkConvertCreated } + val convertPerformed = events.filter { it.eventType == Events.WorkConvertPerformed } if (convertPerformed.size < convertWork.size) return false } @@ -96,7 +96,7 @@ object CompletionValidator { * Checks if metadata has cover, if so, 2 events are expected */ fun req4(events: List): Boolean { - val metadata = events.find { it.eventType == Events.EventMediaMetadataSearchPerformed } + val metadata = events.find { it.eventType == Events.MetadataSearchPerformed } if (metadata?.isSkipped() == true) { return true } @@ -110,7 +110,7 @@ object CompletionValidator { return true } - if (events.any { it.eventType == Events.EventMediaReadOutCover } && events.any { it.eventType == Events.EventWorkDownloadCoverPerformed }) { + if (events.any { it.eventType == Events.ReadOutCover } && events.any { it.eventType == Events.WorkDownloadCoverPerformed }) { return true } return false diff --git a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ParseMediaFileStreamsTaskListenerTest.kt b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ParseMediaFileStreamsTaskListenerTest.kt index 4d74a462..31b65b3c 100644 --- a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ParseMediaFileStreamsTaskListenerTest.kt +++ b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ParseMediaFileStreamsTaskListenerTest.kt @@ -1,20 +1,17 @@ package no.iktdev.mediaprocessing.coordinator.tasksV2.listeners -import com.google.gson.Gson import com.google.gson.JsonObject -import no.iktdev.eventi.core.WGson import no.iktdev.eventi.data.dataAs import no.iktdev.mediaprocessing.shared.common.contract.Events import no.iktdev.mediaprocessing.shared.common.contract.fromJsonWithDeserializer import org.assertj.core.api.Assertions.assertThat -import org.junit.jupiter.api.Assertions.* import org.junit.jupiter.api.Test class ParseMediaFileStreamsTaskListenerTest { @Test fun testParse() { - val event = data.fromJsonWithDeserializer(Events.EventMediaReadStreamPerformed).dataAs() + val event = data.fromJsonWithDeserializer(Events.ReadStreamPerformed).dataAs() val parser = ParseMediaFileStreamsTaskListener() val result = parser.parseStreams(event) diff --git a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/mapping/EncodeWorkArgumentsMappingTest.kt b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/mapping/EncodeWorkArgumentsMappingTest.kt index 2c9ee302..85d153be 100644 --- a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/mapping/EncodeWorkArgumentsMappingTest.kt +++ b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/mapping/EncodeWorkArgumentsMappingTest.kt @@ -5,18 +5,15 @@ import no.iktdev.mediaprocessing.shared.common.contract.data.MediaFileStreamsPar import no.iktdev.mediaprocessing.shared.common.contract.data.az import no.iktdev.mediaprocessing.shared.common.contract.ffmpeg.AudioPreference import no.iktdev.mediaprocessing.shared.common.contract.ffmpeg.EncodingPreference -import no.iktdev.mediaprocessing.shared.common.contract.ffmpeg.ParsedMediaStreams import no.iktdev.mediaprocessing.shared.common.contract.ffmpeg.VideoPreference import no.iktdev.mediaprocessing.shared.common.contract.fromJsonWithDeserializer -import org.junit.jupiter.api.Assertions.* import org.junit.jupiter.api.Test -import java.io.File class EncodeWorkArgumentsMappingTest { @Test fun parse() { - val event = data.fromJsonWithDeserializer(Events.EventMediaParseStreamPerformed) + val event = data.fromJsonWithDeserializer(Events.ParseStreamPerformed) val parser = EncodeWorkArgumentsMapping( "potato.mkv", "potato.mp4", diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/EventToClazzTable.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/EventToClazzTable.kt index 5494d370..4650cd0c 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/EventToClazzTable.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/EventToClazzTable.kt @@ -6,35 +6,9 @@ import no.iktdev.eventi.core.WGson import no.iktdev.mediaprocessing.shared.common.contract.data.* private val log = KotlinLogging.logger {} -object EventToClazzTable { - - val table = mutableMapOf( - Events.EventMediaProcessStarted to MediaProcessStartEvent::class.java, - Events.EventMediaReadBaseInfoPerformed to BaseInfoEvent::class.java, - Events.EventMediaReadStreamPerformed to MediaFileStreamsReadEvent::class.java, - Events.EventMediaParseStreamPerformed to MediaFileStreamsParsedEvent::class.java, - Events.EventWorkConvertCreated to ConvertWorkCreatedEvent::class.java, - Events.EventWorkConvertPerformed to ConvertWorkPerformed::class.java, - Events.EventMediaParameterEncodeCreated to EncodeArgumentCreatedEvent::class.java, - Events.EventWorkEncodeCreated to EncodeWorkCreatedEvent::class.java, - Events.EventWorkEncodePerformed to EncodeWorkPerformedEvent::class.java, - Events.EventMediaParameterExtractCreated to ExtractArgumentCreatedEvent::class.java, - Events.EventWorkExtractCreated to ExtractWorkCreatedEvent::class.java, - Events.EventWorkExtractPerformed to ExtractWorkPerformedEvent::class.java, - Events.EventWorkDownloadCoverPerformed to MediaCoverDownloadedEvent::class.java, - Events.EventMediaReadOutCover to MediaCoverInfoReceivedEvent::class.java, - Events.EventMediaParseStreamPerformed to MediaFileStreamsParsedEvent::class.java, - Events.EventMediaReadStreamPerformed to MediaFileStreamsReadEvent::class.java, - Events.EventMediaMetadataSearchPerformed to MediaMetadataReceivedEvent::class.java, - Events.EventMediaReadOutNameAndType to MediaOutInformationConstructedEvent::class.java, - Events.EventMediaWorkProceedPermitted to PermitWorkCreationEvent::class.java, - Events.EventMediaProcessCompleted to MediaProcessCompletedEvent::class.java - ) - -} fun String.fromJsonWithDeserializer(event: Events): Event { - val clazz = EventToClazzTable.table[event] + val clazz = event.dataClass clazz?.let { eventClass -> try { val type = TypeToken.getParameterized(eventClass).type diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/Events.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/Events.kt index 8be01d85..16f3e42f 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/Events.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/Events.kt @@ -1,41 +1,37 @@ package no.iktdev.mediaprocessing.shared.common.contract -enum class Events(val event: String) { - EventMediaProcessStarted ("event:media-process:started"), +import no.iktdev.mediaprocessing.shared.common.contract.data.* - EventMediaReadStreamPerformed ("event:media-read-stream:performed"), - EventMediaParseStreamPerformed ("event:media-parse-stream:performed"), - EventMediaReadBaseInfoPerformed ("event:media-read-base-info:performed"), - EventMediaMetadataSearchPerformed ("event:media-metadata-search:performed"), - EventMediaReadOutNameAndType ("event:media-read-out-name-and-type:performed"), - EventMediaReadOutCover ("event:media-read-out-cover:performed"), +enum class Events(val event: String, val dataClass: Class) { + ProcessStarted ("event:media-process:started", dataClass = MediaProcessStartEvent::class.java), - EventMediaParameterEncodeCreated ("event:media-encode-parameter:created"), - EventMediaParameterExtractCreated ("event:media-extract-parameter:created"), + ReadStreamPerformed ("event:media-read-stream:performed", MediaFileStreamsReadEvent::class.java), + ParseStreamPerformed ("event:media-parse-stream:performed", MediaFileStreamsParsedEvent::class.java), + ReadBaseInfoPerformed ("event:media-read-base-info:performed", BaseInfoEvent::class.java), + MetadataSearchPerformed ("event:media-metadata-search:performed", MediaMetadataReceivedEvent::class.java), + ReadOutNameAndType ("event:media-read-out-name-and-type:performed", MediaOutInformationConstructedEvent::class.java), + ReadOutCover ("event:media-read-out-cover:performed", MediaCoverInfoReceivedEvent::class.java), - EventMediaParameterDownloadCoverCreated ("event:media-download-cover-parameter:created"), + ParameterEncodeCreated ("event:media-encode-parameter:created", EncodeArgumentCreatedEvent::class.java), + ParameterExtractCreated ("event:media-extract-parameter:created", ExtractArgumentCreatedEvent::class.java), - EventMediaWorkProceedPermitted ("event:media-work-proceed:permitted"), + //EventMediaParameterDownloadCoverCreated ("event:media-download-cover-parameter:created"), - EventNotificationOfWorkItemRemoval("event:notification-work-item-removal"), + WorkProceedPermitted ("event:media-work-proceed:permitted", PermitWorkCreationEvent::class.java), - EventWorkEncodeCreated ("event:work-encode:created"), - EventWorkExtractCreated ("event:work-extract:created"), - EventWorkConvertCreated ("event:work-convert:created"), + //EventNotificationOfWorkItemRemoval("event:notification-work-item-removal"), - EventWorkEncodePerformed ("event:work-encode:performed"), - EventWorkExtractPerformed ("event:work-extract:performed"), - EventWorkConvertPerformed ("event:work-convert:performed"), - EventWorkDownloadCoverPerformed ("event:work-download-cover:performed"), + WorkEncodeCreated ("event:work-encode:created", EncodeWorkCreatedEvent::class.java), + WorkExtractCreated ("event:work-extract:created", ExtractWorkCreatedEvent::class.java), + WorkConvertCreated ("event:work-convert:created", ConvertWorkCreatedEvent::class.java), - EVENT_STORE_VIDEO_PERFORMED ("event:store-video:performed"), - EVENT_STORE_SUBTITLE_PERFORMED ("event:store-subtitle:performed"), - EVENT_STORE_COVER_PERFORMED ("event:store-cover:performed"), - EVENT_STORE_METADATA_PERFORMED ("event:store-metadata:performed"), - - EventMediaProcessCompleted ("event:media-process:completed"), - EventCollectAndStore ("event::save"), + WorkEncodePerformed ("event:work-encode:performed", EncodeWorkPerformedEvent::class.java), + WorkExtractPerformed ("event:work-extract:performed", ExtractWorkPerformedEvent::class.java), + WorkConvertPerformed ("event:work-convert:performed", ConvertWorkPerformed::class.java), + WorkDownloadCoverPerformed ("event:work-download-cover:performed", MediaCoverDownloadedEvent::class.java), + PersistContentPerformed ("event:media-persist:completed", PersistedContentEvent::class.java), + ProcessCompleted ("event:media-process:completed", MediaProcessCompletedEvent::class.java), ; companion object { @@ -46,20 +42,13 @@ enum class Events(val event: String) { fun isOfWork(event: Events): Boolean { return event in listOf( - EventWorkConvertCreated, - EventWorkExtractCreated, - EventWorkEncodeCreated, + WorkConvertCreated, + WorkExtractCreated, + WorkEncodeCreated, - EventWorkEncodePerformed, - EventWorkConvertPerformed, - EventWorkExtractPerformed - ) - } - - fun isOfFinalize(event: Events): Boolean { - return event in listOf( - EventMediaProcessCompleted, - EventCollectAndStore + WorkEncodePerformed, + WorkConvertPerformed, + WorkExtractPerformed ) } } diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/BaseInfoEvent.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/BaseInfoEvent.kt index 210bbbcb..bc09f919 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/BaseInfoEvent.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/BaseInfoEvent.kt @@ -1,12 +1,11 @@ package no.iktdev.mediaprocessing.shared.common.contract.data -import no.iktdev.eventi.data.EventImpl import no.iktdev.eventi.data.EventMetadata import no.iktdev.mediaprocessing.shared.common.contract.Events data class BaseInfoEvent( override val metadata: EventMetadata, - override val eventType: Events = Events.EventMediaReadBaseInfoPerformed, + override val eventType: Events = Events.ReadBaseInfoPerformed, override val data: BaseInfo? = null ) : Event() diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ConvertWorkCreatedEvent.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ConvertWorkCreatedEvent.kt index 91fd5c26..a7b4cb3c 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ConvertWorkCreatedEvent.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ConvertWorkCreatedEvent.kt @@ -7,7 +7,7 @@ import no.iktdev.mediaprocessing.shared.common.contract.dto.tasks.TaskData data class ConvertWorkCreatedEvent( override val metadata: EventMetadata, - override val eventType: Events = Events.EventWorkConvertCreated, + override val eventType: Events = Events.WorkConvertCreated, override val data: ConvertData? = null ) : Event() { } diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ConvertWorkPerformed.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ConvertWorkPerformed.kt index e12ca942..18b4fd0e 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ConvertWorkPerformed.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ConvertWorkPerformed.kt @@ -5,7 +5,7 @@ import no.iktdev.mediaprocessing.shared.common.contract.Events class ConvertWorkPerformed( override val metadata: EventMetadata, - override val eventType: Events = Events.EventWorkConvertPerformed, + override val eventType: Events = Events.WorkConvertPerformed, override val data: ConvertedData? = null, val message: String? = null ) : Event() { diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/EncodeArgumentCreatedEvent.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/EncodeArgumentCreatedEvent.kt index 0bd68a00..487468f9 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/EncodeArgumentCreatedEvent.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/EncodeArgumentCreatedEvent.kt @@ -6,7 +6,7 @@ import no.iktdev.mediaprocessing.shared.common.contract.dto.tasks.TaskData data class EncodeArgumentCreatedEvent( override val metadata: EventMetadata, - override val eventType: Events = Events.EventMediaParameterEncodeCreated, + override val eventType: Events = Events.ParameterEncodeCreated, override val data: EncodeArgumentData? = null ) : Event() { diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/EncodeWorkCreatedEvent.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/EncodeWorkCreatedEvent.kt index c339a1a4..d4718441 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/EncodeWorkCreatedEvent.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/EncodeWorkCreatedEvent.kt @@ -5,6 +5,6 @@ import no.iktdev.mediaprocessing.shared.common.contract.Events data class EncodeWorkCreatedEvent( override val metadata: EventMetadata, - override val eventType: Events = Events.EventWorkEncodeCreated, + override val eventType: Events = Events.WorkEncodeCreated, override val data: EncodeArgumentData? = null ) : Event() \ No newline at end of file diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/EncodeWorkPerformedEvent.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/EncodeWorkPerformedEvent.kt index b639058a..ed21b3d9 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/EncodeWorkPerformedEvent.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/EncodeWorkPerformedEvent.kt @@ -5,7 +5,7 @@ import no.iktdev.mediaprocessing.shared.common.contract.Events data class EncodeWorkPerformedEvent( override val metadata: EventMetadata, - override val eventType: Events = Events.EventWorkEncodePerformed, + override val eventType: Events = Events.WorkEncodePerformed, override val data: EncodedData? = null, val message: String? = null ) : Event() { diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ExtractArgumentCreatedEvent.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ExtractArgumentCreatedEvent.kt index d9ca38f1..b9a4ab51 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ExtractArgumentCreatedEvent.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ExtractArgumentCreatedEvent.kt @@ -6,7 +6,7 @@ import no.iktdev.mediaprocessing.shared.common.contract.dto.tasks.TaskData data class ExtractArgumentCreatedEvent( override val metadata: EventMetadata, - override val eventType: Events = Events.EventMediaParameterExtractCreated, + override val eventType: Events = Events.ParameterExtractCreated, override val data: List? = null ): Event() diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ExtractWorkCreatedEvent.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ExtractWorkCreatedEvent.kt index d72d75f5..4003ff7c 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ExtractWorkCreatedEvent.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ExtractWorkCreatedEvent.kt @@ -5,7 +5,7 @@ import no.iktdev.mediaprocessing.shared.common.contract.Events data class ExtractWorkCreatedEvent( override val metadata: EventMetadata, - override val eventType: Events = Events.EventWorkExtractCreated, + override val eventType: Events = Events.WorkExtractCreated, override val data: ExtractArgumentData? = null ) : Event() { } \ No newline at end of file diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ExtractWorkPerformedEvent.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ExtractWorkPerformedEvent.kt index 4633e931..5dab62cd 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ExtractWorkPerformedEvent.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/ExtractWorkPerformedEvent.kt @@ -5,7 +5,7 @@ import no.iktdev.mediaprocessing.shared.common.contract.Events data class ExtractWorkPerformedEvent( override val metadata: EventMetadata, - override val eventType: Events = Events.EventWorkExtractPerformed, + override val eventType: Events = Events.WorkExtractPerformed, override val data: ExtractedData? = null, val message: String? = null ) : Event() { diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaCoverDownloadedEvent.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaCoverDownloadedEvent.kt index 62a71871..edcbeb47 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaCoverDownloadedEvent.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaCoverDownloadedEvent.kt @@ -5,7 +5,7 @@ import no.iktdev.mediaprocessing.shared.common.contract.Events data class MediaCoverDownloadedEvent( override val metadata: EventMetadata, - override val eventType: Events = Events.EventWorkDownloadCoverPerformed, + override val eventType: Events = Events.WorkDownloadCoverPerformed, override val data: DownloadedCover? = null ) : Event() { } diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaCoverInfoReceivedEvent.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaCoverInfoReceivedEvent.kt index 296e9fb1..2f5230ed 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaCoverInfoReceivedEvent.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaCoverInfoReceivedEvent.kt @@ -5,7 +5,7 @@ import no.iktdev.mediaprocessing.shared.common.contract.Events data class MediaCoverInfoReceivedEvent( override val metadata: EventMetadata, - override val eventType: Events = Events.EventMediaReadOutCover, + override val eventType: Events = Events.ReadOutCover, override val data: CoverDetails? = null ) : Event() { } diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaFileStreamsParsedEvent.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaFileStreamsParsedEvent.kt index ea57327f..b09216ff 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaFileStreamsParsedEvent.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaFileStreamsParsedEvent.kt @@ -7,6 +7,6 @@ import no.iktdev.mediaprocessing.shared.common.contract.ffmpeg.ParsedMediaStream class MediaFileStreamsParsedEvent( override val metadata: EventMetadata, override val data: ParsedMediaStreams? = null, - override val eventType: Events = Events.EventMediaParseStreamPerformed + override val eventType: Events = Events.ParseStreamPerformed ) : Event() \ No newline at end of file diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaFileStreamsReadEvent.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaFileStreamsReadEvent.kt index 165b0154..d313cb5b 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaFileStreamsReadEvent.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaFileStreamsReadEvent.kt @@ -1,12 +1,11 @@ package no.iktdev.mediaprocessing.shared.common.contract.data import com.google.gson.JsonObject -import no.iktdev.eventi.data.EventImpl import no.iktdev.eventi.data.EventMetadata import no.iktdev.mediaprocessing.shared.common.contract.Events class MediaFileStreamsReadEvent( override val metadata: EventMetadata, override val data: JsonObject? = null, - override val eventType: Events = Events.EventMediaReadStreamPerformed + override val eventType: Events = Events.ReadStreamPerformed ) : Event() \ No newline at end of file diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaMetadataReceivedEvent.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaMetadataReceivedEvent.kt index 8915a13e..4ea8218c 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaMetadataReceivedEvent.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaMetadataReceivedEvent.kt @@ -5,7 +5,7 @@ import no.iktdev.mediaprocessing.shared.common.contract.Events data class MediaMetadataReceivedEvent( override val metadata: EventMetadata, - override val eventType: Events = Events.EventMediaMetadataSearchPerformed, + override val eventType: Events = Events.MetadataSearchPerformed, override val data: pyMetadata? = null, ): Event() { } diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaOutInformationConstructedEvent.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaOutInformationConstructedEvent.kt index d15bcc41..a7d857ea 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaOutInformationConstructedEvent.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaOutInformationConstructedEvent.kt @@ -7,7 +7,7 @@ import no.iktdev.mediaprocessing.shared.common.contract.Events data class MediaOutInformationConstructedEvent( override val metadata: EventMetadata, - override val eventType: Events = Events.EventMediaReadOutNameAndType, + override val eventType: Events = Events.ReadOutNameAndType, override val data: MediaInfoReceived? = null ) : Event() { } diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaProcessCompletedEvent.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaProcessCompletedEvent.kt index 4a5b0055..cc965e47 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaProcessCompletedEvent.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaProcessCompletedEvent.kt @@ -2,31 +2,27 @@ package no.iktdev.mediaprocessing.shared.common.contract.data import no.iktdev.eventi.data.EventMetadata import no.iktdev.mediaprocessing.shared.common.contract.Events +import no.iktdev.mediaprocessing.shared.common.contract.reader.SummaryInfo data class MediaProcessCompletedEvent( override val metadata: EventMetadata, - override val data: CompletedEventData?, - override val eventType: Events = Events.EventMediaProcessCompleted + override val data: CompletedData?, + override val eventType: Events = Events.ProcessCompleted ): Event() -data class CompletedEventData( +data class CompletedData( val eventIdsCollected: List, - val videoMoved: VideoMoved?, - val coverMoved: CoverMoved?, - val subtitlesMoved: List + val metadataStored: MetadataStored ) -data class SubtitlesMoved( - val source: String, - val destination: String -) - -data class CoverMoved( - val source: String, - val destination: String -) - -data class VideoMoved( - val source: String, - val destination: String +data class MetadataStored( + val title: String, + val titles: List, + val type: String, + val cover: String? = null, + val collection: String, + val summary: List = emptyList(), + val foundTitles: List, + val genres: List, + val genreIds: String? = null ) \ No newline at end of file diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaProcessStartEvent.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaProcessStartEvent.kt index c91ad00e..76f0a047 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaProcessStartEvent.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/MediaProcessStartEvent.kt @@ -8,7 +8,7 @@ import no.iktdev.mediaprocessing.shared.common.contract.dto.OperationEvents data class MediaProcessStartEvent( override val metadata: EventMetadata, override val data: StartEventData?, - override val eventType: Events = Events.EventMediaProcessStarted + override val eventType: Events = Events.ProcessStarted ): Event() data class StartEventData( diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/PermitWorkCreationEvent.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/PermitWorkCreationEvent.kt index 51340bdf..c184e7d3 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/PermitWorkCreationEvent.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/PermitWorkCreationEvent.kt @@ -5,7 +5,7 @@ import no.iktdev.mediaprocessing.shared.common.contract.Events data class PermitWorkCreationEvent( override val metadata: EventMetadata, - override val eventType: Events = Events.EventMediaWorkProceedPermitted, + override val eventType: Events = Events.WorkProceedPermitted, override val data: String? ) : Event() { } \ No newline at end of file diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/PersistedContentEvent.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/PersistedContentEvent.kt new file mode 100644 index 00000000..f83252e1 --- /dev/null +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/contract/data/PersistedContentEvent.kt @@ -0,0 +1,23 @@ +package no.iktdev.mediaprocessing.shared.common.contract.data + +import no.iktdev.eventi.data.EventMetadata +import no.iktdev.mediaprocessing.shared.common.contract.Events + +data class PersistedContentEvent( + override val eventType: Events = Events.PersistContentPerformed, + override val metadata: EventMetadata, + override val data: PersistedContent? + +): Event() {} + +data class PersistedContent( + val cover: PersistedItem?, + val video: PersistedItem?, + val subtitles: List +) + +data class PersistedItem( + val cacheSourceFileName: String, + val storeDestinationFileName: String +) + diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/cal/EventsManager.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/cal/EventsManager.kt index fd6dd5a8..84913bfc 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/cal/EventsManager.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/cal/EventsManager.kt @@ -9,7 +9,6 @@ import no.iktdev.eventi.database.DataSource import no.iktdev.eventi.database.isCausedByDuplicateError import no.iktdev.eventi.database.isExposedSqlException import no.iktdev.eventi.database.withDirtyRead -import no.iktdev.eventi.implementations.EventsManagerImpl import no.iktdev.mediaprocessing.shared.common.database.tables.allEvents import no.iktdev.mediaprocessing.shared.common.database.tables.events import no.iktdev.mediaprocessing.shared.common.contract.Events @@ -81,10 +80,10 @@ class EventsManager(dataSource: DataSource) : EventsManagerContract(dataSource) private val exemptedFromSingleEvent = listOf( - Events.EventWorkConvertCreated, - Events.EventWorkExtractCreated, - Events.EventWorkConvertPerformed, - Events.EventWorkExtractPerformed + Events.WorkConvertCreated, + Events.WorkExtractCreated, + Events.WorkConvertPerformed, + Events.WorkExtractPerformed ) private fun isExempted(event: Events): Boolean { @@ -95,7 +94,7 @@ class EventsManager(dataSource: DataSource) : EventsManagerContract(dataSource) return withDirtyRead(dataSource.database) { val completedEvents = events .slice(events.referenceId) - .select { events.event eq Events.EventMediaProcessCompleted.event } + .select { events.event eq Events.ProcessCompleted.event } events .slice(events.referenceId) @@ -109,7 +108,7 @@ class EventsManager(dataSource: DataSource) : EventsManagerContract(dataSource) return withDirtyRead(dataSource.database) { events.selectAll() .groupBy { it[events.referenceId] } - .mapNotNull { it.value.mapNotNull { v -> v.toEvent() } }.filter { it.none { e -> e.eventType == Events.EventMediaProcessCompleted } } + .mapNotNull { it.value.mapNotNull { v -> v.toEvent() } }.filter { it.none { e -> e.eventType == Events.ProcessCompleted } } } ?: emptyList() } @@ -118,7 +117,7 @@ class EventsManager(dataSource: DataSource) : EventsManagerContract(dataSource) events.select { events.referenceId eq referenceId } .mapNotNull { it.toEvent() } } ?: emptyList() - return if (events.any { it.eventType == Events.EventMediaProcessCompleted }) emptyList() else events + return if (events.any { it.eventType == Events.ProcessCompleted }) emptyList() else events } override fun getAllEvents(): List> {