diff --git a/Menu/GameShell/10_Settings/Bluetooth/plugin_init.go b/Menu/GameShell/10_Settings/Bluetooth/plugin_init.go index f586d9d..746eb50 100644 --- a/Menu/GameShell/10_Settings/Bluetooth/plugin_init.go +++ b/Menu/GameShell/10_Settings/Bluetooth/plugin_init.go @@ -21,7 +21,6 @@ import ( */ "github.com/clockworkpi/LauncherGoDev/sysgo/UI" - //"github.com/clockworkpi/LauncherGoDev/sysgo/DBUS" log "github.com/sirupsen/logrus" ) diff --git a/Menu/GameShell/10_Settings/Wifi/net_item.go b/Menu/GameShell/10_Settings/Wifi/net_item.go index 1a63817..dfe9320 100644 --- a/Menu/GameShell/10_Settings/Wifi/net_item.go +++ b/Menu/GameShell/10_Settings/Wifi/net_item.go @@ -3,17 +3,16 @@ package Wifi import ( "fmt" "strconv" - "strings" + //"strings" - "github.com/veandco/go-sdl2/sdl" - "github.com/veandco/go-sdl2/ttf" + "github.com/veandco/go-sdl2/sdl" + "github.com/veandco/go-sdl2/ttf" "github.com/cuu/gogame/color" - "github.com/cuu/gogame/draw" - "github.com/cuu/gogame/rect" - "github.com/cuu/gogame/surface" - "github.com/clockworkpi/LauncherGoDev/sysgo/UI" + "github.com/cuu/gogame/draw" + "github.com/cuu/gogame/rect" + "github.com/cuu/gogame/surface" + "github.com/clockworkpi/LauncherGoDev/sysgo/UI" - "github.com/clockworkpi/LauncherGoDev/sysgo/DBUS" ) var NetItemDefaultHeight = 30 @@ -25,14 +24,14 @@ type NetItemMultiIcon struct { } func NewNetItemMultiIcon() *NetItemMultiIcon{ - p := &NetItemMultiIcon{} - p.IconIndex = 0 - p.IconWidth = 18 - p.IconHeight = 18 + p := &NetItemMultiIcon{} + p.IconIndex = 0 + p.IconWidth = 18 + p.IconHeight = 18 p.Width = 18 p.Height = 18 - return p + return p } func (self *NetItemMultiIcon) Draw() { @@ -72,44 +71,24 @@ type NetItem struct { Bssid string //eg: 50:3A:A0:51:18:3C Essid string //eg: MERCURY_EB88 - dhcphostname string //"GameShell" ip string - dns_domain string - gateway string - use_global_dns int // eg 0==False,1 == True - netmask string - usedhcphostname int - bitrate string //"auto" - dns3 string - dns2 string - dns1 string - use_settings_globally int // 0 - use_static_dns int //eg: 1== True - search_domain string - Encrypt string // WPA2 Channel string //'10' - Stren string // 19% - NetId int + Signal string // -67 Mode string // Master or AdHoc Parent *WifiList IsActive bool - + Password string Labels map[string]UI.LabelInterface Icons map[string]UI.IconItemInterface Fonts map[string]*ttf.Font FontObj *ttf.Font - Wireless *DBUS.DbusInterface - Daemon *DBUS.DbusInterface } func NewNetItem() *NetItem { p := &NetItem{} - p.NetId = 0 - p.bitrate = "auto" - p.dhcphostname = "GameShell" p.Height = NetItemDefaultHeight @@ -124,165 +103,145 @@ func (self *NetItem) SetActive( act bool) { self.IsActive = act } -func (self *NetItem) UpdateStrenLabel( strenstr string) { // ## strenstr should be 'number',eg:'90' - - self.Stren = strenstr +func (self *NetItem) UpdateStrenLabel( sig_str string) { // ## sig_str should be 'number',eg:'-70' + self.Signal = sig_str + if _, ok := self.Labels["stren"]; ok { - self.Labels["stren"].SetText(self.Stren) + self.Labels["stren"].SetText( fmt.Sprintf("%d",self.CalcWifiQuality()) ) } } -func (self *NetItem) Init(i int,is_active bool) { +func (self *NetItem) Init(is_active bool) { - var sig_display_type int - strenstr := "quality" - gap := 4 + //strenstr := "quality" + //gap := 7 the_main_screen := self.Parent.GetScreen() - self.Wireless = self.Parent.Wireless - self.Daemon = self.Parent.Daemon - - self.Daemon.Get( self.Daemon.Method("GetSignalDisplayType"), &sig_display_type ) - - if sig_display_type == 0 { - strenstr = "quality" - gap = 4 // Allow for 100% - }else { - strenstr = "strength" - gap = 7 // -XX dbm = 7 - } - - self.NetId = i - - tmp := 0 - self.Wireless.Get(self.Wireless.Method("GetWirelessProperty",self.NetId, strenstr),&tmp) - tmp2 := "" - self.Daemon.Get( self.Daemon.Method("FormatSignalForPrinting",tmp), &tmp2) - - self.Stren = tmp2 + if is_active { + self.SetActive(is_active) + } - self.Wireless.Get( self.Wireless.Method("GetWirelessProperty",self.NetId,"essid"),&self.Essid) - self.Wireless.Get( self.Wireless.Method("GetWirelessProperty",self.NetId,"bssid"),&self.Bssid) - check_enc := false - self.Wireless.Get( self.Wireless.Method("GetWirelessProperty",self.NetId,"encryption"),&check_enc) + essid_label := UI.NewLabel() + essid_label.PosX = 36 + essid_label.CanvasHWND = self.Parent.GetCanvasHWND() - if check_enc == true { - self.Wireless.Get( self.Wireless.Method("GetWirelessProperty",self.NetId,"encryption_method"),&self.Encrypt) - }else { - self.Encrypt = "Unsecured" - } - - self.Wireless.Get( self.Wireless.Method("GetWirelessProperty",self.NetId,"mode"),&self.Mode) - - self.Wireless.Get( self.Wireless.Method("GetWirelessProperty",self.NetId,"channel"),&self.Channel) - - theString := fmt.Sprintf(" %-*s %25s %9s %17s %6s %4s",gap,self.Stren,self.Essid,self.Encrypt,self.Bssid,self.Mode, - self.Channel) - - - if is_active { - theString = ">> " + theString[1:] - self.SetActive(is_active) - } - - //fmt.Println(theString) - - essid_label := UI.NewLabel() - essid_label.PosX = 36 - essid_label.CanvasHWND = self.Parent.GetCanvasHWND() - - essid_ := "" + essid_ := "" - if len(self.Essid) > 19 { - essid_ = self.Essid[:20] - }else { - essid_ = self.Essid - } + if len(self.Essid) > 19 { + essid_ = self.Essid[:20] + }else { + essid_ = self.Essid + } - essid_label.Init(essid_, self.FontObj,nil) + essid_label.Init(essid_, self.FontObj,nil) - self.Labels["essid"] = essid_label + self.Labels["essid"] = essid_label - stren_label := UI.NewLabel() - stren_label.CanvasHWND = self.Parent.GetCanvasHWND() + stren_label := UI.NewLabel() + stren_label.CanvasHWND = self.Parent.GetCanvasHWND() - stren_label.Init(self.Stren, self.FontObj,nil) - stren_label.PosX = self.Width - 23 - stren_label.Width-2 + stren_label.Init(self.Signal, self.FontObj,nil) + stren_label.PosX = self.Width - 23 - stren_label.Width-2 - self.Labels["stren"] = stren_label + self.Labels["stren"] = stren_label - lock_icon := NewNetItemIcon() - lock_icon.ImgSurf = UI.MyIconPool.GetImgSurf("lock") - lock_icon.CanvasHWND = self.Parent.GetCanvasHWND() - lock_icon.Parent = self // WidgetInterface - self.Icons["lock"] = lock_icon + lock_icon := NewNetItemIcon() + lock_icon.ImgSurf = UI.MyIconPool.GetImgSurf("lock") + lock_icon.CanvasHWND = self.Parent.GetCanvasHWND() + lock_icon.Parent = self // WidgetInterface + self.Icons["lock"] = lock_icon - done_icon := NewNetItemIcon() - done_icon.ImgSurf = UI.MyIconPool.GetImgSurf("done") - done_icon.CanvasHWND = self.Parent.GetCanvasHWND() - done_icon.Parent = self + done_icon := NewNetItemIcon() + done_icon.ImgSurf = UI.MyIconPool.GetImgSurf("done") + done_icon.CanvasHWND = self.Parent.GetCanvasHWND() + done_icon.Parent = self - self.Icons["done"] = done_icon + self.Icons["done"] = done_icon - nimt := NewNetItemMultiIcon() - nimt.ImgSurf = the_main_screen.TitleBar.Icons["wifistatus"].GetImgSurf() - nimt.CanvasHWND = self.Parent.GetCanvasHWND() - nimt.Parent = self // WidgetInterface + nimt := NewNetItemMultiIcon() + nimt.ImgSurf = the_main_screen.TitleBar.Icons["wifistatus"].GetImgSurf() + nimt.CanvasHWND = self.Parent.GetCanvasHWND() + nimt.Parent = self // WidgetInterface - self.Icons["wifistatus"] = nimt - - - + self.Icons["wifistatus"] = nimt } func (self *NetItem) Connect() { - self.Wireless.Method("ConnectWireless",self.NetId) } -func (self *NetItem) Draw() { - for i,v := range self.Labels { - x_,_ := v.Coord() - _,h_ := v.Size() - self.Labels[i].NewCoord(x_,self.PosY+(self.Height - h_)/2) - self.Labels[i].Draw() - } +func (self *NetItem) CalcWifiQuality() int { - if self.IsActive == true { - self.Icons["done"].NewCoord(14,self.PosY) - self.Icons["done"].Draw() - } - - if self.Encrypt != "Unsecured" { - w_,_ := self.Labels["stren"].Size() - self.Icons["lock"].NewCoord(self.Width -23 - w_ -2 - 18, self.PosY) - self.Icons["lock"].Draw() - } - - stren_int,err := strconv.ParseInt(strings.Replace(self.Stren,"%","",-1),10,64) - if err == nil { - the_main_screen := self.Parent.GetScreen() - ge := the_main_screen.TitleBar.GetWifiStrength(int(stren_int)) - if ge > 0 { - self.Icons["wifistatus"].SetIconIndex(ge) - self.Icons["wifistatus"].NewCoord(self.Width-23,self.PosY) - self.Icons["wifistatus"].Draw() - }else { - self.Icons["wifistatus"].SetIconIndex(0) - self.Icons["wifistatus"].NewCoord(self.Width-23,self.PosY) - self.Icons["wifistatus"].Draw() - } - } - - draw.Line(self.Parent.GetCanvasHWND(), - &color.Color{169,169,169,255}, - self.PosX,self.PosY+self.Height-1, - self.PosX+self.Width,self.PosY+self.Height-1, - 1) + qua := 0 + stren,err := strconv.ParseInt(self.Signal, 10, 0) + if err == nil { + qua = 2 * (int(stren) + 100) + } + + return qua +} + +func (self *NetItem) CalcWifiStrength() int { + + segs := [][]int{ []int{-2,-1}, []int{0,25}, []int{25,50}, []int{50,75},[]int{75,100}} + stren_number := self.CalcWifiQuality() + ge := 0 + if stren_number == 0 { + return ge + } + + for i,v := range segs { + if stren_number >= v[0] && stren_number <= v[1] { + ge = i + break + } + } + + return ge + +} + +func (self *NetItem) Draw() { + for i,v := range self.Labels { + x_,_ := v.Coord() + _,h_ := v.Size() + self.Labels[i].NewCoord(x_,self.PosY+(self.Height - h_)/2) + self.Labels[i].Draw() + } + + if self.IsActive == true { + self.Icons["done"].NewCoord(14,self.PosY) + self.Icons["done"].Draw() + } + + /* + if self.Encrypt != "Unsecured" { + w_,_ := self.Labels["stren"].Size() + self.Icons["lock"].NewCoord(self.Width -23 - w_ -2 - 18, self.PosY) + self.Icons["lock"].Draw() + } + */ + //the_main_screen := self.Parent.GetScreen() + ge := self.CalcWifiStrength() + if ge > 0 { + self.Icons["wifistatus"].SetIconIndex(ge) + self.Icons["wifistatus"].NewCoord(self.Width-23,self.PosY) + self.Icons["wifistatus"].Draw() + }else { + self.Icons["wifistatus"].SetIconIndex(0) + self.Icons["wifistatus"].NewCoord(self.Width-23,self.PosY) + self.Icons["wifistatus"].Draw() + } + + draw.Line(self.Parent.GetCanvasHWND(), + &color.Color{169,169,169,255}, + self.PosX,self.PosY+self.Height-1, + self.PosX+self.Width,self.PosY+self.Height-1, + 1) } diff --git a/Menu/GameShell/10_Settings/Wifi/plugin_init.go b/Menu/GameShell/10_Settings/Wifi/plugin_init.go index 5010157..1e2abbb 100644 --- a/Menu/GameShell/10_Settings/Wifi/plugin_init.go +++ b/Menu/GameShell/10_Settings/Wifi/plugin_init.go @@ -1,7 +1,7 @@ package Wifi import ( - gotime "time" + //gotime "time" /* "github.com/veandco/go-sdl2/ttf" @@ -31,8 +31,6 @@ func (self *WifiPlugin) Init( main_screen *UI.MainScreen ) { self.ScanPage = NewWifiList() self.ScanPage.Name = "Scan wifi" - self.ScanPage.Wireless = main_screen.DBusManager.Wifi - self.ScanPage.Daemon = main_screen.DBusManager.Daemon self.ScanPage.Screen = main_screen @@ -40,33 +38,15 @@ func (self *WifiPlugin) Init( main_screen *UI.MainScreen ) { self.ScanPage.Init() - go func() { - gotime.Sleep(2000 * gotime.Millisecond) - - if self.ScanPage.Daemon != nil { - - self.ScanPage.Daemon.EnableSignal("StatusChanged") - self.ScanPage.Daemon.EnableSignal("ConnectResultsSent") - self.ScanPage.Wireless.EnableSignal("SendStartScanSignal") - self.ScanPage.Wireless.EnableSignal("SendEndScanSignal") - - self.ScanPage.Daemon.SigFuncs["StatusChanged"] = self.ScanPage.DbusDaemonStatusChangedSig - self.ScanPage.Daemon.SigFuncs["ConnectResultSent"] = self.ScanPage.DbusConnectResultsSent - - self.ScanPage.Wireless.SigFuncs["SendStartScanSignal"] = self.ScanPage.WifiDbusScanStarted - self.ScanPage.Wireless.SigFuncs["SendEndScanSignal"] = self.ScanPage.WifiDbusScanFinishedSig - } - }() - } func (self *WifiPlugin) Run( main_screen *UI.MainScreen ) { - if main_screen != nil { + if main_screen != nil { main_screen.PushCurPage() main_screen.SetCurPage(self.ScanPage) - main_screen.Draw() - main_screen.SwapAndShow() - } + main_screen.Draw() + main_screen.SwapAndShow() + } } var APIOBJ WifiPlugin diff --git a/Menu/GameShell/10_Settings/Wifi/wifi.go b/Menu/GameShell/10_Settings/Wifi/wifi.go index 60d3cc8..567a7e6 100644 --- a/Menu/GameShell/10_Settings/Wifi/wifi.go +++ b/Menu/GameShell/10_Settings/Wifi/wifi.go @@ -2,149 +2,163 @@ package Wifi //wifi_list.py import ( - "fmt" - "strconv" - "strings" - 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/UI" - "github.com/clockworkpi/LauncherGoDev/sysgo/DBUS" - - - "github.com/clockworkpi/LauncherGoDev/sysgo/wicd/misc" - + "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/mark2b/wpa-connect" ) +const EMPTY_NETWORK = "00:00:00:00:00:00" + type WifiDisconnectConfirmPage struct { - UI.ConfirmPage - Parent *WifiInfoPage + 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["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() - - //DBUS.DBusHandler.Daemon.Method("Disconnect") - self.Parent.Daemon.Method("Disconnect") - - time.BlockDelay(400) - - self.ReturnToUpLevelPage() - self.Screen.Draw() - self.Screen.SwapAndShow() - + self.SnapMsg("Disconnecting...") + self.Screen.Draw() + self.Screen.SwapAndShow() + + self.Parent.Parent.Disconnect() + + time.BlockDelay(400) + + self.ReturnToUpLevelPage() + self.Screen.Draw() + self.Screen.SwapAndShow() + } } type WifiInfoPage struct { UI.Page ListFontObj *ttf.Font - - Wireless *DBUS.DbusInterface - Daemon *DBUS.DbusInterface + Bss *wifi.BSS + AList map[string]map[string]string - NetworkId int - + NetworkId 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.NetworkId = -1 + p.NetworkId = EMPTY_NETWORK return p - + +} + +func (self *WifiInfoPage) GetWirelessIP() string { + + return "0.0.0.0" } func (self *WifiInfoPage) GenList() { - var iwconfig string - var cur_network_id int - self.MyList = nil - self.MyList = make([]UI.ListItemInterface,0) - - cur_network_id = -2 - - if self.NetworkId != -1 { - self.AList["ip"]["value"] = "Not Connected" - self.Wireless.Get( self.Wireless.Method("GetIwconfig"), &iwconfig) - self.Wireless.Get( self.Wireless.Method("GetCurrentNetworkID",iwconfig), &cur_network_id) - if cur_network_id == self.NetworkId { - var ip string - self.Wireless.Get( self.Wireless.Method("GetWirelessIP",""), &ip) - - if len(ip) > 0 { - self.AList["ip"]["value"]=ip + var cur_network_id string + self.MyList = nil + self.MyList = make([]UI.ListItemInterface,0) + + cur_network_id = EMPTY_NETWORK + + if self.NetworkId != EMPTY_NETWORK { + self.AList["ip"]["value"] = "Not Connected" + if cur_network_id == self.NetworkId { + var ip string + ip = self.GetWirelessIP() + if len(ip) > 0 { + self.AList["ip"]["value"]=ip + } } + + self.AList["bssid"]["value"] = self.Parent.CurBssid } - var bssid string - self.Wireless.Get( self.Wireless.Method("GetWirelessProperty",self.NetworkId,"bssid"),&bssid) - - self.AList["bssid"]["value"] = bssid - } - - 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"]) + + 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 } - - li.Flag = self.AList[k]["key"] - - li.SetSmallText(self.AList[k]["value"]) - self.MyList = append(self.MyList,li) - i+=1 - } - + } func (self *WifiInfoPage) Init() { @@ -156,44 +170,44 @@ func (self *WifiInfoPage) Init() { 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" - + bssid := make(map[string]string) // bssid = {} bssid["key"] = "bssid" bssid["label"] = "BSSID" bssid["value"] = "" - + self.AList["ip"] = ip self.AList["bssid"] = bssid - + self.GenList() - + 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 { + if len(self.MyList) == 0 { return } - + self.PsIndex -= 1 - + if self.PsIndex < 0 { self.PsIndex = 0 } @@ -209,19 +223,19 @@ func (self *WifiInfoPage) ScrollUp() { } func (self *WifiInfoPage) ScrollDown() { - if len(self.MyList) == 0 { + if len(self.MyList) == 0 { return } - + self.PsIndex += 1 if self.PsIndex >= 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 1 { + + ip = self.Parent.GetWirelessIP() + + if len(ip) > 6 { self.Screen.PushPage(self.DisconnectConfirmPage) self.Screen.Draw() self.Screen.SwapAndShow() }else { - fmt.Println("WifiInfoPage TryDisconnect cur_network_id != self.NetworkId ") + fmt.Println("WifiInfoPage TryDisconnect can not get IP,maybe you are offline") return } } func (self *WifiInfoPage) OnLoadCb() { - var iwconfig string - var cur_network_id int - var ip string - self.Wireless.Get( self.Wireless.Method("GetIwconfig"), &iwconfig) - self.Wireless.Get( self.Wireless.Method("GetCurrentNetworkID",iwconfig), &cur_network_id) - self.Wireless.Get( self.Wireless.Method("GetWirelessIP",""), &ip) - - if cur_network_id == self.NetworkId && len(ip) > 1 { - self.FootMsg[1]="Disconnect" - }else { - self.FootMsg[1] = "" - } + + /* + self.FootMsg[1]="Disconnect" + self.FootMsg[1] = "" + */ + self.GenList() } func (self *WifiInfoPage) OnReturnBackCb() { - self.ReturnToUpLevelPage() - self.Screen.Draw() - self.Screen.SwapAndShow() - + 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["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() + self.Screen.Draw() + self.Screen.SwapAndShow() } - + if ev.Data["Key"] == UI.CurKeys["Down"] { self.ScrollDown() - self.Screen.Draw() - self.Screen.SwapAndShow() + self.Screen.Draw() + self.Screen.SwapAndShow() } - + if ev.Data["Key"] == UI.CurKeys["Enter"] { self.Click() } - + if ev.Data["Key"] == UI.CurKeys["X"] { self.TryDisconnect() } @@ -312,26 +317,26 @@ func (self *WifiInfoPage) KeyDown(ev *event.Event ) { func (self *WifiInfoPage) Draw() { self.ClearCanvas() - self.Ps.Draw() - - for i:=0;i 0 { - self.Screen.Draw() - self.Screen.SwapAndShow() - } - } - -func (self *WifiList) DbusConnectResultsSent(body []interface{}) { - var ret_val string - err := dbus.Store(body,&ret_val) - - if err != nil { - fmt.Println(err) - }else { - fmt.Println(ret_val) - } - - self.Connecting = false - self.BlockingUI = false - if self.BlockCb != nil { - self.BlockCb() - self.BlockCb = nil - } - - self.Screen.FootBar.ResetNavText() -} - //---------------------------------------------------------------------------------- func (self *WifiList) UpdateNetList(state int,info []string ,force_check bool,firstrun bool) { //force_check default ==false, firstrun default == false - if self.Daemon == nil { - return - } - - type status struct { - State int - Trash []string - } - - var mystatus status - - if state == -1 { - - self.Daemon.Get(self.Daemon.Method("GetConnectionStatus"),&mystatus) - fmt.Println("state ",mystatus.State) - fmt.Println("Trash ",mystatus.Trash) - - } - - if force_check == true || self.PrevWicdState != state { + + if force_check == true { self.GenNetworkList() + self.SaveNetworkList() } - if len(info) > 0 { - if len(info) > 3 { - _id,_ := strconv.Atoi(info[3]) - if _id < len(self.MyList) { - var strength_str string - strength,err := strconv.Atoi(strings.Replace(info[2],"\"","",-1)) - if err == nil { - self.Daemon.Get(self.Daemon.Method("FormatSignalForPrinting",strength),&strength_str) - self.MyList[_id].UpdateStrenLabel(strength_str) - }else { - fmt.Println(err) - } - } - } - } - - self.PrevWicdState = state - -} - -func (self *WifiList) SetConnectingStatus(fast bool) bool { // default fast == false - - var wireless_connecting bool - var iwconfig string - - var essid string - var stat string - var status_msg string - - self.Wireless.Get(self.Wireless.Method("CheckIfWirelessConnecting"),&wireless_connecting) - - - if wireless_connecting == true { - if fast == false { - self.Wireless.Get(self.Wireless.Method("GetIwconfig"),&iwconfig) - }else { - iwconfig="" - } - - self.Wireless.Get(self.Wireless.Method("GetCurrentNetwork",iwconfig),&essid) - - err := self.Wireless.Get(self.Wireless.Method("CheckWirelessConnectingMessage"),&stat) // wicd will return False or stat message,False is a boolean,stat is string - if err != nil { - return false - } - - status_msg = fmt.Sprintf("%s: %s", essid,stat) - - if self.LastStatusMsg != status_msg { - fmt.Printf("%s: %s\n",essid,stat) - self.LastStatusMsg = status_msg - - self.ShowBox(self.LastStatusMsg) - - self.Screen.FootBar.UpdateNavText(self.LastStatusMsg) - UI.SwapAndShow() - - } - - return true - - }else { - self.Connecting=false - return self.Connecting - } - - return false -} - -func (self *WifiList) UpdateStatus() bool { - fmt.Println("UpdateStatus") - var wireless_connecting bool - var fast bool - - self.Wireless.Get(self.Wireless.Method("CheckIfWirelessConnecting"),&wireless_connecting) - - self.Daemon.Get(self.Daemon.Method("NeedsExternalCalls"),&fast) - - fast = !fast - - self.Connecting = wireless_connecting - - if self.Connecting == true { - go func() { - for { - gotime.Sleep(250 * gotime.Millisecond) - ret := self.SetConnectingStatus(fast) - if ret == false { - break - } - } - }() - }else { - - var iwconfig string - var ip string - if fast == false { - self.Wireless.Get(self.Wireless.Method("GetIwconfig"),&iwconfig) - }else { - iwconfig = "" - } - - self.Wireless.Get( self.Wireless.Method("GetWirelessIP",""), &ip) - - if self.CheckForWireless(iwconfig,ip,"") == true { // self.CheckForWireless(iwconfig,self._Wireless.GetWirelessIP(''),None) - return true - }else { - fmt.Println("not Connected") - return true - } - } - - return true - -} - -//set_status == "" not used -func (self *WifiList) CheckForWireless(iwconfig string, wireless_ip string , set_status string ) bool { - if len(wireless_ip) == 0 { - return false - } - - var network string - self.Wireless.Get(self.Wireless.Method("GetCurrentNetwork",iwconfig),&network) - - if len(network) == 0 { - return false - } - - var sig_display_type int - var strength int - - strength = -1 - - self.Daemon.Get(self.Daemon.Method("GetSignalDisplayType"),&sig_display_type) - - if sig_display_type == 0 { - self.Wireless.Get(self.Wireless.Method("GetCurrentSignalStrength",iwconfig),&strength) - }else { - self.Wireless.Get(self.Wireless.Method("GetCurrentDBMStrength",iwconfig),&strength) - } - - if strength == -1 { - return false - } - - var strength_str string - - self.Daemon.Get(self.Daemon.Method("FormatSignalForPrinting",strength),&strength_str) - - fmt.Printf("Connected to %s at %s (IP: %s)\n",network,strength_str,wireless_ip) - - return true - } func (self *WifiList) ConfigWireless(password string) { - netid := self.PsIndex - fmt.Println(netid, " ", password) - - for i,v := range self.MyList { - if v.Bssid == self.CurBssid { - netid = i - break - } - } - - /* - self.Wireless.Method("SetWirelessProperty",netid,"dhcphostname","GameShell") - self.Wireless.Method("SetWirelessProperty",netid,"ip","None") - self.Wireless.Method("SetWirelessProperty",netid,"dns_domain","None") - self.Wireless.Method("SetWirelessProperty",netid,"gateway","None") - self.Wireless.Method("SetWirelessProperty",netid,"use_global_dns",0) - self.Wireless.Method("SetWirelessProperty",netid,"netmask","None") - self.Wireless.Method("SetWirelessProperty",netid,"usedhcphostname",0) ## set 1 to use hostname above - self.Wireless.Method("SetWirelessProperty",netid,"bitrate","auto") - self.Wireless.Method("SetWirelessProperty",netid,"allow_lower_bitrates",0) - self.Wireless.Method("SetWirelessProperty",netid,"dns3","None") - self.Wireless.Method("SetWirelessProperty",netid,"dns2","None") - self.Wireless.Method("SetWirelessProperty",netid,"dns1","None") - self.Wireless.Method("SetWirelessProperty",netid,"use_settings_globally",0) - self.Wireless.Method("SetWirelessProperty",netid,"use_static_dns",0) - self.Wireless.Method("SetWirelessProperty",netid,"search_domain","None") - */ - - self.Wireless.Method("SetWirelessProperty",netid,"enctype","wpa-psk") - self.Wireless.Method("SetWirelessProperty",netid,"apsk",password) - self.Wireless.Method("SetWirelessProperty",netid,"automatic",1) + ssid := self.MyList[self.PsIndex].Essid + self.ShowBox("Connecting...") - - self.MyList[netid].Connect() - - fmt.Println("after connect") - self.UpdateStatus() - + + if conn, err := wifi.ConnectManager.Connect(ssid, password, gotime.Second * 20); err == nil { + fmt.Println("Connected", conn.NetInterface, conn.SSID, conn.IP4.String(), conn.IP6.String()) + self.CurBssid = self.MyList[self.PsIndex].Bssid + self.MyList[self.PsIndex].Password = password + self.CurIP = conn.IP4.String(); + + } else { + fmt.Println(err) + } + + + //self.UpdateStatus() + } +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) + + return out + +} + func (self *WifiList) GetWirelessEncrypt(network_id int) []map[string]string { - var results []map[string]string - - activeID := -1 - var enc_type string - for i,v := range self.EncMethods { - enc_type = "" - fmt.Println(i,v) - self.Wireless.Get(self.Wireless.Method("GetWirelessProperty",network_id,"enctype"),&enc_type) - enc_type = strings.ToLower(enc_type) - if enc_type != "" && v.Type == enc_type { - activeID = i - break - } - } - - if activeID == -1 { - fmt.Println("GetWirelessEncrypt activeID == -1") - return results - } - - required_fields := self.EncMethods[activeID].Required - for _,field := range required_fields { - if len(field) != 2 { - continue - } - text := strings.Replace(strings.ToLower(field[1])," ","_",-1) - - var value string - - self.Wireless.Get(self.Wireless.Method("GetWirelessProperty",network_id,field[0]),&value) - - kv_map := make(map[string]string) - kv_map[text] = value - - results = append(results,kv_map) - -/* - """ - [{'preshared_key': 'blah blah blah',},] + return nil - or nothing - [{'identity': "",},{'password': "",},] - - """ - */ - - } - - optional_fields := self.EncMethods[activeID].Optional - for _,field := range optional_fields { - if len(field) != 2 { - continue - } - text := strings.Replace(strings.ToLower(field[1])," ","_",-1) - - var value string - - self.Wireless.Get(self.Wireless.Method("GetWirelessProperty",network_id,field[0]),&value) - - kv_map := make(map[string]string) - kv_map[text] = value - - results = append(results,kv_map) - } - - return results - } 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 0 { - thepass = v["preshared_key"] - } - } - } - + + thepass := self.MyList[self.PsIndex].Password + fmt.Println("APIOBJ.PasswordPage.SetPassword ", thepass,len(thepass)) APIOBJ.PasswordPage.SetPassword(thepass) - + self.Screen.Draw() self.Screen.SwapAndShow() - + } } if ev.Data["Key"] == UI.CurKeys["X"] { self.Rescan(false) } - + if ev.Data["Key"] == UI.CurKeys["Y"] { if len(self.MyList) == 0 { return } - - self.InfoPage.NetworkId = self.PsIndex - self.InfoPage.Wireless = self.Wireless - self.InfoPage.Daemon = self.Daemon - - self.Screen.PushPage(self.InfoPage) - self.Screen.Draw() - self.Screen.SwapAndShow() + + + self.Screen.PushPage(self.InfoPage) + self.Screen.Draw() + self.Screen.SwapAndShow() } - + } func (self *WifiList) Init() { - + self.PosX = self.Index * self.Screen.Width self.Width = self.Screen.Width self.Height = self.Screen.Height - + self.CanvasHWND = self.Screen.CanvasHWND - + ps := NewWifiListSelector() ps.Parent = self ps.Width = UI.Width - 12 - + self.Ps = ps self.PsIndex = 0 - + msgbox := NewWifiListMessageBox() msgbox.CanvasHWND = self.CanvasHWND msgbox.Init(" ",UI.Fonts["veramono12"],nil) msgbox.Parent = self - + self.MsgBox = msgbox - - self.EncMethods = misc.LoadEncryptionMethods(false) //# load predefined templates from /etc/wicd/... - /* - { - 'fields': [], - 'name': 'WPA 1/2 (Passphrase)', - 'optional': [], - 'protected': [ - ['apsk', 'Preshared_Key'], - ], - 'required': [ - ['apsk', 'Preshared_Key'], - ], - 'type': 'wpa-psk', - }, - */ - - self.UpdateNetList(-1,[]string{}, true,true) // self.UpdateNetList(force_check=True,firstrun=True) - - self.Scroller = UI.NewListScroller() - self.Scroller.Parent = self - self.Scroller.PosX = 2 - self.Scroller.PosY = 2 - self.Scroller.Init() - - self.InfoPage = NewWifiInfoPage() - self.InfoPage.Screen = self.Screen - self.InfoPage.Name = "Wifi info" - - self.InfoPage.Init() - + + /* + { + 'fields': [], + 'name': 'WPA 1/2 (Passphrase)', + 'optional': [], + 'protected': [ + ['apsk', 'Preshared_Key'], + ], + 'required': [ + ['apsk', 'Preshared_Key'], + ], + 'type': 'wpa-psk', + }, + */ + + self.UpdateNetList(-1,[]string{}, true,true) // self.UpdateNetList(force_check=True,firstrun=True) + + self.Scroller = UI.NewListScroller() + self.Scroller.Parent = self + self.Scroller.PosX = 2 + self.Scroller.PosY = 2 + self.Scroller.Init() + + self.InfoPage = NewWifiInfoPage() + self.InfoPage.Screen = self.Screen + self.InfoPage.Name = "Wifi info" + + self.InfoPage.Init() + } func (self *WifiList) Draw() { self.ClearCanvas() - + if len(self.MyList) == 0 { return } - + self.Ps.Draw() - + for _,v := range self.MyList { v.Draw() } - + self.Scroller.UpdateSize( len(self.MyList)*NetItemDefaultHeight, self.PsIndex*NetItemDefaultHeight) self.Scroller.Draw() - + } diff --git a/sysgo/UI/title_bar.go b/sysgo/UI/title_bar.go index 5a6892b..494f1ae 100644 --- a/sysgo/UI/title_bar.go +++ b/sysgo/UI/title_bar.go @@ -7,8 +7,8 @@ import ( "strconv" "bufio" "strings" - "os/exec" - "io/ioutil" + "os/exec" + "io/ioutil" gotime "time" "github.com/veandco/go-sdl2/sdl" @@ -21,8 +21,6 @@ import ( "github.com/itchyny/volume-go" "github.com/vjeantet/jodaTime" - - "github.com/clockworkpi/LauncherGoDev/sysgo/DBUS" "github.com/clockworkpi/LauncherGoDev/sysgo" @@ -91,29 +89,28 @@ func (self *TitleBarIconItem) Draw() { type TitleBar struct { Widget - BarHeight int - LOffset int - ROffset int - Icons map[string]IconItemInterface - IconWidth int - IconHeight int - BorderWidth int - CanvasHWND *sdl.Surface - HWND *sdl.Surface - Title string + BarHeight int + LOffset int + ROffset int + Icons map[string]IconItemInterface + IconWidth int + IconHeight int + BorderWidth int + CanvasHWND *sdl.Surface + HWND *sdl.Surface + Title string - InLowBackLight int + InLowBackLight int InAirPlaneMode bool - SkinManager *SkinManager //set by MainScreen - DBusManager DBUS.DBusInterface + SkinManager *SkinManager //set by MainScreen - icon_base_path string /// SkinMap("gameshell/titlebar_icons/") + icon_base_path string /// SkinMap("gameshell/titlebar_icons/") MyTimeLocation *gotime.Location - TitleFont *ttf.Font - TimeFont *ttf.Font + TitleFont *ttf.Font + TimeFont *ttf.Font } @@ -172,13 +169,40 @@ func (self *TitleBar) RoundRobinCheck() { } } +func (self *TitleBar) IsWifiConnectedNow() bool { + cli := fmt.Sprintf( "ip -4 addr show %s | grep -oP '(?<=inet\\s)\\d+(\\.\\d+){3}'",sysgo.WifiDev) + out := System(cli) + if(len(out) > 7) { + if strings.Contains(out,"not") { + return false + }else { + return true + } + } + + return false + +} + func (self *TitleBar) UpdateWifiStrength() { self.Draw(self.Title) } -func (t *TitleBar) GetWifiStrength(stren int) int { +func (t *TitleBar) GetWifiStrength() int { + qua := 0 + cli := fmt.Sprintf("iwconfig %s | grep Signal | /usr/bin/awk '{print $4}' | /usr/bin/cut -d'=' -f2",sysgo.WifiDev) + out := System(cli) + if(len(out) > 2) { + if strings.Contains(out,"No") == false { + stren,err := strconv.ParseInt(out, 10, 0) + if err == nil { + qua = 2 * (int(stren) + 100) + } + } + } + segs := [][]int{ []int{-2,-1}, []int{0,25}, []int{25,50}, []int{50,75},[]int{75,100}} - stren_number := stren + stren_number := qua ge := 0 if stren_number == 0 { return ge @@ -297,7 +321,7 @@ func (self *TitleBar) CheckBatteryStat() { } func (self *TitleBar) SetBatteryStat( bat int) { - + } func (self *TitleBar) CheckBluetooth() { @@ -327,7 +351,6 @@ func (self *TitleBar) Init(main_screen *MainScreen) { self.CanvasHWND = surface.Surface(self.Width,self.Height) self.HWND = main_screen.HWND self.SkinManager = main_screen.SkinManager - self.DBusManager = main_screen.DBusManager icon_wifi_status := NewTitleBarIconItem() @@ -396,9 +419,8 @@ func (self *TitleBar) Init(main_screen *MainScreen) { self.Icons["round_corners"] = round_corners - if self.DBusManager.IsWifiConnectedNow() { + if self.IsWifiConnectedNow() { print("wifi is connected") - print( self.DBusManager.WifiStrength()) }else { cmd := "sudo rfkill list | grep yes | cut -d \" \" -f3" //make sure sudo rfkill needs no password @@ -482,8 +504,8 @@ func (self *TitleBar) Draw(title string) { self.Icons["sound"].NewCoord( start_x, self.IconHeight/2+ (self.BarHeight-self.IconHeight)/2) self.Icons["battery"].NewCoord(start_x+self.IconWidth+self.IconWidth+8, self.IconHeight/2+(self.BarHeight-self.IconHeight)/2) - if self.DBusManager.IsWifiConnectedNow() == true { - ge := self.GetWifiStrength( self.DBusManager.WifiStrength() ) + if self.IsWifiConnectedNow() == true { + ge := self.GetWifiStrength() //fmt.Println("wifi ge: ",ge) if ge > 0 { self.Icons["wifistatus"].SetIconIndex(ge) diff --git a/sysgo/config.go b/sysgo/config.go index 6e16081..04afc2b 100644 --- a/sysgo/config.go +++ b/sysgo/config.go @@ -9,21 +9,23 @@ type PowerLevel struct { var PowerLevels map[string]*PowerLevel var ( - CurKeySet = "GameShell" // PC or GameShell - DontLeave = false - BackLight = "/proc/driver/backlight" - Battery = "/sys/class/power_supply/axp20x-battery/uevent" - MPD_socket = "/tmp/mpd.socket" + CurKeySet = "GameShell" // PC or GameShell + DontLeave = false + BackLight = "/proc/driver/backlight" + Battery = "/sys/class/power_supply/axp20x-battery/uevent" + MPD_socket = "/tmp/mpd.socket" UPDATE_URL="https://raw.githubusercontent.com/clockworkpi/CPI/master/launchergo_ver.json" VERSION="0.22" - SKIN="skin/default/" // !!!need the last slash!!! + SKIN="skin/default/" // !!!need the last slash!!! //load from dot files CurPowerLevel= "performance" Lang = "English" + WifiDev = "wlan0" + )