fun createRenders(pkg: Package, renderOutputDir: File, renderedAt: Instant): Set { return pkg.templates.map { renderTemplatePath -> val renderTemplate = renderTemplatePath.removeSuffix(".yml").let { id -> templatesById[id] ?: throw Exception("could not find template for id: $id") } val renderDir = renderOutputDir.resolve(renderTemplate.id) check(renderDir.exists() && renderDir.isDirectory) renderMetricTimer.tagVal(renderTemplate.mediaType.name).time { when (renderTemplate.mediaType) { RenderTemplate.MediaType.Video -> { val videoFile = renderDir.listFiles().single { it.extension.equals("MP4", true) } // if no thumbnail was rendered, copy the default thumbnail into the rendered directory if (renderDir.listFiles().singleOrNull { it.extension.equals("JPG", true) } == null) { requireNotNull(renderTemplate.defaultThumbnail) { "no thumbnail was rendered and template has no default thumbnail" }.copyTo(renderDir.resolve("defaultThumbnail.jpg")) } val thumbnail = renderDir.listFiles().single { it.extension.equals("JPG", true) } Render.Video( id = renderTemplate.id, name = renderTemplate.name, renderedAt = renderedAt, videoFile = toRenderFile(videoFile, renderDir), thumbnails = mapOf("1280x720" to toRenderFile(thumbnail, renderDir)) ) } RenderTemplate.MediaType.PhotoGroup -> { Render.PhotoGroup( id = renderTemplate.id, name = renderTemplate.name, renderedAt = renderedAt, localDir = renderDir.absolutePath, numPhotos = renderDir.listFiles().size ) } } } }.toSet() }