wifi.go 25 KB

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