mirror of
https://github.com/revanced/revanced-cli.git
synced 2024-06-02 11:26:06 +02:00
53 lines
1.8 KiB
Kotlin
53 lines
1.8 KiB
Kotlin
package app.revanced.cli.command
|
|
|
|
import app.revanced.lib.Options
|
|
import app.revanced.lib.Options.setOptions
|
|
import app.revanced.patcher.PatchBundleLoader
|
|
import picocli.CommandLine
|
|
import picocli.CommandLine.Help.Visibility.ALWAYS
|
|
import java.io.File
|
|
import java.util.logging.Logger
|
|
|
|
@CommandLine.Command(
|
|
name = "options",
|
|
description = ["Generate options file from patches"],
|
|
)
|
|
internal object OptionsCommand : Runnable {
|
|
private val logger = Logger.getLogger(OptionsCommand::class.java.name)
|
|
|
|
@CommandLine.Parameters(
|
|
description = ["Paths to patch bundles"], arity = "1..*"
|
|
)
|
|
private lateinit var patchBundles: Array<File>
|
|
|
|
@CommandLine.Option(
|
|
names = ["-p", "--path"], description = ["Path to patch options JSON file"], showDefaultValue = ALWAYS
|
|
)
|
|
private var filePath: File = File("options.json")
|
|
|
|
@CommandLine.Option(
|
|
names = ["-o", "--overwrite"], description = ["Overwrite existing options file"], showDefaultValue = ALWAYS
|
|
)
|
|
private var overwrite: Boolean = false
|
|
|
|
@CommandLine.Option(
|
|
names = ["-u", "--update"],
|
|
description = ["Update existing options by adding missing and removing non-existent options"],
|
|
showDefaultValue = ALWAYS
|
|
)
|
|
private var update: Boolean = false
|
|
|
|
override fun run() = try {
|
|
PatchBundleLoader.Jar(*patchBundles).let { patches ->
|
|
if (!filePath.exists() || overwrite) {
|
|
if (update && filePath.exists()) patches.setOptions(filePath)
|
|
|
|
Options.serialize(patches, prettyPrint = true).let(filePath::writeText)
|
|
} else throw OptionsFileAlreadyExistsException()
|
|
}
|
|
} catch (ex: OptionsFileAlreadyExistsException) {
|
|
logger.severe("Options file already exists, use --overwrite to override it")
|
|
}
|
|
|
|
class OptionsFileAlreadyExistsException : Exception()
|
|
} |