Fixed suffix + cover

This commit is contained in:
bskjon 2025-01-05 16:52:08 +01:00
parent c2cd6f451e
commit 64c5df4772
12 changed files with 75 additions and 23 deletions

View File

@ -97,7 +97,8 @@ class ConvertService(
), ),
data = ConvertedData( data = ConvertedData(
language = taskData.language, language = taskData.language,
outputFiles = outputFiles outputFiles = outputFiles,
baseName = taskData.storeFileName
) )
)) ))
onClearTask() onClearTask()

View File

@ -166,7 +166,7 @@ class CompletedTaskListener : CoordinatorEventListener() {
ContentSubtitleStore.storeSubtitles( ContentSubtitleStore.storeSubtitles(
collection = usableCollection, collection = usableCollection,
language = it.language, language = it.language,
destinationFile = it.destination destinationFile = File(it.destination)
) )
} }
} }
@ -183,7 +183,10 @@ class CompletedTaskListener : CoordinatorEventListener() {
onProduceEvent(MediaProcessCompletedEvent( onProduceEvent(MediaProcessCompletedEvent(
metadata = event.makeDerivedEventInfo(EventStatus.Success, getProducerName()), metadata = event.makeDerivedEventInfo(EventStatus.Success, getProducerName()),
data = CompletedEventData( data = CompletedEventData(
events.map { it.eventId() } 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()
) )
)) ))
} }

View File

@ -64,11 +64,13 @@ class ConvertWorkTaskListener: WorkTaskListener() {
} }
var language: String? = null var language: String? = null
var storeAsFile: String? = null
val file = if (event.eventType == Events.EventWorkExtractPerformed) { val file = if (event.eventType == Events.EventWorkExtractPerformed) {
val foundEvent = event.az<ExtractWorkPerformedEvent>()?.data val foundEvent = event.az<ExtractWorkPerformedEvent>()?.data
language = foundEvent?.language language = foundEvent?.language
storeAsFile = foundEvent?.storeFileName
foundEvent?.outputFile foundEvent?.outputFile
} else if (event.eventType == Events.EventMediaProcessStarted) { } else if (event.eventType == Events.EventMediaProcessStarted) {
val startEvent = event.az<MediaProcessStartEvent>()?.data val startEvent = event.az<MediaProcessStartEvent>()?.data
@ -101,6 +103,7 @@ class ConvertWorkTaskListener: WorkTaskListener() {
language = language ?: "unk", language = language ?: "unk",
inputFile = convertFile.absolutePath, inputFile = convertFile.absolutePath,
outputFileName = convertFile.nameWithoutExtension, outputFileName = convertFile.nameWithoutExtension,
storeFileName = storeAsFile ?: convertFile.nameWithoutExtension,
outputDirectory = convertFile.parentFile.absolutePath, outputDirectory = convertFile.parentFile.absolutePath,
allowOverwrite = true allowOverwrite = true
) )

View File

@ -57,7 +57,8 @@ class CoverDownloadTaskListener : CoordinatorEventListener() {
client.getOutFile() client.getOutFile()
} }
val coversInDifferentFormats = SharedConfig.cachedContent.listFiles { it -> it.isFile && it.extension.lowercase() in client.contentTypeToExtension().values } ?: emptyArray() val coversInDifferentFormats = SharedConfig.cachedContent.listFiles { it -> it.isFile && it.extension.lowercase() in client.contentTypeToExtension().values }
?.filter { it.nameWithoutExtension.contains(data.outFileBaseName, ignoreCase = true) } ?: emptyList()
val result = if (outFile?.exists() == true) { val result = if (outFile?.exists() == true) {
outFile outFile

View File

@ -20,7 +20,8 @@ class ExtractWorkArgumentsMapping(
inputFile = inputFile, inputFile = inputFile,
language = it.language, language = it.language,
arguments = it.codecParameters + it.optionalParameters + listOf("-map", "0:s:${it.index}"), arguments = it.codecParameters + it.optionalParameters + listOf("-map", "0:s:${it.index}"),
outputFileName = "${outFileFullName}.${it.language}.${it.format}" outputFileName = "${outFileFullName}.${it.language}.${it.format}",
storeFileName = "${outFileFullName}.${it.format}"
) )
} }

View File

