4
0
Fork 0
mirror of https://github.com/Anvilcraft/modpacktools synced 2024-05-19 11:54:20 +02:00

started making BuildTechnic command. not yet working

local files aren't being installed for no good reason whatsoever
mod loader not getting installed yet
This commit is contained in:
LordMZTE 2020-08-12 21:14:00 +02:00
parent 5b29bfe3f4
commit e67995d6a0
5 changed files with 160 additions and 48 deletions

View file

@ -46,7 +46,7 @@ dependencies {
"org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.3.8",
//IO
"com.squareup.okhttp3:okhttp:4.8.0", //HTTP client
"com.squareup.okhttp3:okhttp:4.8.1", //HTTP client
"com.moandjiezana.toml:toml4j:0.7.2", //Config file parser
"org.apache.commons:commons-csv:1.8",
"com.j2html:j2html:1.4.0", //HTML builder
@ -68,6 +68,7 @@ dependencies {
//This exists so options can be set for test compile and compile at once
val kOptions = {obj: GroovyObject ->
//This is sorta garbage, but if i would do this the proper way Intelli'ntJ would think its an error even tho it is not
obj.withGroovyBuilder {
"kotlinOptions" {

View file

@ -0,0 +1,90 @@
package ley.anvil.modpacktools.commands
import ley.anvil.addonscript.wrapper.FileOrLink
import ley.anvil.modpacktools.CONFIG
import ley.anvil.modpacktools.MPJH
import ley.anvil.modpacktools.TERMC
import ley.anvil.modpacktools.command.CommandReturn
import ley.anvil.modpacktools.command.CommandReturn.Companion.fail
import ley.anvil.modpacktools.command.ICommand
import ley.anvil.modpacktools.command.LoadCommand
import ley.anvil.modpacktools.util.addonscript.installFile
import ley.anvil.modpacktools.util.downloadFiles
import ley.anvil.modpacktools.util.fPrintln
import ley.anvil.modpacktools.util.toZip
import net.sourceforge.argparse4j.ArgumentParsers
import net.sourceforge.argparse4j.inf.ArgumentParser
import net.sourceforge.argparse4j.inf.Namespace
import org.apache.commons.io.FileUtils
import java.io.File
import java.io.FileOutputStream
import java.net.URL
import java.util.zip.ZipOutputStream
@LoadCommand
object BuildTechnic : ICommand {
override val name = "buildtechnic"
override val helpMessage = "Builds a technic export"
override val parser: ArgumentParser = ArgumentParsers.newFor("BuildTechnic")
.build()
.description(helpMessage)
private val tempDir by lazy {File(CONFIG.config.pathOrException<String>("Locations/tempDir"))}
private val tmp: File by lazy {File(tempDir, "technic")}
private val download: File by lazy {File(tempDir, "download")}
val srcDir by lazy {File(CONFIG.config.pathOrException<String>("Locations/src"))}
override fun execute(args: Namespace): CommandReturn {
//Setup dirs
arrayOf(tmp, download)
.forEach {
it.mkdirs()
FileUtils.cleanDirectory(it)
}
val fileList = mutableListOf<FileOrLink>()
val toDownload = mutableMapOf<URL, Pair<String, File>>()
MPJH.asWrapper!!.defaultVersion.getRelations {"client" in it.options}.forEach {
if(it.hasFile())
fileList.add(it.file.get())
}
fileList.forEach {
when {
it.isFile -> {
if(!it.isASDirSet)
it.setASDir(srcDir)
if(it.file.exists())
installFile(it.installer, it.file, tmp).printf()
}
it.isURL -> toDownload[it.url] = it.installer to download
else -> return fail("${it.link} is neither a file nor an URL")
}
}
downloadFiles(
toDownload.mapValues {it.value.second},
{
if(it.exception == null) {
fPrintln("downloaded file ${it.file}", TERMC.brightBlue)
installFile(toDownload[it.url]!!.first, it.file, tmp).printf()
} else {
fPrintln("ERROR DOWNLOADING ${it.url}")
it.exception.printStackTrace()
}
},
resolveFileName = true
)
fPrintln("Making Zip", TERMC.brightGreen)
ZipOutputStream(FileOutputStream("build/${MPJH.asWrapper!!.json.id}-${MPJH.asWrapper!!.defaultVersion.versionName}-technic.zip"))
.use {
tmp.toZip(it)
it.flush()
}
return CommandReturn.success("Built export")
}
}

View file

@ -8,10 +8,10 @@ import ley.anvil.modpacktools.command.CommandReturn.Companion.fail
import ley.anvil.modpacktools.command.CommandReturn.Companion.success
import ley.anvil.modpacktools.command.ICommand
import ley.anvil.modpacktools.command.LoadCommand
import ley.anvil.modpacktools.util.addonscript.installFile
import ley.anvil.modpacktools.util.downloadFiles
import ley.anvil.modpacktools.util.fPrintln
import ley.anvil.modpacktools.util.manifest.convertAStoManifest
import ley.anvil.modpacktools.util.mergeTo
import ley.anvil.modpacktools.util.toZip
import net.sourceforge.argparse4j.ArgumentParsers
import net.sourceforge.argparse4j.impl.Arguments.storeTrue
@ -49,6 +49,7 @@ object BuildTwitch : ICommand {
val dir = File("./build")
val toDownload = mutableMapOf<URL, Pair<File, String>>()
val srcDir by lazy {File(CONFIG.config.pathOrException<String>("Locations/src"))}
val overrides by lazy {File(tmp, "overrides")}
dir.mkdirs()
tmp.mkdirs()
downloadDir.mkdirs()
@ -65,7 +66,7 @@ object BuildTwitch : ICommand {
uf.key.setASDir(srcDir)
val file = uf.key.file
if(file.exists()) {
installFile(uf.value, file).apply {println(this)}
installFile(uf.value, file, overrides).printf()
}
} else if(uf.key.isURL) {
val filePath = URL(uf.key.link)
@ -79,7 +80,7 @@ object BuildTwitch : ICommand {
toDownload.mapValues {it.value.first},
{
fPrintln("downloaded file ${it.file}", TERMC.brightBlue)
fPrintln(installFile(toDownload[it.url]!!.second, it.file), TERMC.green)
installFile(toDownload[it.url]!!.second, it.file, overrides).printf()
},
false
)
@ -91,42 +92,4 @@ object BuildTwitch : ICommand {
zip.close()
return success("Successfully built twitch zip")
}
private fun installFile(installer: String, file: File): String {
when {
installer == "internal.override" -> {
when {
file.extension == "zip" -> {
TODO("unzip to ./.mpt/twitch/overrides")
}
file.isDirectory -> {
FileUtils.copyDirectory(file, File(tmp, "overrides"))
}
else -> {
return "Only zip files can be used with 'internal.override'"
}
}
}
installer.startsWith("internal.dir") -> {
val parts = installer.split(":")
if(parts.size >= 2) {
FileUtils.copyFile(file, File(File(tmp, "overrides"), parts[1]) mergeTo file)
} else {
return "No directory was given for installer 'internal.dir'"
}
}
installer.startsWith("internal.zip") -> {
TODO()
}
else -> {
return "The installer '$installer' is not supported for Twitch export"
}
}
return "installed $file"
}
}

View file

@ -8,6 +8,7 @@ import ley.anvil.modpacktools.command.ICommand
import ley.anvil.modpacktools.command.LoadCommand
import ley.anvil.modpacktools.util.DownloadFileTask
import ley.anvil.modpacktools.util.downloadFiles
import ley.anvil.modpacktools.util.fPrintln
import net.sourceforge.argparse4j.ArgumentParsers
import net.sourceforge.argparse4j.impl.Arguments.storeTrue
import net.sourceforge.argparse4j.impl.type.FileArgumentType
@ -44,7 +45,12 @@ object DownloadMods : ICommand {
override fun execute(args: Namespace): CommandReturn {
val json = MPJH.asWrapper
val fileList = mutableListOf<FileOrLink>()
for(rel in json!!.defaultVersion!!.getRelations(arrayOf("client"), if(args.getBoolean("all")) null else arrayOf("mod"))!!) //TODO only client? what if someone wants a server?
for(
rel in json!!.defaultVersion!!.getRelations(
arrayOf("client"),
if(args.getBoolean("all")) null else arrayOf("mod")
)!!
) //TODO only client? what if someone wants a server?
if(rel.hasFile())
fileList.add(rel.file.get())
@ -71,11 +77,10 @@ object DownloadMods : ICommand {
)
),
{r: DownloadFileTask.Return ->
//synced so error message gets printed under response
synchronized(this) {
println("${r.responseCode} ${r.responseMessage} ${r.url} ${r.file}")
if(r.exception != null)
println(r.exception.message)
println("${r.responseCode} ${r.responseMessage} ${r.url} ${r.file}")
if(r.exception != null) {
fPrintln("ERROR DOWNLOADING ${r.url}")
r.exception.printStackTrace()
}
},
!args.getBoolean("force"),

View file

@ -0,0 +1,53 @@
package ley.anvil.modpacktools.util.addonscript
import ley.anvil.modpacktools.TERMC
import ley.anvil.modpacktools.util.fPrintln
import ley.anvil.modpacktools.util.mergeTo
import org.apache.commons.io.FileUtils
import java.io.File
import java.io.PrintStream
data class InstallFileSuccess(
val success: Boolean,
val msg: String? = null
) {
@JvmOverloads
fun printf(out: PrintStream = System.out) {
if(msg != null)
out.fPrintln(msg, if(success) TERMC.green else TERMC.red)
}
}
fun installFile(installer: String, file: File, outDir: File): InstallFileSuccess {
when {
installer == "internal.override" -> {
when {
file.extension == "zip" -> {
TODO("unzip to ./.mpt/twitch/overrides")
}
file.isDirectory -> {
FileUtils.copyDirectory(file, outDir)
}
else -> {
InstallFileSuccess(false, "Only zip files can be used with \'internal.override\'")
}
}
}
installer.startsWith("internal.dir") -> {
val (_, dir) = installer.split(":")
FileUtils.copyFile(file, File(outDir, dir) mergeTo file)
}
installer.startsWith("internal.zip") -> {
TODO()
}
else -> {
return InstallFileSuccess(false, "The installer \'$installer\' is not supported")
}
}
return InstallFileSuccess(true, "installed $file")
}