music_player_page.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. package MusicPlayer
  2. import (
  3. "fmt"
  4. "path/filepath"
  5. "log"
  6. "github.com/cuu/gogame/event"
  7. "github.com/cuu/gogame/rect"
  8. "github.com/cuu/gogame/surface"
  9. "github.com/veandco/go-sdl2/ttf"
  10. "github.com/cuu/gogame/color"
  11. "github.com/clockworkpi/LauncherGoDev/sysgo"
  12. "github.com/clockworkpi/LauncherGoDev/sysgo/UI"
  13. "github.com/fhs/gompd/v2/mpd"
  14. )
  15. type MusicPlayerPage struct {
  16. UI.Page
  17. ListFontObj *ttf.Font
  18. URLColor *color.Color
  19. TextColor *color.Color
  20. Labels map[string]UI.LabelInterface
  21. Icons map[string]UI.IconItemInterface
  22. IP string
  23. MyMusicLibListPage *MusicLibListPage //also use the MpdClient *mpd.Client
  24. //MyList []UI.ListItemInterface
  25. MyStack *UI.FolderStack
  26. BGwidth int
  27. BGheight int //70
  28. Scroller *UI.ListScroller
  29. Scrolled int
  30. MpdClient *mpd.Client
  31. }
  32. func NewMusicPlayerPage() *MusicPlayerPage {
  33. p := &MusicPlayerPage{}
  34. p.PageIconMargin = 20
  35. p.SelectedIconTopOffset = 20
  36. p.EasingDur = 10
  37. p.Align = UI.ALIGN["SLeft"]
  38. p.FootMsg = [5]string{"Nav","Remove","RTA","Back","Play/Pause"}
  39. p.URLColor = UI.MySkinManager.GiveColor("URL")
  40. p.TextColor = UI.MySkinManager.GiveColor("Text")
  41. p.ListFontObj = UI.MyLangManager.TrFont("notosanscjk15")
  42. p.Labels = make(map[string]UI.LabelInterface)
  43. p.Icons = make(map[string]UI.IconItemInterface)
  44. p.BGwidth = 56
  45. p.BGheight = 70
  46. return p
  47. }
  48. func (self *MusicPlayerPage) OnLoadCb() {
  49. self.PosY = 0
  50. if self.MpdClient == nil {
  51. conn, err := mpd.Dial("unix", sysgo.MPD_socket)
  52. if err != nil {
  53. log.Fatalln(err)
  54. }
  55. self.MpdClient = conn
  56. fmt.Println("Start mpd client")
  57. }
  58. }
  59. func (self *MusicPlayerPage) OnPopUpCb() {
  60. if self.MpdClient != nil {
  61. self.MpdClient.Close()
  62. self.MpdClient = nil
  63. fmt.Println("Close mpd client")
  64. }
  65. }
  66. func (self *MusicPlayerPage) SetCoords() {
  67. }
  68. func (self *MusicPlayerPage) SetLabels() {
  69. }
  70. func (self *MusicPlayerPage) SyncList() {
  71. conn := self.MpdClient
  72. start_x := 0
  73. start_y := 0
  74. if conn == nil {
  75. return
  76. }
  77. self.MyList = nil
  78. play_list,_ := conn.PlaylistInfo(-1,-1)
  79. for i,v := range play_list {
  80. li := NewMusicPlayPageListItem()
  81. li.Parent = self
  82. li.PosX = start_x
  83. li.PosY = start_y + UI.DefaultInfoPageListItemHeight * i
  84. li.Width = UI.Width
  85. li.Fonts["normal"] = self.ListFontObj
  86. if val,ok:=v["Title"]; ok {
  87. li.Init(val)
  88. if val2,ok2 := v["file"]; ok2 {
  89. li.Path = val2
  90. }
  91. }else {
  92. if val2,ok2 := v["file"]; ok2 {
  93. li.Init(filepath.Base(val2))
  94. li.Path = val2
  95. }else{
  96. li.Init("NoName")
  97. }
  98. }
  99. x,_ := li.Labels["Text"].Coord()
  100. li.Labels["Text"].NewCoord(x,7)
  101. self.MyList = append(self.MyList, li)
  102. }
  103. self.SyncPlaying()
  104. }
  105. func (self *MusicPlayerPage) SyncPlaying() {
  106. conn := self.MpdClient
  107. for i,_ := range self.MyList {
  108. self.MyList[i].(*MusicPlayPageListItem).Active = false
  109. self.MyList[i].(*MusicPlayPageListItem).PlayingProcess = 0
  110. }
  111. current_song,_ := conn.CurrentSong()
  112. if len(current_song) > 0 {
  113. }
  114. }
  115. func (self *MusicPlayerPage) Init() {
  116. if self.Screen == nil {
  117. panic("No Screen")
  118. }
  119. if self.Screen.CanvasHWND != nil && self.CanvasHWND == nil {
  120. self.HWND = self.Screen.CanvasHWND
  121. self.CanvasHWND = surface.Surface(self.Screen.Width, self.Screen.Height)
  122. }
  123. self.PosX = self.Index * self.Screen.Width
  124. self.Width = self.Screen.Width
  125. self.Height = self.Screen.Height
  126. ps := UI.NewInfoPageSelector()
  127. ps.Width = UI.Width - 12
  128. ps.PosX = 2
  129. ps.Parent = self
  130. self.Ps = ps
  131. self.PsIndex = 0
  132. bgpng := UI.NewIconItem()
  133. bgpng.ImgSurf = UI.MyIconPool.GetImgSurf("empty")
  134. bgpng.MyType = UI.ICON_TYPES["STAT"]
  135. bgpng.Parent = self
  136. bgpng.AddLabel("Please upload data over Wi-Fi", UI.Fonts["varela22"])
  137. bgpng.SetLabelColor(&color.Color{204, 204, 204, 255})
  138. bgpng.Adjust(0, 0, self.BGwidth, self.BGheight, 0)
  139. self.Icons["bg"] = bgpng
  140. icon_for_list := UI.NewMultiIconItem()
  141. icon_for_list.ImgSurf = UI.MyIconPool.GetImgSurf("sys")
  142. icon_for_list.MyType = UI.ICON_TYPES["STAT"]
  143. icon_for_list.Parent = self
  144. icon_for_list.Adjust(0, 0, 18, 18, 0)
  145. self.Icons["sys"] = icon_for_list
  146. self.Scroller = UI.NewListScroller()
  147. self.Scroller.Parent = self
  148. self.Scroller.PosX = self.Width - 10
  149. self.Scroller.PosY = 2
  150. self.Scroller.Init()
  151. self.MyMusicLibListPage = NewMusicLibListPage()
  152. self.MyMusicLibListPage.Screen = self.Screen
  153. self.MyMusicLibListPage.Name = "Music Library"
  154. self.MyMusicLibListPage.Parent = self
  155. self.MyMusicLibListPage.Init()
  156. self.MyStack = UI.NewFolderStack()
  157. self.MyStack.SetRootPath("/")
  158. }
  159. func (self *MusicPlayerPage) KeyDown(ev *event.Event) {
  160. if ev.Data["Key"] == UI.CurKeys["Right"] {
  161. self.Screen.PushPage(self.MyMusicLibListPage)
  162. self.Screen.Draw()
  163. self.Screen.SwapAndShow()
  164. }
  165. if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
  166. self.ReturnToUpLevelPage()
  167. self.Screen.Draw()
  168. self.Screen.SwapAndShow()
  169. }
  170. return
  171. }
  172. func (self *MusicPlayerPage) Draw() {
  173. self.ClearCanvas()
  174. if len(self.MyList) == 0 {
  175. self.Icons["bg"].NewCoord(self.Width/2, self.Height/2)
  176. self.Icons["bg"].Draw()
  177. }
  178. if self.HWND != nil {
  179. surface.Fill(self.HWND, UI.MySkinManager.GiveColor("White"))
  180. rect_ := rect.Rect(self.PosX, self.PosY, self.Width, self.Height)
  181. surface.Blit(self.HWND, self.CanvasHWND, &rect_, nil)
  182. }
  183. }