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(
language = taskData.language,
outputFiles = outputFiles
outputFiles = outputFiles,
baseName = taskData.storeFileName
)
))
onClearTask()

View File

@ -166,7 +166,7 @@ class CompletedTaskListener : CoordinatorEventListener() {
ContentSubtitleStore.storeSubtitles(
collection = usableCollection,
language = it.language,
destinationFile = it.destination
destinationFile = File(it.destination)
)
}
}
@ -183,7 +183,10 @@ class CompletedTaskListener : CoordinatorEventListener() {
onProduceEvent(MediaProcessCompletedEvent(
metadata = event.makeDerivedEventInfo(EventStatus.Success, getProducerName()),
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 storeAsFile: String? = null
val file = if (event.eventType == Events.EventWorkExtractPerformed) {
val foundEvent = event.az<ExtractWorkPerformedEvent>()?.data
language = foundEvent?.language
storeAsFile = foundEvent?.storeFileName
foundEvent?.outputFile
} else if (event.eventType == Events.EventMediaProcessStarted) {
val startEvent = event.az<MediaProcessStartEvent>()?.data
@ -101,6 +103,7 @@ class ConvertWorkTaskListener: WorkTaskListener() {
language = language ?: "unk",
inputFile = convertFile.absolutePath,
outputFileName = convertFile.nameWithoutExtension,
storeFileName = storeAsFile ?: convertFile.nameWithoutExtension,
outputDirectory = convertFile.parentFile.absolutePath,
allowOverwrite = true
)

View File

@ -57,7 +57,8 @@ class CoverDownloadTaskListener : CoordinatorEventListener() {
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) {
outFile

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -10,5 +10,23 @@ data class MediaProcessCompletedEvent(
): Event()
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
)