diff --git a/main.go b/main.go index dae5669..edf6c28 100644 --- a/main.go +++ b/main.go @@ -10,7 +10,6 @@ import ( "os" "path/filepath" "regexp" - "strings" "github.com/wailsapp/wails/v2" "github.com/wailsapp/wails/v2/pkg/options" @@ -56,82 +55,79 @@ var addons = []*Addon{ NewAddon("Channeler", "https://git.site.quack-lab.dev/dave/wow_channeler"), } -func (a *Addon) GetRemoteToc() *url.URL { +func (a *Addon) GetRemoteTocURL() *url.URL { return a.URL.JoinPath("raw", "branch", "master", a.Name+".toc") } -func (a *Addon) GetLocalToc() string { +func (a *Addon) GetRemoteReleaseURL() *url.URL { + return a.URL.JoinPath("media", "branch", "master", a.Name+".zip") +} +func (a *Addon) GetRemoteRelease() (body []byte, err error) { + url := a.GetRemoteReleaseURL() + response, err := http.Get(url.String()) + if err != nil { + return nil, fmt.Errorf("error getting remote release: %w", err) + } + return io.ReadAll(response.Body) +} +func (a *Addon) GetLocalTocPath() string { return filepath.Join(gamePath, "Interface", "AddOns", a.Name, a.Name+".toc") } func (a *Addon) GetRemoteVersion() (version string, err error) { - url := a.GetRemoteToc() + url := a.GetRemoteTocURL() log.Printf("Fetching remote version from %s", url.String()) response, err := http.Get(url.String()) if err != nil { - log.Printf("error getting remote version: %s", err) - return "", err + return "", fmt.Errorf("error getting remote version: %w", err) } if response.StatusCode != http.StatusOK { - log.Printf("error getting remote version: %s", response.Status) - return "", fmt.Errorf("error getting remote version: %s", response.Status) + return "", fmt.Errorf("error getting remote version with status: %s", response.Status) } defer response.Body.Close() body, err := io.ReadAll(response.Body) if err != nil { - log.Printf("error reading remote version: %s", err) - return "", err + return "", fmt.Errorf("error reading remote version: %w", err) } - log.Printf("Remote version: %s", string(body)) - lines := strings.Split(string(body), "\n") - for _, line := range lines { - if strings.HasPrefix(line, "## Version") { - version := versionRegex.FindString(line) - log.Printf("remote version: %s", version) - return version, nil - } - } - return "", fmt.Errorf("no version found") + return GetVersion(string(body)) } -func (a *Addon) GetLocalVersion() string { - file, err := os.Open(a.GetLocalToc()) +func (a *Addon) GetLocalVersion() (version string, err error) { + file, err := os.Open(a.GetLocalTocPath()) if err != nil { - log.Printf("error opening local toc: %s", err) - return "" + return "", fmt.Errorf("error opening local toc: %w", err) } defer file.Close() body, err := io.ReadAll(file) if err != nil { - log.Printf("error reading local toc: %s", err) - return "" + return "", fmt.Errorf("error reading local toc: %w", err) } - lines := strings.Split(string(body), "\n") - for _, line := range lines { - if strings.HasPrefix(line, "## Version") { - version := strings.TrimSpace(strings.TrimPrefix(line, "## Version")) - log.Printf("local version: %s", version) - return version - } + return GetVersion(string(body)) +} +func (a *Addon) IsUpToDate() bool { + remoteVersion, err := a.GetRemoteVersion() + if err != nil { + return false } - return "" + localVersion, err := a.GetLocalVersion() + if err != nil { + return false + } + return remoteVersion == localVersion } func main() { gamePath = filepath.Join("C:\\", "Games", "WoWRuski") for _, addon := range addons { - log.Printf("%#v", addon.GetLocalToc()) - log.Printf("%#v", addon.GetRemoteToc()) - remoteVersion, err := addon.GetRemoteVersion() + log.Printf("%#v", addon.IsUpToDate()) + log.Printf("%#v", addon.GetRemoteReleaseURL()) + body, err := addon.GetRemoteRelease() if err != nil { - log.Printf("error getting remote version: %s", err) + log.Printf("error getting remote release: %s", err) continue } - log.Printf("%#v", remoteVersion) - log.Printf("%#v", addon.GetLocalVersion()) + log.Printf("%#v", string(body)) } return - // Create an instance of the app structure app := NewApp() - // Create application with options err := wails.Run(&options.App{ Title: "wails-template", Width: 1024, diff --git a/utils.go b/utils.go index 85f0393..3265a6d 100644 --- a/utils.go +++ b/utils.go @@ -1 +1,17 @@ -package main \ No newline at end of file +package main + +import ( + "fmt" + "strings" +) + +func GetVersion(data string) (version string, err error) { + lines := strings.Split(data, "\n") + for _, line := range lines { + version = versionRegex.FindString(line) + if version != "" { + return version, nil + } + } + return "", fmt.Errorf("no version found") +}