update_page.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. package Update
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. //"github.com/cuu/gogame/time"
  7. "github.com/veandco/go-sdl2/ttf"
  8. "net/http"
  9. "os/exec"
  10. "strings"
  11. gotime "time"
  12. // "github.com/cuu/gogame/surface"
  13. "github.com/cuu/gogame/event"
  14. //"github.com/cuu/gogame/rect"
  15. //"github.com/cuu/gogame/color"
  16. // "github.com/cuu/gogame/font"
  17. //"github.com/cuu/gogame/draw"
  18. "github.com/clockworkpi/LauncherGoDev/sysgo"
  19. "github.com/clockworkpi/LauncherGoDev/sysgo/UI"
  20. )
  21. var InfoPageListItemDefaultHeight = 30
  22. var launchergo_path = "/home/cpi/launchergo"
  23. type UpdateConfirmPage struct {
  24. UI.ConfirmPage
  25. URL string
  26. MD5 string
  27. Version string
  28. GIT bool
  29. }
  30. func NewUpdateConfirmPage() *UpdateConfirmPage {
  31. p := &UpdateConfirmPage{}
  32. p.ListFont = UI.Fonts["veramono20"]
  33. p.FootMsg = [5]string{"Nav", "", "", "Cancel", "Yes"}
  34. p.ConfirmText = "Confirm Update?"
  35. return p
  36. }
  37. func (self *UpdateConfirmPage) KeyDown(ev *event.Event) {
  38. if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
  39. self.ReturnToUpLevelPage()
  40. self.Screen.Refresh()
  41. }
  42. if ev.Data["Key"] == UI.CurKeys["B"] {
  43. fmt.Println("Update Confirm Page B", self.GIT)
  44. if self.GIT == true {
  45. //go exec requires FullPath of script filename
  46. cmdpath := fmt.Sprintf("%s/update.sh %s", UI.GetExePath(), self.Version)
  47. event.Post(UI.RUNSH, cmdpath)
  48. return
  49. }
  50. }
  51. }
  52. func (self *UpdateConfirmPage) OnReturnBackCb() {
  53. self.ReturnToUpLevelPage()
  54. self.Screen.Refresh()
  55. }
  56. func (self *UpdateConfirmPage) Draw() {
  57. self.ClearCanvas()
  58. self.DrawBG()
  59. for _, v := range self.MyList {
  60. v.Draw()
  61. }
  62. self.Reset()
  63. }
  64. type UpdatePage struct {
  65. UI.Page
  66. AList map[string]map[string]string
  67. ListFontObj *ttf.Font
  68. MyList []*UI.InfoPageListItem
  69. ConfirmPage *UpdateConfirmPage
  70. }
  71. func NewUpdatePage() *UpdatePage {
  72. p := &UpdatePage{}
  73. p.FootMsg = [5]string{"Nav", "Check Update", "", "Back", ""}
  74. p.PageIconMargin = 20
  75. p.SelectedIconTopOffset = 20
  76. p.EasingDur = 10
  77. p.Align = UI.ALIGN["SLeft"]
  78. p.ListFontObj = UI.Fonts["varela15"]
  79. p.AList = make(map[string]map[string]string)
  80. return p
  81. }
  82. func (self *UpdatePage) GenList() {
  83. self.MyList = nil
  84. self.MyList = make([]*UI.InfoPageListItem, 0)
  85. start_x := 0
  86. start_y := 0
  87. i := 0
  88. for k, _ := range self.AList {
  89. li := UI.NewInfoPageListItem()
  90. li.Parent = self
  91. li.PosX = start_x
  92. li.PosY = start_y + i*InfoPageListItemDefaultHeight
  93. li.Width = UI.Width
  94. li.Fonts["normal"] = self.ListFontObj
  95. li.Fonts["small"] = UI.Fonts["varela12"]
  96. if self.AList[k]["label"] != "" {
  97. li.Init(self.AList[k]["label"])
  98. } else {
  99. li.Init(self.AList[k]["key"])
  100. }
  101. li.Flag = self.AList[k]["key"]
  102. li.SetSmallText(self.AList[k]["value"])
  103. self.MyList = append(self.MyList, li)
  104. i += 1
  105. }
  106. }
  107. func (self *UpdatePage) Init() {
  108. self.CanvasHWND = self.Screen.CanvasHWND
  109. self.Width = self.Screen.Width
  110. self.Height = self.Screen.Height
  111. self.ConfirmPage = NewUpdateConfirmPage()
  112. self.ConfirmPage.Screen = self.Screen
  113. self.ConfirmPage.Name = "Update Confirm"
  114. self.ConfirmPage.Init()
  115. it := make(map[string]string)
  116. it["key"] = "version"
  117. it["label"] = "Version"
  118. it["value"] = sysgo.VERSION
  119. self.AList["version"] = it
  120. self.GenList()
  121. }
  122. func (self *UpdatePage) CheckUpdate() bool {
  123. self.Screen.MsgBox.SetText("Checking Update")
  124. self.Screen.MsgBox.Draw()
  125. self.Screen.SwapAndShow()
  126. type Response struct {
  127. GitVersion string `json:"gitversion"`
  128. }
  129. timeout := gotime.Duration(8 * gotime.Second)
  130. client := http.Client{
  131. Timeout: timeout,
  132. }
  133. resp, err := client.Get(sysgo.UPDATE_URL)
  134. if err != nil {
  135. fmt.Println(err)
  136. return false
  137. }
  138. var ret Response
  139. buf := new(bytes.Buffer)
  140. buf.ReadFrom(resp.Body)
  141. respByte := buf.Bytes()
  142. if err := json.Unmarshal(respByte, &ret); err != nil {
  143. fmt.Println(err)
  144. return false
  145. }
  146. fmt.Println("got git version :", ret.GitVersion)
  147. launchergo_git_rev_parse := exec.Command("git", "rev-parse", "--short", "HEAD")
  148. launchergo_git_rev_parse.Dir = launchergo_path
  149. var out bytes.Buffer
  150. launchergo_git_rev_parse.Stdout = &out
  151. err = launchergo_git_rev_parse.Run()
  152. if err != nil {
  153. fmt.Println(err)
  154. return false
  155. }
  156. git_revision_short_hash := strings.Trim(out.String(), "\r\n ")
  157. if git_revision_short_hash != ret.GitVersion {
  158. self.ConfirmPage.Version = ret.GitVersion
  159. self.ConfirmPage.GIT = true
  160. self.Screen.PushCurPage()
  161. self.Screen.SetCurPage(self.ConfirmPage)
  162. self.Screen.Draw()
  163. self.ConfirmPage.SnapMsg(fmt.Sprintf("Update to %s?", ret.GitVersion))
  164. self.Screen.SwapAndShow()
  165. } else {
  166. self.Screen.ShowMsg("Launchergo is up to date",765)
  167. }
  168. defer resp.Body.Close()
  169. return true
  170. }
  171. func (self *UpdatePage) KeyDown(ev *event.Event) {
  172. if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
  173. self.ReturnToUpLevelPage()
  174. self.Screen.Refresh()
  175. }
  176. if ev.Data["Key"] == UI.CurKeys["X"] {
  177. if self.Screen.IsWifiConnectedNow() == true {
  178. if self.CheckUpdate() == true {
  179. self.Screen.Refresh()
  180. } else {
  181. self.Screen.ShowMsg("Check Update Failed",0)
  182. }
  183. } else {
  184. self.Screen.ShowMsg("Please Check your Wi-Fi connection",0)
  185. }
  186. }
  187. }
  188. func (self *UpdatePage) Draw() {
  189. self.ClearCanvas()
  190. for _, v := range self.MyList {
  191. v.Draw()
  192. }
  193. }