From 6b8ebe1340c06e30bcdb35d2e7eb242299d14653 Mon Sep 17 00:00:00 2001 From: arkon Date: Thu, 2 Jun 2022 19:59:40 -0400 Subject: [PATCH] Copy README/CHANGELOG files for multisrc overrides correctly (#12051) --- .../java/generator/ThemeSourceGenerator.kt | 94 +++++++++---------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/multisrc/src/main/java/generator/ThemeSourceGenerator.kt b/multisrc/src/main/java/generator/ThemeSourceGenerator.kt index 2d58390cb..e45b13c98 100644 --- a/multisrc/src/main/java/generator/ThemeSourceGenerator.kt +++ b/multisrc/src/main/java/generator/ThemeSourceGenerator.kt @@ -40,10 +40,11 @@ interface ThemeSourceGenerator { companion object { private fun pkgNameSuffix(source: ThemeSourceData, separator: String): String { - return if (source is ThemeSourceData.SingleLang) + return if (source is ThemeSourceData.SingleLang) { listOf(source.lang.substringBefore("-"), source.pkgName).joinToString(separator) - else + } else { listOf("all", source.pkgName).joinToString(separator) + } } private fun themeSuffix(themePkg: String, separator: String): String { @@ -59,6 +60,7 @@ interface ThemeSourceGenerator { "SOURCEHOST" to source.baseUrl.toHttpUrlOrNull()?.host, "SOURCESCHEME" to source.baseUrl.toHttpUrlOrNull()?.scheme ).filter { it.value != null } + gradle.writeText( """ // THIS FILE IS AUTO-GENERATED; DO NOT EDIT @@ -92,11 +94,11 @@ ${placeholders.map { "${" ".repeat(28)}${it.key}: \"${it.value}\""}.joinToString private fun writeAndroidManifest(androidManifestFile: File, manifestOverridesPath: String, defaultAndroidManifestPath: String) { val androidManifestOverride = File(manifestOverridesPath) val defaultAndroidManifest = File(defaultAndroidManifestPath) - if (androidManifestOverride.exists()) + if (androidManifestOverride.exists()) { androidManifestOverride.copyTo(androidManifestFile) - else if (defaultAndroidManifest.exists()) + } else if (defaultAndroidManifest.exists()) { defaultAndroidManifest.copyTo(androidManifestFile) - else + } else { androidManifestFile.writeText( """ @@ -104,12 +106,14 @@ ${placeholders.map { "${" ".repeat(28)}${it.key}: \"${it.value}\""}.joinToString """.trimIndent() ) + } } private fun createGradleProject(source: ThemeSourceData, themePkg: String, themeClass: String, baseVersionCode: Int, userDir: String) { + // userDir = tachiyomi-extensions project root path val projectRootPath = "$userDir/generated-src/${pkgNameSuffix(source, "/")}" val projectSrcPath = "$projectRootPath/src/eu/kanade/tachiyomi/extension/${pkgNameSuffix(source, "/")}" - val overridesPath = "$userDir/multisrc/overrides/$themePkg/${source.pkgName}" // userDir = tachiyomi-extensions project root path + val overridesPath = "$userDir/multisrc/overrides/$themePkg/${source.pkgName}" val defaultResPath = "$userDir/multisrc/overrides/$themePkg/default/res" val defaultAndroidManifestPath = "$userDir/multisrc/overrides/$themePkg/default/AndroidManifest.xml" val defaultAdditionalGradlePath = "$userDir/multisrc/overrides/$themePkg/default/additional.gradle.kts" @@ -121,7 +125,7 @@ ${placeholders.map { "${" ".repeat(28)}${it.key}: \"${it.value}\""}.joinToString val projectAndroidManifestFile = File("$projectRootPath/AndroidManifest.xml") File(projectRootPath).let { projectRootFile -> - println("Working on $source") + println("Generating $source") projectRootFile.mkdirs() // remove everything from past runs @@ -131,27 +135,22 @@ ${placeholders.map { "${" ".repeat(28)}${it.key}: \"${it.value}\""}.joinToString writeAndroidManifest(projectAndroidManifestFile, manifestOverridePath, defaultAndroidManifestPath) writeSourceClasses(projectSrcPath, srcOverridePath, source, themePkg, themeClass) - copyThemeReadmes(userDir, themePkg, projectRootPath) - copyThemeClasses(userDir, themePkg, projectRootPath) - + copyThemeReadmes(overridesPath, projectRootPath) copyResFiles(resOverridePath, defaultResPath, source, projectRootPath) } } - private fun copyThemeReadmes(userDir: String, themePkg: String, projectRootPath: String) { - val sourcePath = "$userDir/multisrc/src/main/java/${themeSuffix(themePkg, "/")}" - val sourceFile = File(sourcePath) + private fun copyThemeReadmes(overridesPath: String, projectRootPath: String) { val destinationPath = "$projectRootPath" + File(destinationPath).mkdirs() - val destinationFile = File(destinationPath) - destinationFile.mkdirs() - - sourceFile.list()!! - .filter { it.endsWith("README.md") || it.endsWith("CHANGELOG.md") } - .forEach { + File(overridesPath) + ?.list() + ?.filter { it.endsWith("README.md") || it.endsWith("CHANGELOG.md") } + ?.forEach { Files.copy( - File("$sourcePath/$it").toPath(), + File("$overridesPath/$it").toPath(), File("$destinationPath/$it").toPath(), StandardCopyOption.REPLACE_EXISTING ) @@ -160,15 +159,14 @@ ${placeholders.map { "${" ".repeat(28)}${it.key}: \"${it.value}\""}.joinToString private fun copyThemeClasses(userDir: String, themePkg: String, projectRootPath: String) { val themeSrcPath = "$userDir/multisrc/src/main/java/${themeSuffix(themePkg, "/")}" - val themeSrcFile = File(themeSrcPath) + val themeDestPath = "$projectRootPath/src/${themeSuffix(themePkg, "/")}" + File(themeDestPath).mkdirs() - val themeDestFile = File(themeDestPath) - themeDestFile.mkdirs() - - themeSrcFile.list()!! - .filter { it.endsWith(".kt") && !it.endsWith("Generator.kt") } - .forEach { Files.copy(File("$themeSrcPath/$it").toPath(), File("$themeDestPath/$it").toPath(), StandardCopyOption.REPLACE_EXISTING) } + File(themeSrcPath) + ?.list() + ?.filter { it.endsWith(".kt") && !it.endsWith("Generator.kt") } + ?.forEach { Files.copy(File("$themeSrcPath/$it").toPath(), File("$themeDestPath/$it").toPath(), StandardCopyOption.REPLACE_EXISTING) } } private fun copyResFiles(resOverridePath: String, defaultResPath: String, source: ThemeSourceData, projectRootPath: String): Any { @@ -185,32 +183,32 @@ ${placeholders.map { "${" ".repeat(28)}${it.key}: \"${it.value}\""}.joinToString private fun writeSourceClasses(projectSrcPath: String, srcOverridePath: String, source: ThemeSourceData, themePkg: String, themeClass: String) { val projectSrcFile = File(projectSrcPath) projectSrcFile.mkdirs() + val srcOverrideFile = File(srcOverridePath) - if (srcOverrideFile.exists()) + if (srcOverrideFile.exists()) { srcOverrideFile.copyRecursively(projectSrcFile) - else + } else { writeSourceClass(projectSrcFile, source, themePkg, themeClass) + } } private fun writeSourceClass(classPath: File, source: ThemeSourceData, themePkg: String, themeClass: String) { - fun factoryClassText(): String { - return when (source) { - is ThemeSourceData.SingleLang -> { - """class ${source.className} : $themeClass("${source.sourceName}", "${source.baseUrl}", "${source.lang}")""" + fun factoryClassText() = when (source) { + is ThemeSourceData.SingleLang -> { + """class ${source.className} : $themeClass("${source.sourceName}", "${source.baseUrl}", "${source.lang}")""" + } + is ThemeSourceData.MultiLang -> { + val sourceClasses = source.langs.map { lang -> + """$themeClass("${source.sourceName}", "${source.baseUrl}", "$lang")""" } - is ThemeSourceData.MultiLang -> { - val sourceClasses = source.langs.map { lang -> - """$themeClass("${source.sourceName}", "${source.baseUrl}", "$lang")""" - } - """ - class ${source.className} : SourceFactory { - override fun createSources() = listOf( - ${sourceClasses.joinToString(",\n")} - ) - } - """.trimIndent() + """ + class ${source.className} : SourceFactory { + override fun createSources() = listOf( + ${sourceClasses.joinToString(",\n")} + ) } + """.trimIndent() } } @@ -228,9 +226,11 @@ ${placeholders.map { "${" ".repeat(28)}${it.key}: \"${it.value}\""}.joinToString } private fun cleanDirectory(dir: File) { - dir.listFiles()?.forEach { file -> - if (file.isDirectory) cleanDirectory(file) - file.delete() + dir.listFiles()?.forEach { + if (it.isDirectory) { + cleanDirectory(it) + } + it.delete() } } }