|
@@ -0,0 +1,254 @@
|
|
|
+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?"
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+func (self *UpdateConfirmPage) KeyDown(ev *event.Event) {
|
|
|
+
|
|
|
+ if ev.Data["Key"] == CurKeys["A"] || ev.Data["Key"] == CurKeys["Menu"] {
|
|
|
+ self.ReturnToUpLevelPage()
|
|
|
+ self.Screen.Draw()
|
|
|
+ self.Screen.SwapAndShow()
|
|
|
+ }
|
|
|
+
|
|
|
+ if ev.Data["Key"] == CurKeys["B"] {
|
|
|
+ if self.GIT == true {
|
|
|
+ cmdpath := fmt.Sprintf("feh --bg-center %s/sys.go/gameshell/wallpaper/updating.png; cd %s ;git pull; git reset --hard %s ; feh --bg-center %s/sys.py/gameshell/wallpaper/loading.png ",
|
|
|
+ launchergo_path,
|
|
|
+ launchergo_path,
|
|
|
+ self.Version,
|
|
|
+ launchergo_path )
|
|
|
+
|
|
|
+ event.Post(UI.RUNEVT,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 = ALIGN["SLeft"]
|
|
|
+ p.ListFontObj = UI.Fonts["varela15"]
|
|
|
+
|
|
|
+ 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]["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.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
|
|
|
+
|
|
|
+}
|