Fixed suffix + cover
This commit is contained in:
parent
c2cd6f451e
commit
64c5df4772
@ -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()
|
||||||
|
|||||||
@ -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()
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
)
|
)
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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}"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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(lang, file, storeFile))
|
moved.add(MovedSubtitle(movable.language, movable.cachedFile.absolutePath, storeFile.absolutePath))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
return moved
|
return moved
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@ -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()
|
||||||
@ -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>
|
||||||
)
|
)
|
||||||
|
|||||||
@ -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()
|
||||||
@ -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
|
||||||
)
|
)
|
||||||
@ -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
|
||||||
)
|
)
|
||||||
Loading…
Reference in New Issue
Block a user