wifi.go 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089
  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. }
  320. func NewWifiList() *WifiList {
  321. p:= &WifiList{}
  322. p.PrevWicdState = -1
  323. p.ListFontObj = UI.Fonts["notosanscjk15"]
  324. p.FootMsg = [5]string{"Nav.","Scan","Info","Back","Enter"}
  325. return p
  326. }
  327. func (self *WifiList) ShowBox(msg string ) {
  328. self.MsgBox.Text = msg
  329. self.ShowingMessageBox = true
  330. self.Screen.Draw()
  331. self.MsgBox.Draw()
  332. self.Screen.SwapAndShow()
  333. }
  334. func (self *WifiList) HideBox() {
  335. self.Draw()
  336. self.ShowingMessageBox = false
  337. self.Screen.SwapAndShow()
  338. }
  339. func (self *WifiList) GenNetworkList() {
  340. self.MyList = nil
  341. self.MyList = make([]*NetItem,0)
  342. start_x := 0
  343. start_y := 0
  344. var num_of_networks int
  345. var cur_signal_strength int
  346. var cur_network_id int // -1 or 0-n
  347. var iwconfig string
  348. var wireless_ip string
  349. var is_active bool
  350. self.Wireless.Get(self.Wireless.Method("GetNumberOfNetworks"),&num_of_networks)
  351. for network_id:=0;network_id< num_of_networks;network_id++ {
  352. is_active = false
  353. self.Wireless.Get(self.Wireless.Method("GetCurrentSignalStrength",""), &cur_signal_strength)
  354. self.Wireless.Get(self.Wireless.Method("GetIwconfig"),&iwconfig)
  355. self.Wireless.Get(self.Wireless.Method("GetCurrentNetworkID",iwconfig),&cur_network_id)
  356. if cur_signal_strength != 0 && cur_network_id == network_id {
  357. self.Wireless.Get(self.Wireless.Method("GetWirelessIP",""),&wireless_ip)
  358. if wireless_ip != "" {
  359. is_active = true
  360. }
  361. }
  362. ni := NewNetItem()
  363. ni.Parent = self
  364. ni.PosX = start_x
  365. ni.PosY = start_y + network_id* NetItemDefaultHeight
  366. ni.Width = UI.Width
  367. ni.FontObj = self.ListFontObj
  368. ni.Init(network_id, is_active)
  369. self.MyList = append(self.MyList,ni)
  370. }
  371. self.PsIndex = 0
  372. }
  373. func (self *WifiList) Disconnect() {
  374. self.Connecting = false
  375. self.Daemon.Method("Disconnect")
  376. }
  377. func (self *WifiList) ShutDownConnecting() {
  378. fmt.Println("Shutdownconnecting...", self.ConnectTry)
  379. self.Daemon.Method("CancelConnect")
  380. self.Daemon.Method("SetForcedDisconnect",true)
  381. self.Connecting= false
  382. }
  383. func (self *WifiList) Rescan(sync bool) { // sync default should be false
  384. fmt.Println("start Rescan")
  385. if self.Wireless!= nil {
  386. self.Wireless.Method("Scan",sync)
  387. }
  388. }
  389. // dbus signal functions
  390. func (self *WifiList) WifiDbusScanFinishedSig(body []interface{}) {
  391. if self.Screen.CurrentPage != self {
  392. return
  393. }
  394. self.ResetPageSelector()
  395. self.UpdateNetList(-1,[]string{}, true,false)
  396. self.Scanning= false
  397. self.HideBox()
  398. self.BlockingUI = false
  399. fmt.Println("dbus says scan finished")
  400. }
  401. func (self *WifiList) WifiDbusScanStarted(body []interface{} ) {
  402. if self.Screen.CurrentPage != self {
  403. return
  404. }
  405. self.Scanning = true
  406. self.ShowBox("Wifi scanning...")
  407. self.BlockingUI = true
  408. fmt.Println("dbus says start scan")
  409. }
  410. func (self *WifiList) DbusDaemonStatusChangedSig(body []interface{}) {
  411. var state int
  412. var info []dbus.Variant
  413. err := dbus.Store(body,&state,&info)
  414. if err != nil {
  415. fmt.Println(err)
  416. }else {
  417. fmt.Println(state," ", info)
  418. }
  419. var info_str []string
  420. for _,v := range info {
  421. info_str = append(info_str, v.String())
  422. }
  423. self.UpdateNetList(state,info_str,false,false)
  424. if len(info_str) > 0 {
  425. self.Screen.Draw()
  426. self.Screen.SwapAndShow()
  427. }
  428. }
  429. func (self *WifiList) DbusConnectResultsSent(body []interface{}) {
  430. var ret_val string
  431. err := dbus.Store(body,&ret_val)
  432. if err != nil {
  433. fmt.Println(err)
  434. }else {
  435. fmt.Println(ret_val)
  436. }
  437. self.Connecting = false
  438. self.BlockingUI = false
  439. if self.BlockCb != nil {
  440. self.BlockCb()
  441. self.BlockCb = nil
  442. }
  443. self.Screen.FootBar.ResetNavText()
  444. }
  445. //----------------------------------------------------------------------------------
  446. func (self *WifiList) UpdateNetList(state int,info []string ,force_check bool,firstrun bool) { //force_check default ==false, firstrun default == false
  447. if self.Daemon == nil {
  448. return
  449. }
  450. type status struct {
  451. State int
  452. Trash []string
  453. }
  454. var mystatus status
  455. if state == -1 {
  456. self.Daemon.Get(self.Daemon.Method("GetConnectionStatus"),&mystatus)
  457. fmt.Println("state ",mystatus.State)
  458. fmt.Println("Trash ",mystatus.Trash)
  459. }
  460. if force_check == true || self.PrevWicdState != state {
  461. self.GenNetworkList()
  462. }
  463. if len(info) > 0 {
  464. if len(info) > 3 {
  465. _id,_ := strconv.Atoi(info[3])
  466. if _id < len(self.MyList) {
  467. var strength_str string
  468. strength,err := strconv.Atoi(strings.Replace(info[2],"\"","",-1))
  469. if err == nil {
  470. self.Daemon.Get(self.Daemon.Method("FormatSignalForPrinting",strength),&strength_str)
  471. self.MyList[_id].UpdateStrenLabel(strength_str)
  472. }else {
  473. fmt.Println(err)
  474. }
  475. }
  476. }
  477. }
  478. self.PrevWicdState = state
  479. }
  480. func (self *WifiList) SetConnectingStatus(fast bool) bool { // default fast == false
  481. var wireless_connecting bool
  482. var iwconfig string
  483. var essid string
  484. var stat string
  485. var status_msg string
  486. self.Wireless.Get(self.Wireless.Method("CheckIfWirelessConnecting"),&wireless_connecting)
  487. if wireless_connecting == true {
  488. if fast == false {
  489. self.Wireless.Get(self.Wireless.Method("GetIwconfig"),&iwconfig)
  490. }else {
  491. iwconfig=""
  492. }
  493. self.Wireless.Get(self.Wireless.Method("GetCurrentNetwork",iwconfig),&essid)
  494. err := self.Wireless.Get(self.Wireless.Method("CheckWirelessConnectingMessage"),&stat) // wicd will return False or stat message,False is a boolean,stat is string
  495. if err != nil {
  496. return false
  497. }
  498. status_msg = fmt.Sprintf("%s: %s", essid,stat)
  499. if self.LastStatusMsg != status_msg {
  500. fmt.Printf("%s: %s\n",essid,stat)
  501. self.LastStatusMsg = status_msg
  502. self.ShowBox(self.LastStatusMsg)
  503. self.Screen.FootBar.UpdateNavText(self.LastStatusMsg)
  504. UI.SwapAndShow()
  505. }
  506. return true
  507. }else {
  508. self.Connecting=false
  509. return self.Connecting
  510. }
  511. return false
  512. }
  513. func (self *WifiList) UpdateStatus() bool {
  514. fmt.Println("UpdateStatus")
  515. var wireless_connecting bool
  516. var fast bool
  517. self.Wireless.Get(self.Wireless.Method("CheckIfWirelessConnecting"),&wireless_connecting)
  518. self.Daemon.Get(self.Daemon.Method("NeedsExternalCalls"),&fast)
  519. fast = !fast
  520. self.Connecting = wireless_connecting
  521. if self.Connecting == true {
  522. go func() {
  523. for {
  524. gotime.Sleep(250 * gotime.Millisecond)
  525. ret := self.SetConnectingStatus(fast)
  526. if ret == false {
  527. break
  528. }
  529. }
  530. }()
  531. }else {
  532. var iwconfig string
  533. var ip string
  534. if fast == false {
  535. self.Wireless.Get(self.Wireless.Method("GetIwconfig"),&iwconfig)
  536. }else {
  537. iwconfig = ""
  538. }
  539. self.Wireless.Get( self.Wireless.Method("GetWirelessIP",""), &ip)
  540. if self.CheckForWireless(iwconfig,ip,"") == true { // self.CheckForWireless(iwconfig,self._Wireless.GetWirelessIP(''),None)
  541. return true
  542. }else {
  543. fmt.Println("not Connected")
  544. return true
  545. }
  546. }
  547. return true
  548. }
  549. //set_status == "" not used
  550. func (self *WifiList) CheckForWireless(iwconfig string, wireless_ip string , set_status string ) bool {
  551. if len(wireless_ip) == 0 {
  552. return false
  553. }
  554. var network string
  555. self.Wireless.Get(self.Wireless.Method("GetCurrentNetwork",iwconfig),&network)
  556. if len(network) == 0 {
  557. return false
  558. }
  559. var sig_display_type int
  560. var strength int
  561. strength = -1
  562. self.Daemon.Get(self.Daemon.Method("GetSignalDisplayType"),&sig_display_type)
  563. if sig_display_type == 0 {
  564. self.Wireless.Get(self.Wireless.Method("GetCurrentSignalStrength",iwconfig),&strength)
  565. }else {
  566. self.Wireless.Get(self.Wireless.Method("GetCurrentDBMStrength",iwconfig),&strength)
  567. }
  568. if strength == -1 {
  569. return false
  570. }
  571. var strength_str string
  572. self.Daemon.Get(self.Daemon.Method("FormatSignalForPrinting",strength),&strength_str)
  573. fmt.Printf("Connected to %s at %s (IP: %s)\n",network,strength_str,wireless_ip)
  574. return true
  575. }
  576. func (self *WifiList) ConfigWireless(password string) {
  577. netid := self.PsIndex
  578. fmt.Println(netid, " ", password)
  579. /*
  580. self.Wireless.Method("SetWirelessProperty",netid,"dhcphostname","GameShell")
  581. self.Wireless.Method("SetWirelessProperty",netid,"ip","None")
  582. self.Wireless.Method("SetWirelessProperty",netid,"dns_domain","None")
  583. self.Wireless.Method("SetWirelessProperty",netid,"gateway","None")
  584. self.Wireless.Method("SetWirelessProperty",netid,"use_global_dns",0)
  585. self.Wireless.Method("SetWirelessProperty",netid,"netmask","None")
  586. self.Wireless.Method("SetWirelessProperty",netid,"usedhcphostname",0) ## set 1 to use hostname above
  587. self.Wireless.Method("SetWirelessProperty",netid,"bitrate","auto")
  588. self.Wireless.Method("SetWirelessProperty",netid,"allow_lower_bitrates",0)
  589. self.Wireless.Method("SetWirelessProperty",netid,"dns3","None")
  590. self.Wireless.Method("SetWirelessProperty",netid,"dns2","None")
  591. self.Wireless.Method("SetWirelessProperty",netid,"dns1","None")
  592. self.Wireless.Method("SetWirelessProperty",netid,"use_settings_globally",0)
  593. self.Wireless.Method("SetWirelessProperty",netid,"use_static_dns",0)
  594. self.Wireless.Method("SetWirelessProperty",netid,"search_domain","None")
  595. */
  596. self.Wireless.Method("SetWirelessProperty",netid,"enctype","wpa-psk")
  597. self.Wireless.Method("SetWirelessProperty",netid,"apsk",password)
  598. self.Wireless.Method("SetWirelessProperty",netid,"automatic",1)
  599. self.ShowBox("Connecting...")
  600. self.MyList[netid].Connect()
  601. fmt.Println("after connect")
  602. self.UpdateStatus()
  603. }
  604. func (self *WifiList) GetWirelessEncrypt(network_id int) []map[string]string {
  605. var results []map[string]string
  606. activeID := -1
  607. var enc_type string
  608. for i,v := range self.EncMethods {
  609. enc_type = ""
  610. fmt.Println(i,v)
  611. self.Wireless.Get(self.Wireless.Method("GetWirelessProperty",network_id,"enctype"),&enc_type)
  612. enc_type = strings.ToLower(enc_type)
  613. if enc_type != "" && v.Type == enc_type {
  614. activeID = i
  615. break
  616. }
  617. }
  618. if activeID == -1 {
  619. fmt.Println("GetWirelessEncrypt activeID == -1")
  620. return results
  621. }
  622. required_fields := self.EncMethods[activeID].Required
  623. for _,field := range required_fields {
  624. if len(field) != 2 {
  625. continue
  626. }
  627. text := strings.Replace(strings.ToLower(field[1])," ","_",-1)
  628. var value string
  629. self.Wireless.Get(self.Wireless.Method("GetWirelessProperty",network_id,field[0]),&value)
  630. kv_map := make(map[string]string)
  631. kv_map[text] = value
  632. results = append(results,kv_map)
  633. /*
  634. """
  635. [{'preshared_key': 'blah blah blah',},]
  636. or nothing
  637. [{'identity': "",},{'password': "",},]
  638. """
  639. */
  640. }
  641. optional_fields := self.EncMethods[activeID].Optional
  642. for _,field := range optional_fields {
  643. if len(field) != 2 {
  644. continue
  645. }
  646. text := strings.Replace(strings.ToLower(field[1])," ","_",-1)
  647. var value string
  648. self.Wireless.Get(self.Wireless.Method("GetWirelessProperty",network_id,field[0]),&value)
  649. kv_map := make(map[string]string)
  650. kv_map[text] = value
  651. results = append(results,kv_map)
  652. }
  653. return results
  654. }
  655. func (self *WifiList) ScrollUp() {
  656. if len(self.MyList) == 0 {
  657. return
  658. }
  659. self.PsIndex -= 1
  660. if self.PsIndex < 0 {
  661. self.PsIndex=0
  662. }
  663. cur_ni := self.MyList[self.PsIndex]//*NetItem
  664. if cur_ni.PosY < 0 {
  665. for i:=0;i<len(self.MyList);i++ {
  666. self.MyList[i].PosY += self.MyList[i].Height
  667. }
  668. }
  669. }
  670. func (self *WifiList) ScrollDown() {
  671. if len(self.MyList) == 0 {
  672. return
  673. }
  674. self.PsIndex += 1
  675. if self.PsIndex >= len(self.MyList) {
  676. self.PsIndex = len(self.MyList) - 1
  677. }
  678. cur_ni := self.MyList[self.PsIndex]
  679. if cur_ni.PosY + cur_ni.Height > self.Height {
  680. for i:=0;i<len(self.MyList);i++ {
  681. self.MyList[i].PosY -= self.MyList[i].Height
  682. }
  683. }
  684. }
  685. func (self *WifiList) AbortedAndReturnToUpLevel() {
  686. self.HideBox()
  687. self.Screen.FootBar.ResetNavText()
  688. self.ReturnToUpLevelPage()
  689. self.Screen.Draw()
  690. self.Screen.SwapAndShow()
  691. }
  692. func (self *WifiList) OnKbdReturnBackCb() {
  693. password_inputed := strings.Join(APIOBJ.PasswordPage.Textarea.MyWords,"")
  694. if self.Screen.DBusManager.IsWifiConnectedNow() == false {
  695. self.ConfigWireless(password_inputed)
  696. }
  697. }
  698. func (self *WifiList) OnReturnBackCb() {
  699. }
  700. func (self *WifiList) KeyDown( ev *event.Event ) {
  701. if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
  702. if self.Wireless != nil {
  703. var wireless_connecting bool
  704. self.Wireless.Get(self.Wireless.Method("CheckIfWirelessConnecting"),&wireless_connecting)
  705. if wireless_connecting == true {
  706. self.ShutDownConnecting()
  707. self.ShowBox("ShutDownConnecting...")
  708. self.BlockingUI = true
  709. self.BlockCb = self.AbortedAndReturnToUpLevel
  710. }else {
  711. self.AbortedAndReturnToUpLevel()
  712. }
  713. }else {
  714. self.HideBox()
  715. self.ReturnToUpLevelPage()
  716. self.Screen.Draw()
  717. self.Screen.SwapAndShow()
  718. }
  719. }
  720. if ev.Data["Key"] == UI.CurKeys["Up"] {
  721. self.ScrollUp()
  722. self.Screen.Draw()
  723. self.Screen.SwapAndShow()
  724. }
  725. if ev.Data["Key"] == UI.CurKeys["Down"] {
  726. self.ScrollDown()
  727. self.Screen.Draw()
  728. self.Screen.SwapAndShow()
  729. }
  730. if ev.Data["Key"] == UI.CurKeys["Enter"] { // enter to set password,enter is B on GM
  731. if len(self.MyList) == 0 {
  732. return
  733. }
  734. wicd_wireless_encrypt_pwd := self.GetWirelessEncrypt(self.PsIndex)
  735. fmt.Println("wicd_wireless_encrypt_pwd ", wicd_wireless_encrypt_pwd)
  736. if self.MyList[self.PsIndex].IsActive == true {
  737. var ip string
  738. self.Wireless.Get(self.Wireless.Method("GetWirelessIP",""),&ip)
  739. self.ShowBox(ip)
  740. }else {
  741. self.Screen.PushCurPage()
  742. self.Screen.SetCurPage(APIOBJ.PasswordPage)
  743. thepass := ""
  744. for _,v := range wicd_wireless_encrypt_pwd { //[]map[string]string
  745. if _, ok := v["preshared_key"]; ok {
  746. if len(v["preshared_key"]) > 0 {
  747. thepass = v["preshared_key"]
  748. }
  749. }
  750. }
  751. fmt.Println("APIOBJ.PasswordPage.SetPassword ", thepass,len(thepass))
  752. APIOBJ.PasswordPage.SetPassword(thepass)
  753. self.Screen.Draw()
  754. self.Screen.SwapAndShow()
  755. }
  756. }
  757. if ev.Data["Key"] == UI.CurKeys["X"] {
  758. self.Rescan(false)
  759. }
  760. if ev.Data["Key"] == UI.CurKeys["Y"] {
  761. if len(self.MyList) == 0 {
  762. return
  763. }
  764. self.InfoPage.NetworkId = self.PsIndex
  765. self.InfoPage.Wireless = self.Wireless
  766. self.InfoPage.Daemon = self.Daemon
  767. self.Screen.PushPage(self.InfoPage)
  768. self.Screen.Draw()
  769. self.Screen.SwapAndShow()
  770. }
  771. }
  772. func (self *WifiList) Init() {
  773. self.PosX = self.Index * self.Screen.Width
  774. self.Width = self.Screen.Width
  775. self.Height = self.Screen.Height
  776. self.CanvasHWND = self.Screen.CanvasHWND
  777. ps := NewWifiListSelector()
  778. ps.Parent = self
  779. ps.Width = UI.Width - 12
  780. self.Ps = ps
  781. self.PsIndex = 0
  782. msgbox := NewWifiListMessageBox()
  783. msgbox.CanvasHWND = self.CanvasHWND
  784. msgbox.Init(" ",UI.Fonts["veramono12"],nil)
  785. msgbox.Parent = self
  786. self.MsgBox = msgbox
  787. self.EncMethods = misc.LoadEncryptionMethods(false) //# load predefined templates from /etc/wicd/...
  788. /*
  789. {
  790. 'fields': [],
  791. 'name': 'WPA 1/2 (Passphrase)',
  792. 'optional': [],
  793. 'protected': [
  794. ['apsk', 'Preshared_Key'],
  795. ],
  796. 'required': [
  797. ['apsk', 'Preshared_Key'],
  798. ],
  799. 'type': 'wpa-psk',
  800. },
  801. */
  802. self.UpdateNetList(-1,[]string{}, true,true) // self.UpdateNetList(force_check=True,firstrun=True)
  803. self.Scroller = UI.NewListScroller()
  804. self.Scroller.Parent = self
  805. self.Scroller.PosX = 2
  806. self.Scroller.PosY = 2
  807. self.Scroller.Init()
  808. self.InfoPage = NewWifiInfoPage()
  809. self.InfoPage.Screen = self.Screen
  810. self.InfoPage.Name = "Wifi info"
  811. self.InfoPage.Init()
  812. }
  813. func (self *WifiList) Draw() {
  814. self.ClearCanvas()
  815. if len(self.MyList) == 0 {
  816. return
  817. }
  818. self.Ps.Draw()
  819. for _,v := range self.MyList {
  820. v.Draw()
  821. }
  822. self.Scroller.UpdateSize( len(self.MyList)*NetItemDefaultHeight, self.PsIndex*NetItemDefaultHeight)
  823. self.Scroller.Draw()
  824. }