package backend import ( "encoding/json" "net/http" "strings" "music-server/internal/logging" "go.uber.org/zap" ) type giteaResponse struct { Id int `json:"id"` Name string `json:"name"` Assets []assetResponse `json:"assets"` } type assetResponse struct { Id int `json:"id"` Name string `json:"name"` DownloadUrl string `json:"browser_download_url"` } func CheckLatest() string { resp, err := http.Get("https://gitea.sanplex.xyz/api/v1/repos/sansan/MusicPlayer/releases/latest") if err != nil { logging.GetLogger().Fatal("Failed to check latest version", zap.String("error", err.Error())) } defer resp.Body.Close() //Create a variable of the same type as our model var cResp giteaResponse //Decode the data if err := json.NewDecoder(resp.Body).Decode(&cResp); err != nil { logging.GetLogger().Fatal("Failed to decode response", zap.String("error", err.Error())) } logging.GetLogger().Debug("Checked latest version", zap.Int("id", cResp.Id), zap.String("name", cResp.Name)) return cResp.Name } func ListAssetsOfLatest() []string { resp, err := http.Get("https://gitea.sanplex.xyz/api/v1/repos/sansan/MusicPlayer/releases/latest") if err != nil { logging.GetLogger().Fatal("Failed to list assets", zap.String("error", err.Error())) } defer resp.Body.Close() //Create a variable of the same type as our model var cResp giteaResponse //Decode the data if err := json.NewDecoder(resp.Body).Decode(&cResp); err != nil { logging.GetLogger().Fatal("Failed to decode response", zap.String("error", err.Error())) } logging.GetLogger().Debug("Listing assets", zap.Int("id", cResp.Id), zap.String("name", cResp.Name)) var assets []string for _, asset := range cResp.Assets { logging.GetLogger().Debug("Found asset", zap.Int("id", cResp.Id), zap.String("name", cResp.Name), zap.String("asset", asset.Name)) assets = append(assets, asset.Name) } return assets } func DownloadLatestWindows() string { resp, err := http.Get("https://gitea.sanplex.xyz/api/v1/repos/sansan/MusicPlayer/releases/latest") if err != nil { logging.GetLogger().Fatal("Failed to download latest Windows version", zap.String("error", err.Error())) } defer resp.Body.Close() //Create a variable of the same type as our model var cResp giteaResponse //Decode the data if err := json.NewDecoder(resp.Body).Decode(&cResp); err != nil { logging.GetLogger().Fatal("Failed to decode response", zap.String("error", err.Error())) } logging.GetLogger().Debug("Downloading Windows version", zap.Int("id", cResp.Id), zap.String("name", cResp.Name)) for _, asset := range cResp.Assets { logging.GetLogger().Debug("Checking asset", zap.Int("id", cResp.Id), zap.String("name", cResp.Name), zap.String("asset", asset.Name)) if strings.HasSuffix(asset.Name, ".exe") { return asset.DownloadUrl } } return "" } func DownloadLatestLinux() string { resp, err := http.Get("https://gitea.sanplex.xyz/api/v1/repos/sansan/MusicPlayer/releases/latest") if err != nil { logging.GetLogger().Fatal("Failed to download latest Linux version", zap.String("error", err.Error())) } defer resp.Body.Close() //Create a variable of the same type as our model var cResp giteaResponse //Decode the data if err := json.NewDecoder(resp.Body).Decode(&cResp); err != nil { logging.GetLogger().Fatal("Failed to decode response", zap.String("error", err.Error())) } logging.GetLogger().Debug("Downloading Linux version", zap.Int("id", cResp.Id), zap.String("name", cResp.Name)) for _, asset := range cResp.Assets { logging.GetLogger().Debug("Checking asset", zap.Int("id", cResp.Id), zap.String("name", cResp.Name), zap.String("asset", asset.Name)) if strings.HasSuffix(asset.Name, ".x86_64") { return asset.DownloadUrl } } return "" }