Merge branch 'master' into bug_245_record_playback_fixes
authorghost <andreas.monzner@multimedia-labs.de>
Thu, 3 Dec 2009 16:56:03 +0000 (17:56 +0100)
committerghost <andreas.monzner@multimedia-labs.de>
Thu, 3 Dec 2009 16:56:03 +0000 (17:56 +0100)
70 files changed:
configure.ac
data/encoding.conf
data/setup.xml
data/skin_default.xml
doc/DEFAULTS
lib/dvb/decoder.cpp
lib/dvb/epgcache.cpp
lib/python/Components/AVSwitch.py
lib/python/Components/About.py
lib/python/Components/FileList.py
lib/python/Components/Lcd.py
lib/python/Components/NimManager.py
lib/python/Components/config.py
lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py
lib/python/Plugins/Extensions/MediaPlayer/plugin.py
lib/python/Plugins/SystemPlugins/Makefile.am
lib/python/Plugins/SystemPlugins/NetworkWizard/LICENSE [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/NetworkWizard/Makefile.am [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/NetworkWizard/__init__.py [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/NetworkWizard/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/NetworkWizard/meta/plugin_networkwizard.xml [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/NetworkWizard/networkwizard.xml [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/NetworkWizard/plugin.py [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/Videomode/VideoWizard.py
lib/python/Plugins/SystemPlugins/WirelessLan/LICENSE [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/WirelessLan/Makefile.am [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/WirelessLan/__init__.py [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/WirelessLan/flags.py [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/WirelessLan/iwlibs.py [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py [new file with mode: 0755]
lib/python/Plugins/newplugin.py
lib/python/Screens/InfoBar.py
lib/python/Screens/InfoBarGenerics.py
lib/python/Screens/ScanSetup.py
lib/service/servicemp3.cpp
main/Makefile.am
main/enigma.cpp
po/Makefile.am
po/ar.po [changed mode: 0644->0755]
po/ca.po [changed mode: 0644->0755]
po/cs.po [changed mode: 0644->0755]
po/da.po [changed mode: 0644->0755]
po/de.po [changed mode: 0755->0644]
po/el.po [changed mode: 0644->0755]
po/en.po
po/enigma2.pot
po/es.po
po/et.po [changed mode: 0644->0755]
po/fi.po
po/fr.po
po/fy.po [changed mode: 0644->0755]
po/hr.po [changed mode: 0644->0755]
po/hu.po [changed mode: 0644->0755]
po/is.po [changed mode: 0644->0755]
po/it.po
po/lt.po [changed mode: 0644->0755]
po/lv.po [changed mode: 0644->0755]
po/nl.po
po/no.po [changed mode: 0644->0755]
po/pl.po
po/pt.po [changed mode: 0644->0755]
po/ru.po
po/sk.po [changed mode: 0644->0755]
po/sl.po [changed mode: 0644->0755]
po/sr.po [changed mode: 0644->0755]
po/sv.po
po/tr.po [changed mode: 0644->0755]
po/uk.po [changed mode: 0644->0755]

index 2b557fc..5e403de 100755 (executable)
@@ -155,6 +155,8 @@ lib/python/Plugins/SystemPlugins/FrontprocessorUpgrade/meta/Makefile
 lib/python/Plugins/SystemPlugins/Hotplug/Makefile
 lib/python/Plugins/SystemPlugins/Hotplug/meta/Makefile
 lib/python/Plugins/SystemPlugins/Makefile
+lib/python/Plugins/SystemPlugins/NetworkWizard/Makefile
+lib/python/Plugins/SystemPlugins/NetworkWizard/meta/Makefile
 lib/python/Plugins/SystemPlugins/NFIFlash/Makefile
 lib/python/Plugins/SystemPlugins/NFIFlash/meta/Makefile
 lib/python/Plugins/SystemPlugins/PositionerSetup/Makefile
@@ -173,6 +175,7 @@ lib/python/Plugins/SystemPlugins/VideoTune/Makefile
 lib/python/Plugins/SystemPlugins/VideoTune/meta/Makefile
 lib/python/Plugins/SystemPlugins/Videomode/Makefile
 lib/python/Plugins/SystemPlugins/Videomode/meta/Makefile
+lib/python/Plugins/SystemPlugins/WirelessLan/Makefile
 lib/python/Tools/Makefile
 lib/service/Makefile
 lib/components/Makefile
index 14eeaef..9383317 100644 (file)
@@ -1,5 +1,6 @@
 #Fallback encoding when in dvb-text no encoding table is given
 #Countycode ISO8859-X or ISO6397
+ara ISO8859-6
 tur ISO8859-9
 gre ISO8859-7
 pol ISO8859-2
index fe91ba2..9425afd 100644 (file)
@@ -13,8 +13,8 @@
                        <item level="0" text="TV System">config.av.tvsystem</item>
                        <item level="1" text="WSS on 4:3">config.av.wss</item>
                        <item level="1" text="AC3 default">config.av.defaultac3</item>
-                       <item level="1" text="General AC3 delay">config.av.generalAC3delay</item>
-                       <item level="1" text="General PCM delay">config.av.generalPCMdelay</item>
+                       <item level="1" text="General AC3 delay (ms)">config.av.generalAC3delay</item>
+                       <item level="1" text="General PCM delay (ms)">config.av.generalPCMdelay</item>
                        <item level="1" text="AC3 downmix" requires="CanDownmixAC3">config.av.downmix_ac3</item>
                        <item level="1" text="Auto scart switching" requires="ScartSwitch">config.av.vcrswitch</item>
                </setup>
                        <item level="0" text="Brightness">config.lcd.bright</item>
                        <item level="0" text="Contrast">config.lcd.contrast</item>
                        <item level="0" text="Standby">config.lcd.standby</item>
-                       <item level="2" text="Invert display">config.lcd.invert</item>
                </setup>
                <setup key="satconfig" title="Sat / Dish Setup">
                        <item text="Tuner Slot">config.sat.tunerslot</item>
index 72dc357..16504ab 100755 (executable)
@@ -803,9 +803,9 @@ self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
                <widget name="config" position="10,165" size="500,225" scrollbarMode="showOnDemand" />
        </screen>
        <!-- Scan setup -->
-       <screen name="ScanSetup" position="center,center" size="520,390" title="Service scan">
+       <screen name="ScanSetup" position="center,center" size="520,450" title="Service scan">
                <widget name="config" position="10,10" size="500,350" scrollbarMode="showOnDemand" />
-               <widget name="introduction" position="10,365" size="500,25" font="Regular;20" halign="center" />
+               <widget name="introduction" position="10,365" size="500,75" font="Regular;20" halign="center" />
        </screen>
        <!-- Scan simple -->
        <screen name="ScanSimple" position="center,center" size="420,350" title="Service scan">
index b61696f..669652e 100644 (file)
@@ -92,7 +92,7 @@ So this would only install the lamedb.192 file, if you have a DVB-S NIM in your
 - "image default"
   An image default is stored in /usr/share/enigma2/defaults. You can have several defaults at the same time, but you should keep
   in mind, that these defaults are all installed without user interaction. So defaults with contrary contents should be avoided
-  (e.g. setting a default parameter in one settings file an setting another setting for the same parameter in another could lead
+  (e.g. setting a default parameter in one settings file and setting another setting for the same parameter in another could lead
   to unexpected behaviour, since the installation order is undetermined and completely random. so use prerequisites insted)
   The "image default" is also used to set box specific config elements (for example show the new RC on a dm8000) and install the
   default bouquets.
index 90bf19e..710cc42 100644 (file)
@@ -222,9 +222,6 @@ int eDVBAudio::startPid(int pid, int type)
 
 void eDVBAudio::stop()
 {
-#if HAVE_DVB_API_VERSION > 2
-       flush();
-#endif
        eDebugNoNewLine("AUDIO_STOP - ");
        if (::ioctl(m_fd, AUDIO_STOP) < 0)
                eDebug("failed (%m)");
index f80e177..2dc3641 100644 (file)
@@ -1717,6 +1717,7 @@ void fillTuple(ePyObject tuple, const char *argstring, int argcount, ePyObject s
                                ++argcount;
                                continue;
                        default:  // ignore unknown
+                               tmp = ePyObject();
                                eDebug("fillTuple unknown '%c'... insert 'None' in result", c);
                }
                if (!tmp)
@@ -2061,6 +2062,7 @@ void fillTuple2(ePyObject tuple, const char *argstring, int argcount, eventData
                                inc_refcount = true;
                                break;
                        default:  // ignore unknown
+                               tmp = ePyObject();
                                eDebug("fillTuple2 unknown '%c'... insert None in Result", argstring[pos]);
                }
                if (!tmp)
index bc2a66a..2658f9b 100644 (file)
@@ -1,5 +1,5 @@
 from config import config, ConfigSlider, ConfigSelection, ConfigYesNo, \
-       ConfigEnableDisable, ConfigSubsection, ConfigBoolean, ConfigNumber, ConfigNothing, NoSave
+       ConfigEnableDisable, ConfigSubsection, ConfigBoolean, ConfigSelectionNumber, ConfigNothing, NoSave
 from enigma import eAVSwitch, getDesktop
 from SystemInfo import SystemInfo
 from os import path as os_path
@@ -112,8 +112,8 @@ def InitAVSwitch():
        config.av.tvsystem = ConfigSelection(choices = {"pal": _("PAL"), "ntsc": _("NTSC"), "multinorm": _("multinorm")}, default="pal")
        config.av.wss = ConfigEnableDisable(default = True)
        config.av.defaultac3 = ConfigYesNo(default = False)
-       config.av.generalAC3delay = ConfigNumber(default = 0)
-       config.av.generalPCMdelay = ConfigNumber(default = 0)
+       config.av.generalAC3delay = ConfigSelectionNumber(-1000, 1000, 25, default = 0)
+       config.av.generalPCMdelay = ConfigSelectionNumber(-1000, 1000, 25, default = 0)
        config.av.vcrswitch = ConfigEnableDisable(default = False)
 
        iAVSwitch = AVSwitch()
index bb2d756..8e332e3 100644 (file)
@@ -19,11 +19,21 @@ class About:
                                        #0120 2005 11 29 01 16
                                        #0123 4567 89 01 23 45
                                        version = splitted[1]
+                                       image_type = version[0] # 0 = release, 1 = experimental
+                                       major = version[1]
+                                       minor = version[2]
+                                       revision = version[3]
                                        year = version[4:8]
                                        month = version[8:10]
                                        day = version[10:12]
-
-                                       return '-'.join(("dev", year, month, day))
+                                       date = '-'.join((year, month, day))
+                                       if image_type == '0':
+                                               image_type = "Release"
+                                               version = '.'.join((major, minor, revision))
+                                               return ' '.join((image_type, version, date))
+                                       else:
+                                               image_type = "Experimental"
+                                               return ' '.join((image_type, date))
                        file.close()
                except IOError:
                        pass
index 54bb1ac..38b0854 100755 (executable)
@@ -23,6 +23,7 @@ EXTENSIONS = {
                "ts": "movie",
                "avi": "movie",
                "divx": "movie",
+               "m4v": "movie",
                "mpg": "movie",
                "mpeg": "movie",
                "mkv": "movie",
index 0e50123..7d27c09 100644 (file)
@@ -42,9 +42,18 @@ def InitLcd():
                def setLCDinverted(configElement):
                        ilcd.setInverted(configElement.value);
 
+               standby_default = 0
+
                ilcd = LCD()
 
-               config.lcd.standby = ConfigSlider(default=0, limits=(0, 10))
+               if not ilcd.isOled():
+                       config.lcd.contrast = ConfigSlider(default=5, limits=(0, 20))
+                       config.lcd.contrast.addNotifier(setLCDcontrast);
+               else:
+                       config.lcd.contrast = ConfigNothing()
+                       standby_default = 1
+
+               config.lcd.standby = ConfigSlider(default=standby_default, limits=(0, 10))
                config.lcd.standby.addNotifier(setLCDbright);
                config.lcd.standby.apply = lambda : setLCDbright(config.lcd.standby)
 
@@ -53,12 +62,6 @@ def InitLcd():
                config.lcd.bright.apply = lambda : setLCDbright(config.lcd.bright)
                config.lcd.bright.callNotifiersOnSaveAndCancel = True
 
-               if not ilcd.isOled():
-                       config.lcd.contrast = ConfigSlider(default=5, limits=(0, 20))
-                       config.lcd.contrast.addNotifier(setLCDcontrast);
-               else:
-                       config.lcd.contrast = ConfigNothing()
-
                config.lcd.invert = ConfigYesNo(default=False)
                config.lcd.invert.addNotifier(setLCDinverted);
        else:
index 70cde47..05204a7 100644 (file)
@@ -554,6 +554,13 @@ class NimManager:
        def getSatDescription(self, pos):
                return self.satellites[pos]
 
+       def sortFunc(self, x):
+               orbpos = x[0]
+               if orbpos > 1800:
+                       return orbpos - 3600
+               else:
+                       return orbpos + 1800
+
        def readTransponders(self):
                # read initial networks from file. we only read files which we are interested in,
                # which means only these where a compatible tuner exists.
@@ -565,9 +572,10 @@ class NimManager:
                if self.hasNimType("DVB-S"):
                        print "Reading satellites.xml"
                        db.readSatellites(self.satList, self.satellites, self.transponders)
-#                      print "SATLIST", self.satList
-#                      print "SATS", self.satellites
-#                      print "TRANSPONDERS", self.transponders
+                       self.satList.sort(key = self.sortFunc) # sort by orbpos
+                       #print "SATLIST", self.satList
+                       #print "SATS", self.satellites
+                       #print "TRANSPONDERS", self.transponders
 
                if self.hasNimType("DVB-C"):
                        print "Reading cables.xml"
@@ -939,7 +947,7 @@ def InitNimManager(nimmgr):
 
        lnb_choices = {
                "universal_lnb": _("Universal LNB"),
-               "unicable": _("Unicable"),
+#              "unicable": _("Unicable"),
                "c_band": _("C-Band"),
                "user_defined": _("User defined")}
 
index e249caf..1f8709b 100755 (executable)
@@ -1017,6 +1017,40 @@ class ConfigPassword(ConfigText):
                ConfigText.onDeselect(self, session)
                self.hidden = True
 
+# lets the user select between [min, min+stepwidth, min+(stepwidth*2)..., maxval] with maxval <= max depending
+# on the stepwidth
+# min, max, stepwidth, default are int values
+# wraparound: pressing RIGHT key at max value brings you to min value and vice versa if set to True
+class ConfigSelectionNumber(ConfigSelection):
+       def __init__(self, min, max, stepwidth, default = None, wraparound = False):
+               self.wraparound = wraparound
+               if default is None:
+                       default = min
+               default = str(default)
+               choices = []
+               step = min
+               while step <= max:
+                       choices.append(str(step))
+                       step += stepwidth
+               
+               ConfigSelection.__init__(self, choices, default)
+
+       def getValue(self):
+               return int(ConfigSelection.getValue(self))
+
+       def setValue(self, val):
+               ConfigSelection.setValue(self, str(val))
+
+       def handleKey(self, key):
+               if not self.wraparound:
+                       if key == KEY_RIGHT:
+                               if len(self.choices) == (self.choices.index(self.value) + 1):
+                                       return
+                       if key == KEY_LEFT:
+                               if self.choices.index(self.value) == 0:
+                                       return
+               ConfigSelection.handleKey(self, key)
+
 class ConfigNumber(ConfigText):
        def __init__(self, default = 0):
                ConfigText.__init__(self, str(default), fixed_size = False)
index feb39a9..53287a3 100755 (executable)
@@ -82,7 +82,9 @@ class DVDToolbox(Screen):
                self.update()
 
        def mediainfoCB(self, mediuminfo, retval, extra_args):
-               capacity = 1
+               formatted_capacity = 0
+               read_capacity = 0
+               capacity = 0
                used = 0
                infotext = ""
                mediatype = ""
@@ -93,21 +95,17 @@ class DVDToolbox(Screen):
                                        self.formattable = True
                                else:
                                        self.formattable = False
-                       if line.find("Legacy lead-out at:") > -1:
+                       elif line.find("Legacy lead-out at:") > -1:
                                used = int(line.rsplit('=',1)[1]) / 1048576.0
-                               print "[lead out] used =", used
+                               print "[dvd+rw-mediainfo] lead out used =", used
                        elif line.find("formatted:") > -1:
-                               capacity = int(line.rsplit('=',1)[1]) / 1048576.0
-                               print "[formatted] capacity =", capacity
-                       elif capacity == 1 and line.find("READ CAPACITY:") > -1:
-                               capacity = int(line.rsplit('=',1)[1]) / 1048576.0
-                               print "[READ CAP] capacity =", capacity
-                       elif line.find("Disc status:") > -1:
-                               if line.find("blank") > -1:
-                                       print "[Disc status] capacity=%d, used=0" % (capacity)
-                                       capacity = used
-                                       used = 0
-                       elif line.find("Free Blocks:") > -1:
+                               formatted_capacity = int(line.rsplit('=',1)[1]) / 1048576.0
+                               print "[dvd+rw-mediainfo] formatted capacity =", formatted_capacity
+                       elif formatted_capacity == 0 and line.find("READ CAPACITY:") > -1:
+                               read_capacity = int(line.rsplit('=',1)[1]) / 1048576.0
+                               print "[dvd+rw-mediainfo] READ CAPACITY =", read_capacity
+               for line in mediuminfo.splitlines():
+                       if line.find("Free Blocks:") > -1:
                                try:
                                        size = eval(line[14:].replace("KB","*1024"))
                                except:
@@ -116,8 +114,22 @@ class DVDToolbox(Screen):
                                        capacity = size / 1048576
                                        if used:
                                                used = capacity-used
-                                       print "[free blocks] capacity=%d, used=%d" % (capacity, used)
+                                       print "[dvd+rw-mediainfo] free blocks capacity=%d, used=%d" % (capacity, used)
+                       elif line.find("Disc status:") > -1:
+                               if line.find("blank") > -1:
+                                       print "[dvd+rw-mediainfo] Disc status blank capacity=%d, used=0" % (capacity)
+                                       capacity = used
+                                       used = 0
+                               elif line.find("complete") > -1 and formatted_capacity == 0:
+                                       print "[dvd+rw-mediainfo] Disc status complete capacity=0, used=%d" % (capacity)
+                                       used = read_capacity
+                                       capacity = 1
+                               else:
+                                       capacity = formatted_capacity
                        infotext += line+'\n'
+               if capacity and used > capacity:
+                       used = read_capacity or capacity
+                       capacity = formatted_capacity or capacity
                self["details"].setText(infotext)
                if self.formattable:
                        self["key_yellow"].text = _("Format")
index 596f2d5..98bc060 100644 (file)
@@ -110,7 +110,7 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
 
                # 'None' is magic to start at the list of mountpoints
                defaultDir = config.mediaplayer.defaultDir.getValue()
-               self.filelist = FileList(defaultDir, matchingPattern = "(?i)^.*\.(mp2|mp3|ogg|ts|m2ts|wav|wave|m3u|pls|e2pls|mpg|vob|avi|divx|mkv|mp4|m4a|dat|flac|mov)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls")
+               self.filelist = FileList(defaultDir, matchingPattern = "(?i)^.*\.(mp2|mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob|avi|divx|m4v|mkv|mp4|m4a|dat|flac|mov)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls")
                self["filelist"] = self.filelist
 
                self.playlist = MyPlayList()
index db71c31..a8b187d 100755 (executable)
@@ -3,7 +3,7 @@ installdir = $(pkglibdir)/python/Plugins/SystemPlugins
 SUBDIRS = SoftwareManager FrontprocessorUpgrade PositionerSetup Satfinder \
        SkinSelector SatelliteEquipmentControl Videomode VideoTune Hotplug \
        DefaultServicesScanner NFIFlash DiseqcTester CommonInterfaceAssignment \
-       CrashlogAutoSubmit CleanupWizard VideoEnhancement
+       CrashlogAutoSubmit CleanupWizard VideoEnhancement WirelessLan NetworkWizard
 
 install_PYTHON =       \
        __init__.py
diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/LICENSE b/lib/python/Plugins/SystemPlugins/NetworkWizard/LICENSE
new file mode 100755 (executable)
index 0000000..9970059
--- /dev/null
@@ -0,0 +1,12 @@
+This plugin is licensed under the Creative Commons 
+Attribution-NonCommercial-ShareAlike 3.0 Unported 
+License. To view a copy of this license, visit
+http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative
+Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
+
+Alternatively, this plugin may be distributed and executed on hardware which
+is licensed by Dream Multimedia GmbH.
+
+This plugin is NOT free software. It is open source, you are allowed to
+modify it (if you keep the license), but it may not be commercially 
+distributed other than under the conditions noted above.
diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/Makefile.am b/lib/python/Plugins/SystemPlugins/NetworkWizard/Makefile.am
new file mode 100755 (executable)
index 0000000..2a71bb2
--- /dev/null
@@ -0,0 +1,12 @@
+installdir = $(pkglibdir)/python/Plugins/SystemPlugins/NetworkWizard\r
+\r
+SUBDIRS = meta\r
+\r
+install_PYTHON =       \\r
+       __init__.py \\r
+       NetworkWizard.py \\r
+       plugin.py\r
+\r
+dist_install_DATA = \\r
+       LICENSE \\r
+       networkwizard.xml
\ No newline at end of file
diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py b/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py
new file mode 100755 (executable)
index 0000000..4d36115
--- /dev/null
@@ -0,0 +1,244 @@
+from Screens.Wizard import wizardManager, WizardSummary
+from Screens.WizardLanguage import WizardLanguage
+from Screens.Rc import Rc
+from Screens.MessageBox import MessageBox
+
+from Components.Pixmap import Pixmap, MovingPixmap, MultiPixmap
+from Components.config import config, ConfigBoolean, configfile, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, getConfigListEntry, ConfigSelection, ConfigPassword
+from Components.Network import iNetwork
+
+#from Components.Label import Label
+#from Components.MenuList import MenuList
+#from Components.PluginComponent import plugins
+#from Plugins.Plugin import PluginDescriptor
+from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
+#import time, os, re
+
+
+config.misc.firstrun = ConfigBoolean(default = True)
+list = []
+list.append("WEP")
+list.append("WPA")
+list.append("WPA2")
+list.append("WPA/WPA2")
+
+weplist = []
+weplist.append("ASCII")
+weplist.append("HEX")
+
+config.plugins.wlan = ConfigSubsection()
+config.plugins.wlan.essid = NoSave(ConfigText(default = "home", fixed_size = False))
+config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = "home", fixed_size = False))
+
+config.plugins.wlan.encryption = ConfigSubsection()
+config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = False))
+config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = "WPA/WPA2" ))
+config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
+config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewlan", fixed_size = False))
+
+class NetworkWizard(WizardLanguage, Rc):
+       skin = """
+               <screen position="0,0" size="720,576" title="Welcome..." flags="wfNoBorder" >
+                       <widget name="text" position="153,40" size="340,330" font="Regular;22" />
+                       <widget source="list" render="Listbox" position="53,340" size="440,180" scrollbarMode="showOnDemand" >
+                               <convert type="StringList" />
+                       </widget>
+                       <widget name="config" position="53,340" zPosition="1" size="440,180" transparent="1" scrollbarMode="showOnDemand" />
+                       <ePixmap pixmap="skin_default/buttons/button_red.png" position="40,225" zPosition="0" size="15,16" transparent="1" alphatest="on" />
+                       <widget name="languagetext" position="55,225" size="95,30" font="Regular;18" />
+                       <widget name="wizard" pixmap="skin_default/wizard.png" position="40,50" zPosition="10" size="110,174" alphatest="on" />
+                       <widget name="rc" pixmaps="skin_default/rc.png,skin_default/rcold.png" position="500,50" zPosition="10" size="154,500" alphatest="on" />
+                       <widget name="arrowdown" pixmap="skin_default/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
+                       <widget name="arrowdown2" pixmap="skin_default/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
+                       <widget name="arrowup" pixmap="skin_default/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
+                       <widget name="arrowup2" pixmap="skin_default/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
+               </screen>"""
+       def __init__(self, session):
+               self.xmlfile = resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml")
+               WizardLanguage.__init__(self, session, showSteps = False, showStepSlider = False)
+               Rc.__init__(self)
+               self.session = session
+               self["wizard"] = Pixmap()
+               
+               self.InterfaceState = None
+               self.isInterfaceUp = None
+               self.WlanPluginInstalled = None
+               self.ap = None
+               self.selectedInterface = None
+               self.NextStep = None
+               self.myref = None
+               self.checkRef = None
+               self.AdapterRef = None
+               self.WlanList = None
+               self.isWlanPluginInstalled()
+
+       def listInterfaces(self):
+               list = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()]
+               list.append((_("Exit network wizard"), "end"))
+               return list
+
+       def InterfaceSelectionMade(self, index):
+               self.selectedInterface = index
+               self.InterfaceSelect(index)
+
+       def InterfaceSelect(self, index):
+               if index == 'end':
+                       self.NextStep = 'end'
+               elif index == 'eth0':
+                       self.NextStep = 'nwconfig'
+               else:
+                       self.NextStep = 'scanwlan'
+
+       def InterfaceSelectionMoved(self):
+               self.InterfaceSelect(self.selection)
+               
+       def checkInterface(self,iface):
+               self.Adapterlist = iNetwork.getAdapterList()
+               if self.NextStep is not 'end':
+                       if len(self.Adapterlist) == 0:
+                               #Reset Network to defaults if network broken
+                               iNetwork.resetNetworkConfig('lan', self.checkInterfaceCB)
+                               self.myref = self.session.openWithCallback(self.resetfinishedCB, MessageBox, _("Please wait while we prepare your network interfaces..."), type = MessageBox.TYPE_INFO, enable_input = False)
+                       if iface == 'eth0':
+                               if iface in iNetwork.configuredNetworkAdapters and len(iNetwork.configuredNetworkAdapters) == 1:
+                                       if iNetwork.getAdapterAttribute(iface, 'up') is True:
+                                               self.isInterfaceUp = True
+                                       else:
+                                               self.isInterfaceUp = False
+                                       self.resetfinishedCB(False)
+                               else:
+                                       iNetwork.resetNetworkConfig('lan',self.checkInterfaceCB)
+                                       self.myref = self.session.openWithCallback(self.resetfinishedCB, MessageBox, _("Please wait while we prepare your network interfaces..."), type = MessageBox.TYPE_INFO, enable_input = False)
+                       elif iface == 'wlan0':
+                               if iface in iNetwork.configuredNetworkAdapters and len(iNetwork.configuredNetworkAdapters) == 1:
+                                       if iNetwork.getAdapterAttribute(iface, 'up') is True:
+                                               self.isInterfaceUp = True
+                                       else:
+                                               self.isInterfaceUp = False
+                                       self.resetfinishedCB(False)
+                               else:
+                                       iNetwork.resetNetworkConfig('wlan',self.checkInterfaceCB)
+                                       self.myref = self.session.openWithCallback(self.resetfinishedCB, MessageBox, _("Please wait while we prepare your network interfaces..."), type = MessageBox.TYPE_INFO, enable_input = False)
+                       elif iface == 'ath0':
+                               if iface in iNetwork.configuredNetworkAdapters and len(iNetwork.configuredNetworkAdapters) == 1:
+                                       if iNetwork.getAdapterAttribute(iface, 'up') is True:
+                                               self.isInterfaceUp = True
+                                       else:
+                                               self.isInterfaceUp = False
+                                       self.resetfinishedCB(False)
+                               else:
+                                       iNetwork.resetNetworkConfig('wlan-mpci',self.checkInterfaceCB)
+                                       self.myref = self.session.openWithCallback(self.resetfinishedCB, MessageBox, _("Please wait while we prepare your network interfaces..."), type = MessageBox.TYPE_INFO, enable_input = False)
+               else:
+                       self.resetfinishedCB(False)
+                       
+       def resetfinishedCB(self,data):
+               if data is True:
+                       self.currStep = self.getStepWithID(self.NextStep)
+                       self.afterAsyncCode()
+               else:
+                       self.currStep = self.getStepWithID(self.NextStep)
+                       self.afterAsyncCode()
+
+       def checkInterfaceCB(self,callback,iface):
+               if callback is not None:
+                       if callback is True:
+                               iNetwork.getInterfaces(self.getInterfacesDataAvail)
+                               
+
+       def getInterfacesDataAvail(self, data):
+               if data is True:
+                       if iNetwork.getAdapterAttribute(self.selectedInterface, 'up') is True:
+                               self.isInterfaceUp = True
+                       else:
+                               self.isInterfaceUp = False
+                       self.myref.close(True)
+
+       def AdapterSetupEnd(self, iface):
+               if iNetwork.getAdapterAttribute(iface, "dhcp") is True:
+                       iNetwork.checkNetworkState(self.AdapterSetupEndFinished)
+                       self.AdapterRef = self.session.openWithCallback(self.AdapterSetupEndCB, MessageBox, _("Please wait while we test your network..."), type = MessageBox.TYPE_INFO, enable_input = False)
+
+               else:
+                       self.currStep = self.getStepWithID("confdns")
+                       self.afterAsyncCode()
+
+       def AdapterSetupEndCB(self,data):
+               if data is True:
+                       self.currStep = self.getStepWithID("checklanstatusend")
+                       self.afterAsyncCode()
+
+       def AdapterSetupEndFinished(self,data):
+               if data <= 2:
+                       self.InterfaceState = True
+               else:
+                       self.InterfaceState = False
+               self.AdapterRef.close(True)
+                       
+       def checkNetwork(self):
+               iNetwork.checkNetworkState(self.checkNetworkStateFinished)
+               self.checkRef = self.session.openWithCallback(self.checkNetworkCB, MessageBox, _("Please wait while we test your network..."), type = MessageBox.TYPE_INFO, enable_input = False)
+
+       def checkNetworkCB(self,data):
+               if data is True:
+                       self.currStep = self.getStepWithID("checklanstatusend")
+                       self.afterAsyncCode()
+
+       def checkNetworkStateFinished(self,data):
+               if data <= 2:
+                       self.InterfaceState = True
+               else:
+                       self.InterfaceState = False
+               self.checkRef.close(True)
+       
+       def markDone(self):
+               pass
+
+       def listModes(self):
+               list = []
+               self.WlanList = []
+               try:
+                       from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan
+               except ImportError:
+                       list.append( ( _("No networks found"),_("unavailable") ) )
+                       self.WlanList.append(_("No networks found"))
+                       return list
+               else:   
+                       self.w = Wlan(self.selectedInterface)
+                       aps = self.w.getNetworkList()
+                       if aps is not None:
+                               print "[NetworkWizard.py] got Accespoints!"
+                               for ap in aps:
+                                       a = aps[ap]
+                                       if a['active']:
+                                               if a['essid'] != "":
+                                                       #a['essid'] = a['bssid']
+                                                       list.append( (a['essid'], a['essid']) )
+                                                       self.WlanList.append(a['essid'])        
+                       if "hidden..." not in list:
+                               list.append( ( _("enter hidden network SSID"),_("hidden...") ) )
+                               self.WlanList.append(_("hidden..."))    
+                       return list
+
+       def modeSelectionMade(self, index):
+               self.modeSelect(index)
+               
+       def modeSelectionMoved(self):
+               self.modeSelect(self.selection)
+               
+       def modeSelect(self, mode):
+               self.ap = mode
+               print "ModeSelected:", mode
+
+       def restartNetwork(self):
+               iNetwork.restartNetwork()
+               self.checkNetwork()
+       
+       def isWlanPluginInstalled(self):                
+               try:
+                       from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan
+               except ImportError:
+                       self.WlanPluginInstalled = False
+               else:
+                       self.WlanPluginInstalled = True
+
diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/__init__.py b/lib/python/Plugins/SystemPlugins/NetworkWizard/__init__.py
new file mode 100755 (executable)
index 0000000..e69de29
diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..98dbe80
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(datadir)/meta/
+
+dist_install_DATA = plugin_networkwizard.xml
diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/plugin_networkwizard.xml b/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/plugin_networkwizard.xml
new file mode 100755 (executable)
index 0000000..660bbcd
--- /dev/null
@@ -0,0 +1,25 @@
+<default>
+         <prerequisites>
+                    <tag type="System" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>NetworkWizard</name>
+                    <packagename>enigma2-plugin-systemplugins-networkwizard</packagename>
+                    <shortdescription>Step by step network configuration</shortdescription>
+                    <description>With the NetworkWizard you can easy configure your network step by step.
+                    </description>
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>NetzwerkWizard</name>
+                    <packagename>enigma2-plugin-systemplugins-networkwizard</packagename>
+                    <shortdescription>Schritt für Schritt Netzwerk konfiguration</shortdescription>
+                    <description>Mit dem NetzwerkWizard können Sie Ihr Netzwerk konfigurieren. Sie werden Schritt
+                       für Schritt durch die Konfiguration geleitet.
+                    </description>
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-systemplugins-networkwizard" />
+         </files>
+</default>
diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/networkwizard.xml b/lib/python/Plugins/SystemPlugins/NetworkWizard/networkwizard.xml
new file mode 100755 (executable)
index 0000000..134797a
--- /dev/null
@@ -0,0 +1,172 @@
+<wizard>
+               <step id="welcome" nextstep="selectinterface">
+                       <text value="Welcome.\n\nIf you want to connect your Dreambox to the Internet, this wizard will guide you through the basic network setup of your Dreambox.\n\nPress OK to start configuring your network" />
+                       <displaytext value="Network Wizard" />
+                       <code>
+self.clearSelectedKeys()
+self.selectKey("OK")
+                       </code>
+               </step>
+
+               <step id="selectinterface">
+                       <text value="Please select the network interface that you want to use for your internet connection.\n\nPlease press OK to continue." />
+                       <displaytext value="Select interface" />
+                       <list type="dynamic" source="listInterfaces" evaluation="InterfaceSelectionMade" onselect="InterfaceSelectionMoved" />
+                       <code>
+self.clearSelectedKeys()
+self.selectKey("OK")
+self.selectKey("UP")
+self.selectKey("DOWN")
+                       </code>
+                       <code pos="after" async="yes">
+self.checkInterface(self.selectedInterface)
+                       </code> 
+               </step>
+
+               <step id="nwconfig">
+                       <text value="Please configure your internet connection by filling out the required values.\nWhen you are ready press OK to continue." />
+                       <displaytext value="Configure interface" />
+                       <config screen="AdapterSetup" module="NetworkSetup" args="self.selectedInterface" type="ConfigList" />
+                       <code>
+self.clearSelectedKeys()
+self.selectKey("OK")
+self.selectKey("UP")
+self.selectKey("DOWN")
+self.selectKey("LEFT")
+self.selectKey("RIGHT")
+                       </code>
+                       <code pos="after" async="yes">
+self.AdapterSetupEnd(self.selectedInterface)
+                       </code>                 
+               </step>
+
+               <step id="confdns" nextstep="checklanstatusend">
+                       <text value="Please configure or verify your Nameservers by filling out the required values.\nWhen you are ready press OK to continue." />
+                       <displaytext value="Configure nameservers" />
+                       <config screen="NameserverSetup" module="NetworkSetup" type="ConfigList" />
+                       <code>
+self.clearSelectedKeys()
+self.selectKey("OK")
+                       </code>
+                       <code pos="after" async="yes">
+self.checkNetwork()
+                       </code> 
+               </step>
+
+               <step id="checklanstatusend" nextstep="end">
+               <condition>
+self.condition = (self.InterfaceState == True )
+               </condition>
+                       <text value="Your Dreambox is now ready to use.\n\nYour internet connection is working now.\n\nPlease press OK to continue." />
+                       <displaytext value="Please follow the instructions on the TV" />
+                       <code>
+self.clearSelectedKeys()
+self.selectKey("OK")
+                       </code>
+                       <code pos="after">
+currStep = self.numSteps                               
+self.wizard[currStep]["nextstep"] = None
+self.markDone()
+self.close()
+                       </code> 
+               </step>
+
+               <step id="checklanstatusend">
+               <condition>
+self.condition = (self.InterfaceState == False )
+               </condition>
+                       <text value="Your internet connection is not working!\nPlease choose what you want to do next." />
+                       <displaytext value="Please follow the instructions on the TV" />
+                       <code>
+self.clearSelectedKeys()
+self.selectKey("OK")
+self.selectKey("UP")
+self.selectKey("DOWN")
+                       </code>
+                       <list>
+                               <listentry caption="Configure your network again" step="selectinterface" />
+                               <listentry caption="Exit network wizard" step="end" />
+                       </list>
+               </step>
+
+               <step id="scanwlan" nextstep="wlanconfig">
+               <condition>
+self.condition = (self.isInterfaceUp == True and self.WlanPluginInstalled == True)
+               </condition>
+                       <text value="Please select the wireless network that you want to connect to.\n\nPlease press OK to continue." />
+                       <displaytext value="Select wireless network" />
+                       <list type="dynamic" source="listModes" evaluation="modeSelectionMade" onselect="modeSelectionMoved" />
+                       <code>
+self.clearSelectedKeys()
+self.selectKey("OK")
+self.selectKey("UP")
+self.selectKey("DOWN")
+self.selectKey("LEFT")
+self.selectKey("RIGHT")
+                       </code>
+               </step>
+
+               <step id="scanwlan">
+               <condition>
+self.condition = (self.isInterfaceUp == False and self.WlanPluginInstalled == True)
+               </condition>
+                       <text value="Your wireless LAN internet connection could not be started!\nHave you attached your USB WLAN Stick?\n\nPlease choose what you want to do next." />
+                       <displaytext value="Please follow the instructions on the TV" />
+                       <list>
+                               <listentry caption="Configure your wireless LAN again" step="scanwlan" />
+                               <listentry caption="Configure your internal LAN" step="selectinterface" />
+                               <listentry caption="Exit network wizard" step="end" />
+                       </list>
+                       <code>
+self.clearSelectedKeys()
+self.selectKey("OK")
+self.selectKey("UP")
+self.selectKey("DOWN")
+                       </code>
+               </step>
+
+               <step id="scanwlan">
+               <condition>
+self.condition = (self.isInterfaceUp == True and self.WlanPluginInstalled == False)
+               </condition>
+                       <text value="The wireless LAN plugin is not installed!\nPlease install it and choose what you want to do next." />
+                       <displaytext value="Please follow the instructions on the TV" />
+                       <list>
+                               <listentry caption="Configure your internal LAN" step="selectinterface" />
+                               <listentry caption="Exit network wizard" step="end" />
+                       </list>
+                       <code>
+self.clearSelectedKeys()
+self.selectKey("OK")
+self.selectKey("UP")
+self.selectKey("DOWN")
+                       </code>
+               </step>
+
+               <step id="wlanconfig">
+                       <text value="Please configure your internet connection by filling out the required values.\nWhen you are ready press OK to continue." />
+                       <displaytext value="Configure interface" />
+                       <config screen="AdapterSetup" module="NetworkSetup" args="(self.selectedInterface,self.ap,self.WlanList)" type="ConfigList" />
+                       <code>
+self.clearSelectedKeys()
+self.selectKey("OK")
+self.selectKey("UP")
+self.selectKey("DOWN")
+self.selectKey("LEFT")
+self.selectKey("RIGHT")
+                       </code>
+                       <code pos="after" async="yes">
+self.AdapterSetupEnd(self.selectedInterface)
+                       </code>                 
+               </step>
+
+               <step id="end">
+                       <text value="Thank you for using the wizard.\nPlease press OK to continue." />
+                       <code>
+self.clearSelectedKeys()
+self.selectKey("OK")
+                       </code>
+               </step>
+</wizard>
+
+
diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/plugin.py b/lib/python/Plugins/SystemPlugins/NetworkWizard/plugin.py
new file mode 100755 (executable)
index 0000000..dc3beca
--- /dev/null
@@ -0,0 +1,22 @@
+from Screens.Screen import Screen
+from Plugins.Plugin import PluginDescriptor
+from Components.config import getConfigListEntry, config
+
+def NetworkWizardMain(session, **kwargs):
+       session.open(NetworkWizard)
+
+def startSetup(menuid):
+       if menuid != "system": 
+               return [ ]
+
+       return [(_("Network Wizard") + "...", NetworkWizardMain, "nw_wizard", 40)]
+
+def NetworkWizard(*args, **kwargs):
+       from NetworkWizard import NetworkWizard
+       return NetworkWizard(*args, **kwargs)
+
+def Plugins(**kwargs):
+       list = []
+       if config.misc.firstrun.value:
+               list.append(PluginDescriptor(name=_("Network Wizard"), where = PluginDescriptor.WHERE_WIZARD, fnc=(25, NetworkWizard)))
+       return list
index 3759c21..cd1529a 100644 (file)
@@ -84,7 +84,8 @@ class VideoWizard(WizardLanguage, Rc):
                                descr = port
                                if descr == 'DVI' and hw_type == 'dm500hd':
                                        descr = 'HDMI'
-                               list.append((descr,port))
+                               if port != "DVI-PC":
+                                       list.append((descr,port))
                list.sort(key = lambda x: x[0])
                print "listInputChannels:", list
                return list
diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/LICENSE b/lib/python/Plugins/SystemPlugins/WirelessLan/LICENSE
new file mode 100755 (executable)
index 0000000..9970059
--- /dev/null
@@ -0,0 +1,12 @@
+This plugin is licensed under the Creative Commons 
+Attribution-NonCommercial-ShareAlike 3.0 Unported 
+License. To view a copy of this license, visit
+http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative
+Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
+
+Alternatively, this plugin may be distributed and executed on hardware which
+is licensed by Dream Multimedia GmbH.
+
+This plugin is NOT free software. It is open source, you are allowed to
+modify it (if you keep the license), but it may not be commercially 
+distributed other than under the conditions noted above.
diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/Makefile.am b/lib/python/Plugins/SystemPlugins/WirelessLan/Makefile.am
new file mode 100755 (executable)
index 0000000..365372c
--- /dev/null
@@ -0,0 +1,13 @@
+installdir = $(pkglibdir)/python/Plugins/SystemPlugins/WirelessLan
+
+#SUBDIRS = meta
+
+install_PYTHON =       \
+       __init__.py \
+       flags.py \
+       iwlibs.py \
+       plugin.py \
+       Wlan.py
+
+dist_install_DATA = \
+       LICENSE
diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py b/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py
new file mode 100755 (executable)
index 0000000..ba1e13d
--- /dev/null
@@ -0,0 +1,612 @@
+from enigma import eListboxPythonMultiContent, eListbox, gFont, RT_HALIGN_LEFT, RT_HALIGN_RIGHT, RT_HALIGN_CENTER
+from Components.MultiContent import MultiContentEntryText
+from Components.GUIComponent import GUIComponent
+from Components.HTMLComponent import HTMLComponent
+from Components.config import config, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, ConfigSelection, ConfigPassword
+from Components.Console import Console
+
+from os import system
+from string import maketrans, strip
+import sys
+import types
+from re import compile as re_compile, search as re_search
+from iwlibs import getNICnames, Wireless, Iwfreq
+
+list = []
+list.append("WEP")
+list.append("WPA")
+list.append("WPA2")
+list.append("WPA/WPA2")
+
+weplist = []
+weplist.append("ASCII")
+weplist.append("HEX")
+
+config.plugins.wlan = ConfigSubsection()
+config.plugins.wlan.essid = NoSave(ConfigText(default = "home", fixed_size = False))
+config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = "home", fixed_size = False))
+
+config.plugins.wlan.encryption = ConfigSubsection()
+config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = True))
+config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = "WPA/WPA2"))
+config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
+config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewlan", fixed_size = False))
+
+class Wlan:
+       def __init__(self, iface):
+               a = ''; b = ''
+               
+               for i in range(0, 255):
+                   a = a + chr(i)
+                   if i < 32 or i > 127:
+                       b = b + ' '
+                   else:
+                       b = b + chr(i)
+               
+               self.iface = iface
+               self.wlaniface = {}
+               self.WlanConsole = Console()
+               self.asciitrans = maketrans(a, b)
+
+       def stopWlanConsole(self):
+               if self.WlanConsole is not None:
+                       print "killing self.WlanConsole"
+                       self.WlanConsole = None
+                       del self.WlanConsole
+                       
+       def getDataForInterface(self, callback = None):
+               #get ip out of ip addr, as avahi sometimes overrides it in ifconfig.
+               print "self.iface im getDataForInterface",self.iface
+               if len(self.WlanConsole.appContainers) == 0:
+                       self.WlanConsole = Console()
+                       cmd = "iwconfig " + self.iface
+                       self.WlanConsole.ePopen(cmd, self.iwconfigFinished, callback)
+
+       def iwconfigFinished(self, result, retval, extra_args):
+               print "self.iface im iwconfigFinished",self.iface
+               callback = extra_args
+               data = { 'essid': False, 'frequency': False, 'acesspoint': False, 'bitrate': False, 'encryption': False, 'quality': False, 'signal': False }
+               #print "result im iwconfigFinished",result
+               
+               for line in result.splitlines():
+                       #print "line",line
+                       line = line.strip()
+                       if "ESSID" in line:
+                               if "off/any" in line:
+                                       ssid = _("No Connection")
+                               else:
+                                       tmpssid=(line[line.index('ESSID')+7:len(line)-1])
+                                       if tmpssid == '':
+                                               ssid = _("Hidden networkname")
+                                       elif tmpssid ==' ':
+                                               ssid = _("Hidden networkname")
+                                       else:
+                                           ssid = tmpssid
+                               #print "SSID->",ssid
+                               if ssid is not None:
+                                       data['essid'] = ssid
+                       if 'Frequency' in line:
+                               frequency = line[line.index('Frequency')+10 :line.index(' GHz')]
+                               #print "Frequency",frequency   
+                               if frequency is not None:
+                                       data['frequency'] = frequency
+                       if "Access Point" in line:
+                               ap=line[line.index('Access Point')+14:len(line)-1]
+                               #print "AP",ap
+                               if ap is not None:
+                                       data['acesspoint'] = ap
+                       if "Bit Rate" in line:
+                               br = line[line.index('Bit Rate')+9 :line.index(' Mb/s')]
+                               #print "Bitrate",br
+                               if br is not None:
+                                       data['bitrate'] = br
+                       if 'Encryption key' in line:
+                               if ":off" in line:
+                                   enc = _("Disabled")
+                               else:
+                                   enc = line[line.index('Encryption key')+15 :line.index('   Security')]
+                               #print "Encryption key",enc 
+                               if enc is not None:
+                                       data['encryption'] = _("Enabled")
+                       if 'Quality' in line:
+                               if "/100" in line:
+                                       qual = line[line.index('Quality')+8:line.index('/100')]
+                               else:
+                                       qual = line[line.index('Quality')+8:line.index('Sig')]
+                               #print "Quality",qual
+                               if qual is not None:
+                                       data['quality'] = qual
+                       if 'Signal level' in line:
+                               signal = line[line.index('Signal level')+14 :line.index(' dBm')]
+                               #print "Signal level",signal            
+                               if signal is not None:
+                                       data['signal'] = signal
+
+               self.wlaniface[self.iface] = data
+               
+               if len(self.WlanConsole.appContainers) == 0:
+                       print "self.wlaniface after loading:", self.wlaniface
+                       self.WlanConsole = None
+                       if callback is not None:
+                               callback(True,self.wlaniface)
+
+       def getAdapterAttribute(self, attribute):
+               print "im getAdapterAttribute"
+               if self.wlaniface.has_key(self.iface):
+                       print "self.wlaniface.has_key",self.iface
+                       if self.wlaniface[self.iface].has_key(attribute):
+                               return self.wlaniface[self.iface][attribute]
+               return None
+               
+       def asciify(self, str):
+               return str.translate(self.asciitrans)
+
+       
+       def getWirelessInterfaces(self):
+               iwifaces = None
+               try:
+                       iwifaces = getNICnames()
+               except:
+                       print "[Wlan.py] No Wireless Networkcards could be found"
+               
+               return iwifaces
+
+       
+       def getNetworkList(self):
+               system("ifconfig "+self.iface+" up")
+               ifobj = Wireless(self.iface) # a Wireless NIC Object
+               
+               #Association mappings
+               stats, quality, discard, missed_beacon = ifobj.getStatistics()
+               snr = quality.signallevel - quality.noiselevel
+
+               try:
+                       scanresults = ifobj.scan()
+               except:
+                       scanresults = None
+                       print "[Wlan.py] No Wireless Networks could be found"
+               
+               if scanresults is not None:
+                       aps = {}
+                       for result in scanresults:
+                       
+                               bssid = result.bssid
+               
+                               encryption = map(lambda x: hex(ord(x)), result.encode)
+               
+                               if encryption[-1] == "0x8":
+                                       encryption = True
+                               else:
+                                       encryption = False
+               
+                               extra = []
+                               for element in result.custom:
+                                       element = element.encode()
+                                       extra.append( strip(self.asciify(element)) )
+                               
+                               if result.quality.sl is 0 and len(extra) > 0:
+                                       begin = extra[0].find('SignalStrength=')+15
+                                                                       
+                                       done = False
+                                       end = begin+1
+                                       
+                                       while not done:
+                                               if extra[0][begin:end].isdigit():
+                                                       end += 1
+                                               else:
+                                                       done = True
+                                                       end -= 1
+                                       
+                                       signal = extra[0][begin:end]
+                                       #print "[Wlan.py] signal is:" + str(signal)
+
+                               else:
+                                       signal = str(result.quality.sl)
+                               
+                               aps[bssid] = {
+                                       'active' : True,
+                                       'bssid': result.bssid,
+                                       'channel': result.frequency.getChannel(result.frequency.getFrequency()),
+                                       'encrypted': encryption,
+                                       'essid': strip(self.asciify(result.essid)),
+                                       'iface': self.iface,
+                                       'maxrate' : result.rate[-1],
+                                       'noise' : result.quality.getNoiselevel(),
+                                       'quality' : str(result.quality.quality),
+                                       'signal' : signal,
+                                       'custom' : extra,
+                               }
+                               print aps[bssid]
+                       return aps
+
+               
+       def getStatus(self):
+               ifobj = Wireless(self.iface)
+               fq = Iwfreq()
+               try:
+                       self.channel = str(fq.getChannel(str(ifobj.getFrequency()[0:-3])))
+               except:
+                       self.channel = 0
+               #print ifobj.getStatistics()
+               status = {
+                                 'BSSID': str(ifobj.getAPaddr()),
+                                 'ESSID': str(ifobj.getEssid()),
+                                 'quality': str(ifobj.getStatistics()[1].quality),
+                                 'signal': str(ifobj.getStatistics()[1].sl),
+                                 'bitrate': str(ifobj.getBitrate()),
+                                 'channel': str(self.channel),
+                                 #'channel': str(fq.getChannel(str(ifobj.getFrequency()[0:-3]))),
+               }
+               
+               for (key, item) in status.items():
+                       if item is "None" or item is "":
+                                       status[key] = _("N/A")
+                               
+               return status
+
+
+
+class WlanList(HTMLComponent, GUIComponent):
+       def __init__(self, session, iface):
+               
+               GUIComponent.__init__(self)
+               self.w = Wlan(iface)
+               self.iface = iface
+               
+               self.length = 0
+               self.aplist = None
+               self.list = None
+               self.oldlist = None
+               self.l = None
+               self.l = eListboxPythonMultiContent()
+               
+               self.l.setFont(0, gFont("Regular", 32))
+               self.l.setFont(1, gFont("Regular", 18))
+               self.l.setFont(2, gFont("Regular", 16))
+               self.l.setBuildFunc(self.buildWlanListEntry)            
+                               
+               self.reload()
+       
+       def buildWlanListEntry(self, essid, bssid, encrypted, iface, maxrate, signal):                                                                                                 
+               
+               res = [ (essid, encrypted, iface) ]
+               
+               if essid == "":
+                       essid = bssid
+               
+               e = encrypted and _("Yes") or _("No")
+               res.append( MultiContentEntryText(pos=(0, 0), size=(470, 35), font=0, flags=RT_HALIGN_LEFT, text=essid) )
+               res.append( MultiContentEntryText(pos=(425, 0), size=(60, 20), font=1, flags=RT_HALIGN_LEFT, text=_("Signal: ")))
+               res.append( MultiContentEntryText(pos=(480, 0), size=(70, 35), font=0, flags=RT_HALIGN_RIGHT, text="%s" %signal))
+               res.append( MultiContentEntryText(pos=(0, 40), size=(180, 20), font=1, flags=RT_HALIGN_LEFT, text=_("Max. Bitrate: %s") %maxrate ))
+               res.append( MultiContentEntryText(pos=(190, 40), size=(180, 20), font=1, flags=RT_HALIGN_CENTER, text=_("Encrypted: %s") %e ))
+               res.append( MultiContentEntryText(pos=(345, 40), size=(190, 20), font=1, flags=RT_HALIGN_RIGHT, text=_("Interface: %s") %iface ))
+               return res
+               
+                       
+       def reload(self):
+               aps = self.w.getNetworkList()
+
+               self.list = []
+               self.aplist = []
+               if aps is not None:
+                       print "[Wlan.py] got Accespoints!"
+                       for ap in aps:
+                               a = aps[ap]
+                               if a['active']:
+                                       if a['essid'] != '':
+                                       #       a['essid'] = a['bssid']
+                                               self.list.append( (a['essid'], a['bssid'], a['encrypted'], a['iface'], a['maxrate'], a['signal']) )
+                                       #self.aplist.append( a['essid'])
+               if self.oldlist is not None:
+                       for entry in self.oldlist:
+                               if entry not in self.list:
+                                       self.list.append(entry)
+               
+               if len(self.list):
+                       for entry in self.list:
+                               self.aplist.append( entry[0])
+               self.length = len(self.list)
+               self.oldlist = self.list
+               self.l.setList([])
+               self.l.setList(self.list)
+                       
+       GUI_WIDGET = eListbox
+
+
+       def getCurrent(self):
+               return self.l.getCurrentSelection()
+       
+       
+       def postWidgetCreate(self, instance):
+               instance.setContent(self.l)
+               instance.setItemHeight(60)
+       
+       
+       def getLength(self):
+               return self.length
+       
+       def getList(self):
+               return self.aplist
+
+
+class wpaSupplicant:
+       def __init__(self):
+               pass
+       
+               
+       def writeConfig(self):  
+                       
+                       essid = config.plugins.wlan.essid.value
+                       hiddenessid = config.plugins.wlan.hiddenessid.value
+                       encrypted = config.plugins.wlan.encryption.enabled.value
+                       encryption = config.plugins.wlan.encryption.type.value
+                       wepkeytype = config.plugins.wlan.encryption.wepkeytype.value
+                       psk = config.plugins.wlan.encryption.psk.value
+                       fp = file('/etc/wpa_supplicant.conf', 'w')
+                       fp.write('#WPA Supplicant Configuration by enigma2\n')
+                       fp.write('ctrl_interface=/var/run/wpa_supplicant\n')
+                       fp.write('eapol_version=1\n')
+                       fp.write('fast_reauth=1\n')     
+                       if essid == 'hidden...':
+                               fp.write('ap_scan=2\n')
+                       else:
+                               fp.write('ap_scan=1\n')
+                       fp.write('network={\n')
+                       if essid == 'hidden...':
+                               fp.write('\tssid="'+hiddenessid+'"\n')
+                       else:
+                               fp.write('\tssid="'+essid+'"\n')
+                       fp.write('\tscan_ssid=0\n')                     
+                       if encrypted:
+                               if encryption == 'WPA' or encryption == 'WPA2' or encryption == 'WPA/WPA2' :
+                                       fp.write('\tkey_mgmt=WPA-PSK\n')
+                                       
+                                       if encryption == 'WPA':
+                                               fp.write('\tproto=WPA\n')
+                                               fp.write('\tpairwise=TKIP\n')
+                                               fp.write('\tgroup=TKIP\n')
+                                       elif encryption == 'WPA2':
+                                               fp.write('\tproto=WPA RSN\n')
+                                               fp.write('\tpairwise=CCMP TKIP\n')
+                                               fp.write('\tgroup=CCMP TKIP\n')                                         
+                                       else:
+                                               fp.write('\tproto=WPA WPA2\n')
+                                               fp.write('\tpairwise=CCMP\n')
+                                               fp.write('\tgroup=TKIP\n')                                      
+                                       fp.write('\tpsk="'+psk+'"\n')
+                                               
+                               elif encryption == 'WEP':
+                                       fp.write('\tkey_mgmt=NONE\n')
+                                       if wepkeytype == 'ASCII':
+                                               fp.write('\twep_key0="'+psk+'"\n')
+                                       else:
+                                               fp.write('\twep_key0='+psk+'\n')
+                       else:
+                               fp.write('\tkey_mgmt=NONE\n')                   
+                       fp.write('}')
+                       fp.write('\n')
+                       fp.close()
+                       system("cat /etc/wpa_supplicant.conf")
+               
+       def loadConfig(self):
+               try:
+                       #parse the wpasupplicant configfile
+                       fp = file('/etc/wpa_supplicant.conf', 'r')
+                       supplicant = fp.readlines()
+                       fp.close()
+                       ap_scan = False
+                       essid = None
+
+                       for s in supplicant:
+                               split = s.strip().split('=',1)
+                               if split[0] == 'ap_scan':
+                                       print "[Wlan.py] Got Hidden SSID Scan  Value "+split[1]
+                                       if split[1] == '2':
+                                               ap_scan = True
+                                       else:
+                                               ap_scan = False
+                                               
+                               elif split[0] == 'ssid':
+                                       print "[Wlan.py] Got SSID "+split[1][1:-1]
+                                       essid = split[1][1:-1]
+                                       
+                               elif split[0] == 'proto':
+                                       print "split[1]",split[1]
+                                       config.plugins.wlan.encryption.enabled.value = True
+                                       if split[1] == "WPA" :
+                                               mode = 'WPA'
+                                       if split[1] == "WPA WPA2" :
+                                               mode = 'WPA/WPA2'
+                                       if split[1] == "WPA RSN" :
+                                               mode = 'WPA2'
+                                       config.plugins.wlan.encryption.type.value = mode
+                                       print "[Wlan.py] Got Encryption: "+mode
+                                       
+                               #currently unused !
+                               #elif split[0] == 'key_mgmt':
+                               #       print "split[1]",split[1]
+                               #       if split[1] == "WPA-PSK" :
+                               #               config.plugins.wlan.encryption.enabled.value = True
+                               #               config.plugins.wlan.encryption.type.value = "WPA/WPA2"
+                               #       print "[Wlan.py] Got Encryption: "+ config.plugins.wlan.encryption.type.value
+                                       
+                               elif split[0] == 'wep_key0':
+                                       config.plugins.wlan.encryption.enabled.value = True
+                                       config.plugins.wlan.encryption.type.value = 'WEP'
+                                       if split[1].startswith('"') and split[1].endswith('"'):
+                                               config.plugins.wlan.encryption.wepkeytype.value = 'ASCII'
+                                               config.plugins.wlan.encryption.psk.value = split[1][1:-1]
+                                       else:
+                                               config.plugins.wlan.encryption.wepkeytype.value = 'HEX'
+                                               config.plugins.wlan.encryption.psk.value = split[1]                                             
+                                       print "[Wlan.py] Got Encryption: WEP - keytype is: "+config.plugins.wlan.encryption.wepkeytype.value
+                                       print "[Wlan.py] Got Encryption: WEP - key0 is: "+config.plugins.wlan.encryption.psk.value
+                                       
+                               elif split[0] == 'psk':
+                                       config.plugins.wlan.encryption.psk.value = split[1][1:-1]
+                                       print "[Wlan.py] Got PSK: "+split[1][1:-1]
+                               else:
+                                       pass
+                               
+                       if ap_scan is True:
+                               config.plugins.wlan.hiddenessid.value = essid
+                               config.plugins.wlan.essid.value = 'hidden...'
+                       else:
+                               config.plugins.wlan.hiddenessid.value = essid
+                               config.plugins.wlan.essid.value = essid
+                       wsconfig = {
+                                       'hiddenessid': config.plugins.wlan.hiddenessid.value,
+                                       'ssid': config.plugins.wlan.essid.value,
+                                       'encryption': config.plugins.wlan.encryption.enabled.value,
+                                       'encryption_type': config.plugins.wlan.encryption.type.value,
+                                       'encryption_wepkeytype': config.plugins.wlan.encryption.wepkeytype.value,
+                                       'key': config.plugins.wlan.encryption.psk.value,
+                               }
+               
+                       for (key, item) in wsconfig.items():
+                               if item is "None" or item is "":
+                                       if key == 'hiddenessid':
+                                               wsconfig['hiddenessid'] = "home"
+                                       if key == 'ssid':
+                                               wsconfig['ssid'] = "home"
+                                       if key == 'encryption':
+                                               wsconfig['encryption'] = True                           
+                                       if key == 'encryption':
+                                               wsconfig['encryption_type'] = "WPA/WPA2"
+                                       if key == 'encryption':
+                                               wsconfig['encryption_wepkeytype'] = "ASCII"
+                                       if key == 'encryption':
+                                               wsconfig['key'] = "mysecurewlan"
+
+               except:
+                       print "[Wlan.py] Error parsing /etc/wpa_supplicant.conf"
+                       wsconfig = {
+                                       'hiddenessid': "home",
+                                       'ssid': "home",
+                                       'encryption': True,
+                                       'encryption_type': "WPA/WPA2",
+                                       'encryption_wepkeytype': "ASCII",
+                                       'key': "mysecurewlan",
+                               }
+               print "[Wlan.py] WS-CONFIG-->",wsconfig
+               return wsconfig
+
+       
+       def restart(self, iface):
+               system("start-stop-daemon -K -x /usr/sbin/wpa_supplicant")
+               system("start-stop-daemon -S -x /usr/sbin/wpa_supplicant -- -B -i"+iface+" -c/etc/wpa_supplicant.conf")
+
+class Status:
+       def __init__(self):
+               self.wlaniface = {}
+               self.backupwlaniface = {}
+               self.WlanConsole = Console()
+
+       def stopWlanConsole(self):
+               if self.WlanConsole is not None:
+                       print "killing self.WlanConsole"
+                       self.WlanConsole = None
+                       
+       def getDataForInterface(self, iface, callback = None):
+               self.WlanConsole = Console()
+               cmd = "iwconfig " + iface
+               self.WlanConsole.ePopen(cmd, self.iwconfigFinished, [iface, callback])
+
+       def iwconfigFinished(self, result, retval, extra_args):
+               (iface, callback) = extra_args
+               data = { 'essid': False, 'frequency': False, 'acesspoint': False, 'bitrate': False, 'encryption': False, 'quality': False, 'signal': False }
+               for line in result.splitlines():
+                       line = line.strip()
+                       if "ESSID" in line:
+                               if "off/any" in line:
+                                       ssid = _("No Connection")
+                               else:
+                                       tmpssid=(line[line.index('ESSID')+7:len(line)-1])
+                                       if tmpssid == '':
+                                               ssid = _("Hidden networkname")
+                                       elif tmpssid ==' ':
+                                               ssid = _("Hidden networkname")
+                                       else:
+                                           ssid = tmpssid
+                               #print "SSID->",ssid
+                               if ssid is not None:
+                                       data['essid'] = ssid
+                       if 'Frequency' in line:
+                               frequency = line[line.index('Frequency')+10 :line.index(' GHz')]
+                               #print "Frequency",frequency   
+                               if frequency is not None:
+                                       data['frequency'] = frequency
+                       if "Access Point" in line:
+                               ap=line[line.index('Access Point')+14:len(line)]
+                               #print "AP",ap
+                               if ap is not None:
+                                       data['acesspoint'] = ap
+                                       if ap == "Not-Associated":
+                                               data['essid'] = _("No Connection")
+                       if "Bit Rate" in line:
+                               if "kb" in line:
+                                       br = line[line.index('Bit Rate')+9 :line.index(' kb/s')]
+                                       if br == '0':
+                                               br = _("Unsupported")
+                                       else:
+                                               br += " Mb/s"
+                               else:
+                                       br = line[line.index('Bit Rate')+9 :line.index(' Mb/s')] + " Mb/s"
+                               #print "Bitrate",br
+                               if br is not None:
+                                       data['bitrate'] = br
+                       if 'Encryption key' in line:
+                               if ":off" in line:
+                                       if data['acesspoint'] is not "Not-Associated":
+                                               enc = _("Unsupported")
+                                       else:
+                                               enc = _("Disabled")
+                               else:
+                                       enc = line[line.index('Encryption key')+15 :line.index('   Security')]
+                                       if enc is not None:
+                                               enc = _("Enabled")
+                               #print "Encryption key",enc 
+                               if enc is not None:
+                                       data['encryption'] = enc
+                       if 'Quality' in line:
+                               if "/100" in line:
+                                       qual = line[line.index('Quality')+8:line.index('/100')]
+                               else:
+                                       qual = line[line.index('Quality')+8:line.index('Sig')]
+                               #print "Quality",qual
+                               if qual is not None:
+                                       data['quality'] = qual
+                       if 'Signal level' in line:
+                               if "dBm" in line:
+                                       signal = line[line.index('Signal level')+14 :line.index(' dBm')]
+                                       signal += " dBm"
+                               elif "/100" in line:
+                                       signal = line[line.index('Signal level')+13:line.index('/100  Noise')]
+                                       signal += "%"
+                               else:
+                                       signal = line[line.index('Signal level')+13:line.index('  Noise')]
+                                       signal += "%"
+                               #print "Signal level",signal            
+                               if signal is not None:
+                                       data['signal'] = signal
+
+               self.wlaniface[iface] = data
+               self.backupwlaniface = self.wlaniface
+               
+               if self.WlanConsole is not None:
+                       if len(self.WlanConsole.appContainers) == 0:
+                               print "self.wlaniface after loading:", self.wlaniface
+                               if callback is not None:
+                                       callback(True,self.wlaniface)
+
+       def getAdapterAttribute(self, iface, attribute):
+               print "im getAdapterAttribute"
+               self.iface = iface
+               if self.wlaniface.has_key(self.iface):
+                       print "self.wlaniface.has_key",self.iface
+                       if self.wlaniface[self.iface].has_key(attribute):
+                               return self.wlaniface[self.iface][attribute]
+               return None
+       
+iStatus = Status()
\ No newline at end of file
diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/__init__.py b/lib/python/Plugins/SystemPlugins/WirelessLan/__init__.py
new file mode 100755 (executable)
index 0000000..e69de29
diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/flags.py b/lib/python/Plugins/SystemPlugins/WirelessLan/flags.py
new file mode 100755 (executable)
index 0000000..4435f84
--- /dev/null
@@ -0,0 +1,104 @@
+# -*- coding: ISO-8859-1 -*-
+# python-wifi -- a wireless library to access wireless cards via python
+# Copyright (C) 2004, 2005, 2006 Róman Joost
+#
+#    This library is free software; you can redistribute it and/or
+#    modify it under the terms of the GNU Lesser General Public License
+#    as published by the Free Software Foundation; either version 2.1 of
+#    the License, or (at your option) any later version.
+#
+#    This library is distributed in the hope that it will be useful, but
+#    WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+#    Lesser General Public License for more details.
+#
+#    You should have received a copy of the GNU Lesser General Public
+#    License along with this library; if not, write to the Free Software
+#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+#    USA 
+
+modes = ['Auto', 
+         'Ad-Hoc',
+         'Managed',
+         'Master', 
+         'Repeat',
+         'Second',
+         'Monitor']
+
+IFNAMSIZE = 16
+IW_ESSID_MAX_SIZE = 16
+
+KILO = 10**3
+MEGA = 10**6
+GIGA = 10**9
+
+# ioctl calls for the Linux/i386 kernel
+SIOCIWFIRST   = 0x8B00    # FIRST ioctl identifier
+SIOCGIFCONF   = 0x8912    # ifconf struct
+SIOCGIWNAME   = 0x8B01    # get name == wireless protocol
+SIOCGIWFREQ   = 0x8B05    # get channel/frequency
+SIOCSIWMODE   = 0x8B06    # set the operation mode
+SIOCGIWMODE   = 0x8B07    # get operation mode
+SIOCGIWSENS   = 0x8B09    # get sensitivity
+SIOCGIWAP     = 0x8B15    # get AP MAC address
+SIOCSIWSCAN   = 0x8B18    # set scanning off
+SIOCGIWSCAN   = 0x8B19    # get scanning results
+SIOCGIWRATE   = 0x8B21    # get default bit rate
+SIOCGIWRTS    = 0x8B23    # get rts/cts threshold
+SIOCGIWFRAG   = 0x8B25    # get fragmention thrh
+SIOCGIWTXPOW  = 0x8B27    # get transmit power (dBm)
+SIOCGIWRETRY  = 0x8B29    # get retry limit
+SIOCGIWRANGE  = 0x8B0B    # range
+SIOCGIWSTATS  = 0x8B0F    # get wireless statistics
+SIOCSIWESSID  = 0x8B1A    # set essid
+SIOCGIWESSID  = 0x8B1B    # get essid
+SIOCGIWPOWER  = 0x8B2D    # get power managment settings
+SIOCGIWENCODE = 0x8B2B    # get encryption information
+SIOCIWLAST    = 0x8BFF    # LAST ioctl identifier
+
+# Power management flags
+IW_POWER_ON = 0x0000        # No details ...
+IW_POWER_TYPE = 0xF000      # Type of parameter
+IW_POWER_PERIOD = 0x1000    # Value is a period/duration of
+IW_POWER_TIMEOUT = 0x2000   # Value is a timeout
+IW_POWER_MODE = 0x0F00      # Power management mode
+IW_POWER_MIN = 0x0001       # Value is a minimum
+IW_POWER_MAX = 0x0002       # Value is a maximum
+IW_POWER_RELATIVE = 0x0004  # Value is not in seconds/ms/us
+
+# Retry limits 
+IW_RETRY_TYPE = 0xF000      # Type of parameter
+
+# encoding stuff
+IW_ENCODE_DISABLED = 0x8000     # encoding is disabled
+IW_ENCODE_NOKEY = 0x0800      # key is write only, not present
+
+# constants responsible for scanning
+IW_SCAN_MAX_DATA = 4096
+
+IW_EV_LCP_LEN = 4
+IW_EV_CHAR_LEN = IW_EV_LCP_LEN + IFNAMSIZE
+IW_EV_UINT_LEN = IW_EV_LCP_LEN + 4
+IW_EV_FREQ_LEN = IW_EV_LCP_LEN + 8
+IW_EV_ADDR_LEN = IW_EV_LCP_LEN + 16
+IW_EV_POINT_LEN = IW_EV_LCP_LEN + 4
+IW_EV_PARAM_LEN = IW_EV_LCP_LEN + 8
+IW_EV_QUAL_LEN = IW_EV_LCP_LEN + 4
+
+EPERM = 1
+E2BIG = 7
+EAGAIN = 11
+
+IWHT_NULL = 0
+IWHT_CHAR = 2
+IWHT_UINT = 4
+IWHT_FREQ = 5
+IWHT_ADDR = 6
+IWHT_POINT = 8
+IWHT_PARAM = 9
+IWHT_QUAL = 10
+
+IWEVFIRST     = 0x8C00    # FIRST event identifier
+IWEVQUAL      = 0x8C01    # Quality statistics from scan
+IWEVCUSTOM    = 0x8C02    # Custom Ascii string from Driver
+IWEVLAST      = 0x8C0A    # LAST event identifier
diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/iwlibs.py b/lib/python/Plugins/SystemPlugins/WirelessLan/iwlibs.py
new file mode 100755 (executable)
index 0000000..c5f9c6d
--- /dev/null
@@ -0,0 +1,1114 @@
+# -*- coding: ISO-8859-1 -*-
+# python-wifi -- a wireless library to access wireless cards via python
+# Copyright (C) 2004, 2005, 2006 Róman Joost
+# 
+# Contributions from:
+#   Mike Auty <m.auty@softhome.net> (Iwscanresult, Iwscan)
+#
+#    This library is free software; you can redistribute it and/or
+#    modify it under the terms of the GNU Lesser General Public License
+#    as published by the Free Software Foundation; either version 2.1 of
+#    the License, or (at your option) any later version.
+#
+#    This library is distributed in the hope that it will be useful, but
+#    WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+#    Lesser General Public License for more details.
+#
+#    You should have received a copy of the GNU Lesser General Public
+#    License along with this library; if not, write to the Free Software
+#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+#    USA 
+
+from struct import pack as struct_pack, \
+       unpack as struct_unpack, \
+       calcsize as struct_calcsize
+
+from array import array
+from math import ceil, log10
+from fcntl import ioctl
+from socket import AF_INET, SOCK_DGRAM, socket
+from time import sleep
+from re import compile
+
+from flags import *    
+
+def getNICnames():
+    """ extract wireless device names of /proc/net/wireless 
+        
+        returns empty list if no devices are present
+
+        >>> getNICnames()
+        ['eth1', 'wifi0']
+    """
+    device = compile('[a-z]+[0-9]+')
+    ifnames = []
+    
+    f = open('/proc/net/wireless', 'r')
+    data = f.readlines()
+    for line in data:
+        try:
+            ifnames.append(device.search(line).group())
+        except AttributeError:
+            pass 
+    # if we couldn't lookup the devices, try to ask the kernel
+    if ifnames == []:
+        ifnames = getConfiguredNICnames()
+    
+    return ifnames
+
+def getConfiguredNICnames():
+    """get the *configured* ifnames by a systemcall
+       
+       >>> getConfiguredNICnames()
+       []
+    """
+    iwstruct = Iwstruct()
+    ifnames = []
+    buff = array('c', '\0'*1024)
+    caddr_t, length = buff.buffer_info()
+    s = iwstruct.pack('iP', length, caddr_t)
+    try:
+        result = iwstruct._fcntl(SIOCGIFCONF, s)
+    except IOError, (i, e):
+        return i, e
+   
+    # get the interface names out of the buffer
+    for i in range(0, 1024, 32):
+        ifname = buff.tostring()[i:i+32]
+        ifname = struct_unpack('32s', ifname)[0]
+        ifname = ifname.split('\0', 1)[0]
+        if ifname:
+            # verify if ifnames are really wifi devices
+            wifi = Wireless(ifname)
+            result = wifi.getAPaddr()
+            if result[0] == 0:
+                ifnames.append(ifname)
+
+    return ifnames  
+
+def makedict(**kwargs):
+    return kwargs
+
+
+class Wireless(object):
+    """Access to wireless interfaces"""
+    
+    def __init__(self, ifname):
+        self.sockfd = socket(AF_INET, SOCK_DGRAM)
+        self.ifname = ifname
+        self.iwstruct = Iwstruct()
+    
+    def getAPaddr(self):
+        """ returns accesspoint mac address 
+        
+            >>> from iwlibs import Wireless, getNICnames
+            >>> ifnames = getNICnames()
+            >>> ifnames
+            ['eth1', 'wifi0']
+            >>> wifi = Wireless(ifnames[0])
+            >>> wifi.getAPaddr()
+            '00:0D:88:8E:4E:93'
+
+            Test with non-wifi card:
+            >>> wifi = Wireless('eth0')
+            >>> wifi.getAPaddr()
+            (95, 'Operation not supported')
+
+            Test with non-existant card:
+            >>> wifi = Wireless('eth2')
+            >>> wifi.getAPaddr()
+            (19, 'No such device')
+        """
+        buff, s = self.iwstruct.pack_wrq(32)
+        i, result = self.iwstruct.iw_get_ext(self.ifname, 
+                                             SIOCGIWAP,
+                                             data=s)
+        if i > 0:
+            return result
+
+        return self.iwstruct.getMAC(result)
+   
+    def getBitrate(self):
+        """returns device currently set bit rate 
+        
+            >>> from iwlibs import Wireless
+            >>> wifi = Wireless('eth1')
+            >>> wifi.getBitrate()
+            '11 Mb/s'
+        """
+        i, result = self.iwstruct.iw_get_ext(self.ifname, 
+                                            SIOCGIWRATE)
+        if i > 0:
+            return result
+        iwfreq = Iwfreq(result)
+        return iwfreq.getBitrate()
+    
+    def getBitrates(self):
+        """returns the number of available bitrates for the device
+           
+            >>> from iwlibs import Wireless
+            >>> wifi = Wireless('eth1')
+            >>> num, rates = wifi.getBitrates()
+            >>> num == len(rates)
+            True
+        """
+        range = Iwrange(self.ifname)
+        if range.errorflag:
+            return (range.errorflag, range.error)
+        return (range.num_bitrates, range.bitrates)
+
+    def getChannelInfo(self):
+        """returns the number of channels and available frequency for
+           the device
+
+            >>> from iwlibs import Wireless
+            >>> wifi = Wireless('eth1')
+            >>> num, rates = wifi.getChannelInfo()
+            >>> num == len(rates)
+            True
+            """
+        range = Iwrange(self.ifname)
+        if range.errorflag:
+            return (range.errorflag, range.error)
+        return (range.num_channels, range.frequencies)
+
+    def getEssid(self):
+        """get essid information
+            
+            >>> from iwlibs import Wireless
+            >>> wifi = Wireless('eth1')
+            >>> wifi.getEssid()
+            'romanofski'
+        """
+        essid = ""
+        buff, s = self.iwstruct.pack_wrq(32)
+        i, result = self.iwstruct.iw_get_ext(self.ifname, 
+                                             SIOCGIWESSID, 
+                                             data=s)
+        if i > 0:
+            return result
+        str = buff.tostring()
+        return str.strip('\x00')
+
+    def setEssid(self, essid):
+        """set essid """
+        raise NotImplementedError
+        if len(essid) > IW_ESSID_MAX_SIZE:
+            return "essid to big"
+        buff, s = self.iwstruct.pack_test(essid, 32)
+        i, result = self.iwstruct.iw_get_ext(self.ifname, 
+                                             SIOCSIWESSID, 
+                                             data=s)
+        if i > 0:
+            return result
+
+    def getEncryption(self):
+        """get encryption information which is probably a string of '*',
+        'open', 'private'
+            
+            as a normal user, you will get a 'Operation not permitted'
+            error:
+        
+            >>> from iwlibs import Wireless
+            >>> wifi = Wireless('eth1')
+            >>> wifi.getEncryption()
+            (1, 'Operation not permitted')
+        """
+        iwpoint = Iwpoint(self.ifname)
+        if iwpoint.errorflag:
+            return (iwpoint.errorflag, iwpoint.error)
+        return iwpoint.getEncryptionKey()
+
+    def getFragmentation(self):
+        """returns fragmentation threshold 
+           
+           It depends on what the driver says. If you have fragmentation
+           threshold turned on, you'll get an int. If it's turned of
+           you'll get a string: 'off'.
+            >>> from iwlibs import Wireless
+            >>> wifi = Wireless('eth1')
+            >>> wifi.getFragmentation()
+            'off'
+        """
+        iwparam = Iwparam(self.ifname, SIOCGIWFRAG)
+        if iwparam.errorflag:
+            return (iwparam.errorflag, iwparam.error)
+        return iwparam.getValue()
+        
+    def getFrequency(self):
+        """returns currently set frequency of the card 
+            
+            >>> from iwlibs import Wireless
+            >>> wifi = Wireless('eth1')
+            >>> wifi.getFrequency()
+            '2.417GHz' 
+        """
+        i, r = self.iwstruct.iw_get_ext(self.ifname, 
+                                        SIOCGIWFREQ)
+        if i > 0:
+            return (i, r)
+        iwfreq = Iwfreq(r)
+        return iwfreq.getFrequency()
+    
+        
+    def getMode(self):
+        """returns currently set operation mode 
+            
+            >>> from iwlibs import Wireless
+            >>> wifi = Wireless('eth1')
+            >>> wifi.getMode()
+            'Managed' 
+        """
+        i, result = self.iwstruct.iw_get_ext(self.ifname, 
+                                             SIOCGIWMODE)
+        if i > 0:
+            return result
+        mode = self.iwstruct.unpack('i', result[:4])[0]
+        return modes[mode]
+
+    def setMode(self, mode):
+        """sets the operation mode """
+        try:
+            this_modes = [x.lower() for x in modes]
+            mode = mode.lower()
+            wifimode = this_modes.index(mode)
+        except ValueError:
+            return "Invalid operation mode!"
+        
+        s = self.iwstruct.pack('I', wifimode)
+        i, result = self.iwstruct.iw_get_ext(self.ifname, 
+                                             SIOCSIWMODE, 
+                                             data=s)
+        if i > 0:
+            return result
+    
+    def getWirelessName(self):
+        """ returns wireless name 
+            
+            >>> from iwlibs import Wireless
+            >>> wifi = Wireless('eth1')
+            >>> wifi.getWirelessName()
+            'IEEE 802.11-DS'
+        """
+        i, result = self.iwstruct.iw_get_ext(self.ifname, 
+                                             SIOCGIWNAME)
+        if i > 0:
+            return result
+        return result.split('\0')[0]
+    
+    def getPowermanagement(self):
+        """returns power management settings 
+            
+            >>> from iwlibs import Wireless
+            >>> wifi = Wireless('eth1')
+            >>> wifi.getPowermanagement()
+            'off'
+        """
+        iwparam = Iwparam(self.ifname, SIOCGIWPOWER)
+        if iwparam.errorflag:
+            return (iwparam.errorflag, iwparam.error)
+        return iwparam.getValue()
+
+    
+    def getRetrylimit(self):
+        """returns limit retry/lifetime
+
+            man iwconfig:
+            Most cards have MAC retransmissions, and some  allow  to set
+            the behaviour of the retry mechanism.
+                     
+            >>> from iwlibs import Wireless
+            >>> wifi = Wireless('eth1')
+            >>> wifi.getRetrylimit()
+            16
+        """
+        iwparam = Iwparam(self.ifname, SIOCGIWRETRY)
+        if iwparam.errorflag:
+            return (iwparam.errorflag, iwparam.error)
+        return iwparam.getValue()
+    
+    def getRTS(self):
+        """returns rts threshold 
+            
+            returns int, 'auto', 'fixed', 'off'
+        
+            man iwconfig:
+            RTS/CTS adds a handshake before each packet transmission to
+            make sure that the channel is clear. This adds overhead, but
+            increases performance in case of hidden  nodes or  a large
+            number of active nodes. This parameter sets the size of the
+            smallest packet for which the node sends RTS;  a value equal
+            to the maximum packet size disable the mechanism. 
+            
+            >>> from iwlibs import Wireless
+            >>> wifi = Wireless('eth1')
+            >>> wifi.getRTS()
+            'off'
+        """
+        iwparam = Iwparam(self.ifname, SIOCGIWRTS)
+        if iwparam.errorflag:
+            return (iwparam.errorflag, iwparam.error)
+        return iwparam.getValue()
+    
+    def getSensitivity(self):
+        """returns sensitivity information 
+        
+            man iwconfig:
+            This is the lowest signal level for which the hardware
+            attempt  packet  reception, signals  weaker  than  this are
+            ignored. This is used to avoid receiving background noise,
+            so you should  set  it according  to  the  average noise
+            level. Positive values are assumed to be the raw value used
+            by the hardware  or a percentage, negative values are
+            assumed to be dBm.
+        
+            >>> from iwlibs import Wireless
+            >>> wifi = Wireless('eth1')
+            >>> wifi.getSensitivity()
+            'off'
+            
+        """
+        iwparam = Iwparam(self.ifname, SIOCGIWSENS)
+        if iwparam.errorflag:
+            return (iwparam.errorflag, iwparam.error)
+        return iwparam.getValue()
+        
+    def getTXPower(self):
+        """returns transmit power in dBm 
+        
+            >>> from iwlibs import Wireless
+            >>> wifi = Wireless('eth1')
+            >>> wifi.getTXPower()
+            '17 dBm'
+        """
+        i, r = self.iwstruct.iw_get_ext(self.ifname, 
+                                        SIOCGIWTXPOW)
+        if i > 0:
+            return (i, r)
+        iwfreq = Iwfreq(r)
+        return iwfreq.getTransmitPower()
+         
+    def getStatistics(self):
+        """returns statistics information which can also be found in
+           /proc/net/wireless 
+        """
+        iwstats = Iwstats(self.ifname)
+        if iwstats.errorflag > 0:
+            return (iwstats.errorflag, iwstats.error)
+        return [iwstats.status, iwstats.qual, iwstats.discard,
+            iwstats.missed_beacon]
+
+    def scan(self):
+        """returns Iwscanresult objects, after a successful scan"""
+        iwscan = Iwscan(self.ifname)
+        return iwscan.scan()
+
+
+class Iwstruct(object):
+    """basic class to handle iwstruct data """
+    
+    def __init__(self):
+        self.idx = 0
+        self.sockfd = socket(AF_INET, SOCK_DGRAM)
+
+    def parse_data(self, fmt, data):
+        """ unpacks raw C data """
+        size = struct_calcsize(fmt)
+        idx = self.idx
+
+        str = data[idx:idx + size]
+        self.idx = idx+size
+        value = struct_unpack(fmt, str)
+
+        # take care of a tuple like (int, )
+        if len(value) == 1:
+            return value[0]
+        else:
+            return value
+    
+    def pack(self, fmt, *args):
+        """ calls struct_pack and returns the result """
+        return struct_pack(fmt, *args)
+
+    def pack_wrq(self, buffsize):
+        """ packs wireless request data for sending it to the kernel """
+        # Prepare a buffer
+        # We need the address of our buffer and the size for it. The
+        # ioctl itself looks for the pointer to the address in our
+        # memory and the size of it.
+        # Dont change the order how the structure is packed!!!
+        buff = array('c', '\0'*buffsize)
+        caddr_t, length = buff.buffer_info()
+        s = struct_pack('Pi', caddr_t, length)
+        return buff, s
+    
+    def pack_test(self, string, buffsize):
+        """ packs wireless request data for sending it to the kernel """
+        buffsize = buffsize - len(string)
+        buff = array('c', string+'\0'*buffsize)
+        caddr_t, length = buff.buffer_info()
+        s = struct_pack('Pii', caddr_t, length, 1)
+        return buff, s
+
+    def unpack(self, fmt, packed_data):
+        """ unpacks data with given format """
+        return struct_unpack(fmt, packed_data)
+
+    def _fcntl(self, request, args):
+        return ioctl(self.sockfd.fileno(), request, args)
+    
+    def iw_get_ext(self, ifname, request, data=None):
+        """ read information from ifname """
+        # put some additional data behind the interface name
+        if data is not None:
+            buff = IFNAMSIZE-len(ifname)
+            ifreq = ifname + '\0'*buff
+            ifreq = ifreq + data
+        else:
+            ifreq = (ifname + '\0'*32)
+            
+        try:
+            result = self._fcntl(request, ifreq)
+        except IOError, (i, e):
+            return i, e
+        
+        return (0, result[16:])
+
+    def getMAC(self, packed_data):
+        """ extracts mac addr from packed data and returns it as str """
+        mac_addr = struct_unpack('xxBBBBBB', packed_data[:8])
+        return "%02X:%02X:%02X:%02X:%02X:%02X" % mac_addr
+
+class Iwparam(object):
+    """class to hold iwparam data """
+    
+    def __init__(self, ifname, ioctl):
+        # (i) value, (b) fixed, (b) disabled, (b) flags
+        self.fmt = "ibbH"
+        self.value = 0
+        self.fixed = 0
+        self.disabled = 0
+        self.flags = 0
+        self.errorflag = 0
+        self.error = ""
+        self.ioctl = ioctl 
+        self.ifname = ifname
+        self.update()
+    
+    def getValue(self):
+        """returns the value if not disabled """
+
+        if self.disabled:
+            return 'off'
+        if self.flags & IW_RETRY_TYPE == 0:
+            return self.getRLAttributes()
+        else:
+            return self.getPMAttributes()
+
+    def getRLAttributes(self):
+        """returns a string with attributes determined by self.flags
+        """
+        return self.value
+
+    def getPMAttributes(self):
+        """returns a string with attributes determined by self.flags
+           and IW_POWER*
+        """
+        result = ""
+        
+        # Modifiers
+        if self.flags & IW_POWER_MIN == 0:
+            result = " min"
+        if self.flags & IW_POWER_MAX == 0:
+            result = " max"
+            
+        # Type
+        if self.flags & IW_POWER_TIMEOUT == 0:
+            result = " period:" 
+        else:
+            result = " timeout:"
+        # Value with or without units
+        # IW_POWER_RELATIVE - value is *not* in s/ms/us
+        if self.flags & IW_POWER_RELATIVE:
+            result += "%f" %(float(self.value)/MEGA)
+        else:
+            if self.value >= MEGA:
+                result += "%fs" %(float(self.value)/MEGA)
+            elif self.value >= KILO:
+                result += "%fms" %(float(self.value)/KILO)
+            else:
+                result += "%dus" % self.value
+
+        return result
+        
+    def update(self):
+        iwstruct = Iwstruct()
+        i, r = iwstruct.iw_get_ext(self.ifname, 
+                                   self.ioctl)
+        if i > 0:
+            self.errorflag = i
+            self.error = r
+        self._parse(r)
+    
+    def _parse(self, data):
+        """ unpacks iwparam data """
+        iwstruct = Iwstruct()
+        self.value, self.fixed, self.disabled, self.flags =\
+            iwstruct.parse_data(self.fmt, data)
+        
+class Iwfreq(object):
+    """ class to hold iwfreq data
+        delegates to Iwstruct class
+    """
+    
+    def __init__(self, data=None):
+        self.fmt = "ihbb"
+        if data is not None:
+            self.frequency = self.parse(data)
+        else:
+            self.frequency = 0
+        self.iwstruct = Iwstruct()
+        
+    def __getattr__(self, attr):
+        return getattr(self.iwstruct, attr)
+
+    def parse(self, data):
+        """ unpacks iwparam"""
+        
+        size = struct_calcsize(self.fmt)
+        m, e, i, pad = struct_unpack(self.fmt, data[:size])
+        # XXX well, its not *the* frequency - we need a better name
+        if e == 0:
+            return m
+        else:
+            return float(m)*10**e
+    
+    def getFrequency(self):
+        """returns Frequency (str) 
+            
+           data - binary data returned by systemcall (iw_get_ext())
+        """
+        freq = self.frequency
+        
+        if freq >= GIGA:
+            return "%0.3fGHz" %(freq/GIGA)
+
+        if freq >= MEGA:
+            return "%0.3fMHZ" %(freq/MEGA)
+
+        if freq >= KILO:
+            return "%0.3fKHz" %(freq/KILO)
+    
+    def getBitrate(self):
+        """ returns Bitrate in Mbit 
+        
+           data - binary data returned by systemcall (iw_get_ext())
+        """
+        bitrate = self.frequency
+
+        if bitrate >= GIGA:
+            return "%i Gb/s" %(bitrate/GIGA)
+
+        if bitrate >= MEGA:
+            return "%i Mb/s" %(bitrate/MEGA)
+        
+        if bitrate >= KILO:
+            return "%i Kb/s" %(bitrate/KILO)
+
+    def getTransmitPower(self):
+        """ returns transmit power in dbm """
+        # XXX something flaky is going on with m and e
+        # eg. m = 50 and e should than be 0, because the number is stored in
+        # m and don't needs to be recalculated
+        return "%i dBm" %self.mw2dbm(self.frequency/10)
+    
+    def getChannel(self, freq):
+        """returns channel information given by frequency
+           
+           returns None if frequency can't be converted
+           freq = frequency to convert (int)
+           iwrange = Iwrange object
+        """
+        
+        try:
+            freq = float(freq)
+        except:
+            return None
+        
+        lut = {}
+        #13 Channels beginning at 2.412GHz and inreasing by 0,005 GHz steps
+        for i in range(0,12):
+            cur = float( 2.412 + ( i * 0.005 ) )
+            lut[str(cur)] = i+1
+        # Channel 14 need special actions ;)
+        lut['2.484'] = 14
+        
+        
+        if str(freq) in lut.keys():
+                return lut[str(freq)]
+        
+        return None
+    
+          
+    def mw2dbm(self, mwatt):
+        """ converts mw to dbm(float) """
+        return ceil(10.0 * log10(mwatt))
+        
+    def _setFrequency(self, list):
+        """sets self.frequency by given list 
+           
+           currently only used by Iwrange
+        """
+        assert len(list) == 4
+        m, e, i, pad = list
+        if e == 0:
+            self.frequency = m
+        else:
+            self.frequency = m #float(m)*10**e
+
+class Iwstats(object):
+    """ class to hold iwstat data """
+
+    def __init__(self, ifname):
+        # (2B) status, 4B iw_quality, 6i iw_discarded
+        self.fmt = "2B4B6i"
+        self.status = 0
+        self.qual = Iwquality()
+        self.discard = {}
+        self.missed_beacon = 0
+        self.ifname = ifname
+        self.errorflag = 0
+        self.error = ""
+        self.update()
+
+    def update(self):
+        iwstruct = Iwstruct()
+        buff, s = iwstruct.pack_wrq(32)
+        i, result = iwstruct.iw_get_ext(self.ifname, 
+                                        SIOCGIWSTATS, 
+                                        data=s)
+        if i > 0:
+            self.error = result
+            self.errorflag = i
+        self._parse(buff.tostring())
+    
+    def _parse(self, data):
+        """ unpacks iwstruct data """
+        struct = Iwstruct()
+        iwqual = Iwquality()
+        iwstats_data = struct.parse_data(self.fmt, data)
+        
+        self.status = iwstats_data[0:2]
+        self.qual.quality, self.qual.sl, self.qual.nl,\
+            self.qual.flags = iwstats_data[2:6]
+        nwid, code, frag, retries, flags = iwstats_data[6:11]
+        self.missed_beacon = iwstats_data[11:12][0]
+        self.discard = makedict(nwid=nwid, code=code,
+            fragment=frag, retries=retries, misc=flags)
+
+class Iwquality(object):
+    """ class to hold iwquality data """
+
+    def __init__(self):
+        self.quality = 0
+        self.sl = 0
+        self.nl = 0
+        self.updated = 0
+        self.fmt = "4B"
+
+    def parse(self, data):
+        """ unpacks iwquality data """
+        struct = Iwstruct()
+        qual, sl, nl, flags = struct.parse_data(self.fmt, data)
+
+        # compute signal and noise level
+        self.signal_level = sl
+        self.noise_level = nl
+
+        # asign the other values
+        self.quality = qual
+        self.updated = flags
+
+    def setValues(self, list):
+        """ assigns values given by a list to our attributes """
+        attributes = ["quality", "signallevel", "noise_level",
+            "updated"]
+        assert len(list) == 4
+        
+        for i in range(len(list)):
+            setattr(self, attributes[i], list[i])
+    
+    def getSignallevel(self):
+        """ returns signal level """
+        return self.sl-0x100
+
+    def setSignallevel(self, sl):
+        """ sets signal level """
+        self.sl = sl
+    signallevel = property(getSignallevel, setSignallevel)
+    
+    def getNoiselevel(self):
+        """ returns noise level """
+        return self.nl - 0x100
+
+    def setNoiselevel(self):
+        raise NotImplementedError
+        self.nl = nl
+    noiselevel = property(getNoiselevel, setNoiselevel)
+
+class Iwpoint(object):
+    """ class to hold iwpoint data """
+
+    def __init__(self, ifname):
+        self.key = [0,0,0,0]
+        self.fields = 0
+        self.flags = 0
+        # (4B) pointer to data, H length, H flags
+        self.fmt = "4BHH"
+        self.errorflag = 0
+        self.error = ""
+        self.ifname = ifname
+        self.update()
+
+    def __getattr__(self, attr):
+        return getattr(self.iwstruct, attr)
+    
+    def update(self):
+        iwstruct = Iwstruct()
+        buff, s = iwstruct.pack_wrq(32)
+        i, result = iwstruct.iw_get_ext(self.ifname, 
+                                        SIOCGIWENCODE, 
+                                        data=s)
+        if i > 0:
+            self.errorflag = i
+            self.error = result
+        self._parse(result)
+        
+    def getEncryptionKey(self):
+        """ returns encryption key as '**' or 'off' as str """
+        if self.flags & IW_ENCODE_DISABLED != 0:
+            return 'off'
+        elif self.flags & IW_ENCODE_NOKEY != 0:
+            # a key is set, so print it
+            return '**' * self.fields
+    
+    def _parse(self, data):
+        """ unpacks iwpoint data
+        """
+        iwstruct = Iwstruct()
+        ptr, ptr, ptr, ptr, self.fields, self.flags =\
+            iwstruct.parse_data(self.fmt, data)
+        self.key = [ptr, ptr, ptr, ptr]
+
+class Iwrange(object):
+    """holds iwrange struct """
+    IW_MAX_FREQUENCIES = 32
+
+    def __init__(self, ifname):
+        self.fmt = "iiihb6ii4B4Bi32i2i2i2i2i3h8h2b2bhi8i2b3h2i2ihB17x"\
+            + self.IW_MAX_FREQUENCIES*"ihbb"
+        
+        self.ifname = ifname
+        self.errorflag = 0
+        self.error = ""
+        
+        # informative stuff
+        self.throughput = 0
+        
+        # nwid (or domain id)
+        self.min_nwid = self.max_nwid = 0
+        
+        # frequency for backward compatibility
+        self.old_num_channels = self.old_num_frequency = self.old_freq = 0
+        
+        # signal level threshold
+        self.sensitivity = 0
+        
+        # link quality
+        self.max_qual = Iwquality()
+        self.avg_qual = Iwquality()
+
+        # rates
+        self.num_bitrates = 0
+        self.bitrates = []
+
+        # rts threshold
+        self.min_rts = self.max_rts = 0
+
+        # fragmention threshold
+        self.min_frag = self.max_frag = 0
+
+        # power managment
+        self.min_pmp = self.max_pmp = 0
+        self.min_pmt = self.max_pmt = 0
+        self.pmp_flags = self.pmt_flags = self.pm_capa = 0
+
+        # encoder stuff
+        self.encoding_size = 0
+        self.num_encoding_sizes = self.max_encoding_tokens = 0
+        self.encoding_login_index = 0
+
+        # transmit power
+        self.txpower_capa = self.num_txpower = self.txpower = 0
+
+        # wireless extension version info
+        self.we_vers_compiled = self.we_vers_src = 0
+
+        # retry limits and lifetime
+        self.retry_capa = self.retry_flags = self.r_time_flags = 0
+        self.min_retry = self.max_retry = 0
+        self.min_r_time = self.max_r_time = 0
+
+        # frequency
+        self.num_channels = self.num_frequency = 0
+        self.frequencies = []
+        self.update()
+    
+    def update(self):
+        """updates Iwrange object by a system call to the kernel 
+           and updates internal attributes
+        """
+        iwstruct = Iwstruct()
+        buff, s = iwstruct.pack_wrq(640)
+        i, result = iwstruct.iw_get_ext(self.ifname, 
+                                        SIOCGIWRANGE, 
+                                        data=s)
+        if i > 0:
+            self.errorflag = i
+            self.error = result
+        data = buff.tostring()
+        self._parse(data)
+        
+    def _parse(self, data):
+        struct = Iwstruct()
+        result = struct.parse_data(self.fmt, data)
+        
+        # XXX there is maybe a much more elegant way to do this
+        self.throughput, self.min_nwid, self.max_nwid = result[0:3]
+        self.old_num_channels, self.old_num_frequency = result[3:5]
+        self.old_freq = result[5:11]
+        self.sensitivity = result[11]
+        self.max_qual.setValues(result[12:16])
+        self.avg_qual.setValues(result[16:20])
+        self.num_bitrates = result[20] # <- XXX
+        raw_bitrates = result[21:53]
+        for rate in raw_bitrates:
+            iwfreq = Iwfreq()
+            iwfreq.frequency = rate
+            br = iwfreq.getBitrate()
+            if br is not None:
+                self.bitrates.append(br)
+            
+        self.min_rts, self.max_rts = result[53:55]
+        self.min_frag, self.max_frag = result[55:57]
+        self.min_pmp, self.max_pmp = result[57:59]
+        self.min_pmt, self.max_pmt = result[59:61]
+        self.pmp_flags, self.pmt_flags, self.pm_capa = result[61:64]
+        self.encoding_size = result[64:72]
+        self.num_encoding_sizes, self.max_encoding_tokens = result[72:74]
+        self.encoding_login_index = result[74:76]
+        self.txpower_capa, self.num_txpower = result[76:78]
+        self.txpower = result[78:86]
+        self.we_vers_compiled, self.we_vers_src = result[86:88]
+        self.retry_capa, self.retry_flags, self.r_time_flags = result[88:91]
+        self.min_retry, self.max_retry = result[91:93]
+        self.min_r_time, self.max_r_time = result[93:95]
+        self.num_channels = result[95]
+        self.num_frequency = result[96]
+        freq = result[97:]
+        
+        i = self.num_frequency
+        for x in range(0, len(freq), 4):
+            iwfreq = Iwfreq()
+            iwfreq._setFrequency(freq[x:x+4])
+            fq = iwfreq.getFrequency()
+            if fq is not None:
+                self.frequencies.append(fq)
+            i -= 1
+            if i <= 0:
+                break
+        
+class Iwscan(object):
+    """class to handle AP scanning"""
+    
+    def __init__(self, ifname):
+        self.ifname = ifname
+        self.range = Iwrange(ifname)
+        self.errorflag = 0
+        self.error = ""
+        self.stream = None
+        self.aplist = None
+                
+    def scan(self, fullscan=True):
+        """Completes a scan for available access points,
+           and returns them in Iwscanresult format
+           
+           fullscan: If False, data is read from a cache of the last scan
+                     If True, a scan is conducted, and then the data is read
+        """
+        # By default everything is fine, do not wait
+        result = 1
+        if fullscan:
+            self.setScan()
+            if self.errorflag > EPERM:
+                raise RuntimeError, 'setScan failure ' + str(self.errorflag) + " " + str(self.error)
+                return None
+            elif self.errorflag < EPERM:
+                # Permission was NOT denied, therefore we must WAIT to get results
+                result = 250
+        
+        while (result > 0):
+            sleep(result/1000)
+            result = self.getScan()
+        
+        if result < 0 or self.errorflag != 0:
+            raise RuntimeError, 'getScan failure ' + str(self.errorflag) + " " + str(self.error)
+        
+        return self.aplist
+        
+        
+    def setScan(self):
+        """Triggers the scan, if we have permission
+        """
+        iwstruct = Iwstruct()
+        s = iwstruct.pack('Pii', 0, 0, 0)
+        i, result = iwstruct.iw_get_ext(self.ifname, 
+                                        SIOCSIWSCAN,s)
+        if i > 0:
+            self.errorflag = i
+            self.error = result
+        return result
+        
+    def getScan(self):
+        """Retreives results, stored from the most recent scan
+           Returns 0 if successful, a delay if the data isn't ready yet
+           or -1 if something really nasty happened
+        """
+        iwstruct = Iwstruct()
+        i = E2BIG
+        bufflen = IW_SCAN_MAX_DATA
+        
+        # Keep resizing the buffer until it's large enough to hold the scan
+        while (i == E2BIG):
+            buff, s = iwstruct.pack_wrq(bufflen)
+            i, result = iwstruct.iw_get_ext(self.ifname, 
+                                            SIOCGIWSCAN,
+                                            data=s)
+            if i == E2BIG:
+                pbuff, newlen = iwstruct.unpack('Pi', s)
+                if bufflen < newlen:
+                    bufflen = newlen
+                else:
+                    bufflen = bufflen * 2
+        
+        if i == EAGAIN:
+            return 100
+        if i > 0:
+            self.errorflag = i
+            self.error = result
+            return -1
+        
+        pbuff, reslen = iwstruct.unpack('Pi', s)
+        if reslen > 0:
+            # Initialize the stream, and turn it into an enumerator
+            self.aplist = self._parse(buff.tostring())
+            return 0
+        
+    def _parse(self, data):
+        """Parse the event stream, and return a list of Iwscanresult objects
+        """
+        iwstruct = Iwstruct()
+        scanresult = None
+        aplist = []
+
+        # Run through the stream, until broken
+        while 1:
+            # If we're the stream doesn't have enough space left for a header, break
+            if len(data) < IW_EV_LCP_LEN:
+                break;
+        
+            # Unpack the header
+            length, cmd = iwstruct.unpack('HH', data[:4])
+            # If the header says the following data is shorter than the header, then break
+            if length < IW_EV_LCP_LEN:
+                break;
+
+            # Put the events into their respective result data
+            if cmd == SIOCGIWAP:
+                if scanresult is not None:
+                    aplist.append(scanresult)
+                scanresult = Iwscanresult(data[IW_EV_LCP_LEN:length], self.range)
+            elif scanresult is None:
+                raise RuntimeError, 'Attempting to add an event without AP data'
+            else:
+                scanresult.addEvent(cmd, data[IW_EV_LCP_LEN:length])
+            
+            # We're finished with the preveious event
+            data = data[length:]
+        
+        # Don't forgset the final result
+        if scanresult.bssid != "00:00:00:00:00:00":
+            aplist.append(scanresult)
+        else:
+            raise RuntimeError, 'Attempting to add an AP without a bssid'
+        return aplist
+
+class Iwscanresult(object):
+    """An object to contain all the events associated with a single scanned AP
+    """
+    
+    def __init__(self, data, range):
+        """Initialize the scan result with the access point data"""
+        self.iwstruct = Iwstruct()
+        self.range = range
+        self.bssid = "%02X:%02X:%02X:%02X:%02X:%02X" % struct_unpack('BBBBBB', data[2:8])
+        self.essid = None
+        self.mode = None
+        self.rate = []
+        self.quality = Iwquality() 
+        self.frequency = None
+        self.encode = None
+        self.custom = []
+        self.protocol = None
+
+    def addEvent(self, cmd, data):
+        """Attempts to add the data from an event to a scanresult
+           Only certain data is accept, in which case the result is True
+           If the event data is invalid, None is returned
+           If the data is valid but unused, False is returned
+        """
+        if cmd <= SIOCIWLAST:
+            if cmd < SIOCIWFIRST:
+                return None
+        elif cmd >= IWEVFIRST:
+            if cmd > IWEVLAST:
+                return None
+        else:
+            return None
+            
+        if cmd == SIOCGIWESSID:
+            self.essid = data[4:]
+        elif cmd == SIOCGIWMODE:
+            self.mode = modes[self.iwstruct.unpack('i', data[:4])[0]]
+        elif cmd == SIOCGIWRATE:
+            # TODO, deal with multiple rates, or at least the highest rate
+            freqsize = struct_calcsize("ihbb")
+            while len(data) >= freqsize:
+                iwfreq = Iwfreq(data)
+                self.rate.append(iwfreq.getBitrate())
+                data = data[freqsize:]
+        elif cmd == IWEVQUAL:
+            self.quality.parse(data)
+        elif cmd == SIOCGIWFREQ:
+            self.frequency = Iwfreq(data)
+        elif cmd == SIOCGIWENCODE:
+            self.encode = data
+        elif cmd == IWEVCUSTOM:
+            self.custom.append(data[1:])
+        elif cmd == SIOCGIWNAME:
+            self.protocol = data[:len(data)-2]
+        else:
+            #print "Cmd:", cmd
+            return False
+        return True
\ No newline at end of file
diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py b/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py
new file mode 100755 (executable)
index 0000000..b7a64b9
--- /dev/null
@@ -0,0 +1,285 @@
+from enigma import eTimer
+from Screens.Screen import Screen
+from Components.ActionMap import ActionMap, NumberActionMap
+from Components.Pixmap import Pixmap,MultiPixmap
+from Components.Label import Label
+from Components.Sources.StaticText import StaticText
+from Components.MenuList import MenuList
+from Components.config import config, getConfigListEntry, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, ConfigSelection, ConfigPassword
+from Components.ConfigList import ConfigListScreen
+from Components.Network import Network, iNetwork
+from Components.Console import Console
+from Plugins.Plugin import PluginDescriptor
+from os import system, path as os_path, listdir
+from Wlan import Wlan, WlanList, wpaSupplicant
+from Wlan import Status, iStatus
+
+plugin_path = "/usr/lib/enigma2/python/Plugins/SystemPlugins/WirelessLan"
+
+list = []
+list.append("WEP")
+list.append("WPA")
+list.append("WPA2")
+list.append("WPA/WPA2")
+
+weplist = []
+weplist.append("ASCII")
+weplist.append("HEX")
+
+config.plugins.wlan = ConfigSubsection()
+config.plugins.wlan.essid = NoSave(ConfigText(default = "home", fixed_size = False))
+config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = "home", fixed_size = False))
+
+config.plugins.wlan.encryption = ConfigSubsection()
+config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = False))
+config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = "WPA/WPA2" ))
+config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
+config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewlan", fixed_size = False))
+
+
+class WlanStatus(Screen):
+       skin = """
+       <screen position="center,center" size="560,400" title="Wireless Network State" >
+               <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
+               <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+
+               <widget source="LabelBSSID" render="Label" position="10,60" size="250,25" valign="left" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+               <widget source="LabelESSID" render="Label" position="10,100" size="250,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+               <widget source="LabelQuality" render="Label" position="10,140" size="250,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+               <widget source="LabelSignal" render="Label" position="10,180" size="250,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+               <widget source="LabelBitrate" render="Label" position="10,220" size="250,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+               <widget source="LabelEnc" render="Label" position="10,260" size="250,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+               
+               <widget source="BSSID" render="Label" position="320,60" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+               <widget source="ESSID" render="Label" position="320,100" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+               <widget source="quality" render="Label" position="320,140" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+               <widget source="signal" render="Label" position="320,180" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+               <widget source="bitrate" render="Label" position="320,220" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+               <widget source="enc" render="Label" position="320,260" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+
+               <ePixmap pixmap="skin_default/div-h.png" position="0,350" zPosition="1" size="560,2" />         
+               <widget source="IFtext" render="Label" position="10,355" size="120,21" zPosition="10" font="Regular;20" halign="left" backgroundColor="#25062748" transparent="1" />
+               <widget source="IF" render="Label" position="120,355" size="400,21" zPosition="10" font="Regular;20" halign="left" backgroundColor="#25062748" transparent="1" />
+               <widget source="Statustext" render="Label" position="10,375" size="115,21" zPosition="10" font="Regular;20" halign="left" backgroundColor="#25062748" transparent="1"/>
+               <widget name="statuspic" pixmaps="skin_default/buttons/button_green.png,skin_default/buttons/button_green_off.png" position="130,380" zPosition="10" size="15,16" transparent="1" alphatest="on"/>
+       </screen>
+       """
+       
+       def __init__(self, session, iface):
+               Screen.__init__(self, session)
+               self.session = session
+               self.iface = iface
+               self.skin = WlanStatus.skin
+                                   
+               self["LabelBSSID"] = StaticText(_('Accesspoint:'))
+               self["LabelESSID"] = StaticText(_('SSID:'))
+               self["LabelQuality"] = StaticText(_('Link Quality:'))
+               self["LabelSignal"] = StaticText(_('Signal Strength:'))
+               self["LabelBitrate"] = StaticText(_('Bitrate:'))
+               self["LabelEnc"] = StaticText(_('Encryption:'))
+                       
+               self["BSSID"] = StaticText()
+               self["ESSID"] = StaticText()
+               self["quality"] = StaticText()
+               self["signal"] = StaticText()
+               self["bitrate"] = StaticText()
+               self["enc"] = StaticText()
+
+               self["IFtext"] = StaticText()
+               self["IF"] = StaticText()
+               self["Statustext"] = StaticText()
+               self["statuspic"] = MultiPixmap()
+               self["statuspic"].hide()
+               self["key_red"] = StaticText(_("Close"))
+
+               self.resetList()
+               self.updateStatusbar()
+               
+               self["actions"] = NumberActionMap(["WizardActions", "InputActions", "EPGSelectActions", "ShortcutActions"],
+               {
+                       "ok": self.exit,
+                       "back": self.exit,
+                       "red": self.exit,
+               }, -1)
+               self.timer = eTimer()
+               self.timer.timeout.get().append(self.resetList) 
+               self.onShown.append(lambda: self.timer.start(5000))
+               self.onLayoutFinish.append(self.layoutFinished)
+               self.onClose.append(self.cleanup)
+
+       def cleanup(self):
+               iStatus.stopWlanConsole()
+               
+       def layoutFinished(self):
+               self.setTitle(_("Wireless Network State"))
+               
+       def resetList(self):
+               print "self.iface im resetlist",self.iface
+               iStatus.getDataForInterface(self.iface,self.getInfoCB)
+               
+       def getInfoCB(self,data,status):
+               if data is not None:
+                       if data is True:
+                               if status is not None:
+                                       self["BSSID"].setText(status[self.iface]["acesspoint"])
+                                       self["ESSID"].setText(status[self.iface]["essid"])
+                                       self["quality"].setText(status[self.iface]["quality"]+"%")
+                                       self["signal"].setText(status[self.iface]["signal"])
+                                       self["bitrate"].setText(status[self.iface]["bitrate"])
+                                       self["enc"].setText(status[self.iface]["encryption"])
+                                       self.updateStatusLink(status)
+
+       def exit(self):
+               self.timer.stop()
+               self.close()    
+
+       def updateStatusbar(self):
+               print "self.iface im updateStatusbar",self.iface
+               self["BSSID"].setText(_("Please wait..."))
+               self["ESSID"].setText(_("Please wait..."))
+               self["quality"].setText(_("Please wait..."))
+               self["signal"].setText(_("Please wait..."))
+               self["bitrate"].setText(_("Please wait..."))
+               self["enc"].setText(_("Please wait..."))
+               self["IFtext"].setText(_("Network:"))
+               self["IF"].setText(iNetwork.getFriendlyAdapterName(self.iface))
+               self["Statustext"].setText(_("Link:"))
+
+       def updateStatusLink(self,status):
+               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["statuspic"].setPixmapNum(1)
+                       else:
+                               self["statuspic"].setPixmapNum(0)
+                       self["statuspic"].show()                
+
+class WlanScan(Screen):
+       skin = """
+       <screen position="center,center" size="560,400" title="Choose a Wireless Network" >
+               <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
+               <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
+               <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
+               <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+               <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+               <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
+               <widget name="list" position="5,50" size="550,280" scrollbarMode="showOnDemand" />
+               <ePixmap pixmap="skin_default/div-h.png" position="0,340" zPosition="1" size="560,2" />         
+               <widget source="info" render="Label" position="0,350" size="560,50" font="Regular;24" halign="center" valign="center" backgroundColor="#25062748" transparent="1" />
+       </screen>
+       """
+
+       def __init__(self, session, iface):
+               Screen.__init__(self, session)
+               self.session = session
+               self.iface = iface
+               self.skin = WlanScan.skin
+               self.skin_path = plugin_path
+               self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up")
+               
+               self["info"] = StaticText()
+               
+               self.list = []  
+               self["list"] = WlanList(self.session, self.iface)
+               
+               self.setInfo()
+
+               self["key_red"] = StaticText(_("Close"))
+               self["key_green"] = StaticText(_("Connect"))
+               self["key_yellow"] = StaticText(_("Refresh"))
+                       
+               self["actions"] = NumberActionMap(["WizardActions", "InputActions", "EPGSelectActions"],
+               {
+                       "ok": self.select,
+                       "back": self.cancel,
+               }, -1)
+               
+               self["shortcuts"] = ActionMap(["ShortcutActions"],
+               {
+                       "red": self.cancel,
+                       "green": self.select,
+                       "yellow": self.rescan,
+               })
+               self.onLayoutFinish.append(self.layoutFinished)
+               
+       def layoutFinished(self):
+               self.setTitle(_("Choose a wireless network"))
+       
+       def select(self):
+               cur = self["list"].getCurrent()
+               #print "CURRENT",cur
+               if cur is not None:
+                       if cur[1] is not None:
+                               essid = cur[0]
+                               if essid == '':
+                                       essid = cur[1]
+                               encrypted = cur[2]
+                               self.close(essid,self["list"].getList())
+                       else:
+                               self.close(None,None)
+               else:
+                       self.close(None,None)
+       
+       def WlanSetupClosed(self, *ret):
+               if ret[0] == 2:
+                       self.close(None)
+       
+       def rescan(self):
+               self["list"].reload()
+               self.setInfo()
+       
+       def cancel(self):
+               if self.oldInterfaceState is False:
+                       iNetwork.deactivateInterface(self.iface,self.deactivateInterfaceCB)
+               else:
+                       self.close(None)
+
+       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(None)
+
+       def setInfo(self):
+               length = self["list"].getLength()
+               
+               if length == 0:
+                       self["info"].setText(_("No wireless networks found! Please refresh."))
+               elif length == 1:
+                       self["info"].setText(_("1 wireless network found!"))
+               else:
+                       self["info"].setText(str(length)+_(" wireless networks found!"))        
+
+
+def WlanStatusScreenMain(session, iface):
+       session.open(WlanStatus, iface)
+
+
+def callFunction(iface):
+       
+       w = Wlan(iface)
+       i = w.getWirelessInterfaces()
+       if i:
+               if iface in i:
+                       return WlanStatusScreenMain
+       
+       return None
+
+
+def configStrings(iface):
+       driver = iNetwork.detectWlanModule()
+       print "Found WLAN-Driver:",driver
+       if driver  in ('ralink', 'zydas'):
+               return "        pre-up /usr/sbin/wpa_supplicant -i"+iface+" -c/etc/wpa_supplicant.conf -B -D"+driver+"\n        post-down wpa_cli terminate"
+       else:
+               if config.plugins.wlan.essid.value == "hidden...":
+                       return '        pre-up iwconfig '+iface+' essid "'+config.plugins.wlan.hiddenessid.value+'"\n   pre-up /usr/sbin/wpa_supplicant -i'+iface+' -c/etc/wpa_supplicant.conf -B -dd -D'+driver+'\n    post-down wpa_cli terminate'
+               else:
+                       return '        pre-up iwconfig '+iface+' essid "'+config.plugins.wlan.essid.value+'"\n pre-up /usr/sbin/wpa_supplicant -i'+iface+' -c/etc/wpa_supplicant.conf -B -dd -D'+driver+'\n    post-down wpa_cli terminate'
+
+def Plugins(**kwargs):
+       return PluginDescriptor(name=_("Wireless LAN"), description=_("Connect to a Wireless Network"), where = PluginDescriptor.WHERE_NETWORKSETUP, fnc={"ifaceSupported": callFunction, "configStrings": configStrings, "WlanPluginEntry": lambda x: "Wireless Network Configuartion..."})
+       
\ No newline at end of file
index 48bb28e..c1c6f94 100644 (file)
@@ -101,8 +101,8 @@ for where in targetlist:
        importlist.append(where[0])
 
 file.write("""from Screens.Screen import Screen
-from Plugins.Plugin import PluginDescriptor, %s
-""" % ', '.join(importlist))
+from Plugins.Plugin import PluginDescriptor
+""")
 
 mainlist = []
 for count in range(len(targetlist)):
index d65eace..59cc21d 100644 (file)
@@ -16,7 +16,7 @@ from Screens.InfoBarGenerics import InfoBarShowHide, \
        InfoBarSubserviceSelection, InfoBarShowMovies, InfoBarTimeshift,  \
        InfoBarServiceNotifications, InfoBarPVRState, InfoBarCueSheetSupport, InfoBarSimpleEventView, \
        InfoBarSummarySupport, InfoBarMoviePlayerSummarySupport, InfoBarTimeshiftState, InfoBarTeletextPlugin, InfoBarExtensions, \
-       InfoBarSubtitleSupport, InfoBarPiP, InfoBarPlugins, InfoBarSleepTimer, InfoBarServiceErrorPopupSupport, InfoBarJobman
+       InfoBarSubtitleSupport, InfoBarPiP, InfoBarPlugins, InfoBarServiceErrorPopupSupport, InfoBarJobman
 
 profile("LOAD:InitBar_Components")
 from Components.ActionMap import HelpableActionMap
@@ -32,7 +32,7 @@ class InfoBar(InfoBarBase, InfoBarShowHide,
        HelpableScreen, InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish,
        InfoBarSubserviceSelection, InfoBarTimeshift, InfoBarSeek,
        InfoBarSummarySupport, InfoBarTimeshiftState, InfoBarTeletextPlugin, InfoBarExtensions,
-       InfoBarPiP, InfoBarPlugins, InfoBarSubtitleSupport, InfoBarSleepTimer, InfoBarServiceErrorPopupSupport, InfoBarJobman,
+       InfoBarPiP, InfoBarPlugins, InfoBarSubtitleSupport, InfoBarServiceErrorPopupSupport, InfoBarJobman,
        Screen):
        
        ALLOW_SUSPEND = True
@@ -56,7 +56,7 @@ class InfoBar(InfoBarBase, InfoBarShowHide,
                                InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish, InfoBarSubserviceSelection, \
                                InfoBarTimeshift, InfoBarSeek, InfoBarSummarySupport, InfoBarTimeshiftState, \
                                InfoBarTeletextPlugin, InfoBarExtensions, InfoBarPiP, InfoBarSubtitleSupport, InfoBarJobman, \
-                               InfoBarSleepTimer, InfoBarPlugins, InfoBarServiceErrorPopupSupport:
+                               InfoBarPlugins, InfoBarServiceErrorPopupSupport:
                        x.__init__(self)
 
                self.helpList.append((self["actions"], "InfobarActions", [("showMovies", _("view recordings..."))]))
index 5336f9a..39a8b59 100644 (file)
@@ -24,7 +24,6 @@ from Screens.TimerSelection import TimerSelection
 from Screens.PictureInPicture import PictureInPicture
 from Screens.SubtitleDisplay import SubtitleDisplay
 from Screens.RdsDisplay import RdsInfoDisplay, RassInteractive
-from Screens.SleepTimerEdit import SleepTimerEdit
 from Screens.TimeDateInput import TimeDateInput
 from ServiceReference import ServiceReference
 
@@ -1350,17 +1349,6 @@ class InfoBarJobman:
                job_manager.in_background = in_background
 
 # depends on InfoBarExtensions
-class InfoBarSleepTimer:
-       def __init__(self):
-               self.addExtension((self.getSleepTimerName, self.showSleepTimerSetup, lambda: True), "1")
-
-       def getSleepTimerName(self):
-               return _("Sleep Timer")
-
-       def showSleepTimerSetup(self):
-               self.session.open(SleepTimerEdit)
-
-# depends on InfoBarExtensions
 class InfoBarPiP:
        def __init__(self):
                try:
index d0af8f7..bea0872 100644 (file)
@@ -295,9 +295,11 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
 
                self.list = []
                ConfigListScreen.__init__(self, self.list)
-               self.createSetup()
-
-               self["introduction"] = Label(_("Press OK to start the scan"))
+               if not self.scan_nims.value == "":
+                       self.createSetup()
+                       self["introduction"] = Label(_("Press OK to start the scan"))
+               else:
+                       self["introduction"] = Label(_("Nothing to scan!\nPlease setup your tuner settings before you start a service scan."))
 
        def runAsync(self, finished_cb):
                self.finished_cb = finished_cb
@@ -709,6 +711,8 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
                tlist.append(buildTerTransponder(*args, **kwargs))
 
        def keyGo(self):
+               if self.scan_nims.value == "":
+                       return
                tlist = []
                flags = None
                startScan = True
index 7f87ffa..34d0936 100644 (file)
@@ -34,6 +34,7 @@ eServiceFactoryMP3::eServiceFactoryMP3()
                extensions.push_back("vob");
                extensions.push_back("wav");
                extensions.push_back("wave");
+               extensions.push_back("m4v");
                extensions.push_back("mkv");
                extensions.push_back("avi");
                extensions.push_back("divx");
@@ -42,7 +43,6 @@ eServiceFactoryMP3::eServiceFactoryMP3()
                extensions.push_back("mp4");
                extensions.push_back("mov");
                extensions.push_back("m4a");
-               extensions.push_back("m2ts");
                sc->addServiceFactory(eServiceFactoryMP3::id, this, extensions);
        }
 
@@ -236,7 +236,7 @@ eServiceMP3::eServiceMP3(eServiceReference ref)
                sourceinfo.containertype = ctAVI;
                sourceinfo.is_video = TRUE;
        }
-       else if ( strcasecmp(ext, ".mp4") == 0 || strcasecmp(ext, ".mov") == 0)
+       else if ( strcasecmp(ext, ".mp4") == 0 || strcasecmp(ext, ".mov") == 0 || strcasecmp(ext, ".m4v") == 0)
        {
                sourceinfo.containertype = ctMP4;
                sourceinfo.is_video = TRUE;
index a37289a..4f26387 100644 (file)
@@ -27,7 +27,17 @@ entries: .svn/entries
 
 version.h: entries
        > version.h
-       if [ -d .svn ]; then echo "#define ENIGMA2_CHECKOUT_TAG \"D`svn info | grep 'Last Changed Date:' | sed -e 's/[^:]*: \(....\)-\(..\)-\(..\) \(..\):\(..\):\(..\).*+.*$$/\1.\2.\3.\4.\5.\6/'`\"" >> version.h; fi
+       @if [ -d .svn ]; then \
+               echo "#define ENIGMA2_LAST_CHANGE_DATE \"`LANG="en" svn info | grep 'Last Changed Date:' | cut -d' ' -f4`\"" >> version.h; \
+       elif [ -d ../.git ]; then \
+               if [ -f ../.git/last_commit_info ]; then \
+                       echo "#define ENIGMA2_LAST_CHANGE_DATE \"`cat ../.git/last_commit_info | grep 'Date:' | cut -d' ' -f4`\"" >> version.h; \
+                       echo "#define ENIGMA2_BRANCH \"`cat ../.git/branch`\"" >> version.h; \
+               else \
+                       echo "#define ENIGMA2_LAST_CHANGE_DATE \"`LANG="en" git log --max-count=1 --date=short | grep 'Date:' | cut -d' ' -f4`\"" >> version.h; \
+                       echo "#define ENIGMA2_BRANCH \"`LANG="en" git branch | grep '* ' | cut -d' ' -f2`\"" >> version.h; \
+               fi; \
+       fi;
 
 enigma2_LDADD_WHOLE = \
        $(top_builddir)/lib/actions/libenigma_actions.a \
index be9d9a5..3f420b4 100644 (file)
@@ -309,14 +309,21 @@ void quitMainloop(int exitCode)
 
 const char *getEnigmaVersionString()
 {
-       return 
-#ifdef ENIGMA2_CHECKOUT_TAG
-               ENIGMA2_CHECKOUT_TAG
+       std::string date =
+#ifdef ENIGMA2_LAST_CHANGE_DATE
+               ENIGMA2_LAST_CHANGE_DATE;
 #else
-               "HEAD"
+               __DATE__;
 #endif
-                       "-" __DATE__;
+       std::string branch =
+#ifdef ENIGMA2_BRANCH
+               ENIGMA2_BRANCH;
+#else
+               "HEAD";
+#endif
+       return std::string(date + '-' + branch).c_str();
 }
+
 #include <malloc.h>
 
 void dump_malloc_stats(void)
index 46b67b2..2319b7f 100755 (executable)
@@ -32,6 +32,7 @@ enigma2.pot:
        ./xml2po.py     ../lib/python/Plugins/SystemPlugins/Videomode/ >> enigma2.pot
        ./xml2po.py     ../lib/python/Plugins/SystemPlugins/SoftwareManager/ >> enigma2.pot
        ./xml2po.py     ../lib/python/Plugins/SystemPlugins/CleanupWizard/ >> enigma2.pot
+       ./xml2po.py     ../lib/python/Plugins/SystemPlugins/NetworkWizard/ >> enigma2.pot
        cat enigma2_rel25.pot | tail -n +19 >> enigma2.pot
        msguniq --no-location -o enigma2uniq.pot enigma2.pot
        $(RM) enigma2.pot
old mode 100644 (file)
new mode 100755 (executable)
index 133a4ab..077d4bf
--- a/po/ar.po
+++ b/po/ar.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tuxbox-enigma 0.0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-09 13:06+0200\n"
+"POT-Creation-Date: 2009-11-05 18:09+0100\n"
 "PO-Revision-Date: 2006-01-10 01:17+0300\n"
 "Last-Translator: hazem <moustafagamal@hotmail.com>\n"
 "Language-Team: Arabic <moustafagamal@hotmail.com>\n"
@@ -77,6 +77,11 @@ msgstr ""
 
 msgid ""
 "\n"
+"System will restart after the restore!"
+msgstr ""
+
+msgid ""
+"\n"
 "View, install and remove available or installed packages."
 msgstr ""
 
@@ -92,6 +97,9 @@ msgstr ""
 msgid " updates available."
 msgstr ""
 
+msgid " wireless networks found!"
+msgstr ""
+
 msgid "#000000"
 msgstr ""
 
@@ -184,6 +192,9 @@ msgstr ""
 msgid "1"
 msgstr ""
 
+msgid "1 wireless network found!"
+msgstr ""
+
 msgid "1.0"
 msgstr ""
 
@@ -362,6 +373,9 @@ msgstr "عن"
 msgid "About..."
 msgstr "عـن..."
 
+msgid "Accesspoint:"
+msgstr ""
+
 msgid "Action on long powerbutton press"
 msgstr ""
 
@@ -623,6 +637,9 @@ msgstr ""
 msgid "Behavior when a movie reaches the end"
 msgstr ""
 
+msgid "Bitrate:"
+msgstr ""
+
 msgid "Block noise reduction"
 msgstr ""
 
@@ -745,6 +762,9 @@ msgstr ""
 msgid "Choose Tuner"
 msgstr ""
 
+msgid "Choose a wireless network"
+msgstr ""
+
 msgid "Choose backup files"
 msgstr ""
 
@@ -856,6 +876,21 @@ msgstr ""
 msgid "Configuration Mode"
 msgstr "وضع التهيئه"
 
+msgid "Configure interface"
+msgstr ""
+
+msgid "Configure nameservers"
+msgstr ""
+
+msgid "Configure your internal LAN"
+msgstr ""
+
+msgid "Configure your network again"
+msgstr ""
+
+msgid "Configure your wireless LAN again"
+msgstr ""
+
 msgid "Configuring"
 msgstr ""
 
@@ -865,6 +900,9 @@ msgstr ""
 msgid "Connect"
 msgstr ""
 
+msgid "Connect to a Wireless Network"
+msgstr ""
+
 msgid "Connected to"
 msgstr ""
 
@@ -926,6 +964,11 @@ msgstr ""
 
 msgid ""
 "Crashlogs found!\n"
+"Send them to Dream Multimedia ?"
+msgstr ""
+
+msgid ""
+"Crashlogs found!\n"
 "Send them to Dream Multimedia?"
 msgstr ""
 
@@ -1083,6 +1126,9 @@ msgstr "وضعيـه الدايزك"
 msgid "DiSEqC repeats"
 msgstr ""
 
+msgid "DiSEqC-Tester settings"
+msgstr ""
+
 msgid "Dialing:"
 msgstr ""
 
@@ -1096,6 +1142,9 @@ msgstr ""
 msgid "Directory %s nonexistent."
 msgstr ""
 
+msgid "Directory browser"
+msgstr ""
+
 msgid "Disable"
 msgstr "إبطال"
 
@@ -1359,6 +1408,10 @@ msgstr ""
 msgid "Enabled"
 msgstr ""
 
+#, python-format
+msgid "Encrypted: %s"
+msgstr ""
+
 msgid "Encryption"
 msgstr ""
 
@@ -1371,6 +1424,9 @@ msgstr ""
 msgid "Encryption Type"
 msgstr ""
 
+msgid "Encryption:"
+msgstr ""
+
 msgid "End time"
 msgstr ""
 
@@ -1398,12 +1454,6 @@ msgid ""
 "© 2006 - Stephan Reichholf"
 msgstr ""
 
-#. #-#-#-#-#  enigma2.pot (PACKAGE VERSION)  #-#-#-#-#
-#.   TRANSLATORS: Note that "Enter" in the two strings below should *not*
-#.       be interpreted as "Give speed as input". The intended meaning is
-#.       instead "Initial speed when starting winding", i.e. the speed at
-#.       which "winding mode" is entered when first pressing "rewind" or
-#.       "fast forward". 
 msgid "Enter Fast Forward at speed"
 msgstr ""
 
@@ -1461,6 +1511,9 @@ msgstr ""
 msgid "Exit editor"
 msgstr ""
 
+msgid "Exit network wizard"
+msgstr ""
+
 msgid "Exit the cleanup wizard"
 msgstr ""
 
@@ -1648,6 +1701,9 @@ msgstr ""
 msgid "Hidden network SSID"
 msgstr ""
 
+msgid "Hidden networkname"
+msgstr ""
+
 msgid "Hierarchy Information"
 msgstr ""
 
@@ -1801,6 +1857,10 @@ msgstr ""
 msgid "Integrated Wireless"
 msgstr ""
 
+#, python-format
+msgid "Interface: %s"
+msgstr ""
+
 msgid "Intermediate"
 msgstr ""
 
@@ -1906,6 +1966,9 @@ msgstr ""
 msgid "Limits on"
 msgstr ""
 
+msgid "Link Quality:"
+msgstr ""
+
 msgid "Link:"
 msgstr ""
 
@@ -1981,6 +2044,10 @@ msgstr ""
 msgid "Margin before record (minutes)"
 msgstr ""
 
+#, python-format
+msgid "Max. Bitrate: %s"
+msgstr ""
+
 msgid "Media player"
 msgstr ""
 
@@ -2108,6 +2175,9 @@ msgstr ""
 msgid "Network Setup"
 msgstr "ضبط الشبـكة"
 
+msgid "Network Wizard"
+msgstr ""
+
 msgid "Network scan"
 msgstr ""
 
@@ -2150,6 +2220,9 @@ msgstr ""
 msgid "No 50 Hz, sorry. :("
 msgstr ""
 
+msgid "No Connection"
+msgstr ""
+
 msgid "No HDD found or HDD not initialized!"
 msgstr ""
 "لا يوجد قرص صلب\n"
@@ -2181,6 +2254,9 @@ msgstr ""
 msgid "No free tuner!"
 msgstr ""
 
+msgid "No networks found"
+msgstr ""
+
 msgid ""
 "No packages were upgraded yet. So you can check your network and try again."
 msgstr ""
@@ -2220,6 +2296,9 @@ msgid ""
 "When you say 'No' here the setup protection stay disabled!"
 msgstr ""
 
+msgid "No wireless networks found! Please refresh."
+msgstr ""
+
 msgid ""
 "No working local network adapter found.\n"
 "Please verify that you have attached a network cable and your network is "
@@ -2439,6 +2518,18 @@ msgid "Please choose the default services lists you want to install."
 msgstr ""
 
 msgid ""
+"Please configure or verify your Nameservers by filling out the required "
+"values.\n"
+"When you are ready press OK to continue."
+msgstr ""
+
+msgid ""
+"Please configure your internet connection by filling out the required "
+"values.\n"
+"When you are ready press OK to continue."
+msgstr ""
+
+msgid ""
 "Please disconnect all USB devices from your Dreambox and (re-)attach the "
 "target USB stick (minimum size is 64 MB) now!"
 msgstr ""
@@ -2520,6 +2611,19 @@ msgstr ""
 msgid "Please select the movie path..."
 msgstr ""
 
+msgid ""
+"Please select the network interface that you want to use for your internet "
+"connection.\n"
+"\n"
+"Please press OK to continue."
+msgstr ""
+
+msgid ""
+"Please select the wireless network that you want to connect to.\n"
+"\n"
+"Please press OK to continue."
+msgstr ""
+
 msgid "Please set up tuner B"
 msgstr "من فضلك أضبط التيونر ب"
 
@@ -2555,6 +2659,12 @@ msgstr ""
 msgid "Please wait while we configure your network..."
 msgstr ""
 
+msgid "Please wait while we prepare your network interfaces..."
+msgstr ""
+
+msgid "Please wait while we test your network..."
+msgstr ""
+
 msgid "Please wait while your network is restarting..."
 msgstr ""
 
@@ -2776,6 +2886,9 @@ msgstr ""
 msgid "Reenter new pin"
 msgstr ""
 
+msgid "Refresh"
+msgstr ""
+
 msgid "Refresh Rate"
 msgstr ""
 
@@ -2824,9 +2937,6 @@ msgstr ""
 msgid "Removed successfully."
 msgstr ""
 
-msgid "Removeing"
-msgstr ""
-
 msgid "Removing"
 msgstr ""
 
@@ -2954,6 +3064,9 @@ msgstr ""
 msgid "SNR:"
 msgstr ""
 
+msgid "SSID:"
+msgstr ""
+
 msgid "Sat"
 msgstr ""
 
@@ -3127,6 +3240,9 @@ msgstr ""
 msgid "Select image"
 msgstr ""
 
+msgid "Select interface"
+msgstr ""
+
 msgid "Select package"
 msgstr ""
 
@@ -3151,6 +3267,9 @@ msgstr ""
 msgid "Select video mode"
 msgstr ""
 
+msgid "Select wireless network"
+msgstr ""
+
 msgid "Selected source image"
 msgstr ""
 
@@ -3274,6 +3393,12 @@ msgstr ""
 msgid "Shutdown Dreambox after"
 msgstr ""
 
+msgid "Signal Strength:"
+msgstr ""
+
+msgid "Signal: "
+msgstr ""
+
 msgid "Similar"
 msgstr ""
 
@@ -3545,6 +3670,11 @@ msgid "Test-Messagebox?"
 msgstr ""
 
 msgid ""
+"Thank you for using the wizard.\n"
+"Please press OK to continue."
+msgstr ""
+
+msgid ""
 "Thank you for using the wizard. Your box is now ready to use.\n"
 "Please press OK to start using your Dreambox."
 msgstr ""
@@ -3634,6 +3764,11 @@ msgstr ""
 
 msgid ""
 "The wireless LAN plugin is not installed!\n"
+"Please install it and choose what you want to do next."
+msgstr ""
+
+msgid ""
+"The wireless LAN plugin is not installed!\n"
 "Please install it."
 msgstr ""
 
@@ -3956,9 +4091,6 @@ msgid ""
 "Remove"
 msgstr ""
 
-msgid "Unicable"
-msgstr ""
-
 msgid "Unicable LNB"
 msgstr ""
 
@@ -3971,6 +4103,9 @@ msgstr ""
 msgid "Unmount failed"
 msgstr ""
 
+msgid "Unsupported"
+msgstr ""
+
 msgid "Update"
 msgstr ""
 
@@ -3989,9 +4124,6 @@ msgstr ""
 msgid "Upgrade finished. Do you want to reboot your Dreambox?"
 msgstr ""
 
-msgid "Upgradeing"
-msgstr ""
-
 msgid "Upgrading"
 msgstr ""
 
@@ -4013,19 +4145,6 @@ msgstr ""
 msgid "Use a gateway"
 msgstr ""
 
-#. #-#-#-#-#  enigma2.pot (PACKAGE VERSION)  #-#-#-#-#
-#.   TRANSLATORS: The effect of "Non-smooth winding" is that rather
-#.       than using ordinary "continuous" or "smooth" winding, a fast
-#.       sequence of stills is shown when winding at high speeds. This
-#.       makes it much easier too follow when almost each frame comes from
-#.       a new scene. The effect is achieved by repeating each shown frame
-#.       a couple of times. The settings control both at which speed this
-#.       winding mode sets in, and how many times each frame should be
-#.       repeated. This was previously called "Discontinuous playback"
-#.       which was incomprehensible. "Non-smooth winding" may be a better
-#.       term, but note that there is nothing irregular about it. Synonyms
-#.       better suited for translation to other languages may be "stepwise
-#.       winding/playback", or "winding/playback using stills". 
 msgid "Use non-smooth winding at speeds above"
 msgstr ""
 
@@ -4052,6 +4171,9 @@ msgstr "اضغط المفتاح العلوى أو السفلى من الريمو
 msgid "Use this video enhancement settings?"
 msgstr ""
 
+msgid "Use time of currently running service"
+msgstr ""
+
 msgid "Use usals for this sat"
 msgstr "USALS für diesen Sat benutzen"
 
@@ -4112,9 +4234,6 @@ msgstr ""
 msgid "Video mode selection."
 msgstr ""
 
-msgid "VideoSetup"
-msgstr ""
-
 msgid "Videoenhancement Setup"
 msgstr ""
 
@@ -4256,6 +4375,15 @@ msgstr ""
 msgid ""
 "Welcome.\n"
 "\n"
+"If you want to connect your Dreambox to the Internet, this wizard will guide "
+"you through the basic network setup of your Dreambox.\n"
+"\n"
+"Press OK to start configuring your network"
+msgstr ""
+
+msgid ""
+"Welcome.\n"
+"\n"
 "This start wizard will guide you through the basic setup of your Dreambox.\n"
 "Press the OK button on your remote control to move to the next step."
 msgstr ""
@@ -4294,9 +4422,15 @@ msgstr ""
 msgid "Wireless"
 msgstr ""
 
+msgid "Wireless LAN"
+msgstr ""
+
 msgid "Wireless Network"
 msgstr ""
 
+msgid "Wireless Network State"
+msgstr ""
+
 msgid "Write error while recording. Disk full?\n"
 msgstr ""
 
@@ -4435,6 +4569,14 @@ msgid ""
 "Do you want to set the pin now?"
 msgstr ""
 
+msgid ""
+"Your Dreambox is now ready to use.\n"
+"\n"
+"Your internet connection is working now.\n"
+"\n"
+"Please press OK to continue."
+msgstr ""
+
 msgid "Your Dreambox will restart after pressing OK on your remote control."
 msgstr ""
 
@@ -4467,6 +4609,11 @@ msgid ""
 "Press OK to start upgrade."
 msgstr ""
 
+msgid ""
+"Your internet connection is not working!\n"
+"Please choose what you want to do next."
+msgstr ""
+
 msgid "Your name (optional):"
 msgstr ""
 
@@ -4480,6 +4627,13 @@ msgid ""
 "Do you want to disable the second network interface?"
 msgstr ""
 
+msgid ""
+"Your wireless LAN internet connection could not be started!\n"
+"Have you attached your USB WLAN Stick?\n"
+"\n"
+"Please choose what you want to do next."
+msgstr ""
+
 msgid "Zap back to service before positioner setup?"
 msgstr ""
 
@@ -4764,6 +4918,9 @@ msgstr "إنتهاء تحرير المفضله"
 msgid "enigma2 and network"
 msgstr ""
 
+msgid "enter hidden network SSID"
+msgstr ""
+
 msgid "equal to"
 msgstr ""
 
@@ -4836,6 +4993,9 @@ msgstr "مساعده"
 msgid "hidden network"
 msgstr ""
 
+msgid "hidden..."
+msgstr ""
+
 msgid "hide extended description"
 msgstr ""
 
@@ -5317,6 +5477,9 @@ msgstr ""
 msgid "toggle time, chapter, audio, subtitle info"
 msgstr ""
 
+msgid "unavailable"
+msgstr ""
+
 msgid "unconfirmed"
 msgstr ""
 
old mode 100644 (file)
new mode 100755 (executable)
index 5b355a8..13b6031
--- a/po/ca.po
+++ b/po/ca.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ca\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-09 13:06+0200\n"
+"POT-Creation-Date: 2009-11-05 18:09+0100\n"
 "PO-Revision-Date: 2007-08-14 10:23+0200\n"
 "Last-Translator: Oriol Pellicer <oriol@elsud.org>\n"
 "Language-Team: \n"
@@ -79,6 +79,11 @@ msgstr ""
 
 msgid ""
 "\n"
+"System will restart after the restore!"
+msgstr ""
+
+msgid ""
+"\n"
 "View, install and remove available or installed packages."
 msgstr ""
 
@@ -94,6 +99,9 @@ msgstr ""
 msgid " updates available."
 msgstr ""
 
+msgid " wireless networks found!"
+msgstr ""
+
 msgid "#000000"
 msgstr "#000000"
 
@@ -188,6 +196,9 @@ msgstr "0"
 msgid "1"
 msgstr "1"
 
+msgid "1 wireless network found!"
+msgstr ""
+
 msgid "1.0"
 msgstr "1.0"
 
@@ -387,6 +398,9 @@ msgstr "Quant a"
 msgid "About..."
 msgstr "Quant a..."
 
+msgid "Accesspoint:"
+msgstr ""
+
 msgid "Action on long powerbutton press"
 msgstr ""
 
@@ -650,6 +664,9 @@ msgstr ""
 msgid "Behavior when a movie reaches the end"
 msgstr ""
 
+msgid "Bitrate:"
+msgstr ""
+
 msgid "Block noise reduction"
 msgstr ""
 
@@ -773,6 +790,9 @@ msgstr ""
 msgid "Choose Tuner"
 msgstr "Escull sintonitzador"
 
+msgid "Choose a wireless network"
+msgstr ""
+
 msgid "Choose backup files"
 msgstr ""
 
@@ -884,6 +904,21 @@ msgstr ""
 msgid "Configuration Mode"
 msgstr "Mode configuració"
 
+msgid "Configure interface"
+msgstr ""
+
+msgid "Configure nameservers"
+msgstr ""
+
+msgid "Configure your internal LAN"
+msgstr ""
+
+msgid "Configure your network again"
+msgstr ""
+
+msgid "Configure your wireless LAN again"
+msgstr ""
+
 msgid "Configuring"
 msgstr "Configurant"
 
@@ -893,6 +928,9 @@ msgstr "Gravació en conflicte"
 msgid "Connect"
 msgstr ""
 
+msgid "Connect to a Wireless Network"
+msgstr ""
+
 msgid "Connected to"
 msgstr ""
 
@@ -957,6 +995,11 @@ msgstr ""
 
 msgid ""
 "Crashlogs found!\n"
+"Send them to Dream Multimedia ?"
+msgstr ""
+
+msgid ""
+"Crashlogs found!\n"
 "Send them to Dream Multimedia?"
 msgstr ""
 
@@ -1114,6 +1157,9 @@ msgstr "mode DiSEqC"
 msgid "DiSEqC repeats"
 msgstr "Repetir DiSEqC"
 
+msgid "DiSEqC-Tester settings"
+msgstr ""
+
 msgid "Dialing:"
 msgstr ""
 
@@ -1127,6 +1173,9 @@ msgstr ""
 msgid "Directory %s nonexistent."
 msgstr ""
 
+msgid "Directory browser"
+msgstr ""
+
 msgid "Disable"
 msgstr "Deshabilitar"
 
@@ -1397,6 +1446,10 @@ msgstr ""
 msgid "Enabled"
 msgstr "Activat"
 
+#, python-format
+msgid "Encrypted: %s"
+msgstr ""
+
 msgid "Encryption"
 msgstr ""
 
@@ -1409,6 +1462,9 @@ msgstr ""
 msgid "Encryption Type"
 msgstr ""
 
+msgid "Encryption:"
+msgstr ""
+
 msgid "End time"
 msgstr "Hora final"
 
@@ -1442,12 +1498,6 @@ msgstr ""
 "\n"
 "© 2006 - Stephan Reichholf"
 
-#. #-#-#-#-#  enigma2.pot (PACKAGE VERSION)  #-#-#-#-#
-#.   TRANSLATORS: Note that "Enter" in the two strings below should *not*
-#.       be interpreted as "Give speed as input". The intended meaning is
-#.       instead "Initial speed when starting winding", i.e. the speed at
-#.       which "winding mode" is entered when first pressing "rewind" or
-#.       "fast forward". 
 msgid "Enter Fast Forward at speed"
 msgstr ""
 
@@ -1505,6 +1555,9 @@ msgstr ""
 msgid "Exit editor"
 msgstr "Sortir de l'editor"
 
+msgid "Exit network wizard"
+msgstr ""
+
 msgid "Exit the cleanup wizard"
 msgstr ""
 
@@ -1696,6 +1749,9 @@ msgstr "Posar el disc dur en repòs després de"
 msgid "Hidden network SSID"
 msgstr ""
 
+msgid "Hidden networkname"
+msgstr ""
+
 msgid "Hierarchy Information"
 msgstr "Informació jeràrquica"
 
@@ -1852,6 +1908,10 @@ msgstr ""
 msgid "Integrated Wireless"
 msgstr ""
 
+#, python-format
+msgid "Interface: %s"
+msgstr ""
+
 msgid "Intermediate"
 msgstr ""
 
@@ -1957,6 +2017,9 @@ msgstr "Treure límits"
 msgid "Limits on"
 msgstr "Posar límits"
 
+msgid "Link Quality:"
+msgstr ""
+
 msgid "Link:"
 msgstr ""
 
@@ -2033,6 +2096,10 @@ msgstr "Marge després de gravar"
 msgid "Margin before record (minutes)"
 msgstr "Marge abans de gravar (minuts)"
 
+#, python-format
+msgid "Max. Bitrate: %s"
+msgstr ""
+
 msgid "Media player"
 msgstr "Reproductor"
 
@@ -2160,6 +2227,9 @@ msgstr ""
 msgid "Network Setup"
 msgstr "Config xarxa"
 
+msgid "Network Wizard"
+msgstr ""
+
 msgid "Network scan"
 msgstr "Escanejar xarxa"
 
@@ -2202,6 +2272,9 @@ msgstr ""
 msgid "No 50 Hz, sorry. :("
 msgstr ""
 
+msgid "No Connection"
+msgstr ""
+
 msgid "No HDD found or HDD not initialized!"
 msgstr "No hi ha disc dur o no està inicialitzat!"
 
@@ -2234,6 +2307,9 @@ msgstr "No hi ha info del programa, gravant indefinidament."
 msgid "No free tuner!"
 msgstr "No hi ha cap sintonitzador lliure!"
 
+msgid "No networks found"
+msgstr ""
+
 msgid ""
 "No packages were upgraded yet. So you can check your network and try again."
 msgstr "No s'ha actualitzat cap paquet. Comprova la xarxa i torna-ho a provar."
@@ -2282,6 +2358,9 @@ msgstr ""
 "Vols canviar-lo ara?\n"
 "Si contestes 'No' es deshabilitarà la protecció de la configuració!"
 
+msgid "No wireless networks found! Please refresh."
+msgstr ""
+
 msgid ""
 "No working local network adapter found.\n"
 "Please verify that you have attached a network cable and your network is "
@@ -2504,6 +2583,18 @@ msgid "Please choose the default services lists you want to install."
 msgstr ""
 
 msgid ""
+"Please configure or verify your Nameservers by filling out the required "
+"values.\n"
+"When you are ready press OK to continue."
+msgstr ""
+
+msgid ""
+"Please configure your internet connection by filling out the required "
+"values.\n"
+"When you are ready press OK to continue."
+msgstr ""
+
+msgid ""
 "Please disconnect all USB devices from your Dreambox and (re-)attach the "
 "target USB stick (minimum size is 64 MB) now!"
 msgstr ""
@@ -2585,6 +2676,19 @@ msgstr ""
 msgid "Please select the movie path..."
 msgstr ""
 
+msgid ""
+"Please select the network interface that you want to use for your internet "
+"connection.\n"
+"\n"
+"Please press OK to continue."
+msgstr ""
+
+msgid ""
+"Please select the wireless network that you want to connect to.\n"
+"\n"
+"Please press OK to continue."
+msgstr ""
+
 msgid "Please set up tuner B"
 msgstr "Configura el sintonitzador B"
 
@@ -2623,6 +2727,12 @@ msgstr ""
 msgid "Please wait while we configure your network..."
 msgstr ""
 
+msgid "Please wait while we prepare your network interfaces..."
+msgstr ""
+
+msgid "Please wait while we test your network..."
+msgstr ""
+
 msgid "Please wait while your network is restarting..."
 msgstr ""
 
@@ -2844,6 +2954,9 @@ msgstr "Les gravacions tenen prioritat"
 msgid "Reenter new pin"
 msgstr "Torna a entrar el nou pin"
 
+msgid "Refresh"
+msgstr ""
+
 msgid "Refresh Rate"
 msgstr ""
 
@@ -2892,9 +3005,6 @@ msgstr "Esborra títol"
 msgid "Removed successfully."
 msgstr ""
 
-msgid "Removeing"
-msgstr ""
-
 msgid "Removing"
 msgstr ""
 
@@ -3023,6 +3133,9 @@ msgstr ""
 msgid "SNR:"
 msgstr ""
 
+msgid "SSID:"
+msgstr ""
+
 msgid "Sat"
 msgstr "Dis"
 
@@ -3196,6 +3309,9 @@ msgstr ""
 msgid "Select image"
 msgstr ""
 
+msgid "Select interface"
+msgstr ""
+
 msgid "Select package"
 msgstr ""
 
@@ -3220,6 +3336,9 @@ msgstr ""
 msgid "Select video mode"
 msgstr ""
 
+msgid "Select wireless network"
+msgstr ""
+
 msgid "Selected source image"
 msgstr ""
 
@@ -3349,6 +3468,12 @@ msgstr ""
 msgid "Shutdown Dreambox after"
 msgstr "Apagar la Dreambox després de"
 
+msgid "Signal Strength:"
+msgstr ""
+
+msgid "Signal: "
+msgstr ""
+
 msgid "Similar"
 msgstr "Similar"
 
@@ -3624,6 +3749,11 @@ msgid "Test-Messagebox?"
 msgstr ""
 
 msgid ""
+"Thank you for using the wizard.\n"
+"Please press OK to continue."
+msgstr ""
+
+msgid ""
 "Thank you for using the wizard. Your box is now ready to use.\n"
 "Please press OK to start using your Dreambox."
 msgstr ""
@@ -3716,6 +3846,11 @@ msgstr ""
 
 msgid ""
 "The wireless LAN plugin is not installed!\n"
+"Please install it and choose what you want to do next."
+msgstr ""
+
+msgid ""
+"The wireless LAN plugin is not installed!\n"
 "Please install it."
 msgstr ""
 
@@ -4045,9 +4180,6 @@ msgid ""
 "Remove"
 msgstr ""
 
-msgid "Unicable"
-msgstr ""
-
 msgid "Unicable LNB"
 msgstr ""
 
@@ -4060,6 +4192,9 @@ msgstr "LNB universal"
 msgid "Unmount failed"
 msgstr "Ha fallat la comanda unmount"
 
+msgid "Unsupported"
+msgstr ""
+
 msgid "Update"
 msgstr ""
 
@@ -4078,9 +4213,6 @@ msgstr ""
 msgid "Upgrade finished. Do you want to reboot your Dreambox?"
 msgstr "S'ha acabat l'actualització. Vols tornar a arrancar la Dreambox?"
 
-msgid "Upgradeing"
-msgstr ""
-
 msgid "Upgrading"
 msgstr "Actualitzant"
 
@@ -4102,19 +4234,6 @@ msgstr "Utilitzar mesura de corrent"
 msgid "Use a gateway"
 msgstr "Utilitzar una porta d'enllaç"
 
-#. #-#-#-#-#  enigma2.pot (PACKAGE VERSION)  #-#-#-#-#
-#.   TRANSLATORS: The effect of "Non-smooth winding" is that rather
-#.       than using ordinary "continuous" or "smooth" winding, a fast
-#.       sequence of stills is shown when winding at high speeds. This
-#.       makes it much easier too follow when almost each frame comes from
-#.       a new scene. The effect is achieved by repeating each shown frame
-#.       a couple of times. The settings control both at which speed this
-#.       winding mode sets in, and how many times each frame should be
-#.       repeated. This was previously called "Discontinuous playback"
-#.       which was incomprehensible. "Non-smooth winding" may be a better
-#.       term, but note that there is nothing irregular about it. Synonyms
-#.       better suited for translation to other languages may be "stepwise
-#.       winding/playback", or "winding/playback using stills". 
 msgid "Use non-smooth winding at speeds above"
 msgstr ""
 
@@ -4143,6 +4262,9 @@ msgstr ""
 msgid "Use this video enhancement settings?"
 msgstr ""
 
+msgid "Use time of currently running service"
+msgstr ""
+
 msgid "Use usals for this sat"
 msgstr "Utilitzar usals per a aquest sat"
 
@@ -4203,9 +4325,6 @@ msgstr ""
 msgid "Video mode selection."
 msgstr ""
 
-msgid "VideoSetup"
-msgstr ""
-
 msgid "Videoenhancement Setup"
 msgstr ""
 
@@ -4352,6 +4471,15 @@ msgstr ""
 msgid ""
 "Welcome.\n"
 "\n"
+"If you want to connect your Dreambox to the Internet, this wizard will guide "
+"you through the basic network setup of your Dreambox.\n"
+"\n"
+"Press OK to start configuring your network"
+msgstr ""
+
+msgid ""
+"Welcome.\n"
+"\n"
 "This start wizard will guide you through the basic setup of your Dreambox.\n"
 "Press the OK button on your remote control to move to the next step."
 msgstr ""
@@ -4391,9 +4519,15 @@ msgstr ""
 msgid "Wireless"
 msgstr ""
 
+msgid "Wireless LAN"
+msgstr ""
+
 msgid "Wireless Network"
 msgstr ""
 
+msgid "Wireless Network State"
+msgstr ""
+
 msgid "Write error while recording. Disk full?\n"
 msgstr "Error d'escriptura durant la gravació. Disc ple?\n"
 
@@ -4550,6 +4684,14 @@ msgstr ""
 "\n"
 "Vols entrar-lo ara?"
 
+msgid ""
+"Your Dreambox is now ready to use.\n"
+"\n"
+"Your internet connection is working now.\n"
+"\n"
+"Please press OK to continue."
+msgstr ""
+
 msgid "Your Dreambox will restart after pressing OK on your remote control."
 msgstr ""
 
@@ -4587,6 +4729,11 @@ msgstr ""
 "El firmware del frontprocessor ha de ser actualitzat.\n"
 "Prem OK per a començar l'actualizació."
 
+msgid ""
+"Your internet connection is not working!\n"
+"Please choose what you want to do next."
+msgstr ""
+
 msgid "Your name (optional):"
 msgstr ""
 
@@ -4600,6 +4747,13 @@ msgid ""
 "Do you want to disable the second network interface?"
 msgstr ""
 
+msgid ""
+"Your wireless LAN internet connection could not be started!\n"
+"Have you attached your USB WLAN Stick?\n"
+"\n"
+"Please choose what you want to do next."
+msgstr ""
+
 msgid "Zap back to service before positioner setup?"
 msgstr "Tornar al canal abans de configurar el motor?"
 
@@ -4886,6 +5040,9 @@ msgstr "fi de l'edició de preferits"
 msgid "enigma2 and network"
 msgstr ""
 
+msgid "enter hidden network SSID"
+msgstr ""
+
 msgid "equal to"
 msgstr ""
 
@@ -4958,6 +5115,9 @@ msgstr "ajuda..."
 msgid "hidden network"
 msgstr ""
 
+msgid "hidden..."
+msgstr ""
+
 msgid "hide extended description"
 msgstr ""
 
@@ -5444,6 +5604,9 @@ msgstr "posar una marca de tall en l'actual posició"
 msgid "toggle time, chapter, audio, subtitle info"
 msgstr ""
 
+msgid "unavailable"
+msgstr ""
+
 msgid "unconfirmed"
 msgstr ""
 
old mode 100644 (file)
new mode 100755 (executable)
index ffd69a6..a7bbd8d
--- a/po/cs.po
+++ b/po/cs.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-09 13:06+0200\n"
+"POT-Creation-Date: 2009-11-05 18:09+0100\n"
 "PO-Revision-Date: 2008-09-28 18:09+0100\n"
 "Last-Translator: ws79 <ws79@centrum.cz>\n"
 "Language-Team: \n"
@@ -73,6 +73,11 @@ msgstr ""
 
 msgid ""
 "\n"
+"System will restart after the restore!"
+msgstr ""
+
+msgid ""
+"\n"
 "View, install and remove available or installed packages."
 msgstr ""
 
@@ -88,6 +93,9 @@ msgstr ""
 msgid " updates available."
 msgstr ""
 
+msgid " wireless networks found!"
+msgstr ""
+
 msgid "#000000"
 msgstr "#000000"
 
@@ -182,6 +190,9 @@ msgstr "0"
 msgid "1"
 msgstr "1"
 
+msgid "1 wireless network found!"
+msgstr ""
+
 msgid "1.0"
 msgstr "1.0"
 
@@ -369,6 +380,9 @@ msgstr "O Dreamboxu"
 msgid "About..."
 msgstr "O ..."
 
+msgid "Accesspoint:"
+msgstr ""
+
 msgid "Action on long powerbutton press"
 msgstr "Akce při delším podržení zapínacího tlačítka"
 
@@ -638,6 +652,9 @@ msgstr "Chování když je film zastaven"
 msgid "Behavior when a movie reaches the end"
 msgstr "Režim když film dosáhne konce"
 
+msgid "Bitrate:"
+msgstr ""
+
 msgid "Block noise reduction"
 msgstr ""
 
@@ -760,6 +777,9 @@ msgstr "Ověřuji souborový systém..."
 msgid "Choose Tuner"
 msgstr "Vyber tuner"
 
+msgid "Choose a wireless network"
+msgstr ""
+
 msgid "Choose backup files"
 msgstr ""
 
@@ -871,6 +891,21 @@ msgstr ""
 msgid "Configuration Mode"
 msgstr "Konfigurační mód"
 
+msgid "Configure interface"
+msgstr ""
+
+msgid "Configure nameservers"
+msgstr ""
+
+msgid "Configure your internal LAN"
+msgstr "Konfigurovat vaši LAN"
+
+msgid "Configure your network again"
+msgstr ""
+
+msgid "Configure your wireless LAN again"
+msgstr "Znova konfigurovat vaši WLAN"
+
 msgid "Configuring"
 msgstr "Konfiguruji"
 
@@ -880,6 +915,9 @@ msgstr "Konfliktní časování"
 msgid "Connect"
 msgstr ""
 
+msgid "Connect to a Wireless Network"
+msgstr ""
+
 msgid "Connected to"
 msgstr ""
 
@@ -944,6 +982,11 @@ msgstr ""
 
 msgid ""
 "Crashlogs found!\n"
+"Send them to Dream Multimedia ?"
+msgstr ""
+
+msgid ""
+"Crashlogs found!\n"
 "Send them to Dream Multimedia?"
 msgstr ""
 
@@ -1103,6 +1146,9 @@ msgstr "DiSEqC Mód"
 msgid "DiSEqC repeats"
 msgstr "DiSEqC opakování"
 
+msgid "DiSEqC-Tester settings"
+msgstr ""
+
 msgid "Dialing:"
 msgstr ""
 
@@ -1116,6 +1162,9 @@ msgstr ""
 msgid "Directory %s nonexistent."
 msgstr ""
 
+msgid "Directory browser"
+msgstr ""
+
 msgid "Disable"
 msgstr "Zakázat"
 
@@ -1388,6 +1437,10 @@ msgstr ""
 msgid "Enabled"
 msgstr "Povoleno"
 
+#, python-format
+msgid "Encrypted: %s"
+msgstr ""
+
 msgid "Encryption"
 msgstr "Šifrování"
 
@@ -1400,6 +1453,9 @@ msgstr ""
 msgid "Encryption Type"
 msgstr "Typ šifrování"
 
+msgid "Encryption:"
+msgstr ""
+
 msgid "End time"
 msgstr "Konečný čas"
 
@@ -1433,12 +1489,6 @@ msgstr ""
 "\n"
 "© 2006 - Stephan Reichholf"
 
-#. #-#-#-#-#  enigma2.pot (PACKAGE VERSION)  #-#-#-#-#
-#.   TRANSLATORS: Note that "Enter" in the two strings below should *not*
-#.       be interpreted as "Give speed as input". The intended meaning is
-#.       instead "Initial speed when starting winding", i.e. the speed at
-#.       which "winding mode" is entered when first pressing "rewind" or
-#.       "fast forward". 
 msgid "Enter Fast Forward at speed"
 msgstr "Začít přetáčení vpřed na rychlosti"
 
@@ -1496,6 +1546,9 @@ msgstr "Ukončit"
 msgid "Exit editor"
 msgstr "Ukončit editor"
 
+msgid "Exit network wizard"
+msgstr ""
+
 msgid "Exit the cleanup wizard"
 msgstr ""
 
@@ -1685,6 +1738,9 @@ msgstr "Uspat disk po"
 msgid "Hidden network SSID"
 msgstr ""
 
+msgid "Hidden networkname"
+msgstr ""
+
 msgid "Hierarchy Information"
 msgstr "Hierarchické informace"
 
@@ -1849,6 +1905,10 @@ msgstr "Integrovaný ethernet"
 msgid "Integrated Wireless"
 msgstr ""
 
+#, python-format
+msgid "Interface: %s"
+msgstr ""
+
 msgid "Intermediate"
 msgstr "Střední"
 
@@ -1954,6 +2014,9 @@ msgstr "Vypnout limit"
 msgid "Limits on"
 msgstr "Zapnout limit"
 
+msgid "Link Quality:"
+msgstr ""
+
 msgid "Link:"
 msgstr "Odkaz:"
 
@@ -2029,6 +2092,10 @@ msgstr "Rezerva po skončení pořadu"
 msgid "Margin before record (minutes)"
 msgstr "Rezerva před nahráváním (minuty)"
 
+#, python-format
+msgid "Max. Bitrate: %s"
+msgstr ""
+
 msgid "Media player"
 msgstr "Přehrávač médií"
 
@@ -2156,6 +2223,9 @@ msgstr "Síťový SSID"
 msgid "Network Setup"
 msgstr "Nastavení sítě"
 
+msgid "Network Wizard"
+msgstr ""
+
 msgid "Network scan"
 msgstr "Prohledávání sítě"
 
@@ -2198,6 +2268,9 @@ msgstr ""
 msgid "No 50 Hz, sorry. :("
 msgstr "Nelze nastavit 50 Hz"
 
+msgid "No Connection"
+msgstr ""
+
 msgid "No HDD found or HDD not initialized!"
 msgstr "HDD nebyl nalezen nebo HDD není inicializován!"
 
@@ -2229,6 +2302,9 @@ msgstr "Žádná informace o programu. Nahrávání do nekonečna."
 msgid "No free tuner!"
 msgstr "Žádný volný tuner!"
 
+msgid "No networks found"
+msgstr ""
+
 msgid ""
 "No packages were upgraded yet. So you can check your network and try again."
 msgstr ""
@@ -2278,6 +2354,9 @@ msgstr ""
 "Chcete nyní změnit PIN?\n"
 "Pokud 'Ne' tak ochrana nastavení zůstane vypnuta!"
 
+msgid "No wireless networks found! Please refresh."
+msgstr ""
+
 msgid ""
 "No working local network adapter found.\n"
 "Please verify that you have attached a network cable and your network is "
@@ -2502,6 +2581,18 @@ msgid "Please choose the default services lists you want to install."
 msgstr "Vyberte prosím setting, který chcete nainstalovat."
 
 msgid ""
+"Please configure or verify your Nameservers by filling out the required "
+"values.\n"
+"When you are ready press OK to continue."
+msgstr ""
+
+msgid ""
+"Please configure your internet connection by filling out the required "
+"values.\n"
+"When you are ready press OK to continue."
+msgstr ""
+
+msgid ""
 "Please disconnect all USB devices from your Dreambox and (re-)attach the "
 "target USB stick (minimum size is 64 MB) now!"
 msgstr ""
@@ -2583,6 +2674,19 @@ msgstr ""
 msgid "Please select the movie path..."
 msgstr "Vyberte cestu k filmům..."
 
+msgid ""
+"Please select the network interface that you want to use for your internet "
+"connection.\n"
+"\n"
+"Please press OK to continue."
+msgstr ""
+
+msgid ""
+"Please select the wireless network that you want to connect to.\n"
+"\n"
+"Please press OK to continue."
+msgstr ""
+
 msgid "Please set up tuner B"
 msgstr "Prosím, nastav tuner B"
 
@@ -2621,6 +2725,12 @@ msgstr ""
 msgid "Please wait while we configure your network..."
 msgstr ""
 
+msgid "Please wait while we prepare your network interfaces..."
+msgstr ""
+
+msgid "Please wait while we test your network..."
+msgstr ""
+
 msgid "Please wait while your network is restarting..."
 msgstr ""
 
@@ -2842,6 +2952,9 @@ msgstr "Nahrávání má vždy prioritu"
 msgid "Reenter new pin"
 msgstr "Zadejte znova PIN"
 
+msgid "Refresh"
+msgstr ""
+
 msgid "Refresh Rate"
 msgstr "Obnovovací frekvence"
 
@@ -2890,9 +3003,6 @@ msgstr "Odebrat titul"
 msgid "Removed successfully."
 msgstr ""
 
-msgid "Removeing"
-msgstr ""
-
 msgid "Removing"
 msgstr ""
 
@@ -3021,6 +3131,9 @@ msgstr "SNR"
 msgid "SNR:"
 msgstr "SNR:"
 
+msgid "SSID:"
+msgstr ""
+
 msgid "Sat"
 msgstr "So"
 
@@ -3197,6 +3310,9 @@ msgstr ""
 msgid "Select image"
 msgstr ""
 
+msgid "Select interface"
+msgstr ""
+
 msgid "Select package"
 msgstr ""
 
@@ -3221,6 +3337,9 @@ msgstr ""
 msgid "Select video mode"
 msgstr "Vyberte video mód"
 
+msgid "Select wireless network"
+msgstr ""
+
 msgid "Selected source image"
 msgstr ""
 
@@ -3350,6 +3469,12 @@ msgstr "Zobrazit stav vaší bezdrátové sítě.\n"
 msgid "Shutdown Dreambox after"
 msgstr "Vypnout Dreambox po"
 
+msgid "Signal Strength:"
+msgstr ""
+
+msgid "Signal: "
+msgstr ""
+
 msgid "Similar"
 msgstr "Podobné"
 
@@ -3630,6 +3755,11 @@ msgid "Test-Messagebox?"
 msgstr "Vzkaz"
 
 msgid ""
+"Thank you for using the wizard.\n"
+"Please press OK to continue."
+msgstr ""
+
+msgid ""
 "Thank you for using the wizard. Your box is now ready to use.\n"
 "Please press OK to start using your Dreambox."
 msgstr ""
@@ -3727,6 +3857,11 @@ msgstr ""
 
 msgid ""
 "The wireless LAN plugin is not installed!\n"
+"Please install it and choose what you want to do next."
+msgstr ""
+
+msgid ""
+"The wireless LAN plugin is not installed!\n"
 "Please install it."
 msgstr ""
 
@@ -4077,9 +4212,6 @@ msgid ""
 "Remove"
 msgstr ""
 
-msgid "Unicable"
-msgstr ""
-
 msgid "Unicable LNB"
 msgstr ""
 
@@ -4092,6 +4224,9 @@ msgstr "Univerzální LNB"
 msgid "Unmount failed"
 msgstr "Unmount selhalo"
 
+msgid "Unsupported"
+msgstr ""
+
 msgid "Update"
 msgstr ""
 
@@ -4110,9 +4245,6 @@ msgstr ""
 msgid "Upgrade finished. Do you want to reboot your Dreambox?"
 msgstr "Upgrade skončil. Chcete restartovat váš Dreambox?"
 
-msgid "Upgradeing"
-msgstr ""
-
 msgid "Upgrading"
 msgstr "Aktualizuji"
 
@@ -4134,19 +4266,6 @@ msgstr "Použít měření výkonu"
 msgid "Use a gateway"
 msgstr "Použít bránu (gateway)"
 
-#. #-#-#-#-#  enigma2.pot (PACKAGE VERSION)  #-#-#-#-#
-#.   TRANSLATORS: The effect of "Non-smooth winding" is that rather
-#.       than using ordinary "continuous" or "smooth" winding, a fast
-#.       sequence of stills is shown when winding at high speeds. This
-#.       makes it much easier too follow when almost each frame comes from
-#.       a new scene. The effect is achieved by repeating each shown frame
-#.       a couple of times. The settings control both at which speed this
-#.       winding mode sets in, and how many times each frame should be
-#.       repeated. This was previously called "Discontinuous playback"
-#.       which was incomprehensible. "Non-smooth winding" may be a better
-#.       term, but note that there is nothing irregular about it. Synonyms
-#.       better suited for translation to other languages may be "stepwise
-#.       winding/playback", or "winding/playback using stills". 
 msgid "Use non-smooth winding at speeds above"
 msgstr "Použít skokové přetáčení s rychlostmi uvedenými výše"
 
@@ -4174,6 +4293,9 @@ msgstr ""
 msgid "Use this video enhancement settings?"
 msgstr ""
 
+msgid "Use time of currently running service"
+msgstr ""
+
 msgid "Use usals for this sat"
 msgstr "Použít USUALS pro tento satelit"
 
@@ -4240,9 +4362,6 @@ msgstr ""
 msgid "Video mode selection."
 msgstr "Výběr video módu"
 
-msgid "VideoSetup"
-msgstr ""
-
 msgid "Videoenhancement Setup"
 msgstr ""
 
@@ -4391,6 +4510,15 @@ msgstr ""
 msgid ""
 "Welcome.\n"
 "\n"
+"If you want to connect your Dreambox to the Internet, this wizard will guide "
+"you through the basic network setup of your Dreambox.\n"
+"\n"
+"Press OK to start configuring your network"
+msgstr ""
+
+msgid ""
+"Welcome.\n"
+"\n"
 "This start wizard will guide you through the basic setup of your Dreambox.\n"
 "Press the OK button on your remote control to move to the next step."
 msgstr ""
@@ -4429,9 +4557,15 @@ msgstr ""
 msgid "Wireless"
 msgstr "Bezdrátové"
 
+msgid "Wireless LAN"
+msgstr ""
+
 msgid "Wireless Network"
 msgstr "Bezdrátová síť"
 
+msgid "Wireless Network State"
+msgstr ""
+
 msgid "Write error while recording. Disk full?\n"
 msgstr "Zapsat chybu při nahrávání. Disk plný?\n"
 
@@ -4592,6 +4726,14 @@ msgstr ""
 "\n"
 "Chcete nyní nastavit PIN?"
 
+msgid ""
+"Your Dreambox is now ready to use.\n"
+"\n"
+"Your internet connection is working now.\n"
+"\n"
+"Please press OK to continue."
+msgstr ""
+
 msgid "Your Dreambox will restart after pressing OK on your remote control."
 msgstr "Váš Dreambox se restartuje po stisknutí OK na vašem dálkovém ovladači."
 
@@ -4630,6 +4772,11 @@ msgstr ""
 "Firmware vašeho frontprocesoru musí být aktualizován.\n"
 "Stiskněte OK pro aktualizaci."
 
+msgid ""
+"Your internet connection is not working!\n"
+"Please choose what you want to do next."
+msgstr ""
+
 msgid "Your name (optional):"
 msgstr ""
 
@@ -4643,6 +4790,13 @@ msgid ""
 "Do you want to disable the second network interface?"
 msgstr ""
 
+msgid ""
+"Your wireless LAN internet connection could not be started!\n"
+"Have you attached your USB WLAN Stick?\n"
+"\n"
+"Please choose what you want to do next."
+msgstr ""
+
 msgid "Zap back to service before positioner setup?"
 msgstr "Přepnout zpět na program před nastavováním positioneru?"
 
@@ -4929,6 +5083,9 @@ msgstr "Ukončit úpravu oblíbené"
 msgid "enigma2 and network"
 msgstr ""
 
+msgid "enter hidden network SSID"
+msgstr ""
+
 msgid "equal to"
 msgstr ""
 
@@ -5001,6 +5158,9 @@ msgstr "Pomoc..."
 msgid "hidden network"
 msgstr ""
 
+msgid "hidden..."
+msgstr ""
+
 msgid "hide extended description"
 msgstr "skrýt rozšířený popis"
 
@@ -5484,6 +5644,9 @@ msgstr "prohodit střihovou značku na této pozici"
 msgid "toggle time, chapter, audio, subtitle info"
 msgstr "přepnout informace mezi časem, kapitolou, audiostopou, titulky"
 
+msgid "unavailable"
+msgstr ""
+
 msgid "unconfirmed"
 msgstr "nepotvrzeno"
 
@@ -5607,18 +5770,12 @@ msgstr "přepnutý"
 #~ msgid "Choose Location"
 #~ msgstr "Vyberte umístění"
 
-#~ msgid "Configure your internal LAN"
-#~ msgstr "Konfigurovat vaši LAN"
-
 #~ msgid "Configure your internal LAN again"
 #~ msgstr "Znova konfigurovat vaši LAN"
 
 #~ msgid "Configure your wireless LAN"
 #~ msgstr "Konfigurovat vaši WLAN"
 
-#~ msgid "Configure your wireless LAN again"
-#~ msgstr "Znova konfigurovat vaši WLAN"
-
 #~ msgid "Confirm"
 #~ msgstr "Potvrdit"
 
old mode 100644 (file)
new mode 100755 (executable)
index 38a102b..f3c1fa4
--- a/po/da.po
+++ b/po/da.po
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Enigma2\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-09 13:06+0200\n"
+"POT-Creation-Date: 2009-11-05 18:09+0100\n"
 "PO-Revision-Date: 2009-09-04 07:50+0100\n"
 "Last-Translator: Ingmar Jørgensen <dreambox@ingmar.dk>\n"
 "Language-Team: jazzydane <dreambox@ingmar.dk>\n"
@@ -95,6 +95,13 @@ msgstr ""
 
 msgid ""
 "\n"
+"System will restart after the restore!"
+msgstr ""
+"\n"
+"Systemet vil genstarte efter gendannelsen!"
+
+msgid ""
+"\n"
 "View, install and remove available or installed packages."
 msgstr ""
 "\n"
@@ -112,6 +119,9 @@ msgstr "pakker valgt."
 msgid " updates available."
 msgstr "opdateringer tilgængelig."
 
+msgid " wireless networks found!"
+msgstr ""
+
 msgid "#000000"
 msgstr "#000000"
 
@@ -208,6 +218,9 @@ msgstr "0"
 msgid "1"
 msgstr "1"
 
+msgid "1 wireless network found!"
+msgstr ""
+
 msgid "1.0"
 msgstr "1.0"
 
@@ -403,6 +416,9 @@ msgstr "Info"
 msgid "About..."
 msgstr "Dreambox info"
 
+msgid "Accesspoint:"
+msgstr ""
+
 msgid "Action on long powerbutton press"
 msgstr "Aktion ved langt powerknap tryk"
 
@@ -682,6 +698,9 @@ msgstr "Opførsel når en film stoppes"
 msgid "Behavior when a movie reaches the end"
 msgstr "Opførsel når filmen er næsten slut"
 
+msgid "Bitrate:"
+msgstr ""
+
 msgid "Block noise reduction"
 msgstr ""
 
@@ -804,6 +823,9 @@ msgstr "Undersøge Filsystem..."
 msgid "Choose Tuner"
 msgstr "Vælg Tuner"
 
+msgid "Choose a wireless network"
+msgstr ""
+
 msgid "Choose backup files"
 msgstr "Vælg backup filer"
 
@@ -915,6 +937,21 @@ msgstr "Indtilling"
 msgid "Configuration Mode"
 msgstr "Konfigurations Type"
 
+msgid "Configure interface"
+msgstr ""
+
+msgid "Configure nameservers"
+msgstr ""
+
+msgid "Configure your internal LAN"
+msgstr "Konfigurer dit interne LAN"
+
+msgid "Configure your network again"
+msgstr ""
+
+msgid "Configure your wireless LAN again"
+msgstr "Konfigurer dit trådløse LAN igen"
+
 msgid "Configuring"
 msgstr "Konfigurerer"
 
@@ -924,6 +961,9 @@ msgstr "Timer konflikt"
 msgid "Connect"
 msgstr "Forbind"
 
+msgid "Connect to a Wireless Network"
+msgstr ""
+
 msgid "Connected to"
 msgstr "Forbundet til"
 
@@ -988,6 +1028,13 @@ msgstr "Opsætning for automatisk nedbrudslog..."
 
 msgid ""
 "Crashlogs found!\n"
+"Send them to Dream Multimedia ?"
+msgstr ""
+"Der er fundet nedbrudslog!\n"
+"Vil du sende dem til Dream Multimedia ?"
+
+msgid ""
+"Crashlogs found!\n"
 "Send them to Dream Multimedia?"
 msgstr ""
 
@@ -1147,6 +1194,9 @@ msgstr "DiSEqC type"
 msgid "DiSEqC repeats"
 msgstr "DiSEqC gentagelser"
 
+msgid "DiSEqC-Tester settings"
+msgstr ""
+
 msgid "Dialing:"
 msgstr "Ringer op:"
 
@@ -1160,6 +1210,9 @@ msgstr "Direkte afspilning af lænkede titler uden menu"
 msgid "Directory %s nonexistent."
 msgstr "Mappen %s findes ikke."
 
+msgid "Directory browser"
+msgstr ""
+
 msgid "Disable"
 msgstr "Afbryd"
 
@@ -1438,6 +1491,10 @@ msgstr "Aktiver timer"
 msgid "Enabled"
 msgstr "Aktiveret"
 
+#, python-format
+msgid "Encrypted: %s"
+msgstr ""
+
 msgid "Encryption"
 msgstr "Kodning"
 
@@ -1450,6 +1507,9 @@ msgstr "Kodnings nøgletype"
 msgid "Encryption Type"
 msgstr "Kodnings Type"
 
+msgid "Encryption:"
+msgstr ""
+
 msgid "End time"
 msgstr "Stop tid"
 
@@ -1483,12 +1543,6 @@ msgstr ""
 "\n"
 "© 2006 - Stephan Reichholf"
 
-#. #-#-#-#-#  enigma2.pot (PACKAGE VERSION)  #-#-#-#-#
-#.   TRANSLATORS: Note that "Enter" in the two strings below should *not*
-#.       be interpreted as "Give speed as input". The intended meaning is
-#.       instead "Initial speed when starting winding", i.e. the speed at
-#.       which "winding mode" is entered when first pressing "rewind" or
-#.       "fast forward". 
 msgid "Enter Fast Forward at speed"
 msgstr "Nuværende hastighed ved spoling"
 
@@ -1548,6 +1602,9 @@ msgstr "Afslut"
 msgid "Exit editor"
 msgstr "Afslut editor"
 
+msgid "Exit network wizard"
+msgstr ""
+
 msgid "Exit the cleanup wizard"
 msgstr "Afslut oprydningsassistenten"
 
@@ -1737,6 +1794,9 @@ msgstr "Harddisk slumre efter:"
 msgid "Hidden network SSID"
 msgstr "Skjult netværks SSID"
 
+msgid "Hidden networkname"
+msgstr ""
+
 msgid "Hierarchy Information"
 msgstr "Hieraki information"
 
@@ -1900,6 +1960,10 @@ msgstr "Internt ethernet"
 msgid "Integrated Wireless"
 msgstr "Integreret trådløs"
 
+#, python-format
+msgid "Interface: %s"
+msgstr ""
+
 msgid "Intermediate"
 msgstr "Normal"
 
@@ -2005,6 +2069,9 @@ msgstr "Begrænsning fra"
 msgid "Limits on"
 msgstr "Begrænsning til"
 
+msgid "Link Quality:"
+msgstr ""
+
 msgid "Link:"
 msgstr "Link:"
 
@@ -2080,6 +2147,10 @@ msgstr "Margin efter optagelse"
 msgid "Margin before record (minutes)"
 msgstr "Margin før optagelse (minutter)"
 
+#, python-format
+msgid "Max. Bitrate: %s"
+msgstr ""
+
 msgid "Media player"
 msgstr "Medie afspiller"
 
@@ -2207,6 +2278,9 @@ msgstr "Netværks SSID"
 msgid "Network Setup"
 msgstr "Netværks opsætning"
 
+msgid "Network Wizard"
+msgstr ""
+
 msgid "Network scan"
 msgstr "Netværks søgning"
 
@@ -2249,6 +2323,9 @@ msgstr "Ingen (understøttet) DVDROM fundet!"
 msgid "No 50 Hz, sorry. :("
 msgstr "Ingen 50 Hz, desværre. :("
 
+msgid "No Connection"
+msgstr ""
+
 msgid "No HDD found or HDD not initialized!"
 msgstr ""
 "Ingen HDD fundet eller\n"
@@ -2282,6 +2359,9 @@ msgstr "Ingen program-data fundet, optagelse startet."
 msgid "No free tuner!"
 msgstr "Ingen fri tuner!"
 
+msgid "No networks found"
+msgstr ""
+
 msgid ""
 "No packages were upgraded yet. So you can check your network and try again."
 msgstr ""
@@ -2330,6 +2410,9 @@ msgstr ""
 "Vil du gerne ændre PIN kode opsætning nu?\n"
 "Siger du 'Nej' her vil opsætnings beskyttelsen ikke være tilsluttet!"
 
+msgid "No wireless networks found! Please refresh."
+msgstr ""
+
 msgid ""
 "No working local network adapter found.\n"
 "Please verify that you have attached a network cable and your network is "
@@ -2565,6 +2648,18 @@ msgid "Please choose the default services lists you want to install."
 msgstr "Vælg venligst standard kanal lister som du ønsker at installere."
 
 msgid ""
+"Please configure or verify your Nameservers by filling out the required "
+"values.\n"
+"When you are ready press OK to continue."
+msgstr ""
+
+msgid ""
+"Please configure your internet connection by filling out the required "
+"values.\n"
+"When you are ready press OK to continue."
+msgstr ""
+
+msgid ""
 "Please disconnect all USB devices from your Dreambox and (re-)attach the "
 "target USB stick (minimum size is 64 MB) now!"
 msgstr ""
@@ -2650,6 +2745,19 @@ msgstr "Vælg venligst destinations mappe eller media"
 msgid "Please select the movie path..."
 msgstr "Venligst vælg en film sti..."
 
+msgid ""
+"Please select the network interface that you want to use for your internet "
+"connection.\n"
+"\n"
+"Please press OK to continue."
+msgstr ""
+
+msgid ""
+"Please select the wireless network that you want to connect to.\n"
+"\n"
+"Please press OK to continue."
+msgstr ""
+
 msgid "Please set up tuner B"
 msgstr "Venligst indstil tuner B"
 
@@ -2690,6 +2798,12 @@ msgstr "Vent venligst mens der søges efter pakker, der kan fjernes..."
 msgid "Please wait while we configure your network..."
 msgstr "Vent venligst, mens vi opsætter dit netværk..."
 
+msgid "Please wait while we prepare your network interfaces..."
+msgstr ""
+
+msgid "Please wait while we test your network..."
+msgstr ""
+
 msgid "Please wait while your network is restarting..."
 msgstr "Vent venligst, mens dit netværk genstartes..."
 
@@ -2911,6 +3025,9 @@ msgstr "Optagelser har altid prioritet"
 msgid "Reenter new pin"
 msgstr "Gentag ny kode"
 
+msgid "Refresh"
+msgstr ""
+
 msgid "Refresh Rate"
 msgstr "Opdateringsrate"
 
@@ -2959,9 +3076,6 @@ msgstr "Fjerne titel"
 msgid "Removed successfully."
 msgstr "Fjernelse gennemført."
 
-msgid "Removeing"
-msgstr ""
-
 msgid "Removing"
 msgstr "Sletter"
 
@@ -3089,6 +3203,9 @@ msgstr "SNR"
 msgid "SNR:"
 msgstr "SNR:"
 
+msgid "SSID:"
+msgstr ""
+
 msgid "Sat"
 msgstr "Lør"
 
@@ -3265,6 +3382,9 @@ msgstr ""
 msgid "Select image"
 msgstr "Vælg image"
 
+msgid "Select interface"
+msgstr ""
+
 msgid "Select package"
 msgstr "Vælg pakke"
 
@@ -3289,6 +3409,9 @@ msgstr "Vælg video input med op/ned knapperne"
 msgid "Select video mode"
 msgstr "Vælg video type"
 
+msgid "Select wireless network"
+msgstr ""
+
 msgid "Selected source image"
 msgstr "Vælg kilde image"
 
@@ -3418,6 +3541,12 @@ msgstr "Vis tilstanden af din trådløse LAN opkobling.\n"
 msgid "Shutdown Dreambox after"
 msgstr "Slukke Dreambox efter"
 
+msgid "Signal Strength:"
+msgstr ""
+
+msgid "Signal: "
+msgstr ""
+
 msgid "Similar"
 msgstr "Samme"
 
@@ -3704,6 +3833,11 @@ msgid "Test-Messagebox?"
 msgstr "Test-Beskedbox?"
 
 msgid ""
+"Thank you for using the wizard.\n"
+"Please press OK to continue."
+msgstr ""
+
+msgid ""
 "Thank you for using the wizard. Your box is now ready to use.\n"
 "Please press OK to start using your Dreambox."
 msgstr ""
@@ -3815,6 +3949,11 @@ msgstr "Timer filen (timers.xml) er korrupt og kan ikke bruges."
 
 msgid ""
 "The wireless LAN plugin is not installed!\n"
+"Please install it and choose what you want to do next."
+msgstr ""
+
+msgid ""
+"The wireless LAN plugin is not installed!\n"
 "Please install it."
 msgstr ""
 "Trådløs LAN plugin er ikke installeret!\n"
@@ -4186,9 +4325,6 @@ msgstr ""
 "Fortryd\n"
 "Fjern"
 
-msgid "Unicable"
-msgstr "Unikabel"
-
 msgid "Unicable LNB"
 msgstr "Unikabel LNB"
 
@@ -4201,6 +4337,9 @@ msgstr "Universal LNB"
 msgid "Unmount failed"
 msgstr "Unmount fejlede"
 
+msgid "Unsupported"
+msgstr ""
+
 msgid "Update"
 msgstr "Opdater"
 
@@ -4219,9 +4358,6 @@ msgstr "Opgradering afsluttet"
 msgid "Upgrade finished. Do you want to reboot your Dreambox?"
 msgstr "Opgradering færdig. Vil du genstarte din DreamBox?"
 
-msgid "Upgradeing"
-msgstr ""
-
 msgid "Upgrading"
 msgstr "Opdaterer"
 
@@ -4243,19 +4379,6 @@ msgstr "Brug strømmåling"
 msgid "Use a gateway"
 msgstr "Brug af Router"
 
-#. #-#-#-#-#  enigma2.pot (PACKAGE VERSION)  #-#-#-#-#
-#.   TRANSLATORS: The effect of "Non-smooth winding" is that rather
-#.       than using ordinary "continuous" or "smooth" winding, a fast
-#.       sequence of stills is shown when winding at high speeds. This
-#.       makes it much easier too follow when almost each frame comes from
-#.       a new scene. The effect is achieved by repeating each shown frame
-#.       a couple of times. The settings control both at which speed this
-#.       winding mode sets in, and how many times each frame should be
-#.       repeated. This was previously called "Discontinuous playback"
-#.       which was incomprehensible. "Non-smooth winding" may be a better
-#.       term, but note that there is nothing irregular about it. Synonyms
-#.       better suited for translation to other languages may be "stepwise
-#.       winding/playback", or "winding/playback using stills". 
 msgid "Use non-smooth winding at speeds above"
 msgstr "Spoling/afspilning ved brug af stillbilleder"
 
@@ -4283,6 +4406,9 @@ msgstr ""
 msgid "Use this video enhancement settings?"
 msgstr ""
 
+msgid "Use time of currently running service"
+msgstr ""
+
 msgid "Use usals for this sat"
 msgstr "Brug USALS til denne position"
 
@@ -4349,9 +4475,6 @@ msgstr ""
 msgid "Video mode selection."
 msgstr "Video type vælger."
 
-msgid "VideoSetup"
-msgstr ""
-
 msgid "Videoenhancement Setup"
 msgstr ""
 
@@ -4496,12 +4619,15 @@ msgid ""
 "cleaned up.\n"
 "You can use this wizard to remove some extensions.\n"
 msgstr ""
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
+
+msgid ""
+"Welcome.\n"
+"\n"
+"If you want to connect your Dreambox to the Internet, this wizard will guide "
+"you through the basic network setup of your Dreambox.\n"
+"\n"
+"Press OK to start configuring your network"
+msgstr ""
 
 msgid ""
 "Welcome.\n"
@@ -4550,9 +4676,15 @@ msgstr "Hvor skal midleridige timeshift optagelser gemmes?"
 msgid "Wireless"
 msgstr "Trådløst"
 
+msgid "Wireless LAN"
+msgstr ""
+
 msgid "Wireless Network"
 msgstr "Trådløst netværk"
 
+msgid "Wireless Network State"
+msgstr ""
+
 msgid "Write error while recording. Disk full?\n"
 msgstr "Skrive fejl under optagelse. Disken fuld?\n"
 
@@ -4720,6 +4852,14 @@ msgstr ""
 "\n"
 "Vil du opsætte pin kode nu?"
 
+msgid ""
+"Your Dreambox is now ready to use.\n"
+"\n"
+"Your internet connection is working now.\n"
+"\n"
+"Please press OK to continue."
+msgstr ""
+
 msgid "Your Dreambox will restart after pressing OK on your remote control."
 msgstr "Din Dreambox vil genstarte efter OK tryk på din fjernbetjening."
 
@@ -4760,6 +4900,11 @@ msgstr ""
 "Din frontprocessor skal opdateres.\n"
 "Tryk OK for at starte opdateringen."
 
+msgid ""
+"Your internet connection is not working!\n"
+"Please choose what you want to do next."
+msgstr ""
+
 msgid "Your name (optional):"
 msgstr "Dit navn (valgfrit):"
 
@@ -4777,6 +4922,13 @@ msgstr ""
 "\n"
 "Vil du deaktivere det andet netværks interface?"
 
+msgid ""
+"Your wireless LAN internet connection could not be started!\n"
+"Have you attached your USB WLAN Stick?\n"
+"\n"
+"Please choose what you want to do next."
+msgstr ""
+
 msgid "Zap back to service before positioner setup?"
 msgstr "Skift tilbage til kanal før motoropsætning?"
 
@@ -5064,6 +5216,9 @@ msgstr "Afslut favorit redigering"
 msgid "enigma2 and network"
 msgstr "enigma2 og netværk"
 
+msgid "enter hidden network SSID"
+msgstr ""
+
 msgid "equal to"
 msgstr "svarende til"
 
@@ -5136,6 +5291,9 @@ msgstr "Hjælp..."
 msgid "hidden network"
 msgstr "skjult netværk"
 
+msgid "hidden..."
+msgstr ""
+
 msgid "hide extended description"
 msgstr "Skjule udvidet beskrivelse"
 
@@ -5619,6 +5777,9 @@ msgstr "flytte en klippe markør til nuværende position"
 msgid "toggle time, chapter, audio, subtitle info"
 msgstr "skift mellem tid, kapitel, lyd, undertekst info"
 
+msgid "unavailable"
+msgstr ""
+
 msgid "unconfirmed"
 msgstr "ubekræftet"
 
@@ -5693,13 +5854,6 @@ msgstr "zappet"
 #~ "\n"
 #~ "Enigma2 vil genstarte efter gendannelse"
 
-#~ msgid ""
-#~ "\n"
-#~ "System will restart after the restore!"
-#~ msgstr ""
-#~ "\n"
-#~ "Systemet vil genstarte efter gendannelsen!"
-
 #~ msgid "\"?"
 #~ msgstr "\"?"
 
@@ -5776,18 +5930,12 @@ msgstr "zappet"
 #~ msgid "Configuration for the CrashlogAutoSubmitter"
 #~ msgstr "Opsætning for NedbrudsAutoUnderretning"
 
-#~ msgid "Configure your internal LAN"
-#~ msgstr "Konfigurer dit interne LAN"
-
 #~ msgid "Configure your internal LAN again"
 #~ msgstr "Konfigurer dit interne LAN igen"
 
 #~ msgid "Configure your wireless LAN"
 #~ msgstr "Konfigurer dit trådløse LAN"
 
-#~ msgid "Configure your wireless LAN again"
-#~ msgstr "Konfigurer dit trådløse LAN igen"
-
 #~ msgid "Confirm"
 #~ msgstr "Bekræft"
 
@@ -5803,13 +5951,6 @@ msgstr "zappet"
 #~ msgid "CrashlogAutoSubmitConfiguration"
 #~ msgstr "Opsætning af NedbrudslogAutoUnderretning"
 
-#~ msgid ""
-#~ "Crashlogs found!\n"
-#~ "Send them to Dream Multimedia ?"
-#~ msgstr ""
-#~ "Der er fundet nedbrudslog!\n"
-#~ "Vil du sende dem til Dream Multimedia ?"
-
 #~ msgid "DVD ENTER key"
 #~ msgstr "DVD ENTER tast"
 
@@ -6251,6 +6392,9 @@ msgstr "zappet"
 #~ "Se venligst i manual.\n"
 #~ "FEJL: "
 
+#~ msgid "Unicable"
+#~ msgstr "Unikabel"
+
 #~ msgid "Upgrade"
 #~ msgstr "Opgrader"
 
old mode 100755 (executable)
new mode 100644 (file)
index ba83daa..2c11213
--- a/po/de.po
+++ b/po/de.po
@@ -2,12 +2,12 @@
 # Copyright (C) 2005 THE tuxbox-enigma'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the tuxbox-enigma package.
 # Automatically generated, 2005.
-#
+# 
 msgid ""
 msgstr ""
 "Project-Id-Version: tuxbox-enigma 0.0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-12 12:40+0200\n"
+"POT-Creation-Date: 2009-11-05 18:09+0100\n"
 "PO-Revision-Date: 2009-10-12 12:38+0100\n"
 "Last-Translator: Stefan Pluecken <stefan.pluecken@multimedia-labs.de>\n"
 "Language-Team: none\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Poedit-Language: German\n"
-"X-Poedit-Country: GERMANY\n"
 "X-Poedit-SourceCharset: iso-8859-15\n"
+"X-Poedit-Country: GERMANY\n"
 
 msgid ""
 "\n"
@@ -116,46 +116,49 @@ msgid " "
 msgstr ""
 
 msgid " extensions."
-msgstr ""
+msgstr "erweiterungen."
 
 msgid " packages selected."
-msgstr ""
+msgstr "Pakete ausgewählt."
 
 msgid " updates available."
-msgstr ""
+msgstr "Aktualisierung(en) verfügbar "
+
+msgid " wireless networks found!"
+msgstr " Funk Netzwerke gefunden!"
 
 msgid "#000000"
-msgstr ""
+msgstr "#000000"
 
 msgid "#0064c7"
-msgstr ""
+msgstr "#0064c7"
 
 msgid "#25062748"
-msgstr ""
+msgstr "#25062748"
 
 msgid "#389416"
-msgstr ""
+msgstr "#389416"
 
 msgid "#80000000"
-msgstr ""
+msgstr "#80000000"
 
 msgid "#80ffffff"
-msgstr ""
+msgstr "#80ffffff"
 
 msgid "#bab329"
-msgstr ""
+msgstr "#bab329"
 
 msgid "#f23d21"
-msgstr ""
+msgstr "#f23d21"
 
 msgid "#ffffff"
-msgstr ""
+msgstr "#ffffff"
 
 msgid "#ffffffff"
-msgstr ""
+msgstr "#ffffffff"
 
 msgid "%H:%M"
-msgstr ""
+msgstr "%H:%M"
 
 #, python-format
 msgid "%d jobs are running in the background!"
@@ -197,16 +200,13 @@ 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 "* Verfügbar für die Eingabe der Netzwerk SSID oder Passwortes"
+msgstr "* Verfügbar für die Eingabe der Netzwerk SSID oder des Passwortes"
 
 msgid ".NFI Download failed:"
 msgstr ".NFI Download fehlgeschlagen:"
 
-msgid ""
-".NFI file passed md5sum signature check. You can safely flash this image!"
-msgstr ""
-"Die Signatur-Überprüfung der .NFI-Datei war erfolgreich. Sie können diese "
-"Datei ohne Bedenken installieren!"
+msgid ".NFI file passed md5sum signature check. You can safely flash this image!"
+msgstr "Die Signatur-Überprüfung der .NFI-Datei war erfolgreich. Sie können diese Datei ohne Bedenken installieren!"
 
 msgid "/usr/share/enigma2 directory"
 msgstr "/usr/share/enigma2 Verzeichnis"
@@ -215,10 +215,13 @@ msgid "/var directory"
 msgstr "/var Verzeichnis"
 
 msgid "0"
-msgstr ""
+msgstr "0"
 
 msgid "1"
-msgstr ""
+msgstr "1"
+
+msgid "1 wireless network found!"
+msgstr "1 Funk Netzwerk gefunden!"
 
 msgid "1.0"
 msgstr "1.0"
@@ -236,19 +239,19 @@ msgid "13 V"
 msgstr "13 V"
 
 msgid "16:10"
-msgstr ""
+msgstr "16:10"
 
 msgid "16:10 Letterbox"
-msgstr ""
+msgstr "16:10 Letterbox"
 
 msgid "16:10 PanScan"
-msgstr ""
+msgstr "16:10 PanScan"
 
 msgid "16:9"
 msgstr "16:9"
 
 msgid "16:9 Letterbox"
-msgstr ""
+msgstr "16:9 Letterbox"
 
 msgid "16:9 always"
 msgstr "immer 16:9"
@@ -257,49 +260,49 @@ msgid "18 V"
 msgstr "18 V"
 
 msgid "2"
-msgstr ""
+msgstr "2"
 
 msgid "3"
-msgstr ""
+msgstr "3"
 
 msgid "30 minutes"
 msgstr "30 Minuten"
 
 msgid "4"
-msgstr ""
+msgstr "4"
 
 msgid "4:3"
-msgstr ""
+msgstr "4:3"
 
 msgid "4:3 Letterbox"
-msgstr ""
+msgstr "4:3 Letterbox"
 
 msgid "4:3 PanScan"
-msgstr ""
+msgstr "4:3 PanScan"
 
 msgid "5"
-msgstr ""
+msgstr "5"
 
 msgid "5 minutes"
 msgstr "5 Minuten"
 
 msgid "50 Hz"
-msgstr ""
+msgstr "50 Hz"
 
 msgid "6"
-msgstr ""
+msgstr "6"
 
 msgid "60 minutes"
 msgstr "60 Minuten"
 
 msgid "7"
-msgstr ""
+msgstr "7"
 
 msgid "8"
-msgstr ""
+msgstr "8"
 
 msgid "9"
-msgstr ""
+msgstr "9"
 
 msgid "<unknown>"
 msgstr "<unbekannt>"
@@ -350,19 +353,11 @@ msgstr ""
 "Zurzeit läuft eine Aufnahme.\n"
 "Was möchten Sie tun?"
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"configure the positioner."
-msgstr ""
-"Zurzeit läuft eine Aufnahme. Bitte beenden Sie die Aufnahme, bevor Sie das "
-"Rotor-Setup ausführen."
+msgid "A recording is currently running. Please stop the recording before trying to configure the positioner."
+msgstr "Zurzeit läuft eine Aufnahme. Bitte beenden Sie die Aufnahme, bevor Sie das Rotor-Setup ausführen."
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"start the satfinder."
-msgstr ""
-"Zurzeit läuft eine Aufnahme. Bitte beenden Sie diese Aufnahme, bevor Sie den "
-"Sat-Finder starten."
+msgid "A recording is currently running. Please stop the recording before trying to start the satfinder."
+msgstr "Zurzeit läuft eine Aufnahme. Bitte beenden Sie diese Aufnahme, bevor Sie den Sat-Finder starten."
 
 #, python-format
 msgid "A required tool (%s) was not found."
@@ -383,7 +378,7 @@ msgstr ""
 "ausschalten. Jetzt herunterfahren?"
 
 msgid "A small overview of the available icon states and actions."
-msgstr ""
+msgstr "Eine kurze Übersicht der verfügbaren Icon Stati und Aktionen."
 
 msgid ""
 "A timer failed to record!\n"
@@ -405,10 +400,10 @@ msgid "AC3 default"
 msgstr "AC3 standardmäßig"
 
 msgid "AC3 downmix"
-msgstr ""
+msgstr "AC3 downmix"
 
 msgid "Abort"
-msgstr ""
+msgstr "Abbrechen"
 
 msgid "About"
 msgstr "Über"
@@ -416,6 +411,9 @@ msgstr "Über"
 msgid "About..."
 msgstr "Über..."
 
+msgid "Accesspoint:"
+msgstr "Zugangspunkt:"
+
 msgid "Action on long powerbutton press"
 msgstr "Aktion beim langen Druck auf Power"
 
@@ -435,10 +433,10 @@ msgid "Add"
 msgstr "Hinzufügen"
 
 msgid "Add Bookmark"
-msgstr ""
+msgstr "Lesezeichen hinzufügen"
 
 msgid "Add WLAN configuration?"
-msgstr ""
+msgstr "WLAN Konfiguration hinzufügen?"
 
 msgid "Add a mark"
 msgstr "Marker hinzufügen"
@@ -447,7 +445,7 @@ msgid "Add a new title"
 msgstr "Füge neuen Titel hinzu"
 
 msgid "Add network configuration?"
-msgstr ""
+msgstr "Netzwerk-Konfiguration hinzufügen?"
 
 msgid "Add timer"
 msgstr "Timer setzen"
@@ -459,30 +457,19 @@ msgid "Add to bouquet"
 msgstr "Zum Bouquet hinzufügen"
 
 msgid "Add to favourites"
-msgstr "Zu Favoriten hinfügen"
+msgstr "Zu Favoriten hinzufügen"
 
-msgid ""
-"Adds enigma2 settings and dreambox model informations like SN, rev... if "
-"enabled."
-msgstr ""
+msgid "Adds enigma2 settings and dreambox model informations like SN, rev... if enabled."
+msgstr "Fügt Ihre Enigma2-Einstellungen und modellspezifische Informationen wie SN, Rev. hinzu falls aktiviert."
 
 msgid "Adds network configuration if enabled."
-msgstr ""
+msgstr "Fügt Ihre Netzwerk-Konfiguration hinzu falls aktiviert."
 
 msgid "Adds wlan configuration if enabled."
-msgstr ""
+msgstr "Fügt Ihre WLAN-Konfiguration hinzu falls aktiviert."
 
-msgid ""
-"Adjust the color settings so that all the color shades are distinguishable, "
-"but appear as saturated as possible. If you are happy with the result, press "
-"OK to close the video fine-tuning, or use the number keys to select other "
-"test screens."
-msgstr ""
-"Verändern Sie die Farbeinstellungen, so dass Sie alle Farbabstufungen "
-"voneinander unterscheiden können, diese aber so gesättigt wie möglich "
-"dargestellt werden. Wenn Sie mit dem Ergebnis zufrieden sind, drücken Sie "
-"OK, um die Feineinstellungen zu beenden. Mit den Zahlentasten können Sie "
-"weitere Testbilder auswählen."
+msgid "Adjust the color settings so that all the color shades are distinguishable, but appear as saturated as possible. If you are happy with the result, press OK to close the video fine-tuning, or use the number keys to select other test screens."
+msgstr "Verändern Sie die Farbeinstellungen, so dass Sie alle Farbabstufungen voneinander unterscheiden können, diese aber so gesättigt wie möglich dargestellt werden. Wenn Sie mit dem Ergebnis zufrieden sind, drücken Sie OK, um die Feineinstellungen zu beenden. Mit den Zahlentasten können Sie weitere Testbilder auswählen."
 
 msgid "Advanced"
 msgstr "Erweitert"
@@ -491,7 +478,7 @@ msgid "Advanced Options"
 msgstr "Erweiterte Optionen"
 
 msgid "Advanced Video Enhancement Setup"
-msgstr ""
+msgstr "Erweiterte A/V Einstellungen"
 
 msgid "Advanced Video Setup"
 msgstr "Erweiterte Video-Einstellungen"
@@ -502,13 +489,8 @@ msgstr "Erweiterte Wiederherstellung"
 msgid "After event"
 msgstr "Nach dem Ereignis"
 
-msgid ""
-"After the start wizard is completed, you need to protect single services. "
-"Refer to your dreambox's manual on how to do that."
-msgstr ""
-"Nachdem der Startassistent beendet wurde, müssen Sie noch die einzelnen "
-"Sender schützen. Wie Sie dies tun können, entnehmen Sie bitte dem Handbuch "
-"Ihrer Dreambox."
+msgid "After the start wizard is completed, you need to protect single services. Refer to your dreambox's manual on how to do that."
+msgstr "Nachdem der Startassistent beendet wurde, müssen Sie noch die einzelnen Sender schützen. Wie Sie dies tun können, entnehmen Sie bitte dem Handbuch Ihrer Dreambox."
 
 msgid "Album"
 msgstr "Album"
@@ -529,7 +511,7 @@ msgid "Alternative services tuner priority"
 msgstr "Tuner-Priorität bei Alternativen Services"
 
 msgid "Always ask before sending"
-msgstr ""
+msgstr "Immer nachfragen vor dem Senden."
 
 msgid "An empty filename is illegal."
 msgstr "Leerer Dateiname nicht erlaubt."
@@ -538,7 +520,7 @@ msgid "An unknown error occured!"
 msgstr "Es ist ein unbekannter Fehler aufgetreten!"
 
 msgid "Anonymize crashlog?"
-msgstr ""
+msgstr "Crashlogs anonymisieren ?"
 
 msgid "Arabic"
 msgstr "Arabisch"
@@ -554,9 +536,11 @@ msgid ""
 "Are you sure you want to delete\n"
 "following backup:\n"
 msgstr ""
+"Sind Sie sicher, dass Sie das folgende Backup\n"
+"löschen möchten:\n"
 
 msgid "Are you sure you want to exit this wizard?"
-msgstr ""
+msgstr "Sind Sie sicher, dass Sie diesen Assistenten verlassen möchten?"
 
 msgid ""
 "Are you sure you want to restart your network interfaces?\n"
@@ -569,11 +553,15 @@ msgid ""
 "Are you sure you want to restore\n"
 "following backup:\n"
 msgstr ""
+"Sind Sie sicher, dass Sie das folgende Backup\n"
+"wiederherstellen möchten:\n"
 
 msgid ""
 "Are you sure you want to restore your Enigma2 backup?\n"
 "Enigma2 will restart after the restore"
 msgstr ""
+"Wollen Sie wirklich ihr Enigma2 Backup wiederherstellen ?\n"
+"Enigma2 wird danach neu gestartet !"
 
 msgid "Artist"
 msgstr "Künstler"
@@ -594,7 +582,7 @@ msgid "Audio Options..."
 msgstr "Audio-Optionen..."
 
 msgid "Author: "
-msgstr ""
+msgstr "Autor:"
 
 msgid "Authoring mode"
 msgstr "Ablaufmodus"
@@ -630,7 +618,7 @@ msgid "BB"
 msgstr "BB"
 
 msgid "BER"
-msgstr ""
+msgstr "BER"
 
 msgid "BER:"
 msgstr "BER:"
@@ -639,7 +627,7 @@ msgid "Back"
 msgstr "Zurück"
 
 msgid "Background"
-msgstr ""
+msgstr "Hintergrund"
 
 msgid "Backup"
 msgstr "Sicherung"
@@ -657,11 +645,10 @@ msgid "Backup failed."
 msgstr "Sicherung fehlgeschlagen."
 
 msgid "Backup is done. Please press OK to see the result."
-msgstr ""
-"Sicherung wurde durchgeführt. Bitte drücken Sie OK, um das Ergebnis zu sehen."
+msgstr "Sicherung wurde durchgeführt. Bitte drücken Sie OK, um das Ergebnis zu sehen."
 
 msgid "Backup is running..."
-msgstr ""
+msgstr "Backup wird ausgeführt..."
 
 msgid "Backup system settings"
 msgstr "Einstellungen sichern"
@@ -690,14 +677,17 @@ msgstr "Verhalten beim Stoppen eines Films"
 msgid "Behavior when a movie reaches the end"
 msgstr "Verhalten beim Filmende"
 
+msgid "Bitrate:"
+msgstr ""
+
 msgid "Block noise reduction"
 msgstr ""
 
 msgid "Blue boost"
-msgstr ""
+msgstr "Blauanteil erhöhen"
 
 msgid "Bookmarks"
-msgstr ""
+msgstr "Lesezeichen"
 
 msgid "Brightness"
 msgstr "Helligkeit"
@@ -714,13 +704,11 @@ msgstr "Auf DVD brennen..."
 msgid "Bus: "
 msgstr "Bus:"
 
-msgid ""
-"By pressing the OK Button on your remote control, the info bar is being "
-"displayed."
+msgid "By pressing the OK Button on your remote control, the info bar is being displayed."
 msgstr "Durch Drücken der OK-Taste wird die Infobar angezeigt."
 
 msgid "C"
-msgstr ""
+msgstr "C"
 
 msgid "C-Band"
 msgstr "C-Band"
@@ -729,7 +717,7 @@ msgid "CF Drive"
 msgstr "CF-Laufwerk"
 
 msgid "CI assignment"
-msgstr ""
+msgstr "CI-Zuweisung"
 
 msgid "CVBS"
 msgstr "CVBS"
@@ -747,7 +735,7 @@ msgid "Cancel"
 msgstr "Abbruch"
 
 msgid "Cannot parse feed directory"
-msgstr ""
+msgstr "Konnte das Feed Verzeichnis nicht lesen."
 
 msgid "Capacity: "
 msgstr "Kapazität: "
@@ -777,7 +765,7 @@ msgid "Change setup pin"
 msgstr "Einstellungen-Pincode ändern"
 
 msgid "Change step size"
-msgstr ""
+msgstr "Schrittweite ändern."
 
 msgid "Channel"
 msgstr "Kanal"
@@ -812,6 +800,9 @@ msgstr "Überprüfe Dateisystem..."
 msgid "Choose Tuner"
 msgstr "Tuner wählen"
 
+msgid "Choose a wireless network"
+msgstr "Wählen Sie ein Funk Netzwerk"
+
 msgid "Choose backup files"
 msgstr "Wählen Sie die zu sichernden Dateien"
 
@@ -843,13 +834,13 @@ msgid "Cleanup"
 msgstr "Aufräumen"
 
 msgid "Cleanup Wizard"
-msgstr ""
+msgstr "Aufräumassistent"
 
 msgid "Cleanup Wizard settings"
-msgstr ""
+msgstr "Aufräumassistent Einstellungen"
 
 msgid "CleanupWizard"
-msgstr ""
+msgstr "Aufräumassistent"
 
 msgid "Clear before scan"
 msgstr "Vor der Suche löschen"
@@ -861,7 +852,7 @@ msgid "Close"
 msgstr "Schließen"
 
 msgid "Close title selection"
-msgstr ""
+msgstr "Titelauswahl schließen"
 
 msgid "Code rate high"
 msgstr "Empfangsrate hoch"
@@ -897,13 +888,13 @@ msgid "Common Interface"
 msgstr "Common Interface"
 
 msgid "Common Interface Assignment"
-msgstr ""
+msgstr "Common Interface Zuweisung"
 
 msgid "CommonInterface"
-msgstr ""
+msgstr "Common Interface"
 
 msgid "Communication"
-msgstr ""
+msgstr "Kommunikation"
 
 msgid "Compact Flash"
 msgstr "Compact Flash"
@@ -918,11 +909,26 @@ msgid "Complex (allows mixing audio tracks and aspects)"
 msgstr "Komplex (erlaubt Mischen versch. Ton-u. Bildformate)"
 
 msgid "Config"
-msgstr ""
+msgstr "Konfiguration"
 
 msgid "Configuration Mode"
 msgstr "Konfiguration"
 
+msgid "Configure interface"
+msgstr "Netzwerkkarte konfigurieren"
+
+msgid "Configure nameservers"
+msgstr "DNS-Server konfigurieren"
+
+msgid "Configure your internal LAN"
+msgstr "Internes Netzwerk konfigurieren"
+
+msgid "Configure your network again"
+msgstr "Netzwerk erneut konfigurieren"
+
+msgid "Configure your wireless LAN again"
+msgstr "Funknetzwerk erneut konfigurieren"
+
 msgid "Configuring"
 msgstr "Konfiguriere"
 
@@ -930,7 +936,10 @@ msgid "Conflicting timer"
 msgstr "In Konflikt stehender Timer"
 
 msgid "Connect"
-msgstr ""
+msgstr "Verbinden"
+
+msgid "Connect to a Wireless Network"
+msgstr "Mit Funknetzwerk verbinden"
 
 msgid "Connected to"
 msgstr "Verbunden mit"
@@ -939,7 +948,7 @@ msgid "Connected to Fritz!Box!"
 msgstr "Mit Fritz!Box verbunden!"
 
 msgid "Connected!"
-msgstr ""
+msgstr "Verbunden!"
 
 msgid "Connecting to Fritz!Box..."
 msgstr "Verbinde zur Fritz!Box..."
@@ -961,7 +970,7 @@ msgid "Content does not fit on DVD!"
 msgstr "Inhalt passt nicht auf die DVD!"
 
 msgid "Continue"
-msgstr ""
+msgstr "Weiter"
 
 msgid "Continue in background"
 msgstr "Im Hintergrund fortsetzen"
@@ -973,9 +982,7 @@ msgid "Contrast"
 msgstr "Kontrast"
 
 msgid "Could not connect to Dreambox .NFI Image Feed Server:"
-msgstr ""
-"Verbindung zum Dreambox .NFI Image Feed Server konnte nicht hergestellt "
-"werden:"
+msgstr "Verbindung zum Dreambox .NFI Image Feed Server konnte nicht hergestellt werden:"
 
 msgid "Could not load Medium! No disc inserted?"
 msgstr "Konnte das Medium nicht laden! Keine DVD eingelegt?"
@@ -985,26 +992,30 @@ msgid "Couldn't record due to conflicting timer %s"
 msgstr "Aufnahme wegen in Konflikt stehenedem timer %s fehlgeschlagen"
 
 msgid "Crashlog settings"
-msgstr ""
+msgstr "Crashlog Einstellungen"
 
 msgid "CrashlogAutoSubmit"
-msgstr ""
+msgstr "Crashlog Übermittlung"
 
 msgid "CrashlogAutoSubmit settings"
-msgstr ""
+msgstr "Crashlog Einstellungen"
 
 msgid "CrashlogAutoSubmit settings..."
-msgstr ""
+msgstr "Crashlog Einstellungen"
 
 msgid ""
 "Crashlogs found!\n"
 "Send them to Dream Multimedia ?"
 msgstr ""
+"Crashlogs wurden gefunden!\n"
+"Wollen Sie diese an Dream Multimedia übermitteln?"
 
 msgid ""
 "Crashlogs found!\n"
 "Send them to Dream Multimedia?"
 msgstr ""
+"Crashlogs wurden gefunden!\n"
+"Wollen Sie diese an Dream Multimedia übermitteln?"
 
 msgid "Create DVD-ISO"
 msgstr "DVD-ISO erstellen"
@@ -1029,7 +1040,7 @@ msgid "Current settings:"
 msgstr "Aktuelle Einstellungen:"
 
 msgid "Current value: "
-msgstr ""
+msgstr "Aktueller Wert:"
 
 msgid "Current version:"
 msgstr "Aktuelle Version:"
@@ -1056,10 +1067,10 @@ msgid "Czech"
 msgstr "Tschechisch"
 
 msgid "D"
-msgstr ""
+msgstr "D"
 
 msgid "DHCP"
-msgstr ""
+msgstr "DHCP"
 
 msgid "DVB-S"
 msgstr "DVB-S"
@@ -1068,13 +1079,13 @@ msgid "DVB-S2"
 msgstr "DVB-S2"
 
 msgid "DVD File Browser"
-msgstr ""
+msgstr "DVD Datei Browser"
 
 msgid "DVD Player"
-msgstr ""
+msgstr "DVD Player"
 
 msgid "DVD Titlelist"
-msgstr ""
+msgstr "DVD Titelliste"
 
 msgid "DVD media toolbox"
 msgstr ""
@@ -1086,22 +1097,22 @@ msgid "Date"
 msgstr "Datum"
 
 msgid "Decide if you want to enable or disable the Cleanup Wizard."
-msgstr ""
+msgstr "Entscheiden Sie ob Sie den Aufräumassistenten aktivieren oder deaktivieren möchten."
 
 msgid "Decide what should be done when crashlogs are found."
-msgstr ""
+msgstr "Entscheiden Sie was passieren soll wenn Crashlogs gefundenen wurden."
 
 msgid "Decide what should happen to the crashlogs after submission."
-msgstr ""
+msgstr "Entscheiden Sie was mit übermittelten Crashlogs passieren soll."
 
 msgid "Deep Standby"
 msgstr "Ausschalten"
 
 msgid "Default"
-msgstr ""
+msgstr "Standard"
 
 msgid "Default Settings"
-msgstr ""
+msgstr "Voreinstellungen"
 
 msgid "Default services lists"
 msgstr "Standard Kanallisten"
@@ -1116,7 +1127,7 @@ msgid "Delete"
 msgstr "Löschen"
 
 msgid "Delete crashlogs"
-msgstr ""
+msgstr "Crashlogs löschen"
 
 msgid "Delete entry"
 msgstr "Eintrag löschen"
@@ -1162,8 +1173,11 @@ msgstr "DiSEqC-Modus"
 msgid "DiSEqC repeats"
 msgstr "DiSEqC-Wiederholungen"
 
+msgid "DiSEqC-Tester settings"
+msgstr "DiSEqC-Tester Einstellungen"
+
 msgid "Dialing:"
-msgstr ""
+msgstr "Wählen:"
 
 msgid "Digital contour removal"
 msgstr ""
@@ -1175,6 +1189,9 @@ msgstr "Direkte Wiedergabe verknüpfter Titel ohne Menü"
 msgid "Directory %s nonexistent."
 msgstr "Verzeichnis %s existiert nicht."
 
+msgid "Directory browser"
+msgstr "Verzeichnis Browser"
+
 msgid "Disable"
 msgstr "Aus"
 
@@ -1185,7 +1202,7 @@ msgid "Disable Subtitles"
 msgstr "Untertitel abschalten"
 
 msgid "Disable crashlog reporting"
-msgstr ""
+msgstr "Crashlogübermittlung deaktivieren"
 
 msgid "Disable timer"
 msgstr "Timer deaktivieren"
@@ -1194,7 +1211,7 @@ msgid "Disabled"
 msgstr "Ausgeschaltet"
 
 msgid "Disconnect"
-msgstr ""
+msgstr "Trennen"
 
 #, python-format
 msgid ""
@@ -1222,7 +1239,7 @@ msgid "Display Setup"
 msgstr "Display-Einstellungen"
 
 msgid "Display and Userinterface"
-msgstr ""
+msgstr "Display und Userinterface"
 
 #, python-format
 msgid ""
@@ -1305,10 +1322,8 @@ msgstr "Wollen Sie die Einstellungen wiederherstellen?"
 msgid "Do you want to resume this playback?"
 msgstr "Möchten Sie die Wiedergabe an der letzten Stelle fortsetzen?"
 
-msgid ""
-"Do you want to submit your email address and name so that we can contact you "
-"if needed?"
-msgstr ""
+msgid "Do you want to submit your email address and name so that we can contact you if needed?"
+msgstr "Wollen Sie Ihre Email-Adresse und Namen übermitteln, so dass wir Sie falls nötig kontaktieren können?"
 
 msgid "Do you want to update your Dreambox?"
 msgstr "Wollen Sie Ihre Dreambox aktualisieren?"
@@ -1327,7 +1342,7 @@ msgid "Do you want to view a tutorial?"
 msgstr "Wollen Sie ein Tutorial sehen?"
 
 msgid "Don't ask, just send"
-msgstr ""
+msgstr "Nicht nachfragen, direkt senden"
 
 msgid "Don't stop current event but disable coming events"
 msgstr "Aktuelle Aufnahme nicht beenden aber zukünftige deaktivieren"
@@ -1342,8 +1357,7 @@ msgstr "Beendet - %d installierte oder aktualisierte Pakete mit %d Fehlern"
 
 #, python-format
 msgid "Done - Installed, upgraded or removed %d packages with %d errors"
-msgstr ""
-"Beendet - %d Pakete mit %d Fehlern installiert, aktualisiert oder entfernt"
+msgstr "Beendet - %d Pakete mit %d Fehlern installiert, aktualisiert oder entfernt"
 
 msgid "Download"
 msgstr "Herunterladen"
@@ -1373,13 +1387,13 @@ msgid "Dreambox format data DVD (HDTV compatible)"
 msgstr "Daten-DVD im Dreambox-Format (HDTV-kompatibel)"
 
 msgid "Dreambox software because updates are available."
-msgstr ""
+msgstr "Dreambox Software, da Aktualisierungen verfügbar sind."
 
 msgid "Dutch"
 msgstr "Holländisch"
 
 msgid "Dynamic contrast"
-msgstr ""
+msgstr "Dynamischer Kontrast"
 
 msgid "E"
 msgstr "O"
@@ -1422,7 +1436,7 @@ msgid "Edit title"
 msgstr "Titel schneiden"
 
 msgid "Edit upgrade source url."
-msgstr ""
+msgstr "Update Quell-Url bearbeiten."
 
 msgid "Electronic Program Guide"
 msgstr "Elektronischer Programmführer"
@@ -1434,7 +1448,7 @@ msgid "Enable 5V for active antenna"
 msgstr "5V für aktive Antenne"
 
 msgid "Enable Cleanup Wizard?"
-msgstr ""
+msgstr "Aufräumassistent aktivieren?"
 
 msgid "Enable multiple bouquets"
 msgstr "Mehrere Bouquets erlauben"
@@ -1448,11 +1462,15 @@ msgstr "Timer aktivieren"
 msgid "Enabled"
 msgstr "Eingeschaltet"
 
+#, python-format
+msgid "Encrypted: %s"
+msgstr "verschlüsselt: %s"
+
 msgid "Encryption"
 msgstr "Verschlüsselung"
 
 msgid "Encryption Key"
-msgstr "WLAN Sicherheitsschlüssel"
+msgstr "WLAN-Sicherheitsschlüssel"
 
 msgid "Encryption Keytype"
 msgstr "Passwortverschlüsselungstyp"
@@ -1460,6 +1478,9 @@ msgstr "Passwortverschlüsselungstyp"
 msgid "Encryption Type"
 msgstr "Verschlüssellungsart"
 
+msgid "Encryption:"
+msgstr "Verschlüsselung:"
+
 msgid "End time"
 msgstr "Endzeit"
 
@@ -1500,10 +1521,10 @@ msgid "Enter Rewind at speed"
 msgstr "Anfängliche Rücklaufgeschwindigkeit eingeben"
 
 msgid "Enter WLAN network name/SSID:"
-msgstr "WLAN Netzwerkname/SSID eingeben:"
+msgstr "WLAN-Netzwerkname/SSID eingeben:"
 
 msgid "Enter WLAN passphrase/key:"
-msgstr "WLAN Schlüssel/Passwort eingeben:"
+msgstr "WLAN-Schlüssel/Passwort eingeben:"
 
 msgid "Enter main menu..."
 msgstr "Öffne Hauptmenü..."
@@ -1512,7 +1533,7 @@ msgid "Enter the service pin"
 msgstr "Geben Sie den Kanal-Pincode ein"
 
 msgid "Enter your email address so that we can contact you if needed."
-msgstr ""
+msgstr "Bitte geben Sie Ihre Email-Adresse ein, damit wir Sie bei bedarf kontaktieren können."
 
 msgid "Error"
 msgstr "Fehler"
@@ -1529,7 +1550,7 @@ msgstr ""
 "Erneut versuchen?"
 
 msgid "Estonian"
-msgstr ""
+msgstr "Estnisch"
 
 msgid "Eventview"
 msgstr "Programmübersicht"
@@ -1544,7 +1565,7 @@ msgid "Execution finished!!"
 msgstr "Ausführung beendet!"
 
 msgid "Exif"
-msgstr ""
+msgstr "Exif"
 
 msgid "Exit"
 msgstr "Beenden"
@@ -1552,8 +1573,11 @@ msgstr "Beenden"
 msgid "Exit editor"
 msgstr "Editor beenden"
 
+msgid "Exit network wizard"
+msgstr "Netzwerkassistent verlassen"
+
 msgid "Exit the cleanup wizard"
-msgstr ""
+msgstr "Aufräum-Assistenten verlassen"
 
 msgid "Exit the wizard"
 msgstr "Assistent beenden"
@@ -1610,7 +1634,7 @@ msgid "Finished"
 msgstr "Beendet"
 
 msgid "Finished configuring your network"
-msgstr "Netzwerkkonfiguration abgeschlossen"
+msgstr "Netzwerk-Konfiguration abgeschlossen"
 
 msgid "Finished restarting your network"
 msgstr "Netzwerkneustart abgeschlossen"
@@ -1618,11 +1642,8 @@ msgstr "Netzwerkneustart abgeschlossen"
 msgid "Finnish"
 msgstr "Finnisch"
 
-msgid ""
-"First we need to download the latest boot environment for the USB flasher."
-msgstr ""
-"Zuerst muss die neueste Bootumgebung für den USB-Flasher heruntergeladen "
-"werden."
+msgid "First we need to download the latest boot environment for the USB flasher."
+msgstr "Zuerst muss die neueste Bootumgebung für den USB-Flasher heruntergeladen werden."
 
 msgid "Flash"
 msgstr ""
@@ -1631,13 +1652,13 @@ msgid "Flashing failed"
 msgstr "Flashen fehlgeschlagen"
 
 msgid "Following tasks will be done after you press continue!"
-msgstr ""
+msgstr "Folgende Aktivitäten werden ausgeführt nachdem Sie Weiter gedrückt haben!"
 
 msgid "Format"
 msgstr "Formatieren"
 
 msgid "Frame repeat count during non-smooth winding"
-msgstr ""
+msgstr "Einzelbild-Wiederholung beim nicht flüssigen Spulen"
 
 msgid "Frame size in full view"
 msgstr ""
@@ -1694,13 +1715,13 @@ msgid "General AC3 Delay"
 msgstr "Allgemeine AC3 Verzögerung"
 
 msgid "General AC3 delay"
-msgstr ""
+msgstr "Allgemeine AC3 Verzögerung"
 
 msgid "General PCM Delay"
 msgstr "Allgemeine PCM Verzögerung"
 
 msgid "General PCM delay"
-msgstr ""
+msgstr "Allgemeine PCM Verzögerung"
 
 msgid "Genre"
 msgstr "Kategorie"
@@ -1724,7 +1745,7 @@ msgid "Greek"
 msgstr "Griechisch"
 
 msgid "Green boost"
-msgstr ""
+msgstr "Grünanteil erhöhen"
 
 msgid "Guard Interval"
 msgstr ""
@@ -1744,6 +1765,9 @@ msgstr "Festplatten-Standby nach"
 msgid "Hidden network SSID"
 msgstr "Verstecke Netzwerk SSID"
 
+msgid "Hidden networkname"
+msgstr "versteckte SSID"
+
 msgid "Hierarchy Information"
 msgstr "Hierarchieinformationen"
 
@@ -1754,16 +1778,16 @@ msgid "High bitrate support"
 msgstr "Kann hohe Datenraten verarbeiten"
 
 msgid "Horizontal"
-msgstr ""
+msgstr "Horizontal"
 
 msgid "How many minutes do you want to record?"
 msgstr "Wie viele Minuten möchten Sie aufnehmen?"
 
 msgid "How to handle found crashlogs?"
-msgstr ""
+msgstr "Wie sollen gefundene Crashlogs behandelt werden?"
 
 msgid "Hue"
-msgstr ""
+msgstr "Farbton"
 
 msgid "Hungarian"
 msgstr "Ungarisch"
@@ -1792,24 +1816,13 @@ msgstr ""
 "drücken, um zurückzuspringen."
 
 msgid ""
-"If your TV has a brightness or contrast enhancement, disable it. If there is "
-"something called \"dynamic\", set it to standard. Adjust the backlight level "
-"to a value suiting your taste. Turn down contrast on your TV as much as "
-"possible.\n"
-"Then turn the brightness setting as low as possible, but make sure that the "
-"two lowermost shades of gray stay distinguishable.\n"
-"Do not care about the bright shades now. They will be set up in the next "
-"step.\n"
+"If your TV has a brightness or contrast enhancement, disable it. If there is something called \"dynamic\", set it to standard. Adjust the backlight level to a value suiting your taste. Turn down contrast on your TV as much as possible.\n"
+"Then turn the brightness setting as low as possible, but make sure that the two lowermost shades of gray stay distinguishable.\n"
+"Do not care about the bright shades now. They will be set up in the next step.\n"
 "If you are happy with the result, press OK."
 msgstr ""
-"Falls Ihr Fernseher über Helligkeits- oder Kontraststeigerung verfügt, "
-"deaktivieren Sie diese. Falls es eine \"Dynamik\"-Einstellung gibt, sollte "
-"sie auf Standard gesetzt werden. Verändern Sie die Intensität der "
-"Hintergrundbeleuchtung nach Ihrem Geschmack. Verringern Sie den Kontrast "
-"Ihres Fernsehers soweit wie möglich.\n"
-"Verringern Sie anschließend die Helligkeit soweit wie möglich. Stellen Sie "
-"dabei sicher, dass die beiden untersten Grauschattierungen erkennbar "
-"bleiben. Die hellen Schattierungen werden im folgenden Schritt eingestellt.\n"
+"Falls Ihr Fernseher über Helligkeits- oder Kontraststeigerung verfügt, deaktivieren Sie diese. Falls es eine \"Dynamik\"-Einstellung gibt, sollte sie auf Standard gesetzt werden. Verändern Sie die Intensität der Hintergrundbeleuchtung nach Ihrem Geschmack. Verringern Sie den Kontrast Ihres Fernsehers soweit wie möglich.\n"
+"Verringern Sie anschließend die Helligkeit soweit wie möglich. Stellen Sie dabei sicher, dass die beiden untersten Grauschattierungen erkennbar bleiben. Die hellen Schattierungen werden im folgenden Schritt eingestellt.\n"
 "Drücken Sie OK, wenn Sie mit dem Ergebnis zufrieden sind."
 
 msgid "Image flash utility"
@@ -1821,14 +1834,11 @@ msgstr "Image-Aktualisierung"
 msgid "In Progress"
 msgstr "In Bearbeitung"
 
-msgid ""
-"In order to record a timer, the TV was switched to the recording service!\n"
-msgstr ""
-"Um die Timeraufnahme durchführen zu können, wurde auf den aufzunehmenden "
-"Sender umgeschaltet!\n"
+msgid "In order to record a timer, the TV was switched to the recording service!\n"
+msgstr "Um die Timeraufnahme durchführen zu können, wurde auf den aufzunehmenden Sender umgeschaltet!\n"
 
 msgid "Include your email and name (optional) in the mail?"
-msgstr ""
+msgstr "Email und Name (optional) hinzufügen?"
 
 msgid "Increased voltage"
 msgstr "Erhöhte Spannung"
@@ -1864,7 +1874,7 @@ msgid "Input"
 msgstr "Eingabe"
 
 msgid "Install"
-msgstr ""
+msgstr "Installiere"
 
 msgid "Install a new image with a USB stick"
 msgstr "Neues Image mittels USB Stick installieren"
@@ -1873,19 +1883,19 @@ msgid "Install a new image with your web browser"
 msgstr "Neues Image mittels Webbrowser installieren"
 
 msgid "Install extensions."
-msgstr ""
+msgstr "Erweiterungen installieren."
 
 msgid "Install local extension"
-msgstr ""
+msgstr "Erweiterungen installieren"
 
 msgid "Install or remove finished."
-msgstr ""
+msgstr "Installation oder Deinstallation beendet."
 
 msgid "Install settings, skins, software..."
 msgstr ""
 
 msgid "Installation finished."
-msgstr ""
+msgstr "Installation beendet."
 
 msgid "Installing"
 msgstr "Installiere"
@@ -1911,6 +1921,10 @@ msgstr "Eingebaute Netzwerkschnittstelle"
 msgid "Integrated Wireless"
 msgstr "Integriertes WLAN"
 
+#, python-format
+msgid "Interface: %s"
+msgstr "Adapter: %s"
+
 msgid "Intermediate"
 msgstr "Fortgeschritten"
 
@@ -1931,7 +1945,7 @@ msgid "Invert display"
 msgstr "Display invertieren"
 
 msgid "Ipkg"
-msgstr ""
+msgstr "Ipkg"
 
 msgid "Is this videomode ok?"
 msgstr "Diesen Videomodus beibehalten?"
@@ -1942,12 +1956,13 @@ msgstr "Italienisch"
 msgid "Job View"
 msgstr "Jobansicht"
 
-#. TRANSLATORS: (aspect ratio policy: display as fullscreen, even if this breaks the aspect)
+#. TRANSLATORS: (aspect ratio policy: display as fullscreen, even if this
+#. breaks the aspect)
 msgid "Just Scale"
 msgstr ""
 
 msgid "Keyboard"
-msgstr ""
+msgstr "Tastatur"
 
 msgid "Keyboard Map"
 msgstr "Tastaturlayout"
@@ -1980,7 +1995,7 @@ msgid "Language..."
 msgstr "Sprache..."
 
 msgid "Last config"
-msgstr ""
+msgstr "Letzte Konfiguration"
 
 msgid "Last speed"
 msgstr "Letzte Geschwindigkeit"
@@ -1989,7 +2004,7 @@ msgid "Latitude"
 msgstr "Breitengrad"
 
 msgid "Latvian"
-msgstr ""
+msgstr "Lettisch"
 
 msgid "Leave DVD Player?"
 msgstr "DVD Player beenden?"
@@ -1997,7 +2012,8 @@ msgstr "DVD Player beenden?"
 msgid "Left"
 msgstr "Links"
 
-#. TRANSLATORS: (aspect ratio policy: black bars on top/bottom) in doubt, keep english term.
+#. TRANSLATORS: (aspect ratio policy: black bars on top/bottom) in doubt, keep
+#. english term.
 msgid "Letterbox"
 msgstr ""
 
@@ -2008,7 +2024,7 @@ msgid "Limit west"
 msgstr "West-Limit"
 
 msgid "Limited character set for recording filenames"
-msgstr ""
+msgstr "Reduzierter Zeichensatz für Aufnahme-Dateinamen"
 
 msgid "Limits off"
 msgstr "Limits ausschalten"
@@ -2016,6 +2032,9 @@ msgstr "Limits ausschalten"
 msgid "Limits on"
 msgstr "Limits aktiviert"
 
+msgid "Link Quality:"
+msgstr "Qualität:"
+
 msgid "Link:"
 msgstr "Verbindung:"
 
@@ -2044,7 +2063,7 @@ msgid "Lock:"
 msgstr "Signal:"
 
 msgid "Log results to harddisk"
-msgstr ""
+msgstr "Ergebnisse auf die Festplatte schreiben"
 
 msgid "Long Keypress"
 msgstr "langer Tastendruck"
@@ -2091,6 +2110,10 @@ msgstr "Nachlauf hinter Aufnahme"
 msgid "Margin before record (minutes)"
 msgstr "Vorlauf bei Aufnahme (in Minuten)"
 
+#, python-format
+msgid "Max. Bitrate: %s"
+msgstr ""
+
 msgid "Media player"
 msgstr "Media Player"
 
@@ -2158,7 +2181,7 @@ msgid "Multi EPG"
 msgstr "Multi-EPG"
 
 msgid "Multimedia"
-msgstr ""
+msgstr "Multimedia"
 
 msgid "Multiple service support"
 msgstr "Kann mehrere Sender entschlüsseln"
@@ -2206,10 +2229,10 @@ msgid "Netmask"
 msgstr "Netzmaske"
 
 msgid "Network"
-msgstr ""
+msgstr "Netzwerk"
 
 msgid "Network Configuration..."
-msgstr "Netzwerk Konfiguration"
+msgstr "Netzwerk-Konfiguration"
 
 msgid "Network Mount"
 msgstr "Netzwerk-Mount"
@@ -2220,6 +2243,9 @@ msgstr "Netzwerk SSID"
 msgid "Network Setup"
 msgstr "Netzwerkeinstellungen"
 
+msgid "Network Wizard"
+msgstr "Netzwerkassistent"
+
 msgid "Network scan"
 msgstr "Netzwerksuche"
 
@@ -2262,6 +2288,9 @@ msgstr "Kein (unterstütztes) DVD-Laufwerk gefunden!"
 msgid "No 50 Hz, sorry. :("
 msgstr "50 Hz nicht möglich. :("
 
+msgid "No Connection"
+msgstr "Keine Verbindung"
+
 msgid "No HDD found or HDD not initialized!"
 msgstr ""
 "Keine Festplatte gefunden oder\n"
@@ -2281,13 +2310,13 @@ msgstr ""
 "(Zeit lief beim Lesen der PAT ab)"
 
 msgid "No description available."
-msgstr ""
+msgstr "Keine Beschreibung verfügbar."
 
 msgid "No details for this image file"
 msgstr "Keine Details zum Image verfügbar"
 
 msgid "No displayable files on this medium found!"
-msgstr ""
+msgstr "Keine anzeigbaren Dateien auf diesem Medium gefunden!"
 
 msgid "No event info found, recording indefinitely."
 msgstr "Keine EPG-Daten gefunden. Starte unbegrenzte Aufnahme."
@@ -2295,11 +2324,11 @@ msgstr "Keine EPG-Daten gefunden. Starte unbegrenzte Aufnahme."
 msgid "No free tuner!"
 msgstr "Kein freier Tuner"
 
-msgid ""
-"No packages were upgraded yet. So you can check your network and try again."
-msgstr ""
-"Es wurden noch keine Pakete aktualisiert. Bitte überprüfen Sie das Netzwerk "
-"und versuchen Sie es erneut."
+msgid "No networks found"
+msgstr "Keine Netzwerke gefunden"
+
+msgid "No packages were upgraded yet. So you can check your network and try again."
+msgstr "Es wurden noch keine Pakete aktualisiert. Bitte überprüfen Sie das Netzwerk und versuchen Sie es erneut."
 
 msgid "No picture on TV? Press EXIT and retry."
 msgstr ""
@@ -2316,8 +2345,7 @@ msgid "No tags are set on these movies."
 msgstr ""
 
 msgid "No tuner is configured for use with a diseqc positioner!"
-msgstr ""
-"Es wurde kein Tuner für die Benutzung eines DiSEqC-Rotors konfiguriert."
+msgstr "Es wurde kein Tuner für die Benutzung eines DiSEqC-Rotors konfiguriert."
 
 msgid ""
 "No tuner is enabled!\n"
@@ -2347,29 +2375,29 @@ msgstr ""
 "Wollen Sie den Service-PIN jetzt ändern?\n"
 "Wenn Sie 'NEIN' wählen, bleibt der Einstellungen-Schutz deaktiviert!"
 
+msgid "No wireless networks found! Please refresh."
+msgstr "Keine Funknetzwerke gefunden! Bitte aktualisieren."
+
 msgid ""
 "No working local network adapter found.\n"
-"Please verify that you have attached a network cable and your network is "
-"configured correctly."
+"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."
+"Stellen Sie sicher, dass Sie ein Netzwerkkabel angeschlossen haben und das Ihr Netzwerk richtig konfiguriert ist."
 
 msgid ""
 "No working wireless network adapter found.\n"
-"Please verify that you have attached a compatible WLAN device and your "
-"network is configured correctly."
+"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."
+"Kein funktionierender 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 network interface found.\n"
-" Please verify that you have attached a compatible WLAN device or enable "
-"your local network interface."
+" Please verify that you have attached a compatible WLAN device or enable your local network interface."
 msgstr ""
+"Keine funktionierende WLAN-Verbindung gefunden.\n"
+"Bitte prüfen Sie ob Sie ein kompatibles WLAN-Gerät angeschlossen haben oder aktivieren Sie die LAN-Verbindung."
 
 msgid "No, but restart from begin"
 msgstr "Nein, aber von Anfang an neu beginnen"
@@ -2381,18 +2409,19 @@ msgid "No, just start my dreambox"
 msgstr "Nein, nur die Dreambox starten"
 
 msgid "No, not now"
-msgstr ""
+msgstr "Nein, jetzt nicht"
 
 msgid "No, scan later manually"
 msgstr "Nein, später suchen."
 
 msgid "No, send them never"
-msgstr ""
+msgstr "Nein, niemals senden"
 
 msgid "None"
 msgstr "Keins"
 
-#. TRANSLATORS: (aspect ratio policy: display as fullscreen, with stretching the left/right)
+#. TRANSLATORS: (aspect ratio policy: display as fullscreen, with stretching
+#. the left/right)
 msgid "Nonlinear"
 msgstr "Nicht linear"
 
@@ -2403,12 +2432,8 @@ msgid "Norwegian"
 msgstr "Norwegisch"
 
 #, python-format
-msgid ""
-"Not enough diskspace. Please free up some diskspace and try again. (%d MB "
-"required, %d MB available)"
-msgstr ""
-"Nicht genügend freier Speicherplatz. Bitte löschen Sie nicht mehr benötigte "
-"Dateien und versuchen es erneut. (%d MB benötigt, %d MB verfügbar)"
+msgid "Not enough diskspace. Please free up some diskspace and try again. (%d MB required, %d MB available)"
+msgstr "Nicht genügend freier Speicherplatz. Bitte löschen Sie nicht mehr benötigte Dateien und versuchen es erneut. (%d MB benötigt, %d MB verfügbar)"
 
 msgid ""
 "Nothing to scan!\n"
@@ -2420,15 +2445,8 @@ msgstr ""
 msgid "Now Playing"
 msgstr "Wiedergabe läuft"
 
-msgid ""
-"Now, use the contrast setting to turn up the brightness of the background as "
-"much as possible, but make sure that you can still see the difference "
-"between the two brightest levels of shades.If you have done that, press OK."
-msgstr ""
-"Benutzen Sie jetzt die Kontrastregelung, um die Helligkeit des Hintergrunds "
-"so weit wie möglich zu erhöhen. Achten Sie darauf, dass der Unterschied "
-"zwischen den beiden hellsten Schattierungen erkennbar bleibt. Drücken Sie "
-"anschließend OK."
+msgid "Now, use the contrast setting to turn up the brightness of the background as much as possible, but make sure that you can still see the difference between the two brightest levels of shades.If you have done that, press OK."
+msgstr "Benutzen Sie jetzt die Kontrastregelung, um die Helligkeit des Hintergrunds so weit wie möglich zu erhöhen. Achten Sie darauf, dass der Unterschied zwischen den beiden hellsten Schattierungen erkennbar bleibt. Drücken Sie anschließend OK."
 
 msgid "OK"
 msgstr "OK"
@@ -2437,10 +2455,10 @@ msgid "OK, guide me through the upgrade process"
 msgstr "OK, führen Sie mich durch den Aktualisierungsprozess"
 
 msgid "OK, remove another extensions"
-msgstr ""
+msgstr "OK, noch eine Erweiterung entfernen."
 
 msgid "OK, remove some extensions"
-msgstr ""
+msgstr "OK, Erweiterungen entfernen."
 
 msgid "OSD Settings"
 msgstr "OSD-Einstellungen"
@@ -2464,7 +2482,7 @@ msgid "Only Free scan"
 msgstr ""
 
 msgid "Optionally enter your name if you want to."
-msgstr ""
+msgstr "Optional können Sie hier Ihren Namen eingeben."
 
 msgid "Orbital Position"
 msgstr "Orbitposition"
@@ -2476,27 +2494,28 @@ msgid "PIDs"
 msgstr "PIDs"
 
 msgid "Package details for: "
-msgstr ""
+msgstr "Paketdetails für:"
 
 msgid "Package list update"
 msgstr "Paketlistenaktualisierung"
 
 msgid "Package removal failed.\n"
-msgstr ""
+msgstr "Deinstallation der Erweiterung fehlgeschlagen.\n"
 
 msgid "Package removed successfully.\n"
-msgstr ""
+msgstr "Erweiterung wurde erfolgreich deinstalliert.\n"
 
 msgid "Packet management"
 msgstr "Paketverwaltung"
 
 msgid "Packet manager"
-msgstr ""
+msgstr "Paketmanager"
 
 msgid "Page"
 msgstr "Seite"
 
-#. TRANSLATORS: (aspect ratio policy: cropped content on left/right) in doubt, keep english term
+#. TRANSLATORS: (aspect ratio policy: cropped content on left/right) in doubt,
+#. keep english term
 msgid "Pan&Scan"
 msgstr ""
 
@@ -2516,13 +2535,13 @@ msgid "Parental control type"
 msgstr "Jugendschutz-Typ"
 
 msgid "Password"
-msgstr ""
+msgstr "Passwort"
 
 msgid "Pause movie at end"
 msgstr "Am Filmende pausieren"
 
 msgid "Phone number"
-msgstr ""
+msgstr "Telefonnummer"
 
 msgid "PiPSetup"
 msgstr "PiP-Einstellung"
@@ -2530,7 +2549,8 @@ msgstr "PiP-Einstellung"
 msgid "PicturePlayer"
 msgstr "Bildbetrachter"
 
-#. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
+#. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep
+#. english term.
 msgid "Pillarbox"
 msgstr ""
 
@@ -2547,10 +2567,10 @@ msgid "Play Audio-CD..."
 msgstr "Audio-CD abspielen"
 
 msgid "Play DVD"
-msgstr ""
+msgstr "DVD abspielen"
 
 msgid "Play Music..."
-msgstr ""
+msgstr "Musik abspielen..."
 
 msgid "Play recorded movies..."
 msgstr "Aufgenommene Filme abspielen..."
@@ -2568,8 +2588,7 @@ msgid "Please check your network settings!"
 msgstr "Bitte überprüfen Sie Ihre Netzwerkeinstellungen"
 
 msgid "Please choose .NFI image file from feed server to download"
-msgstr ""
-"Bitte wählen Sie eine .NFI Image Datei zum Herunterladen vom Feed-Server"
+msgstr "Bitte wählen Sie eine .NFI Image Datei zum Herunterladen vom Feed-Server"
 
 msgid "Please choose an extension..."
 msgstr "Bitte eine Erweiterung auswählen..."
@@ -2578,15 +2597,24 @@ msgid "Please choose he package..."
 msgstr "Bitte wählen Sie das Paket aus..."
 
 msgid "Please choose the default services lists you want to install."
+msgstr "Bitte wählen Sie die Standard-Kanallisten, die Sie installieren wollen."
+
+msgid ""
+"Please configure or verify your Nameservers by filling out the required values.\n"
+"When you are ready press OK to continue."
 msgstr ""
-"Bitte wählen Sie die Standard-Kanallisten, die Sie installieren wollen."
+"Konfigurieren Sie Ihre DNS-Server durch Ausfüllen der entsprechenden Werte.\n"
+"Drücken Sie OK zum Fortfahren"
 
 msgid ""
-"Please disconnect all USB devices from your Dreambox and (re-)attach the "
-"target USB stick (minimum size is 64 MB) now!"
+"Please configure your internet connection by filling out the required values.\n"
+"When you are ready press OK to continue."
 msgstr ""
-"Bitte ziehen Sie jetzt alle USB-Geräte von Ihrer Dreambox ab und stecken "
-"(erneut) den zu benutzenden USB-Stick (Mindestgröße von 64 MB) ein!"
+"Konfigurieren Sie Ihr Netzwerk durch Ausfüllen der entsprechenden Werte.\n"
+"Drücken Sie OK zum Fortfahren"
+
+msgid "Please disconnect all USB devices from your Dreambox and (re-)attach the target USB stick (minimum size is 64 MB) now!"
+msgstr "Bitte ziehen Sie jetzt alle USB-Geräte von Ihrer Dreambox ab und stecken (erneut) den zu benutzenden USB-Stick (Mindestgröße von 64 MB) ein!"
 
 msgid "Please do not change any values unless you know what you are doing!"
 msgstr "Bitte ändern Sie keine Werte, falls Sie nicht wissen, was Sie tun!"
@@ -2613,18 +2641,16 @@ msgid "Please enter the old pin code"
 msgstr "Bitte den alten Pincode eingeben"
 
 msgid "Please enter your email address here:"
-msgstr ""
+msgstr "Bitte geben Sie hier Ihre Email-Adresse ein:"
 
 msgid "Please enter your name here (optional):"
-msgstr ""
+msgstr "Bitte geben Sie hier Ihren Namen ein (optional):"
 
 msgid "Please follow the instructions on the TV"
 msgstr "Bitte folgen Sie den Angaben auf Ihrem Fernseher."
 
-msgid ""
-"Please note that the previously selected media could not be accessed and "
-"therefore the default directory is being used instead."
-msgstr ""
+msgid "Please note that the previously selected media could not be accessed and therefore the default directory is being used instead."
+msgstr "Auf das zuletzt ausgewählte Medium konnte nicht zugegriffen werden, daher wird stattdessen das Standardverzeichnis benutzt."
 
 msgid "Please press OK to continue."
 msgstr "Zum Fortfahren bitte OK drücken."
@@ -2648,10 +2674,10 @@ msgid "Please select a subservice..."
 msgstr "Bitte einen Unterkanal auswählen..."
 
 msgid "Please select an extension to remove."
-msgstr ""
+msgstr "Bitte wählen Sie eine Erweiterung zum Deinstallieren."
 
 msgid "Please select an option below."
-msgstr ""
+msgstr "Bitte wählen Sie eine Option aus."
 
 msgid "Please select medium to use as backup location"
 msgstr "Bitte wählen Sie einen Datenträger für eine Sicherung"
@@ -2665,6 +2691,24 @@ msgstr "Bitte wählen Sie ein Ziel-Verzeichnis bzw. Datenträger"
 msgid "Please select the movie path..."
 msgstr "Bitte den Filmpfad angeben..."
 
+msgid ""
+"Please select the network interface that you want to use for your internet connection.\n"
+"\n"
+"Please press OK to continue."
+msgstr ""
+"Bitte wählen Sie die Netzwerkschnittstelle welche Sie für Ihren Internetzugang nutzen möchten.\n"
+"\n"
+"Drücken Sie OK zum Fortfahren"
+
+msgid ""
+"Please select the wireless network that you want to connect to.\n"
+"\n"
+"Please press OK to continue."
+msgstr ""
+"Bitte wählen Sie das Funknetzwerk zu dem Sie sich verbinden möchten.\n"
+"\n"
+"Drücken Sie OK zum Fortfahren."
+
 msgid "Please set up tuner B"
 msgstr "Einstellungen für Tuner B."
 
@@ -2683,28 +2727,30 @@ msgstr ""
 "Bouquet +/-, um die Größe zu ändern.\n"
 "OK zum Speichern, Exit zum Abbrechen."
 
-msgid ""
-"Please use the UP and DOWN keys to select your language. Afterwards press "
-"the OK button."
-msgstr ""
-"Bitte benutzen Sie die Hoch/Runter-Tasten, um Ihre Sprache auszuwählen. "
-"Danach drücken Sie bitte OK."
+msgid "Please use the UP and DOWN keys to select your language. Afterwards press the OK button."
+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..."
+msgstr "Bitte warten während die Netzwerk-Konfiguration aktiviert wird..."
 
 msgid "Please wait while removing selected package..."
-msgstr ""
+msgstr "Bitte warten Sie während die ausgewählten Erweiterungen deinstalliert werden..."
 
 msgid "Please wait while scanning is in progress..."
 msgstr "Bitte warten während des Suchvorgangs..."
 
 msgid "Please wait while searching for removable packages..."
-msgstr ""
+msgstr "Bitte warten Sie während nach deinstallierbaren Erweiterungen gesucht wird..."
 
 msgid "Please wait while we configure your network..."
 msgstr "Bitte warten während das Netzwerk konfiguriert wird..."
 
+msgid "Please wait while we prepare your network interfaces..."
+msgstr "Bitte warten während das Netzwerk konfiguriert wird..."
+
+msgid "Please wait while we test your network..."
+msgstr "Bitte warten während das Netzwerk überprüft wird..."
+
 msgid "Please wait while your network is restarting..."
 msgstr "Bitte warten während das Netzwerk neu startet..."
 
@@ -2781,7 +2827,7 @@ msgid "Press OK on your remote control to continue."
 msgstr "OK drücken zum Fortfahren."
 
 msgid "Press OK to activate the selected skin."
-msgstr ""
+msgstr "Drücken Sie OK um den selektierten Skin zu aktivieren."
 
 msgid "Press OK to activate the settings."
 msgstr "OK drücken zum Aktivieren."
@@ -2797,22 +2843,22 @@ msgid "Press OK to scan"
 msgstr "Zum Starten der Suche OK drücken."
 
 msgid "Press OK to select a Provider."
-msgstr ""
+msgstr "Drücken Sie OK um einen Provider auszuwählen."
 
 msgid "Press OK to select/deselect a CAId."
-msgstr ""
+msgstr "Drücken Sie OK um eine CAID zu selektieren/deselektieren."
 
 msgid "Press OK to start the scan"
 msgstr "Zum Starten der Suche OK drücken."
 
 msgid "Press OK to toggle the selection."
-msgstr ""
+msgstr "Drücken Sie OK um die Auswahl umzuschalten."
 
 msgid "Press OK to view full changelog"
-msgstr ""
+msgstr "Drücken Sie OK um das komplette Änderungsprotokoll zu betrachten."
 
 msgid "Press yellow to set this interface as default interface."
-msgstr ""
+msgstr "Drücken Sie Gelb um diese Schnittstelle als Standard zu setzen."
 
 msgid "Prev"
 msgstr "Zurück"
@@ -2827,7 +2873,7 @@ msgid "Priority"
 msgstr "Priorität"
 
 msgid "Process"
-msgstr ""
+msgstr "Aktivitätsanzeige"
 
 msgid "Properties of current title"
 msgstr "Eigenschaften des ausgewählten Titels"
@@ -2915,10 +2961,10 @@ msgid "Recording"
 msgstr "Aufnahmen"
 
 msgid "Recording(s) are in progress or coming up in few seconds!"
-msgstr "Zur Zeit sind Aufnahmen aktiv oder starten gleich!"
+msgstr "Zurzeit sind Aufnahmen aktiv oder starten gleich!"
 
 msgid "Recordings"
-msgstr ""
+msgstr "Aufnahmen"
 
 msgid "Recordings always have priority"
 msgstr "Aufnahmen haben immer Vorrang"
@@ -2926,6 +2972,9 @@ msgstr "Aufnahmen haben immer Vorrang"
 msgid "Reenter new pin"
 msgstr "Nochmals den Pincode eingeben"
 
+msgid "Refresh"
+msgstr "Aktualisieren"
+
 msgid "Refresh Rate"
 msgstr "Bildwiederholrate"
 
@@ -2936,7 +2985,7 @@ msgid "Reload"
 msgstr "aktualisieren"
 
 msgid "Remove"
-msgstr ""
+msgstr "Entfernen"
 
 msgid "Remove Bookmark"
 msgstr "Bookmark entfernen"
@@ -2951,7 +3000,7 @@ msgid "Remove currently selected title"
 msgstr "entferne aktuell ausgewählten Titel"
 
 msgid "Remove failed."
-msgstr ""
+msgstr "Entfernen fehlgeschlagen."
 
 msgid "Remove finished."
 msgstr "Entfernen abgeschlossen."
@@ -2972,10 +3021,7 @@ msgid "Remove title"
 msgstr "Titel entfernen"
 
 msgid "Removed successfully."
-msgstr ""
-
-msgid "Removeing"
-msgstr ""
+msgstr "Erfolgreich entfernt."
 
 msgid "Removing"
 msgstr "Entfernen"
@@ -2988,7 +3034,7 @@ msgid "Rename"
 msgstr "Umbenennen"
 
 msgid "Rename crashlogs"
-msgstr ""
+msgstr "Crashlogs umbenennen"
 
 msgid "Repeat"
 msgstr "Wiederholung"
@@ -3011,10 +3057,10 @@ msgid "Reset and renumerate title names"
 msgstr "Titelnamen zurücksetzen und neu nummerieren"
 
 msgid "Reset video enhancement settings to system defaults?"
-msgstr ""
+msgstr "Erweiterte A/V-Einstellungen auf Standardwerte zurücksetzten ?"
 
 msgid "Reset video enhancement settings to your last configuration?"
-msgstr ""
+msgstr "Erweiterte A/V-Einstellungen auf Ihre letzte Konfiguration zurücksetzten ?"
 
 msgid "Resolution"
 msgstr "Auflösung"
@@ -3041,10 +3087,10 @@ msgid "Restore"
 msgstr "Zurückspielen"
 
 msgid "Restore backups"
-msgstr ""
+msgstr "Einstellungen wiederherstellen"
 
 msgid "Restore is running..."
-msgstr ""
+msgstr "Wiederherstellung wird ausgeführt..."
 
 msgid "Restore running"
 msgstr "Sicherung läuft"
@@ -3052,12 +3098,8 @@ msgstr "Sicherung läuft"
 msgid "Restore system settings"
 msgstr "Einstellungen wiederherstellen"
 
-msgid ""
-"Restoring the settings is done. Please press OK to activate the restored "
-"settings now."
-msgstr ""
-"Die Einstellungen wurden wiederhergestellt. Drücken Sie OK, um die "
-"wiederhergestellten Einstellungen nun zu aktivieren."
+msgid "Restoring the settings is done. Please press OK to activate the restored settings now."
+msgstr "Die Einstellungen wurden wiederhergestellt. Drücken Sie OK, um diese nun zu aktivieren."
 
 msgid "Resume from last position"
 msgstr "An letzter Position fortsetzen"
@@ -3108,6 +3150,9 @@ msgstr ""
 msgid "SNR:"
 msgstr ""
 
+msgid "SSID:"
+msgstr ""
+
 msgid "Sat"
 msgstr "Sa"
 
@@ -3130,10 +3175,10 @@ msgid "Sats"
 msgstr ""
 
 msgid "Satteliteequipment"
-msgstr ""
+msgstr "Satteliten-Equipment"
 
 msgid "Saturation"
-msgstr ""
+msgstr "Sättigung"
 
 msgid "Saturday"
 msgstr "Samstag"
@@ -3145,7 +3190,7 @@ msgid "Save Playlist"
 msgstr "Wiedergabeliste speichern"
 
 msgid "Scaler sharpness"
-msgstr ""
+msgstr "Scaler Schärfe"
 
 msgid "Scaling Mode"
 msgstr "Skalierungsmodus"
@@ -3178,7 +3223,7 @@ msgid "Scan SR6900"
 msgstr "Durchsuche SR6900"
 
 msgid "Scan Wireless Networks"
-msgstr "WLAN Netzwerke suchen"
+msgstr "WLAN-Netzwerke suchen"
 
 msgid "Scan additional SR"
 msgstr "Durchsuche weitere SR"
@@ -3219,20 +3264,13 @@ msgstr "Durchsuche US MID"
 msgid "Scan band US SUPER"
 msgstr "Durchsuche US SUPER"
 
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"WLAN USB Stick\n"
-msgstr ""
+msgid "Scan your network for wireless Access Points and connect to them using your WLAN USB Stick\n"
+msgstr "Durchsucht Ihr Netzwerk nach WLAN-Zugangspunkten und stellt eine Verbindung mit Hilfe Ihres gewählten WLAN Gerätes her.\n"
 
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"selected wireless device.\n"
-msgstr ""
-"Durchsucht Ihr Netzwerk nach WLAN Zugangspunkten und stellt eine Verbindung "
-"mit Hilfe Ihres gewählten WLAN Gerätes her.\n"
+msgid "Scan your network for wireless Access Points and connect to them using your selected wireless device.\n"
+msgstr "Durchsucht Ihr Netzwerk nach WLAN-Zugangspunkten und stellt eine Verbindung mit Hilfe Ihres gewählten WLAN Gerätes her.\n"
 
-msgid ""
-"Scans default lamedbs sorted by satellite with a connected dish positioner"
+msgid "Scans default lamedbs sorted by satellite with a connected dish positioner"
 msgstr ""
 
 msgid "Search east"
@@ -3242,7 +3280,7 @@ msgid "Search west"
 msgstr "Westlich suchen"
 
 msgid "Searching for new installed or removed packages. Please wait..."
-msgstr ""
+msgstr "Suche nach neu installierten oder deinstallierten Erweiterungen. Bitte warten Sie..."
 
 msgid "Secondary DNS"
 msgstr "Sekundärer DNS"
@@ -3251,7 +3289,7 @@ msgid "Seek"
 msgstr "Springen"
 
 msgid "Select"
-msgstr ""
+msgstr "Auswählen"
 
 msgid "Select HDD"
 msgstr "Festplattenauswahl"
@@ -3260,7 +3298,7 @@ msgid "Select Location"
 msgstr "Lokation auswählen"
 
 msgid "Select Network Adapter"
-msgstr "Netzadapter wählen"
+msgstr "Netzwerkadapter wählen"
 
 msgid "Select a movie"
 msgstr "Filmauswahl"
@@ -3278,35 +3316,41 @@ msgid "Select files for backup. Currently selected:\n"
 msgstr "Zu sichernde Dateien auswählen. Aktuell gewählt:\n"
 
 msgid "Select files/folders to backup"
-msgstr ""
+msgstr "Wählen Sie Dateien/Ordner für die Sicherung"
 
 msgid "Select image"
 msgstr "Wählen Sie ein Image"
 
+msgid "Select interface"
+msgstr "Netzwerkkarte auswählen"
+
 msgid "Select package"
-msgstr ""
+msgstr "Wählen Sie eine Erweiterung"
 
 msgid "Select provider to add..."
-msgstr ""
+msgstr "Wählen Sie einen Provider zum Hinzufügen"
 
 msgid "Select refresh rate"
 msgstr "Wählen Sie eine Bildwiederholrate"
 
 msgid "Select service to add..."
-msgstr ""
+msgstr "Wählen Sie einen Service zum Hinzufügen"
 
 msgid "Select upgrade source to edit."
-msgstr ""
+msgstr "Wählen Sie eine Update-Quelle zum Bearbeiten"
 
 msgid "Select video input"
 msgstr "Wählen Sie den Video-Eingang"
 
 msgid "Select video input with up/down buttons"
-msgstr ""
+msgstr "Wählen Sie den Video-Eingang mit den Hoch/Runter Knöpfen"
 
 msgid "Select video mode"
 msgstr "Wählen Sie den Video-Modus"
 
+msgid "Select wireless network"
+msgstr "Funknetzwerk auswählen"
+
 msgid "Selected source image"
 msgstr "Wählen Sie ein Quell-Image"
 
@@ -3323,7 +3367,7 @@ msgid "Sequence repeat"
 msgstr "Sequenz-Wiederholung"
 
 msgid "Serbian"
-msgstr ""
+msgstr "Serbisch"
 
 msgid "Service"
 msgstr "Kanal"
@@ -3362,7 +3406,7 @@ msgid ""
 "Check tuner configuration!"
 msgstr ""
 "Kanal nicht verfügbar!\n"
-"Bitte Tunerkonfiguration überprüfen!"
+"Bitte Tuner-Konfiguration überprüfen!"
 
 msgid "Serviceinfo"
 msgstr "Kanal-Infos"
@@ -3377,7 +3421,7 @@ msgid "Set as default Interface"
 msgstr "Netzwerkadapter als Standard definieren"
 
 msgid "Set available internal memory threshold for the warning."
-msgstr ""
+msgstr "Warnschwelle für verfügbaren internen Speicher setzen"
 
 msgid "Set interface as default Interface"
 msgstr "Setze Netzwerkadapter als Standardd"
@@ -3395,13 +3439,13 @@ msgid "Setup Mode"
 msgstr "Benutzermodus"
 
 msgid "Sharpness"
-msgstr ""
+msgstr "Schärfe"
 
 msgid "Show Info"
 msgstr "Zeige Infos"
 
 msgid "Show Message when Recording starts"
-msgstr ""
+msgstr "Benachrichtigung anzeigen wenn eine Aufnahme startet"
 
 msgid "Show WLAN Status"
 msgstr "Zeige WLAN-Status"
@@ -3431,11 +3475,17 @@ msgid "Show the tv player..."
 msgstr "TV-Wiedergabemodus..."
 
 msgid "Shows the state of your wireless LAN connection.\n"
-msgstr "Zeigt den Status der WLAN Verbinung an.\n"
+msgstr "Zeigt den Status der WLAN-Verbinung an.\n"
 
 msgid "Shutdown Dreambox after"
 msgstr "Dreambox ausschalten nach"
 
+msgid "Signal Strength:"
+msgstr "Signal Stärke:"
+
+msgid "Signal: "
+msgstr "Signal: "
+
 msgid "Similar"
 msgstr "Ähnlich"
 
@@ -3486,10 +3536,10 @@ msgid "Slot %d"
 msgstr "Steckplatz %d"
 
 msgid "Slovakian"
-msgstr ""
+msgstr "Slowakisch"
 
 msgid "Slovenian"
-msgstr ""
+msgstr "Slowenisch"
 
 msgid "Slow"
 msgstr "Langsam"
@@ -3504,10 +3554,10 @@ msgid "Software manager"
 msgstr ""
 
 msgid "Software restore"
-msgstr ""
+msgstr "Software wiederherstellen"
 
 msgid "Software update"
-msgstr ""
+msgstr "Software aktualisieren"
 
 msgid "Some plugins are not available:\n"
 msgstr "Einige Plugins sind nicht verfügbar:\n"
@@ -3538,7 +3588,7 @@ msgstr ""
 "Bitte wählen Sie ein anderes Verzeichnis."
 
 msgid "Sorry, no Details available!"
-msgstr ""
+msgstr "Entschuldigung, keine Details verfügbar"
 
 msgid ""
 "Sorry, your backup destination is not writeable.\n"
@@ -3612,7 +3662,7 @@ msgid "Stop current event and disable coming events"
 msgstr "Laufendes Ereignis abbrechen und kommende ignorieren"
 
 msgid "Stop current event but not coming events"
-msgstr "Laufendes Ereignis abbrechen aber kommende ausführen"
+msgstr "Laufendes Ereignis abbrechen, aber kommende ausführen"
 
 msgid "Stop playing this movie?"
 msgstr "Das Abspielen dieses Films beenden?"
@@ -3671,7 +3721,8 @@ msgstr "Symbolrate"
 msgid "System"
 msgstr "System"
 
-#. TRANSLATORS: Add here whatever should be shown in the "translator" about screen, up to 6 lines (use \n for newline)
+#. TRANSLATORS: Add here whatever should be shown in the "translator" about
+#. screen, up to 6 lines (use \n for newline)
 msgid "TRANSLATOR_INFO"
 msgstr ""
 
@@ -3700,7 +3751,7 @@ msgid "Terrestrial provider"
 msgstr "Region"
 
 msgid "Test DiSEqC settings"
-msgstr "Teste DiSEqC Einstellungen"
+msgstr "Teste DiSEqC-Einstellungen"
 
 msgid "Test Type"
 msgstr "Testtyp"
@@ -3715,32 +3766,27 @@ msgid "Test-Messagebox?"
 msgstr ""
 
 msgid ""
+"Thank you for using the wizard.\n"
+"Please press OK to continue."
+msgstr ""
+"Vielen Dank, dass Sie den Assistenten benutzt haben.\n"
+"Drücken Sie OK zum Fortfahren."
+
+msgid ""
 "Thank you for using the wizard. Your box is now ready to use.\n"
 "Please press OK to start using your Dreambox."
 msgstr ""
 "Der Assistent ist hiermit beendet. Ihre Dreambox kann nun benutzt werden.\n"
 "Bitte drücken Sie OK, um den Assistenten zu verlassen."
 
-msgid ""
-"The DVD standard doesn't support H.264 (HDTV) video streams. Do you want to "
-"create a Dreambox format data DVD (which will not play in stand-alone DVD "
-"players) instead?"
-msgstr ""
-"Der DVD-Standard unterstützt keine H.264 (HDTV) Videos. Soll stattdessen "
-"eine Daten-DVD im Dreambox-Format (die nicht in einem herkömmlichen DVD-"
-"Player abspielbar ist) erstellt werden?"
+msgid "The DVD standard doesn't support H.264 (HDTV) video streams. Do you want to create a Dreambox format data DVD (which will not play in stand-alone DVD players) instead?"
+msgstr "Der DVD-Standard unterstützt keine H.264 (HDTV) Videos. Soll stattdessen eine Daten-DVD im Dreambox-Format (die nicht in einem herkömmlichen DVD-Player abspielbar ist) erstellt werden?"
 
-msgid ""
-"The USB stick is now bootable. Do you want to download the latest image from "
-"the feed server and save it on the stick?"
-msgstr ""
-"Der USB-Stick ist nun bootfähig. Wollen Sie das neueste Image vom Update-"
-"Server herun