From 863098f3ced3d294b1de4adca86d59d6de65d4c4 Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Sat, 11 Jan 2025 14:41:17 +0100 Subject: [PATCH] Clean up names --- go.mod | 2 +- main.go | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++--- utils.go | 1 + wails.json | 4 +-- 4 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 utils.go diff --git a/go.mod b/go.mod index 13fb15d..13d8b12 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module wails-template +module wow-addon-manager go 1.21 diff --git a/main.go b/main.go index 669fa67..dae5669 100644 --- a/main.go +++ b/main.go @@ -5,8 +5,12 @@ import ( "fmt" "io" "log" + "net/http" "net/url" "os" + "path/filepath" + "regexp" + "strings" "github.com/wailsapp/wails/v2" "github.com/wailsapp/wails/v2/pkg/options" @@ -29,6 +33,8 @@ func init() { //go:embed all:frontend/dist var assets embed.FS +var gamePath string +var versionRegex = regexp.MustCompile(`(\d+\.\d+\.\d+)`) type Addon struct { Name string @@ -50,13 +56,76 @@ var addons = []*Addon{ NewAddon("Channeler", "https://git.site.quack-lab.dev/dave/wow_channeler"), } -func (a *Addon) GetToc() *url.URL { - return a.URL.JoinPath(a.Name + ".toc") +func (a *Addon) GetRemoteToc() *url.URL { + return a.URL.JoinPath("raw", "branch", "master", a.Name+".toc") +} +func (a *Addon) GetLocalToc() string { + return filepath.Join(gamePath, "Interface", "AddOns", a.Name, a.Name+".toc") +} +func (a *Addon) GetRemoteVersion() (version string, err error) { + url := a.GetRemoteToc() + 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 + } + if response.StatusCode != http.StatusOK { + log.Printf("error getting remote version: %s", response.Status) + return "", fmt.Errorf("error getting remote version: %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 + } + 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") +} +func (a *Addon) GetLocalVersion() string { + file, err := os.Open(a.GetLocalToc()) + if err != nil { + log.Printf("error opening local toc: %s", err) + return "" + } + defer file.Close() + body, err := io.ReadAll(file) + if err != nil { + log.Printf("error reading local toc: %s", err) + return "" + } + 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 "" } func main() { + gamePath = filepath.Join("C:\\", "Games", "WoWRuski") for _, addon := range addons { - log.Printf("%#v", addon.GetToc()) + log.Printf("%#v", addon.GetLocalToc()) + log.Printf("%#v", addon.GetRemoteToc()) + remoteVersion, err := addon.GetRemoteVersion() + if err != nil { + log.Printf("error getting remote version: %s", err) + continue + } + log.Printf("%#v", remoteVersion) + log.Printf("%#v", addon.GetLocalVersion()) } return // Create an instance of the app structure diff --git a/utils.go b/utils.go new file mode 100644 index 0000000..85f0393 --- /dev/null +++ b/utils.go @@ -0,0 +1 @@ +package main \ No newline at end of file diff --git a/wails.json b/wails.json index 2e2be88..825cdf7 100644 --- a/wails.json +++ b/wails.json @@ -1,7 +1,7 @@ { "$schema": "https://wails.io/schemas/config.v2.json", - "name": "wails-template", - "outputfilename": "wails-template", + "name": "wow-addon-manager", + "outputfilename": "wow-addon-manager", "frontend:install": "pnpm install", "frontend:build": "pnpm build", "frontend:dev:watcher": "pnpm dev",