diff --git a/fallback.go b/fallback.go index 2c20857..7d028e7 100644 --- a/fallback.go +++ b/fallback.go @@ -3,11 +3,30 @@ package main import ( "fmt" "strconv" + + "github.com/skratchdot/open-golang/open" ) func createFallbackUI() { fmt.Println(header) + shouldUpdate, newTag, err := checkForUpdate() + if err != nil { + fmt.Println(err.Error()) + fmt.Scanln() + panic(err) + } + + if shouldUpdate { + var choice string + fmt.Printf("There is a new shadowfox-updater version available (%s -> %s)\nDo you want to update? [y/n]", tag, newTag) + fmt.Scanln(&choice) + wantToUpdate := (choice == "y" || choice == "Y") + if wantToUpdate { + open.Start("https://github.com/SrKomodo/shadowfox-updater/#installing") + } + } + var choice string paths, names, err := getProfilePaths() if err != nil { diff --git a/go.mod b/go.mod index cae2f6e..bfcfb2e 100644 --- a/go.mod +++ b/go.mod @@ -6,4 +6,5 @@ require ( github.com/gen2brain/dlgs v0.0.0-20180629122906-342edb4c68c1 github.com/go-ini/ini v1.42.0 github.com/mitchellh/go-homedir v1.1.0 + github.com/skratchdot/open-golang v0.0.0-20190402232053-79abb63cd66e ) diff --git a/go.sum b/go.sum index 51ca862..7907f5e 100644 --- a/go.sum +++ b/go.sum @@ -4,3 +4,5 @@ github.com/go-ini/ini v1.42.0 h1:TWr1wGj35+UiWHlBA8er89seFXxzwFn11spilrrj+38= github.com/go-ini/ini v1.42.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/skratchdot/open-golang v0.0.0-20190402232053-79abb63cd66e h1:VAzdS5Nw68fbf5RZ8RDVlUvPXNU6Z3jtPCK/qvm4FoQ= +github.com/skratchdot/open-golang v0.0.0-20190402232053-79abb63cd66e/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog= diff --git a/main.go b/main.go index 0974ca3..e15c89e 100644 --- a/main.go +++ b/main.go @@ -4,7 +4,6 @@ import ( "os" ) -var tag string var header = "Shadowfox updater " + tag func main() { diff --git a/ui.go b/ui.go index 5b4f392..d11e0aa 100644 --- a/ui.go +++ b/ui.go @@ -1,10 +1,32 @@ package main import ( + "fmt" + "github.com/gen2brain/dlgs" + "github.com/skratchdot/open-golang/open" ) func createUI() error { + shouldUpdate, newTag, err := checkForUpdate() + if err != nil { + _, err := dlgs.Error(header, err.Error()) + if err != nil { + return err + } + } + + if shouldUpdate { + wantToUpdate, err := dlgs.Question(header, fmt.Sprintf("There is a new shadowfox-updater version available (%s -> %s)\nDo you want to update?", tag, newTag), true) + if err != nil { + return err + } + if wantToUpdate { + open.Start("https://github.com/SrKomodo/shadowfox-updater/#installing") + return nil + } + } + paths, names, err := getProfilePaths() if err != nil { _, err := dlgs.Error(header, err.Error()) diff --git a/version.go b/version.go new file mode 100644 index 0000000..a7de19f --- /dev/null +++ b/version.go @@ -0,0 +1,27 @@ +package main + +import ( + "io/ioutil" + "net/http" + "regexp" +) + +var tag string + +func checkForUpdate() (bool, string, error) { + resp, err := http.Get("https://api.github.com/repos/SrKomodo/shadowfox-updater/releases/latest") + if err != nil { + return false, "", err + } + + defer resp.Body.Close() + data, err := ioutil.ReadAll(resp.Body) + if err != nil { + return false, "", err + } + + regex := regexp.MustCompile(`"tag_name":"(.+?)"`) + newTag := string(regex.FindSubmatch(data)[1]) + + return newTag != tag, newTag, nil +}