package api import ( "encoding/json" "io/ioutil" "os" "r2mod-go/utils" "time" ) // Mod contains info about a mod from thunderstore API type Mod struct { Name string `json:"name"` FullName string `json:"full_name"` PackageURL string `json:"package_url"` DateCreated string `json:"date_created"` DateUpdated string `json:"date_updated"` UUID4 string `json:"uuid4"` RatingScore int `json:"rating_score"` IsPinned bool `json:"is_pinned"` IsDeprecated bool `json:"is_deprecated"` HasNSFWContent bool `json:"has_nsfw_content"` Categories []string `json:"categories"` Versions []Version `json:"versions"` } // Version contains info about a specific version of a mod type Version struct { Name string `json:"name"` FullName string `json:"full_name"` Description string `json:"description"` Icon string `json:"icon"` VersionNumber string `json:"version_number"` Dependencies []string `json:"dependencies"` DownloadURL string `json:"download_url"` Downloads int `json:"downloads"` DateCreated string `json:"date_created"` WebsiteURL string `json:"website_url"` IsActive bool `json:"is_active"` UUID4 string `json:"uuid4"` } // CheckAPICache checks if the cached json is expired func CheckAPICache() int { if !utils.PathExists(utils.SystemInfo.TmpDir + "/pkg.json") { return 1 } info, err := os.Stat(utils.SystemInfo.TmpDir + "/pkg.json") utils.CheckErr(err) lastModTime := info.ModTime() currentTime := time.Now() if currentTime.Sub(lastModTime).Seconds() > 7200 { return 1 } return 0 } // UpdateAPICache gets a new copy of the thunderstore pkgfile func UpdateAPICache() { apiURL := "https://thunderstore.io/api/v1/package/" err := utils.DownloadFile(utils.SystemInfo.TmpDir+"/pkg.json", apiURL) utils.CheckErr(err) } func unpackAPI() []Mod { pkgFile, err := os.Open(utils.SystemInfo.TmpDir + "/pkg.json") utils.CheckErr(err) defer pkgFile.Close() byteValue, err := ioutil.ReadAll(pkgFile) utils.CheckErr(err) var mods []Mod err = json.Unmarshal(byteValue, &mods) utils.CheckErr(err) return mods } // PkgList contains all mods in current package cache var PkgList []Mod = unpackAPI() // GetModData gets object of mod by depString func GetModData(depString string) Mod { if depString == "R2API" { depString = "tristanmcpherson-R2API" } var selectedMod Mod for i := 0; i < len(PkgList); i++ { if PkgList[i].FullName == depString { selectedMod = PkgList[i] } } return selectedMod }