risk/tools/tools.go
2021-01-24 18:12:33 -04:00

97 lines
2.4 KiB
Go

package tools
import (
"io/ioutil"
"log"
"os"
"r2mod-go/api"
"r2mod-go/utils"
"regexp"
"strings"
"github.com/fatih/color"
)
// ExposeModString removes user-error surrounding the mod string.
func ExposeModString(input string) string {
reg := regexp.MustCompile(`\-([0-9]+)\.([0-9]+)\.([0-9]+)`)
res := reg.ReplaceAllString(input, "")
return res
}
// DownloadMod gets the download URL and installs the mod in the correct folder
func DownloadMod(depString string) {
if depString == "R2API" {
depString = "tristanmcpherson-R2API"
}
sysinfo := utils.GetSysInfo()
downloadURL := api.GetModData(depString).Versions[0].DownloadURL
modName := sysinfo.TmpDir + "/dl/" + depString + ".zip"
modVersion := api.GetModData(depString).Versions[0].VersionNumber
modFolder := sysinfo.PluginDir + "/" + depString + "-" + modVersion
if utils.PathExists(modFolder) {
color.Green(" > Already installed and up to date")
} else {
if len(api.GetModData(depString).Versions) >= 2 {
modVersionOld := api.GetModData(depString).Versions[1].VersionNumber
modFolderOld := sysinfo.PluginDir + "/" + depString + "-" + modVersionOld
if utils.PathExists(modFolderOld) {
color.Magenta(" > Updating to version %s", modVersion)
defer os.RemoveAll(modFolderOld)
}
}
color.Blue(" > Downloading...")
err := utils.DownloadFile(modName, downloadURL)
utils.CheckErr(err)
color.Blue(" > Unzipping")
unzip, err := utils.Unzip(modName, modFolder)
log.Println(unzip)
utils.CheckErr(err)
}
}
// RemoveMod uninstalls a mod
func RemoveMod(depString string) {
modVersion := api.GetModData(depString).Versions[0].VersionNumber
modFolder := utils.SystemInfo.PluginDir + "/" + depString + "-" + modVersion
if !utils.PathExists(modFolder) {
color.Red(" > Not installed")
} else {
defer os.RemoveAll(modFolder)
color.Blue(" > Uninstalled")
}
}
// ToggleMods toggles mods on or off.
// TODO: make this not hardcoded as shit, perhaps implement a proper parser
func ToggleMods() {
var configFile string = utils.SystemInfo.GameDir + "/doorstop_config.ini"
input, err := ioutil.ReadFile(configFile)
utils.CheckErr(err)
lines := strings.Split(string(input), "\n")
if strings.Contains(lines[2], "true") {
color.Cyan("> Mods Disabled")
lines[2] = "enabled=false"
} else {
color.Cyan("> Mods Enabled")
lines[2] = "enabled=true"
}
output := strings.Join(lines, "\n")
err = ioutil.WriteFile(configFile, []byte(output), 0644)
utils.CheckErr(err)
}