generated from dave/wails-template
Implement downloading releases
This commit is contained in:
80
main.go
80
main.go
@@ -10,7 +10,6 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/wailsapp/wails/v2"
|
"github.com/wailsapp/wails/v2"
|
||||||
"github.com/wailsapp/wails/v2/pkg/options"
|
"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"),
|
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")
|
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")
|
return filepath.Join(gamePath, "Interface", "AddOns", a.Name, a.Name+".toc")
|
||||||
}
|
}
|
||||||
func (a *Addon) GetRemoteVersion() (version string, err error) {
|
func (a *Addon) GetRemoteVersion() (version string, err error) {
|
||||||
url := a.GetRemoteToc()
|
url := a.GetRemoteTocURL()
|
||||||
log.Printf("Fetching remote version from %s", url.String())
|
log.Printf("Fetching remote version from %s", url.String())
|
||||||
response, err := http.Get(url.String())
|
response, err := http.Get(url.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error getting remote version: %s", err)
|
return "", fmt.Errorf("error getting remote version: %w", err)
|
||||||
return "", err
|
|
||||||
}
|
}
|
||||||
if response.StatusCode != http.StatusOK {
|
if response.StatusCode != http.StatusOK {
|
||||||
log.Printf("error getting remote version: %s", response.Status)
|
return "", fmt.Errorf("error getting remote version with status: %s", response.Status)
|
||||||
return "", fmt.Errorf("error getting remote version: %s", response.Status)
|
|
||||||
}
|
}
|
||||||
defer response.Body.Close()
|
defer response.Body.Close()
|
||||||
body, err := io.ReadAll(response.Body)
|
body, err := io.ReadAll(response.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error reading remote version: %s", err)
|
return "", fmt.Errorf("error reading remote version: %w", err)
|
||||||
return "", err
|
|
||||||
}
|
}
|
||||||
log.Printf("Remote version: %s", string(body))
|
return GetVersion(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 {
|
func (a *Addon) GetLocalVersion() (version string, err error) {
|
||||||
file, err := os.Open(a.GetLocalToc())
|
file, err := os.Open(a.GetLocalTocPath())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error opening local toc: %s", err)
|
return "", fmt.Errorf("error opening local toc: %w", err)
|
||||||
return ""
|
|
||||||
}
|
}
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
body, err := io.ReadAll(file)
|
body, err := io.ReadAll(file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error reading local toc: %s", err)
|
return "", fmt.Errorf("error reading local toc: %w", err)
|
||||||
return ""
|
|
||||||
}
|
}
|
||||||
lines := strings.Split(string(body), "\n")
|
return GetVersion(string(body))
|
||||||
for _, line := range lines {
|
}
|
||||||
if strings.HasPrefix(line, "## Version") {
|
func (a *Addon) IsUpToDate() bool {
|
||||||
version := strings.TrimSpace(strings.TrimPrefix(line, "## Version"))
|
remoteVersion, err := a.GetRemoteVersion()
|
||||||
log.Printf("local version: %s", version)
|
if err != nil {
|
||||||
return version
|
return false
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return ""
|
localVersion, err := a.GetLocalVersion()
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return remoteVersion == localVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
gamePath = filepath.Join("C:\\", "Games", "WoWRuski")
|
gamePath = filepath.Join("C:\\", "Games", "WoWRuski")
|
||||||
for _, addon := range addons {
|
for _, addon := range addons {
|
||||||
log.Printf("%#v", addon.GetLocalToc())
|
log.Printf("%#v", addon.IsUpToDate())
|
||||||
log.Printf("%#v", addon.GetRemoteToc())
|
log.Printf("%#v", addon.GetRemoteReleaseURL())
|
||||||
remoteVersion, err := addon.GetRemoteVersion()
|
body, err := addon.GetRemoteRelease()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error getting remote version: %s", err)
|
log.Printf("error getting remote release: %s", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
log.Printf("%#v", remoteVersion)
|
log.Printf("%#v", string(body))
|
||||||
log.Printf("%#v", addon.GetLocalVersion())
|
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
// Create an instance of the app structure
|
|
||||||
app := NewApp()
|
app := NewApp()
|
||||||
|
|
||||||
// Create application with options
|
|
||||||
err := wails.Run(&options.App{
|
err := wails.Run(&options.App{
|
||||||
Title: "wails-template",
|
Title: "wails-template",
|
||||||
Width: 1024,
|
Width: 1024,
|
||||||
|
18
utils.go
18
utils.go
@@ -1 +1,17 @@
|
|||||||
package main
|
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")
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user