@ -60,20 +60,42 @@ class ContentCompletionMover(val collection: String, val events: List<Event>) {
} }
fun getMovableSubtitles(): Map<String, List<File>> {
data class MovableSubtitle(
val language: String,
val cachedFile: File,
val storeFile: String
)
fun getMovableSubtitles(): List<MovableSubtitle> {
val extracted = val extracted =
events.filter { it.eventType == Events.EventWorkExtractPerformed }.mapNotNull { it.dataAs<ExtractedData>() } events.filter { it.eventType == Events.EventWorkExtractPerformed }.mapNotNull { it.dataAs<ExtractedData>() }
val converted = val converted =
events.filter { it.eventType == Events.EventWorkConvertPerformed }.mapNotNull { it.dataAs<ConvertedData>() } events.filter { it.eventType == Events.EventWorkConvertPerformed }.mapNotNull { it.dataAs<ConvertedData>() }
return extracted.groupBy { it.language }.mapValues { v -> v.value.map { File(it.outputFile) } } + val items = mutableListOf<MovableSubtitle>()
converted.groupBy { it.language }.mapValues { v -> v.value.flatMap { it.outputFiles }.map { File(it) } }
extracted.map { MovableSubtitle(
language = it.language,
cachedFile = File(it.outputFile),
storeFile = it.storeFileName
) }.also { items.addAll(it) }
converted.flatMap { it.outputFiles.map { outFile ->
MovableSubtitle(
language = it.language,
cachedFile = File(outFile),
storeFile = it.baseName
)
} }.also { items.addAll(it) }
return items
} }
data class MovedSubtitle( data class MovedSubtitle(
val language: String, val language: String,
val source: File, val source: String,
val destination: File val destination: String
) )
fun moveSubtitles(): List<MovedSubtitle>? { fun moveSubtitles(): List<MovedSubtitle>? {
@ -81,24 +103,22 @@ class ContentCompletionMover(val collection: String, val events: List<Event>) {
val moved: MutableList<MovedSubtitle> = mutableListOf() val moved: MutableList<MovedSubtitle> = mutableListOf()
val subtitles = getMovableSubtitles() val subtitles = getMovableSubtitles()
if (subtitles.isEmpty() || subtitles.values.isEmpty()) { if (subtitles.isEmpty()) {
return null return null
} }
for ((lang, files) in subtitles) { for (movable in subtitles) {
val languageFolder = subtitleFolder.using(lang).also { val languageFolder = subtitleFolder.using(movable.language).also {
if (it.notExist()) { if (it.notExist()) {
it.mkdirs() it.mkdirs()
} }
} }
for (file in files) { val storeFile = languageFolder.using(movable.storeFile)
val storeFile = languageFolder.using(file.name) val success = movable.cachedFile.moveTo(storeFile)
val success = file.moveTo(storeFile) if (success) {
if (success) { moved.add(MovedSubtitle(movable.language, movable.cachedFile.absolutePath, storeFile.absolutePath))
moved.add(MovedSubtitle(lang, file, storeFile))
}
} }
} }
return moved return moved
} }

View File

@ -120,8 +120,9 @@ class ExtractService(
source = getProducerName() source = getProducerName()
), ),
data = ExtractedData( data = ExtractedData(
taskData.language, language = taskData.language,
outputFile outputFile = outputFile,
storeFileName = taskData.storeFileName
) )
) )
) )

View File

@ -17,6 +17,7 @@ data class ConvertData(
val language: String, val language: String,
val outputDirectory: String, val outputDirectory: String,
val outputFileName: String, val outputFileName: String,
val storeFileName: String,
val formats: List<SubtitleFormats> = emptyList(), val formats: List<SubtitleFormats> = emptyList(),
val allowOverwrite: Boolean val allowOverwrite: Boolean
): TaskData() ): TaskData()

View File

@ -13,5 +13,6 @@ class ConvertWorkPerformed(
data class ConvertedData( data class ConvertedData(
val language: String, val language: String,
val baseName: String,
val outputFiles: List<String> val outputFiles: List<String>
) )

View File

@ -14,6 +14,7 @@ data class ExtractArgumentCreatedEvent(
data class ExtractArgumentData( data class ExtractArgumentData(
val arguments: List<String>, val arguments: List<String>,
val language: String, val language: String,
val storeFileName: String,
val outputFileName: String, val outputFileName: String,
override val inputFile: String override val inputFile: String
): TaskData() ): TaskData()

View File

@ -13,5 +13,6 @@ data class ExtractWorkPerformedEvent(
data class ExtractedData( data class ExtractedData(
val language: String, val language: String,
val storeFileName: String,
val outputFile: String val outputFile: String
) )

View File

@ -10,5 +10,23 @@ data class MediaProcessCompletedEvent(
): Event() ): Event()
data class CompletedEventData( data class CompletedEventData(
val eventIdsCollected: List<String> val eventIdsCollected: List<String>,
val videoMoved: VideoMoved?,
val coverMoved: CoverMoved?,
val subtitlesMoved: List<SubtitlesMoved>
)
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
) )