wifi.go 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101
  1. package Wifi
  2. //wifi_list.py
  3. import (
  4. "fmt"
  5. "strconv"
  6. "strings"
  7. gotime "time"
  8. "github.com/godbus/dbus"
  9. "github.com/veandco/go-sdl2/ttf"
  10. "github.com/cuu/gogame/surface"
  11. "github.com/cuu/gogame/font"
  12. "github.com/cuu/gogame/color"
  13. "github.com/cuu/gogame/event"
  14. "github.com/cuu/gogame/time"
  15. "github.com/cuu/gogame/rect"
  16. "github.com/cuu/gogame/draw"
  17. "github.com/clockworkpi/LauncherGoDev/sysgo/UI"
  18. "github.com/clockworkpi/LauncherGoDev/sysgo/DBUS"
  19. "github.com/clockworkpi/LauncherGoDev/sysgo/wicd/misc"
  20. )
  21. type WifiDisconnectConfirmPage struct {
  22. UI.ConfirmPage
  23. Parent *WifiInfoPage
  24. }
  25. func NewWifiDisconnectConfirmPage() *WifiDisconnectConfirmPage {
  26. p := &WifiDisconnectConfirmPage{}
  27. p.ListFont = UI.Fonts["veramono20"]
  28. p.FootMsg = [5]string{"Nav","","","Cancel","Yes"}
  29. p.ConfirmText ="Confirm Disconnect?"
  30. return p
  31. }
  32. func (self *WifiDisconnectConfirmPage) KeyDown(ev *event.Event ) {
  33. if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
  34. self.ReturnToUpLevelPage()
  35. self.Screen.Draw()
  36. self.Screen.SwapAndShow()
  37. }
  38. if ev.Data["Key"] == UI.CurKeys["B"] {
  39. fmt.Println("Disconnecting..")
  40. self.SnapMsg("Disconnecting...")
  41. self.Screen.Draw()
  42. self.Screen.SwapAndShow()
  43. //DBUS.DBusHandler.Daemon.Method("Disconnect")
  44. self.Parent.Daemon.Method("Disconnect")
  45. time.BlockDelay(400)
  46. self.ReturnToUpLevelPage()
  47. self.Screen.Draw()
  48. self.Screen.SwapAndShow()
  49. }
  50. }
  51. type WifiInfoPage struct {
  52. UI.Page
  53. ListFontObj *ttf.Font
  54. Wireless *DBUS.DbusInterface
  55. Daemon *DBUS.DbusInterface
  56. AList map[string]map[string]string
  57. NetworkId int
  58. MyList []UI.ListItemInterface
  59. DisconnectConfirmPage *WifiDisconnectConfirmPage //child page
  60. }
  61. func NewWifiInfoPage() *WifiInfoPage {
  62. p := &WifiInfoPage{}
  63. p.FootMsg = [5]string{"Nav","Disconnect","","Back",""}
  64. p.ListFontObj = UI.Fonts["varela15"]
  65. p.AList = make(map[string]map[string]string)
  66. p.NetworkId = -1
  67. return p
  68. }
  69. func (self *WifiInfoPage) GenList() {
  70. var iwconfig string
  71. var cur_network_id int
  72. self.MyList = nil
  73. self.MyList = make([]UI.ListItemInterface,0)
  74. cur_network_id = -2
  75. if self.NetworkId != -1 {
  76. self.AList["ip"]["value"] = "Not Connected"
  77. self.Wireless.Get( self.Wireless.Method("GetIwconfig"), &iwconfig)
  78. self.Wireless.Get( self.Wireless.Method("GetCurrentNetworkID",iwconfig), &cur_network_id)
  79. if cur_network_id == self.NetworkId {
  80. var ip string
  81. self.Wireless.Get( self.Wireless.Method("GetWirelessIP",""), &ip)
  82. if len(ip) > 0 {
  83. self.AList["ip"]["value"]=ip
  84. }
  85. }
  86. var bssid string
  87. self.Wireless.Get( self.Wireless.Method("GetWirelessProperty",self.NetworkId,"bssid"),&bssid)
  88. self.AList["bssid"]["value"] = bssid
  89. }
  90. start_x := 0
  91. start_y := 0
  92. i := 0
  93. for k,_ := range self.AList {
  94. li := UI.NewInfoPageListItem()
  95. li.Parent = self
  96. li.PosX = start_x
  97. li.PosY = start_y + i * li.Height//default is 30
  98. li.Width = UI.Width
  99. li.Fonts["normal"] = self.ListFontObj
  100. li.Fonts["small"] = UI.Fonts["varela12"]
  101. if self.AList[k]["label"] != "" {
  102. li.Init(self.AList[k]["label"])
  103. }else {
  104. li.Init(self.AList[k]["key"])
  105. }
  106. li.Flag = self.AList[k]["key"]
  107. li.SetSmallText(self.AList[k]["value"])
  108. self.MyList = append(self.MyList,li)
  109. i+=1
  110. }
  111. }
  112. func (self *WifiInfoPage) Init() {
  113. if self.Screen != nil {
  114. if self.Screen.CanvasHWND != nil && self.CanvasHWND == nil {
  115. self.CanvasHWND = self.Screen.CanvasHWND
  116. }
  117. }
  118. self.PosX = self.Index * self.Screen.Width
  119. self.Width = self.Screen.Width
  120. self.Height = self.Screen.Height
  121. ps := UI.NewInfoPageSelector()
  122. ps.Parent = self
  123. ps.PosX = 2
  124. self.Ps = ps
  125. self.PsIndex = 0
  126. ip := make(map[string]string) // ip = {}
  127. ip["key"] = "ip"
  128. ip["label"] = "IP"
  129. ip["value"] = "Not Connected"
  130. bssid := make(map[string]string) // bssid = {}
  131. bssid["key"] = "bssid"
  132. bssid["label"] = "BSSID"
  133. bssid["value"] = ""
  134. self.AList["ip"] = ip
  135. self.AList["bssid"] = bssid
  136. self.GenList()
  137. self.DisconnectConfirmPage = NewWifiDisconnectConfirmPage()
  138. self.DisconnectConfirmPage.Screen = self.Screen
  139. self.DisconnectConfirmPage.Name = "Confirm Disconnect"
  140. self.DisconnectConfirmPage.Parent = self
  141. self.DisconnectConfirmPage.Init()
  142. }
  143. func (self *WifiInfoPage) ScrollUp() {
  144. if len(self.MyList) == 0 {
  145. return
  146. }
  147. self.PsIndex -= 1
  148. if self.PsIndex < 0 {
  149. self.PsIndex = 0
  150. }
  151. cur_li := self.MyList[self.PsIndex]
  152. x,y := cur_li.Coord()
  153. if x < 0 {
  154. for i:=0;i<len(self.MyList);i++ {
  155. _,h := self.MyList[i].Size()
  156. x,y = self.MyList[i].Coord()
  157. self.MyList[i].NewCoord(x, y+h)
  158. }
  159. }
  160. }
  161. func (self *WifiInfoPage) ScrollDown() {
  162. if len(self.MyList) == 0 {
  163. return
  164. }
  165. self.PsIndex += 1
  166. if self.PsIndex >= len(self.MyList) {
  167. self.PsIndex = len(self.MyList) - 1
  168. }
  169. cur_li := self.MyList[self.PsIndex]
  170. x,y := cur_li.Coord()
  171. _,h := cur_li.Size()
  172. if y + h > self.Height {
  173. for i:=0;i<len(self.MyList);i++ {
  174. _,h = self.MyList[i].Size()
  175. x,y = self.MyList[i].Coord()
  176. self.MyList[i].NewCoord(x, y - h)
  177. }
  178. }
  179. }
  180. func (self *WifiInfoPage) Click() {
  181. /*
  182. cur_li = self._MyList[self._PsIndex]
  183. print(cur_li._Flag)
  184. */
  185. }
  186. func (self *WifiInfoPage) TryDisconnect() {
  187. var iwconfig string
  188. var cur_network_id int
  189. var ip string
  190. self.Wireless.Get( self.Wireless.Method("GetIwconfig"), &iwconfig)
  191. self.Wireless.Get( self.Wireless.Method("GetCurrentNetworkID",iwconfig), &cur_network_id)
  192. self.Wireless.Get( self.Wireless.Method("GetWirelessIP",""), &ip)
  193. if cur_network_id == self.NetworkId && len(ip) > 1 {
  194. self.Screen.PushPage(self.DisconnectConfirmPage)
  195. self.Screen.Draw()
  196. self.Screen.SwapAndShow()
  197. }else {
  198. fmt.Println("WifiInfoPage TryDisconnect cur_network_id != self.NetworkId ")
  199. return
  200. }
  201. }
  202. func (self *WifiInfoPage) OnLoadCb() {
  203. var iwconfig string
  204. var cur_network_id int
  205. var ip string
  206. self.Wireless.Get( self.Wireless.Method("GetIwconfig"), &iwconfig)
  207. self.Wireless.Get( self.Wireless.Method("GetCurrentNetworkID",iwconfig), &cur_network_id)
  208. self.Wireless.Get( self.Wireless.Method("GetWirelessIP",""), &ip)
  209. if cur_network_id == self.NetworkId && len(ip) > 1 {
  210. self.FootMsg[1]="Disconnect"
  211. }else {
  212. self.FootMsg[1] = ""
  213. }
  214. self.GenList()
  215. }
  216. func (self *WifiInfoPage) OnReturnBackCb() {
  217. self.ReturnToUpLevelPage()
  218. self.Screen.Draw()
  219. self.Screen.SwapAndShow()
  220. }
  221. func (self *WifiInfoPage) KeyDown(ev *event.Event ) {
  222. if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
  223. self.ReturnToUpLevelPage()
  224. self.Screen.Draw()
  225. self.Screen.SwapAndShow()
  226. }
  227. if ev.Data["Key"] == UI.CurKeys["Up"] {
  228. self.ScrollUp()
  229. self.Screen.Draw()
  230. self.Screen.SwapAndShow()
  231. }
  232. if ev.Data["Key"] == UI.CurKeys["Down"] {
  233. self.ScrollDown()
  234. self.Screen.Draw()
  235. self.Screen.SwapAndShow()
  236. }
  237. if ev.Data["Key"] == UI.CurKeys["Enter"] {
  238. self.Click()
  239. }
  240. if ev.Data["Key"] == UI.CurKeys["X"] {
  241. self.TryDisconnect()
  242. }
  243. }
  244. func (self *WifiInfoPage) Draw() {
  245. self.ClearCanvas()
  246. self.Ps.Draw()
  247. for i:=0;i<len(self.MyList);i++ {
  248. self.MyList[i].Draw()
  249. }
  250. }
  251. type WifiListSelector struct{
  252. UI.PageSelector
  253. BackgroundColor *color.Color
  254. Parent *WifiList
  255. }
  256. func NewWifiListSelector() *WifiListSelector {
  257. p := &WifiListSelector{}
  258. p.BackgroundColor = &color.Color{131,199,219,255} //SkinManager().GiveColor('Front')
  259. return p
  260. }
  261. func (self *WifiListSelector) Draw() {
  262. idx := self.Parent.PsIndex
  263. if idx < len(self.Parent.MyList) {
  264. x := self.Parent.MyList[idx].PosX + 11
  265. y := self.Parent.MyList[idx].PosY + 1
  266. h := self.Parent.MyList[idx].Height - 3
  267. self.PosX = x
  268. self.PosY = y
  269. self.Height = h
  270. rect_ := rect.Rect(x,y,self.Width,h)
  271. draw.AARoundRect(self.Parent.CanvasHWND,&rect_,self.BackgroundColor,4,0,self.BackgroundColor)
  272. }
  273. }
  274. type WifiListMessageBox struct{
  275. UI.Label
  276. Parent *WifiList
  277. }
  278. func NewWifiListMessageBox() *WifiListMessageBox{
  279. p := &WifiListMessageBox{}
  280. p.Color = &color.Color{83,83,83,255}
  281. return p
  282. }
  283. func (self *WifiListMessageBox) Draw() {
  284. my_text := font.Render(self.FontObj,self.Text,true,self.Color,nil)
  285. w := surface.GetWidth(my_text)
  286. h := surface.GetHeight(my_text)
  287. x := (self.Parent.Width - w )/2
  288. y := (self.Parent.Height - h)/2
  289. padding := 10
  290. white := &color.Color{255,255,255,255}
  291. black := &color.Color{0, 0, 0, 255}
  292. rect_ := rect.Rect(x-padding,y-padding,w+padding*2,h+padding*2)
  293. draw.Rect(self.CanvasHWND,white,&rect_,0)
  294. draw.Rect(self.CanvasHWND,black,&rect_,1)
  295. rect_2 := rect.Rect(x,y,w,h)
  296. surface.Blit(self.CanvasHWND,my_text,&rect_2,nil)
  297. }
  298. //---------WifiList---------------------------------
  299. type BlockCbFunc func()
  300. type WifiList struct{
  301. UI.Page
  302. Wireless *DBUS.DbusInterface
  303. Daemon *DBUS.DbusInterface
  304. WifiPassword string
  305. Connecting bool
  306. Scanning bool
  307. PrevWicdState int
  308. ShowingMessageBox bool
  309. MsgBox *WifiListMessageBox
  310. ConnectTry int
  311. BlockingUI bool
  312. BlockCb BlockCbFunc
  313. LastStatusMsg string
  314. EncMethods []*misc.CurType
  315. Scroller *UI.ListScroller
  316. ListFontObj *ttf.Font
  317. InfoPage *WifiInfoPage
  318. MyList []*NetItem
  319. CurBssid string
  320. }
  321. func NewWifiList() *WifiList {
  322. p:= &WifiList{}
  323. p.PrevWicdState = -1
  324. p.ListFontObj = UI.Fonts["notosanscjk15"]
  325. p.FootMsg = [5]string{"Nav.","Scan","Info","Back","Enter"}
  326. return p
  327. }
  328. func (self *WifiList) ShowBox(msg string ) {
  329. self.MsgBox.Text = msg
  330. self.ShowingMessageBox = true
  331. self.Screen.Draw()
  332. self.MsgBox.Draw()
  333. self.Screen.SwapAndShow()
  334. }
  335. func (self *WifiList) HideBox() {
  336. self.Draw()
  337. self.ShowingMessageBox = false
  338. self.Screen.SwapAndShow()
  339. }
  340. func (self *WifiList) GenNetworkList() {
  341. self.MyList = nil
  342. self.MyList = make([]*NetItem,0)
  343. start_x := 0
  344. start_y := 0
  345. var num_of_networks int
  346. var cur_signal_strength int
  347. var cur_network_id int // -1 or 0-n
  348. var iwconfig string
  349. var wireless_ip string
  350. var is_active bool
  351. self.Wireless.Get(self.Wireless.Method("GetNumberOfNetworks"),&num_of_networks)
  352. for network_id:=0;network_id< num_of_networks;network_id++ {
  353. is_active = false
  354. self.Wireless.Get(self.Wireless.Method("GetCurrentSignalStrength",""), &cur_signal_strength)
  355. self.Wireless.Get(self.Wireless.Method("GetIwconfig"),&iwconfig)
  356. self.Wireless.Get(self.Wireless.Method("GetCurrentNetworkID",iwconfig),&cur_network_id)
  357. if cur_signal_strength != 0 && cur_network_id == network_id {
  358. self.Wireless.Get(self.Wireless.Method("GetWirelessIP",""),&wireless_ip)
  359. if wireless_ip != "" {
  360. is_active = true
  361. }
  362. }
  363. ni := NewNetItem()
  364. ni.Parent = self
  365. ni.PosX = start_x
  366. ni.PosY = start_y + network_id* NetItemDefaultHeight
  367. ni.Width = UI.Width
  368. ni.FontObj = self.ListFontObj
  369. ni.Init(network_id, is_active)
  370. self.MyList = append(self.MyList,ni)
  371. }
  372. self.PsIndex = 0
  373. }
  374. func (self *WifiList) Disconnect() {
  375. self.Connecting = false
  376. self.Daemon.Method("Disconnect")
  377. }
  378. func (self *WifiList) ShutDownConnecting() {
  379. fmt.Println("Shutdownconnecting...", self.ConnectTry)
  380. self.Daemon.Method("CancelConnect")
  381. self.Daemon.Method("SetForcedDisconnect",true)
  382. self.Connecting= false
  383. }
  384. func (self *WifiList) Rescan(sync bool) { // sync default should be false
  385. fmt.Println("start Rescan")
  386. if self.Wireless!= nil {
  387. self.Wireless.Method("Scan",sync)
  388. }
  389. }
  390. // dbus signal functions
  391. func (self *WifiList) WifiDbusScanFinishedSig(body []interface{}) {
  392. if self.Screen.CurrentPage != self {
  393. return
  394. }
  395. self.ResetPageSelector()
  396. self.UpdateNetList(-1,[]string{}, true,false)
  397. self.Scanning= false
  398. self.HideBox()
  399. self.BlockingUI = false
  400. fmt.Println("dbus says scan finished")
  401. }
  402. func (self *WifiList) WifiDbusScanStarted(body []interface{} ) {
  403. if self.Screen.CurrentPage != self {
  404. return
  405. }
  406. self.Scanning = true
  407. self.ShowBox("Wifi scanning...")
  408. self.BlockingUI = true
  409. fmt.Println("dbus says start scan")
  410. }
  411. func (self *WifiList) DbusDaemonStatusChangedSig(body []interface{}) {
  412. var state int
  413. var info []dbus.Variant
  414. err := dbus.Store(body,&state,&info)
  415. if err != nil {
  416. fmt.Println(err)
  417. }else {
  418. fmt.Println(state," ", info)
  419. }
  420. if self.Screen.CurPage() != self {
  421. return
  422. }
  423. var info_str []string
  424. for _,v := range info {
  425. info_str = append(info_str, v.String())
  426. }
  427. self.UpdateNetList(state,info_str,false,false)
  428. if len(info_str) > 0 {
  429. self.Screen.Draw()
  430. self.Screen.SwapAndShow()
  431. }
  432. }
  433. func (self *WifiList) DbusConnectResultsSent(body []interface{}) {
  434. var ret_val string
  435. err := dbus.Store(body,&ret_val)
  436. if err != nil {
  437. fmt.Println(err)
  438. }else {
  439. fmt.Println(ret_val)
  440. }
  441. self.Connecting = false
  442. self.BlockingUI = false
  443. if self.BlockCb != nil {
  444. self.BlockCb()
  445. self.BlockCb = nil
  446. }
  447. self.Screen.FootBar.ResetNavText()
  448. }
  449. //----------------------------------------------------------------------------------
  450. func (self *WifiList) UpdateNetList(state int,info []string ,force_check bool,firstrun bool) { //force_check default ==false, firstrun default == false
  451. if self.Daemon == nil {
  452. return
  453. }
  454. type status struct {
  455. State int
  456. Trash []string
  457. }
  458. var mystatus status
  459. if state == -1 {
  460. self.Daemon.Get(self.Daemon.Method("GetConnectionStatus"),&mystatus)
  461. fmt.Println("state ",mystatus.State)
  462. fmt.Println("Trash ",mystatus.Trash)
  463. }
  464. if force_check == true || self.PrevWicdState != state {
  465. self.GenNetworkList()
  466. }
  467. if len(info) > 0 {
  468. if len(info) > 3 {
  469. _id,_ := strconv.Atoi(info[3])
  470. if _id < len(self.MyList) {
  471. var strength_str string
  472. strength,err := strconv.Atoi(strings.Replace(info[2],"\"","",-1))
  473. if err == nil {
  474. self.Daemon.Get(self.Daemon.Method("FormatSignalForPrinting",strength),&strength_str)
  475. self.MyList[_id].UpdateStrenLabel(strength_str)
  476. }else {
  477. fmt.Println(err)
  478. }
  479. }
  480. }
  481. }
  482. self.PrevWicdState = state
  483. }
  484. func (self *WifiList) SetConnectingStatus(fast bool) bool { // default fast == false
  485. var wireless_connecting bool
  486. var iwconfig string
  487. var essid string
  488. var stat string
  489. var status_msg string
  490. self.Wireless.Get(self.Wireless.Method("CheckIfWirelessConnecting"),&wireless_connecting)
  491. if wireless_connecting == true {
  492. if fast == false {
  493. self.Wireless.Get(self.Wireless.Method("GetIwconfig"),&iwconfig)
  494. }else {
  495. iwconfig=""
  496. }
  497. self.Wireless.Get(self.Wireless.Method("GetCurrentNetwork",iwconfig),&essid)
  498. err := self.Wireless.Get(self.Wireless.Method("CheckWirelessConnectingMessage"),&stat) // wicd will return False or stat message,False is a boolean,stat is string
  499. if err != nil {
  500. return false
  501. }
  502. status_msg = fmt.Sprintf("%s: %s", essid,stat)
  503. if self.LastStatusMsg != status_msg {
  504. fmt.Printf("%s: %s\n",essid,stat)
  505. self.LastStatusMsg = status_msg
  506. self.ShowBox(self.LastStatusMsg)
  507. self.Screen.FootBar.UpdateNavText(self.LastStatusMsg)
  508. UI.SwapAndShow()
  509. }
  510. return true
  511. }else {
  512. self.Connecting=false
  513. return self.Connecting
  514. }
  515. return false
  516. }
  517. func (self *WifiList) UpdateStatus() bool {
  518. fmt.Println("UpdateStatus")
  519. var wireless_connecting bool
  520. var fast bool
  521. self.Wireless.Get(self.Wireless.Method("CheckIfWirelessConnecting"),&wireless_connecting)
  522. self.Daemon.Get(self.Daemon.Method("NeedsExternalCalls"),&fast)
  523. fast = !fast
  524. self.Connecting = wireless_connecting
  525. if self.Connecting == true {
  526. go func() {
  527. for {
  528. gotime.Sleep(250 * gotime.Millisecond)
  529. ret := self.SetConnectingStatus(fast)
  530. if ret == false {
  531. break
  532. }
  533. }
  534. }()
  535. }else {
  536. var iwconfig string
  537. var ip string
  538. if fast == false {
  539. self.Wireless.Get(self.Wireless.Method("GetIwconfig"),&iwconfig)
  540. }else {
  541. iwconfig = ""
  542. }
  543. self.Wireless.Get( self.Wireless.Method("GetWirelessIP",""), &ip)
  544. if self.CheckForWireless(iwconfig,ip,"") == true { // self.CheckForWireless(iwconfig,self._Wireless.GetWirelessIP(''),None)
  545. return true
  546. }else {
  547. fmt.Println("not Connected")
  548. return true
  549. }
  550. }
  551. return true
  552. }
  553. //set_status == "" not used
  554. func (self *WifiList) CheckForWireless(iwconfig string, wireless_ip string , set_status string ) bool {
  555. if len(wireless_ip) == 0 {
  556. return false
  557. }
  558. var network string
  559. self.Wireless.Get(self.Wireless.Method("GetCurrentNetwork",iwconfig),&network)
  560. if len(network) == 0 {
  561. return false
  562. }
  563. var sig_display_type int
  564. var strength int
  565. strength = -1
  566. self.Daemon.Get(self.Daemon.Method("GetSignalDisplayType"),&sig_display_type)
  567. if sig_display_type == 0 {
  568. self.Wireless.Get(self.Wireless.Method("GetCurrentSignalStrength",iwconfig),&strength)
  569. }else {
  570. self.Wireless.Get(self.Wireless.Method("GetCurrentDBMStrength",iwconfig),&strength)
  571. }
  572. if strength == -1 {
  573. return false
  574. }
  575. var strength_str string
  576. self.Daemon.Get(self.Daemon.Method("FormatSignalForPrinting",strength),&strength_str)
  577. fmt.Printf("Connected to %s at %s (IP: %s)\n",network,strength_str,wireless_ip)
  578. return true
  579. }
  580. func (self *WifiList) ConfigWireless(password string) {
  581. netid := self.PsIndex
  582. fmt.Println(netid, " ", password)
  583. for i,v := range self.MyList {
  584. if v.Bssid == self.CurBssid {
  585. netid = i
  586. break
  587. }
  588. }
  589. /*
  590. self.Wireless.Method("SetWirelessProperty",netid,"dhcphostname","GameShell")
  591. self.Wireless.Method("SetWirelessProperty",netid,"ip","None")
  592. self.Wireless.Method("SetWirelessProperty",netid,"dns_domain","None")
  593. self.Wireless.Method("SetWirelessProperty",netid,"gateway","None")
  594. self.Wireless.Method("SetWirelessProperty",netid,"use_global_dns",0)
  595. self.Wireless.Method("SetWirelessProperty",netid,"netmask","None")
  596. self.Wireless.Method("SetWirelessProperty",netid,"usedhcphostname",0) ## set 1 to use hostname above
  597. self.Wireless.Method("SetWirelessProperty",netid,"bitrate","auto")
  598. self.Wireless.Method("SetWirelessProperty",netid,"allow_lower_bitrates",0)
  599. self.Wireless.Method("SetWirelessProperty",netid,"dns3","None")
  600. self.Wireless.Method("SetWirelessProperty",netid,"dns2","None")
  601. self.Wireless.Method("SetWirelessProperty",netid,"dns1","None")
  602. self.Wireless.Method("SetWirelessProperty",netid,"use_settings_globally",0)
  603. self.Wireless.Method("SetWirelessProperty",netid,"use_static_dns",0)
  604. self.Wireless.Method("SetWirelessProperty",netid,"search_domain","None")
  605. */
  606. self.Wireless.Method("SetWirelessProperty",netid,"enctype","wpa-psk")
  607. self.Wireless.Method("SetWirelessProperty",netid,"apsk",password)
  608. self.Wireless.Method("SetWirelessProperty",netid,"automatic",1)
  609. self.ShowBox("Connecting...")
  610. self.MyList[netid].Connect()
  611. fmt.Println("after connect")
  612. self.UpdateStatus()
  613. }
  614. func (self *WifiList) GetWirelessEncrypt(network_id int) []map[string]string {
  615. var results []map[string]string
  616. activeID := -1
  617. var enc_type string
  618. for i,v := range self.EncMethods {
  619. enc_type = ""
  620. fmt.Println(i,v)
  621. self.Wireless.Get(self.Wireless.Method("GetWirelessProperty",network_id,"enctype"),&enc_type)
  622. enc_type = strings.ToLower(enc_type)
  623. if enc_type != "" && v.Type == enc_type {
  624. activeID = i
  625. break
  626. }
  627. }
  628. if activeID == -1 {
  629. fmt.Println("GetWirelessEncrypt activeID == -1")
  630. return results
  631. }
  632. required_fields := self.EncMethods[activeID].Required
  633. for _,field := range required_fields {
  634. if len(field) != 2 {
  635. continue
  636. }
  637. text := strings.Replace(strings.ToLower(field[1])," ","_",-1)
  638. var value string
  639. self.Wireless.Get(self.Wireless.Method("GetWirelessProperty",network_id,field[0]),&value)
  640. kv_map := make(map[string]string)
  641. kv_map[text] = value
  642. results = append(results,kv_map)
  643. /*
  644. """
  645. [{'preshared_key': 'blah blah blah',},]
  646. or nothing
  647. [{'identity': "",},{'password': "",},]
  648. """
  649. */
  650. }
  651. optional_fields := self.EncMethods[activeID].Optional
  652. for _,field := range optional_fields {
  653. if len(field) != 2 {
  654. continue
  655. }
  656. text := strings.Replace(strings.ToLower(field[1])," ","_",-1)
  657. var value string
  658. self.Wireless.Get(self.Wireless.Method("GetWirelessProperty",network_id,field[0]),&value)
  659. kv_map := make(map[string]string)
  660. kv_map[text] = value
  661. results = append(results,kv_map)
  662. }
  663. return results
  664. }
  665. func (self *WifiList) ScrollUp() {
  666. if len(self.MyList) == 0 {
  667. return
  668. }
  669. self.PsIndex -= 1
  670. if self.PsIndex < 0 {
  671. self.PsIndex=0
  672. }
  673. cur_ni := self.MyList[self.PsIndex]//*NetItem
  674. if cur_ni.PosY < 0 {
  675. for i:=0;i<len(self.MyList);i++ {
  676. self.MyList[i].PosY += self.MyList[i].Height
  677. }
  678. }
  679. }
  680. func (self *WifiList) ScrollDown() {
  681. if len(self.MyList) == 0 {
  682. return
  683. }
  684. self.PsIndex += 1
  685. if self.PsIndex >= len(self.MyList) {
  686. self.PsIndex = len(self.MyList) - 1
  687. }
  688. cur_ni := self.MyList[self.PsIndex]
  689. if cur_ni.PosY + cur_ni.Height > self.Height {
  690. for i:=0;i<len(self.MyList);i++ {
  691. self.MyList[i].PosY -= self.MyList[i].Height
  692. }
  693. }
  694. }
  695. func (self *WifiList) AbortedAndReturnToUpLevel() {
  696. self.HideBox()
  697. self.Screen.FootBar.ResetNavText()
  698. self.ReturnToUpLevelPage()
  699. self.Screen.Draw()
  700. self.Screen.SwapAndShow()
  701. }
  702. func (self *WifiList) OnKbdReturnBackCb() {
  703. password_inputed := strings.Join(APIOBJ.PasswordPage.Textarea.MyWords,"")
  704. if self.Screen.DBusManager.IsWifiConnectedNow() == false {
  705. self.ConfigWireless(password_inputed)
  706. }
  707. }
  708. func (self *WifiList) OnReturnBackCb() {
  709. }
  710. func (self *WifiList) KeyDown( ev *event.Event ) {
  711. if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
  712. if self.Wireless != nil {
  713. var wireless_connecting bool
  714. self.Wireless.Get(self.Wireless.Method("CheckIfWirelessConnecting"),&wireless_connecting)
  715. if wireless_connecting == true {
  716. self.ShutDownConnecting()
  717. self.ShowBox("ShutDownConnecting...")
  718. self.BlockingUI = true
  719. self.BlockCb = self.AbortedAndReturnToUpLevel
  720. }else {
  721. self.AbortedAndReturnToUpLevel()
  722. }
  723. }else {
  724. self.HideBox()
  725. self.ReturnToUpLevelPage()
  726. self.Screen.Draw()
  727. self.Screen.SwapAndShow()
  728. }
  729. }
  730. if ev.Data["Key"] == UI.CurKeys["Up"] {
  731. self.ScrollUp()
  732. self.Screen.Draw()
  733. self.Screen.SwapAndShow()
  734. }
  735. if ev.Data["Key"] == UI.CurKeys["Down"] {
  736. self.ScrollDown()
  737. self.Screen.Draw()
  738. self.Screen.SwapAndShow()
  739. }
  740. if ev.Data["Key"] == UI.CurKeys["Enter"] { // enter to set password,enter is B on GM
  741. if len(self.MyList) == 0 {
  742. return
  743. }
  744. self.CurBssid = self.MyList[self.PsIndex].Bssid
  745. wicd_wireless_encrypt_pwd := self.GetWirelessEncrypt(self.PsIndex)
  746. fmt.Println("wicd_wireless_encrypt_pwd ", wicd_wireless_encrypt_pwd)
  747. if self.MyList[self.PsIndex].IsActive == true {
  748. var ip string
  749. self.Wireless.Get(self.Wireless.Method("GetWirelessIP",""),&ip)
  750. self.ShowBox(ip)
  751. }else {
  752. self.Screen.PushCurPage()
  753. self.Screen.SetCurPage(APIOBJ.PasswordPage)
  754. thepass := ""
  755. for _,v := range wicd_wireless_encrypt_pwd { //[]map[string]string
  756. if _, ok := v["preshared_key"]; ok {
  757. if len(v["preshared_key"]) > 0 {
  758. thepass = v["preshared_key"]
  759. }
  760. }
  761. }
  762. fmt.Println("APIOBJ.PasswordPage.SetPassword ", thepass,len(thepass))
  763. APIOBJ.PasswordPage.SetPassword(thepass)
  764. self.Screen.Draw()
  765. self.Screen.SwapAndShow()
  766. }
  767. }
  768. if ev.Data["Key"] == UI.CurKeys["X"] {
  769. self.Rescan(false)
  770. }
  771. if ev.Data["Key"] == UI.CurKeys["Y"] {
  772. if len(self.MyList) == 0 {
  773. return
  774. }
  775. self.InfoPage.NetworkId = self.PsIndex
  776. self.InfoPage.Wireless = self.Wireless
  777. self.InfoPage.Daemon = self.Daemon
  778. self.Screen.PushPage(self.InfoPage)
  779. self.Screen.Draw()
  780. self.Screen.SwapAndShow()
  781. }
  782. }
  783. func (self *WifiList) Init() {
  784. self.PosX = self.Index * self.Screen.Width
  785. self.Width = self.Screen.Width
  786. self.Height = self.Screen.Height
  787. self.CanvasHWND = self.Screen.CanvasHWND
  788. ps := NewWifiListSelector()
  789. ps.Parent = self
  790. ps.Width = UI.Width - 12
  791. self.Ps = ps
  792. self.PsIndex = 0
  793. msgbox := NewWifiListMessageBox()
  794. msgbox.CanvasHWND = self.CanvasHWND
  795. msgbox.Init(" ",UI.Fonts["veramono12"],nil)
  796. msgbox.Parent = self
  797. self.MsgBox = msgbox
  798. self.EncMethods = misc.LoadEncryptionMethods(false) //# load predefined templates from /etc/wicd/...
  799. /*
  800. {
  801. 'fields': [],
  802. 'name': 'WPA 1/2 (Passphrase)',
  803. 'optional': [],
  804. 'protected': [
  805. ['apsk', 'Preshared_Key'],
  806. ],
  807. 'required': [
  808. ['apsk', 'Preshared_Key'],
  809. ],
  810. 'type': 'wpa-psk',
  811. },
  812. */
  813. self.UpdateNetList(-1,[]string{}, true,true) // self.UpdateNetList(force_check=True,firstrun=True)
  814. self.Scroller = UI.NewListScroller()
  815. self.Scroller.Parent = self
  816. self.Scroller.PosX = 2
  817. self.Scroller.PosY = 2
  818. self.Scroller.Init()
  819. self.InfoPage = NewWifiInfoPage()
  820. self.InfoPage.Screen = self.Screen
  821. self.InfoPage.Name = "Wifi info"
  822. self.InfoPage.Init()
  823. }
  824. func (self *WifiList) Draw() {
  825. self.ClearCanvas()
  826. if len(self.MyList) == 0 {
  827. return
  828. }
  829. self.Ps.Draw()
  830. for _,v := range self.MyList {
  831. v.Draw()
  832. }
  833. self.Scroller.UpdateSize( len(self.MyList)*NetItemDefaultHeight, self.PsIndex*NetItemDefaultHeight)
  834. self.Scroller.Draw()
  835. }