package tools import ( "io/ioutil" "log" "os" "r2go/api" "r2go/utils" "regexp" "strings" ) // 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) (int, string) { var status int var modver string if depString == "R2API" { depString = "tristanmcpherson-R2API" } sysinfo := utils.GetSysInfo() mod := api.GetModData(depString) downloadURL := mod.Versions[0].DownloadURL modName := sysinfo.ProgDir + "/dl/" + depString + ".zip" modVersion := mod.Versions[0].VersionNumber modFolder := sysinfo.PluginDir + "/" + depString + "-" + modVersion if utils.PathExists(modFolder) { return 1, modver } if len(api.GetModData(depString).Versions) >= 2 { modVersionOld := mod.Versions[1].VersionNumber modFolderOld := sysinfo.PluginDir + "/" + depString + "-" + modVersionOld if utils.PathExists(modFolderOld) { defer os.RemoveAll(modFolderOld) status = 2 modver = modVersion } else { status = 3 } } err := utils.DownloadFile(modName, downloadURL) utils.CheckErr(err) unzip, err := utils.Unzip(modName, modFolder) log.Println(unzip) utils.CheckErr(err) // TODO: Dependencies! // for i, dep := range { // } return status, modver } // RemoveMod uninstalls a mod func RemoveMod(depString string) int { modVersion := api.GetModData(depString).Versions[0].VersionNumber modFolder := utils.SystemInfo.PluginDir + "/" + depString + "-" + modVersion if !utils.PathExists(modFolder) { return 1 } defer os.RemoveAll(modFolder) return 0 } // ToggleMods toggles mods on or off. // TODO: make this not hardcoded as shit, perhaps implement a proper parser func ToggleMods() bool { var configFile string = utils.SystemInfo.GameDir + "/doorstop_config.ini" input, err := ioutil.ReadFile(configFile) utils.CheckErr(err) lines := strings.Split(string(input), "\n") var status bool if strings.Contains(lines[2], "true") { status = false lines[2] = "enabled=false" } else { status = true lines[2] = "enabled=true" } output := strings.Join(lines, "\n") err = ioutil.WriteFile(configFile, []byte(output), 0644) utils.CheckErr(err) return status }