From 8b487479d9449ba458ef17da14bf5eec6c49ce91 Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Mon, 9 Oct 2023 20:35:35 +0900 Subject: [PATCH] chore: restore `ReadmeGenerator` --- .../app/revanced/meta/PatchesFileGenerator.kt | 2 +- .../app/revanced/meta/ReadmeGenerator.kt | 81 +++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/app/revanced/meta/ReadmeGenerator.kt diff --git a/src/main/kotlin/app/revanced/meta/PatchesFileGenerator.kt b/src/main/kotlin/app/revanced/meta/PatchesFileGenerator.kt index 61d8e85da..be9010fce 100644 --- a/src/main/kotlin/app/revanced/meta/PatchesFileGenerator.kt +++ b/src/main/kotlin/app/revanced/meta/PatchesFileGenerator.kt @@ -14,7 +14,7 @@ internal interface PatchesFileGenerator { ).also { loader -> if (loader.isEmpty()) throw IllegalStateException("No patches found") }.let { bundle -> - arrayOf(JsonGenerator()).forEach { generator -> generator.generate(bundle) } + arrayOf(JsonGenerator(), ReadmeGenerator()).forEach { generator -> generator.generate(bundle) } } } } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/meta/ReadmeGenerator.kt b/src/main/kotlin/app/revanced/meta/ReadmeGenerator.kt new file mode 100644 index 000000000..1db846370 --- /dev/null +++ b/src/main/kotlin/app/revanced/meta/ReadmeGenerator.kt @@ -0,0 +1,81 @@ +package app.revanced.meta + +import app.revanced.patcher.PatchSet +import app.revanced.patcher.patch.Patch +import com.unascribed.flexver.FlexVerComparator +import java.io.File + +internal class ReadmeGenerator : PatchesFileGenerator { + private companion object { + private const val TABLE_HEADER = + "| \uD83D\uDC8A Patch | \uD83D\uDCDC Description | \uD83C\uDFF9 Target Version |\n" + + "|:--------:|:--------------:|:-----------------:|" + } + + override fun generate(patches: PatchSet) { + val output = StringBuilder() + + mutableMapOf>>() + .apply { + for (patch in patches) { + patch.compatiblePackages?.forEach { pkg -> + if (!contains(pkg.name)) put(pkg.name, mutableSetOf()) + this[pkg.name]!!.add(patch) + } + } + } + .entries + .sortedByDescending { it.value.size } + .forEach { (`package`, patches) -> + val supportVersions = buildMap { + patches.forEach { patch -> + patch.compatiblePackages?.single { compatiblePackage -> compatiblePackage.name == `package` }?.versions?.let { + it.forEach { version -> merge(version, 1, Integer::sum) } + } + } + } + + val minVersion = supportVersions.let { commonMap -> + commonMap.maxByOrNull { it.value }?.value?.let { + commonMap.entries.filter { supported -> supported.value == it } + .minOfWith(FlexVerComparator::compare, Map.Entry::key) + } ?: "all" + } + val maxVersion = supportVersions.let { commonMap -> + commonMap.maxByOrNull { it.value }?.value?.let { + commonMap.entries.filter { supported -> supported.value == it } + .maxOfWith(FlexVerComparator::compare, Map.Entry::key) + } ?: "all" + } + + output.apply { + appendLine("### [\uD83D\uDCE6 `${`package`}`](https://play.google.com/store/apps/details?id=${`package`})") + appendLine("
\n") + appendLine(TABLE_HEADER) + patches.sortedBy { it.name }.forEach { patch -> + val supportedVersion = + if ( + patch.compatiblePackages?.single { it.name == `package` }?.versions?.isNotEmpty() == true + ) { + if (minVersion == maxVersion) + maxVersion + else + "$minVersion ~ $maxVersion" + } else + "all" + + appendLine( + "| `${patch.name}` " + + "| ${patch.description} " + + "| $supportedVersion |" + ) + } + appendLine("
\n") + } + } + + StringBuilder(File("README-template.md").readText()) + .replace(Regex("\\{\\{\\s?table\\s?}}"), output.toString()) + .let(File("README.md")::writeText) + } +} \ No newline at end of file