123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- package main
- import (
- "fmt"
- "bytes"
- "strings"
- gotime "time"
- "os/exec"
- "encoding/json"
- "net/http"
- "github.com/veandco/go-sdl2/ttf"
- "github.com/cuu/gogame/time"
- // "github.com/cuu/gogame/surface"
- "github.com/cuu/gogame/event"
- //"github.com/cuu/gogame/rect"
- //"github.com/cuu/gogame/color"
- // "github.com/cuu/gogame/font"
- //"github.com/cuu/gogame/draw"
-
- "github.com/cuu/LauncherGoDev/sysgo"
- "github.com/cuu/LauncherGoDev/sysgo/UI"
- )
- var InfoPageListItemDefaultHeight = 30
- var launchergo_path = "/home/cpi/launchergo"
- type UpdateConfirmPage struct {
- UI.ConfirmPage
-
- URL string
- MD5 string
- Version string
- GIT bool
- }
- func NewUpdateConfirmPage() *UpdateConfirmPage {
- p := &UpdateConfirmPage{}
-
- p.ListFont = UI.Fonts["veramono20"]
- p.FootMsg = [5]string{"Nav","","","Cancel","Yes"}
- p.ConfirmText = "Confirm Update?"
- return p
- }
- func (self *UpdateConfirmPage) KeyDown(ev *event.Event) {
- if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
- self.ReturnToUpLevelPage()
- self.Screen.Draw()
- self.Screen.SwapAndShow()
- }
-
- if ev.Data["Key"] == UI.CurKeys["B"] {
- fmt.Println("Update Confirm Page B",self.GIT)
- if self.GIT == true {
- //go exec requires FullPath of script filename
- cmdpath := fmt.Sprintf("%s/update.sh %s",UI.GetExePath(),self.Version)
- event.Post(UI.RUNSH,cmdpath)
- return
- }
- }
- }
- func (self *UpdateConfirmPage) OnReturnBackCb() {
- self.ReturnToUpLevelPage()
- self.Screen.Draw()
- self.Screen.SwapAndShow()
- }
- func (self *UpdateConfirmPage) Draw() {
- self.ClearCanvas()
- self.DrawBG()
- for _,v := range self.MyList{
- v.Draw()
- }
- self.Reset()
- }
- type UpdatePage struct {
- UI.Page
- AList map[string]map[string]string
- ListFontObj *ttf.Font
- MyList []*UI.InfoPageListItem
- ConfirmPage *UpdateConfirmPage
- }
- func NewUpdatePage() *UpdatePage {
- p := &UpdatePage{}
- p.FootMsg = [5]string{ "Nav","Check Update","","Back","" }
- p.PageIconMargin = 20
- p.SelectedIconTopOffset = 20
- p.EasingDur = 10
- p.Align = UI.ALIGN["SLeft"]
- p.ListFontObj = UI.Fonts["varela15"]
-
- p.AList = make( map[string]map[string]string )
-
- return p
- }
- func (self *UpdatePage) GenList() {
- self.MyList = nil
- self.MyList = make([]*UI.InfoPageListItem,0)
- start_x := 0
- start_y := 0
- i := 0
-
- for k,_ := range self.AList {
- li := UI.NewInfoPageListItem()
- li.Parent = self
- li.PosX = start_x
- li.PosY = start_y + i*InfoPageListItemDefaultHeight
- li.Width = UI.Width
- li.Fonts["normal"] = self.ListFontObj
- li.Fonts["small"] = UI.Fonts["varela12"]
-
- if self.AList[k]["label"] != "" {
- li.Init(self.AList[k]["label"])
- }else {
- li.Init(self.AList[k]["key"] )
- }
-
- li.Flag = self.AList[k]["key"]
-
- li.SetSmallText( self.AList[k]["value"])
-
- self.MyList = append(self.MyList,li)
-
- i+=1
- }
- }
- func (self *UpdatePage) Init() {
- self.CanvasHWND = self.Screen.CanvasHWND
- self.Width = self.Screen.Width
- self.Height = self.Screen.Height
-
- self.ConfirmPage = NewUpdateConfirmPage()
- self.ConfirmPage.Screen = self.Screen
- self.ConfirmPage.Name = "Update Confirm"
- self.ConfirmPage.Init()
-
- it := make(map[string]string)
- it["key"] = "version"
- it["label"] = "Version"
- it["value"] = sysgo.VERSION
-
- self.AList["version"] = it
-
- self.GenList()
- }
- func (self *UpdatePage) CheckUpdate() bool {
- self.Screen.MsgBox.SetText("Checking Update")
- self.Screen.MsgBox.Draw()
- self.Screen.SwapAndShow()
- type Response struct {
- GitVersion string `json:"gitversion"`
- }
-
-
- timeout := gotime.Duration(8 * gotime.Second)
- client := http.Client{
- Timeout: timeout,
- }
- resp, err := client.Get(sysgo.UPDATE_URL)
- if err != nil {
- fmt.Println(err)
- return false
- }
- var ret Response
- buf := new(bytes.Buffer)
- buf.ReadFrom(resp.Body)
- respByte := buf.Bytes()
- if err := json.Unmarshal(respByte, &ret); err != nil {
- fmt.Println(err)
- return false
- }
- fmt.Println("got git version :", ret.GitVersion)
-
- launchergo_git_rev_parse := exec.Command("git", "rev-parse", "--short", "HEAD")
- launchergo_git_rev_parse.Dir = launchergo_path
- var out bytes.Buffer
- launchergo_git_rev_parse.Stdout = &out
- err = launchergo_git_rev_parse.Run()
-
- if err != nil {
- fmt.Println(err)
- return false
- }
-
- git_revision_short_hash := strings.Trim(out.String(), "\r\n ")
-
- if git_revision_short_hash != ret.GitVersion {
- self.ConfirmPage.Version = ret.GitVersion
- self.ConfirmPage.GIT = true
- self.Screen.PushCurPage()
- self.Screen.SetCurPage(self.ConfirmPage)
-
- self.Screen.Draw()
-
- self.ConfirmPage.SnapMsg( fmt.Sprintf("Update to %s?",ret.GitVersion))
- self.Screen.SwapAndShow()
-
- }else {
- self.Screen.Draw()
- self.Screen.MsgBox.SetText("Launcher is up to date")
- self.Screen.MsgBox.Draw()
- self.Screen.SwapAndShow()
- time.BlockDelay(765)
- }
-
- defer resp.Body.Close()
-
-
- return true
-
- }
- func (self *UpdatePage) KeyDown(ev *event.Event) {
- if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
- self.ReturnToUpLevelPage()
- self.Screen.Draw()
- self.Screen.SwapAndShow()
- }
-
- if ev.Data["Key"] == UI.CurKeys["X"] {
- if self.Screen.DBusManager.IsWifiConnectedNow() == true {
- if self.CheckUpdate() == true {
- self.Screen.Draw()
- self.Screen.SwapAndShow()
- }else {
- self.Screen.Draw()
- self.Screen.MsgBox.SetText("Check Update Failed")
- self.Screen.MsgBox.Draw()
- self.Screen.SwapAndShow()
- }
- }else {
- self.Screen.Draw()
- self.Screen.MsgBox.SetText("Please Check your Wi-Fi connection")
- self.Screen.MsgBox.Draw()
- self.Screen.SwapAndShow()
- }
- }
- }
- func (self *UpdatePage) Draw() {
- self.ClearCanvas()
- for _,v := range self.MyList {
- v.Draw()
- }
- }
|