mirror of
https://github.com/Anvilcraft/modpacktools
synced 2024-06-02 10:39:59 +02:00
add listrelations and other small changes
This commit is contained in:
parent
d93359798e
commit
91e3d1360b
|
@ -52,6 +52,7 @@ dependencies {
|
||||||
//CLI
|
//CLI
|
||||||
"net.sourceforge.argparse4j:argparse4j:0.8.1", //CLI argument parser
|
"net.sourceforge.argparse4j:argparse4j:0.8.1", //CLI argument parser
|
||||||
"com.github.ajalt:mordant:1.2.1", //CLI text formatting
|
"com.github.ajalt:mordant:1.2.1", //CLI text formatting
|
||||||
|
"com.jakewharton.fliptables:fliptables:1.1.0", //Text Table
|
||||||
|
|
||||||
//Other
|
//Other
|
||||||
"org.slf4j:slf4j-simple:2.0.0-alpha1",
|
"org.slf4j:slf4j-simple:2.0.0-alpha1",
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
package ley.anvil.modpacktools
|
package ley.anvil.modpacktools
|
||||||
|
|
||||||
import com.github.ajalt.mordant.TermColors
|
import com.github.ajalt.mordant.TermColors
|
||||||
|
import com.google.gson.Gson
|
||||||
import com.google.gson.GsonBuilder
|
import com.google.gson.GsonBuilder
|
||||||
import ley.anvil.modpacktools.command.CommandLoader
|
import ley.anvil.modpacktools.command.CommandLoader
|
||||||
import ley.anvil.modpacktools.command.ICommand
|
import ley.anvil.modpacktools.command.ICommand
|
||||||
|
@ -22,7 +23,7 @@ import java.util.concurrent.TimeUnit.MICROSECONDS
|
||||||
val CONFIG by lazy {Config("modpacktoolsconfig.toml")}
|
val CONFIG by lazy {Config("modpacktoolsconfig.toml")}
|
||||||
val LOADER by lazy {CommandLoader("ley.anvil.modpacktools.commands")}
|
val LOADER by lazy {CommandLoader("ley.anvil.modpacktools.commands")}
|
||||||
val MPJH by lazy {ModpackJsonHandler(File(CONFIG.config.pathOrException<String>("Locations/src"), "modpack.json"))}
|
val MPJH by lazy {ModpackJsonHandler(File(CONFIG.config.pathOrException<String>("Locations/src"), "modpack.json"))}
|
||||||
val GSON by lazy {GsonBuilder().setPrettyPrinting().create()}
|
val GSON: Gson by lazy {GsonBuilder().setPrettyPrinting().create()}
|
||||||
//TODO thinks term has no color support on win with edited registry. probably no big deal
|
//TODO thinks term has no color support on win with edited registry. probably no big deal
|
||||||
val TERMC by lazy {TermColors()}
|
val TERMC by lazy {TermColors()}
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,6 @@ package ley.anvil.modpacktools.commands
|
||||||
|
|
||||||
import j2html.TagCreator.*
|
import j2html.TagCreator.*
|
||||||
import j2html.utils.CSSMin.compressCss
|
import j2html.utils.CSSMin.compressCss
|
||||||
import ley.anvil.addonscript.wrapper.ASWrapper
|
|
||||||
import ley.anvil.addonscript.wrapper.ArtifactDestination
|
|
||||||
import ley.anvil.addonscript.wrapper.MetaData
|
import ley.anvil.addonscript.wrapper.MetaData
|
||||||
import ley.anvil.modpacktools.MPJH
|
import ley.anvil.modpacktools.MPJH
|
||||||
import ley.anvil.modpacktools.TERMC
|
import ley.anvil.modpacktools.TERMC
|
||||||
|
@ -57,7 +55,7 @@ object CreateModlist : ICommand {
|
||||||
override fun execute(args: Namespace): CommandReturn {
|
override fun execute(args: Namespace): CommandReturn {
|
||||||
val outFile = args.get<File>("file")
|
val outFile = args.get<File>("file")
|
||||||
|
|
||||||
val all = args.get<Boolean>("all") ?: false
|
val all = args.getBoolean("all")
|
||||||
val sorting: Comparator<MetaData> = when(args.get<Sorting>("sorting")!!) {
|
val sorting: Comparator<MetaData> = when(args.get<Sorting>("sorting")!!) {
|
||||||
Sorting.NAME -> comparing<MetaData, String> {it.name}
|
Sorting.NAME -> comparing<MetaData, String> {it.name}
|
||||||
Sorting.DESCRIPTION -> comparing<MetaData, String> {it.description?.getOrNull(0) ?: ""}
|
Sorting.DESCRIPTION -> comparing<MetaData, String> {it.description?.getOrNull(0) ?: ""}
|
||||||
|
@ -145,21 +143,7 @@ object CreateModlist : ICommand {
|
||||||
return success("Wrote HTML file")
|
return success("Wrote HTML file")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getMods(all: Boolean, sorting: Comparator<MetaData>): List<MetaData> {
|
private fun getMods(all: Boolean, sorting: Comparator<MetaData>): List<MetaData> = MPJH.getModMetas(if(all) null else arrayOf("mod")).sortedWith(sorting)
|
||||||
println("Getting mods...")
|
|
||||||
val asJson = MPJH.asWrapper
|
|
||||||
val mods = mutableListOf<MetaData>()
|
|
||||||
val toGet = mutableListOf<ArtifactDestination>()
|
|
||||||
|
|
||||||
for(rel in asJson!!.defaultVersion.getRelations(arrayOf("included"), /*null means all*/ if(all) null else arrayOf("mod"))) {
|
|
||||||
if(rel.hasLocalMeta())
|
|
||||||
mods.add(rel.localMeta)
|
|
||||||
else if(rel.hasFile() && rel.file.isArtifact)
|
|
||||||
toGet.add(rel.file.artifact)
|
|
||||||
}
|
|
||||||
mods.addAll(ASWrapper.getMetaData(toGet.toTypedArray()).values)
|
|
||||||
return mods.sortedWith(sorting)
|
|
||||||
}
|
|
||||||
|
|
||||||
enum class Format {
|
enum class Format {
|
||||||
HTML, CSV
|
HTML, CSV
|
||||||
|
|
|
@ -0,0 +1,86 @@
|
||||||
|
package ley.anvil.modpacktools.commands
|
||||||
|
|
||||||
|
import com.jakewharton.fliptables.FlipTable
|
||||||
|
import ley.anvil.modpacktools.MPJH
|
||||||
|
import ley.anvil.modpacktools.command.CommandReturn
|
||||||
|
import ley.anvil.modpacktools.command.CommandReturn.Companion.success
|
||||||
|
import ley.anvil.modpacktools.command.ICommand
|
||||||
|
import ley.anvil.modpacktools.command.LoadCommand
|
||||||
|
import net.sourceforge.argparse4j.ArgumentParsers
|
||||||
|
import net.sourceforge.argparse4j.impl.Arguments.storeTrue
|
||||||
|
import net.sourceforge.argparse4j.inf.ArgumentParser
|
||||||
|
import net.sourceforge.argparse4j.inf.Namespace
|
||||||
|
|
||||||
|
@LoadCommand
|
||||||
|
object ListRelations : ICommand {
|
||||||
|
override val name: String = "listrelations"
|
||||||
|
override val helpMessage: String = "Lists the relations of this mod pack"
|
||||||
|
override val parser: ArgumentParser = ArgumentParsers.newFor("ListRelations")
|
||||||
|
.build()
|
||||||
|
.description(helpMessage)
|
||||||
|
.apply {
|
||||||
|
addArgument("-c", "--csv")
|
||||||
|
.help("Doesn't format as a table but instead as csv (separated by ;)")
|
||||||
|
.action(storeTrue())
|
||||||
|
}.apply {
|
||||||
|
addArgument("-n", "--nolimit")
|
||||||
|
.help("does not limit the size of the authors list")
|
||||||
|
.action(storeTrue())
|
||||||
|
}.apply {
|
||||||
|
addArgument("-d", "--description")
|
||||||
|
.help("adds the description of relations to the list")
|
||||||
|
.action(storeTrue())
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun execute(args: Namespace): CommandReturn {
|
||||||
|
val metas = MPJH.getModMetas().sortedBy {it.name}
|
||||||
|
|
||||||
|
if(args.getBoolean("csv")) {
|
||||||
|
metas.forEach {
|
||||||
|
println("${it.name};${it.contributors.keys.joinToString()};${it.website}".let {s ->
|
||||||
|
if(args.getBoolean("description"))
|
||||||
|
s + ";${it.description?.joinToString() ?: ""}"
|
||||||
|
else s
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val data = mutableListOf<Array<out String>>()
|
||||||
|
|
||||||
|
metas.forEach {
|
||||||
|
data.add(run {
|
||||||
|
val row = mutableListOf(
|
||||||
|
it.name ?: "",
|
||||||
|
it.contributors.keys.joinToString().let {s ->
|
||||||
|
//Limit size
|
||||||
|
if(args.getBoolean("nolimit") || s.length < 50)
|
||||||
|
s
|
||||||
|
else
|
||||||
|
s.substring(0..47) + "..."
|
||||||
|
},
|
||||||
|
it.website ?: ""
|
||||||
|
)
|
||||||
|
|
||||||
|
if(args.getBoolean("description"))
|
||||||
|
row.add(it.description?.joinToString(" ") ?: "")
|
||||||
|
|
||||||
|
row.toTypedArray()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
println(FlipTable.of(run {
|
||||||
|
val header = mutableListOf(
|
||||||
|
"Name",
|
||||||
|
"Contributors",
|
||||||
|
"Website"
|
||||||
|
)
|
||||||
|
|
||||||
|
if(args.getBoolean("description"))
|
||||||
|
header.add("Description")
|
||||||
|
|
||||||
|
header.toTypedArray()
|
||||||
|
},
|
||||||
|
data.toTypedArray()))
|
||||||
|
}
|
||||||
|
return success()
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,20 +2,39 @@ package ley.anvil.modpacktools.util
|
||||||
|
|
||||||
import ley.anvil.addonscript.v1.AddonscriptJSON
|
import ley.anvil.addonscript.v1.AddonscriptJSON
|
||||||
import ley.anvil.addonscript.wrapper.ASWrapper
|
import ley.anvil.addonscript.wrapper.ASWrapper
|
||||||
|
import ley.anvil.addonscript.wrapper.ArtifactDestination
|
||||||
|
import ley.anvil.addonscript.wrapper.MetaData
|
||||||
|
import ley.anvil.modpacktools.MPJH
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileReader
|
import java.io.FileReader
|
||||||
|
|
||||||
class ModpackJsonHandler(val modpackJsonFile: File) {
|
class ModpackJsonHandler(val modpackJsonFile: File) {
|
||||||
//Null if no file exists
|
//Null if no file exists
|
||||||
val asWrapper: ASWrapper? get() {
|
val asWrapper: ASWrapper?
|
||||||
return if(modpackJsonFile.exists()) {
|
get() {
|
||||||
val reader = FileReader(modpackJsonFile)
|
return if(modpackJsonFile.exists()) {
|
||||||
val ret = ASWrapper(AddonscriptJSON.read(reader, AddonscriptJSON::class.java))
|
val reader = FileReader(modpackJsonFile)
|
||||||
reader.close()
|
val ret = ASWrapper(AddonscriptJSON.read(reader, AddonscriptJSON::class.java))
|
||||||
ret
|
reader.close()
|
||||||
} else null
|
ret
|
||||||
|
} else null
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getModMetas(types: Array<String>? = null): List<MetaData> {
|
||||||
|
val asJson = MPJH.asWrapper
|
||||||
|
val mods = mutableListOf<MetaData>()
|
||||||
|
val toGet = mutableListOf<ArtifactDestination>()
|
||||||
|
|
||||||
|
for(rel in asJson!!.defaultVersion.getRelations(arrayOf("included"), /*TODO TILERA MAKE THIS NONSESE TAKE A PREDICATE AND NOT A LIST*/types)) {
|
||||||
|
if(rel.hasLocalMeta())
|
||||||
|
mods.add(rel.localMeta)
|
||||||
|
else if(rel.hasFile() && rel.file.isArtifact)
|
||||||
|
toGet.add(rel.file.artifact)
|
||||||
|
}
|
||||||
|
mods.addAll(ASWrapper.getMetaData(toGet.toTypedArray()).values)
|
||||||
|
return mods
|
||||||
}
|
}
|
||||||
|
|
||||||
val json: AddonscriptJSON?
|
val json: AddonscriptJSON?
|
||||||
get() = asWrapper?.json
|
get() = asWrapper?.json
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue