package Wifi //wifi_list.py import ( "fmt" //"strconv" "strings" "os" "os/exec" gotime "time" //"github.com/godbus/dbus" "github.com/veandco/go-sdl2/ttf" "github.com/cuu/gogame/surface" "github.com/cuu/gogame/font" "github.com/cuu/gogame/color" "github.com/cuu/gogame/event" "github.com/cuu/gogame/time" "github.com/cuu/gogame/rect" "github.com/cuu/gogame/draw" "github.com/clockworkpi/LauncherGoDev/sysgo" "github.com/clockworkpi/LauncherGoDev/sysgo/UI" wifi "github.com/cuu/wpa-connect" ) const EMPTY_NETWORK = "00:00:00:00:00:00" type WifiDisconnectConfirmPage struct { UI.ConfirmPage Parent *WifiInfoPage } func cmdEnv() []string { return []string{"LANG=C", "LC_ALL=C"} } func execCmd(cmdArgs []string) ([]byte, error) { cmd := exec.Command(cmdArgs[0], cmdArgs[1:]...) cmd.Env = append(os.Environ(), cmdEnv()...) out, err := cmd.Output() if err != nil { err = fmt.Errorf(`failed to execute "%v" (%+v)`, strings.Join(cmdArgs, " "), err) } return out, err } func NewWifiDisconnectConfirmPage() *WifiDisconnectConfirmPage { p := &WifiDisconnectConfirmPage{} p.ListFont = UI.Fonts["veramono20"] p.FootMsg = [5]string{"Nav","","","Cancel","Yes"} p.ConfirmText ="Confirm Disconnect?" return p } func (self *WifiDisconnectConfirmPage) KeyDown(ev *event.Event ) { if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] { self.ReturnToUpLevelPage() self.Screen.Draw() self.Screen.SwapAndShow() } if ev.Data["Key"] == UI.CurKeys["B"] { fmt.Println("Disconnecting..") self.SnapMsg("Disconnecting...") self.Screen.Draw() self.Screen.SwapAndShow() self.Parent.Parent.Disconnect() time.BlockDelay(400) self.ReturnToUpLevelPage() self.Screen.Draw() self.Screen.SwapAndShow() self.Parent.Parent.Rescan(false) } } type WifiInfoPage struct { UI.Page ListFontObj *ttf.Font Bss *wifi.BSS AList map[string]map[string]string ESSID string BSSID string MyList []UI.ListItemInterface DisconnectConfirmPage *WifiDisconnectConfirmPage //child page Parent *WifiList } func NewWifiInfoPage() *WifiInfoPage { p := &WifiInfoPage{} p.FootMsg = [5]string{"Nav","Disconnect","","Back",""} p.ListFontObj = UI.Fonts["varela15"] p.AList = make(map[string]map[string]string) p.BSSID = "" p.ESSID = "" return p } func (self *WifiInfoPage) GenList() { self.MyList = nil self.MyList = make([]UI.ListItemInterface,0) if self.BSSID != "" { self.AList["ip"]["value"] = "Not Connected" if self.BSSID == self.Parent.CurBssid { var ip string ip = self.Parent.GetWirelessIP() if len(ip) > 0 { self.AList["ip"]["value"]=ip } }else { fmt.Println(self.BSSID) } self.AList["ssid"]["value"] = self.ESSID } start_x := 0 start_y := 0 i := 0 for k,_ := range self.AList { li := UI.NewInfoPageListItem() li.Parent = self li.PosX = start_x li.PosY = start_y + i * li.Height//default is 30 li.Width = UI.Width li.Fonts["normal"] = self.ListFontObj li.Fonts["small"] = UI.Fonts["varela12"] if self.AList[k]["label"] != "" { li.Init(self.AList[k]["label"]) }else { li.Init(self.AList[k]["key"]) } li.Flag = self.AList[k]["key"] li.SetSmallText(self.AList[k]["value"]) self.MyList = append(self.MyList,li) i+=1 } } func (self *WifiInfoPage) Init() { if self.Screen != nil { if self.Screen.CanvasHWND != nil && self.CanvasHWND == nil { self.CanvasHWND = self.Screen.CanvasHWND } } self.PosX = self.Index * self.Screen.Width self.Width = self.Screen.Width self.Height = self.Screen.Height ps := UI.NewInfoPageSelector() ps.Parent = self ps.PosX = 2 self.Ps = ps self.PsIndex = 0 ip := make(map[string]string) // ip = {} ip["key"] = "ip" ip["label"] = "IP" ip["value"] = "Not Connected" ssid := make(map[string]string) // ssid = {} ssid["key"] = "ssid" ssid["label"] = "SSID" ssid["value"] = "" self.AList["ip"] = ip self.AList["ssid"] = ssid self.DisconnectConfirmPage = NewWifiDisconnectConfirmPage() self.DisconnectConfirmPage.Screen = self.Screen self.DisconnectConfirmPage.Name = "Confirm Disconnect" self.DisconnectConfirmPage.Parent = self self.DisconnectConfirmPage.Init() } func (self *WifiInfoPage) ScrollUp() { if len(self.MyList) == 0 { return } self.PsIndex -= 1 if self.PsIndex < 0 { self.PsIndex = 0 } cur_li := self.MyList[self.PsIndex] x,y := cur_li.Coord() if x < 0 { for i:=0;i= len(self.MyList) { self.PsIndex = len(self.MyList) - 1 } cur_li := self.MyList[self.PsIndex] x,y := cur_li.Coord() _,h := cur_li.Size() if y + h > self.Height { for i:=0;i 6 { self.Screen.PushPage(self.DisconnectConfirmPage) self.Screen.Draw() self.Screen.SwapAndShow() }else { fmt.Println("WifiInfoPage TryDisconnect can not get IP,maybe you are offline") return } } func (self *WifiInfoPage) OnLoadCb() { /* self.FootMsg[1]="Disconnect" self.FootMsg[1] = "" */ self.GenList() } func (self *WifiInfoPage) OnReturnBackCb() { self.ReturnToUpLevelPage() self.Screen.Draw() self.Screen.SwapAndShow() } func (self *WifiInfoPage) KeyDown(ev *event.Event ) { if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] { self.ReturnToUpLevelPage() self.Screen.Draw() self.Screen.SwapAndShow() } if ev.Data["Key"] == UI.CurKeys["Up"] { self.ScrollUp() self.Screen.Draw() self.Screen.SwapAndShow() } if ev.Data["Key"] == UI.CurKeys["Down"] { self.ScrollDown() self.Screen.Draw() self.Screen.SwapAndShow() } if ev.Data["Key"] == UI.CurKeys["Enter"] { self.Click() } if ev.Data["Key"] == UI.CurKeys["X"] { self.TryDisconnect() } } func (self *WifiInfoPage) Draw() { self.ClearCanvas() self.Ps.Draw() for i:=0;i 1 && s[1] == "15" { self.ShowBox("Wifi auth error") }else { self.ShowBox(err_str) } self.CurEssid = "" self.CurBssid = "" } self.Connecting = false self.UpdateListActive() } func (self *WifiList) GetWirelessIP() string { cli := fmt.Sprintf( "ip -4 addr show %s | grep -oP '(?<=inet\\s)\\d+(\\.\\d+){3}'",sysgo.WifiDev) out := UI.System(cli) if len(out) > 5 { out = strings.TrimSuffix(out,"\n") } return out } func (self *WifiList) ScrollUp() { if len(self.MyList) == 0 { return } self.PsIndex -= 1 if self.PsIndex < 0 { self.PsIndex=0 } cur_ni := self.MyList[self.PsIndex]//*NetItem if cur_ni.PosY < 0 { for i:=0;i= len(self.MyList) { self.PsIndex = len(self.MyList) - 1 } cur_ni := self.MyList[self.PsIndex] if cur_ni.PosY + cur_ni.Height > self.Height { for i:=0;i