Skip to content
This repository was archived by the owner on Apr 15, 2024. It is now read-only.

Commit 8d96ec8

Browse files
committed
feat: Add progress bar
1 parent bea8b82 commit 8d96ec8

File tree

3 files changed

+58
-14
lines changed

3 files changed

+58
-14
lines changed

build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ dependencies {
2828
implementation(patchesDependency)
2929

3030
implementation("com.google.code.gson:gson:2.9.0")
31+
implementation("me.tongfei:progressbar:0.9.3")
3132
}
3233

3334
tasks {

src/main/kotlin/app/revanced/cli/Main.kt

+47-8
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@ import app.revanced.cli.utils.Patches
55
import app.revanced.cli.utils.Preconditions
66
import app.revanced.cli.utils.SignatureParser
77
import app.revanced.patcher.Patcher
8+
import app.revanced.patcher.patch.PatchResult
89
import kotlinx.cli.ArgParser
910
import kotlinx.cli.ArgType
1011
import kotlinx.cli.required
12+
import me.tongfei.progressbar.ProgressBarBuilder
13+
import me.tongfei.progressbar.ProgressBarStyle
1114
import java.io.File
1215
import java.nio.file.Files
1316

@@ -23,35 +26,71 @@ class Main {
2326
inIntegrations: String?,
2427
inOutput: String,
2528
) {
29+
val bar = ProgressBarBuilder()
30+
.setTaskName("Working..")
31+
.setUpdateIntervalMillis(25)
32+
.continuousUpdate()
33+
.setStyle(ProgressBarStyle.ASCII)
34+
.build()
35+
.maxHint(1)
36+
.setExtraMessage("Initializing")
2637
val apk = Preconditions.isFile(inApk)
2738
val signatures = Preconditions.isFile(inSignatures)
2839
val patchesFile = Preconditions.isFile(inPatches)
2940
val output = Preconditions.isDirectory(inOutput)
41+
bar.step()
3042

3143
val patcher = Patcher(
3244
apk,
33-
SignatureParser
34-
.parse(signatures.readText())
35-
.toTypedArray()
45+
SignatureParser.parse(signatures.readText(), bar)
3646
)
3747

3848
inIntegrations?.let {
49+
bar.reset().maxHint(1)
50+
.extraMessage = "Merging integrations"
3951
val integrations = Preconditions.isFile(it)
4052
patcher.addFiles(integrations)
53+
bar.step()
4154
}
4255

56+
bar.reset().maxHint(1)
57+
.extraMessage = "Loading patches"
4358
PatchLoader.injectPatches(patchesFile)
44-
val patches = Patches.loadPatches()
45-
patcher.addPatches(*patches.map { it() }.toTypedArray())
59+
bar.step()
4660

47-
val results = patcher.applyPatches()
48-
for ((name, result) in results) {
49-
println("$name: $result")
61+
val patches = Patches.loadPatches().map { it() }
62+
patcher.addPatches(patches)
63+
64+
val amount = patches.size.toLong()
65+
bar.reset().maxHint(amount)
66+
.extraMessage = "Applying patches"
67+
val results = patcher.applyPatches {
68+
bar.step().extraMessage = "Applying $it"
5069
}
5170

71+
bar.reset().maxHint(-1)
72+
.extraMessage = "Generating dex files"
5273
val dexFiles = patcher.save()
74+
bar.reset().maxHint(dexFiles.size.toLong())
75+
.extraMessage = "Saving dex files"
5376
dexFiles.forEach { (dexName, dexData) ->
5477
Files.write(File(output, dexName).toPath(), dexData.buffer)
78+
bar.step()
79+
}
80+
bar.close()
81+
82+
println("All done!")
83+
printResults(results)
84+
}
85+
86+
private fun printResults(results: Map<String, Result<PatchResult>>) {
87+
for ((name, result) in results) {
88+
if (result.isSuccess) {
89+
println("Patch $name was applied successfully!")
90+
} else {
91+
println("Patch $name failed to apply! Cause:")
92+
result.exceptionOrNull()!!.printStackTrace()
93+
}
5594
}
5695
}
5796

src/main/kotlin/app/revanced/cli/utils/SignatureParser.kt

+10-6
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@ package app.revanced.cli.utils
22

33
import app.revanced.patcher.signature.MethodSignature
44
import com.google.gson.JsonParser
5+
import me.tongfei.progressbar.ProgressBar
56
import org.jf.dexlib2.AccessFlags
67
import org.jf.dexlib2.Opcodes
78

89
class SignatureParser {
910
companion object {
10-
fun parse(json: String): List<MethodSignature> {
11-
val signatures = JsonParser.parseString(json).asJsonObject.get("signatures").asJsonArray.map { sig ->
11+
fun parse(json: String, bar: ProgressBar): List<MethodSignature> {
12+
val tmp = JsonParser.parseString(json).asJsonObject.get("signatures").asJsonArray
13+
bar.reset().maxHint(tmp.size().toLong())
14+
.extraMessage = "Parsing signatures"
15+
val signatures = tmp.map { sig ->
1216
val signature = sig.asJsonObject
1317
val returnType = signature.get("returns").asString
1418

@@ -19,21 +23,21 @@ class SignatureParser {
1923

2024
val parameters = signature.get("parameters").asJsonArray
2125
.map { it.asString }
22-
.toTypedArray()
2326

2427
val opcodes = signature.get("opcodes").asJsonArray
2528
.map { Opcodes.getDefault().getOpcodeByName(it.asString)!! }
26-
.toTypedArray()
2729

30+
val name = signature.get("name").asString
31+
bar.step()
32+
.extraMessage = "Parsing $name"
2833
MethodSignature(
29-
signature.get("name").asString,
34+
name,
3035
returnType,
3136
accessFlags,
3237
parameters,
3338
opcodes
3439
)
3540
}
36-
3741
return signatures
3842
}
3943
}

0 commit comments

Comments
 (0)