4
0
Fork 0
mirror of https://github.com/Anvilcraft/modpacktools synced 2024-06-02 18:49:31 +02:00

add and implement arg function to make arguments for commands cleaner and more kotliny

This commit is contained in:
LordMZTE 2020-08-14 19:47:19 +02:00
parent 38d9f13547
commit 77b146cb6c
6 changed files with 71 additions and 42 deletions

View file

@ -9,6 +9,7 @@ import ley.anvil.modpacktools.command.CommandReturn.Companion.fail
import ley.anvil.modpacktools.command.CommandReturn.Companion.success import ley.anvil.modpacktools.command.CommandReturn.Companion.success
import ley.anvil.modpacktools.command.LoadCommand import ley.anvil.modpacktools.command.LoadCommand
import ley.anvil.modpacktools.util.addonscript.installFile import ley.anvil.modpacktools.util.addonscript.installFile
import ley.anvil.modpacktools.util.arg
import ley.anvil.modpacktools.util.downloadFiles import ley.anvil.modpacktools.util.downloadFiles
import ley.anvil.modpacktools.util.fPrintln import ley.anvil.modpacktools.util.fPrintln
import ley.anvil.modpacktools.util.manifest.convertAStoManifest import ley.anvil.modpacktools.util.manifest.convertAStoManifest
@ -33,9 +34,10 @@ object BuildTwitch : AbstractCommand("BuildTwitch") {
private val downloadDir by lazy {File(tempDir, "download")} private val downloadDir by lazy {File(tempDir, "download")}
override fun ArgumentParser.addArgs() { override fun ArgumentParser.addArgs() {
addArgument("-a", "--all") arg("-a", "--all") {
.help("Downloads all relations instead of just required ones") help("Downloads all relations instead of just required ones")
.action(storeTrue()) action(storeTrue())
}
} }
override fun execute(args: Namespace): CommandReturn { override fun execute(args: Namespace): CommandReturn {

View file

@ -22,6 +22,7 @@ import ley.anvil.modpacktools.command.AbstractCommand
import ley.anvil.modpacktools.command.CommandReturn import ley.anvil.modpacktools.command.CommandReturn
import ley.anvil.modpacktools.command.CommandReturn.Companion.success import ley.anvil.modpacktools.command.CommandReturn.Companion.success
import ley.anvil.modpacktools.command.LoadCommand import ley.anvil.modpacktools.command.LoadCommand
import ley.anvil.modpacktools.util.arg
import ley.anvil.modpacktools.util.fPrintln import ley.anvil.modpacktools.util.fPrintln
import net.sourceforge.argparse4j.impl.Arguments.storeTrue import net.sourceforge.argparse4j.impl.Arguments.storeTrue
import net.sourceforge.argparse4j.impl.type.CaseInsensitiveEnumNameArgumentType import net.sourceforge.argparse4j.impl.type.CaseInsensitiveEnumNameArgumentType
@ -41,22 +42,26 @@ object CreateModlist : AbstractCommand("CreateModlist") {
override val helpMessage: String = "This creates a modlist either as html or csv file." override val helpMessage: String = "This creates a modlist either as html or csv file."
override fun ArgumentParser.addArgs() { override fun ArgumentParser.addArgs() {
addArgument("-s", "--sorting") arg("-s", "--sorting") {
.type(CaseInsensitiveEnumNameArgumentType(Sorting::class.java)) default = Sorting.NAME
.setDefault(Sorting.NAME) type(CaseInsensitiveEnumNameArgumentType(Sorting::class.java))
.help("Determines How mods should be sorted") help("Determines How mods should be sorted")
}
addArgument("-a", "--all") arg("-a", "--all") {
.action(storeTrue()) action(storeTrue())
.help("If this is set, all relations and not only be mods will be in the list") help("If this is set, all relations and not only be mods will be in the list")
}
addArgument("type") arg("type") {
.type(CaseInsensitiveEnumNameArgumentType(Format::class.java)) type(CaseInsensitiveEnumNameArgumentType(Format::class.java))
.help("What format the mod list should be made in") help("What format the mod list should be made in")
}
addArgument("file") arg("file") {
.type(FileArgumentType().verifyNotExists()) type(FileArgumentType().verifyNotExists())
.help("What file the mod list should be written to") help("What file the mod list should be written to")
}
} }
override fun execute(args: Namespace): CommandReturn { override fun execute(args: Namespace): CommandReturn {

View file

@ -7,6 +7,7 @@ import ley.anvil.modpacktools.command.CommandReturn
import ley.anvil.modpacktools.command.CommandReturn.Companion.success import ley.anvil.modpacktools.command.CommandReturn.Companion.success
import ley.anvil.modpacktools.command.LoadCommand import ley.anvil.modpacktools.command.LoadCommand
import ley.anvil.modpacktools.util.DownloadFileTask import ley.anvil.modpacktools.util.DownloadFileTask
import ley.anvil.modpacktools.util.arg
import ley.anvil.modpacktools.util.downloadFiles import ley.anvil.modpacktools.util.downloadFiles
import ley.anvil.modpacktools.util.fPrintln import ley.anvil.modpacktools.util.fPrintln
import net.sourceforge.argparse4j.impl.Arguments.storeTrue import net.sourceforge.argparse4j.impl.Arguments.storeTrue
@ -22,28 +23,30 @@ object DownloadMods : AbstractCommand("DownloadMods") {
override val helpMessage: String = "Downloads all mods." override val helpMessage: String = "Downloads all mods."
override fun ArgumentParser.addArgs() { override fun ArgumentParser.addArgs() {
addArgument("dir") arg("dir") {
.type(FileArgumentType().verifyCanCreate()) type(FileArgumentType().verifyCanCreate())
.help("the directory to download the mods to") help("the directory to download the mods to")
}
addArgument("-f", "--force") arg("-f", "--force") {
.action(storeTrue()) action(storeTrue())
.help("if true, mods that are already in the download folder will be downloaded again") help("if true, mods that are already in the download folder will be downloaded again")
}
addArgument("-a", "--all") arg("-a", "--all") {
.action(storeTrue()) action(storeTrue())
.help("Downloads not only mods but everything with a dir installer") help("Downloads not only mods but everything with a dir installer")
}
} }
override fun execute(args: Namespace): CommandReturn { override fun execute(args: Namespace): CommandReturn {
val json = MPJH.asWrapper val json = MPJH.asWrapper
val fileList = mutableListOf<FileOrLink>() val fileList = mutableListOf<FileOrLink>()
for( for(
rel in json!!.defaultVersion!!.getRelations( rel in json!!.defaultVersion!!.getRelations {
arrayOf("client"), "client" in it.options && (args.getBoolean("all") || it.type == "mod")
if(args.getBoolean("all")) null else arrayOf("mod") }
)!! )
) //TODO only client? what if someone wants a server?
if(rel.hasFile()) if(rel.hasFile())
fileList.add(rel.file.get()) fileList.add(rel.file.get())

View file

@ -8,6 +8,7 @@ import ley.anvil.modpacktools.command.CommandReturn
import ley.anvil.modpacktools.command.CommandReturn.Companion.fail import ley.anvil.modpacktools.command.CommandReturn.Companion.fail
import ley.anvil.modpacktools.command.CommandReturn.Companion.success import ley.anvil.modpacktools.command.CommandReturn.Companion.success
import ley.anvil.modpacktools.command.LoadCommand import ley.anvil.modpacktools.command.LoadCommand
import ley.anvil.modpacktools.util.arg
import ley.anvil.modpacktools.util.readAsJson import ley.anvil.modpacktools.util.readAsJson
import net.sourceforge.argparse4j.impl.type.FileArgumentType import net.sourceforge.argparse4j.impl.type.FileArgumentType
import net.sourceforge.argparse4j.inf.ArgumentParser import net.sourceforge.argparse4j.inf.ArgumentParser
@ -20,9 +21,10 @@ object Import : AbstractCommand("Import") {
override val helpMessage: String = "Converts a given manifest file to a modpackjson file" override val helpMessage: String = "Converts a given manifest file to a modpackjson file"
override fun ArgumentParser.addArgs() { override fun ArgumentParser.addArgs() {
addArgument("manifest") arg("manifest") {
.help("the manifest file to import") help("the manifest file to import")
.type(FileArgumentType().verifyIsFile()) type(FileArgumentType().verifyIsFile())
}
} }
override val needsModpackjson: Boolean = false override val needsModpackjson: Boolean = false

View file

@ -6,6 +6,7 @@ import ley.anvil.modpacktools.command.AbstractCommand
import ley.anvil.modpacktools.command.CommandReturn import ley.anvil.modpacktools.command.CommandReturn
import ley.anvil.modpacktools.command.CommandReturn.Companion.success import ley.anvil.modpacktools.command.CommandReturn.Companion.success
import ley.anvil.modpacktools.command.LoadCommand import ley.anvil.modpacktools.command.LoadCommand
import ley.anvil.modpacktools.util.arg
import net.sourceforge.argparse4j.impl.Arguments.storeTrue import net.sourceforge.argparse4j.impl.Arguments.storeTrue
import net.sourceforge.argparse4j.inf.ArgumentParser import net.sourceforge.argparse4j.inf.ArgumentParser
import net.sourceforge.argparse4j.inf.Namespace import net.sourceforge.argparse4j.inf.Namespace
@ -15,17 +16,20 @@ object ListRelations : AbstractCommand("ListRelations") {
override val helpMessage: String = "Lists the relations of this mod pack" override val helpMessage: String = "Lists the relations of this mod pack"
override fun ArgumentParser.addArgs() { override fun ArgumentParser.addArgs() {
addArgument("-c", "--csv") arg("-c", "--csv") {
.help("Doesn't format as a table but instead as csv (separated by ;)") help("Doesn't format as a table but instead as csv (separated by ;)")
.action(storeTrue()) action(storeTrue())
}
addArgument("-n", "--nolimit") arg("-n", "--nolimit") {
.help("does not limit the size of the authors list") help("does not limit the size of the authors list")
.action(storeTrue()) action(storeTrue())
}
addArgument("-d", "--description") arg("-d", "--description") {
.help("adds the description of relations to the list") help("adds the description of relations to the list")
.action(storeTrue()) action(storeTrue())
}
} }
override fun execute(args: Namespace): CommandReturn { override fun execute(args: Namespace): CommandReturn {

View file

@ -5,6 +5,8 @@ package ley.anvil.modpacktools.util
import com.google.gson.JsonObject import com.google.gson.JsonObject
import com.google.gson.JsonParser import com.google.gson.JsonParser
import ley.anvil.modpacktools.HTTP_CLIENT import ley.anvil.modpacktools.HTTP_CLIENT
import net.sourceforge.argparse4j.inf.Argument
import net.sourceforge.argparse4j.inf.ArgumentParser
import okhttp3.MediaType import okhttp3.MediaType
import okhttp3.MediaType.Companion.toMediaType import okhttp3.MediaType.Companion.toMediaType
import okhttp3.Request import okhttp3.Request
@ -164,3 +166,14 @@ fun File.unzip(outputDir: File) {
} }
stream.close() stream.close()
} }
/**
* this makes arguments for ArgumentParsers look cleaner
*
* @receiver the parser to add the argument to
* @param names the names the argument will have
* @param block this will be called on the argument. it is for settings like help message
*/
fun ArgumentParser.arg(vararg names: String, block: Argument.() -> Unit) {
addArgument(*names).block()
}