diff --git a/README-template.md b/README-template.md index 4b57ee78b..26880e6c5 100644 --- a/README-template.md +++ b/README-template.md @@ -17,7 +17,6 @@ Example: { "name": "default-video-quality", "description": "Adds ability to set default video quality settings.", - "version": "0.0.1", "excluded": false, "options": [], "dependencies": [ diff --git a/build.gradle.kts b/build.gradle.kts index d94b4a368..3f22ff749 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,6 +20,12 @@ repositories { password = githubPassword } } + maven { + url = uri("https://repo.sleeping.town") + content { + includeGroup("com.unascribed") + } + } } dependencies { @@ -28,6 +34,8 @@ dependencies { // Required for meta implementation("com.google.code.gson:gson:2.10.1") + // Required for FlexVer-Java + implementation("com.unascribed:flexver-java:1.1.1") } tasks { diff --git a/src/main/kotlin/app/revanced/meta/PatchesFileGenerator.kt b/src/main/kotlin/app/revanced/meta/PatchesFileGenerator.kt index 23c1d100f..42e70c5fc 100644 --- a/src/main/kotlin/app/revanced/meta/PatchesFileGenerator.kt +++ b/src/main/kotlin/app/revanced/meta/PatchesFileGenerator.kt @@ -16,7 +16,11 @@ 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..ccfd430f0 --- /dev/null +++ b/src/main/kotlin/app/revanced/meta/ReadmeGenerator.kt @@ -0,0 +1,69 @@ +package app.revanced.meta + +import app.revanced.patcher.data.Context +import app.revanced.patcher.extensions.PatchExtensions.compatiblePackages +import app.revanced.patcher.extensions.PatchExtensions.description +import app.revanced.patcher.extensions.PatchExtensions.patchName +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(bundle: PatchBundlePatches) { + val output = StringBuilder() + + mutableMapOf>>>>() + .apply { + for (patch in bundle) { + patch.compatiblePackages?.forEach { pkg -> + if (!contains(pkg.name)) put(pkg.name, mutableListOf()) + this[pkg.name]!!.add(patch) + } + } + } + .entries + .sortedByDescending { it.value.size } + .forEach { (`package`, patches) -> + val mostCommonVersion = buildMap { + patches.forEach { patch -> + patch.compatiblePackages?.single { compatiblePackage -> compatiblePackage.name == `package` }?.versions?.let { + it.forEach { version -> merge(version, 1, Integer::sum) } + } + } + }.let { commonMap -> + commonMap.maxByOrNull { it.value }?.value?.let { + commonMap.entries.filter { mostCommon -> mostCommon.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.forEach { patch -> + val recommendedPatchVersion = if ( + patch.compatiblePackages?.single { it.name == `package` }?.versions?.isNotEmpty() == true + ) mostCommonVersion else "all" + + appendLine( + "| `${patch.patchName.lowercase().replace(" ", "-")}` " + + "| ${patch.description} " + + "| $recommendedPatchVersion |" + ) + } + 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