main.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "net/url"
  6. "fyne.io/fyne/v2"
  7. "fyne.io/fyne/v2/app"
  8. "fyne.io/fyne/v2/cmd/fyne_settings/settings"
  9. "fyne.io/fyne/v2/container"
  10. "fyne.io/fyne/v2/theme"
  11. "fyne.io/fyne/v2/widget"
  12. )
  13. var Version string
  14. var UseWake bool // WOL
  15. var TvStatus string = "Disconnected" // Need refresh
  16. var TvIp string
  17. var TvMac string // Used for WOL
  18. func setup_prefs(pref fyne.Preferences) {
  19. Version = pref.StringWithFallback("version", "")
  20. if Version == "" {
  21. pref.SetString("version", "1.0-dev")
  22. Version = "1.0-dev"
  23. }
  24. UseWake = pref.BoolWithFallback("wake_on_lan", false)
  25. }
  26. // Depreciated as mobile users will use the settings button rather than the menu
  27. /*func make_mainMnu(a fyne.App, w fyne.Window) *fyne.MainMenu {
  28. var settingsItem *fyne.MenuItem = fyne.NewMenuItem("Settings", func() {
  29. var w2 fyne.Window = a.NewWindow("myRoku Settings")
  30. w2.SetContent(settings.NewSettings().LoadAppearanceScreen(w2))
  31. w2.CenterOnScreen()
  32. w2.Resize(fyne.NewSize(480, 480))
  33. w2.Show()
  34. })
  35. var mnu *fyne.MainMenu = fyne.NewMainMenu(fyne.NewMenu("File", settingsItem, fyne.NewMenuItemSeparator()))
  36. return mnu
  37. }*/
  38. func main() {
  39. var a fyne.App = app.NewWithID("my-roku")
  40. var pref fyne.Preferences = a.Preferences()
  41. setup_prefs(pref)
  42. log.Printf("myRoku v%s wol=%t", Version, UseWake)
  43. var home fyne.Window = a.NewWindow("myRoku")
  44. /*if a.Driver().Device().HasKeyboard() { // Desktop only
  45. home.SetMainMenu(make_mainMnu(a, home))
  46. } */
  47. home.CenterOnScreen()
  48. home.Resize(fyne.Size{Width: 400, Height: 600})
  49. home.SetContent(container.NewVBox(
  50. container.NewHBox(
  51. widget.NewLabel(fmt.Sprintf("myRoku - v%s", Version)),
  52. widget.NewButtonWithIcon("", theme.SettingsIcon(), func() {
  53. var w2 fyne.Window = a.NewWindow("myRoku Settings")
  54. w2.SetContent(container.NewVBox(
  55. settings.NewSettings().LoadAppearanceScreen(w2),
  56. widget.NewButton("Quit", func() {
  57. w2.Close()
  58. }),
  59. ))
  60. w2.CenterOnScreen()
  61. w2.Resize(fyne.NewSize(480, 480))
  62. w2.Show()
  63. }),
  64. ),
  65. container.NewHBox(
  66. widget.NewLabel(TvStatus),
  67. widget.NewButtonWithIcon("", theme.MediaReplayIcon(), func() {
  68. if UseWake {
  69. log.Println("Requested refresh of status")
  70. } else {
  71. log.Println("WOL disabled")
  72. }
  73. }),
  74. widget.NewButtonWithIcon("Connections", theme.ComputerIcon(), func() {
  75. var w2 fyne.Window = a.NewWindow("myRoku Connections")
  76. var ip_entry *widget.Entry = widget.NewEntry()
  77. ip_entry.SetText(TvIp)
  78. ip_entry.OnSubmitted = func(s string) {
  79. if TvIp != s { // It's the same thing!?!
  80. log.Printf("TvIp='%s' Now '%s'", TvIp, s)
  81. TvIp = s
  82. ip_entry.Refresh()
  83. }
  84. ip_entry.FocusLost() // Lose focus so the user can enter the next field
  85. }
  86. var mac_entry *widget.Entry = widget.NewEntry()
  87. mac_entry.SetText(TvMac)
  88. mac_entry.OnSubmitted = func(s string) {
  89. if TvMac != s { // It's the same thing!?!
  90. log.Printf("TvMac='%s' Now '%s'", TvMac, s)
  91. TvMac = s
  92. mac_entry.Refresh()
  93. }
  94. mac_entry.FocusLost() // Lose focus so the user can enter the next field
  95. }
  96. w2.SetContent(container.NewVBox(
  97. container.NewHBox(
  98. widget.NewLabel("Tv Ip Address"),
  99. widget.NewButtonWithIcon("", theme.HelpIcon(), func() {
  100. var u *url.URL
  101. var err error
  102. u, err = url.Parse("https://en.wikipedia.org/wiki/IP_address")
  103. if err != nil {
  104. log.Println("Failed sending the user to Wiki=IP_address", err)
  105. return
  106. }
  107. a.OpenURL(u)
  108. }),
  109. ),
  110. ip_entry,
  111. container.NewHBox(
  112. widget.NewLabel("Tv Mac Address"),
  113. widget.NewButtonWithIcon("", theme.HelpIcon(), func() {
  114. var u *url.URL
  115. var err error
  116. u, err = url.Parse("https://en.wikipedia.org/wiki/MAC_address")
  117. if err != nil {
  118. log.Println("Failed sending the user to Wiki=MAC_address", err)
  119. return
  120. }
  121. a.OpenURL(u)
  122. }),
  123. ),
  124. mac_entry,
  125. widget.NewButtonWithIcon("Back", theme.NavigateBackIcon(), func() {
  126. w2.Close()
  127. }),
  128. ))
  129. w2.CenterOnScreen()
  130. w2.Resize(fyne.NewSize(480, 480))
  131. w2.Show()
  132. }),
  133. ),
  134. widget.NewButton("Debug", func() {
  135. log.Printf("myRoku v%s wol=%t", Version, UseWake)
  136. log.Printf("TvStatus='%s' TvIp='%s' TvMac='%s'", TvStatus, TvIp, TvMac)
  137. log.Printf("driver=(mobile:%t, desktop:%t, browser:%t)", a.Driver().Device().IsMobile(), a.Driver().Device().HasKeyboard(), a.Driver().Device().IsBrowser())
  138. }),
  139. ))
  140. home.Show()
  141. a.Run()
  142. }