update_page.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. package main
  2. import (
  3. "fmt"
  4. "bytes"
  5. "strings"
  6. gotime "time"
  7. "os/exec"
  8. "encoding/json"
  9. "net/http"
  10. "github.com/veandco/go-sdl2/ttf"
  11. "github.com/cuu/gogame/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/cuu/LauncherGoDev/sysgo"
  19. "github.com/cuu/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.Draw()
  41. self.Screen.SwapAndShow()
  42. }
  43. if ev.Data["Key"] == UI.CurKeys["B"] {
  44. if self.GIT == true {
  45. cmdpath := fmt.Sprintf("update.sh %s ",self.Version)
  46. event.Post(UI.RUNSH,cmdpath)
  47. return
  48. }
  49. }
  50. }
  51. func (self *UpdateConfirmPage) OnReturnBackCb() {
  52. self.ReturnToUpLevelPage()
  53. self.Screen.Draw()
  54. self.Screen.SwapAndShow()
  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.Draw()
  167. self.Screen.MsgBox.SetText("Launcher is up to date")
  168. self.Screen.MsgBox.Draw()
  169. self.Screen.SwapAndShow()
  170. time.BlockDelay(765)
  171. }
  172. defer resp.Body.Close()
  173. return true
  174. }
  175. func (self *UpdatePage) KeyDown(ev *event.Event) {
  176. if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
  177. self.ReturnToUpLevelPage()
  178. self.Screen.Draw()
  179. self.Screen.SwapAndShow()
  180. }
  181. if ev.Data["Key"] == UI.CurKeys["X"] {
  182. if self.Screen.DBusManager.IsWifiConnectedNow() == true {
  183. if self.CheckUpdate() == true {
  184. self.Screen.Draw()
  185. self.Screen.SwapAndShow()
  186. }else {
  187. self.Screen.Draw()
  188. self.Screen.MsgBox.SetText("Check Update Failed")
  189. self.Screen.MsgBox.Draw()
  190. self.Screen.SwapAndShow()
  191. }
  192. }else {
  193. self.Screen.Draw()
  194. self.Screen.MsgBox.SetText("Please Check your Wi-Fi connection")
  195. self.Screen.MsgBox.Draw()
  196. self.Screen.SwapAndShow()
  197. }
  198. }
  199. }
  200. func (self *UpdatePage) Draw() {
  201. self.ClearCanvas()
  202. for _,v := range self.MyList {
  203. v.Draw()
  204. }
  205. }