From 928c31cf9a5a1195fa3a20835b43a688ae089a01 Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 30 Oct 2008 18:54:24 +0100 Subject: add possibility to disable user input in Messageboxes --- lib/python/Screens/MessageBox.py | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/MessageBox.py b/lib/python/Screens/MessageBox.py index 8477fe04..8a5989c7 100644 --- a/lib/python/Screens/MessageBox.py +++ b/lib/python/Screens/MessageBox.py @@ -12,7 +12,7 @@ class MessageBox(Screen): TYPE_WARNING = 2 TYPE_ERROR = 3 - def __init__(self, session, text, type = TYPE_YESNO, timeout = -1, close_on_any_key = False, default = True): + def __init__(self, session, text, type = TYPE_YESNO, timeout = -1, close_on_any_key = False, default = True, enable_input = True): self.type = type Screen.__init__(self, session) @@ -47,20 +47,21 @@ class MessageBox(Screen): self["selectedChoice"].setText(self.list[0][0]) self["list"] = MenuList(self.list) - self["actions"] = ActionMap(["MsgBoxActions", "DirectionActions"], - { - "cancel": self.cancel, - "ok": self.ok, - "alwaysOK": self.alwaysOK, - "up": self.up, - "down": self.down, - "left": self.left, - "right": self.right, - "upRepeated": self.up, - "downRepeated": self.down, - "leftRepeated": self.left, - "rightRepeated": self.right - }, -1) + if enable_input: + self["actions"] = ActionMap(["MsgBoxActions", "DirectionActions"], + { + "cancel": self.cancel, + "ok": self.ok, + "alwaysOK": self.alwaysOK, + "up": self.up, + "down": self.down, + "left": self.left, + "right": self.right, + "upRepeated": self.up, + "downRepeated": self.down, + "leftRepeated": self.left, + "rightRepeated": self.right + }, -1) def initTimeout(self, timeout): self.timeout = timeout -- cgit v1.2.3 From 1101fc3f4349fbdbed94e82870aae6b4af9312fe Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 4 Nov 2008 11:30:56 +0100 Subject: more failsave code, remove imho unneeded invalidate calls --- lib/python/Screens/TimerEdit.py | 47 ++++++++++++++++++----------------------- 1 file changed, 20 insertions(+), 27 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/TimerEdit.py b/lib/python/Screens/TimerEdit.py index 67c49cc5..800bab33 100644 --- a/lib/python/Screens/TimerEdit.py +++ b/lib/python/Screens/TimerEdit.py @@ -117,41 +117,40 @@ class TimerEditList(Screen): self.session.nav.RecordTimer.timeChanged(t) self.refill() self.updateState() - + + def removeAction(self, descr): + actions = self["actions"].actions + if descr in actions: + del actions[descr] + def updateState(self): cur = self["timerlist"].getCurrent() if cur: if self.key_red_choice != self.DELETE: self["actions"].actions.update({"red":self.removeTimerQuestion}) self["key_red"].setText(_("Delete")) - self["key_red"].instance.invalidate() self.key_red_choice = self.DELETE if cur.disabled and (self.key_yellow_choice != self.ENABLE): self["actions"].actions.update({"yellow":self.toggleDisabledState}) self["key_yellow"].setText(_("Enable")) - self["key_yellow"].instance.invalidate() self.key_yellow_choice = self.ENABLE elif cur.isRunning() and not cur.repeated and (self.key_yellow_choice != self.EMPTY): - del self["actions"].actions["yellow"] + self.removeAction("yellow") self["key_yellow"].setText(" ") - self["key_yellow"].instance.invalidate() self.key_yellow_choice = self.EMPTY elif ((not cur.isRunning())or cur.repeated ) and (not cur.disabled) and (self.key_yellow_choice != self.DISABLE): self["actions"].actions.update({"yellow":self.toggleDisabledState}) self["key_yellow"].setText(_("Disable")) - self["key_yellow"].instance.invalidate() self.key_yellow_choice = self.DISABLE else: if self.key_red_choice != self.EMPTY: - del self["actions"].actions["red"] + self.removeAction("red") self["key_red"].setText(" ") - self["key_red"].instance.invalidate() self.key_red_choice = self.EMPTY if self.key_yellow_choice != self.EMPTY: - del self["actions"].actions["yellow"] + self.removeAction("yellow") self["key_yellow"].setText(" ") - self["key_yellow"].instance.invalidate() self.key_yellow_choice = self.EMPTY showCleanup = True @@ -164,15 +163,12 @@ class TimerEditList(Screen): if showCleanup and (self.key_blue_choice != self.CLEANUP): self["actions"].actions.update({"blue":self.cleanupQuestion}) self["key_blue"].setText(_("Cleanup")) - self["key_blue"].instance.invalidate() self.key_blue_choice = self.CLEANUP elif (not showCleanup) and (self.key_blue_choice != self.EMPTY): - del self["actions"].actions["blue"] + self.removeAction("blue") self["key_blue"].setText(" ") - self["key_blue"].instance.invalidate() self.key_blue_choice = self.EMPTY - def fillTimerList(self): del self.list[:] @@ -399,23 +395,25 @@ class TimerSanityConflict(Screen): def down(self): self["list"].instance.moveSelection(self["list"].instance.moveDown) self["timer2"].moveToIndex(self["list"].getSelectedIndex()) - + + def removeAction(self, descr): + actions = self["actions"].actions + if descr in actions: + del actions[descr] + def updateState(self): if self.timer[0] is not None: if self.timer[0].disabled and self.key_green_choice != self.ENABLE: self["actions"].actions.update({"green":self.toggleTimer1}) self["key_green"].setText(_("Enable")) - self["key_green"].instance.invalidate() self.key_green_choice = self.ENABLE elif self.timer[0].isRunning() and not timer[0].repeated and self.key_green_choice != self.EMPTY: - del self["actions"].actions["green"] + self.removeAction("green") self["key_green"].setText(" ") - self["key_green"].instance.invalidate() self.key_green_choice = self.EMPTY elif (not self.timer[0].isRunning() or self.timer[0].repeated ) and self.key_green_choice != self.DISABLE: self["actions"].actions.update({"green":self.toggleTimer1}) self["key_green"].setText(_("Disable")) - self["key_green"].instance.invalidate() self.key_green_choice = self.DISABLE if len(self.timer) > 1: x = self["list"].getSelectedIndex() @@ -423,25 +421,20 @@ class TimerSanityConflict(Screen): if self.timer[x].disabled and self.key_blue_choice != self.ENABLE: self["actions"].actions.update({"blue":self.toggleTimer2}) self["key_blue"].setText(_("Enable")) - self["key_blue"].instance.invalidate() self.key_blue_choice = self.ENABLE elif self.timer[x].isRunning() and not timer[x].repeated and self.key_blue_choice != self.EMPTY: - del self["actions"].actions["blue"] + self.removeAction("blue") self["key_blue"].setText(" ") - self["key_blue"].instance.invalidate() self.key_blue_choice = self.EMPTY elif (not self.timer[x].isRunning() or self.timer[x].repeated ) and self.key_blue_choice != self.DISABLE: self["actions"].actions.update({"blue":self.toggleTimer2}) self["key_blue"].setText(_("Disable")) - self["key_blue"].instance.invalidate() self.key_blue_choice = self.DISABLE else: #FIXME.... this doesnt hide the buttons self.... just the text - del self["actions"].actions["yellow"] + self.removeAction("yellow") self["key_yellow"].setText(" ") - self["key_yellow"].instance.invalidate() self.key_yellow_choice = self.EMPTY - del self["actions"].actions["blue"] + self.removeAction("blue") self["key_blue"].setText(" ") - self["key_blue"].instance.invalidate() self.key_blue_choice = self.EMPTY -- cgit v1.2.3 From 1be69784396f194419adda53331d5fee02ea062b Mon Sep 17 00:00:00 2001 From: Acid-Burn Date: Tue, 4 Nov 2008 12:13:37 +0100 Subject: add virtual keyboard as easy input help add icons for virtual keyboard network fixes wlan fixeS --- data/skin_default.xml | 11 +- data/skin_default/vkey_backspace.png | Bin 0 -> 783 bytes data/skin_default/vkey_bg.png | Bin 0 -> 577 bytes data/skin_default/vkey_clr.png | Bin 0 -> 955 bytes data/skin_default/vkey_esc.png | Bin 0 -> 1321 bytes data/skin_default/vkey_icon.png | Bin 0 -> 2512 bytes data/skin_default/vkey_left.png | Bin 0 -> 819 bytes data/skin_default/vkey_ok.png | Bin 0 -> 990 bytes data/skin_default/vkey_right.png | Bin 0 -> 817 bytes data/skin_default/vkey_sel.png | Bin 0 -> 173 bytes data/skin_default/vkey_shift.png | Bin 0 -> 767 bytes data/skin_default/vkey_shift_sel.png | Bin 0 -> 1395 bytes data/skin_default/vkey_space.png | Bin 0 -> 577 bytes data/skin_default/vkey_text.png | Bin 0 -> 262 bytes lib/python/Components/HelpMenuList.py | 25 +- lib/python/Components/Network.py | 331 +++++++++++++------ lib/python/Screens/Makefile.am | 2 +- lib/python/Screens/NetworkSetup.py | 604 ++++++++++++++++++++++++---------- lib/python/Screens/VirtualKeyBoard.py | 287 ++++++++++++++++ 19 files changed, 978 insertions(+), 282 deletions(-) mode change 100644 => 100755 data/skin_default.xml create mode 100755 data/skin_default/vkey_backspace.png create mode 100755 data/skin_default/vkey_bg.png create mode 100755 data/skin_default/vkey_clr.png create mode 100755 data/skin_default/vkey_esc.png create mode 100755 data/skin_default/vkey_icon.png create mode 100755 data/skin_default/vkey_left.png create mode 100755 data/skin_default/vkey_ok.png create mode 100755 data/skin_default/vkey_right.png create mode 100755 data/skin_default/vkey_sel.png create mode 100755 data/skin_default/vkey_shift.png create mode 100755 data/skin_default/vkey_shift_sel.png create mode 100755 data/skin_default/vkey_space.png create mode 100755 data/skin_default/vkey_text.png mode change 100644 => 100755 lib/python/Components/HelpMenuList.py mode change 100644 => 100755 lib/python/Components/Network.py mode change 100644 => 100755 lib/python/Screens/Makefile.am mode change 100644 => 100755 lib/python/Screens/NetworkSetup.py create mode 100755 lib/python/Screens/VirtualKeyBoard.py (limited to 'lib/python/Screens') diff --git a/data/skin_default.xml b/data/skin_default.xml old mode 100644 new mode 100755 index 88cf8b40..41a7e4c9 --- a/data/skin_default.xml +++ b/data/skin_default.xml @@ -42,6 +42,9 @@ + + + @@ -568,7 +571,7 @@ self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y())) - + @@ -1157,4 +1160,10 @@ self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y())) + + + + + + diff --git a/data/skin_default/vkey_backspace.png b/data/skin_default/vkey_backspace.png new file mode 100755 index 00000000..ed49159f Binary files /dev/null and b/data/skin_default/vkey_backspace.png differ diff --git a/data/skin_default/vkey_bg.png b/data/skin_default/vkey_bg.png new file mode 100755 index 00000000..5151da4c Binary files /dev/null and b/data/skin_default/vkey_bg.png differ diff --git a/data/skin_default/vkey_clr.png b/data/skin_default/vkey_clr.png new file mode 100755 index 00000000..0c7734bf Binary files /dev/null and b/data/skin_default/vkey_clr.png differ diff --git a/data/skin_default/vkey_esc.png b/data/skin_default/vkey_esc.png new file mode 100755 index 00000000..56c52d30 Binary files /dev/null and b/data/skin_default/vkey_esc.png differ diff --git a/data/skin_default/vkey_icon.png b/data/skin_default/vkey_icon.png new file mode 100755 index 00000000..f27b7f86 Binary files /dev/null and b/data/skin_default/vkey_icon.png differ diff --git a/data/skin_default/vkey_left.png b/data/skin_default/vkey_left.png new file mode 100755 index 00000000..2e77e713 Binary files /dev/null and b/data/skin_default/vkey_left.png differ diff --git a/data/skin_default/vkey_ok.png b/data/skin_default/vkey_ok.png new file mode 100755 index 00000000..2c0c7e88 Binary files /dev/null and b/data/skin_default/vkey_ok.png differ diff --git a/data/skin_default/vkey_right.png b/data/skin_default/vkey_right.png new file mode 100755 index 00000000..fefb17c5 Binary files /dev/null and b/data/skin_default/vkey_right.png differ diff --git a/data/skin_default/vkey_sel.png b/data/skin_default/vkey_sel.png new file mode 100755 index 00000000..b612b947 Binary files /dev/null and b/data/skin_default/vkey_sel.png differ diff --git a/data/skin_default/vkey_shift.png b/data/skin_default/vkey_shift.png new file mode 100755 index 00000000..477f8db2 Binary files /dev/null and b/data/skin_default/vkey_shift.png differ diff --git a/data/skin_default/vkey_shift_sel.png b/data/skin_default/vkey_shift_sel.png new file mode 100755 index 00000000..339ddb46 Binary files /dev/null and b/data/skin_default/vkey_shift_sel.png differ diff --git a/data/skin_default/vkey_space.png b/data/skin_default/vkey_space.png new file mode 100755 index 00000000..5151da4c Binary files /dev/null and b/data/skin_default/vkey_space.png differ diff --git a/data/skin_default/vkey_text.png b/data/skin_default/vkey_text.png new file mode 100755 index 00000000..6bdb8c84 Binary files /dev/null and b/data/skin_default/vkey_text.png differ diff --git a/lib/python/Components/HelpMenuList.py b/lib/python/Components/HelpMenuList.py old mode 100644 new mode 100755 index 25c9b8b6..04815c8d --- a/lib/python/Components/HelpMenuList.py +++ b/lib/python/Components/HelpMenuList.py @@ -1,7 +1,6 @@ from GUIComponent import GUIComponent from enigma import eListboxPythonMultiContent, eListbox, gFont - from Tools.KeyBindings import queryKeyBinding, getKeyDescription #getKeyPositions @@ -13,6 +12,7 @@ class HelpMenuList(GUIComponent): self.onSelChanged = [ ] self.l = eListboxPythonMultiContent() self.callback = callback + self.extendedHelp = False l = [ ] for (actionmap, context, actions) in list: @@ -36,17 +36,26 @@ class HelpMenuList(GUIComponent): if flags & 8: # for long keypresses, prepend l_ into the key name. name = (name[0], "long") - print "name:", name - entry.append( (actionmap, context, action, name ) ) - entry.append( (eListboxPythonMultiContent.TYPE_TEXT, 0, 0, 400, 28, 0, 0, help) ) - + + if type(help).__name__== 'list': + self.extendedHelp = True + print "extendedHelpEntry found" + entry.append( (eListboxPythonMultiContent.TYPE_TEXT, 0, 0, 400, 26, 0, 0, help[0]) ) + entry.append( (eListboxPythonMultiContent.TYPE_TEXT, 0, 28, 400, 20, 1, 0, help[1]) ) + else: + entry.append( (eListboxPythonMultiContent.TYPE_TEXT, 0, 0, 400, 28, 0, 0, help) ) + l.append(entry) self.l.setList(l) - - self.l.setFont(0, gFont("Regular", 24)) - self.l.setItemHeight(38) + if self.extendedHelp is True: + self.l.setFont(0, gFont("Regular", 24)) + self.l.setFont(1, gFont("Regular", 18)) + self.l.setItemHeight(50) + else: + self.l.setFont(0, gFont("Regular", 24)) + self.l.setItemHeight(38) def ok(self): # a list entry has a "private" tuple as first entry... diff --git a/lib/python/Components/Network.py b/lib/python/Components/Network.py old mode 100644 new mode 100755 index bed9d95f..e10c6a0e --- a/lib/python/Components/Network.py +++ b/lib/python/Components/Network.py @@ -7,11 +7,19 @@ from Components.Console import Console class Network: def __init__(self): self.ifaces = {} - self.configuredInterfaces = [] + self.configuredInterfaces = [] + self.configuredNetworkAdapters = [] + self.NetworkState = 0 + self.DnsState = 0 self.nameservers = [] self.ethtool_bin = "/usr/sbin/ethtool" self.container = eConsoleAppContainer() self.Console = Console() + self.LinkConsole = Console() + self.restartConsole = Console() + self.deactivateConsole = Console() + self.activateConsole = Console() + self.resetNetworkConsole = Console() self.getInterfaces() def getInterfaces(self, callback = None): @@ -28,6 +36,11 @@ class Network: self.getDataForInterface(device, callback) except AttributeError: pass + #print "self.ifaces:", self.ifaces + #self.writeNetworkConfig() + #print ord(' ') + #for line in result: + # print ord(line[0]) # helper function def regExpMatch(self, pattern, string): @@ -46,66 +59,58 @@ class Network: ip.append(int(x)) return ip + def getDataForInterface(self, iface,callback): + #get ip out of ip addr, as avahi sometimes overrides it in ifconfig. + cmd = "ip -o addr" + self.Console.ePopen(cmd, self.IPaddrFinished, [iface,callback]) + def IPaddrFinished(self, result, retval, extra_args): (iface, callback ) = extra_args data = { 'up': False, 'dhcp': False, 'preup' : False, 'postdown' : False } globalIPpattern = re_compile("scope global") ipRegexp = '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' - ipLinePattern = re_compile('inet ' + ipRegexp +'/') + netRegexp = '[0-9]{1,2}' + macRegexp = '[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[a-z0-9]{2}\:[a-z0-9]{2}\:[a-z0-9]{2}' + ipLinePattern = re_compile('inet ' + ipRegexp + '/') ipPattern = re_compile(ipRegexp) - + netmaskLinePattern = re_compile('/' + netRegexp + ' brd ') + netmaskPattern = re_compile(netRegexp) + bcastLinePattern = re_compile(' brd ' + ipRegexp) + upPattern = re_compile('UP') + macPattern = re_compile('[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[a-z0-9]{2}\:[a-z0-9]{2}\:[a-z0-9]{2}') + macLinePattern = re_compile('link/ether ' + macRegexp) + for line in result.splitlines(): split = line.strip().split(' ',2) + if (split[1][:-1] == iface): + up = self.regExpMatch(upPattern, split[2]) + mac = self.regExpMatch(macPattern, self.regExpMatch(macLinePattern, split[2])) + if up is not None: + data['up'] = True + if iface is not 'lo': + self.configuredInterfaces.append(iface) + if mac is not None: + data['mac'] = mac if (split[1] == iface): if re_search(globalIPpattern, split[2]): ip = self.regExpMatch(ipPattern, self.regExpMatch(ipLinePattern, split[2])) + netmask = self.calc_netmask(self.regExpMatch(netmaskPattern, self.regExpMatch(netmaskLinePattern, split[2]))) + bcast = self.regExpMatch(ipPattern, self.regExpMatch(bcastLinePattern, split[2])) if ip is not None: data['ip'] = self.convertIP(ip) + if netmask is not None: + data['netmask'] = self.convertIP(netmask) + if bcast is not None: + data['bcast'] = self.convertIP(bcast) + if not data.has_key('ip'): data['dhcp'] = True data['ip'] = [0, 0, 0, 0] data['netmask'] = [0, 0, 0, 0] data['gateway'] = [0, 0, 0, 0] - cmd = "ifconfig " + iface - self.Console.ePopen(cmd, self.ifconfigFinished, [iface, data, callback]) - - def getDataForInterface(self, iface,callback): - #get ip out of ip addr, as avahi sometimes overrides it in ifconfig. - cmd = "ip -o addr" - self.Console.ePopen(cmd, self.IPaddrFinished, [iface,callback]) - - def ifconfigFinished(self, result, retval, extra_args ): - (iface, data, callback ) = extra_args - ipRegexp = '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' - ipLinePattern = re_compile('inet addr:' + ipRegexp) - netmaskLinePattern = re_compile('Mask:' + ipRegexp) - bcastLinePattern = re_compile('Bcast:' + ipRegexp) - ipPattern = re_compile(ipRegexp) - upPattern = re_compile('UP ') - macPattern = re_compile('[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{2}') - - for line in result.splitlines(): - #ip = self.regExpMatch(ipPattern, self.regExpMatch(ipLinePattern, line)) - netmask = self.regExpMatch(ipPattern, self.regExpMatch(netmaskLinePattern, line)) - bcast = self.regExpMatch(ipPattern, self.regExpMatch(bcastLinePattern, line)) - up = self.regExpMatch(upPattern, line) - mac = self.regExpMatch(macPattern, line) - #if ip is not None: - # data['ip'] = self.convertIP(ip) - if netmask is not None: - data['netmask'] = self.convertIP(netmask) - if bcast is not None: - data['bcast'] = self.convertIP(bcast) - if up is not None: - data['up'] = True - if iface is not 'lo': - self.configuredInterfaces.append(iface) - if mac is not None: - data['mac'] = mac - cmd = "route -n | grep " + iface - self.Console.ePopen(cmd,self.routeFinished,[iface,data,callback]) + self.Console.ePopen(cmd,self.routeFinished, [iface, data, callback]) def routeFinished(self, result, retval, extra_args): (iface, data, callback) = extra_args @@ -119,16 +124,7 @@ class Network: gateway = self.regExpMatch(ipPattern, line[16:31]) if gateway is not None: data['gateway'] = self.convertIP(gateway) - - for line in result.splitlines(): #get real netmask in case avahi has overridden ifconfig netmask - split = line.strip().split(' ') - if re_search(ipPattern, split[0]): - foundip = self.convertIP(split[0]) - if (foundip[0] == data['ip'][0] and foundip[1] == data['ip'][1]): - if re_search(ipPattern, split[4]): - mask = self.regExpMatch(ipPattern, self.regExpMatch(ipLinePattern, split[4])) - if mask is not None: - data['netmask'] = self.convertIP(mask) + self.ifaces[iface] = data self.loadNetworkConfig(iface,callback) @@ -203,7 +199,7 @@ class Network: ifaces[currif]["gateway"] = map(int, split[1].split('.')) if self.ifaces[currif].has_key("gateway"): if self.ifaces[currif]["gateway"] != ifaces[currif]["gateway"] and ifaces[currif]["dhcp"] == False: - self.ifaces[currif]["gateway"] = map(int, split[1].split('.')) + self.ifaces[currif]["gateway"] = map(int, split[1].split('.')) if (split[0] == "pre-up"): if self.ifaces[currif].has_key("preup"): self.ifaces[currif]["preup"] = i @@ -215,7 +211,9 @@ class Network: if self.ifaces.has_key(ifacename): self.ifaces[ifacename]["dhcp"] = iface["dhcp"] if len(self.Console.appContainers) == 0: - # load ns only once + # save configured interfacelist + self.configuredNetworkAdapters = self.configuredInterfaces + # load ns only once self.loadNameserverConfig() print "read configured interfac:", ifaces print "self.ifaces after loading:", self.ifaces @@ -244,16 +242,39 @@ class Network: print "nameservers:", self.nameservers - def deactivateNetworkConfig(self): + def deactivateNetworkConfig(self, callback = None): + self.deactivateConsole = Console() + self.commands = [] + self.commands.append("/etc/init.d/avahi-daemon stop") for iface in self.ifaces.keys(): - system("ip addr flush " + iface) - system("/etc/init.d/networking stop") - system("killall -9 udhcpc") - system("rm /var/run/udhcpc*") + cmd = "ip addr flush " + iface + self.commands.append(cmd) + self.commands.append("/etc/init.d/networking stop") + self.commands.append("killall -9 udhcpc") + self.commands.append("rm /var/run/udhcpc*") + self.deactivateConsole.eBatch(self.commands, self.deactivateNetworkFinished, callback, debug=True) + + def deactivateNetworkFinished(self,extra_args): + callback = extra_args + if len(self.deactivateConsole.appContainers) == 0: + if callback is not None: + callback(True) - def activateNetworkConfig(self): - system("/etc/init.d/networking start") - self.getInterfaces() + def activateNetworkConfig(self, callback = None): + self.activateConsole = Console() + self.commands = [] + self.commands.append("/etc/init.d/networking start") + self.commands.append("/etc/init.d/avahi-daemon start") + self.activateConsole.eBatch(self.commands, self.activateNetworkFinished, callback, debug=True) + + def activateNetworkFinished(self,extra_args): + callback = extra_args + if len(self.activateConsole.appContainers) == 0: + if callback is not None: + callback(True) + + def getConfiguredAdapters(self): + return self.configuredNetworkAdapters def getNumberOfAdapters(self): return len(self.ifaces) @@ -312,7 +333,24 @@ class Network: if self.nameservers[i] == oldnameserver: self.nameservers[i] = newnameserver - def writeDefaultNetworkConfig(self,mode='lan'): + def resetNetworkConfig(self, mode='lan', callback = None): + self.resetNetworkConsole = Console() + self.commands = [] + self.commands.append("/etc/init.d/avahi-daemon stop") + for iface in self.ifaces.keys(): + cmd = "ip addr flush " + iface + self.commands.append(cmd) + self.commands.append("/etc/init.d/networking stop") + self.commands.append("killall -9 udhcpc") + self.commands.append("rm /var/run/udhcpc*") + self.resetNetworkConsole.eBatch(self.commands, self.resetNetworkFinishedCB, [mode, callback], debug=True) + + def resetNetworkFinishedCB(self, extra_args): + (mode, callback) = extra_args + if len(self.resetNetworkConsole.appContainers) == 0: + self.writeDefaultNetworkConfig(mode, callback) + + def writeDefaultNetworkConfig(self,mode='lan', callback = None): fp = file('/etc/network/interfaces', 'w') fp.write("# automatically generated by enigma 2\n# do NOT change manually!\n\n") fp.write("auto lo\n") @@ -329,50 +367,95 @@ class Network: fp.write("\n") fp.close() - def resetNetworkConfig(self,mode='lan'): - self.deactivateNetworkConfig() - self.writeDefaultNetworkConfig(mode) + self.resetNetworkConsole = Console() + self.commands = [] if mode == 'wlan': - system("ifconfig eth0 down") - system("ifconfig ath0 down") - system("ifconfig wlan0 up") + self.commands.append("ifconfig eth0 down") + self.commands.append("ifconfig ath0 down") + self.commands.append("ifconfig wlan0 up") if mode == 'wlan-mpci': - system("ifconfig eth0 down") - system("ifconfig wlan0 down") - system("ifconfig ath0 up") + self.commands.append("ifconfig eth0 down") + self.commands.append("ifconfig wlan0 down") + self.commands.append("ifconfig ath0 up") if mode == 'lan': - system("ifconfig eth0 up") - system("ifconfig wlan0 down") - system("ifconfig ath0 down") - self.getInterfaces() - - def checkNetworkState(self): - # www.dream-multimedia-tv.de, www.heise.de, www.google.de - return system("ping -c 1 82.149.226.170") == 0 or \ - system("ping -c 1 193.99.144.85") == 0 or \ - system("ping -c 1 209.85.135.103") == 0 - - def restartNetwork(self): - iNetwork.deactivateNetworkConfig() - iNetwork.activateNetworkConfig() + self.commands.append("ifconfig eth0 up") + self.commands.append("ifconfig wlan0 down") + self.commands.append("ifconfig ath0 down") + self.commands.append("/etc/init.d/avahi-daemon start") + self.resetNetworkConsole.eBatch(self.commands, self.resetNetworkFinished, [mode,callback], debug=True) + + def resetNetworkFinished(self,extra_args): + (mode, callback) = extra_args + if len(self.resetNetworkConsole.appContainers) == 0: + if callback is not None: + callback(True,mode) + + def checkNetworkState(self,statecallback): + # www.dream-multimedia-tv.de, www.heise.de, www.google.de + cmd1 = "ping -c 1 82.149.226.170" + cmd2 = "ping -c 1 193.99.144.85" + cmd3 = "ping -c 1 209.85.135.103" + self.PingConsole = Console() + self.PingConsole.ePopen(cmd1, self.checkNetworkStateFinished,statecallback) + self.PingConsole.ePopen(cmd2, self.checkNetworkStateFinished,statecallback) + self.PingConsole.ePopen(cmd3, self.checkNetworkStateFinished,statecallback) + + def checkNetworkStateFinished(self, result, retval,extra_args): + (statecallback) = extra_args + if self.PingConsole is not None: + if retval == 0: + self.PingConsole = None + statecallback(self.NetworkState) + else: + self.NetworkState += 1 + if len(self.PingConsole.appContainers) == 0: + statecallback(self.NetworkState) + + def restartNetwork(self,callback): + self.restartConsole = Console() + self.commands = [] + self.commands.append("/etc/init.d/avahi-daemon stop") + for iface in self.ifaces.keys(): + cmd = "ip addr flush " + iface + self.commands.append(cmd) + self.commands.append("/etc/init.d/networking stop") + self.commands.append("killall -9 udhcpc") + self.commands.append("rm /var/run/udhcpc*") + self.commands.append("/etc/init.d/networking start") + self.commands.append("/etc/init.d/avahi-daemon start") + self.restartConsole.eBatch(self.commands, self.restartNetworkFinished, callback, debug=True) + + def restartNetworkFinished(self,extra_args): + callback = extra_args + if len(self.restartConsole.appContainers) == 0: + callback(True) def getLinkState(self,iface,callback): - self.dataAvail = callback cmd = self.ethtool_bin + " " + iface - self.container.appClosed.append(self.cmdFinished) - self.container.dataAvail.append(callback) - self.container.execute(cmd) - - def cmdFinished(self,retval): - self.container.appClosed.remove(self.cmdFinished) - self.container.dataAvail.remove(self.dataAvail) - - def stopContainer(self): - self.container.kill() - - def ContainerRunning(self): - return self.container.running() - + self.LinkConsole = Console() + self.LinkConsole.ePopen(cmd, self.getLinkStateFinished,callback) + + def getLinkStateFinished(self, result, retval,extra_args): + (callback) = extra_args + if self.LinkConsole is not None: + if len(self.LinkConsole.appContainers) == 0: + callback(result) + + def stopLinkStateConsole(self): + if self.LinkConsole is not None: + self.LinkConsole = None + + def stopRestartConsole(self): + if self.restartConsole is not None: + self.restartConsole = None + + def RestartConsoleRunning(self): + if self.restartConsole is not None: + if len(self.restartConsole.appContainers) == 0: + return False + else: + return True + def checkforInterface(self,iface): if self.getAdapterAttribute(iface, 'up') is True: return True @@ -384,13 +467,37 @@ class Network: else: return False - def checkDNSLookup(self): - return system("nslookup www.dream-multimedia-tv.de") == 0 or \ - system("nslookup www.heise.de") == 0 or \ - system("nslookup www.google.de") + def checkDNSLookup(self,statecallback): + cmd1 = "nslookup www.dream-multimedia-tv.de" + cmd2 = "nslookup www.heise.de" + cmd3 = "nslookup www.google.de" + self.DnsConsole = Console() + self.DnsConsole.ePopen(cmd1, self.checkDNSLookupFinished,statecallback) + self.DnsConsole.ePopen(cmd2, self.checkDNSLookupFinished,statecallback) + self.DnsConsole.ePopen(cmd3, self.checkDNSLookupFinished,statecallback) + + def checkDNSLookupFinished(self, result, retval,extra_args): + (statecallback) = extra_args + if self.DnsConsole is not None: + if retval == 0: + self.DnsConsole = None + statecallback(self.DnsState) + else: + self.DnsState += 1 + if len(self.DnsConsole.appContainers) == 0: + statecallback(self.DnsState) def deactivateInterface(self,iface): - system("ifconfig " + iface + " down") + self.deactivateInterfaceConsole = Console() + self.commands = [] + cmd1 = "ip addr flush " + iface + cmd2 = "ifconfig " + iface + " down" + self.commands.append(cmd1) + self.commands.append(cmd2) + self.deactivateInterfaceConsole.eBatch(self.commands, self.deactivateInterfaceFinished, extra_args = None, debug=True) + + def deactivateInterfaceFinished(self,extra_args): + pass def detectWlanModule(self): self.wlanmodule = None @@ -411,6 +518,20 @@ class Network: self.wlanmodule = 'zydas' return self.wlanmodule + def calc_netmask(self,nmask): + from struct import pack, unpack + from socket import inet_ntoa, inet_aton + mask = 1L<<31 + xnet = (1L<<32)-1 + cidr_range = range(0, 32) + cidr = long(nmask) + if cidr not in cidr_range: + print 'cidr invalid: %d' % cidr + return None + else: + nm = ((1L<L', nm))) + return netmask iNetwork = Network() diff --git a/lib/python/Screens/Makefile.am b/lib/python/Screens/Makefile.am old mode 100644 new mode 100755 index 186c6f32..a3cf70bb --- a/lib/python/Screens/Makefile.am +++ b/lib/python/Screens/Makefile.am @@ -13,5 +13,5 @@ install_PYTHON = \ TimerSelection.py PictureInPicture.py TimeDateInput.py \ SubtitleDisplay.py SubservicesQuickzap.py ParentalControlSetup.py NumericalTextInputHelpDialog.py \ SleepTimerEdit.py Ipkg.py RdsDisplay.py Globals.py DefaultWizard.py \ - SessionGlobals.py LocationBox.py WizardLanguage.py TaskView.py Rc.py + SessionGlobals.py LocationBox.py WizardLanguage.py TaskView.py Rc.py VirtualKeyBoard.py diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py old mode 100644 new mode 100755 index 862bce46..c26302fa --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -1,25 +1,25 @@ from Screen import Screen -from Components.ActionMap import ActionMap,NumberActionMap from Screens.MessageBox import MessageBox from Screens.InputBox import InputBox from Screens.Standby import * +from Screens.VirtualKeyBoard import VirtualKeyBoard +from Screens.HelpMenu import HelpableScreen from Components.Network import iNetwork from Components.Label import Label,MultiColorLabel from Components.Pixmap import Pixmap,MultiPixmap from Components.MenuList import MenuList -from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigText, ConfigSelection, getConfigListEntry, ConfigNothing +from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigText, ConfigPassword, ConfigSelection, getConfigListEntry, ConfigNothing from Components.ConfigList import ConfigListScreen from Components.PluginComponent import plugins from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest +from Components.ActionMap import ActionMap, NumberActionMap, HelpableActionMap +from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE +from Tools.LoadPixmap import LoadPixmap from Plugins.Plugin import PluginDescriptor -from enigma import eTimer +from enigma import eTimer, ePoint, eSize, RT_HALIGN_LEFT, eListboxPythonMultiContent, gFont from os import path as os_path, system as os_system, unlink from re import compile as re_compile, search as re_search -from Tools.Directories import resolveFilename, SCOPE_PLUGINS -from Tools.Directories import SCOPE_SKIN_IMAGE,SCOPE_PLUGINS, resolveFilename -from Tools.LoadPixmap import LoadPixmap -from enigma import RT_HALIGN_LEFT, eListboxPythonMultiContent, gFont class InterfaceList(MenuList): def __init__(self, list, enableWrapAround=False): @@ -30,11 +30,13 @@ class InterfaceList(MenuList): def InterfaceEntryComponent(index,name,default,active ): res = [ (index) ] res.append(MultiContentEntryText(pos=(80, 5), size=(430, 25), font=0, text=name)) - if default is True: - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue.png")) - if default is False: - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue_off.png")) - res.append(MultiContentEntryPixmapAlphaTest(pos=(10, 5), size=(25, 25), png = png)) + num_configured_if = len(iNetwork.getConfiguredAdapters()) + if num_configured_if >= 2: + if default is True: + png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue.png")) + if default is False: + png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue_off.png")) + res.append(MultiContentEntryPixmapAlphaTest(pos=(10, 5), size=(25, 25), png = png)) if active is True: png2 = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_on.png")) if active is False: @@ -43,41 +45,64 @@ def InterfaceEntryComponent(index,name,default,active ): return res -class NetworkAdapterSelection(Screen): +class NetworkAdapterSelection(Screen,HelpableScreen): def __init__(self, session): Screen.__init__(self, session) - + HelpableScreen.__init__(self) + self.wlan_errortext = _("No working wireless networkadapter found.\nPlease verify that you have attached a compatible WLAN USB Stick and your Network is configured correctly.") self.lan_errortext = _("No working local networkadapter found.\nPlease verify that you have attached a network cable and your Network is configured correctly.") + self.oktext = _("Press OK on your remote control to continue.") + self.restartLanRef = None self["ButtonBluetext"] = Label(_("Set as default Interface")) + self["ButtonBlue"] = Pixmap() self["ButtonRedtext"] = Label(_("Close")) self["introduction"] = Label(_("Press OK to edit the settings.")) self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()] - + if len(self.adapters) == 0: self.onFirstExecBegin.append(self.NetworkFallback) - + + self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", + { + "cancel": (self.close, _("exit networkinterface list")), + "ok": (self.okbuttonClick, _("select interface")), + }) + + self["ColorActions"] = HelpableActionMap(self, "ColorActions", + { + "red": (self.close, _("exit networkinterface list")), + }) + + self["DefaultInterfaceAction"] = HelpableActionMap(self, "ColorActions", + { + "blue": (self.setDefaultInterface, [_("Set interface as default Interface"),_("* Only available if more then one interface is active.")] ), + }) + self.list = [] self["list"] = InterfaceList(self.list) self.updateList() - self["actions"] = ActionMap(["OkCancelActions", "ColorActions"], - { - "ok": self.okbuttonClick, - "cancel": self.close, - "blue": self.setDefaultInterface, - "red": self.close - }, -2) - + if len(self.adapters) == 1: self.onFirstExecBegin.append(self.okbuttonClick) - + self.onClose.append(self.cleanup) + def updateList(self): iNetwork.getInterfaces() self.list = [] default_gw = None - num_configured_if = len(iNetwork.configuredInterfaces) + num_configured_if = len(iNetwork.getConfiguredAdapters()) + if num_configured_if >= 2: + self["ButtonBlue"].show() + self["ButtonBluetext"].show() + self["DefaultInterfaceAction"].setEnabled(True) + else: + self["ButtonBlue"].hide() + self["ButtonBluetext"].hide() + self["DefaultInterfaceAction"].setEnabled(False) + if num_configured_if < 2 and os_path.exists("/etc/default_gw"): unlink("/etc/default_gw") @@ -86,7 +111,7 @@ class NetworkAdapterSelection(Screen): result = fp.read() fp.close() default_gw = result - + if len(self.adapters) == 0: # no interface available => display only eth0 self.list.append(InterfaceEntryComponent("eth0",iNetwork.getFriendlyAdapterName('eth0'),True,True )) else: @@ -106,24 +131,22 @@ class NetworkAdapterSelection(Screen): selection = self["list"].getCurrent() num_if = len(self.list) old_default_gw = None + num_configured_if = len(iNetwork.getConfiguredAdapters()) if os_path.exists("/etc/default_gw"): fp = open('/etc/default_gw', 'r') old_default_gw = fp.read() fp.close() - if num_if > 1 and (not old_default_gw or old_default_gw != selection[0]): + if num_configured_if > 1 and (not old_default_gw or old_default_gw != selection[0]): fp = open('/etc/default_gw', 'w+') fp.write(selection[0]) fp.close() - iNetwork.restartNetwork() - self.updateList() - elif old_default_gw and num_if < 2: + self.restartLan() + elif old_default_gw and num_configured_if < 2: unlink("/etc/default_gw") - iNetwork.restartNetwork() - self.updateList() + self.restartLan() def okbuttonClick(self): selection = self["list"].getCurrent() - print "selection",selection if selection is not None: self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, selection[0]) @@ -134,25 +157,47 @@ class NetworkAdapterSelection(Screen): self.updateList() def NetworkFallback(self): - if iNetwork.configuredInterfaces.has_key('wlan0') is True: + if iNetwork.configuredNetworkAdapters.has_key('wlan0') is True: self.session.openWithCallback(self.ErrorMessageClosed, MessageBox, self.wlan_errortext, type = MessageBox.TYPE_INFO,timeout = 10) - if iNetwork.configuredInterfaces.has_key('ath0') is True: + if iNetwork.configuredNetworkAdapters.has_key('ath0') is True: self.session.openWithCallback(self.ErrorMessageClosed, MessageBox, self.wlan_errortext, type = MessageBox.TYPE_INFO,timeout = 10) else: self.session.openWithCallback(self.ErrorMessageClosed, MessageBox, self.lan_errortext, type = MessageBox.TYPE_INFO,timeout = 10) def ErrorMessageClosed(self, *ret): - if iNetwork.configuredInterfaces.has_key('wlan0') is True: + if iNetwork.configuredNetworkAdapters.has_key('wlan0') is True: self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, 'wlan0') - elif iNetwork.configuredInterfaces.has_key('ath0') is True: + elif iNetwork.configuredNetworkAdapters.has_key('ath0') is True: self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, 'ath0') else: self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, 'eth0') -class NameserverSetup(Screen, ConfigListScreen): + def cleanup(self): + iNetwork.stopLinkStateConsole() + iNetwork.stopRestartConsole() + + def restartLan(self): + iNetwork.restartNetwork(self.restartLanDataAvail) + self.restartLanRef = self.session.openWithCallback(self.restartfinishedCB, MessageBox, _("Please wait while we configure your network..."), type = MessageBox.TYPE_INFO, enable_input = False) + + def restartLanDataAvail(self, data): + if data is True: + iNetwork.getInterfaces(self.getInterfacesDataAvail) + + def getInterfacesDataAvail(self, data): + if data is True: + self.restartLanRef.close(True) + + def restartfinishedCB(self,data): + if data is True: + self.updateList() + self.session.open(MessageBox, _("Finished configuring your network"), type = MessageBox.TYPE_INFO, timeout = 10, default = False) + + +class NameserverSetup(Screen, ConfigListScreen, HelpableScreen): def __init__(self, session): Screen.__init__(self, session) - iNetwork.getInterfaces() + HelpableScreen.__init__(self) self.backupNameserverList = iNetwork.getNameserverList()[:] print "backup-list:", self.backupNameserverList @@ -162,14 +207,19 @@ class NameserverSetup(Screen, ConfigListScreen): self["introduction"] = Label(_("Press OK to activate the settings.")) self.createConfig() - self["actions"] = ActionMap(["OkCancelActions", "ColorActions"], - { - "ok": self.ok, - "cancel": self.cancel, - "red": self.cancel, - "green": self.add, - "yellow": self.remove - }, -2) + self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", + { + "cancel": (self.cancel, _("exit nameserver configuration")), + "ok": (self.ok, _("activate current configuration")), + }) + + self["ColorActions"] = HelpableActionMap(self, "ColorActions", + { + "red": (self.cancel, _("exit nameserver configuration")), + "green": (self.add, _("add a nameserver entry")), + "yellow": (self.remove, _("remove a nameserver entry")), + }) + self.list = [] ConfigListScreen.__init__(self, self.list) @@ -222,31 +272,51 @@ class NameserverSetup(Screen, ConfigListScreen): self.createConfig() self.createSetup() -class AdapterSetup(Screen, ConfigListScreen): +class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): def __init__(self, session, iface,essid=None, aplist=None): Screen.__init__(self, session) + HelpableScreen.__init__(self) self.session = session self.iface = iface self.essid = essid self.aplist = aplist self.extended = None + self.applyConfigRef = None + self.finished_cb = None + self.oktext = _("Press OK on your remote control to continue.") self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up") - iNetwork.getInterfaces() - - self.createConfig() + #iNetwork.getInterfaces() - self["actions"] = NumberActionMap(["SetupActions", "ColorActions"], + self.createConfig() + + self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", + { + "cancel": (self.close, _("exit networkadapter setup menu")), + "ok": (self.ok, _("select menu entry")), + }) + + self["ColorActions"] = HelpableActionMap(self, "ColorActions", + { + "red": (self.cancel, _("exit networkadapter configuration")), + "blue": (self.KeyBlue, _("open nameserver configuration")), + }) + + self["VirtualKB"] = HelpableActionMap(self, "ColorActions", + { + "green": (self.KeyGreen, [_("open virtual keyboard input help"),_("* Only available when entering hidden ssid or network key")] ), + }) + + self["actions"] = NumberActionMap(["SetupActions"], { "ok": self.ok, - "cancel": self.cancel, - "red": self.cancel, - "blue": self.KeyBlue, }, -2) + self.list = [] ConfigListScreen.__init__(self, self.list,session = self.session) self.createSetup() self.onLayoutFinish.append(self.layoutFinished) + self.onClose.append(self.cleanup) self["DNS1text"] = Label(_("Primary DNS")) self["DNS2text"] = Label(_("Secondary DNS")) @@ -271,56 +341,81 @@ class AdapterSetup(Screen, ConfigListScreen): self["ButtonRedtext"] = Label(_("Close")) self["ButtonBlue"] = Pixmap() self["ButtonBluetext"] = Label(_("Edit DNS")) + self["ButtonGreen"] = Pixmap() + self["VKeyIcon"] = Pixmap() + self["HelpWindow"] = Pixmap() def layoutFinished(self): self["DNS1"].setText(self.primaryDNS.getText()) self["DNS2"].setText(self.secondaryDNS.getText()) if self.ipConfigEntry.getText() is not None: - self["IP"].setText(self.ipConfigEntry.getText()) + if self.ipConfigEntry.getText() == "0.0.0.0": + self["IP"].setText(_("N/A")) + else: + self["IP"].setText(self.ipConfigEntry.getText()) else: - self["IP"].setText([0,0,0,0]) - self["Mask"].setText(self.netmaskConfigEntry.getText()) + self["IP"].setText(_("N/A")) + if self.netmaskConfigEntry.getText() is not None: + if self.netmaskConfigEntry.getText() == "0.0.0.0": + self["Mask"].setText(_("N/A")) + else: + self["Mask"].setText(self.netmaskConfigEntry.getText()) + else: + self["IP"].setText(_("N/A")) if iNetwork.getAdapterAttribute(self.iface, "gateway"): - self["Gateway"].setText(self.gatewayConfigEntry.getText()) + if self.gatewayConfigEntry.getText() == "0.0.0.0": + self["Gateway"].setText(_("N/A")) + else: + self["Gateway"].setText(self.gatewayConfigEntry.getText()) else: self["Gateway"].hide() self["Gatewaytext"].hide() self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface)) + self["ButtonGreen"].hide() + self["VKeyIcon"].hide() + self["VirtualKB"].setEnabled(False) + self["HelpWindow"].hide() def createConfig(self): self.InterfaceEntry = None self.dhcpEntry = None self.gatewayEntry = None - self.SSIDscan = None + self.hiddenSSID = None self.wlanSSID = None - self.manualwlanSSID = None self.encryptionEnabled = None self.encryptionKey = None + self.encryptionType = None self.nwlist = None + self.encryptionlist = None + self.weplist = None self.wsconfig = None self.default = None if self.iface == "wlan0" or self.iface == "ath0" : from Plugins.SystemPlugins.WirelessLan.Wlan import wpaSupplicant,Wlan + self.w = Wlan(self.iface) self.ws = wpaSupplicant() - list = [] - list.append(_("WEP")) - list.append(_("WPA")) - list.append(_("WPA2")) + self.encryptionlist = [] + self.encryptionlist.append(("WEP", _("WEP"))) + self.encryptionlist.append(("WPA", _("WPA"))) + self.encryptionlist.append(("WPA2", _("WPA2"))) + self.encryptionlist.append(("WPA/WPA2", _("WPA or WPA2"))) + self.weplist = [] + self.weplist.append("ASCII") + self.weplist.append("HEX") if self.aplist is not None: self.nwlist = self.aplist self.nwlist.sort(key = lambda x: x[0]) else: self.nwlist = [] - self.w = None self.aps = None try: - self.w = Wlan(self.iface) self.aps = self.w.getNetworkList() if self.aps is not None: print "[NetworkSetup.py] got Accespoints!" - for ap in aps: - a = aps[ap] + print self.aps + for ap in self.aps: + a = self.aps[ap] if a['active']: if a['essid'] == "": a['essid'] = a['bssid'] @@ -330,17 +425,23 @@ class AdapterSetup(Screen, ConfigListScreen): self.nwlist.append("No Networks found") self.wsconfig = self.ws.loadConfig() - self.default = self.essid or self.wsconfig['ssid'] + if self.essid is not None: # ssid from wlan scan + self.default = self.essid + else: + self.default = self.wsconfig['ssid'] + + if "hidden..." not in self.nwlist: + self.nwlist.append("hidden...") if self.default not in self.nwlist: self.nwlist.append(self.default) - config.plugins.wlan.essidscan = NoSave(ConfigYesNo(default = self.wsconfig['ssidscan'])) - if self.wsconfig['ssidscan'] is True: - config.plugins.wlan.essid = NoSave(ConfigSelection(self.nwlist, default = self.default )) - else: - config.plugins.wlan.essid = NoSave(ConfigText(default = self.default, visible_width = 50, fixed_size = False)) + + config.plugins.wlan.essid = NoSave(ConfigSelection(self.nwlist, default = self.default )) + config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = self.wsconfig['hiddenessid'], visible_width = 50, fixed_size = False)) + config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = self.wsconfig['encryption'] )) - config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = self.wsconfig['encryption_type'] )) - config.plugins.wlan.encryption.psk = NoSave(ConfigText(default = self.wsconfig['key'], visible_width = 50, fixed_size = False)) + config.plugins.wlan.encryption.type = NoSave(ConfigSelection(self.encryptionlist, default = self.wsconfig['encryption_type'] )) + config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(self.weplist, default = self.wsconfig['encryption_wepkeytype'] )) + config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = self.wsconfig['key'], visible_width = 50, fixed_size = False)) self.activateInterfaceEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "up") or False)) self.dhcpConfigEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "dhcp") or False)) @@ -382,26 +483,56 @@ class AdapterSetup(Screen, ConfigListScreen): self.configStrings = p.__call__["configStrings"] else: self.configStrings = None - self.SSIDscan = getConfigListEntry(_("Automatic SSID lookup"), config.plugins.wlan.essidscan) - self.list.append(self.SSIDscan) - self.wlanSSID = getConfigListEntry(_("Network SSID"), config.plugins.wlan.essid) - self.list.append(self.wlanSSID) + if config.plugins.wlan.essid.value == 'hidden...': + self.wlanSSID = getConfigListEntry(_("Network SSID"), config.plugins.wlan.essid) + self.list.append(self.wlanSSID) + self.hiddenSSID = getConfigListEntry(_("Hidden network SSID"), config.plugins.wlan.hiddenessid) + self.list.append(self.hiddenSSID) + else: + self.wlanSSID = getConfigListEntry(_("Network SSID"), config.plugins.wlan.essid) + self.list.append(self.wlanSSID) self.encryptionEnabled = getConfigListEntry(_("Encryption"), config.plugins.wlan.encryption.enabled) self.list.append(self.encryptionEnabled) if config.plugins.wlan.encryption.enabled.value: - self.list.append(getConfigListEntry(_("Encryption Type"), config.plugins.wlan.encryption.type)) - self.encryptionKey = getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk) - self.list.append(self.encryptionKey) + self.encryptionType = getConfigListEntry(_("Encryption Type"), config.plugins.wlan.encryption.type) + self.list.append(self.encryptionType) + if config.plugins.wlan.encryption.type.value == 'WEP': + self.list.append(getConfigListEntry(_("Encryption Keytype"), config.plugins.wlan.encryption.wepkeytype)) + self.encryptionKey = getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk) + self.list.append(self.encryptionKey) + else: + self.encryptionKey = getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk) + self.list.append(self.encryptionKey) + self["config"].list = self.list self["config"].l.setList(self.list) + if not self.selectionChanged in self["config"].onSelectionChanged: + self["config"].onSelectionChanged.append(self.selectionChanged) def KeyBlue(self): self.session.openWithCallback(self.NameserverSetupClosed, NameserverSetup) + def KeyGreen(self): + if self.iface == "wlan0" or self.iface == "ath0" : + if self["config"].getCurrent() == self.hiddenSSID: + if config.plugins.wlan.essid.value == 'hidden...': + self.session.openWithCallback(self.VirtualKeyBoardSSIDCallback, VirtualKeyBoard, title = (_("Enter WLAN networkname/SSID:")), text = config.plugins.wlan.essid.value) + if self["config"].getCurrent() == self.encryptionKey: + self.session.openWithCallback(self.VirtualKeyBoardKeyCallback, VirtualKeyBoard, title = (_("Enter WLAN passphrase/key:")), text = config.plugins.wlan.encryption.psk.value) + + def VirtualKeyBoardSSIDCallback(self, callback = None): + if callback is not None and len(callback): + config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = callback, visible_width = 50, fixed_size = False)) + self.createSetup() + + def VirtualKeyBoardKeyCallback(self, callback = None): + if callback is not None and len(callback): + config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = callback, visible_width = 50, fixed_size = False)) + self.createSetup() + def newConfig(self): - print self["config"].getCurrent() if self["config"].getCurrent() == self.InterfaceEntry: self.createSetup() if self["config"].getCurrent() == self.dhcpEntry: @@ -409,15 +540,12 @@ class AdapterSetup(Screen, ConfigListScreen): if self["config"].getCurrent() == self.gatewayEntry: self.createSetup() if self.iface == "wlan0" or self.iface == "ath0" : - if self["config"].getCurrent() == self.SSIDscan: - if config.plugins.wlan.essidscan.value is True: - config.plugins.wlan.essid = NoSave(ConfigSelection(self.nwlist, default = self.default )) - else: - config.plugins.wlan.essid = NoSave(ConfigText(default = self.default, visible_width = 50, fixed_size = False)) + if self["config"].getCurrent() == self.wlanSSID: self.createSetup() if self["config"].getCurrent() == self.encryptionEnabled: self.createSetup() - + if self["config"].getCurrent() == self.encryptionType: + self.createSetup() def keyLeft(self): ConfigListScreen.keyLeft(self) self.newConfig() @@ -426,24 +554,92 @@ class AdapterSetup(Screen, ConfigListScreen): ConfigListScreen.keyRight(self) self.newConfig() + def selectionChanged(self): + current = self["config"].getCurrent() + if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...': + helpwindowpos = self["HelpWindow"].getPosition() + if current[1].help_window.instance is not None: + current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) + self["ButtonGreen"].show() + self["VKeyIcon"].show() + self["VirtualKB"].setEnabled(True) + elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value: + helpwindowpos = self["HelpWindow"].getPosition() + if current[1].help_window.instance is not None: + current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) + self["ButtonGreen"].show() + self["VKeyIcon"].show() + self["VirtualKB"].setEnabled(True) + else: + self["ButtonGreen"].hide() + self["VKeyIcon"].hide() + self["VirtualKB"].setEnabled(False) + def ok(self): - iNetwork.setAdapterAttribute(self.iface, "up", self.activateInterfaceEntry.value) - iNetwork.setAdapterAttribute(self.iface, "dhcp", self.dhcpConfigEntry.value) - iNetwork.setAdapterAttribute(self.iface, "ip", self.ipConfigEntry.value) - iNetwork.setAdapterAttribute(self.iface, "netmask", self.netmaskConfigEntry.value) - if self.hasGatewayConfigEntry.value: - iNetwork.setAdapterAttribute(self.iface, "gateway", self.gatewayConfigEntry.value) + current = self["config"].getCurrent() + if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...': + if current[1].help_window.instance is not None: + current[1].help_window.instance.hide() + elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value: + if current[1].help_window.instance is not None: + current[1].help_window.instance.hide() + self.session.openWithCallback(self.applyConfig, MessageBox, (_("Are you sure you want to activate this network configuration?\n\n") + self.oktext ) ) + + def applyConfig(self, ret = False): + if (ret == True): + iNetwork.setAdapterAttribute(self.iface, "up", self.activateInterfaceEntry.value) + iNetwork.setAdapterAttribute(self.iface, "dhcp", self.dhcpConfigEntry.value) + iNetwork.setAdapterAttribute(self.iface, "ip", self.ipConfigEntry.value) + iNetwork.setAdapterAttribute(self.iface, "netmask", self.netmaskConfigEntry.value) + if self.hasGatewayConfigEntry.value: + iNetwork.setAdapterAttribute(self.iface, "gateway", self.gatewayConfigEntry.value) + else: + iNetwork.removeAdapterAttribute(self.iface, "gateway") + if self.extended is not None and self.configStrings is not None: + iNetwork.setAdapterAttribute(self.iface, "configStrings", self.configStrings(self.iface)) + self.ws.writeConfig() + if self.activateInterfaceEntry.value is False: + iNetwork.deactivateInterface(self.iface) + iNetwork.writeNetworkConfig() + iNetwork.restartNetwork(self.applyConfigDataAvail) + self.applyConfigRef = self.session.openWithCallback(self.applyConfigfinishedCB, MessageBox, _("Please wait while activating your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False) else: - iNetwork.removeAdapterAttribute(self.iface, "gateway") - if self.extended is not None and self.configStrings is not None: - iNetwork.setAdapterAttribute(self.iface, "configStrings", self.configStrings(self.iface)) - self.ws.writeConfig() - if self.activateInterfaceEntry.value is False: - iNetwork.deactivateInterface(self.iface) - iNetwork.writeNetworkConfig() - iNetwork.deactivateNetworkConfig() - iNetwork.activateNetworkConfig() - self.close() + self.cancel() + + def applyConfigDataAvail(self, data): + if data is True: + iNetwork.getInterfaces(self.getInterfacesDataAvail) + + def getInterfacesDataAvail(self, data): + if data is True: + self.applyConfigRef.close(True) + + def applyConfigfinishedCB(self,data): + if data is True: + num_configured_if = len(iNetwork.getConfiguredAdapters()) + if num_configured_if >= 2: + self.session.openWithCallback(self.secondIfaceFoundCB, MessageBox, _("Your network configuration has been activated.\nA second configured interface has been found.\n\nDo you want to disable the second networkinterface?"), default = True) + else: + if self.finished_cb: + self.session.openWithCallback(self.finished_cb, MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) + else: + self.session.openWithCallback(self.ConfigfinishedCB, MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) + + def secondIfaceFoundCB(self,data): + if data is False: + self.close('ok') + else: + configuredInterfaces = configuredNetworkAdapters + for interface in configuredInterfaces: + if interface == self.iface: + continue + iNetwork.setAdapterAttribute(interface, "up", False) + iNetwork.deactivateInterface(interface) + self.applyConfig(True) + + def ConfigfinishedCB(self,data): + if data is True: + self.close('ok') def cancel(self): iNetwork.setAdapterAttribute(self.iface, "up", self.oldInterfaceState) @@ -451,11 +647,12 @@ class AdapterSetup(Screen, ConfigListScreen): if self.activateInterfaceEntry.value is False: iNetwork.deactivateInterface(self.iface) iNetwork.getInterfaces() - self.close() + self.close('cancel') - def run(self): + def runAsync(self, finished_cb): + self.finished_cb = finished_cb self.ok() - + def NameserverSetupClosed(self, *ret): iNetwork.loadNameserverConfig() nameserver = (iNetwork.getNameserverList() + [[0,0,0,0]] * 2)[0:2] @@ -463,13 +660,18 @@ class AdapterSetup(Screen, ConfigListScreen): self.secondaryDNS = NoSave(ConfigIP(default=nameserver[1])) self.createSetup() self.layoutFinished() - + + def cleanup(self): + iNetwork.stopLinkStateConsole() + iNetwork.stopRestartConsole() -class AdapterSetupConfiguration(Screen): +class AdapterSetupConfiguration(Screen, HelpableScreen): def __init__(self, session,iface): Screen.__init__(self, session) + HelpableScreen.__init__(self) self.session = session self.iface = iface + self.restartLanRef = None self.mainmenu = self.genMainMenu() self["menulist"] = MenuList(self.mainmenu) self["description"] = Label() @@ -485,8 +687,27 @@ class AdapterSetupConfiguration(Screen): self.oktext = _("Press OK on your remote control to continue.") self.reboottext = _("Your Dreambox will restart after pressing OK on your remote control.") - self.errortext = _("No working wireless interface found.\n Please verify that you have attached a compatible WLAN device or enable your local network interface.") + self.errortext = _("No working wireless interface found.\n Please verify that you have attached a compatible WLAN device or enable you local network interface.") + + self["WizardActions"] = HelpableActionMap(self, "WizardActions", + { + "up": (self.up, _("move up to previous entry")), + "down": (self.down, _("move down to next entry")), + "left": (self.left, _("move up to first entry")), + "right": (self.right, _("move down to last entry")), + }) + self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", + { + "cancel": (self.close, _("exit networkadapter setup menu")), + "ok": (self.ok, _("select menu entry")), + }) + + self["ColorActions"] = HelpableActionMap(self, "ColorActions", + { + "red": (self.close, _("exit networkadapter setup menu")), + }) + self["actions"] = NumberActionMap(["WizardActions","ShortcutActions"], { "ok": self.ok, @@ -498,9 +719,10 @@ class AdapterSetupConfiguration(Screen): "right": self.right, }, -2) - iNetwork.getInterfaces() + iNetwork.getInterfaces(self.updateStatusbar) self.onLayoutFinish.append(self.layoutFinished) - self.updateStatusbar() + self.onClose.append(self.cleanup) + self.onHide.append(self.cleanup) def ok(self): if self["menulist"].getCurrent()[1] == 'edit': @@ -549,7 +771,6 @@ class AdapterSetupConfiguration(Screen): self.wlanresponse = ifobj.getStatistics() if self.wlanresponse[0] != 19: self.session.openWithCallback(self.AdapterSetupClosed, WlanStatus,self.iface) - #self.session.open(WlanStatus,self.iface) else: # Display Wlan not available Message self.showErrorMessage() @@ -584,6 +805,7 @@ class AdapterSetupConfiguration(Screen): self.loadDescription() def loadDescription(self): + print self["menulist"].getCurrent()[1] if self["menulist"].getCurrent()[1] == 'edit': self["description"].setText(_("Edit the network configuration of your Dreambox.\n" ) + self.oktext ) if self["menulist"].getCurrent()[1] == 'test': @@ -601,7 +823,7 @@ class AdapterSetupConfiguration(Screen): if self["menulist"].getCurrent()[1][0] == 'extendedSetup': self["description"].setText(_(self["menulist"].getCurrent()[1][1]) + self.oktext ) - def updateStatusbar(self): + def updateStatusbar(self, data = None): self["IFtext"].setText(_("Network:")) self["IF"].setText(iNetwork.getFriendlyAdapterName(self.iface)) self["Statustext"].setText(_("Link:")) @@ -661,21 +883,52 @@ class AdapterSetupConfiguration(Screen): return menu def AdapterSetupClosed(self, *ret): - self.mainmenu = self.genMainMenu() - self["menulist"].l.setList(self.mainmenu) - iNetwork.getInterfaces() - self.updateStatusbar() + if ret is not None and len(ret): + if ret[0] == 'ok' and (self.iface == 'wlan0' or self.iface == 'ath0') and iNetwork.getAdapterAttribute(self.iface, "up") is True: + try: + from Plugins.SystemPlugins.WirelessLan.plugin import WlanStatus + from Plugins.SystemPlugins.WirelessLan.iwlibs import Wireless + except ImportError: + self.session.open(MessageBox, _("The wireless LAN plugin is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 ) + else: + ifobj = Wireless(self.iface) # a Wireless NIC Object + self.wlanresponse = ifobj.getStatistics() + if self.wlanresponse[0] != 19: + self.session.openWithCallback(self.AdapterSetupClosed, WlanStatus,self.iface) + else: + # Display Wlan not available Message + self.showErrorMessage() + else: + self.mainmenu = self.genMainMenu() + self["menulist"].l.setList(self.mainmenu) + iNetwork.getInterfaces(self.updateStatusbar) + else: + self.mainmenu = self.genMainMenu() + self["menulist"].l.setList(self.mainmenu) + iNetwork.getInterfaces(self.updateStatusbar) def WlanScanClosed(self,*ret): if ret[0] is not None: self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup, self.iface,ret[0],ret[1]) else: - self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup, self.iface,None,ret[0]) - + self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup, self.iface,None,None) def restartLan(self, ret = False): if (ret == True): - iNetwork.restartNetwork() + iNetwork.restartNetwork(self.restartLanDataAvail) + self.restartLanRef = self.session.openWithCallback(self.restartfinishedCB, MessageBox, _("Please wait while your network is restarting..."), type = MessageBox.TYPE_INFO, enable_input = False) + + def restartLanDataAvail(self, data): + if data is True: + iNetwork.getInterfaces(self.getInterfacesDataAvail) + + def getInterfacesDataAvail(self, data): + if data is True: + self.restartLanRef.close(True) + + def restartfinishedCB(self,data): + if data is True: + self.session.open(MessageBox, _("Finished restarting your network"), type = MessageBox.TYPE_INFO, timeout = 10, default = False) def getLinkState(self,iface): iNetwork.getLinkState(iface,self.dataAvail) @@ -693,12 +946,16 @@ class AdapterSetupConfiguration(Screen): def showErrorMessage(self): self.session.open(MessageBox, self.errortext, type = MessageBox.TYPE_INFO,timeout = 10 ) + + def cleanup(self): + iNetwork.stopLinkStateConsole() class NetworkAdapterTest(Screen): def __init__(self, session,iface): Screen.__init__(self, session) self.iface = iface + self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up") iNetwork.getInterfaces() self.setLabels() @@ -713,8 +970,8 @@ class NetworkAdapterTest(Screen): self["shortcuts"] = ActionMap(["ShortcutActions","WizardActions"], { - "red": self.close, - "back": self.close, + "red": self.cancel, + "back": self.cancel, }, -2) self["infoshortcuts"] = ActionMap(["ShortcutActions","WizardActions"], { @@ -745,6 +1002,12 @@ class NetworkAdapterTest(Screen): self.nextStepTimer = eTimer() self.nextStepTimer.callback.append(self.nextStepTimerFire) + def cancel(self): + if self.oldInterfaceState is False: + iNetwork.setAdapterAttribute(self.iface, "up", self.oldInterfaceState) + iNetwork.deactivateInterface(self.iface) + self.close() + def closeInfo(self): self["shortcuts"].setEnabled(True) self["infoshortcuts"].setEnabled(False) @@ -874,48 +1137,15 @@ class NetworkAdapterTest(Screen): def doStep5(self): self["IPtext"].setForegroundColorNum(1) - ret = iNetwork.checkNetworkState() - if ret == True: - self["IP"].setForegroundColorNum(2) - self["IP"].setText(_("confirmed")) - self["IPInfo_Check"].setPixmapNum(0) - else: - self["IP"].setForegroundColorNum(1) - self["IP"].setText(_("unconfirmed")) - self["IPInfo_Check"].setPixmapNum(1) - self["IPInfo_Check"].show() - self["IPInfo_Text"].setForegroundColorNum(1) - self.steptimer = True - self.nextStepTimer.start(3000) + self["IP"].setText(_("Please wait...")) + iNetwork.checkNetworkState(self.NetworkStatedataAvail) def doStep6(self): self.steptimer = False self.nextStepTimer.stop() self["DNStext"].setForegroundColorNum(1) - ret = iNetwork.checkDNSLookup() - if ret == True: - self["DNS"].setForegroundColorNum(2) - self["DNS"].setText(_("confirmed")) - self["DNSInfo_Check"].setPixmapNum(0) - else: - self["DNS"].setForegroundColorNum(1) - self["DNS"].setText(_("unconfirmed")) - self["DNSInfo_Check"].setPixmapNum(1) - self["DNSInfo_Check"].show() - self["DNSInfo_Text"].setForegroundColorNum(1) - - self["EditSettings_Text"].show() - self["EditSettingsButton"].setPixmapNum(1) - self["EditSettings_Text"].setForegroundColorNum(2) # active - self["EditSettingsButton"].show() - self["ButtonYellow_Check"].setPixmapNum(1) - self["ButtonGreentext"].setText(_("Restart test")) - self["ButtonGreen_Check"].setPixmapNum(0) - self["shortcutsgreen"].setEnabled(False) - self["shortcutsgreen_restart"].setEnabled(True) - self["shortcutsyellow"].setEnabled(False) - self["updown_actions"].setEnabled(True) - self.activebutton = 6 + self["DNS"].setText(_("Please wait...")) + iNetwork.checkDNSLookup(self.DNSLookupdataAvail) def KeyGreen(self): self["shortcutsgreen"].setEnabled(False) @@ -1076,9 +1306,9 @@ class NetworkAdapterTest(Screen): self["NetworkInfo_Check"].setPixmapNum(1) self["NetworkInfo_Check"].show() else: - iNetwork.getLinkState(iface,self.dataAvail) + iNetwork.getLinkState(iface,self.LinkStatedataAvail) - def dataAvail(self,data): + def LinkStatedataAvail(self,data): self.output = data.strip() result = self.output.split('\n') pattern = re_compile("Link detected: yes") @@ -1093,4 +1323,44 @@ class NetworkAdapterTest(Screen): self["NetworkInfo_Check"].setPixmapNum(1) self["NetworkInfo_Check"].show() - + def NetworkStatedataAvail(self,data): + print "DATA",data + if data <= 2: + self["IP"].setForegroundColorNum(2) + self["IP"].setText(_("confirmed")) + self["IPInfo_Check"].setPixmapNum(0) + else: + self["IP"].setForegroundColorNum(1) + self["IP"].setText(_("unconfirmed")) + self["IPInfo_Check"].setPixmapNum(1) + self["IPInfo_Check"].show() + self["IPInfo_Text"].setForegroundColorNum(1) + self.steptimer = True + self.nextStepTimer.start(3000) + + def DNSLookupdataAvail(self,data): + print "DATA",data + if data <= 2: + self["DNS"].setForegroundColorNum(2) + self["DNS"].setText(_("confirmed")) + self["DNSInfo_Check"].setPixmapNum(0) + else: + self["DNS"].setForegroundColorNum(1) + self["DNS"].setText(_("unconfirmed")) + self["DNSInfo_Check"].setPixmapNum(1) + self["DNSInfo_Check"].show() + self["DNSInfo_Text"].setForegroundColorNum(1) + self["EditSettings_Text"].show() + self["EditSettingsButton"].setPixmapNum(1) + self["EditSettings_Text"].setForegroundColorNum(2) # active + self["EditSettingsButton"].show() + self["ButtonYellow_Check"].setPixmapNum(1) + self["ButtonGreentext"].setText(_("Restart test")) + self["ButtonGreen_Check"].setPixmapNum(0) + self["shortcutsgreen"].setEnabled(False) + self["shortcutsgreen_restart"].setEnabled(True) + self["shortcutsyellow"].setEnabled(False) + self["updown_actions"].setEnabled(True) + self.activebutton = 6 + + \ No newline at end of file diff --git a/lib/python/Screens/VirtualKeyBoard.py b/lib/python/Screens/VirtualKeyBoard.py new file mode 100755 index 00000000..53970ab8 --- /dev/null +++ b/lib/python/Screens/VirtualKeyBoard.py @@ -0,0 +1,287 @@ +# -*- coding: iso-8859-1 -*- +from Components.Language import language +from Components.ActionMap import ActionMap +from Components.Label import Label +from Components.Pixmap import Pixmap +from Components.MenuList import MenuList +from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest +from enigma import eListboxPythonMultiContent, gFont, loadPNG, RT_HALIGN_CENTER, RT_VALIGN_CENTER +from Screen import Screen +from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE + +key_backspace = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_backspace.png")) +key_bg = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_bg.png")) +key_clr = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_clr.png")) +key_esc = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_esc.png")) +key_ok = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_ok.png")) +key_sel = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_sel.png")) +key_shift = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_shift.png")) +key_shift_sel = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_shift_sel.png")) +key_space = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_space.png")) + +class VirtualKeyBoardList(MenuList): + def __init__(self, list, enableWrapAround=False): + MenuList.__init__(self, list, enableWrapAround, eListboxPythonMultiContent) + self.l.setFont(0, gFont("Regular", 22)) + self.l.setItemHeight(45) + +def VirtualKeyBoardEntryComponent(keys, selectedKey,shiftMode=False): + res = [ (keys) ] + + x = 0 + count = 0 + if shiftMode: + shiftkey_png = key_shift_sel + else: + shiftkey_png = key_shift + for key in keys: + if key == "EXIT": + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_esc)) + elif key == "BACKSPACE": + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_backspace)) + elif key == "CLEAR": + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_clr)) + elif key == "SHIFT": + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=shiftkey_png)) + elif key == "SPACE": + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_space)) + elif key == "OK": + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_ok)) + #elif key == "<-": + # res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_left)) + #elif key == "->": + # res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_right)) + + else: + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_bg)) + res.append(MultiContentEntryText(pos=(x, 0), size=(45, 45), font=0, text=key.encode("utf-8"), flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER)) + + if selectedKey == count: + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_sel)) + + x += 45 + count += 1 + + return res + + +class VirtualKeyBoard(Screen): + + def __init__(self, session, title="", text=""): + Screen.__init__(self, session) + self.keys_list = [] + self.shiftkeys_list = [] + self.lang = language.getLanguage() + if self.lang == 'de_DE': + self.keys_list = [ + [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"], + [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"ü", u"+"], + [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ö", u"ä", u"#"], + [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"], + [u"SHIFT", u"SPACE", u"@", u"ß", u"OK"]] + + self.shiftkeys_list = [ + [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"], + [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"Ü", u"*"], + [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ö", u"Ä", u"'"], + [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"], + [u"SHIFT", u"SPACE", u"?", u"\\", u"OK"]] + + elif self.lang == 'es_ES': + #still missing keys (u"ùÙ") + self.keys_list = [ + [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"], + [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"ú", u"+"], + [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ó", u"á", u"#"], + [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"], + [u"SHIFT", u"SPACE", u"@", u"£", u"à", u"é", u"è", u"í", u"ì", u"ñ", u"ò", u"OK"]] + + self.shiftkeys_list = [ + [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"], + [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"Ú", u"*"], + [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ó", u"Á", u"'"], + [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"], + [u"SHIFT", u"SPACE", u"?", u"\\", u"À", u"É", u"È", u"Í", u"Ì", u"Ñ", u"Ò", u"OK"]] + + elif self.lang in ['sv_SE', 'fi_FI']: + self.keys_list = [ + [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"], + [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"é", u"+"], + [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ö", u"ä", u"#"], + [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"], + [u"SHIFT", u"SPACE", u"@", u"ß", u"å", u"OK"]] + + self.shiftkeys_list = [ + [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"], + [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"É", u"*"], + [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ö", u"Ä", u"'"], + [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"], + [u"SHIFT", u"SPACE", u"?", u"\\", u"Å", u"OK"]] + else: + self.keys_list = [ + [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"], + [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"+", u"@"], + [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"#", u"\\"], + [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"], + [u"SHIFT", u"SPACE", u"OK"]] + + self.shiftkeys_list = [ + [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"], + [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"*"], + [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"'", u"?"], + [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"], + [u"SHIFT", u"SPACE", u"OK"]] + + self.shiftMode = False + self.text = text + self.selectedKey = 0 + + self["header"] = Label(title) + self["text"] = Label(self.text) + self["list"] = VirtualKeyBoardList([]) + + self["actions"] = ActionMap(["OkCancelActions", "WizardActions", "ColorActions"], + { + "ok": self.okClicked, + "cancel": self.exit, + "left": self.left, + "right": self.right, + "up": self.up, + "down": self.down, + "red": self.backClicked, + "green": self.ok + }, -2) + + self.onLayoutFinish.append(self.buildVirtualKeyBoard) + + def buildVirtualKeyBoard(self, selectedKey=0): + list = [] + + if self.shiftMode: + self.k_list = self.shiftkeys_list + for keys in self.k_list: + if selectedKey < 12 and selectedKey > -1: + list.append(VirtualKeyBoardEntryComponent(keys, selectedKey,True)) + else: + list.append(VirtualKeyBoardEntryComponent(keys, -1,True)) + selectedKey -= 12 + else: + self.k_list = self.keys_list + for keys in self.k_list: + if selectedKey < 12 and selectedKey > -1: + list.append(VirtualKeyBoardEntryComponent(keys, selectedKey)) + else: + list.append(VirtualKeyBoardEntryComponent(keys, -1)) + selectedKey -= 12 + + self["list"].setList(list) + + + def backClicked(self): + self.text = self["text"].getText()[:-1] + self["text"].setText(self.text) + + def okClicked(self): + if self.shiftMode: + list = self.shiftkeys_list + else: + list = self.keys_list + + selectedKey = self.selectedKey + + for x in list: + if selectedKey < 12: + text = x[selectedKey] + break + else: + selectedKey -= 12 + + text = text.encode("utf-8") + + if text == "EXIT": + self.close(None) + + elif text == "BACKSPACE": + self.text = self["text"].getText()[:-1] + self["text"].setText(self.text) + + elif text == "CLEAR": + self.text = "" + self["text"].setText(self.text) + + elif text == "SHIFT": + if self.shiftMode: + self.shiftMode = False + else: + self.shiftMode = True + + self.buildVirtualKeyBoard(self.selectedKey) + + elif text == "SPACE": + self.text += " " + self["text"].setText(self.text) + + elif text == "OK": + self.close(self["text"].getText()) + + else: + self.text = self["text"].getText() + self.text += text + self["text"].setText(self.text) + + def ok(self): + self.close(self["text"].getText()) + + def exit(self): + self.close(None) + + def left(self): + self.selectedKey -= 1 + + if self.selectedKey == -1: + self.selectedKey = 11 + elif self.selectedKey == 11: + self.selectedKey = 23 + elif self.selectedKey == 23: + self.selectedKey = 35 + elif self.selectedKey == 35: + self.selectedKey = 47 + elif self.selectedKey == 47: + self.selectedKey = 59 + + self.showActiveKey() + + def right(self): + self.selectedKey += 1 + + if self.selectedKey == 12: + self.selectedKey = 0 + elif self.selectedKey == 24: + self.selectedKey = 12 + elif self.selectedKey == 36: + self.selectedKey = 24 + elif self.selectedKey == 48: + self.selectedKey = 36 + elif self.selectedKey == 60: + self.selectedKey = 48 + + self.showActiveKey() + + def up(self): + self.selectedKey -= 12 + + if self.selectedKey < 0: + self.selectedKey += 60 + + self.showActiveKey() + + def down(self): + self.selectedKey += 12 + + if self.selectedKey > 59: + self.selectedKey -= 60 + + self.showActiveKey() + + def showActiveKey(self): + self.buildVirtualKeyBoard(self.selectedKey) -- cgit v1.2.3 From 040e658a3f89783e0030392110e87cc992264cdd Mon Sep 17 00:00:00 2001 From: Mladen Horvat Date: Wed, 5 Nov 2008 20:22:38 +0100 Subject: some fixes B A A --- lib/python/Components/Network.py | 5 ++ lib/python/Screens/NetworkSetup.py | 102 ++++++++++++++++++++++++------------- 2 files changed, 73 insertions(+), 34 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Components/Network.py b/lib/python/Components/Network.py index e10c6a0e..8e9fc120 100755 --- a/lib/python/Components/Network.py +++ b/lib/python/Components/Network.py @@ -20,6 +20,7 @@ class Network: self.deactivateConsole = Console() self.activateConsole = Console() self.resetNetworkConsole = Console() + self.DnsConsole = Console() self.getInterfaces() def getInterfaces(self, callback = None): @@ -445,6 +446,10 @@ class Network: if self.LinkConsole is not None: self.LinkConsole = None + def stopDNSConsole(self): + if self.DnsConsole is not None: + self.DnsConsole = None + def stopRestartConsole(self): if self.restartConsole is not None: self.restartConsole = None diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index c26302fa..6ace1857 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -770,7 +770,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): ifobj = Wireless(self.iface) # a Wireless NIC Object self.wlanresponse = ifobj.getStatistics() if self.wlanresponse[0] != 19: - self.session.openWithCallback(self.AdapterSetupClosed, WlanStatus,self.iface) + self.session.openWithCallback(self.WlanStatusClosed, WlanStatus,self.iface) else: # Display Wlan not available Message self.showErrorMessage() @@ -830,19 +830,14 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): if self.iface == 'wlan0' or self.iface == 'ath0': try: - from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan - w = Wlan(self.iface) - stats = w.getStatus() - if stats['BSSID'] == "00:00:00:00:00:00": - self["statuspic"].setPixmapNum(1) - else: - self["statuspic"].setPixmapNum(0) - self["statuspic"].show() + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status except: self["statuspic"].setPixmapNum(1) self["statuspic"].show() + else: + iStatus.getDataForInterface(self.iface,self.getInfoCB) else: - self.getLinkState(self.iface) + iNetwork.getLinkState(self.iface,self.dataAvail) def doNothing(self): pass @@ -894,7 +889,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): ifobj = Wireless(self.iface) # a Wireless NIC Object self.wlanresponse = ifobj.getStatistics() if self.wlanresponse[0] != 19: - self.session.openWithCallback(self.AdapterSetupClosed, WlanStatus,self.iface) + self.session.openWithCallback(self.WlanStatusClosed, WlanStatus,self.iface) else: # Display Wlan not available Message self.showErrorMessage() @@ -907,6 +902,14 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): self["menulist"].l.setList(self.mainmenu) iNetwork.getInterfaces(self.updateStatusbar) + def WlanStatusClosed(self, *ret): + if ret is not None and len(ret): + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status + iStatus.stopWlanConsole() + self.mainmenu = self.genMainMenu() + self["menulist"].l.setList(self.mainmenu) + iNetwork.getInterfaces(self.updateStatusbar) + def WlanScanClosed(self,*ret): if ret[0] is not None: self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup, self.iface,ret[0],ret[1]) @@ -930,18 +933,15 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): if data is True: self.session.open(MessageBox, _("Finished restarting your network"), type = MessageBox.TYPE_INFO, timeout = 10, default = False) - def getLinkState(self,iface): - iNetwork.getLinkState(iface,self.dataAvail) - def dataAvail(self,data): self.output = data.strip() result = self.output.split('\n') pattern = re_compile("Link detected: yes") for item in result: if re_search(pattern, item): - self["statuspic"].setPixmapNum(0) - else: self["statuspic"].setPixmapNum(1) + else: + self["statuspic"].setPixmapNum(0) self["statuspic"].show() def showErrorMessage(self): @@ -949,7 +949,27 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): def cleanup(self): iNetwork.stopLinkStateConsole() - + try: + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status + except ImportError: + pass + else: + iStatus.stopWlanConsole() + + def getInfoCB(self,data,status): + print "im getInfoCB" + if data is not None: + if data is True: + if status is not None: + print "im getInfoCB status" + print "acesspoint",status[self.iface]["acesspoint"] + if status[self.iface]["acesspoint"] == "No Connection" or status[self.iface]["acesspoint"] == "Not-Associated" or status[self.iface]["acesspoint"] == False: + print "setting statuspix 1" + self["statuspic"].setPixmapNum(1) + else: + self["statuspic"].setPixmapNum(0) + print "setting statuspix 0" + self["statuspic"].show() class NetworkAdapterTest(Screen): def __init__(self, session,iface): @@ -958,6 +978,8 @@ class NetworkAdapterTest(Screen): self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up") iNetwork.getInterfaces() self.setLabels() + self.onClose.append(self.cleanup) + self.onHide.append(self.cleanup) self["updown_actions"] = NumberActionMap(["WizardActions","ShortcutActions"], { @@ -1115,6 +1137,7 @@ class NetworkAdapterTest(Screen): def doStep3(self): self["Networktext"].setForegroundColorNum(1) + self["Network"].setText(_("Please wait...")) self.getLinkState(self.iface) self["NetworkInfo_Text"].setForegroundColorNum(1) self.steptimer = True @@ -1287,24 +1310,14 @@ class NetworkAdapterTest(Screen): def getLinkState(self,iface): if iface == 'wlan0' or iface == 'ath0': try: - from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan - w = Wlan(iface) - stats = w.getStatus() - if stats['BSSID'] == "00:00:00:00:00:00": - self["Network"].setForegroundColorNum(1) - self["Network"].setText(_("disconnected")) - self["NetworkInfo_Check"].setPixmapNum(1) - self["NetworkInfo_Check"].show() - else: - self["Network"].setForegroundColorNum(2) - self["Network"].setText(_("connected")) - self["NetworkInfo_Check"].setPixmapNum(0) - self["NetworkInfo_Check"].show() + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status except: self["Network"].setForegroundColorNum(1) self["Network"].setText(_("disconnected")) self["NetworkInfo_Check"].setPixmapNum(1) self["NetworkInfo_Check"].show() + else: + iStatus.getDataForInterface(self.iface,self.getInfoCB) else: iNetwork.getLinkState(iface,self.LinkStatedataAvail) @@ -1324,7 +1337,6 @@ class NetworkAdapterTest(Screen): self["NetworkInfo_Check"].show() def NetworkStatedataAvail(self,data): - print "DATA",data if data <= 2: self["IP"].setForegroundColorNum(2) self["IP"].setText(_("confirmed")) @@ -1339,7 +1351,6 @@ class NetworkAdapterTest(Screen): self.nextStepTimer.start(3000) def DNSLookupdataAvail(self,data): - print "DATA",data if data <= 2: self["DNS"].setForegroundColorNum(2) self["DNS"].setText(_("confirmed")) @@ -1362,5 +1373,28 @@ class NetworkAdapterTest(Screen): self["shortcutsyellow"].setEnabled(False) self["updown_actions"].setEnabled(True) self.activebutton = 6 - - \ No newline at end of file + + def getInfoCB(self,data,status): + if data is not None: + if data is True: + if status is not None: + if status[self.iface]["acesspoint"] == "No Connection" or status[self.iface]["acesspoint"] == "Not-Associated" or status[self.iface]["acesspoint"] == False: + self["Network"].setForegroundColorNum(1) + self["Network"].setText(_("disconnected")) + self["NetworkInfo_Check"].setPixmapNum(1) + self["NetworkInfo_Check"].show() + else: + self["Network"].setForegroundColorNum(2) + self["Network"].setText(_("connected")) + self["NetworkInfo_Check"].setPixmapNum(0) + self["NetworkInfo_Check"].show() + + def cleanup(self): + iNetwork.stopLinkStateConsole() + iNetwork.stopDNSConsole() + try: + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status + except ImportError: + pass + else: + iStatus.stopWlanConsole() \ No newline at end of file -- cgit v1.2.3 From 81d7587c5c5489dcc300cc4d91ca967838471472 Mon Sep 17 00:00:00 2001 From: acid-burn Date: Wed, 5 Nov 2008 22:39:18 +0100 Subject: remove debug --- lib/python/Screens/NetworkSetup.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index 6ace1857..7c9dc827 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -413,7 +413,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self.aps = self.w.getNetworkList() if self.aps is not None: print "[NetworkSetup.py] got Accespoints!" - print self.aps + #print self.aps for ap in self.aps: a = self.aps[ap] if a['active']: @@ -957,18 +957,13 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): iStatus.stopWlanConsole() def getInfoCB(self,data,status): - print "im getInfoCB" if data is not None: if data is True: if status is not None: - print "im getInfoCB status" - print "acesspoint",status[self.iface]["acesspoint"] if status[self.iface]["acesspoint"] == "No Connection" or status[self.iface]["acesspoint"] == "Not-Associated" or status[self.iface]["acesspoint"] == False: - print "setting statuspix 1" self["statuspic"].setPixmapNum(1) else: self["statuspic"].setPixmapNum(0) - print "setting statuspix 0" self["statuspic"].show() class NetworkAdapterTest(Screen): -- cgit v1.2.3 From 9519fb597efae0d6ba27d2d140285358fcb94979 Mon Sep 17 00:00:00 2001 From: acid-burn Date: Thu, 6 Nov 2008 10:14:43 +0100 Subject: fix typo --- lib/python/Screens/NetworkSetup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index 7c9dc827..619db4e1 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -629,7 +629,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): if data is False: self.close('ok') else: - configuredInterfaces = configuredNetworkAdapters + configuredInterfaces = iNetwork.getConfiguredAdapters() for interface in configuredInterfaces: if interface == self.iface: continue -- cgit v1.2.3 From 56253715ea1292610ad7fc802a533a99304af8cb Mon Sep 17 00:00:00 2001 From: acid-burn Date: Thu, 6 Nov 2008 14:48:51 +0100 Subject: better async handling dont open adaptersetup after wlanscan close, only open on connect inside wlanscan some cleanups and fixes --- lib/python/Components/Network.py | 31 ++++++++++++++++------------ lib/python/Screens/NetworkSetup.py | 42 ++++++++++++++++++++++++-------------- 2 files changed, 45 insertions(+), 28 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Components/Network.py b/lib/python/Components/Network.py index e317ef05..c41469da 100755 --- a/lib/python/Components/Network.py +++ b/lib/python/Components/Network.py @@ -18,6 +18,7 @@ class Network: self.LinkConsole = Console() self.restartConsole = Console() self.deactivateConsole = Console() + self.deactivateInterfaceConsole = Console() self.activateConsole = Console() self.resetNetworkConsole = Console() self.DnsConsole = Console() @@ -74,7 +75,7 @@ class Network: macRegexp = '[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[a-z0-9]{2}\:[a-z0-9]{2}\:[a-z0-9]{2}' ipLinePattern = re_compile('inet ' + ipRegexp + '/') ipPattern = re_compile(ipRegexp) - netmaskLinePattern = re_compile(ipRegexp + '/' + netRegexp) + netmaskLinePattern = re_compile('/' + netRegexp) netmaskPattern = re_compile(netRegexp) bcastLinePattern = re_compile(' brd ' + ipRegexp) upPattern = re_compile('UP') @@ -412,7 +413,7 @@ class Network: if len(self.PingConsole.appContainers) == 0: statecallback(self.NetworkState) - def restartNetwork(self,callback): + def restartNetwork(self,callback = None): self.restartConsole = Console() self.commands = [] self.commands.append("/etc/init.d/avahi-daemon stop") @@ -427,8 +428,8 @@ class Network: self.restartConsole.eBatch(self.commands, self.restartNetworkFinished, callback, debug=True) def restartNetworkFinished(self,extra_args): - callback = extra_args - if len(self.restartConsole.appContainers) == 0: + ( callback ) = extra_args + if callback is not None: callback(True) def getLinkState(self,iface,callback): @@ -454,12 +455,13 @@ class Network: if self.restartConsole is not None: self.restartConsole = None - def RestartConsoleRunning(self): - if self.restartConsole is not None: - if len(self.restartConsole.appContainers) == 0: - return False - else: - return True + def stopGetInterfacesConsole(self): + if self.Console is not None: + self.Console = None + + def stopDeactivateInterfaceConsole(self): + if self.deactivateInterfaceConsole: + self.deactivateInterfaceConsole = None def checkforInterface(self,iface): if self.getAdapterAttribute(iface, 'up') is True: @@ -492,17 +494,20 @@ class Network: if len(self.DnsConsole.appContainers) == 0: statecallback(self.DnsState) - def deactivateInterface(self,iface): + def deactivateInterface(self,iface,callback = None): self.deactivateInterfaceConsole = Console() self.commands = [] cmd1 = "ip addr flush " + iface cmd2 = "ifconfig " + iface + " down" self.commands.append(cmd1) self.commands.append(cmd2) - self.deactivateInterfaceConsole.eBatch(self.commands, self.deactivateInterfaceFinished, extra_args = None, debug=True) + self.deactivateInterfaceConsole.eBatch(self.commands, self.deactivateInterfaceFinished, callback, debug=True) def deactivateInterfaceFinished(self,extra_args): - pass + callback = extra_args + if len(self.deactivateInterfaceConsole.appContainers) == 0: + if callback is not None: + callback(True) def detectWlanModule(self): self.wlanmodule = None diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index 619db4e1..887e1674 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -285,13 +285,12 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self.finished_cb = None self.oktext = _("Press OK on your remote control to continue.") self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up") - #iNetwork.getInterfaces() self.createConfig() self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { - "cancel": (self.close, _("exit networkadapter setup menu")), + "cancel": (self.cancel, _("exit networkadapter setup menu")), "ok": (self.ok, _("select menu entry")), }) @@ -413,7 +412,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self.aps = self.w.getNetworkList() if self.aps is not None: print "[NetworkSetup.py] got Accespoints!" - #print self.aps for ap in self.aps: a = self.aps[ap] if a['active']: @@ -638,17 +636,26 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self.applyConfig(True) def ConfigfinishedCB(self,data): - if data is True: - self.close('ok') + if data is not None: + if data is True: + self.close('ok') def cancel(self): - iNetwork.setAdapterAttribute(self.iface, "up", self.oldInterfaceState) - self.activateInterfaceEntry.value = self.oldInterfaceState - if self.activateInterfaceEntry.value is False: - iNetwork.deactivateInterface(self.iface) - iNetwork.getInterfaces() - self.close('cancel') + if self.oldInterfaceState is False: + iNetwork.deactivateInterface(self.iface,self.deactivateInterfaceCB) + else: + self.close('cancel') + def deactivateInterfaceCB(self,data): + if data is not None: + if data is True: + iNetwork.getInterfaces(self.cancelCB) + + def cancelCB(self,data): + if data is not None: + if data is True: + self.close('cancel') + def runAsync(self, finished_cb): self.finished_cb = finished_cb self.ok() @@ -663,7 +670,8 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): def cleanup(self): iNetwork.stopLinkStateConsole() - iNetwork.stopRestartConsole() + iNetwork.stopDeactivateInterfaceConsole() + class AdapterSetupConfiguration(Screen, HelpableScreen): def __init__(self, session,iface): @@ -722,7 +730,6 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): iNetwork.getInterfaces(self.updateStatusbar) self.onLayoutFinish.append(self.layoutFinished) self.onClose.append(self.cleanup) - self.onHide.append(self.cleanup) def ok(self): if self["menulist"].getCurrent()[1] == 'edit': @@ -914,8 +921,12 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): if ret[0] is not None: self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup, self.iface,ret[0],ret[1]) else: - self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup, self.iface,None,None) - + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status + iStatus.stopWlanConsole() + self.mainmenu = self.genMainMenu() + self["menulist"].l.setList(self.mainmenu) + iNetwork.getInterfaces(self.updateStatusbar) + def restartLan(self, ret = False): if (ret == True): iNetwork.restartNetwork(self.restartLanDataAvail) @@ -949,6 +960,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): def cleanup(self): iNetwork.stopLinkStateConsole() + iNetwork.stopDeactivateInterfaceConsole() try: from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status except ImportError: -- cgit v1.2.3 From 77488b1ad023f9221684e42e23d4e8f2a299d948 Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 6 Nov 2008 19:09:33 +0100 Subject: Wizard.py: add handling for async code --- lib/python/Screens/Wizard.py | 78 +++++++++++++++++++++++++++++++------------- 1 file changed, 55 insertions(+), 23 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/Wizard.py b/lib/python/Screens/Wizard.py index cee057dc..53600dfe 100644 --- a/lib/python/Screens/Wizard.py +++ b/lib/python/Screens/Wizard.py @@ -84,7 +84,7 @@ class Wizard(Screen): timeoutstep = str(attrs.get('timeoutstep')) else: timeoutstep = '' - self.wizard[self.lastStep] = {"id": id, "condition": "", "text": "", "timeout": timeout, "timeoutaction": timeoutaction, "timeoutstep": timeoutstep, "list": [], "config": {"screen": None, "args": None, "type": "" }, "code": "", "codeafter": "", "nextstep": nextstep} + self.wizard[self.lastStep] = {"id": id, "condition": "", "text": "", "timeout": timeout, "timeoutaction": timeoutaction, "timeoutstep": timeoutstep, "list": [], "config": {"screen": None, "args": None, "type": "" }, "code": "", "codeafter": "", "code_async": "", "codeafter_async": "", "nextstep": nextstep} elif (name == "text"): self.wizard[self.lastStep]["text"] = string.replace(str(attrs.get('value')), "\\n", "\n") elif (name == "displaytext"): @@ -119,6 +119,7 @@ class Wizard(Screen): if (attrs.has_key('evaluation')): self.wizard[self.lastStep]["config"]["evaluation"] = str(attrs.get('evaluation')) elif (name == "code"): + self.async_code = attrs.has_key('async') and str(attrs.get('async')) == "yes" if attrs.has_key('pos') and str(attrs.get('pos')) == "after": self.codeafter = True else: @@ -129,10 +130,16 @@ class Wizard(Screen): def endElement(self, name): self.currContent = "" if name == 'code': - if self.codeafter: - self.wizard[self.lastStep]["codeafter"] = self.wizard[self.lastStep]["codeafter"].strip() + if self.async_code: + if self.codeafter: + self.wizard[self.lastStep]["codeafter_async"] = self.wizard[self.lastStep]["codeafter_async"].strip() + else: + self.wizard[self.lastStep]["code_async"] = self.wizard[self.lastStep]["code_async"].strip() else: - self.wizard[self.lastStep]["code"] = self.wizard[self.lastStep]["code"].strip() + if self.codeafter: + self.wizard[self.lastStep]["codeafter"] = self.wizard[self.lastStep]["codeafter"].strip() + else: + self.wizard[self.lastStep]["code"] = self.wizard[self.lastStep]["code"].strip() elif name == 'condition': self.wizard[self.lastStep]["condition"] = self.wizard[self.lastStep]["condition"].strip() elif name == 'step': @@ -141,13 +148,19 @@ class Wizard(Screen): def characters(self, ch): if self.currContent == "code": - if self.codeafter: - self.wizard[self.lastStep]["codeafter"] = self.wizard[self.lastStep]["codeafter"] + ch + if self.async_code: + if self.codeafter: + self.wizard[self.lastStep]["codeafter_async"] = self.wizard[self.lastStep]["codeafter_async"] + ch + else: + self.wizard[self.lastStep]["code_async"] = self.wizard[self.lastStep]["code_async"] + ch else: - self.wizard[self.lastStep]["code"] = self.wizard[self.lastStep]["code"] + ch + if self.codeafter: + self.wizard[self.lastStep]["codeafter"] = self.wizard[self.lastStep]["codeafter"] + ch + else: + self.wizard[self.lastStep]["code"] = self.wizard[self.lastStep]["code"] + ch elif self.currContent == "condition": self.wizard[self.lastStep]["condition"] = self.wizard[self.lastStep]["condition"] + ch - + def __init__(self, session, showSteps = True, showStepSlider = True, showList = True, showConfig = True): Screen.__init__(self, session) @@ -298,7 +311,7 @@ class Wizard(Screen): if self.updateValues not in self.onShown: self.onShown.append(self.updateValues) - + if self.showConfig: if self.wizard[currStep]["config"]["type"] == "dynamic": eval("self." + self.wizard[currStep]["config"]["evaluation"])() @@ -317,16 +330,20 @@ class Wizard(Screen): self.markDone() self.close() else: + self.codeafter=True self.runCode(self.wizard[currStep]["codeafter"]) + async = self.runCode(self.wizard[currStep]["codeafter_async"]) if self.wizard[currStep]["nextstep"] is not None: self.currStep = self.getStepWithID(self.wizard[currStep]["nextstep"]) if gotoStep is not None: self.currStep = self.getStepWithID(gotoStep) - self.currStep += 1 - self.updateValues() - - print "Now: " + str(self.currStep) - + if not async: + self.currStep += 1 + self.updateValues() + print "Now: " + str(self.currStep) + else: + self.onShown.remove(self.updateValues) + print "Now: " + str(self.currStep+1), "(after async code finished)" def ok(self): print "OK" @@ -371,7 +388,7 @@ class Wizard(Screen): def up(self): self.resetCounter() if (self.showConfig and self.wizard[self.currStep]["config"]["screen"] != None or self.wizard[self.currStep]["config"]["type"] == "dynamic"): - self["config"].instance.moveSelection(self["config"].instance.moveUp) + self["config"].instance.moveSelection(self["config"].instance.moveUp) elif (self.showList and len(self.wizard[self.currStep]["evaluatedlist"]) > 0): self["list"].selectPrevious() if self.wizard[self.currStep].has_key("onselect"): @@ -415,7 +432,9 @@ class Wizard(Screen): if code != "": print "code", code exec(code) - + return True + return False + def getTranslation(self, text): return _(text) @@ -470,8 +489,24 @@ class Wizard(Screen): for x in self.lcdCallbacks: x(displaytext) + self.codeafter=False self.runCode(self.wizard[self.currStep]["code"]) - + self.async = self.runCode(self.wizard[self.currStep]["code_async"]) + if self.async: + self.onShown.remove(self.updateValues) + else: + self.afterAsyncCode() + else: + self.currStep += 1 + self.updateValues() + + def afterAsyncCode(self): + if self.updateValues not in self.onShown: + self.onShown.append(self.updateValues) + if self.codeafter: + self.currStep += 1 + self.updateValues() + else: if self.showList: print "showing list,", self.currStep for renderer in self.renderer: @@ -482,7 +517,7 @@ class Wizard(Screen): print "setZPosition" rootrenderer.instance.setZPosition(1) renderer = renderer.source - + #self["list"].instance.setZPosition(1) self.list = [] if (self.wizard[self.currStep].has_key("dynamiclist")): @@ -524,7 +559,7 @@ class Wizard(Screen): self["config"].l.setList(self.configInstance["config"].list) callbacks = self.configInstance["config"].onSelectionChanged self.configInstance["config"].destroy() - print "clearConfigList", self.configInstance["config"], self["config"] + print "clearConfigList", self.configInstance["config"], self["config"] self.configInstance["config"] = self["config"] self.configInstance["config"].onSelectionChanged = callbacks print "clearConfigList", self.configInstance["config"], self["config"] @@ -533,10 +568,7 @@ class Wizard(Screen): else: if self.has_key("config"): self["config"].hide() - else: # condition false - self.currStep += 1 - self.updateValues() - + def timeoutCounterFired(self): self.timeoutCounter -= 1 print "timeoutCounter:", self.timeoutCounter -- cgit v1.2.3 From c9faacfea68f90597fb82504790dc1f7d7b71f3f Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 6 Nov 2008 23:05:15 +0100 Subject: Wizard.py: hopefully fix async stuff --- lib/python/Screens/Wizard.py | 96 +++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 51 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/Wizard.py b/lib/python/Screens/Wizard.py index 53600dfe..17a8150e 100644 --- a/lib/python/Screens/Wizard.py +++ b/lib/python/Screens/Wizard.py @@ -307,43 +307,37 @@ class Wizard(Screen): def finished(self, gotoStep = None, *args, **kwargs): print "finished" - currStep = self.currStep + self.prevStep = self.currStep + self.gotoStep = gotoStep if self.updateValues not in self.onShown: self.onShown.append(self.updateValues) if self.showConfig: - if self.wizard[currStep]["config"]["type"] == "dynamic": - eval("self." + self.wizard[currStep]["config"]["evaluation"])() + if self.wizard[self.prevStep]["config"]["type"] == "dynamic": + eval("self." + self.wizard[self.prevStep]["config"]["evaluation"])() if self.showList: - if (len(self.wizard[currStep]["evaluatedlist"]) > 0): + if (len(self.wizard[self.prevStep]["evaluatedlist"]) > 0): print "current:", self["list"].current nextStep = self["list"].current[1] - if (self.wizard[currStep].has_key("listevaluation")): + if (self.wizard[self.prevStep].has_key("listevaluation")): exec("self." + self.wizard[self.currStep]["listevaluation"] + "('" + nextStep + "')") else: self.currStep = self.getStepWithID(nextStep) - if ((currStep == self.numSteps and self.wizard[currStep]["nextstep"] is None) or self.wizard[currStep]["id"] == "end"): # wizard finished + if ((self.prevStep == self.numSteps and self.wizard[self.prevStep]["nextstep"] is None) or self.wizard[self.prevStep]["id"] == "end"): # wizard finished print "wizard finished" self.markDone() self.close() else: - self.codeafter=True - self.runCode(self.wizard[currStep]["codeafter"]) - async = self.runCode(self.wizard[currStep]["codeafter_async"]) - if self.wizard[currStep]["nextstep"] is not None: - self.currStep = self.getStepWithID(self.wizard[currStep]["nextstep"]) - if gotoStep is not None: - self.currStep = self.getStepWithID(gotoStep) - if not async: - self.currStep += 1 - self.updateValues() - print "Now: " + str(self.currStep) + self.codeafterA=True + self.runCode(self.wizard[self.prevStep]["codeafter"]) + if self.runCode(self.wizard[self.prevStep]["codeafter_async"]): + if self.updateValues in self.onShown: + self.onShown.remove(self.updateValues) else: - self.onShown.remove(self.updateValues) - print "Now: " + str(self.currStep+1), "(after async code finished)" + self.afterAsyncCode() def ok(self): print "OK" @@ -358,7 +352,8 @@ class Wizard(Screen): # for this. If there is one, please do a more specific check # and/or a comment in which situation there is no run() if callable(getattr(self.configInstance, "runAsync", None)): - self.onShown.remove(self.updateValues) + if self.updateValues in self.onShown: + self.onShown.remove(self.updateValues) self.configInstance.runAsync(self.finished) return else: @@ -464,48 +459,47 @@ class Wizard(Screen): del self.configInstance["config"] self.configInstance.doClose() self.configInstance = None - - self.condition = True + exec (self.wizard[self.currStep]["condition"]) - if self.condition: - if len(self.stepHistory) == 0 or self.stepHistory[-1] != self.currStep: - self.stepHistory.append(self.currStep) - print "wizard step:", self.wizard[self.currStep] + + if len(self.stepHistory) == 0 or self.stepHistory[-1] != self.currStep: + self.stepHistory.append(self.currStep) + print "wizard step:", self.wizard[self.currStep] - if self.showSteps: - self["step"].setText(self.getTranslation("Step ") + str(self.currStep) + "/" + str(self.numSteps)) - if self.showStepSlider: - self["stepslider"].setValue(self.currStep) + if self.showSteps: + self["step"].setText(self.getTranslation("Step ") + str(self.currStep) + "/" + str(self.numSteps)) + if self.showStepSlider: + self["stepslider"].setValue(self.currStep) - if self.wizard[self.currStep]["timeout"] is not None: - self.resetCounter() - self.timeoutTimer.start(1000) + if self.wizard[self.currStep]["timeout"] is not None: + self.resetCounter() + self.timeoutTimer.start(1000) - print "wizard text", self.getTranslation(self.wizard[self.currStep]["text"]) - self.updateText(firstset = True) - if self.wizard[self.currStep].has_key("displaytext"): - displaytext = self.wizard[self.currStep]["displaytext"] - print "set LCD text" - for x in self.lcdCallbacks: - x(displaytext) + print "wizard text", self.getTranslation(self.wizard[self.currStep]["text"]) + self.updateText(firstset = True) + if self.wizard[self.currStep].has_key("displaytext"): + displaytext = self.wizard[self.currStep]["displaytext"] + print "set LCD text" + for x in self.lcdCallbacks: + x(displaytext) - self.codeafter=False - self.runCode(self.wizard[self.currStep]["code"]) - self.async = self.runCode(self.wizard[self.currStep]["code_async"]) - if self.async: + self.codeafterA=False + self.runCode(self.wizard[self.currStep]["code"]) + if self.runCode(self.wizard[self.currStep]["code_async"]): + if self.updateValues in self.onShown: self.onShown.remove(self.updateValues) - else: - self.afterAsyncCode() else: - self.currStep += 1 - self.updateValues() + self.afterAsyncCode() def afterAsyncCode(self): - if self.updateValues not in self.onShown: - self.onShown.append(self.updateValues) - if self.codeafter: + if self.codeafterA: + if self.wizard[self.prevStep]["nextstep"] is not None: + self.currStep = self.getStepWithID(self.wizard[self.currStep]["nextstep"]) + if self.gotoStep is not None: + self.currStep = self.getStepWithID(self.gotoStep) self.currStep += 1 self.updateValues() + print "Now: " + str(self.currStep) else: if self.showList: print "showing list,", self.currStep -- cgit v1.2.3 From e4632437dcaf95c92abd3b1fed122a61c97e3a5b Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 7 Nov 2008 00:36:51 +0100 Subject: Wizard.py: async fixes --- lib/python/Screens/Wizard.py | 92 +++++++++++++++++++++++++------------------- 1 file changed, 52 insertions(+), 40 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/Wizard.py b/lib/python/Screens/Wizard.py index 17a8150e..23d6253a 100644 --- a/lib/python/Screens/Wizard.py +++ b/lib/python/Screens/Wizard.py @@ -307,37 +307,42 @@ class Wizard(Screen): def finished(self, gotoStep = None, *args, **kwargs): print "finished" - self.prevStep = self.currStep - self.gotoStep = gotoStep + currStep = self.currStep if self.updateValues not in self.onShown: self.onShown.append(self.updateValues) - + if self.showConfig: - if self.wizard[self.prevStep]["config"]["type"] == "dynamic": - eval("self." + self.wizard[self.prevStep]["config"]["evaluation"])() + if self.wizard[currStep]["config"]["type"] == "dynamic": + eval("self." + self.wizard[currStep]["config"]["evaluation"])() if self.showList: - if (len(self.wizard[self.prevStep]["evaluatedlist"]) > 0): + if (len(self.wizard[currStep]["evaluatedlist"]) > 0): print "current:", self["list"].current nextStep = self["list"].current[1] - if (self.wizard[self.prevStep].has_key("listevaluation")): + if (self.wizard[currStep].has_key("listevaluation")): exec("self." + self.wizard[self.currStep]["listevaluation"] + "('" + nextStep + "')") else: self.currStep = self.getStepWithID(nextStep) - if ((self.prevStep == self.numSteps and self.wizard[self.prevStep]["nextstep"] is None) or self.wizard[self.prevStep]["id"] == "end"): # wizard finished + print_now = True + if ((currStep == self.numSteps and self.wizard[currStep]["nextstep"] is None) or self.wizard[currStep]["id"] == "end"): # wizard finished print "wizard finished" self.markDone() self.close() else: - self.codeafterA=True - self.runCode(self.wizard[self.prevStep]["codeafter"]) - if self.runCode(self.wizard[self.prevStep]["codeafter_async"]): + self.codeafter = True + self.runCode(self.wizard[currStep]["codeafter"]) + self.prevStep = currStep + self.gotoStep = gotoStep + if not self.runCode(self.wizard[currStep]["codeafter_async"]): + self.afterAsyncCode() + else: if self.updateValues in self.onShown: self.onShown.remove(self.updateValues) - else: - self.afterAsyncCode() + + if print_now: + print "Now: " + str(self.currStep) def ok(self): print "OK" @@ -460,41 +465,48 @@ class Wizard(Screen): self.configInstance.doClose() self.configInstance = None + self.condition = True exec (self.wizard[self.currStep]["condition"]) - - if len(self.stepHistory) == 0 or self.stepHistory[-1] != self.currStep: - self.stepHistory.append(self.currStep) - print "wizard step:", self.wizard[self.currStep] + if not self.condition: + self.currStep += 1 + self.updateValues() + else: + if len(self.stepHistory) == 0 or self.stepHistory[-1] != self.currStep: + self.stepHistory.append(self.currStep) + print "wizard step:", self.wizard[self.currStep] - if self.showSteps: - self["step"].setText(self.getTranslation("Step ") + str(self.currStep) + "/" + str(self.numSteps)) - if self.showStepSlider: - self["stepslider"].setValue(self.currStep) + if self.showSteps: + self["step"].setText(self.getTranslation("Step ") + str(self.currStep) + "/" + str(self.numSteps)) + if self.showStepSlider: + self["stepslider"].setValue(self.currStep) - if self.wizard[self.currStep]["timeout"] is not None: - self.resetCounter() - self.timeoutTimer.start(1000) + if self.wizard[self.currStep]["timeout"] is not None: + self.resetCounter() + self.timeoutTimer.start(1000) - print "wizard text", self.getTranslation(self.wizard[self.currStep]["text"]) - self.updateText(firstset = True) - if self.wizard[self.currStep].has_key("displaytext"): - displaytext = self.wizard[self.currStep]["displaytext"] - print "set LCD text" - for x in self.lcdCallbacks: - x(displaytext) + print "wizard text", self.getTranslation(self.wizard[self.currStep]["text"]) + self.updateText(firstset = True) + if self.wizard[self.currStep].has_key("displaytext"): + displaytext = self.wizard[self.currStep]["displaytext"] + print "set LCD text" + for x in self.lcdCallbacks: + x(displaytext) - self.codeafterA=False - self.runCode(self.wizard[self.currStep]["code"]) - if self.runCode(self.wizard[self.currStep]["code_async"]): - if self.updateValues in self.onShown: - self.onShown.remove(self.updateValues) - else: - self.afterAsyncCode() + self.codeafter=False + self.runCode(self.wizard[self.currStep]["code"]) + if self.runCode(self.wizard[self.currStep]["code_async"]): + if self.updateValues in self.onShown: + self.onShown.remove(self.updateValues) + else: + self.afterAsyncCode() def afterAsyncCode(self): - if self.codeafterA: + if not self.updateValues in self.onShown: + self.onShown.append(self.updateValues) + + if self.codeafter: if self.wizard[self.prevStep]["nextstep"] is not None: - self.currStep = self.getStepWithID(self.wizard[self.currStep]["nextstep"]) + self.currStep = self.getStepWithID(self.wizard[self.prevStep]["nextstep"]) if self.gotoStep is not None: self.currStep = self.getStepWithID(self.gotoStep) self.currStep += 1 -- cgit v1.2.3 From 613447d89ad124aa6fb52627dd7c98085cdd8d31 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 7 Nov 2008 14:38:00 +0100 Subject: fix bsod in some cases --- lib/python/Screens/TimerEdit.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/TimerEdit.py b/lib/python/Screens/TimerEdit.py index 800bab33..aae345db 100644 --- a/lib/python/Screens/TimerEdit.py +++ b/lib/python/Screens/TimerEdit.py @@ -317,6 +317,7 @@ class TimerSanityConflict(Screen): EMPTY = 0 ENABLE = 1 DISABLE = 2 + EDIT = 3 def __init__(self, session, timer): Screen.__init__(self, session) @@ -338,10 +339,11 @@ class TimerSanityConflict(Screen): self["key_red"] = Button("Edit") self["key_green"] = Button(" ") - self["key_yellow"] = Button("Edit") + self["key_yellow"] = Button(" ") self["key_blue"] = Button(" ") self.key_green_choice = self.EMPTY + self.key_yellow_choice = self.EMPTY self.key_blue_choice = self.EMPTY self["actions"] = ActionMap(["OkCancelActions", "DirectionActions", "ShortcutActions", "TimerEditActions"], @@ -415,9 +417,14 @@ class TimerSanityConflict(Screen): self["actions"].actions.update({"green":self.toggleTimer1}) self["key_green"].setText(_("Disable")) self.key_green_choice = self.DISABLE + if len(self.timer) > 1: x = self["list"].getSelectedIndex() if self.timer[x] is not None: + if self.key_yellow_choice == self.EMPTY: + self["actions"].actions.update({"yellow":self.editTimer2}) + self["key_yellow"].setText(_("Edit")) + self.key_yellow_choice = self.EDIT if self.timer[x].disabled and self.key_blue_choice != self.ENABLE: self["actions"].actions.update({"blue":self.toggleTimer2}) self["key_blue"].setText(_("Enable")) @@ -432,9 +439,11 @@ class TimerSanityConflict(Screen): self.key_blue_choice = self.DISABLE else: #FIXME.... this doesnt hide the buttons self.... just the text - self.removeAction("yellow") - self["key_yellow"].setText(" ") - self.key_yellow_choice = self.EMPTY - self.removeAction("blue") - self["key_blue"].setText(" ") - self.key_blue_choice = self.EMPTY + if self.key_yellow_choice != self.EMPTY: + self.removeAction("yellow") + self["key_yellow"].setText(" ") + self.key_yellow_choice = self.EMPTY + if self.key_blue_choice != self.EMPTY: + self.removeAction("blue") + self["key_blue"].setText(" ") + self.key_blue_choice = self.EMPTY -- cgit v1.2.3 From b81939c5a6375795d59a7fd8d9f81c0810c7eebe Mon Sep 17 00:00:00 2001 From: acid-burn Date: Fri, 7 Nov 2008 21:30:25 +0100 Subject: fix typos fix async callback translation update --- lib/python/Screens/NetworkSetup.py | 42 +++++++++++--------- po/de.po | 81 ++++++++++++++++++++++---------------- 2 files changed, 71 insertions(+), 52 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index 887e1674..580673e4 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -50,8 +50,8 @@ class NetworkAdapterSelection(Screen,HelpableScreen): Screen.__init__(self, session) HelpableScreen.__init__(self) - self.wlan_errortext = _("No working wireless networkadapter found.\nPlease verify that you have attached a compatible WLAN USB Stick and your Network is configured correctly.") - self.lan_errortext = _("No working local networkadapter found.\nPlease verify that you have attached a network cable and your Network is configured correctly.") + self.wlan_errortext = _("No working wireless network adapter found.\nPlease verify that you have attached a compatible WLAN device and your network is configured correctly.") + self.lan_errortext = _("No working local network adapter found.\nPlease verify that you have attached a network cable and your network is configured correctly.") self.oktext = _("Press OK on your remote control to continue.") self.restartLanRef = None @@ -67,18 +67,18 @@ class NetworkAdapterSelection(Screen,HelpableScreen): self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { - "cancel": (self.close, _("exit networkinterface list")), + "cancel": (self.close, _("exit network interface list")), "ok": (self.okbuttonClick, _("select interface")), }) self["ColorActions"] = HelpableActionMap(self, "ColorActions", { - "red": (self.close, _("exit networkinterface list")), + "red": (self.close, _("exit network interface list")), }) self["DefaultInterfaceAction"] = HelpableActionMap(self, "ColorActions", { - "blue": (self.setDefaultInterface, [_("Set interface as default Interface"),_("* Only available if more then one interface is active.")] ), + "blue": (self.setDefaultInterface, [_("Set interface as default Interface"),_("* Only available if more than one interface is active.")] ), }) self.list = [] @@ -273,13 +273,18 @@ class NameserverSetup(Screen, ConfigListScreen, HelpableScreen): self.createSetup() class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): - def __init__(self, session, iface,essid=None, aplist=None): + def __init__(self, session, networkinfo, essid=None, aplist=None): Screen.__init__(self, session) HelpableScreen.__init__(self) self.session = session - self.iface = iface - self.essid = essid - self.aplist = aplist + if isinstance(networkinfo, (list, tuple)): + self.iface = networkinfo[0] + self.essid = networkinfo[1] + self.aplist = networkinfo[2] + else: + self.iface = networkinfo + self.essid = essid + self.aplist = aplist self.extended = None self.applyConfigRef = None self.finished_cb = None @@ -290,19 +295,19 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { - "cancel": (self.cancel, _("exit networkadapter setup menu")), + "cancel": (self.cancel, _("exit network adapter setup menu")), "ok": (self.ok, _("select menu entry")), }) self["ColorActions"] = HelpableActionMap(self, "ColorActions", { - "red": (self.cancel, _("exit networkadapter configuration")), + "red": (self.cancel, _("exit network adapter configuration")), "blue": (self.KeyBlue, _("open nameserver configuration")), }) self["VirtualKB"] = HelpableActionMap(self, "ColorActions", { - "green": (self.KeyGreen, [_("open virtual keyboard input help"),_("* Only available when entering hidden ssid or network key")] ), + "green": (self.KeyGreen, [_("open virtual keyboard input help"),_("* Only available when entering hidden SSID or network key")] ), }) self["actions"] = NumberActionMap(["SetupActions"], @@ -516,7 +521,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): if self.iface == "wlan0" or self.iface == "ath0" : if self["config"].getCurrent() == self.hiddenSSID: if config.plugins.wlan.essid.value == 'hidden...': - self.session.openWithCallback(self.VirtualKeyBoardSSIDCallback, VirtualKeyBoard, title = (_("Enter WLAN networkname/SSID:")), text = config.plugins.wlan.essid.value) + self.session.openWithCallback(self.VirtualKeyBoardSSIDCallback, VirtualKeyBoard, title = (_("Enter WLAN network name/SSID:")), text = config.plugins.wlan.essid.value) if self["config"].getCurrent() == self.encryptionKey: self.session.openWithCallback(self.VirtualKeyBoardKeyCallback, VirtualKeyBoard, title = (_("Enter WLAN passphrase/key:")), text = config.plugins.wlan.encryption.psk.value) @@ -600,7 +605,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): iNetwork.deactivateInterface(self.iface) iNetwork.writeNetworkConfig() iNetwork.restartNetwork(self.applyConfigDataAvail) - self.applyConfigRef = self.session.openWithCallback(self.applyConfigfinishedCB, MessageBox, _("Please wait while activating your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False) + self.applyConfigRef = self.session.openWithCallback(self.applyConfigfinishedCB, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False) else: self.cancel() @@ -616,10 +621,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): if data is True: num_configured_if = len(iNetwork.getConfiguredAdapters()) if num_configured_if >= 2: - self.session.openWithCallback(self.secondIfaceFoundCB, MessageBox, _("Your network configuration has been activated.\nA second configured interface has been found.\n\nDo you want to disable the second networkinterface?"), default = True) + self.session.openWithCallback(self.secondIfaceFoundCB, MessageBox, _("Your network configuration has been activated.\nA second configured interface has been found.\n\nDo you want to disable the second network interface?"), default = True) else: if self.finished_cb: - self.session.openWithCallback(self.finished_cb, MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) + self.session.openWithCallback(lambda x : self.finished_cb(), MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) else: self.session.openWithCallback(self.ConfigfinishedCB, MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) @@ -695,7 +700,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): self.oktext = _("Press OK on your remote control to continue.") self.reboottext = _("Your Dreambox will restart after pressing OK on your remote control.") - self.errortext = _("No working wireless interface found.\n Please verify that you have attached a compatible WLAN device or enable you local network interface.") + self.errortext = _("No working wireless network interface found.\n Please verify that you have attached a compatible WLAN device or enable your local network interface.") self["WizardActions"] = HelpableActionMap(self, "WizardActions", { @@ -1404,4 +1409,5 @@ class NetworkAdapterTest(Screen): except ImportError: pass else: - iStatus.stopWlanConsole() \ No newline at end of file + iStatus.stopWlanConsole() + diff --git a/po/de.po b/po/de.po index eb38d378..e5f33eec 100755 --- a/po/de.po +++ b/po/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: tuxbox-enigma 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-07 09:36+0100\n" +"POT-Creation-Date: 2008-11-07 21:18+0100\n" "PO-Revision-Date: 2008-10-15 12:10+0100\n" "Last-Translator: Andreas Frisch \n" "Language-Team: none\n" @@ -98,13 +98,11 @@ msgstr "(leer)" msgid "(show optional DVD audio menu)" msgstr "" -msgid "* Only available if more then one interface is active." +msgid "* Only available if more than one interface is active." msgstr "* Nur verfügbar wenn mehr als ein Netzwerkadapter aktiv ist." -msgid "* Only available when entering hidden ssid or network key" -msgstr "" -"* Nur verfügbar während der eingabe einer versteckten Netzwerk SSID oder " -"WLAN Passwortes" +msgid "* Only available when entering hidden SSID or network key" +msgstr "* Verfügbar für die Eingabe der Netzwerk SSID oder Passwortes" msgid ".NFI Download failed:" msgstr "" @@ -596,7 +594,7 @@ msgid "Change bouquets in quickzap" msgstr "Bouquet wechseln beim Quickzap" msgid "Change dir." -msgstr "Verzeichniss wechseln" +msgstr "Verzeichnis wechseln" msgid "Change pin code" msgstr "Pincode ändern" @@ -1163,8 +1161,8 @@ msgstr "Anfängliche Vorlaufgeschwindigkeit eingeben" msgid "Enter Rewind at speed" msgstr "Anfängliche Rücklaufgeschwindigkeit eingeben" -msgid "Enter WLAN networkname/SSID:" -msgstr "WLAN Netzwerkname/SSID eingeben:" +msgid "Enter WLAN network name/SSID:" +msgstr "" msgid "Enter WLAN passphrase/key:" msgstr "WLAN Schlüssel/Passwort eingeben:" @@ -1262,10 +1260,10 @@ msgid "Finished" msgstr "Beendet" msgid "Finished configuring your network" -msgstr "" +msgstr "Netzwerkkonfiguration abgeschlossen" msgid "Finished restarting your network" -msgstr "" +msgstr "Netzwerkneustart abgeschlossen" msgid "Finnish" msgstr "Finnisch" @@ -1499,7 +1497,7 @@ msgid "Integrated Ethernet" msgstr "Eingebaute Netzwerkschnittstelle" msgid "Integrated Wireless" -msgstr "Integriertes Funknetzwerk" +msgstr "Integriertes WLAN" msgid "Intermediate" msgstr "Fortgeschritten" @@ -1885,22 +1883,31 @@ msgstr "" "Wenn Sie 'NEIN' wählen, bleibt der Einstellungen-Schutz deaktiviert!" msgid "" -"No working local networkadapter found.\n" -"Please verify that you have attached a network cable and your Network is " +"No working local network adapter found.\n" +"Please verify that you have attached a network cable and your network is " "configured correctly." msgstr "" +"Kein funktionierender Netzwerkadapter gefunden.\n" +"Stellen Sie sicher, dass Sie ein Netzwerkkabel angeschlossen haben und das " +"Ihr Netzwerk richtig konfiguriert ist." msgid "" -"No working wireless interface found.\n" -" Please verify that you have attached a compatible WLAN device or enable you " -"local network interface." +"No working wireless network adapter found.\n" +"Please verify that you have attached a compatible WLAN device and your " +"network is configured correctly." msgstr "" +"Kein funktionierende WLAN Netzwerkadapter gefunden.\n" +"Stellen Sie sicher, dass Sie ein kompatibles Gerät angeschlossen haben oder " +"aktivieren Sie den internen Netzwerkadapter." msgid "" -"No working wireless networkadapter found.\n" -"Please verify that you have attached a compatible WLAN USB Stick and your " -"Network is configured correctly." +"No working wireless network interface found.\n" +"Please verify that you have attached a compatible WLAN device or enable your " +"local network interface." msgstr "" +"Kein funktionierender WLAN Netzwerkadapter gefunden.\n" +"Stellen Sie sicher, dass Sie ein kompatibles Gerät angeschlossen haben und " +"das Ihr Netzwerk richtig konfiguriert ist." msgid "No, but restart from begin" msgstr "Nein, aber von Anfang an neu beginnen" @@ -2166,12 +2173,12 @@ msgstr "" "Bitte benutzen Sie die Hoch/Runter-Tasten, um Ihre Sprache auszuwählen. " "Danach drücken Sie bitte OK." +msgid "Please wait for activation of your network configuration..." +msgstr "Bitte warten während die Netzwerkkonfiguration aktiviert wird..." + msgid "Please wait for md5 signature verification..." msgstr "" -msgid "Please wait while activating your network configuration..." -msgstr "Bitte warten während die Netzwerkkonfiguration aktiviert wird..." - msgid "Please wait while we configure your network..." msgstr "Bitte warten während das Netzwerk konfiguriert wird..." @@ -2693,7 +2700,7 @@ msgid "Set as default Interface" msgstr "Netzwerkadapter als Standard definieren" msgid "Set interface as default Interface" -msgstr "Setze Netzwerkadapter als Standardad" +msgstr "Setze Netzwerkadapter als Standardd" msgid "Set limits" msgstr "Limits setzen" @@ -3751,7 +3758,7 @@ msgid "" "Your network configuration has been activated.\n" "A second configured interface has been found.\n" "\n" -"Do you want to disable the second networkinterface?" +"Do you want to disable the second network interface?" msgstr "" "Ihre Netzwerkkonfiguration wurde aktiviert.\n" "Ein zweiter konfigurierter Netzwerkadapter wurde gefunden.\n" @@ -3881,7 +3888,7 @@ msgid "chapters" msgstr "Kapitel" msgid "choose destination directory" -msgstr "Wähle Zielverzeichniss" +msgstr "Wähle Zielverzeichnis" msgid "circular left" msgstr "links-zirkulär" @@ -3914,7 +3921,7 @@ msgid "copy to bouquets" msgstr "in Bouquets kopieren" msgid "create directory" -msgstr "Verzeichniss erstellen" +msgstr "Verzeichnis erstellen" msgid "daily" msgstr "täglich" @@ -4015,15 +4022,18 @@ msgstr "Verlasse Filmliste" msgid "exit nameserver configuration" msgstr "DNS Serverkonfiguration verlassen" -msgid "exit networkadapter configuration" +msgid "exit network adapter configuration" msgstr "Netzwerkadapterkonfiguration verlassen" -msgid "exit networkadapter setup menu" +msgid "exit network adapter setup menu" msgstr "Netzwerkadaptermenu verlassen" -msgid "exit networkinterface list" +msgid "exit network interface list" msgstr "Netzwerkadapterübersicht verlassen" +msgid "exit networkadapter setup menu" +msgstr "" + msgid "failed" msgstr "" @@ -4252,7 +4262,7 @@ msgid "open servicelist(up)" msgstr "Kanalliste öffnen(nach oben)" msgid "open virtual keyboard input help" -msgstr "Virtuelle Tastatur Eingabehilfe öffnen" +msgstr "Virtuelle Tastatureingabehilfe öffnen" msgid "pass" msgstr "Durchgang" @@ -4309,7 +4319,7 @@ msgid "remove bookmark" msgstr "Bookmark entfernen" msgid "remove directory" -msgstr "Verzeichniss entfernen" +msgstr "Verzeichnis entfernen" msgid "remove entry" msgstr "Eintrag entfernen" @@ -4370,10 +4380,10 @@ msgid "select image from server" msgstr "Wähle ein Image vom Server" msgid "select interface" -msgstr "Wähle einen Ntzwerkadapter" +msgstr "Wähle einen Netzwerkadapter" msgid "select menu entry" -msgstr "Wähle einen Menupunkt" +msgstr "Wähle einen Menüpunkt" msgid "select movie" msgstr "Wähle Film" @@ -4616,6 +4626,9 @@ msgstr "umgeschaltet" #~ msgid "Enable WLAN Support" #~ msgstr "Aktiviere WLAN Unterstützung" +#~ msgid "Enter WLAN networ kname/SSID:" +#~ msgstr "WLAN Netzwerkname/SSID eingeben:" + #~ msgid "Games / Plugins" #~ msgstr "Spiele / Erweiterungen" -- cgit v1.2.3 From acbad24424304473f967b678bd9deb51f73acf27 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Mon, 10 Nov 2008 10:12:53 +0100 Subject: long keypress on INFO key either brings up single servie EPG view screen like right now or, if any plugins of new type WHERE_EVENTINFO are installed (e.g. GraphMultiEPG, IMDB, OFDB), a choicebox with the relevant plugins. consequence: GraphMultiEPG is no longer ran from extensions menu (blue button) but by long keypress on INFO button instead! --- data/keymap.xml | 4 ++-- .../Plugins/Extensions/GraphMultiEPG/plugin.py | 2 +- lib/python/Plugins/Plugin.py | 4 ++++ lib/python/Screens/InfoBarGenerics.py | 22 +++++++++++++++++++--- 4 files changed, 26 insertions(+), 6 deletions(-) (limited to 'lib/python/Screens') diff --git a/data/keymap.xml b/data/keymap.xml index 5e73490e..6b8b583d 100644 --- a/data/keymap.xml +++ b/data/keymap.xml @@ -77,8 +77,8 @@ - - + + diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py b/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py index 7afbe14a..21d1bfe8 100644 --- a/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py +++ b/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py @@ -93,4 +93,4 @@ def main(session, servicelist, **kwargs): def Plugins(**kwargs): name = _("Graphical Multi EPG") descr = _("A graphical EPG for all services of an specific bouquet") - return [ PluginDescriptor(name=name, description=descr, where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc=main) ] + return [ PluginDescriptor(name=name, description=descr, where = PluginDescriptor.WHERE_EVENTINFO, fnc=main) ] diff --git a/lib/python/Plugins/Plugin.py b/lib/python/Plugins/Plugin.py index a0db1d66..6df4fce7 100644 --- a/lib/python/Plugins/Plugin.py +++ b/lib/python/Plugins/Plugin.py @@ -45,6 +45,10 @@ class PluginDescriptor: # or return a function which is called with session and the interface name for extended setup of this interface WHERE_NETWORKSETUP = 10 + # show up this plugin (or a choicebox with all of them) for long INFO keypress + # or return a function which is called with session and the interface name for extended setup of this interface + WHERE_EVENTINFO = 11 + def __init__(self, name = "Plugin", where = [ ], description = "", icon = None, fnc = None, wakeupfnc = None, internal = False): self.name = name self.internal = internal diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index aab2b649..cdaa2c1e 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -403,8 +403,8 @@ class InfoBarEPG: self.eventView = None self["EPGActions"] = HelpableActionMap(self, "InfobarEPGActions", { - "showEventInfo": (self.openEventView, _("show EPG...")), - "showSingleServiceEPG": (self.openSingleServiceEPG, _("show single service EPG...")), + "showEventView": (self.openEventView, _("show EPG...")), + "showEventInfoPlugin": (self.showEventInfoPlugins, _("show single service EPG...")), "showInfobarOrEpgWhenInfobarAlreadyVisible": self.showEventInfoWhenNotVisible, }) @@ -489,6 +489,23 @@ class InfoBarEPG: ref=self.session.nav.getCurrentlyPlayingServiceReference() self.session.open(EPGSelection, ref) + def showEventInfoPlugins(self): + list = [] + for p in plugins.getPlugins(where = PluginDescriptor.WHERE_EVENTINFO): + list.append((p.name, boundFunction(self.runPlugin, p))) + if len(list): + list.append((_("show single service EPG..."), self.openSingleServiceEPG)) + self.session.openWithCallback(self.EventInfoPluginChosen, ChoiceBox, title=_("Please choose an extension..."), list = list) + else: + self.openSingleServiceEPG() + + def runPlugin(self, plugin): + plugin(session = self.session, servicelist = self.servicelist) + + def EventInfoPluginChosen(self, answer): + if answer is not None: + answer[1]() + def openSimilarList(self, eventid, refstr): self.session.open(EPGSelection, refstr, None, eventid) @@ -1258,7 +1275,6 @@ class InfoBarExtensions: from Tools.BoundFunction import boundFunction # depends on InfoBarExtensions -from Components.PluginComponent import plugins class InfoBarPlugins: def __init__(self): -- cgit v1.2.3 From c138841fc86578cb4344a305cc2ca7e0f7fd4ca8 Mon Sep 17 00:00:00 2001 From: acid-burn Date: Mon, 10 Nov 2008 16:15:44 +0100 Subject: remove unneeded calls to iNetwork.getinterfaces cleanups fix typo --- lib/python/Components/Network.py | 7 ++++--- lib/python/Screens/NetworkSetup.py | 21 +++++++++------------ 2 files changed, 13 insertions(+), 15 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Components/Network.py b/lib/python/Components/Network.py index c41469da..7cc61d84 100755 --- a/lib/python/Components/Network.py +++ b/lib/python/Components/Network.py @@ -505,9 +505,10 @@ class Network: def deactivateInterfaceFinished(self,extra_args): callback = extra_args - if len(self.deactivateInterfaceConsole.appContainers) == 0: - if callback is not None: - callback(True) + if self.deactivateInterfaceConsole: + if len(self.deactivateInterfaceConsole.appContainers) == 0: + if callback is not None: + callback(True) def detectWlanModule(self): self.wlanmodule = None diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index 580673e4..6bfe54ad 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -90,7 +90,6 @@ class NetworkAdapterSelection(Screen,HelpableScreen): self.onClose.append(self.cleanup) def updateList(self): - iNetwork.getInterfaces() self.list = [] default_gw = None num_configured_if = len(iNetwork.getConfiguredAdapters()) @@ -290,7 +289,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self.finished_cb = None self.oktext = _("Press OK on your remote control to continue.") self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up") - + self.createConfig() self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", @@ -675,8 +674,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): def cleanup(self): iNetwork.stopLinkStateConsole() - iNetwork.stopDeactivateInterfaceConsole() - + class AdapterSetupConfiguration(Screen, HelpableScreen): def __init__(self, session,iface): @@ -732,7 +730,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): "right": self.right, }, -2) - iNetwork.getInterfaces(self.updateStatusbar) + self.updateStatusbar() self.onLayoutFinish.append(self.layoutFinished) self.onClose.append(self.cleanup) @@ -908,11 +906,11 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): else: self.mainmenu = self.genMainMenu() self["menulist"].l.setList(self.mainmenu) - iNetwork.getInterfaces(self.updateStatusbar) + self.updateStatusbar() else: self.mainmenu = self.genMainMenu() self["menulist"].l.setList(self.mainmenu) - iNetwork.getInterfaces(self.updateStatusbar) + self.updateStatusbar() def WlanStatusClosed(self, *ret): if ret is not None and len(ret): @@ -920,7 +918,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): iStatus.stopWlanConsole() self.mainmenu = self.genMainMenu() self["menulist"].l.setList(self.mainmenu) - iNetwork.getInterfaces(self.updateStatusbar) + self.updateStatusbar() def WlanScanClosed(self,*ret): if ret[0] is not None: @@ -930,7 +928,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): iStatus.stopWlanConsole() self.mainmenu = self.genMainMenu() self["menulist"].l.setList(self.mainmenu) - iNetwork.getInterfaces(self.updateStatusbar) + self.updateStatusbar() def restartLan(self, ret = False): if (ret == True): @@ -955,9 +953,9 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): pattern = re_compile("Link detected: yes") for item in result: if re_search(pattern, item): - self["statuspic"].setPixmapNum(1) - else: self["statuspic"].setPixmapNum(0) + else: + self["statuspic"].setPixmapNum(1) self["statuspic"].show() def showErrorMessage(self): @@ -988,7 +986,6 @@ class NetworkAdapterTest(Screen): Screen.__init__(self, session) self.iface = iface self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up") - iNetwork.getInterfaces() self.setLabels() self.onClose.append(self.cleanup) self.onHide.append(self.cleanup) -- cgit v1.2.3 From 4eb0a9517110f531d15184ea155ccf3176f7d854 Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 12 Nov 2008 15:02:53 +0100 Subject: add possibility to set diseqc inputs to "nothing connected" --- lib/python/Components/NimManager.py | 10 +++++----- lib/python/Screens/Satconfig.py | 13 +++++++++---- 2 files changed, 14 insertions(+), 9 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Components/NimManager.py b/lib/python/Components/NimManager.py index e1d3b068..41925aeb 100644 --- a/lib/python/Components/NimManager.py +++ b/lib/python/Components/NimManager.py @@ -40,7 +40,7 @@ class SecConfigure: self.configuredSatellites.add(orbpos) def addLNBSimple(self, sec, slotid, diseqcmode, toneburstmode = diseqcParam.NO, diseqcpos = diseqcParam.SENDNO, orbpos = 0, longitude = 0, latitude = 0, loDirection = 0, laDirection = 0, turningSpeed = rotorParam.FAST, useInputPower=True, inputPowerDelta=50): - if orbpos is None: + if orbpos is None or orbpos == 3601: return #simple defaults sec.addLNB() @@ -893,10 +893,10 @@ def InitNimManager(nimmgr): if id != x: choices.append((str(id), nimmgr.getNimDescription(id))) nim.connectedTo = ConfigSelection(choices = choices) - nim.diseqcA = getConfigSatlist(192, nimmgr.satList) - nim.diseqcB = getConfigSatlist(130, nimmgr.satList) - nim.diseqcC = ConfigSatlist(list = nimmgr.satList) - nim.diseqcD = ConfigSatlist(list = nimmgr.satList) + nim.diseqcA = getConfigSatlist(192, [(3601, _('nothing connected'), 1)] + nimmgr.satList) + nim.diseqcB = getConfigSatlist(130, [(3601, _('nothing connected'), 1)] + nimmgr.satList) + nim.diseqcC = ConfigSatlist(list = [(3601, _('nothing connected'), 1)] + nimmgr.satList) + nim.diseqcD = ConfigSatlist(list = [(3601, _('nothing connected'), 1)] + nimmgr.satList) nim.positionerMode = ConfigSelection( choices = [ ("usals", _("USALS")), diff --git a/lib/python/Screens/Satconfig.py b/lib/python/Screens/Satconfig.py index ccb776ea..6dc9f416 100644 --- a/lib/python/Screens/Satconfig.py +++ b/lib/python/Screens/Satconfig.py @@ -407,12 +407,17 @@ class NimSelection(Screen): text = _("nothing connected") elif nimConfig.configMode.value == "simple": if nimConfig.diseqcMode.value in ["single", "toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]: - text = _("Sats") + ": " + nimmanager.getSatName(int(nimConfig.diseqcA.value)) + text = _("Sats") + ": " + if nimConfig.diseqcA.orbital_position != 3601: + text += nimmanager.getSatName(int(nimConfig.diseqcA.value)) if nimConfig.diseqcMode.value in ["toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]: - text += "," + nimmanager.getSatName(int(nimConfig.diseqcB.value)) + if nimConfig.diseqcB.orbital_position != 3601: + text += "," + nimmanager.getSatName(int(nimConfig.diseqcB.value)) if nimConfig.diseqcMode.value == "diseqc_a_b_c_d": - text += "," + nimmanager.getSatName(int(nimConfig.diseqcC.value)) - text += "," + nimmanager.getSatName(int(nimConfig.diseqcD.value)) + if nimConfig.diseqcC.orbital_position != 3601: + text += "," + nimmanager.getSatName(int(nimConfig.diseqcC.value)) + if nimConfig.diseqcD.orbital_position != 3601: + text += "," + nimmanager.getSatName(int(nimConfig.diseqcD.value)) elif nimConfig.diseqcMode.value == "positioner": text = _("Positioner") + ":" if nimConfig.positionerMode.value == "usals": -- cgit v1.2.3 From 47c0f019cb4e1a0c70e497b17c214f1dc851c7ce Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 12 Nov 2008 16:34:46 +0100 Subject: more flexible diseqc / sat config --- lib/python/Components/NimManager.py | 38 ++++++++++++++++++++++++++----------- lib/python/Screens/Satconfig.py | 17 +++++++++++------ po/ar.po | 2 +- po/ca.po | 4 ++-- po/cs.po | 4 ++-- po/da.po | 4 ++-- po/de.po | 4 ++-- po/el.po | 4 ++-- po/en.po | 2 +- po/enigma2.pot | 2 +- po/es.po | 4 ++-- po/fi.po | 4 ++-- po/fr.po | 4 ++-- po/hr.po | 4 ++-- po/hu.po | 4 ++-- po/is.po | 4 ++-- po/it.po | 4 ++-- po/lt.po | 4 ++-- po/nl.po | 4 ++-- po/no.po | 4 ++-- po/pl.po | 4 ++-- po/pt.po | 4 ++-- po/ru.po | 4 ++-- po/sv.po | 4 ++-- po/tr.po | 4 ++-- 25 files changed, 81 insertions(+), 60 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Components/NimManager.py b/lib/python/Components/NimManager.py index 41925aeb..17297e67 100644 --- a/lib/python/Components/NimManager.py +++ b/lib/python/Components/NimManager.py @@ -39,7 +39,7 @@ class SecConfigure: sec.addSatellite(orbpos) self.configuredSatellites.add(orbpos) - def addLNBSimple(self, sec, slotid, diseqcmode, toneburstmode = diseqcParam.NO, diseqcpos = diseqcParam.SENDNO, orbpos = 0, longitude = 0, latitude = 0, loDirection = 0, laDirection = 0, turningSpeed = rotorParam.FAST, useInputPower=True, inputPowerDelta=50): + def addLNBSimple(self, sec, slotid, diseqcmode, toneburstmode = diseqcParam.NO, diseqcpos = diseqcParam.SENDNO, orbpos = 0, longitude = 0, latitude = 0, loDirection = 0, laDirection = 0, turningSpeed = rotorParam.FAST, useInputPower=True, inputPowerDelta=50, fastDiSEqC = False, setVoltageTone = True): if orbpos is None or orbpos == 3601: return #simple defaults @@ -56,10 +56,16 @@ class SecConfigure: sec.setLNBThreshold(11700000) sec.setLNBIncreasedVoltage(lnbParam.OFF) sec.setRepeats(0) - sec.setFastDiSEqC(0) + sec.setFastDiSEqC(fastDiSEqC) sec.setSeqRepeat(0) - sec.setVoltageMode(switchParam.HV) - sec.setToneMode(switchParam.HILO) + + if setVoltageTone: + sec.setVoltageMode(switchParam.HV) + sec.setToneMode(switchParam.HILO) + else: + sec.setVoltageMode(switchParam._14V) + sec.setToneMode(switchParam.OFF) + sec.setCommandOrder(0) #user values @@ -167,18 +173,25 @@ class SecConfigure: elif nim.configMode.value == "simple": #simple config print "diseqcmode: ", nim.diseqcMode.value if nim.diseqcMode.value == "single": #single - self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.NONE, diseqcpos = diseqcParam.SENDNO) + if nim.simpleSingleSendDiSEqC.value: + self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AA) + else: + self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.NONE, diseqcpos = diseqcParam.SENDNO) elif nim.diseqcMode.value == "toneburst_a_b": #Toneburst A/B self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.A, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.SENDNO) self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcB.orbital_position, toneburstmode = diseqcParam.B, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.SENDNO) elif nim.diseqcMode.value == "diseqc_a_b": #DiSEqC A/B - self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AA) - self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcB.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AB) + fastDiSEqC = nim.simpleDiSEqCOnlyOnSatChange.value + setVoltageTone = nim.simpleDiSEqCSetVoltageTone.value + self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AA, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone) + self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcB.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AB, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone) elif nim.diseqcMode.value == "diseqc_a_b_c_d": #DiSEqC A/B/C/D - self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AA) - self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcB.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AB) - self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcC.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.BA) - self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcD.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.BB) + fastDiSEqC = nim.simpleDiSEqCOnlyOnSatChange.value + setVoltageTone = nim.simpleDiSEqCSetVoltageTone.value + self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AA, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone) + self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcB.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AB, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone) + self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcC.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.BA, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone) + self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcD.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.BB, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone) elif nim.diseqcMode.value == "positioner": #Positioner if nim.latitudeOrientation.value == "north": laValue = rotorParam.NORTH @@ -893,6 +906,9 @@ def InitNimManager(nimmgr): if id != x: choices.append((str(id), nimmgr.getNimDescription(id))) nim.connectedTo = ConfigSelection(choices = choices) + nim.simpleSingleSendDiSEqC = ConfigYesNo(default=False) + nim.simpleDiSEqCSetVoltageTone = ConfigYesNo(default=True) + nim.simpleDiSEqCOnlyOnSatChange = ConfigYesNo(default=False) nim.diseqcA = getConfigSatlist(192, [(3601, _('nothing connected'), 1)] + nimmgr.satList) nim.diseqcB = getConfigSatlist(130, [(3601, _('nothing connected'), 1)] + nimmgr.satList) nim.diseqcC = ConfigSatlist(list = [(3601, _('nothing connected'), 1)] + nimmgr.satList) diff --git a/lib/python/Screens/Satconfig.py b/lib/python/Screens/Satconfig.py index 6dc9f416..6489f28f 100644 --- a/lib/python/Screens/Satconfig.py +++ b/lib/python/Screens/Satconfig.py @@ -14,16 +14,21 @@ from datetime import datetime class NimSetup(Screen, ConfigListScreen): def createSimpleSetup(self, list, mode): + nim = self.nimConfig if mode == "single": - list.append(getConfigListEntry(_("Satellite"), self.nimConfig.diseqcA)) + list.append(getConfigListEntry(_("Satellite"), nim.diseqcA)) + list.append(getConfigListEntry(_("Send DiSEqC"), nim.simpleSingleSendDiSEqC)) else: - list.append(getConfigListEntry(_("Port A"), self.nimConfig.diseqcA)) + list.append(getConfigListEntry(_("Port A"), nim.diseqcA)) if mode in ["toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]: - list.append(getConfigListEntry(_("Port B"), self.nimConfig.diseqcB)) + list.append(getConfigListEntry(_("Port B"), nim.diseqcB)) if mode == "diseqc_a_b_c_d": - list.append(getConfigListEntry(_("Port C"), self.nimConfig.diseqcC)) - list.append(getConfigListEntry(_("Port D"), self.nimConfig.diseqcD)) + list.append(getConfigListEntry(_("Port C"), nim.diseqcC)) + list.append(getConfigListEntry(_("Port D"), nim.diseqcD)) + if mode != "toneburst_a_b": + list.append(getConfigListEntry(_("Set Voltage and 22KHz"), nim.simpleDiSEqCSetVoltageTone)) + list.append(getConfigListEntry(_("Send DiSEqC only on satellite change"), nim.simpleDiSEqCOnlyOnSatChange)) def createPositionerSetup(self, list): nim = self.nimConfig @@ -88,7 +93,7 @@ class NimSetup(Screen, ConfigListScreen): self.list.append(self.configMode) if self.nimConfig.configMode.value == "simple": #simple setup - self.diseqcModeEntry = getConfigListEntry(_("DiSEqC Mode"), self.nimConfig.diseqcMode) + self.diseqcModeEntry = getConfigListEntry(_("Mode"), self.nimConfig.diseqcMode) self.list.append(self.diseqcModeEntry) if self.nimConfig.diseqcMode.value in ["single", "toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]: self.createSimpleSetup(self.list, self.nimConfig.diseqcMode.value) diff --git a/po/ar.po b/po/ar.po index 0c9f0248..7ff6583e 100755 --- a/po/ar.po +++ b/po/ar.po @@ -820,7 +820,7 @@ msgstr "دايزك Ø£/ب" msgid "DiSEqC A/B/C/D" msgstr "دايزك Ø£/ب/ج/د" -msgid "DiSEqC Mode" +msgid "Mode" msgstr "وضع الدايزك" msgid "DiSEqC mode" diff --git a/po/ca.po b/po/ca.po index 331ebe3c..7935a925 100755 --- a/po/ca.po +++ b/po/ca.po @@ -851,8 +851,8 @@ msgstr "DiSEqC A/B" msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" -msgid "DiSEqC Mode" -msgstr "Mode DiSEqC" +msgid "Mode" +msgstr "Mode" msgid "DiSEqC mode" msgstr "mode DiSEqC" diff --git a/po/cs.po b/po/cs.po index 1638798b..711b8204 100755 --- a/po/cs.po +++ b/po/cs.po @@ -840,8 +840,8 @@ msgstr "DiSEqC A/B" msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" -msgid "DiSEqC Mode" -msgstr "DiSEqC Mód" +msgid "Mode" +msgstr "Mód" msgid "DiSEqC mode" msgstr "DiSEqC Mód" diff --git a/po/da.po b/po/da.po index 55016cd8..c4d8a941 100755 --- a/po/da.po +++ b/po/da.po @@ -849,8 +849,8 @@ msgstr "DiSEqC A/B" msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" -msgid "DiSEqC Mode" -msgstr "DiSEqC Type" +msgid "Mode" +msgstr "Type" msgid "DiSEqC mode" msgstr "DiSEqC type" diff --git a/po/de.po b/po/de.po index e5f33eec..e506fd97 100755 --- a/po/de.po +++ b/po/de.po @@ -879,8 +879,8 @@ msgstr "DiSEqC A/B" msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" -msgid "DiSEqC Mode" -msgstr "DiSEqC-Modus" +msgid "Mode" +msgstr "Modus" msgid "DiSEqC mode" msgstr "DiSEqC-Modus" diff --git a/po/el.po b/po/el.po index 3053587f..322659a8 100755 --- a/po/el.po +++ b/po/el.po @@ -841,8 +841,8 @@ msgstr "DiSEqC A/B" msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" -msgid "DiSEqC Mode" -msgstr "DiSEqC Mode" +msgid "Mode" +msgstr "Mode" msgid "DiSEqC mode" msgstr "DiSEqC mode" diff --git a/po/en.po b/po/en.po index daff3168..a6b3fd61 100644 --- a/po/en.po +++ b/po/en.po @@ -815,7 +815,7 @@ msgstr "" msgid "DiSEqC A/B/C/D" msgstr "" -msgid "DiSEqC Mode" +msgid "Mode" msgstr "" msgid "DiSEqC mode" diff --git a/po/enigma2.pot b/po/enigma2.pot index 375931bd..9c131a79 100644 --- a/po/enigma2.pot +++ b/po/enigma2.pot @@ -783,7 +783,7 @@ msgid "DiSEqC A/B/C/D" msgstr "" #: ../lib/python/Screens/Satconfig.py:74 -msgid "DiSEqC Mode" +msgid "Mode" msgstr "" #: ../lib/python/Screens/Satconfig.py:180 diff --git a/po/es.po b/po/es.po index 59a83032..1e42b605 100644 --- a/po/es.po +++ b/po/es.po @@ -856,8 +856,8 @@ msgstr "DiSEqC A/B" msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" -msgid "DiSEqC Mode" -msgstr "Modo DiSEqC" +msgid "Mode" +msgstr "Modo" msgid "DiSEqC mode" msgstr "Modo DiSEqC" diff --git a/po/fi.po b/po/fi.po index 19a3ddd9..4f9e0234 100755 --- a/po/fi.po +++ b/po/fi.po @@ -854,8 +854,8 @@ msgstr "DiSEqC A/B" msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" -msgid "DiSEqC Mode" -msgstr "DiSEqC-tila" +msgid "Mode" +msgstr "Tila" msgid "DiSEqC mode" msgstr "DiSEqC-tila" diff --git a/po/fr.po b/po/fr.po index b71e1ce1..885e305a 100644 --- a/po/fr.po +++ b/po/fr.po @@ -854,8 +854,8 @@ msgstr "" msgid "DiSEqC A/B/C/D" msgstr "" -msgid "DiSEqC Mode" -msgstr "Mode DiSEqC" +msgid "Mode" +msgstr "Mode" msgid "DiSEqC mode" msgstr "Mode DiSEqC" diff --git a/po/hr.po b/po/hr.po index 26b554f3..e051eea6 100755 --- a/po/hr.po +++ b/po/hr.po @@ -840,8 +840,8 @@ msgstr "DiSEqC A/B" msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" -msgid "DiSEqC Mode" -msgstr "DiSEqC Mod" +msgid "Mode" +msgstr "Mod" msgid "DiSEqC mode" msgstr "DiSEqC mod" diff --git a/po/hu.po b/po/hu.po index 345f90b4..098761c1 100755 --- a/po/hu.po +++ b/po/hu.po @@ -852,8 +852,8 @@ msgstr "DiSEqC A/B" msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" -msgid "DiSEqC Mode" -msgstr "DiSEqC mód" +msgid "Mode" +msgstr "Mód" msgid "DiSEqC mode" msgstr "DiSEqC mód" diff --git a/po/is.po b/po/is.po index 71e0d6d3..facb2468 100755 --- a/po/is.po +++ b/po/is.po @@ -848,8 +848,8 @@ msgstr "DiSEqC A/B" msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" -msgid "DiSEqC Mode" -msgstr "DiSEqC Gerð" +msgid "Mode" +msgstr "Gerð" msgid "DiSEqC mode" msgstr "DiSEqC gerð" diff --git a/po/it.po b/po/it.po index 0b1bde29..b81e982c 100755 --- a/po/it.po +++ b/po/it.po @@ -847,8 +847,8 @@ msgstr "DiSEqC A/B" msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" -msgid "DiSEqC Mode" -msgstr "Modalità DiSEqc" +msgid "Mode" +msgstr "ModalitÃ" msgid "DiSEqC mode" msgstr "Modalità DiSEqC" diff --git a/po/lt.po b/po/lt.po index 2cdc4f79..61714a9a 100755 --- a/po/lt.po +++ b/po/lt.po @@ -856,8 +856,8 @@ msgstr "DiSEqC A/B" msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" -msgid "DiSEqC Mode" -msgstr "DiSEqC pasirinkimas" +msgid "Mode" +msgstr "Pasirinkimas" msgid "DiSEqC mode" msgstr "DiSEqC pasirinkimas" diff --git a/po/nl.po b/po/nl.po index e63e24b5..8627e0f0 100644 --- a/po/nl.po +++ b/po/nl.po @@ -861,8 +861,8 @@ msgstr "DiSEqC A/B" msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" -msgid "DiSEqC Mode" -msgstr "DiSEqC-modus" +msgid "Mode" +msgstr "Modus" msgid "DiSEqC mode" msgstr "DiSEqC-modus" diff --git a/po/no.po b/po/no.po index a16e0884..520816f4 100755 --- a/po/no.po +++ b/po/no.po @@ -844,8 +844,8 @@ msgstr "DiSEqC A/B" msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" -msgid "DiSEqC Mode" -msgstr "DiSEqC-Modus" +msgid "Mode" +msgstr "Modus" msgid "DiSEqC mode" msgstr "DiSEqC-Modus" diff --git a/po/pl.po b/po/pl.po index eef53bc4..b3332c12 100755 --- a/po/pl.po +++ b/po/pl.po @@ -851,8 +851,8 @@ msgstr "DiSEqC A/B" msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" -msgid "DiSEqC Mode" -msgstr "Tryb DiSEqC" +msgid "Mode" +msgstr "Tryb" msgid "DiSEqC mode" msgstr "Tryb DiSEqC" diff --git a/po/pt.po b/po/pt.po index d37a8e87..72df8b21 100755 --- a/po/pt.po +++ b/po/pt.po @@ -847,8 +847,8 @@ msgstr "DiSEqC A/B" msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" -msgid "DiSEqC Mode" -msgstr "Modo DiSEqC" +msgid "Mode" +msgstr "Modo" msgid "DiSEqC mode" msgstr "Modo DiSEqC" diff --git a/po/ru.po b/po/ru.po index d5c8fff9..2407e7dc 100755 --- a/po/ru.po +++ b/po/ru.po @@ -823,8 +823,8 @@ msgstr "DiSEqC A/B" msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" -msgid "DiSEqC Mode" -msgstr "DiSEqC-режим" +msgid "Mode" +msgstr "режим" msgid "DiSEqC mode" msgstr "DiSEqC-режим" diff --git a/po/sv.po b/po/sv.po index 8f8cb010..1474d7f0 100644 --- a/po/sv.po +++ b/po/sv.po @@ -868,8 +868,8 @@ msgstr "DiSEqC A/B" msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" -msgid "DiSEqC Mode" -msgstr "DiSEqC Läge" +msgid "Mode" +msgstr "Läge" msgid "DiSEqC mode" msgstr "DiSEqC läge" diff --git a/po/tr.po b/po/tr.po index aa9ffc7d..720e17ba 100644 --- a/po/tr.po +++ b/po/tr.po @@ -866,8 +866,8 @@ msgstr "DiSEqC A/B" msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" -msgid "DiSEqC Mode" -msgstr "DiSEqC Modu" +msgid "Mode" +msgstr "Modu" msgid "DiSEqC mode" msgstr "DiSEqC modu" -- cgit v1.2.3 From 41c124fa6370bb3933c28c50ee1964a1450d3ca7 Mon Sep 17 00:00:00 2001 From: acid-burn Date: Thu, 13 Nov 2008 08:09:36 +0100 Subject: fix saving of nameservers --- lib/python/Screens/NetworkSetup.py | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index 6bfe54ad..588a46ff 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -219,6 +219,10 @@ class NameserverSetup(Screen, ConfigListScreen, HelpableScreen): "yellow": (self.remove, _("remove a nameserver entry")), }) + self["actions"] = NumberActionMap(["SetupActions"], + { + "ok": self.ok, + }, -2) self.list = [] ConfigListScreen.__init__(self, self.list) -- cgit v1.2.3 From 6933710b3eab806151f6352d3b1a228fb72a3e96 Mon Sep 17 00:00:00 2001 From: acid-burn Date: Fri, 14 Nov 2008 08:24:36 +0100 Subject: small skin fix fix possible crash when leaving networksetup --- data/skin_default.xml | 4 ++-- lib/python/Components/Network.py | 1 + lib/python/Screens/NetworkSetup.py | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) (limited to 'lib/python/Screens') diff --git a/data/skin_default.xml b/data/skin_default.xml index 41a7e4c9..993fd320 100755 --- a/data/skin_default.xml +++ b/data/skin_default.xml @@ -37,13 +37,13 @@ - + - + diff --git a/lib/python/Components/Network.py b/lib/python/Components/Network.py index 7cc61d84..53b487d5 100755 --- a/lib/python/Components/Network.py +++ b/lib/python/Components/Network.py @@ -63,6 +63,7 @@ class Network: def getDataForInterface(self, iface,callback): #get ip out of ip addr, as avahi sometimes overrides it in ifconfig. + self.Console = Console() cmd = "ip -o addr" self.Console.ePopen(cmd, self.IPaddrFinished, [iface,callback]) diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index 588a46ff..32e2dafd 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -174,6 +174,7 @@ class NetworkAdapterSelection(Screen,HelpableScreen): def cleanup(self): iNetwork.stopLinkStateConsole() iNetwork.stopRestartConsole() + iNetwork.stopGetInterfacesConsole() def restartLan(self): iNetwork.restartNetwork(self.restartLanDataAvail) -- cgit v1.2.3 From da81f2941ca129621d6511d1dcbc96bd29f4802b Mon Sep 17 00:00:00 2001 From: acid-burn Date: Fri, 14 Nov 2008 09:54:41 +0100 Subject: make hidden... translateable --- lib/python/Screens/NetworkSetup.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index 32e2dafd..5cb4d390 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -426,10 +426,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): if a['active']: if a['essid'] == "": a['essid'] = a['bssid'] - self.nwlist.append( a['essid']) + self.nwlist.append((a['essid'],a['essid'])) self.nwlist.sort(key = lambda x: x[0]) except: - self.nwlist.append("No Networks found") + self.nwlist.append(("No Networks found",_("No Networks found"))) self.wsconfig = self.ws.loadConfig() if self.essid is not None: # ssid from wlan scan @@ -438,10 +438,9 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self.default = self.wsconfig['ssid'] if "hidden..." not in self.nwlist: - self.nwlist.append("hidden...") + self.nwlist.append(("hidden...",_("hidden network"))) if self.default not in self.nwlist: - self.nwlist.append(self.default) - + self.nwlist.append((self.default,self.default)) config.plugins.wlan.essid = NoSave(ConfigSelection(self.nwlist, default = self.default )) config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = self.wsconfig['hiddenessid'], visible_width = 50, fixed_size = False)) -- cgit v1.2.3 From d2c353af6c84de0958ed56ef817e67f21934f59c Mon Sep 17 00:00:00 2001 From: acid-burn Date: Fri, 14 Nov 2008 12:50:03 +0100 Subject: remove unneeded check --- lib/python/Screens/NetworkSetup.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index 5cb4d390..ea2d17e6 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -88,7 +88,8 @@ class NetworkAdapterSelection(Screen,HelpableScreen): if len(self.adapters) == 1: self.onFirstExecBegin.append(self.okbuttonClick) self.onClose.append(self.cleanup) - + + def updateList(self): self.list = [] default_gw = None @@ -650,15 +651,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): def cancel(self): if self.oldInterfaceState is False: - iNetwork.deactivateInterface(self.iface,self.deactivateInterfaceCB) + iNetwork.deactivateInterface(self.iface,self.cancelCB) else: self.close('cancel') - def deactivateInterfaceCB(self,data): - if data is not None: - if data is True: - iNetwork.getInterfaces(self.cancelCB) - def cancelCB(self,data): if data is not None: if data is True: -- cgit v1.2.3 From 6347d817582886ab7c7535b44601538749d06d5b Mon Sep 17 00:00:00 2001 From: ghost Date: Sun, 16 Nov 2008 12:23:21 +0100 Subject: Add possibility to set Pilot also for DVB-S2 non 8PSK Transponders (i.e. the new Euro1080 Transponder on 7°E) But this needs also new drivers! MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/dvb/db.cpp | 9 +++------ lib/dvb/frontend.cpp | 29 +++++++++++++---------------- lib/python/Screens/ScanSetup.py | 3 +-- lib/service/servicedvb.cpp | 15 ++++++--------- 4 files changed, 23 insertions(+), 33 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/dvb/db.cpp b/lib/dvb/db.cpp index c6c2e855..1c332033 100644 --- a/lib/dvb/db.cpp +++ b/lib/dvb/db.cpp @@ -497,7 +497,7 @@ void eDVBDB::saveServicelist(const char *file) { if (sat.system == eDVBFrontendParametersSatellite::System::DVB_S2) { - fprintf(f, "\ts %d:%d:%d:%d:%d:%d:%d:%d:%d:%d", + fprintf(f, "\ts %d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d", sat.frequency, sat.symbol_rate, sat.polarisation, sat.fec, sat.orbital_position > 1800 ? sat.orbital_position - 3600 : sat.orbital_position, @@ -505,11 +505,8 @@ void eDVBDB::saveServicelist(const char *file) flags, sat.system, sat.modulation, - sat.rolloff); - if (sat.modulation == eDVBFrontendParametersSatellite::Modulation::M8PSK) - fprintf(f, ":%d\n", sat.pilot); - else - fprintf(f, "\n"); + sat.rolloff, + sat.pilot); } else { diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index 27ea66ec..b0e92d39 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -1014,22 +1014,19 @@ void fillDictWithSatelliteData(ePyObject dict, const FRONTENDPARAMETERS &parm, e break; } PutToDict(dict, "rolloff", tmp); - if (parm_u_qpsk_fec_inner > FEC_S2_QPSK_9_10) + switch(parm_inversion & 0x30) { - switch(parm_inversion & 0x30) - { - case 0: // pilot off - tmp = "PILOT_OFF"; - break; - case 0x10: // pilot on - tmp = "PILOT_ON"; - break; - case 0x20: // pilot auto - tmp = "PILOT_AUTO"; - break; - } - PutToDict(dict, "pilot", tmp); + case 0: // pilot off + tmp = "PILOT_OFF"; + break; + case 0x10: // pilot on + tmp = "PILOT_ON"; + break; + case 0x20: // pilot auto + tmp = "PILOT_AUTO"; + break; } + PutToDict(dict, "pilot", tmp); tmp = "DVB-S2"; } else @@ -1310,7 +1307,7 @@ void eDVBFrontend::getTransponderData(ePyObject dest, bool original) { const FRONTENDPARAMETERS &parm = original || m_simulate ? this->parm : front; const char *tmp = "INVERSION_AUTO"; - switch(parm_inversion) + switch(parm_inversion & 3) { case INVERSION_ON: tmp = "INVERSION_ON"; @@ -1916,10 +1913,10 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm, return -EINVAL; } parm_inversion |= (feparm.rolloff << 2); // Hack.. we use bit 2..3 of inversion param for rolloff + parm_inversion |= (feparm.pilot << 4); // Hack.. we use bit 4..5 of inversion param for pilot if (feparm.modulation == eDVBFrontendParametersSatellite::Modulation::M8PSK) { parm_u_qpsk_fec_inner = (fe_code_rate_t)((int)parm_u_qpsk_fec_inner+9); // 8PSK fec driver values are decimal 9 bigger - parm_inversion |= (feparm.pilot << 4); // Hack.. we use bit 4..5 of inversion param for pilot } } #endif diff --git a/lib/python/Screens/ScanSetup.py b/lib/python/Screens/ScanSetup.py index ab110a24..608dcb2d 100644 --- a/lib/python/Screens/ScanSetup.py +++ b/lib/python/Screens/ScanSetup.py @@ -394,8 +394,7 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport): self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation) self.list.append(self.modulationEntry) self.list.append(getConfigListEntry(_('Rolloff'), self.scan_sat.rolloff)) - if self.scan_sat.modulation.value == "8psk": - self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot)) + self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot)) elif self.scan_type.value == "single_satellite": self.updateSatList() print self.scan_satselection[index_to_scan] diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 2f98ed6b..6c1e46f7 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -174,17 +174,14 @@ void PutSatelliteDataToDict(ePyObject &dict, eDVBFrontendParametersSatellite &fe case eDVBFrontendParametersSatellite::RollOff::alpha_0_20: tmp="0.20"; break; } PutToDict(dict, "roll off", tmp); - if (feparm.modulation == eDVBFrontendParametersSatellite::Modulation::M8PSK) + switch(feparm.pilot) { - switch(feparm.pilot) - { - case eDVBFrontendParametersSatellite::Pilot::On: tmp="ON"; break; - case eDVBFrontendParametersSatellite::Pilot::Off: tmp="OFF"; break; - default: - case eDVBFrontendParametersSatellite::Pilot::Unknown: tmp="AUTO"; break; - } - PutToDict(dict, "pilot", tmp); + case eDVBFrontendParametersSatellite::Pilot::On: tmp="ON"; break; + case eDVBFrontendParametersSatellite::Pilot::Off: tmp="OFF"; break; + default: + case eDVBFrontendParametersSatellite::Pilot::Unknown: tmp="AUTO"; break; } + PutToDict(dict, "pilot", tmp); tmp="DVB-S2"; break; } -- cgit v1.2.3 From eea4ecaf18d01dbdbe1590bc7b6e4c6f9da1fe8b Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 17 Nov 2008 00:00:43 +0100 Subject: allows to configure the path for timeshift recordings via gui, by Moritz Venn. closes #64. --- data/menu.xml | 1 + lib/python/Components/UsageConfig.py | 5 ++++- lib/python/Screens/LocationBox.py | 29 +++++++++++++++++++++++++++++ lib/service/servicedvb.cpp | 32 ++++++++++++++++++++++++-------- 4 files changed, 58 insertions(+), 9 deletions(-) (limited to 'lib/python/Screens') diff --git a/data/menu.xml b/data/menu.xml index 93455b23..369b20e0 100644 --- a/data/menu.xml +++ b/data/menu.xml @@ -70,6 +70,7 @@ --> + diff --git a/lib/python/Components/UsageConfig.py b/lib/python/Components/UsageConfig.py index 714d366d..6ed87840 100644 --- a/lib/python/Components/UsageConfig.py +++ b/lib/python/Components/UsageConfig.py @@ -1,5 +1,5 @@ from Components.Harddisk import harddiskmanager -from config import ConfigSubsection, ConfigYesNo, config, ConfigSelection, ConfigText, ConfigNumber, ConfigSet +from config import ConfigSubsection, ConfigYesNo, config, ConfigSelection, ConfigText, ConfigNumber, ConfigSet, ConfigLocations from enigma import Misc_Options, setTunerTypePriorityOrder; from SystemInfo import SystemInfo import os @@ -30,6 +30,9 @@ def InitUsageConfig(): ("standard", _("standard")), ("swap", _("swap PiP and main picture")), ("swapstop", _("move PiP to main picture")), ("stop", _("stop PiP")) ]) + config.usage.allowed_timeshift_paths = ConfigLocations(default = ["/media/hdd/"]) + config.usage.timeshift_path = ConfigText(default = "/media/hdd") + config.usage.on_movie_start = ConfigSelection(default = "ask", choices = [ ("ask", _("Ask user")), ("resume", _("Resume from last position")), ("beginning", _("Start from the beginning")) ]) config.usage.on_movie_stop = ConfigSelection(default = "ask", choices = [ diff --git a/lib/python/Screens/LocationBox.py b/lib/python/Screens/LocationBox.py index 7cd6cbf9..68d4f772 100644 --- a/lib/python/Screens/LocationBox.py +++ b/lib/python/Screens/LocationBox.py @@ -503,3 +503,32 @@ class MovieLocationBox(LocationBox): def __init__(self, session, text, dir, minFree = None): inhibitDirs = ["/bin", "/boot", "/dev", "/etc", "/lib", "/proc", "/sbin", "/sys", "/usr", "/var"] LocationBox.__init__(self, session, text = text, currDir = dir, bookmarks = config.movielist.videodirs, autoAdd = True, editDir = True, inhibitDirs = inhibitDirs, minFree = minFree) + +class TimeshiftLocationBox(LocationBox): + + skinName = "LocationBox" # XXX: though we could use a custom skin or inherit the hardcoded one we stick with the original :-) + + def __init__(self, session): + inhibitDirs = ["/bin", "/boot", "/dev", "/etc", "/lib", "/proc", "/sbin", "/sys", "/usr", "/var"] + LocationBox.__init__( + self, + session, + text = _("Where to save temporary timeshift recordings?"), + currDir = config.usage.timeshift_path.value, + bookmarks = config.usage.allowed_timeshift_paths, + autoAdd = True, + editDir = True, + inhibitDirs = inhibitDirs, + minFree = 1024 # XXX: the same requirement is hardcoded in servicedvb.cpp + ) + + def cancel(self): + config.usage.timeshift_path.cancel() + LocationBox.cancel(self) + + def selectConfirmed(self, ret): + if ret: + config.usage.timeshift_path.value = self.getPreferredFolder() + config.usage.timeshift_path.save() + LocationBox.selectConfirmed(self, ret) + diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 6c1e46f7..4141236a 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -31,8 +31,6 @@ #error no byte order defined! #endif -#define TSPATH "/media/hdd" - class eStaticServiceDVBInformation: public iStaticServiceInformation { DECLARE_REF(eStaticServiceDVBInformation); @@ -1494,9 +1492,16 @@ RESULT eDVBServicePlay::timeshift(ePtr &ptr) { if (!m_timeshift_enabled) { - /* we need enough diskspace */ + /* query config path */ + std::string tspath; + if(ePythonConfigQuery::getConfigValue("config.usage.timeshift_path", tspath) == -1){ + eDebug("could not query ts path from config"); + return -4; + } + tspath.append("/"); + /* we need enough diskspace */ struct statfs fs; - if (statfs(TSPATH "/.", &fs) < 0) + if (statfs(tspath.c_str(), &fs) < 0) { eDebug("statfs failed!"); return -2; @@ -2114,12 +2119,23 @@ RESULT eDVBServicePlay::startTimeshift() if (!m_record) return -3; - char templ[]=TSPATH "/timeshift.XXXXXX"; + std::string tspath; + if(ePythonConfigQuery::getConfigValue("config.usage.timeshift_path", tspath) == -1){ + eDebug("could not query ts path"); + return -5; + } + tspath.append("/timeshift.XXXXXX"); + char* templ; + templ = new char[tspath.length() + 1]; + strcpy(templ, tspath.c_str()); + m_timeshift_fd = mkstemp(templ); - m_timeshift_file = templ; - + m_timeshift_file = std::string(templ); + eDebug("recording to %s", templ); - + + delete [] templ; + if (m_timeshift_fd < 0) { m_record = 0; -- cgit v1.2.3 From 153e0ed5048c79c600e1acd085b62015b7314ba7 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 17 Nov 2008 00:18:37 +0100 Subject: Patch by Moritz Venn/Anders Holst: the long awaited 'setting tags from timer menu'-patch --- RecordTimer.py | 12 +++- lib/python/Components/MovieList.py | 38 +++++++---- lib/python/Screens/InputBox.py | 4 +- lib/python/Screens/MovieSelection.py | 127 ++++++++++++++++++++++------------- lib/python/Screens/TimerEntry.py | 89 ++++++++++-------------- 5 files changed, 153 insertions(+), 117 deletions(-) (limited to 'lib/python/Screens') diff --git a/RecordTimer.py b/RecordTimer.py index 397ff8a7..28b878a1 100644 --- a/RecordTimer.py +++ b/RecordTimer.py @@ -91,7 +91,7 @@ class RecordTimerEntry(timer.TimerEntry, object): Notifications.AddNotification(Screens.Standby.TryQuitMainloop, 1, onSessionOpenCallback=RecordTimerEntry.stopTryQuitMainloop, default_yes = default_yes) ################################################################# - def __init__(self, serviceref, begin, end, name, description, eit, disabled = False, justplay = False, afterEvent = AFTEREVENT.NONE, checkOldTimers = False, dirname = None): + def __init__(self, serviceref, begin, end, name, description, eit, disabled = False, justplay = False, afterEvent = AFTEREVENT.NONE, checkOldTimers = False, dirname = None, tags = None): timer.TimerEntry.__init__(self, int(begin), int(end)) if checkOldTimers == True: @@ -117,6 +117,7 @@ class RecordTimerEntry(timer.TimerEntry, object): self.dirname = dirname self.dirnameHadToFallback = False self.autoincrease = False + self.tags = tags or [] self.log_entries = [] self.resetState() @@ -192,6 +193,7 @@ class RecordTimerEntry(timer.TimerEntry, object): f.write(self.name + "\n") f.write(self.description + "\n") f.write(str(self.begin) + "\n") + f.write(' '.join(self.tags)) f.close() except IOError: self.log(4, "failed to write meta information") @@ -368,10 +370,14 @@ def createTimer(xml): location = xml.getAttribute("location").encode("utf-8") else: location = None + if xml.hasAttribute("tags") and xml.getAttribute("tags"): + tags = xml.getAttribute("tags").encode("utf-8").split(' ') + else: + tags = None name = xml.getAttribute("name").encode("utf-8") #filename = xml.getAttribute("filename").encode("utf-8") - entry = RecordTimerEntry(serviceref, begin, end, name, description, eit, disabled, justplay, afterevent, dirname = location) + entry = RecordTimerEntry(serviceref, begin, end, name, description, eit, disabled, justplay, afterevent, dirname = location, tags = tags) entry.repeated = int(repeated) for l in elementsWithTag(xml.childNodes, "log"): @@ -492,6 +498,8 @@ class RecordTimer(timer.Timer): list.append(' eit="' + str(timer.eit) + '"') if timer.dirname is not None: list.append(' location="' + str(stringToXML(timer.dirname)) + '"') + if timer.tags is not None: + list.append(' tags="' + str(stringToXML(' '.join(timer.tags))) + '"') list.append(' disabled="' + str(int(timer.disabled)) + '"') list.append(' justplay="' + str(int(timer.justplay)) + '"') list.append('>\n') diff --git a/lib/python/Components/MovieList.py b/lib/python/Components/MovieList.py index ace36012..8568f3d6 100644 --- a/lib/python/Components/MovieList.py +++ b/lib/python/Components/MovieList.py @@ -103,7 +103,8 @@ class MovieList(GUIComponent): txt = info.getName(serviceref) service = ServiceReference(info.getInfoString(serviceref, iServiceInformation.sServiceref)) description = info.getInfoString(serviceref, iServiceInformation.sDescription) - + tags = info.getInfoString(serviceref, iServiceInformation.sTags) + begin_string = "" if begin > 0: t = FuzzyTime(begin) @@ -111,23 +112,33 @@ class MovieList(GUIComponent): if self.list_type == MovieList.LISTTYPE_ORIGINAL: res.append(MultiContentEntryText(pos=(0, 0), size=(width-182, 30), font = 0, flags = RT_HALIGN_LEFT, text=txt)) - if service is not None: - res.append(MultiContentEntryText(pos=(width-180, 0), size=(180, 30), font = 2, flags = RT_HALIGN_RIGHT, text = service.getServiceName())) + if self.tags: + res.append(MultiContentEntryText(pos=(width-180, 0), size=(180, 30), font = 2, flags = RT_HALIGN_RIGHT, text = tags)) + if service is not None: + res.append(MultiContentEntryText(pos=(200, 50), size=(200, 20), font = 1, flags = RT_HALIGN_LEFT, text = service.getServiceName())) + else: + if service is not None: + res.append(MultiContentEntryText(pos=(width-180, 0), size=(180, 30), font = 2, flags = RT_HALIGN_RIGHT, text = service.getServiceName())) res.append(MultiContentEntryText(pos=(0, 30), size=(width, 20), font=1, flags=RT_HALIGN_LEFT, text=description)) - res.append(MultiContentEntryText(pos=(0, 50), size=(width-270, 20), font=1, flags=RT_HALIGN_LEFT, text=begin_string)) - res.append(MultiContentEntryText(pos=(width-200, 50), size=(200, 20), font=1, flags=RT_HALIGN_RIGHT, text=len)) + res.append(MultiContentEntryText(pos=(0, 50), size=(200, 20), font=1, flags=RT_HALIGN_LEFT, text=begin_string)) + res.append(MultiContentEntryText(pos=(width-200, 50), size=(198, 20), font=1, flags=RT_HALIGN_RIGHT, text=len)) elif self.list_type == MovieList.LISTTYPE_COMPACT_DESCRIPTION: res.append(MultiContentEntryText(pos=(0, 0), size=(width-120, 20), font = 0, flags = RT_HALIGN_LEFT, text = txt)) - if service is not None: - res.append(MultiContentEntryText(pos=(width-212, 20), size=(154, 17), font = 1, flags = RT_HALIGN_RIGHT, text = service.getServiceName())) res.append(MultiContentEntryText(pos=(0, 20), size=(width-212, 17), font=1, flags=RT_HALIGN_LEFT, text=description)) res.append(MultiContentEntryText(pos=(width-120, 6), size=(120, 20), font=1, flags=RT_HALIGN_RIGHT, text=begin_string)) + if service is not None: + res.append(MultiContentEntryText(pos=(width-212, 20), size=(154, 17), font = 1, flags = RT_HALIGN_RIGHT, text = service.getServiceName())) res.append(MultiContentEntryText(pos=(width-58, 20), size=(58, 20), font=1, flags=RT_HALIGN_RIGHT, text=len)) elif self.list_type == MovieList.LISTTYPE_COMPACT: res.append(MultiContentEntryText(pos=(0, 0), size=(width-77, 20), font = 0, flags = RT_HALIGN_LEFT, text = txt)) - if service is not None: - res.append(MultiContentEntryText(pos=(width-200, 20), size=(200, 17), font = 1, flags = RT_HALIGN_RIGHT, text = service.getServiceName())) - res.append(MultiContentEntryText(pos=(0, 20), size=(width-200, 17), font=1, flags=RT_HALIGN_LEFT, text=begin_string)) + if self.tags: + res.append(MultiContentEntryText(pos=(width-200, 20), size=(200, 17), font = 1, flags = RT_HALIGN_RIGHT, text = tags)) + if service is not None: + res.append(MultiContentEntryText(pos=(200, 20), size=(200, 17), font = 1, flags = RT_HALIGN_LEFT, text = service.getServiceName())) + else: + if service is not None: + res.append(MultiContentEntryText(pos=(width-200, 20), size=(200, 17), font = 1, flags = RT_HALIGN_RIGHT, text = service.getServiceName())) + res.append(MultiContentEntryText(pos=(0, 20), size=(200, 17), font=1, flags=RT_HALIGN_LEFT, text=begin_string)) res.append(MultiContentEntryText(pos=(width-75, 0), size=(75, 20), font=0, flags=RT_HALIGN_RIGHT, text=len)) else: assert(self.list_type == MovieList.LISTTYPE_MINIMAL) @@ -212,6 +223,7 @@ class MovieList(GUIComponent): if this_tags == ['']: this_tags = [] this_tags = set(this_tags) + tags |= this_tags # filter_tags is either None (which means no filter at all), or # a set. In this case, all elements of filter_tags must be present, @@ -219,7 +231,6 @@ class MovieList(GUIComponent): if filter_tags is not None and not this_tags.issuperset(filter_tags): continue - tags |= this_tags self.list.append((serviceref, info, begin, -1)) if self.sort_type == MovieList.SORT_ALPHANUMERIC: @@ -243,8 +254,9 @@ class MovieList(GUIComponent): for x in self.list: if x[0] == serviceref: self.instance.moveSelectionTo(count) - break + return True count += 1 - + return False + def moveDown(self): self.instance.moveSelection(self.instance.moveDown) diff --git a/lib/python/Screens/InputBox.py b/lib/python/Screens/InputBox.py index 43b8a8b8..61ce356a 100644 --- a/lib/python/Screens/InputBox.py +++ b/lib/python/Screens/InputBox.py @@ -8,12 +8,14 @@ from Tools.BoundFunction import boundFunction from time import time class InputBox(Screen): - def __init__(self, session, title = "", windowTitle = _("Input"), **kwargs): + def __init__(self, session, title = "", windowTitle = _("Input"), useableChars = None, **kwargs): Screen.__init__(self, session) self["text"] = Label(title) self["input"] = Input(**kwargs) self.onShown.append(boundFunction(self.setTitle, windowTitle)) + if useableChars is not None: + self["input"].setUseableChars(useableChars) self["actions"] = NumberActionMap(["WizardActions", "InputBoxActions", "InputAsciiActions", "KeyboardInputActions"], { diff --git a/lib/python/Screens/MovieSelection.py b/lib/python/Screens/MovieSelection.py index c05f145f..5951653f 100644 --- a/lib/python/Screens/MovieSelection.py +++ b/lib/python/Screens/MovieSelection.py @@ -29,6 +29,28 @@ config.movielist.description = ConfigInteger(default=MovieList.HIDE_DESCRIPTION) config.movielist.last_videodir = ConfigText(default=resolveFilename(SCOPE_HDD)) config.movielist.last_timer_videodir = ConfigText(default=resolveFilename(SCOPE_HDD)) config.movielist.videodirs = ConfigLocations(default=[resolveFilename(SCOPE_HDD)]) +config.movielist.first_tags = ConfigText(default="") +config.movielist.second_tags = ConfigText(default="") + + +def setPreferredTagEditor(te): + global preferredTagEditor + try: + if preferredTagEditor == None: + preferredTagEditor = te + print "Preferred tag editor changed to ", preferredTagEditor + else: + print "Preferred tag editor already set to ", preferredTagEditor + print "ignoring ", te + except: + preferredTagEditor = te + print "Preferred tag editor set to ", preferredTagEditor + +def getPreferredTagEditor(): + global preferredTagEditor + return preferredTagEditor + +setPreferredTagEditor(None) class MovieContextMenu(Screen): def __init__(self, session, csel, service): @@ -71,10 +93,8 @@ class MovieContextMenu(Screen): def sortBy(self, newType): config.movielist.moviesort.value = newType - self.csel.selectedmovie = self.csel.getCurrent() self.csel.setSortType(newType) self.csel.reloadList() - self.csel.moveTo() self.close() def listType(self, newType): @@ -123,7 +143,7 @@ class MovieContextMenu(Screen): self.session.openWithCallback(self.close, MessageBox, _("Delete failed!"), MessageBox.TYPE_ERROR) else: self.csel["list"].removeService(self.service) - self.csel["freeDiskSpace"].update() + self.csel["freeDiskSpace"].update() self.close() class SelectionEventInfo: @@ -149,6 +169,7 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): self.tags = [ ] self.selected_tags = None + self.selected_tags_ele = None self.movemode = False self.bouquet_mark_edit = False @@ -178,7 +199,7 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): # Need list for init SelectionEventInfo.__init__(self) - self["key_red"] = Button(_("All...")) + self["key_red"] = Button(_("All")) self["key_green"] = Button("") self["key_yellow"] = Button("") self["key_blue"] = Button("") @@ -201,9 +222,9 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): self["ColorActions"] = HelpableActionMap(self, "ColorActions", { "red": (self.showAll, _("show all")), - "green": (self.showTagsFirst, _("show first tag")), - "yellow": (self.showTagsSecond, _("show second tag")), - "blue": (self.showTagsMenu, _("show tag menu")), + "green": (self.showTagsFirst, _("show first selected tag")), + "yellow": (self.showTagsSecond, _("show second selected tag")), + "blue": (self.showTagsSelect, _("show tag menu")), }) self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", @@ -246,11 +267,8 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): self.updateDescription() def updateHDDData(self): - self.reloadList() - if self.selectedmovie is not None: - self.moveTo() + self.reloadList(self.selectedmovie) self["waitingtext"].visible = False - self.updateTags() def moveTo(self): self["list"].moveTo(self.selectedmovie) @@ -285,26 +303,29 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): def updateTags(self): # get a list of tags available in this list self.tags = list(self["list"].tags) - - # by default, we do not display any filtering options - self.tag_first = "" - self.tag_second = "" - - # when tags are present, however, the first two are - # directly mapped to the second, third ("green", "yellow") buttons - if len(self.tags) > 0: - self.tag_first = self.getTagDescription(self.tags[0]) - - if len(self.tags) > 1: - self.tag_second = self.getTagDescription(self.tags[1]) - + + if not self.tags: + # by default, we do not display any filtering options + self.tag_first = "" + self.tag_second = "" + else: + tmp = config.movielist.first_tags.value + if tmp in self.tags: + self.tag_first = tmp + else: + self.tag_first = "<"+_("Tag 1")+">" + tmp = config.movielist.second_tags.value + if tmp in self.tags: + self.tag_second = tmp + else: + self.tag_second = "<"+_("Tag 2")+">" self["key_green"].text = self.tag_first self["key_yellow"].text = self.tag_second # the rest is presented in a list, available on the # fourth ("blue") button - if len(self.tags) > 2: - self["key_blue"].text = _("Other...") + if self.tags: + self["key_blue"].text = _("Tags")+"..." else: self["key_blue"].text = "" @@ -317,20 +338,26 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): def setSortType(self, type): self["list"].setSortType(type) - def reloadList(self): + def reloadList(self, sel = None, home = False): if not pathExists(config.movielist.last_videodir.value): path = resolveFilename(SCOPE_HDD) config.movielist.last_videodir.value = path config.movielist.last_videodir.save() self.current_ref = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + path) self["freeDiskSpace"].path = path + if sel is None: + sel = self.getCurrent() self["list"].reload(self.current_ref, self.selected_tags) title = _("Recorded files...") - if self.selected_tags is not None: - title += " - " + ','.join(self.selected_tags) if config.usage.setup_level.index >= 2: # expert+ title += " " + config.movielist.last_videodir.value + if self.selected_tags is not None: + title += " - " + ','.join(self.selected_tags) self.setTitle(title) + if not (sel and self["list"].moveTo(sel)): + if home: + self["list"].moveToIndex(0) + self.updateTags() self["freeDiskSpace"].update() def doPathSelect(self): @@ -348,7 +375,7 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): config.movielist.last_videodir.save() self.current_ref = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + res) self["freeDiskSpace"].path = res - self.reloadList() + self.reloadList(home = True) else: self.session.open( MessageBox, @@ -358,35 +385,41 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): ) def showAll(self): + self.selected_tags_ele = None self.selected_tags = None - self.reloadList() + self.reloadList(home = True) - def showTagsN(self, n): - if len(self.tags) < n: + def showTagsN(self, tagele): + if not self.tags: self.showTagWarning() + elif not tagele or self.selected_tags_ele == tagele or not tagele.value in self.tags: + self.showTagsMenu(tagele) else: - print "select tag #%d, %s, %s" % (n, self.tags[n - 1], ','.join(self.tags)) - self.selected_tags = set([self.tags[n - 1]]) - self.reloadList() + self.selected_tags_ele = tagele + self.selected_tags = set([tagele.value]) + self.reloadList(home = True) def showTagsFirst(self): - self.showTagsN(1) + self.showTagsN(config.movielist.first_tags) def showTagsSecond(self): - self.showTagsN(2) + self.showTagsN(config.movielist.second_tags) + + def showTagsSelect(self): + self.showTagsN(None) def tagChosen(self, tag): if tag is not None: self.selected_tags = set([tag[0]]) - self.reloadList() + if self.selected_tags_ele: + self.selected_tags_ele.value = tag[0] + self.selected_tags_ele.save() + self.reloadList(home = True) - def showTagsMenu(self): - if len(self.tags) < 3: - self.showTagWarning() - else: - list = [(tag, self.getTagDescription(tag)) for tag in self.tags ] - self.session.openWithCallback(self.tagChosen, ChoiceBox, title=_("Please select keyword to filter..."), list = list) + def showTagsMenu(self, tagele): + self.selected_tags_ele = tagele + list = [(tag, self.getTagDescription(tag)) for tag in self.tags ] + self.session.openWithCallback(self.tagChosen, ChoiceBox, title=_("Please select tag to filter..."), list = list) def showTagWarning(self): - # TODO - self.session.open(MessageBox, _("You need to define some keywords first!\nPress the menu-key to define keywords.\nDo you want to define keywords now?"), MessageBox.TYPE_ERROR) + self.session.open(MessageBox, _("No tags are set on these movies."), MessageBox.TYPE_ERROR) diff --git a/lib/python/Screens/TimerEntry.py b/lib/python/Screens/TimerEntry.py index c4dfff72..1774061d 100644 --- a/lib/python/Screens/TimerEntry.py +++ b/lib/python/Screens/TimerEntry.py @@ -8,6 +8,7 @@ from Components.MenuList import MenuList from Components.Button import Button from Components.Label import Label from Components.Pixmap import Pixmap +from Screens.MovieSelection import getPreferredTagEditor from Screens.LocationBox import MovieLocationBox from Screens.ChoiceBox import ChoiceBox from RecordTimer import AFTEREVENT @@ -21,8 +22,7 @@ class TimerEntry(Screen, ConfigListScreen): Screen.__init__(self, session) self.timer = timer - self.entryStartDate = None - self.entryEndDate = None + self.entryDate = None self.entryService = None self["oktext"] = Label(_("OK")) @@ -88,13 +88,13 @@ class TimerEntry(Screen, ConfigListScreen): self.timerentry_type = ConfigSelection(choices = [("once",_("once")), ("repeated", _("repeated"))], default = type) self.timerentry_name = ConfigText(default = self.timer.name, visible_width = 50, fixed_size = False) self.timerentry_description = ConfigText(default = self.timer.description, visible_width = 50, fixed_size = False) + self.timerentry_tags = self.timer.tags + [] + self.timerentry_tagsset = ConfigSelection(choices = [len(self.timerentry_tags) == 0 and "None" or " ".join(self.timerentry_tags)]) self.timerentry_repeated = ConfigSelection(default = repeated, choices = [("daily", _("daily")), ("weekly", _("weekly")), ("weekdays", _("Mon-Fri")), ("user", _("user defined"))]) - self.timerentry_startdate = ConfigDateTime(default = self.timer.begin, formatstring = _("%d.%B %Y"), increment = 86400) + self.timerentry_date = ConfigDateTime(default = self.timer.begin, formatstring = _("%d.%B %Y"), increment = 86400) self.timerentry_starttime = ConfigClock(default = self.timer.begin) - - self.timerentry_enddate = ConfigDateTime(default = self.timer.end, formatstring = _("%d.%B %Y"), increment = 86400) self.timerentry_endtime = ConfigClock(default = self.timer.end) default = self.timer.dirname or resolveFilename(SCOPE_HDD) @@ -120,19 +120,6 @@ class TimerEntry(Screen, ConfigListScreen): self.timerentry_service_ref = self.timer.service_ref self.timerentry_service = ConfigSelection([servicename]) - self.timerentry_startdate.addNotifier(self.checkDate) - self.timerentry_enddate.addNotifier(self.checkDate) - - def checkDate(self, configElement): - if configElement is self.timerentry_startdate: - if self.timerentry_enddate.value < self.timerentry_startdate.value: - self.timerentry_enddate.value = self.timerentry_startdate.value - self["config"].invalidate(self.entryEndDate) - if configElement is self.timerentry_enddate: - if (self.timerentry_enddate.value < self.timerentry_startdate.value): - self.timerentry_startdate.value = self.timerentry_enddate.value - self["config"].invalidate(self.entryStartDate) - def createSetup(self, widget): self.list = [] self.list.append(getConfigListEntry(_("Name"), self.timerentry_name)) @@ -165,34 +152,24 @@ class TimerEntry(Screen, ConfigListScreen): self.list.append(getConfigListEntry(_("Saturday"), self.timerentry_day[5])) self.list.append(getConfigListEntry(_("Sunday"), self.timerentry_day[6])) - #self.list.append(getConfigListEntry("StartDate", self.timerentry_startdate)) -# self.list.append(getConfigListEntry("Weekday", self.timerentry_weekday)) - - self.entryStartDate = getConfigListEntry(_("Start"), self.timerentry_startdate) - if self.timerentry_type.value == "once": - self.list.append(self.entryStartDate) - self.list.append(getConfigListEntry(" ", self.timerentry_starttime)) - else: - self.list.append(getConfigListEntry(_("StartTime"), self.timerentry_starttime)) - - self.entryEndDate = getConfigListEntry(_("End"), self.timerentry_enddate) + self.entryDate = getConfigListEntry(_("Date"), self.timerentry_date) if self.timerentry_type.value == "once": - if self.timerentry_justplay.value != "zap": - self.list.append(self.entryEndDate) - self.list.append(getConfigListEntry(" ", self.timerentry_endtime)) - else: - if self.timerentry_justplay.value != "zap": - self.list.append(getConfigListEntry(_("EndTime"), self.timerentry_endtime)) + self.list.append(self.entryDate) + self.list.append(getConfigListEntry(_("StartTime"), self.timerentry_starttime)) + if self.timerentry_justplay.value != "zap": + self.list.append(getConfigListEntry(_("EndTime"), self.timerentry_endtime)) + self.channelEntry = getConfigListEntry(_("Channel"), self.timerentry_service) + self.list.append(self.channelEntry) + self.dirname = getConfigListEntry(_("Location"), self.timerentry_dirname) + self.tagsSet = getConfigListEntry(_("Tags"), self.timerentry_tagsset) if self.timerentry_justplay.value != "zap": if config.usage.setup_level.index >= 2: # expert+ - self.dirname = getConfigListEntry(_("Location"), self.timerentry_dirname) self.list.append(self.dirname) + if getPreferredTagEditor(): + self.list.append(self.tagsSet) self.list.append(getConfigListEntry(_("After event"), self.timerentry_afterevent)) - self.channelEntry = getConfigListEntry(_("Channel"), self.timerentry_service) - self.list.append(self.channelEntry) - self[widget].list = self.list self[widget].l.setList(self.list) @@ -206,14 +183,14 @@ class TimerEntry(Screen, ConfigListScreen): self.createSetup("config") def keyLeft(self): - if self["config"].getCurrent() is self.channelEntry: + if self["config"].getCurrent() in [self.channelEntry, self.tagsSet]: self.keySelect() else: ConfigListScreen.keyLeft(self) self.newConfig() def keyRight(self): - if self["config"].getCurrent() is self.channelEntry: + if self["config"].getCurrent() in [self.channelEntry, self.tagsSet]: self.keySelect() else: ConfigListScreen.keyRight(self) @@ -235,6 +212,12 @@ class TimerEntry(Screen, ConfigListScreen): self.timerentry_dirname.value, minFree = 100 # We require at least 100MB free space ) + elif getPreferredTagEditor() and cur == self.tagsSet: + self.session.openWithCallback( + self.tagEditFinished, + getPreferredTagEditor(), + self.timerentry_tags + ) else: self.keyGo() @@ -249,24 +232,15 @@ class TimerEntry(Screen, ConfigListScreen): dt = datetime(d.tm_year, d.tm_mon, d.tm_mday, mytime[0], mytime[1]) return int(mktime(dt.timetuple())) - def buildRepeatedBegin(self, rep_time, start_time): - d = localtime(rep_time) - dt = datetime(d.tm_year, d.tm_mon, d.tm_mday, start_time[0], start_time[1]) - return int(mktime(dt.timetuple())) - def getBeginEnd(self): - enddate = self.timerentry_enddate.value + date = self.timerentry_date.value endtime = self.timerentry_endtime.value - - startdate = self.timerentry_startdate.value starttime = self.timerentry_starttime.value - begin = self.getTimestamp(startdate, starttime) - end = self.getTimestamp(enddate, endtime) + begin = self.getTimestamp(date, starttime) + end = self.getTimestamp(date, endtime) - # because of the dateChecks, startdate can't be < enddate. - # however, the endtime can be less than the starttime. - # in this case, add 1 day. + # if the endtime is less than the starttime, add 1 day. if end < begin: end += 86400 return begin, end @@ -278,6 +252,7 @@ class TimerEntry(Screen, ConfigListScreen): self.timer.resetRepeated() self.timer.afterEvent = {"nothing": AFTEREVENT.NONE, "deepstandby": AFTEREVENT.DEEPSTANDBY, "standby": AFTEREVENT.STANDBY}[self.timerentry_afterevent.value] self.timer.service_ref = self.timerentry_service_ref + self.timer.tags = self.timerentry_tags self.timer.dirname = self.timerentry_dirname.value config.movielist.last_timer_videodir.value = self.timer.dirname @@ -352,6 +327,12 @@ class TimerEntry(Screen, ConfigListScreen): self.timerentry_dirname.setChoices(config.movielist.videodirs.value, default=res) self.timerentry_dirname.value = res + def tagEditFinished(self, ret): + if ret is not None: + self.timerentry_tags = ret + self.timerentry_tagsset.setChoices([len(ret) == 0 and "None" or " ".join(ret)]) + self["config"].invalidate(self.tagsSet) + class TimerLog(Screen): def __init__(self, session, timer): Screen.__init__(self, session) -- cgit v1.2.3