Merge remote branch 'remotes/origin/bug_135_dvdburn_ts_only' into experimental
authorghost <andreas.monzner@multimedia-labs.de>
Wed, 23 Dec 2009 12:02:06 +0000 (13:02 +0100)
committerghost <andreas.monzner@multimedia-labs.de>
Wed, 23 Dec 2009 12:02:06 +0000 (13:02 +0100)
183 files changed:
Navigation.py
RecordTimer.py
configure.ac
data/encoding.conf
data/menu.xml
data/skin_default.xml
data/skin_default/icons/dish.png
doc/DEFAULTS
lib/base/elock.h
lib/base/filepush.cpp
lib/driver/rc.cpp
lib/driver/rc.h
lib/driver/rcinput.cpp
lib/dvb/decoder.cpp
lib/dvb/decoder.h
lib/dvb/dvb.cpp
lib/dvb/epgcache.cpp
lib/dvb/epgcache.h
lib/dvb/idvb.h
lib/dvb/lowlevel/mhw.h
lib/dvb/pmt.cpp
lib/dvb/pmt.h
lib/dvb/pvrparse.cpp
lib/dvb/tstools.cpp
lib/dvb/tstools.h
lib/python/Components/About.py
lib/python/Components/ChoiceList.py [changed mode: 0644->0755]
lib/python/Components/ConfigList.py [changed mode: 0644->0755]
lib/python/Components/Converter/Makefile.am
lib/python/Components/Converter/SensorToText.py [new file with mode: 0644]
lib/python/Components/EpgList.py [changed mode: 0644->0755]
lib/python/Components/FanControl.py [new file with mode: 0644]
lib/python/Components/FileList.py
lib/python/Components/Harddisk.py
lib/python/Components/Lcd.py
lib/python/Components/Makefile.am
lib/python/Components/MediaPlayer.py [changed mode: 0644->0755]
lib/python/Components/Network.py
lib/python/Components/NimManager.py
lib/python/Components/ParentalControl.py [changed mode: 0644->0755]
lib/python/Components/SelectionList.py [changed mode: 0644->0755]
lib/python/Components/Sensors.py [new file with mode: 0644]
lib/python/Components/ServiceList.py [changed mode: 0644->0755]
lib/python/Components/Sources/Makefile.am
lib/python/Components/Sources/Sensor.py [new file with mode: 0644]
lib/python/Components/SystemInfo.py
lib/python/Components/TimerList.py [changed mode: 0644->0755]
lib/python/Components/UsageConfig.py
lib/python/Components/config.py
lib/python/Plugins/Extensions/CutListEditor/meta/plugin_cutlisteditor.xml [changed mode: 0644->0755]
lib/python/Plugins/Extensions/CutListEditor/plugin.py
lib/python/Plugins/Extensions/DVDBurn/TitleList.py
lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py
lib/python/Plugins/Extensions/DVDBurn/meta/Makefile.am
lib/python/Plugins/Extensions/DVDBurn/meta/dvdburn_de.jpg [new file with mode: 0755]
lib/python/Plugins/Extensions/DVDBurn/meta/dvdburn_en.jpg [new file with mode: 0755]
lib/python/Plugins/Extensions/DVDBurn/meta/plugin_dvdburn.xml [changed mode: 0644->0755]
lib/python/Plugins/Extensions/DVDPlayer/meta/plugin_dvdplayer.xml [changed mode: 0644->0755]
lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp
lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py [changed mode: 0644->0755]
lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_de.jpg [changed mode: 0644->0755]
lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_en.jpg [changed mode: 0644->0755]
lib/python/Plugins/Extensions/GraphMultiEPG/meta/plugin_graphmultiepg.xml [changed mode: 0644->0755]
lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_de.jpg [changed mode: 0644->0755]
lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_en.jpg [changed mode: 0644->0755]
lib/python/Plugins/Extensions/MediaPlayer/meta/plugin_mediaplayer.xml [changed mode: 0644->0755]
lib/python/Plugins/Extensions/MediaPlayer/plugin.py [changed mode: 0644->0755]
lib/python/Plugins/Extensions/MediaScanner/meta/Makefile.am
lib/python/Plugins/Extensions/MediaScanner/meta/mediascanner_de.jpg [new file with mode: 0755]
lib/python/Plugins/Extensions/MediaScanner/meta/mediascanner_en.jpg [new file with mode: 0755]
lib/python/Plugins/Extensions/MediaScanner/meta/plugin_mediascanner.xml [changed mode: 0644->0755]
lib/python/Plugins/Extensions/PicturePlayer/meta/plugin_pictureplayer.xml [changed mode: 0644->0755]
lib/python/Plugins/Plugin.py
lib/python/Plugins/SystemPlugins/CleanupWizard/meta/Makefile.am
lib/python/Plugins/SystemPlugins/CleanupWizard/meta/cleanupwizard_de.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/CleanupWizard/meta/cleanupwizard_en.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/CleanupWizard/meta/plugin_cleanupwizard.xml
lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/ciassignment.jpg [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/plugin_commoninterfaceassignment.xml [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/Makefile.am
lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/crashlogautosubmit_de.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/crashlogautosubmit_en.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/plugin_crashlogautosubmit.xml [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/defaultservicescanner.jpg [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/plugin_defaultservicesscanner.xml [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/DiseqcTester/meta/Makefile.am
lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester.jpg [deleted file]
lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester_de.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester_en.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/DiseqcTester/meta/plugin_diseqctester.xml [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/Makefile.am
lib/python/Plugins/SystemPlugins/NFIFlash/meta/Makefile.am
lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash.jpg [deleted file]
lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash_de.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash_en.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/NFIFlash/meta/plugin_nfiflash.xml [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/NFIFlash/plugin.py [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py
lib/python/Plugins/SystemPlugins/NetworkWizard/meta/Makefile.am
lib/python/Plugins/SystemPlugins/NetworkWizard/meta/networkwizard_de.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/NetworkWizard/meta/networkwizard_en.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/NetworkWizard/meta/plugin_networkwizard.xml
lib/python/Plugins/SystemPlugins/NetworkWizard/networkwizard.xml
lib/python/Plugins/SystemPlugins/PositionerSetup/meta/plugin_positionersetup.xml [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/PositionerSetup/meta/positionersetup.jpg [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/plugin_satelliteequipmentcontrol.xml [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/satcontrol.jpg [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/Satfinder/meta/plugin_satfinder.xml [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/Satfinder/meta/satfinder.jpg [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/SkinSelector/meta/Makefile.am
lib/python/Plugins/SystemPlugins/SkinSelector/meta/plugin_skinselector.xml [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector.jpg [deleted file]
lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector_de.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector_en.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py
lib/python/Plugins/SystemPlugins/SoftwareManager/meta/Makefile.am
lib/python/Plugins/SystemPlugins/SoftwareManager/meta/plugin_softwaremanager.xml [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softmanager.jpg [deleted file]
lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softwaremanager_de.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softwaremanager_en.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py
lib/python/Plugins/SystemPlugins/TempFanControl/Makefile.am [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/TempFanControl/__init__.py [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/Makefile.am
lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/plugin_videoenhancement.xml
lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement.jpg [deleted file]
lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement_de.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement_en.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/VideoTune/meta/plugin_videotune.xml [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/Videomode/VideoWizard.py
lib/python/Plugins/SystemPlugins/Videomode/meta/Makefile.am
lib/python/Plugins/SystemPlugins/Videomode/meta/plugin_videomode.xml [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/Videomode/meta/videomode.jpg [deleted file]
lib/python/Plugins/SystemPlugins/Videomode/meta/videomode_de.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/Videomode/meta/videomode_en.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/WirelessLan/Makefile.am
lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py
lib/python/Plugins/SystemPlugins/WirelessLan/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/WirelessLan/meta/plugin_wirelesslan.xml [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/WirelessLan/meta/wirelesslan_de.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/WirelessLan/meta/wirelesslan_en.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py
lib/python/Plugins/newplugin.py
lib/python/Screens/EpgSelection.py
lib/python/Screens/EventView.py
lib/python/Screens/InfoBar.py
lib/python/Screens/InfoBarGenerics.py
lib/python/Screens/LanguageSelection.py [changed mode: 0644->0755]
lib/python/Screens/LocationBox.py
lib/python/Screens/Makefile.am
lib/python/Screens/Menu.py
lib/python/Screens/MessageBox.py
lib/python/Screens/MovieSelection.py
lib/python/Screens/NetworkSetup.py
lib/python/Screens/PluginBrowser.py
lib/python/Screens/RdsDisplay.py [changed mode: 0644->0755]
lib/python/Screens/RecordPaths.py [new file with mode: 0644]
lib/python/Screens/Satconfig.py
lib/python/Screens/ScanSetup.py
lib/python/Screens/Scart.py
lib/python/Screens/SleepTimerEdit.py
lib/python/Screens/TaskView.py
lib/python/Screens/TimerEdit.py
lib/python/Screens/TimerEntry.py
lib/python/Screens/VirtualKeyBoard.py
lib/python/Screens/Wizard.py
lib/python/Tools/Directories.py
lib/service/servicedvb.cpp
lib/service/servicedvb.h
lib/service/servicemp3.cpp
lib/service/servicemp3.h
lib/service/servicexine.cpp
main/Makefile.am
main/enigma.cpp
mytest.py
po/Makefile.am
po/de.po [changed mode: 0755->0644]
po/fi.po
po/nl.po
po/sr.po
po/sv.po
skin.py [changed mode: 0644->0755]

index 2ca87f6f57d4acd0b7dfadb03100f360f5ca7178..2437bbf5ecf5e4c594f2e7aafba7657a4d6bfa2b 100644 (file)
@@ -50,9 +50,9 @@ class Navigation:
                for x in self.record_event:
                        x(rec_service, event)
 
-       def playService(self, ref, checkParentalControl = True):
+       def playService(self, ref, checkParentalControl = True, forceRestart = False):
                oldref = self.currentlyPlayingServiceReference
-               if ref and oldref and ref == oldref:
+               if ref and oldref and ref == oldref and not forceRestart:
                        print "ignore request to play already running service"
                        return 0
                print "playing", ref and ref.toString()
index 4907f64e75a80d05635a91b5b71c28c9ede2ac56..f670417a5eddca05f8322c01b3b60c88bb372141 100644 (file)
@@ -2,6 +2,7 @@ from enigma import eEPGCache, getBestPlayableServiceReference, \
        eServiceReference, iRecordableService, quitMainloop
 
 from Components.config import config
+from Components.UsageConfig import defaultMoviePath
 from Components.TimerSanityCheck import TimerSanityCheck
 
 from Screens.MessageBox import MessageBox
@@ -141,11 +142,13 @@ class RecordTimerEntry(timer.TimerEntry, object):
                if config.recording.ascii_filenames.value:
                        filename = ASCIItranslit.legacyEncode(filename)
 
-               if self.dirname and not Directories.fileExists(self.dirname, 'w'):
-                       self.dirnameHadToFallback = True
-                       self.Filename = Directories.getRecordingFilename(filename, None)
+               if not self.dirname or not Directories.fileExists(self.dirname, 'w'):
+                       if self.dirname:
+                               self.dirnameHadToFallback = True
+                       dirname = defaultMoviePath()
                else:
-                       self.Filename = Directories.getRecordingFilename(filename, self.dirname)
+                       dirname = self.dirname
+               self.Filename = Directories.getRecordingFilename(filename, dirname)
                self.log(0, "Filename calculated as: '%s'" % self.Filename)
                #begin_date + " - " + service_name + description)
 
index 5e403debdedc682c4dac664b90cda50ef0ede108..aa2fa3e3a53a7367dcdf9536d9be0da7ee479150 100755 (executable)
@@ -155,6 +155,7 @@ 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/TempFanControl/Makefile
 lib/python/Plugins/SystemPlugins/NetworkWizard/Makefile
 lib/python/Plugins/SystemPlugins/NetworkWizard/meta/Makefile
 lib/python/Plugins/SystemPlugins/NFIFlash/Makefile
@@ -176,6 +177,7 @@ 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/Plugins/SystemPlugins/WirelessLan/meta/Makefile
 lib/python/Tools/Makefile
 lib/service/Makefile
 lib/components/Makefile
index 14eeaefd6926f657d52f1117ef740c784ac3c9d3..9383317e8513d1d49ef157966cb97fc87524facd 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 c7fb8897eb03d0a55fde27560fbad6a383b31e7a..59195f150dc1cf3da3c875f8b7213951bc313aea 100644 (file)
@@ -70,7 +70,7 @@
                                        <item level="1" text="Device Setup..." entryID="device_setup"><screen module="NetworkSetup" screen="NetworkAdapterSelection"/></item>
                                        <item level="1" text="Nameserver Setup..." entryID="dns_setup"><screen module="NetworkSetup" screen="NameserverSetup"/></item>
                                </menu>-->
-                               <item level="2" text="Timeshift path..." entryId="timeshift_path"><screen module="LocationBox" screen="TimeshiftLocationBox" /></item>
+                               <item level="2" text="Recording paths..." entryId="RecordPaths"><screen module="RecordPaths" screen="RecordPathsSettings" /></item>
                        </menu>
                        <item weight="10" level="1" text="Common Interface" entryID="ci_setup" requires="CommonInterface"><screen module="Ci" screen="CiSelection" /></item>
                        <item weight="15" level="0" text="Parental control" entryID="parental_setup"><screen module="ParentalControlSetup" screen="ParentalControlSetup" /></item>
@@ -104,6 +104,7 @@ self.session.openWithCallback(msgClosed, FactoryReset)
                        <item text="Standby" entryID="standby"><screen module="Standby" screen="Standby"/></item>
                        <item text="Restart" entryID="restart"><screen module="Standby" screen="TryQuitMainloop">2</screen></item>
                        <item level="2" text="Restart GUI" entryID="restart_enigma"><screen module="Standby" screen="TryQuitMainloop">3</screen></item>
-                       <item text="Deep Standby" entryID="deep_standby"><screen module="Standby" screen="TryQuitMainloop">1</screen></item>
+                       <item text="Deep Standby" requires="DeepstandbySupport" entryID="deep_standby"><screen module="Standby" screen="TryQuitMainloop">1</screen></item>
+                       <item text="Shutdown" requires="!DeepstandbySupport" entryID="deep_standby"><screen module="Standby" screen="TryQuitMainloop">1</screen></item>
                </menu>
 </menu>
index 16504abf6d4e4a81fe455f7f4df4d258fab505c7..71f579cb2f551be595b40126997b17532ab0449c 100755 (executable)
@@ -43,7 +43,9 @@
                <widget source="Adaptertext" render="Label" position="10,355" size="120,21" zPosition="10" font="Regular;20" halign="left" backgroundColor="#25062748" transparent="1" />
                <widget source="Adapter" render="Label" position="120,355" size="400,21" zPosition="10" font="Regular;20" halign="left" backgroundColor="#25062748" transparent="1" />
                <widget source="introduction2" render="Label" position="10,380" size="540,21" zPosition="10" font="Regular;21" halign="center" valign="center" backgroundColor="#25062748" transparent="1"/>
-               <widget name="VKeyIcon" pixmap="skin_default/buttons/key_text.png" position="10,380" zPosition="10" size="35,25" transparent="1" alphatest="on" />
+               <widget source="VKeyIcon" render="Pixmap" pixmap="skin_default/buttons/key_text.png" position="10,380" zPosition="10" size="35,25" transparent="1" alphatest="on" >
+                       <convert type="ConditionalShowHide" />
+               </widget>
                <widget name="HelpWindow" pixmap="skin_default/vkey_icon.png" position="160,315" zPosition="1" size="1,1" transparent="1" alphatest="on" />
        </screen>
 
@@ -248,7 +250,7 @@ self.instance.move(ePoint((720-wsizex)/2, (576-wsizey)/(count &gt; 7 and 2 or 3)
                        <widget name="arrowup2" pixmap="skin_default/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="on"/>
        </screen>
        <!-- Dish -->
-       <screen name="Dish" flags="wfNoBorder" position="300,100" size="130,160" title="Dish" zPosition="-1" backgroundColor="transparent">
+       <screen name="Dish" flags="wfNoBorder" position="300,100" size="130,160" title="Dish" zPosition="100" backgroundColor="transparent">
                <widget name="Dishpixmap" pixmap="skin_default/icons/dish.png" position="0,0" size="130,160" alphatest="off" />
        </screen>
        <!-- EPG Selection - Single -->
index f3c6548d61f78f3a475f8aa35f75efd7bbc17acf..6148e07c853e70116b2517054dea6b863e9df96a 100644 (file)
Binary files a/data/skin_default/icons/dish.png and b/data/skin_default/icons/dish.png differ
index b61696f6aa171ed0e5f12cfff81a848b1c388171..669652e801771da5334b5c8a01a091fbf20b33ae 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 51582e67fe5a3d6e97ba97c82856c4bcd3127019..01757182a06a7dc4166421a91a6a5990e3844004 100644 (file)
@@ -83,9 +83,18 @@ class eSingleLock
        pthread_mutex_t m_lock;
        eSingleLock(eSingleLock &);
 public:
-       eSingleLock()
+       eSingleLock(bool recursive=false)
        {
-               pthread_mutex_init(&m_lock, 0);
+               if (recursive)
+               {
+                       pthread_mutexattr_t attr;
+                       pthread_mutexattr_init(&attr);
+                       pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
+                       pthread_mutex_init(&m_lock, &attr);
+                       pthread_mutexattr_destroy(&attr);
+               }
+               else
+                       pthread_mutex_init(&m_lock, 0);
        }
        ~eSingleLock()
        {
index 3412c84a3a0744f8994296172cdf0973ec9cebd8..91f24ba064026502d3b69316d89c2409bd133bec 100644 (file)
@@ -37,7 +37,6 @@ void eFilePushThread::thread()
        
        size_t written_since_last_sync = 0;
 
-       int already_empty = 0;
        eDebug("FILEPUSH THREAD START");
        
                /* we set the signal to not restart syscalls, so we can detect our signal. */
@@ -186,21 +185,23 @@ void eFilePushThread::thread()
                if (m_buf_end == 0)
                {
                                /* on EOF, try COMMITting once. */
-                       if (m_send_pvr_commit && !already_empty)
+                       if (m_send_pvr_commit)
                        {
-                               eDebug("sending PVR commit");
-                               
                                struct pollfd pfd;
                                pfd.fd = m_fd_dest;
                                pfd.events = POLLIN;
-                               poll(&pfd, 1, 10000);
-                               sleep(5); /* HACK to allow ES buffer to drain */
-                               already_empty = 1;
-//                             if (::ioctl(m_fd_dest, PVR_COMMIT) < 0 && errno == EINTR)
-//                                     continue;
-                               eDebug("commit done");
-                                               /* well check again */
-                               continue;
+                               switch (poll(&pfd, 1, 250)) // wait for 250ms
+                               {
+                                       case 0:
+                                               eDebug("wait for driver eof timeout");
+                                               continue;
+                                       case 1:
+                                               eDebug("wait for driver eof ok");
+                                               break;
+                                       default:
+                                               eDebug("wait for driver eof aborted by signal");
+                                               continue;
+                               }
                        }
                        
                                /* in stream_mode, we are sending EOF events 
@@ -230,7 +231,6 @@ void eFilePushThread::thread()
                        bytes_read += m_buf_end;
                        if (m_sg)
                                current_span_remaining -= m_buf_end;
-                       already_empty = 0;
                }
 //             printf("FILEPUSH: read %d bytes\n", m_buf_end);
        }
index c7acd1138a1b35bc10c937e72df8e0d53453ff7d..8dab02013ba681285ede65264d024ddd76ba435a 100644 (file)
@@ -127,6 +127,16 @@ std::string eRCInputEventDriver::getDeviceName()
        return name;
 }
 
+void eRCInputEventDriver::setExclusive(bool b)
+{
+       if (handle >= 0)
+       {
+               int grab = b;
+               if (::ioctl(handle, EVIOCGRAB, &grab) < 0)
+                       perror("EVIOCGRAB");
+       }
+}
+
 eRCInputEventDriver::~eRCInputEventDriver()
 {
        if (handle>=0)
index 9708ea7b73d81907c37a98a2f1faca139f4d5679..ef0588c4cb96008ded5749d25862ad2270e3e40b 100644 (file)
@@ -112,6 +112,7 @@ public:
        std::string getDeviceName();
        eRCInputEventDriver(const char *filename);
        ~eRCInputEventDriver();
+       void setExclusive(bool b); // in exclusive mode data is not carried to console device
 };
 
 class eRCKey
index d10d94f3a8d251ab17a34ac9e0b22cd547e0f04c..0aada8df877982c5d6c3bdd7a8a1608a8df7d3ee 100644 (file)
@@ -83,6 +83,7 @@ eRCDeviceInputDev::eRCDeviceInputDev(eRCInputEventDriver *driver)
                        break;
                }
        }
+       driver->setExclusive(!iskeyboard);
        eDebug("Input device \"%s\" is %sa keyboard.", id.c_str(), iskeyboard ? "" : "not ");
 
 }
index 710cc421ec59a6a476249c8bd6917df35639e7fc..ef8dadc387bdcb59b306ab573d83ebe69e836b31 100644 (file)
@@ -1045,9 +1045,9 @@ int eTSMPEGDecoder::setState()
 int eTSMPEGDecoder::m_pcm_delay=-1,
        eTSMPEGDecoder::m_ac3_delay=-1;
 
-RESULT eTSMPEGDecoder::setPCMDelay(int delay)
+RESULT eTSMPEGDecoder::setHwPCMDelay(int delay)
 {
-       if (m_decoder == 0 && delay != m_pcm_delay )
+       if (delay != m_pcm_delay )
        {
                FILE *fp = fopen("/proc/stb/audio/audio_delay_pcm", "w");
                if (fp)
@@ -1061,9 +1061,9 @@ RESULT eTSMPEGDecoder::setPCMDelay(int delay)
        return -1;
 }
 
-RESULT eTSMPEGDecoder::setAC3Delay(int delay)
+RESULT eTSMPEGDecoder::setHwAC3Delay(int delay)
 {
-       if ( m_decoder == 0 && delay != m_ac3_delay )
+       if ( delay != m_ac3_delay )
        {
                FILE *fp = fopen("/proc/stb/audio/audio_delay_bitstream", "w");
                if (fp)
@@ -1077,6 +1077,17 @@ RESULT eTSMPEGDecoder::setAC3Delay(int delay)
        return -1;
 }
 
+
+RESULT eTSMPEGDecoder::setPCMDelay(int delay)
+{
+       return m_decoder == 0 ? setHwPCMDelay(delay) : -1;
+}
+
+RESULT eTSMPEGDecoder::setAC3Delay(int delay)
+{
+       return m_decoder == 0 ? setHwAC3Delay(delay) : -1;
+}
+
 eTSMPEGDecoder::eTSMPEGDecoder(eDVBDemux *demux, int decoder)
        : m_demux(demux), 
                m_vpid(-1), m_vtype(-1), m_apid(-1), m_atype(-1), m_pcrpid(-1), m_textpid(-1),
index b53638b59ab0ffb757063f3f7533cdf621c5d974..3a0fbac1e58f27c303a7d28202884a6c9de7bc53 100644 (file)
@@ -193,6 +193,8 @@ public:
        int getVideoProgressive();
        int getVideoFrameRate();
        int getVideoAspect();
+       static RESULT setHwPCMDelay(int delay);
+       static RESULT setHwAC3Delay(int delay);
 };
 
 #endif
index 894287e84f18845b6e06d39a467033a1d62688fa..17712dde154bb39d5beed4096db20dc79474fa8e 100644 (file)
@@ -1324,16 +1324,6 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off
                return;
        }
 
-       m_cue->m_lock.RdLock();
-       if (!m_cue->m_decoding_demux)
-       {
-               start = current_offset;
-               size = max;
-               eDebug("getNextSourceSpan, no decoding demux. forcing normal play");
-               m_cue->m_lock.Unlock();
-               return;
-       }
-
        if (m_skipmode_n)
        {
                eDebug("skipmode %d:%d (x%d)", m_skipmode_m, m_skipmode_n, m_skipmode_frames);
@@ -1341,7 +1331,6 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off
        }
 
        eDebug("getNextSourceSpan, current offset is %08llx, m_skipmode_m = %d!", current_offset, m_skipmode_m);
-       
        int frame_skip_success = 0;
 
        if (m_skipmode_m)
@@ -1386,6 +1375,8 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off
                }
        }
 
+       m_cue->m_lock.RdLock();
+
        while (!m_cue->m_seek_requests.empty())
        {
                std::pair<int, pts_t> seek = m_cue->m_seek_requests.front();
@@ -1410,6 +1401,13 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off
                                eDebug("decoder getPTS failed, can't seek relative");
                                continue;
                        }
+                       if (!m_cue->m_decoding_demux)
+                       {
+                               eDebug("getNextSourceSpan, no decoding demux. couldn't seek to %llx... ignore request!", pts);
+                               start = current_offset;
+                               size = max;
+                               continue;
+                       }
                        if (getCurrentPosition(m_cue->m_decoding_demux, now, 1))
                        {
                                eDebug("seekTo: getCurrentPosition failed!");
@@ -1462,12 +1460,7 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off
                        continue;
                }
                
-               size_t iframe_len;
-                       /* try to align to iframe */
-               int direction = pts < 0 ? -1 : 1;
-               m_tstools.findFrame(offset, iframe_len, direction);
-
-               eDebug("ok, resolved skip (rel: %d, diff %lld), now at %08llx (skipped additional %d frames due to iframe re-align)", relative, pts, offset, direction);
+               eDebug("ok, resolved skip (rel: %d, diff %lld), now at %08llx", relative, pts, offset);
                current_offset = align(offset, blocksize); /* in case tstools return non-aligned offset */
        }
 
@@ -1771,6 +1764,8 @@ RESULT eDVBChannel::playFile(const char *file)
        m_pvr_thread->setStreamMode(1);
        m_pvr_thread->setScatterGather(this);
 
+       m_event(this, evtPreStart);
+
        if (m_pvr_thread->start(file, m_pvr_fd_dst))
        {
                delete m_pvr_thread;
index f80e1775d5fed8aa998cfa0e499f9bdf5454b373..48cbfbfdf4dc378621276d0d34fb3dcfb3668c3e 100644 (file)
@@ -254,6 +254,11 @@ void eEPGCache::DVBChannelAdded(eDVBChannel *chan)
                data->prevChannelState = -1;
 #ifdef ENABLE_PRIVATE_EPG
                data->m_PrivatePid = -1;
+#endif
+#ifdef ENABLE_MHW_EPG
+               data->m_mhw2_channel_pid = 0x231; // defaults for astra 19.2 D+
+               data->m_mhw2_title_pid = 0x234; // defaults for astra 19.2 D+
+               data->m_mhw2_summary_pid = 0x236; // defaults for astra 19.2 D+
 #endif
                singleLock s(channel_map_lock);
                m_knownChannels.insert( std::pair<iDVBChannel*, channel_data* >(chan, data) );
@@ -879,6 +884,62 @@ void eEPGCache::gotMessage( const Message &msg )
                        }
                        break;
                }
+#endif
+#ifdef ENABLE_MHW_EPG
+               case Message::got_mhw2_channel_pid:
+               {
+                       singleLock s(channel_map_lock);
+                       for (channelMapIterator it(m_knownChannels.begin()); it != m_knownChannels.end(); ++it)
+                       {
+                               eDVBChannel *channel = (eDVBChannel*) it->first;
+                               channel_data *data = it->second;
+                               eDVBChannelID chid = channel->getChannelID();
+                               if ( chid.transport_stream_id.get() == msg.service.tsid &&
+                                       chid.original_network_id.get() == msg.service.onid )
+                               {
+                                       data->m_mhw2_channel_pid = msg.pid;
+                                       eDebug("[EPGC] got mhw2 channel pid %04x", msg.pid);
+                                       break;
+                               }
+                       }
+                       break;
+               }
+               case Message::got_mhw2_title_pid:
+               {
+                       singleLock s(channel_map_lock);
+                       for (channelMapIterator it(m_knownChannels.begin()); it != m_knownChannels.end(); ++it)
+                       {
+                               eDVBChannel *channel = (eDVBChannel*) it->first;
+                               channel_data *data = it->second;
+                               eDVBChannelID chid = channel->getChannelID();
+                               if ( chid.transport_stream_id.get() == msg.service.tsid &&
+                                       chid.original_network_id.get() == msg.service.onid )
+                               {
+                                       data->m_mhw2_title_pid = msg.pid;
+                                       eDebug("[EPGC] got mhw2 title pid %04x", msg.pid);
+                                       break;
+                               }
+                       }
+                       break;
+               }
+               case Message::got_mhw2_summary_pid:
+               {
+                       singleLock s(channel_map_lock);
+                       for (channelMapIterator it(m_knownChannels.begin()); it != m_knownChannels.end(); ++it)
+                       {
+                               eDVBChannel *channel = (eDVBChannel*) it->first;
+                               channel_data *data = it->second;
+                               eDVBChannelID chid = channel->getChannelID();
+                               if ( chid.transport_stream_id.get() == msg.service.tsid &&
+                                       chid.original_network_id.get() == msg.service.onid )
+                               {
+                                       data->m_mhw2_summary_pid = msg.pid;
+                                       eDebug("[EPGC] got mhw2 summary pid %04x", msg.pid);
+                                       break;
+                               }
+                       }
+                       break;
+               }
 #endif
                case Message::timeChanged:
                        cleanLoop();
@@ -1175,7 +1236,7 @@ void eEPGCache::channel_data::startEPG()
        isRunning |= MHW;
        memcpy(&m_MHWFilterMask, &mask, sizeof(eDVBSectionFilterMask));
 
-       mask.pid = 0x231;
+       mask.pid = m_mhw2_channel_pid;
        mask.data[0] = 0xC8;
        mask.mask[0] = 0xFF;
        mask.data[1] = 0;
@@ -1186,6 +1247,7 @@ void eEPGCache::channel_data::startEPG()
        memcpy(&m_MHWFilterMask2, &mask, sizeof(eDVBSectionFilterMask));
        mask.data[1] = 0;
        mask.mask[1] = 0;
+       m_MHWTimeoutet=false;
 #endif
 
        mask.pid = 0x12;
@@ -1717,6 +1779,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 +2124,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)
@@ -2487,6 +2551,50 @@ void eEPGCache::PMTready(eDVBServicePMTHandler *pmthandler)
                                int tmp=0;
                                switch ((*es)->getType())
                                {
+                               case 0xC1: // user private
+                                       for (DescriptorConstIterator desc = (*es)->getDescriptors()->begin();
+                                               desc != (*es)->getDescriptors()->end(); ++desc)
+                                       {
+                                               switch ((*desc)->getTag())
+                                               {
+                                                       case 0xC2: // user defined
+                                                               if ((*desc)->getLength() == 8) 
+                                                               {
+                                                                       __u8 buffer[10];
+                                                                       (*desc)->writeToBuffer(buffer);
+                                                                       if (!strncmp((unsigned char*)buffer+2, "EPGDATA", 7))
+                                                                       {
+                                                                               eServiceReferenceDVB ref;
+                                                                               if (!pmthandler->getServiceReference(ref))
+                                                                               {
+                                                                                       int pid = (*es)->getPid();
+                                                                                       messages.send(Message(Message::got_mhw2_channel_pid, ref, pid));
+                                                                               }
+                                                                       }
+                                                                       else if(!strncmp((unsigned char*)buffer+2, "FICHAS", 6))
+                                                                       {
+                                                                               eServiceReferenceDVB ref;
+                                                                               if (!pmthandler->getServiceReference(ref))
+                                                                               {
+                                                                                       int pid = (*es)->getPid();
+                                                                                       messages.send(Message(Message::got_mhw2_summary_pid, ref, pid));
+                                                                               }
+                                                                       }
+                                                                       else if(!strncmp((unsigned char*)buffer+2, "GENEROS", 7))
+                                                                       {
+                                                                               eServiceReferenceDVB ref;
+                                                                               if (!pmthandler->getServiceReference(ref))
+                                                                               {
+                                                                                       int pid = (*es)->getPid();
+                                                                                       messages.send(Message(Message::got_mhw2_title_pid, ref, pid));
+                                                                               }
+                                                                       }
+                                                               }
+                                                               break;
+                                                       default:
+                                                               break;
+                                               }
+                                       }
                                case 0x05: // private
                                        for (DescriptorConstIterator desc = (*es)->getDescriptors()->begin();
                                                desc != (*es)->getDescriptors()->end(); ++desc)
@@ -2891,7 +2999,7 @@ void eEPGCache::channel_data::storeTitle(std::map<__u32, mhw_title_t>::iterator
        packet->segment_last_table_id = 0x50;
 
        __u8 *title = isMHW2 ? ((__u8*)(itTitle->second.title))-4 : (__u8*)itTitle->second.title;
-       std::string prog_title = (char *) delimitName( title, name, isMHW2 ? 33 : 23 );
+       std::string prog_title = (char *) delimitName( title, name, isMHW2 ? 35 : 23 );
        int prog_title_length = prog_title.length();
 
        int packet_length = EIT_SIZE + EIT_LOOP_SIZE + EIT_SHORT_EVENT_DESCRIPTOR_SIZE +
@@ -3220,14 +3328,14 @@ void eEPGCache::channel_data::readMHWData2(const __u8 *data)
        {
                eDebug("[EPGC] mhw2 aborted %d", state);
        }
-       else if (m_MHWFilterMask2.pid == 0x231 && m_MHWFilterMask2.data[0] == 0xC8 && m_MHWFilterMask2.data[1] == 0)
+       else if (m_MHWFilterMask2.pid == m_mhw2_channel_pid && m_MHWFilterMask2.data[0] == 0xC8 && m_MHWFilterMask2.data[1] == 0)
        // Channels table
        {
-               int num_channels = data[119];
+               int num_channels = data[120];
                m_channels.resize(num_channels);
-               if(dataLen > 119)
+               if(dataLen > 120)
                {
-                       int ptr = 120 + 8 * num_channels;
+                       int ptr = 121 + 8 * num_channels;
                        if( dataLen > ptr )
                        {
                                for( int chid = 0; chid < num_channels; ++chid )
@@ -3243,7 +3351,7 @@ void eEPGCache::channel_data::readMHWData2(const __u8 *data)
                else
                        goto abort;
                // data seems consistent...
-               const __u8 *tmp = data+120;
+               const __u8 *tmp = data+121;
                for (int i=0; i < num_channels; ++i)
                {
                        mhw_channel_name_t channel;
@@ -3254,6 +3362,7 @@ void eEPGCache::channel_data::readMHWData2(const __u8 *data)
                        channel.channel_id_hi = *(tmp++);
                        channel.channel_id_lo = *(tmp++);
                        m_channels[i]=channel;
+//                     eDebug("%d(%02x) %04x: %02x %02x", i, i, (channel.channel_id_hi << 8) | channel.channel_id_lo, *tmp, *(tmp+1));
                        tmp+=2;
                }
                for (int i=0; i < num_channels; ++i)
@@ -3264,83 +3373,86 @@ void eEPGCache::channel_data::readMHWData2(const __u8 *data)
                        for (; x < channel_name_len; ++x)
                                channel.name[x]=*(tmp++);
                        channel.name[x+1]=0;
+//                     eDebug("%d(%02x) %s", i, i, channel.name);
                }
                haveData |= MHW;
                eDebug("[EPGC] mhw2 %d channels found", m_channels.size());
        }
-       else if (m_MHWFilterMask2.pid == 0x231 && m_MHWFilterMask2.data[0] == 0xC8 && m_MHWFilterMask2.data[1] == 1)
+       else if (m_MHWFilterMask2.pid == m_mhw2_channel_pid && m_MHWFilterMask2.data[0] == 0xC8 && m_MHWFilterMask2.data[1] == 1)
        {
                // Themes table
                eDebug("[EPGC] mhw2 themes nyi");
        }
-       else if (m_MHWFilterMask2.pid == 0x234 && m_MHWFilterMask2.data[0] == 0xe6)
+       else if (m_MHWFilterMask2.pid == m_mhw2_title_pid && m_MHWFilterMask2.data[0] == 0xe6)
        // Titles table
        {
                int pos=18;
-               bool valid=true;
-               int len = ((data[1]&0xf)<<8) + data[2] - 16;
+               bool valid=false;
                bool finish=false;
-               if(data[dataLen-1] != 0xff)
-                       return;
-               while( pos < dataLen )
+
+//             eDebug("%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x",
+//                     data[3], data[4], data[5], data[6], data[7], data[8], data[9], data[10],
+//                     data[11], data[12], data[13], data[14], data[15], data[16], data[17] );
+
+               while( pos < dataLen && !valid)
                {
-                       valid = false;
-                       pos += 7;
-                       if( pos < dataLen )
-                       {
-                               pos += 3;
-                               if( pos < dataLen )
-                               {
-                                       if( data[pos] > 0xc0 )
-                                       {
-                                               pos += ( data[pos] - 0xc0 );
-                                               pos += 4;
-                                               if( pos < dataLen )
-                                               {
-                                                       if( data[pos] == 0xff )
-                                                       {
-                                                               ++pos;
-                                                               valid = true;
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-                       if( !valid )
-                       {
-                               if (checkTimeout())
-                                       goto start_summary;
-                               return;
-                       }
+                       pos += 18;
+                       pos += (data[pos] & 0x3F) + 4;
+                       if( pos == dataLen )
+                               valid = true;
                }
+
+               if (!valid)
+               {
+                       if (dataLen > 18)
+                               eDebug("mhw2 title table invalid!!");
+                       if (checkTimeout())
+                               goto abort;
+                       if (!m_MHWTimeoutTimer->isActive())
+                               startTimeout(5000);
+                       return; // continue reading
+               }
+
                // data seems consistent...
                mhw_title_t title;
                pos = 18;
-               while (pos < len)
+               while (pos < dataLen)
                {
+//                     eDebugNoNewLine("    [%02x] %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x [%02x %02x %02x %02x %02x %02x %02x] LL - DESCR - ",
+//                             data[pos], data[pos+1], data[pos+2], data[pos+3], data[pos+4], data[pos+5], data[pos+6], data[pos+7], 
+//                             data[pos+8], data[pos+9], data[pos+10], data[pos+11], data[pos+12], data[pos+13], data[pos+14], data[pos+15], data[pos+16], data[pos+17]);
                        title.channel_id = data[pos]+1;
-                       title.program_id_ml = data[pos+1];
-                       title.program_id_lo = data[pos+2];
-                       title.mhw2_mjd_hi = data[pos+3];
-                       title.mhw2_mjd_lo = data[pos+4];
-                       title.mhw2_hours = data[pos+5];
-                       title.mhw2_minutes = data[pos+6];
-                       title.mhw2_seconds = data[pos+7];
-                       int duration = ((data[pos+8] << 8)|data[pos+9]) >> 4;
+                       title.mhw2_mjd_hi = data[pos+11];
+                       title.mhw2_mjd_lo = data[pos+12];
+                       title.mhw2_hours = data[pos+13];
+                       title.mhw2_minutes = data[pos+14];
+                       title.mhw2_seconds = data[pos+15];
+                       int duration = ((data[pos+16] << 8)|data[pos+17]) >> 4;
                        title.mhw2_duration_hi = (duration&0xFF00) >> 8;
                        title.mhw2_duration_lo = duration&0xFF;
-                       __u8 slen = data[pos+10] & 0x3f;
+
+                       // Create unique key per title
+                       __u32 title_id = (data[pos+7] << 24) | (data[pos+8] << 16) | (data[pos+9] << 8) | data[pos+10];
+
+                       __u8 slen = data[pos+18] & 0x3f;
                        __u8 *dest = ((__u8*)title.title)-4;
-                       memcpy(dest, &data[pos+11], slen>33 ? 33 : slen);
-                       memset(dest+slen, 0, 33-slen);
-                       pos += 11 + slen;
+                       memcpy(dest, &data[pos+19], slen>35 ? 35 : slen);
+                       memset(dest+slen, 0, 35-slen);
+                       pos += 19 + slen;
+//                     eDebug("%02x [%02x %02x]: %s", data[pos], data[pos+1], data[pos+2], dest);
+
 //                     not used theme id (data[7] & 0x3f) + (data[pos] & 0x3f);
                        __u32 summary_id = (data[pos+1] << 8) | data[pos+2];
 
-                       // Create unique key per title
-                       __u32 title_id = (title.channel_id<<16) | (title.program_id_ml<<8) | title.program_id_lo;
+//                     if (title.channel_id > m_channels.size())
+//                             eDebug("channel_id(%d %02x) to big!!", title.channel_id);
+
+//                     eDebug("pos %d prog_id %02x %02x chid %02x summary_id %04x dest %p len %d\n",
+//                             pos, title.program_id_ml, title.program_id_lo, title.channel_id, summary_id, dest, slen);
 
-                       pos += 4;
+//                     eDebug("title_id %08x -> summary_id %04x\n", title_id, summary_id);
+
+                       pos += 3;
 
                        std::map<__u32, mhw_title_t>::iterator it = m_titles.find( title_id );
                        if ( it == m_titles.end() )
@@ -3379,7 +3491,7 @@ start_summary:
                        {
                                // Titles table has been read, there are summaries to read.
                                // Start reading summaries, store corresponding titles on the fly.
-                               startMHWReader2(0x236, 0x96);
+                               startMHWReader2(m_mhw2_summary_pid, 0x96);
                                startTimeout(15000);
                                return;
                        }
@@ -3387,7 +3499,7 @@ start_summary:
                else
                        return;
        }
-       else if (m_MHWFilterMask2.pid == 0x236 && m_MHWFilterMask2.data[0] == 0x96)
+       else if (m_MHWFilterMask2.pid == m_mhw2_summary_pid && m_MHWFilterMask2.data[0] == 0x96)
        // Summaries table
        {
                if (!checkTimeout())
@@ -3421,10 +3533,13 @@ start_summary:
                        }
                        else
                                return;  // continue reading
+
                        if (valid)
                        {
                                // data seems consistent...
                                __u32 summary_id = (data[3]<<8)|data[4];
+//                             eDebug ("summary id %04x\n", summary_id);
+//                             eDebug("[%02x %02x] %02x %02x %02x %02x %02x %02x %02x %02x XX\n", data[3], data[4], data[5], data[6], data[7], data[8], data[9], data[10], data[11], data[12], data[13] );
 
                                // ugly workaround to convert const __u8* to char*
                                char *tmp=0;
@@ -3442,7 +3557,7 @@ start_summary:
                                        len += lenline + 1;
                                }
                                if( len > 0 )
-                                   tmp[pos+len] = 0;
+                                       tmp[pos+len] = 0;
                                else
                                        tmp[pos+1] = 0;
 
@@ -3458,8 +3573,11 @@ start_summary:
                                        startTimeout(15000);
                                        std::string the_text = (char *) (data + pos + 1);
 
+//                                     eDebug ("summary id %04x : %s\n", summary_id, data+pos+1);
+
                                        while( itProgId != m_program_ids.end() && itProgId->first == summary_id )
                                        {
+//                                             eDebug(".");
                                                // Find corresponding title, store title and summary in epgcache.
                                                std::map<__u32, mhw_title_t>::iterator itTitle( m_titles.find( itProgId->second ) );
                                                if ( itTitle != m_titles.end() )
@@ -3479,16 +3597,16 @@ start_summary:
        }
        if (isRunning & eEPGCache::MHW)
        {
-               if ( m_MHWFilterMask2.pid == 0x231 && m_MHWFilterMask2.data[0] == 0xC8 && m_MHWFilterMask2.data[1] == 0)
+               if ( m_MHWFilterMask2.pid == m_mhw2_channel_pid && m_MHWFilterMask2.data[0] == 0xC8 && m_MHWFilterMask2.data[1] == 0)
                {
                        // Channels table has been read, start reading the themes table.
-                       startMHWReader2(0x231, 0xC8, 1);
+                       startMHWReader2(m_mhw2_channel_pid, 0xC8, 1);
                        return;
                }
-               else if ( m_MHWFilterMask2.pid == 0x231 && m_MHWFilterMask2.data[0] == 0xC8 && m_MHWFilterMask2.data[1] == 1)
+               else if ( m_MHWFilterMask2.pid == m_mhw2_channel_pid && m_MHWFilterMask2.data[0] == 0xC8 && m_MHWFilterMask2.data[1] == 1)
                {
                        // Themes table has been read, start reading the titles table.
-                       startMHWReader2(0x234, 0xe6);
+                       startMHWReader2(m_mhw2_title_pid, 0xe6);
                        return;
                }
                else
index 7d1b163fea2e9abb0447cfc942fa58d6d8431c99..4d45d87ee0459f881501746217441ca932354eed 100644 (file)
@@ -202,6 +202,7 @@ class eEPGCache: public eMainloop, private eThread, public Object
                ePtr<iDVBSectionReader> m_MHWReader, m_MHWReader2;
                eDVBSectionFilterMask m_MHWFilterMask, m_MHWFilterMask2;
                ePtr<eTimer> m_MHWTimeoutTimer;
+               __u16 m_mhw2_channel_pid, m_mhw2_title_pid, m_mhw2_summary_pid;
                bool m_MHWTimeoutet;
                void MHWTimeout() { m_MHWTimeoutet=true; }
                void readMHWData(const __u8 *data);
@@ -242,6 +243,9 @@ public:
                        leaveChannel,
                        quit,
                        got_private_pid,
+                       got_mhw2_channel_pid,
+                       got_mhw2_title_pid,
+                       got_mhw2_summary_pid,
                        timeChanged
                };
                int type;
index cff4dbb97e0c6a24eaf3e40c80fe1389878d4ff9..4ef7efaddbebe9b26cc67c5eff0527b879a183df 100644 (file)
@@ -522,7 +522,7 @@ public:
        virtual RESULT getCurrentFrontendParameters(ePtr<iDVBFrontendParameters> &)=0;
        enum 
        {
-               evtEOF, evtSOF, evtFailed
+               evtPreStart, evtEOF, evtSOF, evtFailed
        };
        virtual RESULT connectStateChange(const Slot1<void,iDVBChannel*> &stateChange, ePtr<eConnection> &connection)=0;
        virtual RESULT connectEvent(const Slot2<void,iDVBChannel*,int> &eventChange, ePtr<eConnection> &connection)=0;
index 0b4904fa9319a8cfd95f19c08811df71864c2047..f06c86e897b317044d9f336c536d8ccdcc37025c 100644 (file)
@@ -78,9 +78,9 @@ typedef struct {
    u_char ppv_id_ml                              :8;
    u_char ppv_id_lo                              :8;
    u_char program_id_hi                          :8;
-   u_char program_id_mh                          :8; // mhw2_title end (33chars max)
+   u_char program_id_mh                          :8;
    u_char program_id_ml                          :8;
-   u_char program_id_lo                          :8;
+   u_char program_id_lo                          :8; // mhw2_title end (35chars max)
    u_char mhw2_mjd_hi                            :8;
    u_char mhw2_mjd_lo                            :8;
    u_char mhw2_duration_hi                       :8;
index 9bd065b3d075e4ebf90bc8a77909e5902f909a21..ee89a3a43a93a55133f838c2d1aa34e27fdc2798 100644 (file)
@@ -75,6 +75,9 @@ void eDVBServicePMTHandler::channelEvent(iDVBChannel *channel, int event)
 {
        switch (event)
        {
+       case iDVBChannel::evtPreStart:
+               serviceEvent(eventPreStart);
+               break;
        case iDVBChannel::evtEOF:
                serviceEvent(eventEOF);
                break;
index a9ca23f246308b44d750fcaee304b7fa99d5dc2b..483c06b15ae3007c06514ca7760d30fdf7a05300 100644 (file)
@@ -123,6 +123,7 @@ public:
                eventNewProgramInfo, // we just received a PMT
                eventTuned,        // a channel was sucessfully (re-)tuned in, you may start additional filters now
                
+               eventPreStart,     // before start filepush thread
                eventSOF,          // seek pre start
                eventEOF,          // a file playback did end
                
index 1393bf77847a6ec384bba54b0bf31cd4fc8cd25a..5cdecbd610095ec2172b811454f0b71ec1013ed6 100644 (file)
@@ -244,6 +244,7 @@ off_t eMPEGStreamInformation::getAccessPoint(pts_t ts, int marg)
        off_t last = 0;
        off_t last2 = 0;
        pts_t lastc = 0;
+       ts += 1; // Add rounding error margin
        for (std::map<off_t, pts_t>::const_iterator i(m_access_points.begin()); i != m_access_points.end(); ++i)
        {
                pts_t delta = getDelta(i->first);
index a9eef4067e703bdd3db650f6e16fd8fb078226c5..d5ad24940714a3d4c048f48622d7c36ea1bc3272 100644 (file)
@@ -7,6 +7,7 @@
 #include <stdio.h>
 
 eDVBTSTools::eDVBTSTools()
+       :m_file_lock(true)
 {
        m_pid = -1;
        m_maxrange = 256*1024;
@@ -47,6 +48,7 @@ int eDVBTSTools::openFile(const char *filename, int nostreaminfo)
        
        m_samples_taken = 0;
 
+       eSingleLocker l(m_file_lock);
        if (m_file.open(filename, 1) < 0)
                return -1;
        return 0;
@@ -54,6 +56,7 @@ int eDVBTSTools::openFile(const char *filename, int nostreaminfo)
 
 void eDVBTSTools::closeFile()
 {
+       eSingleLocker l(m_file_lock);
        m_file.close();
 }
 
@@ -78,7 +81,8 @@ int eDVBTSTools::getPTS(off_t &offset, pts_t &pts, int fixed)
                return -1;
 
        offset -= offset % 188;
-       
+
+       eSingleLocker l(m_file_lock);
        if (m_file.lseek(offset, SEEK_SET) < 0)
        {
                eDebug("lseek failed");
@@ -134,7 +138,7 @@ int eDVBTSTools::getPTS(off_t &offset, pts_t &pts, int fixed)
                                        pts |= ((unsigned long long)(packet[ 9]&0xFF)) << 1;
                                        pts |= ((unsigned long long)(packet[10]&0x80)) >> 7;
                                        offset -= 188;
-                                       eDebug("PCR  found at %llx: %16llx", offset, pts);
+                                       eDebug("PCR %16llx found at %lld pid %02x (%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x)", pts, offset, pid, packet[0], packet[1], packet[2], packet[3], packet[4], packet[5], packet[6], packet[7], packet[8], packet[9], packet[10]);
                                        if (fixed && fixupPTS(offset, pts))
                                                return -1;
                                        return 0;
@@ -144,24 +148,83 @@ int eDVBTSTools::getPTS(off_t &offset, pts_t &pts, int fixed)
                } else
                        payload = packet + 4;
 
-               
 /*             if (m_pid >= 0)
                        if (pid != m_pid)
                                continue; */
                if (!pusi)
                        continue;
-               
-               
+
                        /* somehow not a startcode. (this is invalid, since pusi was set.) ignore it. */
                if (payload[0] || payload[1] || (payload[2] != 1))
                        continue;
-               
+
+               if (payload[3] == 0xFD)
+               { // stream use extension mechanism defined in ISO 13818-1 Amendment 2
+                       if (payload[7] & 1) // PES extension flag
+                       {
+                               int offs = 0;
+                               if (payload[7] & 0x80) // pts avail
+                                       offs += 5;
+                               if (payload[7] & 0x40) // dts avail
+                                       offs += 5;
+                               if (payload[7] & 0x20) // escr avail
+                                       offs += 6;
+                               if (payload[7] & 0x10) // es rate
+                                       offs += 3;
+                               if (payload[7] & 0x8) // dsm trickmode
+                                       offs += 1;
+                               if (payload[7] & 0x4) // additional copy info
+                                       offs += 1;
+                               if (payload[7] & 0x2) // crc
+                                       offs += 2;
+                               if (payload[8] < offs)
+                                       continue;
+                               uint8_t pef = payload[9+offs++]; // pes extension field
+                               if (pef & 1) // pes extension flag 2
+                               {
+                                       if (pef & 0x80) // private data flag
+                                               offs += 16;
+                                       if (pef & 0x40) // pack header field flag
+                                               offs += 1;
+                                       if (pef & 0x20) // program packet sequence counter flag
+                                               offs += 2;
+                                       if (pef & 0x10) // P-STD buffer flag
+                                               offs += 2;
+                                       if (payload[8] < offs)
+                                               continue;
+                                       uint8_t stream_id_extension_len = payload[9+offs++] & 0x7F;
+                                       if (stream_id_extension_len >= 1)
+                                       {
+                                               if (payload[8] < (offs + stream_id_extension_len) )
+                                                       continue;
+                                               if (payload[9+offs] & 0x80) // stream_id_extension_bit (should not set)
+                                                       continue;
+                                               switch (payload[9+offs])
+                                               {
+                                               case 0x55 ... 0x5f: // VC-1
+                                                       break;
+                                               case 0x71: // AC3 / DTS
+                                                       break;
+                                               default:
+                                                       eDebug("skip unknwn stream_id_extension %02x\n", payload[9+offs]);
+                                                       continue;
+                                               }
+                                       }
+                                       else
+                                               continue;
+                               }
+                               else
+                                       continue;
+                       }
+                       else
+                               continue;
+               }
                        /* drop non-audio, non-video packets because other streams
                           can be non-compliant.*/
-               if (((payload[3] & 0xE0) != 0xC0) &&  // audio
-                   ((payload[3] & 0xF0) != 0xE0))    // video
+               else if (((payload[3] & 0xE0) != 0xC0) &&  // audio
+                       ((payload[3] & 0xF0) != 0xE0)) // video
                        continue;
-               
+
                if (payload[7] & 0x80) /* PTS */
                {
                        pts  = ((unsigned long long)(payload[ 9]&0xE))  << 29;
@@ -171,11 +234,11 @@ int eDVBTSTools::getPTS(off_t &offset, pts_t &pts, int fixed)
                        pts |= ((unsigned long long)(payload[13]&0xFE)) >> 1;
                        offset -= 188;
 
-//                     eDebug("found pts %08llx at %08llx pid %02x stream: %02x", pts, offset, pid, payload[3]);
-                       
+                       eDebug("PTS %16llx found at %lld pid %02x stream: %02x", pts, offset, pid, payload[3]);
+
                                /* convert to zero-based */
                        if (fixed && fixupPTS(offset, pts))
-                                       return -1;
+                               return -1;
                        return 0;
                }
        }
@@ -212,10 +275,13 @@ int eDVBTSTools::fixupPTS(const off_t &offset, pts_t &now)
                        now -= pos;
                return 0;
        }
+       eDebug("eDVBTSTools::fixupPTS failed!");
+       return -1;
 }
 
 int eDVBTSTools::getOffset(off_t &offset, pts_t &pts, int marg)
 {
+       eDebug("getOffset for pts 0x%llx", pts);
        if (m_use_streaminfo)
        {
                if (pts >= m_pts_end && marg > 0 && m_end_valid)
@@ -355,7 +421,8 @@ void eDVBTSTools::calcEnd()
 {
        if (!m_file.valid())
                return;
-       
+
+       eSingleLocker l(m_file_lock);
        off_t end = m_file.lseek(0, SEEK_END);
        
        if (llabs(end - m_last_filelength) > 1*1024*1024)
@@ -440,6 +507,8 @@ void eDVBTSTools::takeSamples()
        m_samples_taken = 1;
        m_samples.clear();
        pts_t dummy;
+       int retries=2;
+
        if (calcLen(dummy) == -1)
                return;
        
@@ -449,21 +518,27 @@ void eDVBTSTools::takeSamples()
                bytes_per_sample = 40*1024*1024;
 
        bytes_per_sample -= bytes_per_sample % 188;
-       
-       for (off_t offset = m_offset_begin; offset < m_offset_end; offset += bytes_per_sample)
+
+       eDebug("samples step %lld, pts begin %llx, pts end %llx, offs begin %lld, offs end %lld:",
+               bytes_per_sample, m_pts_begin, m_pts_end, m_offset_begin, m_offset_end);
+
+       for (off_t offset = m_offset_begin; offset < m_offset_end;)
        {
                pts_t p;
-               takeSample(offset, p);
+               if (takeSample(offset, p) && retries--)
+                       continue;
+               retries = 2;
+               offset += bytes_per_sample;
        }
        m_samples[0] = m_offset_begin;
        m_samples[m_pts_end - m_pts_begin] = m_offset_end;
-       
-//     eDebug("begin, end: %llx %llx", m_offset_begin, m_offset_end); 
 }
 
        /* returns 0 when a sample was taken. */
 int eDVBTSTools::takeSample(off_t off, pts_t &p)
 {
+       off_t offset_org = off;
+
        if (!eDVBTSTools::getPTS(off, p, 1))
        {
                        /* as we are happily mixing PTS and PCR values (no comment, please), we might
@@ -481,18 +556,18 @@ int eDVBTSTools::takeSample(off_t off, pts_t &p)
                        {
                                if ((l->second > off) || (u->second < off))
                                {
-                                       eDebug("ignoring sample %llx %llx %llx (%lld %lld %lld)",
+                                       eDebug("ignoring sample %lld %lld %lld (%llx %llx %llx)",
                                                l->second, off, u->second, l->first, p, u->first);
                                        return 1;
                                }
                        }
                }
 
-               
+               eDebug("adding sample %lld: pts 0x%llx -> pos %lld (diff %lld bytes)", offset_org, p, off, off-offset_org);
                m_samples[p] = off;
                return 0;
        }
-       return 1;
+       return -1;
 }
 
 int eDVBTSTools::findPMT(int &pmt_pid, int &service_id)
@@ -504,6 +579,7 @@ int eDVBTSTools::findPMT(int &pmt_pid, int &service_id)
                return -1;
        }
 
+       eSingleLocker l(m_file_lock);
        if (m_file.lseek(0, SEEK_SET) < 0)
        {
                eDebug("seek failed");
@@ -652,18 +728,23 @@ int eDVBTSTools::findFrame(off_t &_offset, size_t &len, int &direction, int fram
 
 int eDVBTSTools::findNextPicture(off_t &offset, size_t &len, int &distance, int frame_types)
 {
-       int nr_frames = 0;
+       int nr_frames, direction;
 //     eDebug("trying to move %d frames at %llx", distance, offset);
        
        frame_types = frametypeI; /* TODO: intelligent "allow IP frames when not crossing an I-Frame */
 
-       int direction = distance > 0 ? 0 : -1;
-       distance = abs(distance);
-       
        off_t new_offset = offset;
        size_t new_len = len;
        int first = 1;
 
+       if (distance > 0) {
+               direction = 0;
+                nr_frames = 0;
+        } else {
+               direction = -1;
+                nr_frames = -1;
+               distance = -distance+1;
+        }      
        while (distance > 0)
        {
                int dir = direction;
@@ -677,12 +758,18 @@ int eDVBTSTools::findNextPicture(off_t &offset, size_t &len, int &distance, int
                
 //             eDebug("we moved %d, %d to go frames (now at %llx)", dir, distance, new_offset);
 
-               if (distance >= 0 || first)
+               if (distance >= 0 || direction == 0)
                {
                        first = 0;
                        offset = new_offset;
                        len = new_len;
                        nr_frames += abs(dir);
+               } 
+               else if (first) {
+                       first = 0;
+                       offset = new_offset;
+                       len = new_len;
+                       nr_frames += abs(dir) + distance; // never jump forward during rewind
                }
        }
 
index c230a341e580f8e914de48cda41370f7681153a4..ed8b9241f285c74189a6078cc778621dc8ecc8ae 100644 (file)
@@ -4,6 +4,7 @@
 #include <sys/types.h>
 #include <lib/dvb/pvrparse.h>
 #include <lib/base/rawfile.h>
+#include <lib/base/elock.h>
 
 /*
  * Note: we're interested in PTS values, not STC values.
@@ -75,9 +76,10 @@ public:
 private:
        int m_pid;
        int m_maxrange;
-       
+
+       eSingleLock m_file_lock;
        eRawFile m_file;
-       
+
        int m_begin_valid, m_end_valid;
        pts_t m_pts_begin, m_pts_end;
        off_t m_offset_begin, m_offset_end;
index bb2d75686a0b20e499de9aaf7ca27f73e469b9d2..8e332e3381c85b8b5d565fc33caa92230e404e45 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
old mode 100644 (file)
new mode 100755 (executable)
index fe505c2..4700e9e
@@ -1,5 +1,5 @@
 from MenuList import MenuList
-from Tools.Directories import SCOPE_SKIN_IMAGE, resolveFilename
+from Tools.Directories import SCOPE_CURRENT_SKIN, resolveFilename
 from enigma import RT_HALIGN_LEFT, eListboxPythonMultiContent, gFont
 from Tools.LoadPixmap import LoadPixmap
 
@@ -10,7 +10,7 @@ def ChoiceEntryComponent(key, text):
        else:
                res.append((eListboxPythonMultiContent.TYPE_TEXT, 45, 00, 800, 25, 0, RT_HALIGN_LEFT, text[0]))
        
-               png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/key_" + key + ".png"))
+               png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/buttons/key_" + key + ".png"))
                if png is not None:
                        res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 5, 0, 35, 25, png))
        
old mode 100644 (file)
new mode 100755 (executable)
index 00949e2..418a1b6
@@ -1,7 +1,7 @@
 from HTMLComponent import HTMLComponent
 from GUIComponent import GUIComponent
-from config import KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_0, KEY_DELETE, KEY_BACKSPACE, KEY_OK, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT, KEY_NUMBERS, ConfigElement
-from Components.ActionMap import NumberActionMap
+from config import KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_0, KEY_DELETE, KEY_BACKSPACE, KEY_OK, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT, KEY_NUMBERS, ConfigElement, ConfigText, ConfigPassword
+from Components.ActionMap import NumberActionMap, ActionMap
 from enigma import eListbox, eListboxPythonConfigContent, eRCInput, eTimer
 from Screens.MessageBox import MessageBox
 
@@ -66,6 +66,7 @@ class ConfigList(HTMLComponent, GUIComponent, object):
                self.current = self.getCurrent()
                if self.current:
                        self.current[1].onSelect(self.session)
+
                for x in self.onSelectionChanged:
                        x()
 
@@ -127,13 +128,52 @@ class ConfigListScreen:
                        "9": self.keyNumberGlobal,
                        "0": self.keyNumberGlobal
                }, -1) # to prevent left/right overriding the listbox
+
+               self["VirtualKB"] = ActionMap(["VirtualKeyboardActions"],
+               {
+                       "showVirtualKeyboard": self.KeyText,
+               }, -2)
+               self["VirtualKB"].setEnabled(False)
                
                self["config"] = ConfigList(list, session = session)
+               
                if on_change is not None:
                        self.__changed = on_change
                else:
                        self.__changed = lambda: None
-
+               
+               if not self.handleInputHelpers in self["config"].onSelectionChanged:
+                       self["config"].onSelectionChanged.append(self.handleInputHelpers)
+
+       def handleInputHelpers(self):
+               if self["config"].getCurrent() is not None:
+                       if isinstance(self["config"].getCurrent()[1], ConfigText) or isinstance(self["config"].getCurrent()[1], ConfigPassword):
+                               if self.has_key("VKeyIcon"):
+                                       self["VirtualKB"].setEnabled(True)
+                                       self["VKeyIcon"].boolean = True
+                               if self.has_key("HelpWindow"):
+                                       if self["config"].getCurrent()[1].help_window.instance is not None:
+                                               helpwindowpos = self["HelpWindow"].getPosition()
+                                               from enigma import ePoint
+                                               self["config"].getCurrent()[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1]))
+                       else:
+                               if self.has_key("VKeyIcon"):
+                                       self["VirtualKB"].setEnabled(False)
+                                       self["VKeyIcon"].boolean = False
+               else:
+                       if self.has_key("VKeyIcon"):
+                               self["VirtualKB"].setEnabled(False)
+                               self["VKeyIcon"].boolean = False
+
+       def KeyText(self):
+               from Screens.VirtualKeyBoard import VirtualKeyBoard
+               self.session.openWithCallback(self.VirtualKeyBoardCallback, VirtualKeyBoard, title = self["config"].getCurrent()[0], text = self["config"].getCurrent()[1].getValue())
+
+       def VirtualKeyBoardCallback(self, callback = None):
+               if callback is not None and len(callback):
+                       self["config"].getCurrent()[1].setValue(callback)
+                       self["config"].invalidate(self["config"].getCurrent())
+                       
        def keyOK(self):
                self["config"].handleKey(KEY_OK)
 
index 75c8a08ec9d10ef8d9a1cdb0385b8b970c745b5d..3b6fd3e807c74704be117a3cdc01de3ab194ea0b 100644 (file)
@@ -6,4 +6,4 @@ install_PYTHON = \
        ConditionalShowHide.py ServicePosition.py ValueRange.py RdsInfo.py Streaming.py \
        StaticMultiList.py ServiceTime.py MovieInfo.py MenuEntryCompare.py StringListSelection.py \
        ValueBitTest.py TunerInfo.py ConfigEntryTest.py TemplatedMultiContent.py ProgressToText.py \
-       Combine.py
+       Combine.py SensorToText.py
diff --git a/lib/python/Components/Converter/SensorToText.py b/lib/python/Components/Converter/SensorToText.py
new file mode 100644 (file)
index 0000000..fb156fa
--- /dev/null
@@ -0,0 +1,14 @@
+from Components.Converter.Converter import Converter
+
+class SensorToText(Converter, object):
+       def __init__(self, arguments):
+               Converter.__init__(self, arguments)
+        
+       def getText(self):
+               if self.source.getValue() is None:
+                       return ""
+               return "%d %s" % (self.source.getValue(), self.source.getUnit())
+       
+       text = property(getText)
+        
+        
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
index 59f9262..41cd1b2
@@ -8,7 +8,7 @@ from Tools.LoadPixmap import LoadPixmap
 
 from time import localtime, time
 from ServiceReference import ServiceReference
-from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN
 
 EPG_TYPE_SINGLE = 0
 EPG_TYPE_MULTI = 1
@@ -53,11 +53,11 @@ class EPGList(HTMLComponent, GUIComponent):
                        assert(type == EPG_TYPE_SIMILAR)
                        self.l.setBuildFunc(self.buildSimilarEntry)
                self.epgcache = eEPGCache.getInstance()
-               self.clock_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock.png'))
-               self.clock_add_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_add.png'))
-               self.clock_pre_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_pre.png'))
-               self.clock_post_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_post.png'))
-               self.clock_prepost_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_prepost.png'))
+               self.clock_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock.png'))
+               self.clock_add_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_add.png'))
+               self.clock_pre_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_pre.png'))
+               self.clock_post_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_post.png'))
+               self.clock_prepost_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_prepost.png'))
 
        def getEventFromId(self, service, eventid):
                event = None
diff --git a/lib/python/Components/FanControl.py b/lib/python/Components/FanControl.py
new file mode 100644 (file)
index 0000000..cc133ac
--- /dev/null
@@ -0,0 +1,74 @@
+import os
+
+from Components.config import config, ConfigSubList, ConfigSubsection, ConfigSlider
+from Tools.BoundFunction import boundFunction
+
+class FanControl:
+       # ATM there's only support for one fan
+       def __init__(self):
+               if os.path.exists("/proc/stb/fp/fan_vlt") or os.path.exists("/proc/stb/fp/fan_pwm") or os.path.exists("/proc/stb/fp/fan_speed"):
+                       self.fancount = 1
+               else:
+                       self.fancount = 0
+               self.createConfig()
+
+       def createConfig(self):
+               def setVlt(fancontrol, fanid, configElement):
+                       fancontrol.setVoltage(fanid, configElement.value)
+               def setPWM(fancontrol, fanid, configElement):
+                       fancontrol.setPWM(fanid, configElement.value)
+               
+               config.fans = ConfigSubList()
+               for fanid in range(self.getFanCount()):
+                       fan = ConfigSubsection()
+                       fan.vlt = ConfigSlider(default = 16, increment = 5, limits = (0, 255))
+                       fan.pwm = ConfigSlider(default = 0, increment = 5, limits = (0, 255))
+                       fan.vlt.addNotifier(boundFunction(setVlt, self, fanid))
+                       fan.pwm.addNotifier(boundFunction(setPWM, self, fanid))
+                       config.fans.append(fan)
+                       
+       def getConfig(self, fanid):
+               return config.fans[fanid]
+       
+       def getFanCount(self):
+               return self.fancount
+       
+       def hasRPMSensor(self, fanid):
+               return os.path.exists("/proc/stb/fp/fan_speed")
+       
+       def hasFanControl(self, fanid):
+               return os.path.exists("/proc/stb/fp/fan_vlt") or os.path.exists("/proc/stb/fp/fan_pwm")
+       
+       def getFanSpeed(self, fanid):
+               f = open("/proc/stb/fp/fan_speed", "r")
+               value = int(f.readline().strip()[:-4])
+               f.close()
+               return value
+       
+       def getVoltage(self, fanid):
+               f = open("/proc/stb/fp/fan_vlt", "r")
+               value = int(f.readline().strip(), 16)
+               f.close()
+               return value
+       
+       def setVoltage(self, fanid, value):
+               if value > 255:
+                       return
+               f = open("/proc/stb/fp/fan_vlt", "w")
+               f.write("%x" % value)
+               f.close()
+               
+       def getPWM(self, fanid):
+               f = open("/proc/stb/fp/fan_pwm", "r")
+               value = int(f.readline().strip(), 16)
+               f.close()
+               return value
+       
+       def setPWM(self, fanid, value):
+               if value > 255:
+                       return
+               f = open("/proc/stb/fp/fan_pwm", "w")
+               f.write("%x" % value)
+               f.close()
+       
+fancontrol = FanControl()
\ No newline at end of file
index 38b08547c0a97d1e7c9238c361cf21361fc34be5..222512eab861180ef3d26810040442ac4af63b7c 100755 (executable)
@@ -3,7 +3,7 @@ from os import path as os_path, listdir
 from MenuList import MenuList
 from Components.Harddisk import harddiskmanager
 
-from Tools.Directories import SCOPE_SKIN_IMAGE, resolveFilename
+from Tools.Directories import SCOPE_CURRENT_SKIN, resolveFilename, fileExists
 
 from enigma import RT_HALIGN_LEFT, eListboxPythonMultiContent, \
        eServiceReference, eServiceCenter, gFont
@@ -23,7 +23,6 @@ EXTENSIONS = {
                "ts": "movie",
                "avi": "movie",
                "divx": "movie",
-               "m4v": "movie",
                "mpg": "movie",
                "mpeg": "movie",
                "mkv": "movie",
@@ -35,12 +34,12 @@ def FileEntryComponent(name, absolute = None, isDir = False):
        res = [ (absolute, isDir) ]
        res.append((eListboxPythonMultiContent.TYPE_TEXT, 35, 1, 470, 20, 0, RT_HALIGN_LEFT, name))
        if isDir:
-               png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/directory.png"))
+               png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "extensions/directory.png"))
        else:
                extension = name.split('.')
                extension = extension[-1].lower()
                if EXTENSIONS.has_key(extension):
-                       png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/" + EXTENSIONS[extension] + ".png"))
+                       png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "extensions/" + EXTENSIONS[extension] + ".png"))
                else:
                        png = None
        if png is not None:
@@ -160,8 +159,11 @@ class FileList(MenuList):
                        directories.sort()
                        files.sort()
                else:
-                       if os_path.exists(directory):
-                               files = listdir(directory)
+                       if fileExists(directory):
+                               try:
+                                       files = listdir(directory)
+                               except:
+                                       files = []
                                files.sort()
                                tmpfiles = files[:]
                                for x in tmpfiles:
@@ -256,12 +258,12 @@ def MultiFileSelectEntryComponent(name, absolute = None, isDir = False, selected
        res = [ (absolute, isDir, selected, name) ]
        res.append((eListboxPythonMultiContent.TYPE_TEXT, 55, 1, 470, 20, 0, RT_HALIGN_LEFT, name))
        if isDir:
-               png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/directory.png"))
+               png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "extensions/directory.png"))
        else:
                extension = name.split('.')
                extension = extension[-1].lower()
                if EXTENSIONS.has_key(extension):
-                       png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/" + EXTENSIONS[extension] + ".png"))
+                       png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "extensions/" + EXTENSIONS[extension] + ".png"))
                else:
                        png = None
        if png is not None:
@@ -269,10 +271,10 @@ def MultiFileSelectEntryComponent(name, absolute = None, isDir = False, selected
 
        if not name.startswith('<'):
                if selected is False:
-                       icon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_off.png"))
+                       icon = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_off.png"))
                        res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 2, 0, 25, 25, icon))
                else:
-                       icon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_on.png"))
+                       icon = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_on.png"))
                        res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 2, 0, 25, 25, icon))
        
        return res
@@ -374,8 +376,11 @@ class MultiFileSelectList(FileList):
                        directories.sort()
                        files.sort()
                else:
-                       if os_path.exists(directory):
-                               files = listdir(directory)
+                       if fileExists(directory):
+                               try:
+                                       files = listdir(directory)
+                               except:
+                                       files = []
                                files.sort()
                                tmpfiles = files[:]
                                for x in tmpfiles:
index 2efdb68f6a1c759180870b460783e2edde5e35e9..03f574f3dbb207e60e6f1c6a7e5ad6796461c0bc 100755 (executable)
@@ -290,7 +290,10 @@ class Harddisk:
        # any access has been made to the disc. If there has been no access over a specifed time,
        # we set the hdd into standby.
        def readStats(self):
-               l = readFile("/sys/block/%s/stat" % self.device)
+               try:
+                       l = open("/sys/block/%s/stat" % self.device).read()
+               except IOError:
+                       return -1,-1
                (nr_read, _, _, _, nr_write) = l.split()[:5]
                return int(nr_read), int(nr_write)
 
@@ -319,7 +322,7 @@ class Harddisk:
                l = sum(stats)
                print "sum", l, "prev_sum", self.last_stat
 
-               if l != self.last_stat: # access
+               if l != self.last_stat and l >= 0: # access
                        print "hdd was accessed since previous check!"
                        self.last_stat = l
                        self.last_access = t
index 0e501237e4af42bbb96dbc9fff5056f7d7bd4386..7d27c097ee9fd2c98a68c977a7711253f25d82be 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 34710fa15b70ad87072498a22c71994e0bf04245..b5ef0688bc24d280b645cece398c49b3335889a9 100755 (executable)
@@ -19,4 +19,4 @@ install_PYTHON = \
        Element.py Playlist.py ParentalControl.py ParentalControlList.py \
        Ipkg.py SelectionList.py Scanner.py SystemInfo.py DreamInfoHandler.py \
        Task.py language_cache.py Console.py ResourceManager.py TuneTest.py \
-       Keyboard.py
+       Keyboard.py Sensors.py FanControl.py
old mode 100644 (file)
new mode 100755 (executable)
index 12f2727..5583b22
@@ -1,6 +1,6 @@
 from MenuList import MenuList
 
-from Tools.Directories import SCOPE_SKIN_IMAGE, resolveFilename
+from Tools.Directories import SCOPE_CURRENT_SKIN, resolveFilename
 from os import path
 
 from enigma import eListboxPythonMultiContent, RT_VALIGN_CENTER, gFont, eServiceCenter
@@ -14,11 +14,11 @@ STATE_REWIND = 3
 STATE_FORWARD = 4
 STATE_NONE = 5
 
-PlayIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/ico_mp_play.png"))
-PauseIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/ico_mp_pause.png"))
-StopIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/ico_mp_stop.png"))
-RewindIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/ico_mp_rewind.png"))
-ForwardIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/ico_mp_forward.png"))
+PlayIcon = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/ico_mp_play.png"))
+PauseIcon = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/ico_mp_pause.png"))
+StopIcon = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/ico_mp_stop.png"))
+RewindIcon = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/ico_mp_rewind.png"))
+ForwardIcon = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/ico_mp_forward.png"))
 
 def PlaylistEntryComponent(serviceref, state):
        res = [ serviceref ]
index f65d6090c3c8e699d901ab6778cd0ad97f2ee8a4..bd10d9c3e2360da293c93e077100259bca3b04dd 100755 (executable)
@@ -24,6 +24,7 @@ class Network:
                self.activateConsole = Console()
                self.resetNetworkConsole = Console()
                self.DnsConsole = Console()
+               self.PingConsole = Console()
                self.config_ready = None
                self.getInterfaces()
 
@@ -475,10 +476,17 @@ class Network:
 
        def getLinkStateFinished(self, result, retval,extra_args):
                (callback) = extra_args
+
                if self.LinkConsole is not None:
                        if len(self.LinkConsole.appContainers) == 0:
                                callback(result)
                        
+       def stopPingConsole(self):
+               if self.PingConsole is not None:
+                       if len(self.PingConsole.appContainers):
+                               for name in self.PingConsole.appContainers.keys():
+                                       self.PingConsole.kill(name)
+
        def stopLinkStateConsole(self):
                if self.LinkConsole is not None:
                        if len(self.LinkConsole.appContainers):
index 05204a74c3b51795db5e125cba992375e891c126..d374f7e7c47efb51d2f5bf1e64844ed274af4c8e 100644 (file)
@@ -899,7 +899,7 @@ def InitSecParams():
        x.addNotifier(lambda configElement: secClass.setParam(secClass.DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER, configElement.value))
        config.sec.delay_after_voltage_change_before_measure_idle_inputpower = x
 
-       x = ConfigInteger(default=750, limits = (0, 9999))
+       x = ConfigInteger(default=900, limits = (0, 9999))
        x.addNotifier(lambda configElement: secClass.setParam(secClass.DELAY_AFTER_ENABLE_VOLTAGE_BEFORE_MOTOR_CMD, configElement.value))
        config.sec.delay_after_enable_voltage_before_motor_command = x
 
@@ -947,7 +947,7 @@ def InitNimManager(nimmgr):
 
        lnb_choices = {
                "universal_lnb": _("Universal LNB"),
-#              "unicable": _("Unicable"),
+               "unicable": _("Unicable"),
                "c_band": _("C-Band"),
                "user_defined": _("User defined")}
 
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index 08af7d0..1c5423f
@@ -1,9 +1,9 @@
 from MenuList import MenuList
-from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN
 from enigma import eListboxPythonMultiContent, eListbox, gFont, RT_HALIGN_LEFT
 from Tools.LoadPixmap import LoadPixmap
 
-selectionpng = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/selectioncross.png"))
+selectionpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/selectioncross.png"))
 
 def SelectionEntryComponent(description, value, index, selected):
        res = [
diff --git a/lib/python/Components/Sensors.py b/lib/python/Components/Sensors.py
new file mode 100644 (file)
index 0000000..8898a03
--- /dev/null
@@ -0,0 +1,72 @@
+from Components.FanControl import fancontrol
+
+class Sensors:
+       # (type, name, unit, directory)
+       TYPE_TEMPERATURE = 0
+       # (type, name, unit, fanid)
+       TYPE_FAN_RPM = 1
+       
+       def __init__(self):
+               # (type, name, unit, sensor_specific_dict/list)
+               self.sensors_list = []
+               self.addSensors()
+               
+       def getSensorsCount(self, type = None):
+               if type is None:
+                       return len(self.sensors_list)
+               count = 0
+               for sensor in self.sensors_list:
+                       if sensor[0] == type:
+                               count += 1
+               return count
+       
+       # returns a list of sensorids of type "type"
+       def getSensorsList(self, type = None):
+               if type is None:
+                       return range(len(self.sensors_list))
+               list = []
+               for sensorid in range(len(self.sensors_list)):
+                       if self.sensors_list[sensorid][0] == type:
+                               list.append(sensorid)
+               return list
+       
+       
+       def getSensorType(self, sensorid):
+               return self.sensors_list[sensorid][0]
+       
+       def getSensorName(self, sensorid):
+               return self.sensors_list[sensorid][1]
+       
+       def getSensorValue(self, sensorid):
+               value = -1
+               sensor = self.sensors_list[sensorid]
+               if sensor[0] == self.TYPE_TEMPERATURE:
+                       f = open("%s/value" % sensor[3], "r")
+                       value = int(f.readline().strip())
+                       f.close()
+               elif sensor[0] == self.TYPE_FAN_RPM:
+                       value = fancontrol.getFanSpeed(sensor[3])
+               return value
+       
+       def getSensorUnit(self, sensorid):
+               return self.sensors_list[sensorid][2]
+
+       def addSensors(self):
+               import os
+               if os.path.exists("/proc/stb/sensors"):
+                       for dirname in os.listdir("/proc/stb/sensors"):
+                               if dirname.find("temp", 0, 4) == 0:
+                                       f = open("/proc/stb/sensors/%s/name" % dirname, "r")
+                                       name = f.readline().strip()
+                                       f.close()
+                                       
+                                       f = open("/proc/stb/sensors/%s/unit" % dirname, "r")
+                                       unit = f.readline().strip()
+                                       f.close()
+                                       
+                                       self.sensors_list.append((self.TYPE_TEMPERATURE, name, unit, "/proc/stb/sensors/%s" % dirname))
+               for fanid in range(fancontrol.getFanCount()):
+                       if fancontrol.hasRPMSensor(fanid):
+                               self.sensors_list.append((self.TYPE_FAN_RPM, _("Fan %d") % (fanid + 1), "rpm", fanid))
+       
+sensors = Sensors()
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
index b0283c1..6095812
@@ -5,7 +5,7 @@ from skin import parseColor, parseFont
 from enigma import eListboxServiceContent, eListbox, eServiceCenter, eServiceReference, gFont, eRect
 from Tools.LoadPixmap import LoadPixmap
 
-from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN
 
 class ServiceList(HTMLComponent, GUIComponent):
        MODE_NORMAL = 0
@@ -15,27 +15,27 @@ class ServiceList(HTMLComponent, GUIComponent):
                GUIComponent.__init__(self)
                self.l = eListboxServiceContent()
 
-               pic = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/folder.png"))
+               pic = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/folder.png"))
                if pic:
                        self.l.setPixmap(self.l.picFolder, pic)
 
-               pic = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/marker.png"))
+               pic = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/marker.png"))
                if pic:
                        self.l.setPixmap(self.l.picMarker, pic)
 
-               pic = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "ico_dvb_s-fs8.png"))
+               pic = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "ico_dvb_s-fs8.png"))
                if pic:
                        self.l.setPixmap(self.l.picDVB_S, pic)
 
-               pic = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "ico_dvb_c-fs8.png"))
+               pic = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "ico_dvb_c-fs8.png"))
                if pic:
                        self.l.setPixmap(self.l.picDVB_C, pic)
 
-               pic = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "ico_dvb_t-fs8.png"))
+               pic = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "ico_dvb_t-fs8.png"))
                if pic:
                        self.l.setPixmap(self.l.picDVB_T, pic)
 
-               pic = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "ico_service_group-fs8.png"))
+               pic = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "ico_service_group-fs8.png"))
                if pic:
                        self.l.setPixmap(self.l.picServiceGroup, pic)
 
index 6ef8cac6542c2bdc970b3461d29ebbcc2863f51b..436d31be8b14e24d2ddfd7974a05b1f00c6ef88d 100644 (file)
@@ -4,4 +4,4 @@ install_PYTHON = \
        __init__.py Clock.py EventInfo.py Source.py List.py CurrentService.py \
        FrontendStatus.py Boolean.py Config.py ServiceList.py RdsDecoder.py StreamService.py \
        StaticText.py CanvasSource.py ServiceEvent.py Event.py FrontendInfo.py TunerInfo.py \
-       RecordState.py Progress.py
+       RecordState.py Progress.py Sensor.py
diff --git a/lib/python/Components/Sources/Sensor.py b/lib/python/Components/Sources/Sensor.py
new file mode 100644 (file)
index 0000000..e927bbf
--- /dev/null
@@ -0,0 +1,31 @@
+from Components.Sensors import sensors
+
+from enigma import eTimer
+
+from Source import Source
+
+class SensorSource(Source):
+       def __init__(self, update_interval = 500, sensorid = None):
+               self.update_interval = update_interval
+               self.sensorid = sensorid
+               Source.__init__(self)
+
+               if sensorid is not None:
+                       self.update_timer = eTimer()
+                       self.update_timer.callback.append(self.updateValue)
+                       self.update_timer.start(self.update_interval)
+
+       def getValue(self):
+               if self.sensorid is not None:
+                       return sensors.getSensorValue(self.sensorid)
+               return None
+       
+       def getUnit(self):
+               return sensors.getSensorUnit(self.sensorid)
+
+       def updateValue(self):
+               self.changed((self.CHANGED_POLL,))
+
+       def destroy(self):
+               if self.sensorid is not None:
+                       self.update_timer.callback.remove(self.updateValue)
index d2b405a287734b81539589445d20eaea7fbbe587..f9c4065fa951e2f5d2d595b52bc0775b2b896843 100644 (file)
@@ -1,5 +1,6 @@
 from enigma import eDVBResourceManager
 from Tools.Directories import fileExists
+from Tools.HardwareInfo import HardwareInfo
 
 SystemInfo = { }
 
@@ -27,3 +28,4 @@ def countFrontpanelLEDs():
 SystemInfo["NumFrontpanelLEDs"] = countFrontpanelLEDs()
 SystemInfo["FrontpanelDisplay"] = fileExists("/dev/dbox/oled0") or fileExists("/dev/dbox/lcd0")
 SystemInfo["FrontpanelDisplayGrayscale"] = fileExists("/dev/dbox/oled0")
+SystemInfo["DeepstandbySupport"] = HardwareInfo().get_device_name() != "dm800"
old mode 100644 (file)
new mode 100755 (executable)
index 44a7eb4..2a7405d
@@ -7,7 +7,7 @@ from enigma import eListboxPythonMultiContent, eListbox, gFont, \
        RT_HALIGN_LEFT, RT_HALIGN_RIGHT, RT_VALIGN_CENTER
 from Tools.LoadPixmap import LoadPixmap
 from timer import TimerEntry
-from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN
 
 class TimerList(HTMLComponent, GUIComponent, object):
 #
@@ -65,7 +65,7 @@ class TimerList(HTMLComponent, GUIComponent, object):
                res.append((eListboxPythonMultiContent.TYPE_TEXT, width-150, 50, 150, 20, 1, RT_HALIGN_RIGHT|RT_VALIGN_CENTER, state))
 
                if timer.disabled:
-                       png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/redx.png"))
+                       png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/redx.png"))
                        res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 490, 5, 40, 40, png))
                return res
 
index 6fcab8bccd615373a99a94fd4a603897678fc0fb..6082710768479543100ea036b4584ac788c10d0c 100644 (file)
@@ -1,12 +1,13 @@
 from Components.Harddisk import harddiskmanager
 from config import ConfigSubsection, ConfigYesNo, config, ConfigSelection, ConfigText, ConfigNumber, ConfigSet, ConfigLocations
+from Tools.Directories import resolveFilename, SCOPE_HDD
 from enigma import Misc_Options, setTunerTypePriorityOrder;
 from SystemInfo import SystemInfo
 import os
 
 def InitUsageConfig():
        config.usage = ConfigSubsection();
-       config.usage.showdish = ConfigYesNo(default = False)
+       config.usage.showdish = ConfigYesNo(default = True)
        config.usage.multibouquet = ConfigYesNo(default = False)
        config.usage.quickzap_bouquet_change = ConfigYesNo(default = False)
        config.usage.e1like_radio_mode = ConfigYesNo(default = False)
@@ -30,8 +31,11 @@ def InitUsageConfig():
                ("standard", _("standard")), ("swap", _("swap PiP and main picture")),
                ("swapstop", _("move PiP to main picture")), ("stop", _("stop PiP")) ])
 
+       config.usage.default_path = ConfigText(default = resolveFilename(SCOPE_HDD))
+       config.usage.timer_path = ConfigText(default = "<default>")
+       config.usage.instantrec_path = ConfigText(default = "<default>")
+       config.usage.timeshift_path = ConfigText(default = "/media/hdd/")
        config.usage.allowed_timeshift_paths = ConfigLocations(default = ["/media/hdd/"])
-       config.usage.timeshift_path = ConfigText(default = "/media/hdd")
 
        config.usage.on_movie_start = ConfigSelection(default = "ask", choices = [
                ("ask", _("Ask user")), ("resume", _("Resume from last position")), ("beginning", _("Start from the beginning")) ])
@@ -65,19 +69,19 @@ def InitUsageConfig():
        
        def TunerTypePriorityOrderChanged(configElement):
                setTunerTypePriorityOrder(int(configElement.value))
-       config.usage.alternatives_priority.addNotifier(TunerTypePriorityOrderChanged)
+       config.usage.alternatives_priority.addNotifier(TunerTypePriorityOrderChanged, immediate_feedback=False)
 
        def setHDDStandby(configElement):
                for hdd in harddiskmanager.HDDList():
                        hdd[1].setIdleTime(int(configElement.value))
-       config.usage.hdd_standby.addNotifier(setHDDStandby)
+       config.usage.hdd_standby.addNotifier(setHDDStandby, immediate_feedback=False)
 
        def set12VOutput(configElement):
                if configElement.value == "on":
                        Misc_Options.getInstance().set_12V_output(1)
                elif configElement.value == "off":
                        Misc_Options.getInstance().set_12V_output(0)
-       config.usage.output_12V.addNotifier(set12VOutput)
+       config.usage.output_12V.addNotifier(set12VOutput, immediate_feedback=False)
 
        SystemInfo["12V_Output"] = Misc_Options.getInstance().detected_12V_output()
 
@@ -128,3 +132,23 @@ def updateChoices(sel, choices):
                                        defval = str(x)
                                        break
                sel.setChoices(map(str, choices), defval)
+
+def preferredPath(path):
+       if config.usage.setup_level.index < 2 or path == "<default>":
+               return None  # config.usage.default_path.value, but delay lookup until usage
+       elif path == "<current>":
+               return config.movielist.last_videodir.value
+       elif path == "<timer>":
+               return config.movielist.last_timer_videodir.value
+       else:
+               return path
+
+def preferredTimerPath():
+       return preferredPath(config.usage.timer_path.value)
+
+def preferredInstantRecordPath():
+       return preferredPath(config.usage.instantrec_path.value)
+
+def defaultMoviePath():
+       return config.usage.default_path.value
+
index 789ec32fc85695396f84ceff645bf547d608692d..a6007b105f62ebb9f5e73bc1291546e95a69d200 100755 (executable)
@@ -1,6 +1,6 @@
 from enigma import getPrevAsciiCode
 from Tools.NumericalTextInput import NumericalTextInput
-from Tools.Directories import resolveFilename, SCOPE_CONFIG
+from Tools.Directories import resolveFilename, SCOPE_CONFIG, fileExists
 from Components.Harddisk import harddiskmanager
 from copy import copy as copy_copy
 from os import path as os_path
@@ -1034,13 +1034,13 @@ class ConfigSelectionNumber(ConfigSelection):
                        step += stepwidth
                
                ConfigSelection.__init__(self, choices, default)
-               
+
        def getValue(self):
-               return int(self.text)
+               return int(ConfigSelection.getValue(self))
 
        def setValue(self, val):
-               self.text = str(val)
-               
+               ConfigSelection.setValue(self, str(val))
+
        def handleKey(self, key):
                if not self.wraparound:
                        if key == KEY_RIGHT:
@@ -1050,8 +1050,6 @@ class ConfigSelectionNumber(ConfigSelection):
                                if self.choices.index(self.value) == 0:
                                        return
                ConfigSelection.handleKey(self, key)
-                               
-                               
 
 class ConfigNumber(ConfigText):
        def __init__(self, default = 0):
@@ -1285,7 +1283,6 @@ class ConfigLocations(ConfigElement):
                self.default = default
                self.locations = []
                self.mountpoints = []
-               harddiskmanager.on_partition_list_change.append(self.mountpointsChanged)
                self.value = default[:]
 
        def setValue(self, value):
@@ -1322,7 +1319,7 @@ class ConfigLocations(ConfigElement):
                locations = [[x, None, False, False] for x in tmp]
                self.refreshMountpoints()
                for x in locations:
-                       if os_path.exists(x[0]):
+                       if fileExists(x[0]):
                                x[1] = self.getMountpoint(x[0])
                                x[2] = True
                self.locations = locations
@@ -1341,20 +1338,11 @@ class ConfigLocations(ConfigElement):
                        return False
                return self.tostring([x[0] for x in locations]) != sv
 
-       def mountpointsChanged(self, action, dev):
-               print "Mounts changed: ", action, dev
-               mp = dev.mountpoint+"/"
-               if action == "add":
-                       self.addedMount(mp)
-               elif action == "remove":
-                       self.removedMount(mp)
-               self.refreshMountpoints()
-
        def addedMount(self, mp):
                for x in self.locations:
                        if x[1] == mp:
                                x[2] = True
-                       elif x[1] == None and os_path.exists(x[0]):
+                       elif x[1] == None and fileExists(x[0]):
                                x[1] = self.getMountpoint(x[0])
                                x[2] = True
 
@@ -1364,7 +1352,7 @@ class ConfigLocations(ConfigElement):
                                x[2] = False
 
        def refreshMountpoints(self):
-               self.mountpoints = [p.mountpoint + "/" for p in harddiskmanager.getMountedPartitions() if p.mountpoint != "/"]
+               self.mountpoints = [p.mountpoint for p in harddiskmanager.getMountedPartitions() if p.mountpoint != "/"]
                self.mountpoints.sort(key = lambda x: -len(x))
 
        def checkChangedMountpoints(self):
old mode 100644 (file)
new mode 100755 (executable)
index 23edc8e..1431caf
@@ -8,7 +8,7 @@
                     <packagename>enigma2-plugin-extensions-cutlisteditor</packagename>
                     <shortdescription>CutListEditor allows you to edit your movies.</shortdescription>
                     <description>CutListEditor allows you to edit your movies.\nSeek to the start of the stuff you want to cut away. Press OK, select 'start cut'.\nThen seek to the end, press OK, select 'end cut'. That's it.</description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/cutlisteditor.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_cutlisteditor.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -17,7 +17,7 @@
                     <shortdescription>Mit dem Schnitteditor können Sie Ihre Aufnahmen schneiden.</shortdescription>
                     <description>Mit dem Schnitteditor können Sie Ihre Aufnahmen schneiden.\nSpulen Sie zum Anfang des zu schneidenden Teils der Aufnahme. Drücken Sie dann OK und wählen Sie: 'start cut'.\nDann spulen Sie zum Ende, drücken OK und wählen 'end cut'. Das ist alles.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/cutlisteditor.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_cutlisteditor.jpg" />
           </info>
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-extensions-cutlisteditor" />
index 7566346216991c79134fb8fe1fb39a106bba8ccd..abd606d6fa2d9e1bd15580507f485e7f29b3cfee 100644 (file)
@@ -7,6 +7,7 @@ from Components.ActionMap import HelpableActionMap
 from Components.MultiContent import MultiContentEntryText
 from Components.ServiceEventTracker import ServiceEventTracker, InfoBarBase
 from Components.VideoWindow import VideoWindow
+from Components.Label import Label
 from Screens.InfoBarGenerics import InfoBarSeek, InfoBarCueSheetSupport
 from Components.GUIComponent import GUIComponent
 from enigma import eListboxPythonMultiContent, eListbox, gFont, iPlayableService, RT_HALIGN_RIGHT
@@ -119,12 +120,13 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                <widget source="session.CurrentService" render="Label" position="135,405" size="450,50" font="Regular;22" halign="center" valign="center">
                        <convert type="ServiceName">Name</convert>
                </widget>
-               <widget source="session.CurrentService" render="Label" position="50,450" zPosition="1" size="620,25" font="Regular;20" halign="center" valign="center">
+               <widget source="session.CurrentService" render="Label" position="320,450" zPosition="1" size="420,25" font="Regular;20" halign="left" valign="center">
                        <convert type="ServicePosition">Position,Detailed</convert>
                </widget>
-               <eLabel position="62,98" size="179,274" backgroundColor="#505555" />
-               <eLabel position="64,100" size="175,270" backgroundColor="#000000" />
-               <widget source="cutlist" position="64,100" zPosition="1" size="175,270" scrollbarMode="showOnDemand" transparent="1" render="Listbox" >
+               <widget name="SeekState" position="210,450" zPosition="1" size="100,25" halign="right" font="Regular;20" valign="center" />
+               <eLabel position="48,98" size="204,274" backgroundColor="#505555" />
+               <eLabel position="50,100" size="200,270" backgroundColor="#000000" />
+               <widget source="cutlist" position="50,100" zPosition="1" size="200,270" scrollbarMode="showOnDemand" transparent="1" render="Listbox" >
                        <convert type="TemplatedMultiContent">
                                {"template": [
                                                MultiContentEntryText(size=(125, 20), text = 1, backcolor = MultiContentTemplateColor(3)),
@@ -161,6 +163,9 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                self["Timeline"] = ServicePositionGauge(self.session.nav)
                self["cutlist"] = List(self.getCutlist())
                self["cutlist"].onSelectionChanged.append(self.selectionChanged)
+               self["SeekState"] = Label()
+               self.onPlayStateChanged.append(self.updateStateLabel)
+               self.updateStateLabel(self.seekstate)
 
                self["Video"] = VideoWindow(decoder = 0)
 
@@ -184,12 +189,16 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                        })
 
                # to track new entries we save the last version of the cutlist
-               self.last_cuts = [ ]
+               self.last_cuts = self.getCutlist()
                self.cut_start = None
+               self.inhibit_seek = False
                self.onClose.append(self.__onClose)
 
        def __onClose(self):
-               self.session.nav.playService(self.old_service)
+               self.session.nav.playService(self.old_service, forceRestart=True)
+
+       def updateStateLabel(self, state):
+               self["SeekState"].setText(state[3].strip())
 
        def showTutorial(self):
                if not self.tutorial_seen:
@@ -238,44 +247,46 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                return r
 
        def selectionChanged(self):
-               where = self["cutlist"].getCurrent()
-               if where is None:
-                       print "no selection"
-                       return
-               pts = where[0][0]
-               seek = self.getSeek()
-               if seek is None:
-                       print "no seek"
-                       return
-               seek.seekTo(pts)
+               if not self.inhibit_seek:
+                       where = self["cutlist"].getCurrent()
+                       if where is None:
+                               print "no selection"
+                               return
+                       pts = where[0][0]
+                       seek = self.getSeek()
+                       if seek is None:
+                               print "no seek"
+                               return
+                       seek.seekTo(pts)
 
        def refillList(self):
                print "cue sheet changed, refilling"
                self.downloadCuesheet()
 
-               # get the first changed entry, and select it
+               # get the first changed entry, counted from the end, and select it
                new_list = self.getCutlist()
                self["cutlist"].list = new_list
 
-               for i in range(min(len(new_list), len(self.last_cuts))):
-                       if new_list[i] != self.last_cuts[i]:
-                               self["cutlist"].setIndex(i)
+               l1 = len(new_list)
+               l2 = len(self.last_cuts)
+               for i in range(min(l1, l2)):
+                       if new_list[l1-i-1] != self.last_cuts[l2-i-1]:
+                               self["cutlist"].setIndex(l1-i-1)
                                break
                self.last_cuts = new_list
 
        def getStateForPosition(self, pos):
-               state = 0 # in
-
-               # when first point is "in", the beginning is "out"
-               if len(self.cut_list) and self.cut_list[0][1] == 0:
-                       state = 1
-
+               state = -1
                for (where, what) in self.cut_list:
-                       if where < pos:
-                               if what == 0: # in
-                                       state = 0
-                               elif what == 1: # out
+                       if what in [0, 1]:
+                               if where < pos:
+                                       state = what
+                               elif where == pos:
                                        state = 1
+                               elif state == -1:
+                                       state = 1 - what
+               if state == -1:
+                       state = 0
                return state
 
        def showMenu(self):
@@ -329,11 +340,11 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                        in_after = None
 
                        for (where, what) in self.cut_list:
-                               if what == 1 and where < self.context_position: # out
+                               if what == 1 and where <= self.context_position: # out
                                        out_before = (where, what)
                                elif what == 0 and where < self.context_position: # in, before out
                                        out_before = None
-                               elif what == 0 and where > self.context_position and in_after is None:
+                               elif what == 0 and where >= self.context_position and in_after is None:
                                        in_after = (where, what)
 
                        if out_before is not None:
@@ -341,12 +352,16 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
 
                        if in_after is not None:
                                self.cut_list.remove(in_after)
+                       self.inhibit_seek = True
                        self.uploadCuesheet()
+                       self.inhibit_seek = False
                elif result == CutListContextMenu.RET_MARK:
                        self.__addMark()
                elif result == CutListContextMenu.RET_DELETEMARK:
                        self.cut_list.remove(self.context_nearest_mark)
+                       self.inhibit_seek = True
                        self.uploadCuesheet()
+                       self.inhibit_seek = False
                elif result == CutListContextMenu.RET_REMOVEBEFORE:
                        # remove in/out marks before current position
                        for (where, what) in self.cut_list[:]:
@@ -354,7 +369,9 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                                        self.cut_list.remove((where, what))
                        # add 'in' point
                        bisect.insort(self.cut_list, (self.context_position, 0))
+                       self.inhibit_seek = True
                        self.uploadCuesheet()
+                       self.inhibit_seek = False
                elif result == CutListContextMenu.RET_REMOVEAFTER:
                        # remove in/out marks after current position
                        for (where, what) in self.cut_list[:]:
@@ -362,7 +379,9 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                                        self.cut_list.remove((where, what))
                        # add 'out' point
                        bisect.insort(self.cut_list, (self.context_position, 1))
+                       self.inhibit_seek = True
                        self.uploadCuesheet()
+                       self.inhibit_seek = False
                elif result == CutListContextMenu.RET_GRABFRAME:
                        self.grabFrame()
 
index bb40cc30b607fe17a1d89e86ccfc3fffd1a9ac80..dbc988b1cdf8a41ad16d3beb5de8e2dd7cb1a270 100755 (executable)
@@ -10,7 +10,8 @@ from Components.ActionMap import HelpableActionMap, ActionMap
 from Components.Sources.List import List
 from Components.Sources.StaticText import StaticText
 from Components.Sources.Progress import Progress
-from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_LEFT
+from Components.MultiContent import MultiContentEntryText
+from enigma import gFont, RT_HALIGN_LEFT, RT_HALIGN_RIGHT
 from Tools.Directories import resolveFilename, SCOPE_PLUGINS
 
 class TitleList(Screen, HelpableScreen):
@@ -27,7 +28,18 @@ class TitleList(Screen, HelpableScreen):
                        <widget source="title_label" render="Label" position="10,48" size="540,38" font="Regular;18" transparent="1" />
                        <widget source="error_label" render="Label" position="10,48" size="540,395" zPosition="3" font="Regular;20" transparent="1" />
                        <widget source="titles" render="Listbox" scrollbarMode="showOnDemand" position="10,86" size="540,312" zPosition="3" transparent="1" >
-                               <convert type="StaticMultiList" />
+                               <convert type="TemplatedMultiContent">
+                                       {"template": [
+                                                       MultiContentEntryText(pos = (0, 0), size = (420, 20), font = 0, flags = RT_HALIGN_LEFT, text = 1), # index 1 Title,
+                                                       MultiContentEntryText(pos = (0, 20), size = (328, 17), font = 1, flags = RT_HALIGN_LEFT, text = 2), # index 2 description,
+                                                       MultiContentEntryText(pos = (420, 6), size = (120, 20), font = 1, flags = RT_HALIGN_RIGHT, text = 3), # index 3 begin time,
+                                                       MultiContentEntryText(pos = (328, 20), size = (154, 17), font = 1, flags = RT_HALIGN_RIGHT, text = 4), # index 4 channel,
+                                                       MultiContentEntryText(pos = (482, 20), size = (58, 20), font = 1, flags = RT_HALIGN_RIGHT, text = 5), # index 4 channel,
+                                               ],
+                                       "fonts": [gFont("Regular", 20), gFont("Regular", 14)],
+                                       "itemHeight": 37
+                                       }
+                               </convert>
                        </widget>
                        <widget source="space_bar" render="Progress" position="10,410" size="540,26" borderWidth="1" backgroundColor="#254f7497" />
                        <widget source="space_label" render="Label" position="40,414" size="480,22" zPosition="2" font="Regular;18" halign="center" transparent="1" foregroundColor="#000000" />
@@ -71,7 +83,7 @@ class TitleList(Screen, HelpableScreen):
                else:
                        self.newProject()
 
-               self["titles"] = List(list = [ ], enableWrapAround = True, item_height=30, fonts = [gFont("Regular", 20)])
+               self["titles"] = List([])
                self.updateTitleList()
                self.previous_size = 0
                self.onLayoutFinish.append(self.layoutFinished)
@@ -259,15 +271,14 @@ class TitleList(Screen, HelpableScreen):
                job = Process.DVDJob(self.project, menupreview=True)
                job_manager.in_background = False
                job_manager.AddJob(job)
-               
+
        def updateTitleList(self):
-               res = [ ]
+               list = [ ]
                for title in self.project.titles:
-                       a = [ title, (eListboxPythonMultiContent.TYPE_TEXT, 0, 5, 500, 25, 0, RT_HALIGN_LEFT, title.properties.menutitle.getValue())  ]
-                       res.append(a)
-               self["titles"].list = res
+                       list.append((title, title.properties.menutitle.getValue(), title.properties.menusubtitle.getValue(), title.DVBchannel, title.formatDVDmenuText("$D.$M.$Y, $T", 0), title.formatDVDmenuText("$l", 0)))
+               self["titles"].list = list
                self.updateSize()
-               if len(res):
+               if len(list):
                        self["key_red"].text = _("Remove title")
                        self["key_yellow"].text = _("Title properties")
                else:
index 11601cc301adceab005a8768449bb31d2498377c..c3f78d4a20642880140233fe64c302e9ef57afcc 100755 (executable)
@@ -164,7 +164,8 @@ class LanguageChoices():
                self.choices.sort()
                self.choices.insert(0,("nolang", ("unspecified")))
                self.choices.insert(1,(syslang, self.langdict[syslang]))
-               self.choices.insert(2,("en", self.langdict["en"]))
+               if syslang != "en":
+                       self.choices.insert(2,("en", self.langdict["en"]))
 
        def getLanguage(self, DVB_lang):
                DVB_lang = DVB_lang.lower()
index 1899cb71d01ad7f894f918fcc41cbbbd9d3cd621..0b3be7d6d0a9cee4060b3a867d2d851621437354 100755 (executable)
@@ -1,3 +1,5 @@
 installdir = $(datadir)/meta/
 
 dist_install_DATA = plugin_dvdburn.xml
+
+EXTRA_DIST = dvdburn_de.jpg dvdburn_en.jpg
diff --git a/lib/python/Plugins/Extensions/DVDBurn/meta/dvdburn_de.jpg b/lib/python/Plugins/Extensions/DVDBurn/meta/dvdburn_de.jpg
new file mode 100755 (executable)
index 0000000..4472971
Binary files /dev/null and b/lib/python/Plugins/Extensions/DVDBurn/meta/dvdburn_de.jpg differ
diff --git a/lib/python/Plugins/Extensions/DVDBurn/meta/dvdburn_en.jpg b/lib/python/Plugins/Extensions/DVDBurn/meta/dvdburn_en.jpg
new file mode 100755 (executable)
index 0000000..509816d
Binary files /dev/null and b/lib/python/Plugins/Extensions/DVDBurn/meta/dvdburn_en.jpg differ
old mode 100644 (file)
new mode 100755 (executable)
index 7971539..647d1cf
@@ -9,6 +9,7 @@
                     <packagename>enigma2-plugin-extensions-dvdburn</packagename>
                     <shortdescription>With DVDBurn you can burn your recordings to a dvd.</shortdescription>
                     <description>With DVDBurn you can burn your recordings to a dvd.\nArchive all your favorite movies to recordable dvds with menus if wanted.</description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_dvdburn_en.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -16,6 +17,7 @@
                     <packagename>enigma2-plugin-extensions-dvdburn</packagename>
                     <shortdescription>Mit DVDBurn brennen Sie ihre Aufnahmen auf DVD.</shortdescription>
                     <description>Mit DVDBurn brennen Sie ihre Aufnahmen auf DVD.\nArchivieren Sie Ihre Liblingsfilme auf DVD mit Menus wenn Sie es wünschen.</description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_dvdburn_de.jpg" />
           </info>
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-extensions-dvdburn" />
old mode 100644 (file)
new mode 100755 (executable)
index 2658138..1353f7d
@@ -8,7 +8,7 @@
                     <packagename>enigma2-plugin-extensions-dvdplayer</packagename>
                     <shortdescription>DVDPlayer plays your DVDs on your Dreambox.</shortdescription>
                     <description>DVDPlayer plays your DVDs on your Dreambox.\nWith the DVDPlayer you can play your DVDs on your Dreambox from a DVD or even from an iso file or video_ts folder on your harddisc or network.</description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/dvdplayer.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_dvdplayer.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -17,7 +17,7 @@
                     <shortdescription>Spielen Sie Ihre DVDs mit dem DVDPlayer auf Ihrer Dreambox ab.</shortdescription>
                     <description>Spielen Sie Ihre DVDs mit dem DVDPlayer auf Ihrer Dreambox ab.\nMit dem DVDPlayer können Sie Ihre DVDs auf Ihrer Dreambox abspielen. Dabei ist es egal ob Sie von DVD, iso-Datei oder sogar direkt von einer video_ts Ordnerstruktur von Ihrer Festplatte oder dem Netzwerk abspielen.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/dvdplayer.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_dvdplayer.jpg" />
           </info>
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-extensions-dvdplayer" />
index 94f2ee38ad0ed7cff675b9f2b8d8f5631ba40f41..0372c49719edaf6d223af83fc119e32525535095 100644 (file)
@@ -696,7 +696,7 @@ RESULT eServiceDVD::setTrickmode(int /*trick*/)
 
 RESULT eServiceDVD::isCurrentlySeekable()
 {
-       return m_state == stRunning;
+       return m_state == stRunning ? 3 : 0;
 }
 
 RESULT eServiceDVD::keyPressed(int key)
old mode 100644 (file)
new mode 100755 (executable)
index b22c4b8..1d621f4
@@ -16,7 +16,7 @@ from Screens.TimerEntry import TimerEntry
 from Screens.EpgSelection import EPGSelection
 from Screens.TimerEdit import TimerSanityConflict
 from Screens.MessageBox import MessageBox
-from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN
 from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT
 from ServiceReference import ServiceReference
 from Tools.LoadPixmap import LoadPixmap
@@ -41,11 +41,11 @@ class EPGList(HTMLComponent, GUIComponent):
                if overjump_empty:
                        self.l.setSelectableFunc(self.isSelectable)
                self.epgcache = eEPGCache.getInstance()
-               self.clock_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock.png'))
-               self.clock_add_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_add.png'))
-               self.clock_pre_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_pre.png'))
-               self.clock_post_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_post.png'))
-               self.clock_prepost_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_prepost.png'))
+               self.clock_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock.png'))
+               self.clock_add_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_add.png'))
+               self.clock_pre_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_pre.png'))
+               self.clock_post_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_post.png'))
+               self.clock_prepost_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_prepost.png'))
                self.time_base = None
                self.time_epoch = time_epoch
                self.list = None
old mode 100644 (file)
new mode 100755 (executable)
index 8dfdbbf..b68d095
Binary files a/lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_de.jpg and b/lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_de.jpg differ
old mode 100644 (file)
new mode 100755 (executable)
index 95b6665..6953f27
Binary files a/lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_en.jpg and b/lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_en.jpg differ
old mode 100644 (file)
new mode 100755 (executable)
index 7b0b134..a10840d
@@ -9,7 +9,7 @@
                     <packagename>eenigma2-plugin-extensions-graphmultiepg</packagename>
                     <shortdescription>GraphMultiEPG shows a graphical timeline EPG.</shortdescription>
                     <description>GraphMultiEPG shows a graphical timeline EPG.\nShows a nice overview of all running und upcoming tv shows.</description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/graphmultiepg_en.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_graphmultiepg_en.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -18,7 +18,7 @@
                     <shortdescription>Zeigt ein grafisches Zeitlinien-EPG.</shortdescription>
                     <description>Zeigt ein grafisches Zeitlinien-EPG.\nZeigt eine grafische Übersicht aller laufenden und kommenden Sendungen.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/graphmultiepg_de.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_graphmultiepg_de.jpg" />
           </info>
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-extensions-graphmultiepg" />
old mode 100644 (file)
new mode 100755 (executable)
index 4396161..41a67c2
Binary files a/lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_de.jpg and b/lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_de.jpg differ
old mode 100644 (file)
new mode 100755 (executable)
index e1d3575..6bfbbc5
Binary files a/lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_en.jpg and b/lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_en.jpg differ
old mode 100644 (file)
new mode 100755 (executable)
index 825793f..2f9f22b
@@ -8,7 +8,7 @@
                     <packagename>enigma2-plugin-extensions-mediaplayer</packagename>
                     <shortdescription>Mediaplayer plays your favorite music and videos.</shortdescription>
                     <description>Mediaplayer plays your favorite music and videos.\nPlay all your favorite music and video files, organize them in playlists, view cover and album information.</description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/mediaplayer_en.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_mediaplayer_en.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -17,7 +17,7 @@
                     <shortdescription>Mediaplayer spielt Ihre Musik und Videos.</shortdescription>
                     <description>Mediaplayer spielt Ihre Musik und Videos.\nSie können all Ihre Musik- und Videodateien abspielen, in Playlisten organisieren, Cover und Albuminformationen abrufen.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/mediaplayer_de.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_mediaplayer_de.jpg" />
           </info>
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-extensions-mediaplayer" />
old mode 100644 (file)
new mode 100755 (executable)
index 98bc060..0fc78fb
@@ -19,7 +19,7 @@ from Components.Playlist import PlaylistIOInternal, PlaylistIOM3U, PlaylistIOPLS
 from Components.AVSwitch import AVSwitch
 from Components.Harddisk import harddiskmanager
 from Components.config import config
-from Tools.Directories import fileExists, pathExists, resolveFilename, SCOPE_CONFIG, SCOPE_PLAYLIST, SCOPE_SKIN_IMAGE
+from Tools.Directories import fileExists, pathExists, resolveFilename, SCOPE_CONFIG, SCOPE_PLAYLIST, SCOPE_CURRENT_SKIN
 from settings import MediaPlayerSettings
 import random
 
@@ -50,7 +50,7 @@ class MediaPixmap(Pixmap):
                                        noCoverFile = value
                                        break
                if noCoverFile is None:
-                       noCoverFile = resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/no_coverArt.png")
+                       noCoverFile = resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/no_coverArt.png")
                self.noCoverPixmap = LoadPixmap(noCoverFile)
                return Pixmap.applySkin(self, desktop, screen)
 
@@ -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|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 = FileList(defaultDir, matchingPattern = "(?i)^.*\.(mp2|mp3|ogg|ts|m2ts|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 e2aa0e3b5a65328f3de2c91ab398f190c369e5c1..d80b8c27f9f572107bfbfc37adc060a6bf7c6bf2 100755 (executable)
@@ -1,3 +1,5 @@
 installdir = $(datadir)/meta/
 
 dist_install_DATA = plugin_mediascanner.xml
+
+EXTRA_DIST = mediascanner_de.jpg mediascanner_en.jpg
diff --git a/lib/python/Plugins/Extensions/MediaScanner/meta/mediascanner_de.jpg b/lib/python/Plugins/Extensions/MediaScanner/meta/mediascanner_de.jpg
new file mode 100755 (executable)
index 0000000..e6a191c
Binary files /dev/null and b/lib/python/Plugins/Extensions/MediaScanner/meta/mediascanner_de.jpg differ
diff --git a/lib/python/Plugins/Extensions/MediaScanner/meta/mediascanner_en.jpg b/lib/python/Plugins/Extensions/MediaScanner/meta/mediascanner_en.jpg
new file mode 100755 (executable)
index 0000000..b9561c2
Binary files /dev/null and b/lib/python/Plugins/Extensions/MediaScanner/meta/mediascanner_en.jpg differ
old mode 100644 (file)
new mode 100755 (executable)
index d899fdb..eced924
@@ -9,6 +9,7 @@
                     <packagename>enigma2-plugin-extensions-mediascanner</packagename>
                     <shortdescription>MediaScanner scans devices for playable media files.</shortdescription>
                     <description>MediaScanner scans devices for playable media files and displays a menu with possible actions like viewing pictures or playing movies.</description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_mediascanner_en.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -17,6 +18,7 @@
                     <shortdescription>MediaScanner durchsucht Geräte nach Mediendateien.</shortdescription>
                     <description>MediaScanner durchsucht Geräte nach Mediendateien  und bietet Ihnen die dazu passenden Aktionen an wie z.B. Bilder betrachten oder Videos abspielen.
                     </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_mediascanner_en.jpg" />
           </info>
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-extensions-mediascanner" />
old mode 100644 (file)
new mode 100755 (executable)
index 40e59b6..faff978
@@ -8,7 +8,7 @@
                     <packagename>enigma2-plugin-extensions-pictureplayer</packagename>
                     <shortdescription>PicturePlayer displays your photos on the TV.</shortdescription>
                     <description>The PicturePlayer displays your photos on the TV.\nYou can view them as thumbnails or slideshow.</description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/pictureplayer.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_pictureplayer.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -17,7 +17,7 @@
                     <shortdescription>Der Bildbetrachter zeigt Ihre Bilder auf dem Fernseher an.</shortdescription>
                     <description>Der Bildbetrachter zeigt Ihre Bilder auf dem Fernseher an.\nSie können sich Ihre Bilder als Thumbnails, einzeln oder als Slideshow anzeigen lassen.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/pictureplayer.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_pictureplayer.jpg" />
           </info>
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-extensions-pictureplayer" />
index d7fc6898831e55c4411c3558ac964d87b1ad0669..7cf0c18b506a302b0bc069ffc672a9b28a27a0b7 100755 (executable)
@@ -52,6 +52,14 @@ class PluginDescriptor:
        # reason (True: Networkconfig read finished, False: Networkconfig reload initiated )
        WHERE_NETWORKCONFIG_READ = 12
 
+       WHERE_AUDIOMENU = 13
+
+       # fnc 'SoftwareSupported' or  'AdvancedSoftwareSupported' must take a parameter and return None
+       # if the plugin should not be displayed inside Softwaremanger or return a function which is called with session
+       # and 'None' as parameter to call the plugin from the Softwaremanager menus. "menuEntryName" and "menuEntryDescription"
+       # should be provided to name and describe the new menu entry.
+       WHERE_SOFTWAREMANAGER = 14
+
        def __init__(self, name = "Plugin", where = [ ], description = "", icon = None, fnc = None, wakeupfnc = None, internal = False):
                self.name = name
                self.internal = internal
index 94be47471d7ec7750fdf09b68cd63a18ea46feb4..d9d96bcf3ba448d5f92a5f596b634655f66dabe1 100755 (executable)
@@ -1,3 +1,5 @@
 installdir = $(datadir)/meta/
 
 dist_install_DATA = plugin_cleanupwizard.xml
+
+EXTRA_DIST = cleanupwizard_de.jpg cleanupwizard_en.jpg
diff --git a/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/cleanupwizard_de.jpg b/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/cleanupwizard_de.jpg
new file mode 100755 (executable)
index 0000000..2f086fb
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/cleanupwizard_de.jpg differ
diff --git a/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/cleanupwizard_en.jpg b/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/cleanupwizard_en.jpg
new file mode 100755 (executable)
index 0000000..d014cb5
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/cleanupwizard_en.jpg differ
index 10ccc73c3e297f8cce2f75f1c25ceca8d264d648..99add3d30b7fe0b47cc1fd1be3ba1d9615f0685b 100755 (executable)
@@ -10,6 +10,7 @@
                     <description>The CleanupWizard informs you when your internal free memory of your dreambox has droppen under 2MB.
                    You can use this wizard to remove some extensions.
                     </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_cleanupwizard_en.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -19,6 +20,7 @@
                     <description>Der CleanupWizard informiert Sie, wenn der interne freie Speicher Ihrer Dreambox unter 2MB fällt.
                    Sie können dann einige Erweiterungen deinstallieren um wieder Platz zu schaffen.
                     </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_cleanupwizard_de.jpg" />
           </info>
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-systemplugins-cleanupwizard" />
old mode 100644 (file)
new mode 100755 (executable)
index 120ac82..75771f9
Binary files a/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/ciassignment.jpg and b/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/ciassignment.jpg differ
old mode 100644 (file)
new mode 100755 (executable)
index bb2bf59..9abc598
@@ -13,7 +13,7 @@
                     in your Dreambox and assign to each of them dedicated providers/services or caids.\n
                     So it is then possible to watch a scrambled service while recording another one.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/ciassignment.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_ciassignment.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -24,7 +24,7 @@
                     So ist es möglich mit einem CI einen Sender aufzunehmen\n
                     und mit einem anderen einen Sender zu schauen.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/ciassignment.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_ciassignment.jpg" />
           </info>
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-systemplugins-commoninterfaceassignment" />
index b619c8c604e3f91b35ba28ec1e54ec654ec2be68..aed728db029fafae4141c8f8f32f418a24d96d26 100755 (executable)
@@ -1,3 +1,5 @@
 installdir = $(datadir)/meta/
 
 dist_install_DATA = plugin_crashlogautosubmit.xml
+
+EXTRA_DIST = crashlogautosubmit_de.jpg crashlogautosubmit_en.jpg
diff --git a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/crashlogautosubmit_de.jpg b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/crashlogautosubmit_de.jpg
new file mode 100755 (executable)
index 0000000..0489416
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/crashlogautosubmit_de.jpg differ
diff --git a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/crashlogautosubmit_en.jpg b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/crashlogautosubmit_en.jpg
new file mode 100755 (executable)
index 0000000..5e5c728
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/crashlogautosubmit_en.jpg differ
old mode 100644 (file)
new mode 100755 (executable)
index 261eb49..a118ed7
@@ -10,6 +10,7 @@
                     <description>With the CrashlogAutoSubmit extension it is possible to automatically send crashlogs
                    found on your Harddrive to Dream Multimedia
                     </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_crashlogautosubmit_en.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -17,8 +18,9 @@
                     <packagename>enigma2-plugin-systemplugins-crashlogautosubmit</packagename>
                     <shortdescription>Automatisches versenden von Crashlogs an Dream Multimedia</shortdescription>
                     <description>Mit dem CrashlogAutoSubmit Plugin ist es möglich auf Ihrer Festplatte
-                   gefundene Crashlogs automatisch  an Dream Multimedia zu versenden.
+                   gefundene Crashlogs automatisch an Dream Multimedia zu versenden.
                     </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_crashlogautosubmit_de.jpg" />
           </info>
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-systemplugins-crashlogautosubmit" />
old mode 100644 (file)
new mode 100755 (executable)
index a0fd3b1..f4d0a1e
Binary files a/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/defaultservicescanner.jpg and b/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/defaultservicescanner.jpg differ
old mode 100644 (file)
new mode 100755 (executable)
index bf0ce25..41d41ed
@@ -10,7 +10,7 @@
                     <shortdescription>Scans default lamedbs sorted by satellite with a connected dish positioner.</shortdescription>
                     <description>With the DefaultServicesScanner extension you can scan default lamedbs sorted by satellite with a connected dish positioner.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/defaultservicescanner.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_defaultservicescanner.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -19,7 +19,7 @@
                     <shortdescription>Standard Sendersuche nach Satellit mit einem Rotor.</shortdescription>
                     <description>Mit der DefaultServicesScanner Erweiterung können Sie eine standard Sendersuche nach Satellit mit einem angeschlossenen Rotor durchführen.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/defaultservicescanner.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_defaultservicescanner.jpg" />
           </info>
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-systemplugins-defaultservicesscanner" />
index 8405ed7ace124d44b65f540b12d188b453575fb6..9b0a2ede06ede1da7919192b29158bd466241628 100755 (executable)
@@ -2,4 +2,4 @@ installdir = $(datadir)/meta/
 
 dist_install_DATA = plugin_diseqctester.xml
 
-EXTRA_DIST = diseqctester.jpg
+EXTRA_DIST = diseqctester_de.jpg diseqctester_en.jpg
diff --git a/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester.jpg b/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester.jpg
deleted file mode 100644 (file)
index c872334..0000000
Binary files a/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester.jpg and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester_de.jpg b/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester_de.jpg
new file mode 100755 (executable)
index 0000000..5a6e153
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester_de.jpg differ
diff --git a/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester_en.jpg b/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester_en.jpg
new file mode 100755 (executable)
index 0000000..43dad76
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester_en.jpg differ
old mode 100644 (file)
new mode 100755 (executable)
index 5415db0..33808b3
@@ -10,7 +10,7 @@
                     <shortdescription>Test your Diseqc equipment.</shortdescription>
                     <description>With the DiseqcTester extension you can test your satellite equipment for Diseqc compatibility and errors.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/diseqctester.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_diseqctester_en.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -19,7 +19,7 @@
                     <shortdescription>Testet Ihr Diseqc Equipment.</shortdescription>
                     <description>Mit der DiseqcTester Erweiterung können Sie Ihr Satelliten-Equipment nach Diseqc-Kompatibilität und Fehlern überprüfen.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/diseqctester.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_diseqctester_de.jpg" />
           </info>
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-systemplugins-diseqctester" />
index a8b187dc6496917fc837f57c08beeb05b0560c52..9cc538f3a55289dc57704c94d68dc84871ed38fe 100755 (executable)
@@ -3,7 +3,8 @@ installdir = $(pkglibdir)/python/Plugins/SystemPlugins
 SUBDIRS = SoftwareManager FrontprocessorUpgrade PositionerSetup Satfinder \
        SkinSelector SatelliteEquipmentControl Videomode VideoTune Hotplug \
        DefaultServicesScanner NFIFlash DiseqcTester CommonInterfaceAssignment \
-       CrashlogAutoSubmit CleanupWizard VideoEnhancement WirelessLan NetworkWizard
+       CrashlogAutoSubmit CleanupWizard VideoEnhancement WirelessLan NetworkWizard \
+       TempFanControl
 
 install_PYTHON =       \
        __init__.py
index 686bded02a431b461cf573111158a6673ba910a3..0633e7cf608ab7fc1e26d94b6d2d8b94e2b55b8c 100755 (executable)
@@ -2,4 +2,4 @@ installdir = $(datadir)/meta/
 
 dist_install_DATA = plugin_nfiflash.xml
 
-EXTRA_DIST = nfiflash.jpg
+EXTRA_DIST = nfiflash_de.jpg nfiflash_en.jpg
diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash.jpg b/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash.jpg
deleted file mode 100644 (file)
index 0a5fa46..0000000
Binary files a/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash.jpg and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash_de.jpg b/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash_de.jpg
new file mode 100755 (executable)
index 0000000..fec93f4
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash_de.jpg differ
diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash_en.jpg b/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash_en.jpg
new file mode 100755 (executable)
index 0000000..32a9967
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash_en.jpg differ
old mode 100644 (file)
new mode 100755 (executable)
index 2de88f0..c81f4ca
@@ -12,7 +12,7 @@
                     <description>With the NFIFlash extension it is possible to prepare a USB stick with an Dreambox image.\n
                     It is then possible to flash your Dreambox with the image on that stick.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/nfiflash.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_nfiflash_en.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -22,7 +22,7 @@
                     <description>Mit der NFIFlash Erweiterung können Sie ein Dreambox Image auf einen USB-Stick laden.\
                     Mit diesem USB-Stick ist es dann möglich Ihre Dreambox zu flashen.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/nfiflash.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_nfiflash_de.jpg" />
           </info>
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-systemplugins-nfiflash" />
old mode 100644 (file)
new mode 100755 (executable)
index 40914e1..28b3330
@@ -1,20 +1,28 @@
+from Plugins.Plugin import PluginDescriptor
+from Tools.HardwareInfo import HardwareInfo
+from Tools.Directories import fileExists
+from downloader import NFIDownload, filescan
+
+def NFIFlasherMain(session, tmp = None, **kwargs):
+       session.open(NFIDownload, "/home/root" )
+
+def NFICallFnc(tmp = None):
+       return NFIFlasherMain
+
 def Plugins(**kwargs):
-       from Plugins.Plugin import PluginDescriptor
-       from Tools.HardwareInfo import HardwareInfo
        # currently only available for DM8000
        if HardwareInfo().get_device_name() != "dm8000":
                return [PluginDescriptor()]
-       from Tools.Directories import fileExists
        if fileExists("/usr/share/bootlogo-flasher.mvi"):
                import flasher
                # started from usb stick # don't try to be intelligent and trick this - it's not possible to rewrite the flash memory with a system currently booted from it
                return [PluginDescriptor(where = PluginDescriptor.WHERE_WIZARD, fnc = (9,flasher.NFIFlash))]
        else:
                # started on real enigma2
-               import downloader
-               return [PluginDescriptor(name="NFI Image Flashing",
-                       description = _("Download .NFI-Files for USB-Flasher"),
+               return [PluginDescriptor(name=_("NFI Image Flashing"),
+                       description=_("Download .NFI-Files for USB-Flasher"),
                        icon = "flash.png",
-                       where = [PluginDescriptor.WHERE_PLUGINMENU],
-                       fnc = downloader.main), PluginDescriptor(name="nfi", where = PluginDescriptor.WHERE_FILESCAN, fnc = downloader.filescan)
-                       ]
+                       where = PluginDescriptor.WHERE_SOFTWAREMANAGER,
+                       fnc={"SoftwareSupported": NFICallFnc, "menuEntryName": lambda x: _("NFI Image Flashing"),
+                            "menuEntryDescription": lambda x: _("Download .NFI-Files for USB-Flasher")}),
+                       PluginDescriptor(name="nfi", where = PluginDescriptor.WHERE_FILESCAN, fnc = filescan)]
index 4d361157ed2bac125a858fb914bd38b347c0e1cd..13e7fdde3f2afaeb65e9792f75b0f4b2f05f974c 100755 (executable)
@@ -2,18 +2,12 @@ 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.Sources.Boolean import Boolean
 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
-
+from enigma import eTimer
 
 config.misc.firstrun = ConfigBoolean(default = True)
 list = []
@@ -39,7 +33,7 @@ config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewl
 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 name="text" position="153,40" size="340,300" font="Regular;22" />
                        <widget source="list" render="Listbox" position="53,340" size="440,180" scrollbarMode="showOnDemand" >
                                <convert type="StringList" />
                        </widget>
@@ -52,6 +46,10 @@ class NetworkWizard(WizardLanguage, Rc):
                        <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" />
+                       <widget source="VKeyIcon" render="Pixmap" pixmap="skin_default/buttons/key_text.png" position="40,260" zPosition="0" size="35,25" transparent="1" alphatest="on" >
+                               <convert type="ConditionalShowHide" />
+                       </widget>
+                       <widget name="HelpWindow" pixmap="skin_default/buttons/key_text.png" position="125,170" zPosition="1" size="1,1" transparent="1" alphatest="on" />      
                </screen>"""
        def __init__(self, session):
                self.xmlfile = resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml")
@@ -59,20 +57,68 @@ class NetworkWizard(WizardLanguage, Rc):
                Rc.__init__(self)
                self.session = session
                self["wizard"] = Pixmap()
-               
+               self["HelpWindow"] = Pixmap()
+               self["HelpWindow"].hide()
+               self["VKeyIcon"] = Boolean(False)
+
+               self.InstalledInterfaceCount = None
+               self.Adapterlist = None
                self.InterfaceState = None
                self.isInterfaceUp = None
                self.WlanPluginInstalled = None
                self.ap = None
                self.selectedInterface = None
                self.NextStep = None
-               self.myref = None
+               self.resetRef = None
                self.checkRef = None
                self.AdapterRef = None
+               self.APList = None
+               self.newAPlist = None
                self.WlanList = None
+               self.oldlist = None
+               self.originalAth0State = None
+               self.originalEth0State = None
+               self.originalWlan0State = None
+               self.originalInterfaceStateChanged = False
+               self.Text = None
+               self.rescanTimer = eTimer()
+               self.rescanTimer.callback.append(self.rescanTimerFired)
+               self.getInstalledInterfaceCount()
                self.isWlanPluginInstalled()
+               
+       def exitWizardQuestion(self, ret = False):
+               if (ret):
+                       self.markDone()
+                       self.close()
+               
+       def markDone(self):
+               self.rescanTimer.stop()
+               del self.rescanTimer
+               pass
+
+       def getInstalledInterfaceCount(self):
+               self.rescanTimer.stop()
+               self.Adapterlist = iNetwork.getAdapterList()
+               self.InstalledInterfaceCount = len(self.Adapterlist)
+               self.originalAth0State = iNetwork.getAdapterAttribute('ath0', 'up')
+               self.originalEth0State = iNetwork.getAdapterAttribute('eth0', 'up')
+               self.originalWlan0State = iNetwork.getAdapterAttribute('wlan0', 'up')
+
+       def checkOldInterfaceState(self):
+               # disable up interface if it was originally down and config is unchanged.
+               if self.originalAth0State is False and self.originalInterfaceStateChanged is False:
+                       if iNetwork.checkforInterface('ath0') is True:
+                               iNetwork.deactivateInterface('ath0')            
+               if self.originalEth0State is False and self.originalInterfaceStateChanged is False:
+                       if iNetwork.checkforInterface('eth0') is True:
+                               iNetwork.deactivateInterface('eth0')
+               if self.originalWlan0State is False and self.originalInterfaceStateChanged is False:
+                       if iNetwork.checkforInterface('wlan0') is True:
+                               iNetwork.deactivateInterface('wlan0')
 
        def listInterfaces(self):
+               self.rescanTimer.stop()
+               self.checkOldInterfaceState()
                list = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()]
                list.append((_("Exit network wizard"), "end"))
                return list
@@ -93,46 +139,30 @@ class NetworkWizard(WizardLanguage, Rc):
                self.InterfaceSelect(self.selection)
                
        def checkInterface(self,iface):
-               self.Adapterlist = iNetwork.getAdapterList()
+               self.rescanTimer.stop()
+               if self.Adapterlist is None:
+                       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':
+                               iNetwork.resetNetworkConfig('lan', self.resetNetworkConfigCB)
+                               self.resetRef = self.session.openWithCallback(self.resetNetworkConfigFinished, MessageBox, _("Please wait while we prepare your network interfaces..."), type = MessageBox.TYPE_INFO, enable_input = False)
+                       if iface in ('eth0', 'wlan0', '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)
+                                       self.currStep = self.getStepWithID(self.NextStep)
+                                       self.afterAsyncCode()
                                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)
+                                       self.isInterfaceUp = iNetwork.checkforInterface(iface)
+                                       self.currStep = self.getStepWithID(self.NextStep)
+                                       self.afterAsyncCode()
                else:
-                       self.resetfinishedCB(False)
+                       self.resetNetworkConfigFinished(False)
                        
-       def resetfinishedCB(self,data):
+       def resetNetworkConfigFinished(self,data):
                if data is True:
                        self.currStep = self.getStepWithID(self.NextStep)
                        self.afterAsyncCode()
@@ -140,33 +170,42 @@ class NetworkWizard(WizardLanguage, Rc):
                        self.currStep = self.getStepWithID(self.NextStep)
                        self.afterAsyncCode()
 
-       def checkInterfaceCB(self,callback,iface):
+       def resetNetworkConfigCB(self,callback,iface):
                if callback is not None:
                        if callback is True:
-                               iNetwork.getInterfaces(self.getInterfacesDataAvail)
+                               iNetwork.getInterfaces(self.getInterfacesFinished)
                                
-
-       def getInterfacesDataAvail(self, data):
+       def getInterfacesFinished(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)
+                       self.resetRef.close(True)
+               else:
+                       print "we should never come here!"
 
        def AdapterSetupEnd(self, iface):
+               self.originalInterfaceStateChanged = True
                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()
+                       if self.selectedInterface in ('wlan0', 'ath0'):
+                               if self.WlanPluginInstalled == True:
+                                       from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
+                                       iStatus.getDataForInterface(self.selectedInterface,self.checkWlanStateCB)
+                               else:
+                                       self.currStep = self.getStepWithID("checklanstatusend")
+                                       self.afterAsyncCode()                                   
+                       else:
+                               self.currStep = self.getStepWithID("checklanstatusend")
+                               self.afterAsyncCode()
 
        def AdapterSetupEndFinished(self,data):
                if data <= 2:
@@ -175,66 +214,139 @@ class NetworkWizard(WizardLanguage, Rc):
                        self.InterfaceState = False
                self.AdapterRef.close(True)
                        
+       def checkWlanStateCB(self,data,status):
+               if data is not None:
+                       if data is True:
+                               if status is not None:
+                                       text1 = _("Your Dreambox is now ready to use.\n\nYour internet connection is working now.\n\n")
+                                       text2 = _('Accesspoint:') + "\t" + status[self.selectedInterface]["acesspoint"] + "\n"
+                                       text3 = _('SSID:') + "\t" + status[self.selectedInterface]["essid"] + "\n"
+                                       text4 = _('Link Quality:') + "\t" + status[self.selectedInterface]["quality"]+"%" + "\n"
+                                       text5 = _('Signal Strength:') + "\t" + status[self.selectedInterface]["signal"] + "\n"
+                                       text6 = _('Bitrate:') + "\t" + status[self.selectedInterface]["bitrate"] + "\n"
+                                       text7 = _('Encryption:') + " " + status[self.selectedInterface]["encryption"] + "\n"
+                                       text8 = _("Please press OK to continue.")
+                                       infotext = text1 + text2 + text3 + text4 + text5 + text7 +"\n" + text8
+                                       self.currStep = self.getStepWithID("checkWlanstatusend")
+                                       self.Text = infotext
+                                       self.afterAsyncCode()
+
        def checkNetwork(self):
-               iNetwork.checkNetworkState(self.checkNetworkStateFinished)
+               iNetwork.checkNetworkState(self.checkNetworkStateCB)
                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()
+                       if self.selectedInterface in ('wlan0', 'ath0'):
+                               if self.WlanPluginInstalled == True:
+                                       from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
+                                       iStatus.getDataForInterface(self.selectedInterface,self.checkWlanStateCB)
+                               else:
+                                       self.currStep = self.getStepWithID("checklanstatusend")
+                                       self.afterAsyncCode()                                   
+                       else:
+                               self.currStep = self.getStepWithID("checklanstatusend")
+                               self.afterAsyncCode()
 
-       def checkNetworkStateFinished(self,data):
+       def checkNetworkStateCB(self,data):
                if data <= 2:
                        self.InterfaceState = True
                else:
                        self.InterfaceState = False
                self.checkRef.close(True)
        
-       def markDone(self):
-               pass
+       def rescanTimerFired(self):
+               self.rescanTimer.stop()
+               self.updateAPList()
 
-       def listModes(self):
-               list = []
-               self.WlanList = []
+       def updateAPList(self):
+               self.oldlist = self.APList
+               self.newAPlist = []
+               newList = []
+               newListIndex = None
+               currentListEntry = None
+               newList = self.listAccessPoints()
+
+               for oldentry in self.oldlist:
+                       if oldentry not in newList:
+                               newList.append(oldentry)
+                               
+               for newentry in newList:
+                       if newentry[1] == "hidden...":
+                               continue
+                       self.newAPlist.append(newentry)
+               
+               if len(self.newAPlist):
+                       if "hidden..." not in self.newAPlist:
+                               self.newAPlist.append(( _("enter hidden network SSID"), "hidden..." ))
+
+                       if (self.wizard[self.currStep].has_key("dynamiclist")):
+                               currentListEntry = self["list"].getCurrent()
+                               idx = 0
+                               for entry in self.newAPlist:
+                                       if entry == currentListEntry:
+                                               newListIndex = idx
+                                       idx +=1
+                               self.wizard[self.currStep]["evaluatedlist"] = self.newAPlist
+                               self['list'].setList(self.newAPlist)
+                               self["list"].setIndex(newListIndex)
+                               self["list"].updateList(self.newAPlist)
+
+       def listAccessPoints(self):
+               self.APList = []
                try:
                        from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan
                except ImportError:
-                       list.append( ( _("No networks found"),_("unavailable") ) )
-                       self.WlanList.append(_("No networks found"))
-                       return list
+                       self.APList.append( ( _("No networks found"),_("unavailable") ) )
+                       return self.APList
                else:   
                        self.w = Wlan(self.selectedInterface)
                        aps = self.w.getNetworkList()
                        if aps is not None:
                                print "[NetworkWizard.py] got Accespoints!"
+                               tmplist = []
+                               complist = []
                                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)
+                                               tmplist.append( (a['bssid'], a['essid']) )
+                                               complist.append( (a['bssid'], a['essid']) )
+                               
+                               for entry in tmplist:
+                                       if entry[1] == "":
+                                               for compentry in complist:
+                                                       if compentry[0] == entry[0]:
+                                                               complist.remove(compentry)
+                               for entry in complist:
+                                       self.APList.append( (entry[1], entry[1]) )
+
+                       if "hidden..." not in self.APList:
+                               self.APList.append(( _("enter hidden network SSID"), "hidden..." ))
                
-       def modeSelect(self, mode):
-               self.ap = mode
-               print "ModeSelected:", mode
+                       self.rescanTimer.start(3000)
+                       return self.APList
 
-       def restartNetwork(self):
-               iNetwork.restartNetwork()
-               self.checkNetwork()
-       
-       def isWlanPluginInstalled(self):                
+       def AccessPointsSelectionMade(self, index):
+               self.ap = index
+               self.WlanList = []
+               currList = []
+               if (self.wizard[self.currStep].has_key("dynamiclist")):
+                       currList = self['list'].list
+                       for entry in currList:
+                               self.WlanList.append( (entry[1], entry[0]) )
+               self.AccessPointsSelect(index)
+
+       def AccessPointsSelect(self, index):
+               self.NextStep = 'wlanconfig'
+
+       def AccessPointsSelectionMoved(self):
+               self.AccessPointsSelect(self.selection)
+
+       def checkWlanSelection(self):
+               self.rescanTimer.stop()
+               self.currStep = self.getStepWithID(self.NextStep)
+
+       def isWlanPluginInstalled(self):
                try:
                        from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan
                except ImportError:
index 98dbe80be01a790000f6a5ddd29f62c127188375..e8f738c65361c513d909157090a9a071774f4263 100755 (executable)
@@ -1,3 +1,5 @@
 installdir = $(datadir)/meta/
 
 dist_install_DATA = plugin_networkwizard.xml
+
+EXTRA_DIST = networkwizard_en.jpg networkwizard_de.jpg
diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/networkwizard_de.jpg b/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/networkwizard_de.jpg
new file mode 100755 (executable)
index 0000000..3999a41
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/networkwizard_de.jpg differ
diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/networkwizard_en.jpg b/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/networkwizard_en.jpg
new file mode 100755 (executable)
index 0000000..0a0434a
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/networkwizard_en.jpg differ
index 660bbcd2825f49ebfdb77dfe069ec5fcdd953759..4d3adcbde63204ec6c179c296ea33124e0f98961 100755 (executable)
@@ -9,6 +9,7 @@
                     <shortdescription>Step by step network configuration</shortdescription>
                     <description>With the NetworkWizard you can easy configure your network step by step.
                     </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_networkwizard_en.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -18,6 +19,7 @@
                     <description>Mit dem NetzwerkWizard können Sie Ihr Netzwerk konfigurieren. Sie werden Schritt
                        für Schritt durch die Konfiguration geleitet.
                     </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_networkwizard_de.jpg" />
           </info>
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-systemplugins-networkwizard" />
index 134797a78911cf0fa33c305d2a627d0d84bbbddb..dcd9d93338ccbc2a782a84b41a5c88f1cb77a5b6 100755 (executable)
 <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>
+        <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>
+                </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>
+        <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">
+                </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>
+                </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">
+                </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>
+                </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">
+                </code>
+                <code pos="after" async="yes">
 self.checkNetwork()
-                       </code> 
-               </step>
-
-               <step id="checklanstatusend" nextstep="end">
+                </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>
+                <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                               
+                </code>
+                <code pos="after">
+currStep = self.numSteps                                
 self.wizard[currStep]["nextstep"] = None
 self.markDone()
 self.close()
-                       </code> 
-               </step>
-
-               <step id="checklanstatusend">
+                </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>
+                <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">
+                </code>
+                <list>
+                        <listentry caption="Configure your network again" step="selectinterface" />
+                        <listentry caption="Exit network wizard" step="end" />
+                </list>
+        </step>
+        <step id="scanwlan">
                <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>
+                </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="listAccessPoints" evaluation="AccessPointsSelectionMade" onselect="AccessPointsSelectionMoved" />
+                <code>
 self.clearSelectedKeys()
 self.selectKey("OK")
 self.selectKey("UP")
 self.selectKey("DOWN")
 self.selectKey("LEFT")
 self.selectKey("RIGHT")
-                       </code>
-               </step>
-
-               <step id="scanwlan">
-               <condition>
+                </code>
+                <code pos="after">
+self.checkWlanSelection()
+                </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>
+                </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>
+                </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>
+                </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>
+                </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">
+                </code>
+                <code pos="after" async="yes">
 self.AdapterSetupEnd(self.selectedInterface)
-                       </code>                 
-               </step>
+                </code>                 
+        </step>
+        <step id="checkWlanstatusend" 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")
+self["text"].setText(self.Text)
+                </code>
+                <code pos="after">
+currStep = self.numSteps                                
+self.wizard[currStep]["nextstep"] = None
+self.markDone()
+self.close()
+                </code> 
+        </step>
+        <step id="checkWlanstatusend">
+               <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="end">
-                       <text value="Thank you for using the wizard.\nPlease press OK to continue." />
-                       <code>
+        <step id="end">
+                <text value="Thank you for using the wizard.\nPlease press OK to continue." />
+                <code>
 self.clearSelectedKeys()
 self.selectKey("OK")
-                       </code>
-               </step>
+                </code>
+        </step>
 </wizard>
 
 
old mode 100644 (file)
new mode 100755 (executable)
index d20b2e6..2cb47c0
@@ -10,7 +10,7 @@
                     <shortdescription>PositionerSetup helps you installing a motorized dish.</shortdescription>
                     <description>With the PositionerSetup extension it is easy to install and configure a motorized dish.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/positionersetup.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_positionersetup.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -20,7 +20,7 @@
                     <description>Die PositionerSetup Erweiterung unterstützt Sie beim einrichten
                     und konfigurieren einer motorgesteuerten Satellitenantenne.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/positionersetup.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_positionersetup.jpg" />
           </info>
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-systemplugins-positionersetup" />
old mode 100644 (file)
new mode 100755 (executable)
index 6307213..7f8d8d2
Binary files a/lib/python/Plugins/SystemPlugins/PositionerSetup/meta/positionersetup.jpg and b/lib/python/Plugins/SystemPlugins/PositionerSetup/meta/positionersetup.jpg differ
old mode 100644 (file)
new mode 100755 (executable)
index 8fa36e5..4c0c7af
@@ -11,7 +11,7 @@
                     <shortdescription>SatelliteEquipmentControl allows you to fine-tune DiSEqC-settings.</shortdescription>
                     <description>With the SatelliteEquipmentControl extension it is possible to fine-tune DiSEqC-settings.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/satcontrol.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_satcontrol.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -20,7 +20,7 @@
                     <shortdescription>Fein-Einstellungen für DiSEqC</shortdescription>
                     <description>Die SatelliteEquipmentControl-Erweiterung unterstützt Sie beim Feintuning der DiSEqC Einstellungen.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/satcontrol.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_satcontrol.jpg" />
           </info>
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-systemplugins-satelliteequipmentcontrol" />
old mode 100644 (file)
new mode 100755 (executable)
index b9596a6..703650e
Binary files a/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/satcontrol.jpg and b/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/satcontrol.jpg differ
old mode 100644 (file)
new mode 100755 (executable)
index aaab7e4..e9453de
@@ -8,10 +8,10 @@
                     <name>Satfinder</name>
                     <packagename>enigma2-plugin-systemplugins-satfinder</packagename>
                     <shortdescription>Satfinder helps you to align your dish.</shortdescription>
-                    <description>The Satfinder extension helps you to align your dish.\
+                    <description>The Satfinder extension helps you to align your dish.\n
                     It shows you informations about signal rate and errors.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/satfinder.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_satfinder.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -21,7 +21,7 @@
                     <description>Die Satfinder-Erweiterung unterstützt Sie beim Ausrichten ihrer Satellitenanlage.\n
                     Es zeigt Ihnen Daten wie Signalstärke und Fehlerrate an.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/satfinder.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_satfinder.jpg" />
           </info>
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-systemplugins-satfinder" />
old mode 100644 (file)
new mode 100755 (executable)
index c0bba0c..44f0981
Binary files a/lib/python/Plugins/SystemPlugins/Satfinder/meta/satfinder.jpg and b/lib/python/Plugins/SystemPlugins/Satfinder/meta/satfinder.jpg differ
index 689d97ef7c569706a35ddf7847136367eea8c6cc..d29fb002174cdca7e1e21aa62f5cd408b95a1d56 100755 (executable)
@@ -2,4 +2,4 @@ installdir = $(datadir)/meta/
 
 dist_install_DATA = plugin_skinselector.xml
 
-EXTRA_DIST = skinselector.jpg
+EXTRA_DIST = skinselector_de.jpg skinselector_en.jpg
old mode 100644 (file)
new mode 100755 (executable)
index 4ce7f1b..717f732
@@ -11,7 +11,7 @@
                     <description>The SkinSelector shows a menu with selectable skins.\n
                     It's now easy to change the look and feel of your Dreambox.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/skinselector.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_skinselector_en.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -21,7 +21,7 @@
                     <description>Die SkinSelector Erweiterung zeigt Ihnen ein Menu mit auswählbaren Skins.\n
                     Sie können nun einfach das Aussehen der grafischen Oberfläche Ihrer Dreambox verändern.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/skinselector.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_skinselector_de.jpg" />
           </info>
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-systemplugins-skinselector" />
diff --git a/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector.jpg b/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector.jpg
deleted file mode 100644 (file)
index 74395ea..0000000
Binary files a/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector.jpg and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector_de.jpg b/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector_de.jpg
new file mode 100755 (executable)
index 0000000..3b40708
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector_de.jpg differ
diff --git a/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector_en.jpg b/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector_en.jpg
new file mode 100755 (executable)
index 0000000..b9f0bd3
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector_en.jpg differ
index 871f0a307c4c951485a61b7ccaaaf46bf91437fd..d9ccab571949e517f686a5c896078b3d6aaf678b 100755 (executable)
@@ -66,6 +66,7 @@ class BackupScreen(Screen, ConfigListScreen):
                self.setTitle(_("Backup is running..."))
 
        def doBackup(self):
+               configfile.save()
                try:
                        if (path.exists(self.backuppath) == False):
                                makedirs(self.backuppath)
index 341938c5e454d6c8cfc56bf8354afce2b25bdc8f..05a87d5a45bee3ca60f3eec4aaa6721f37fa14fe 100755 (executable)
@@ -2,4 +2,4 @@ installdir = $(datadir)/meta/
 
 dist_install_DATA = plugin_softwaremanager.xml
 
-EXTRA_DIST = softmanager.jpg
+EXTRA_DIST = softwaremanager_en.jpg softwaremanager_de.jpg
old mode 100644 (file)
new mode 100755 (executable)
index fa84670..cd425c3
@@ -11,7 +11,7 @@
                     <description>The SoftwareManager manages your Dreambox software.\n
                     It's easy to update your receiver's software, install or remove extensions or even backup and restore your system settings.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/softmanager.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_softwaremanager_en.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -22,7 +22,7 @@
                     Sie können nun einfach Ihre Dreambox-Software aktualisieren, neue Erweiterungen installieren oder entfernen,
                     oder ihre Einstellungen sichern und wiederherstellen.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/softmanager.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_softwaremanager_de.jpg" />
           </info>
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-systemplugins-softwaremanager" />
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softmanager.jpg b/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softmanager.jpg
deleted file mode 100644 (file)
index a9d5a62..0000000
Binary files a/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softmanager.jpg and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softwaremanager_de.jpg b/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softwaremanager_de.jpg
new file mode 100755 (executable)
index 0000000..54e6419
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softwaremanager_de.jpg differ
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softwaremanager_en.jpg b/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softwaremanager_en.jpg
new file mode 100755 (executable)
index 0000000..0832f0a
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softwaremanager_en.jpg differ
index 3a1f835fecae9a3c9cbf8885860fa82850eee59a..c70201b3c028e6d87d4968cc9664a4b1728f8491 100755 (executable)
@@ -23,7 +23,7 @@ from Components.About import about
 from Components.DreamInfoHandler import DreamInfoHandler
 from Components.Language import language
 from Components.AVSwitch import AVSwitch
-from Tools.Directories import pathExists, fileExists, resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE, SCOPE_METADIR
+from Tools.Directories import pathExists, fileExists, resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_PLUGIN, SCOPE_CURRENT_SKIN, SCOPE_METADIR
 from Tools.LoadPixmap import LoadPixmap
 from enigma import eTimer, quitMainloop, RT_HALIGN_LEFT, RT_VALIGN_CENTER, eListboxPythonMultiContent, eListbox, gFont, getDesktop, ePicLoad
 from cPickle import dump, load
@@ -108,21 +108,47 @@ class UpdatePluginMenu(Screen):
                self.oktext = _("\nPress OK on your remote control to continue.")
                self.backupdirs = ' '.join( config.plugins.configurationbackup.backupdirs.value )
                if self.menu == 0:
-                       self.list.append(("software-update", _("Software update"), _("\nOnline update of your Dreambox software." ) + self.oktext) )
-                       #self.list.append(("install-plugins", _("Install extensions"), _("\nInstall new Extensions or Plugins to your dreambox" ) + self.oktext) )
-                       self.list.append(("software-restore", _("Software restore"), _("\nRestore your Dreambox with a new firmware." ) + self.oktext))
-                       self.list.append(("system-backup", _("Backup system settings"), _("\nBackup your Dreambox settings." ) + self.oktext))
-                       self.list.append(("system-restore",_("Restore system settings"), _("\nRestore your Dreambox settings." ) + self.oktext))
-                       self.list.append(("ipkg-install", _("Install local extension"),  _("\nScan for local packages and install them." ) + self.oktext))
+                       self.list.append(("software-update", _("Software update"), _("\nOnline update of your Dreambox software." ) + self.oktext, None))
+                       #self.list.append(("install-plugins", _("Install extensions"), _("\nInstall new Extensions or Plugins to your dreambox" ) + self.oktext, None))
+                       self.list.append(("software-restore", _("Software restore"), _("\nRestore your Dreambox with a new firmware." ) + self.oktext, None))
+                       self.list.append(("system-backup", _("Backup system settings"), _("\nBackup your Dreambox settings." ) + self.oktext, None))
+                       self.list.append(("system-restore",_("Restore system settings"), _("\nRestore your Dreambox settings." ) + self.oktext, None))
+                       self.list.append(("ipkg-install", _("Install local extension"),  _("\nScan for local packages and install them." ) + self.oktext, None))
+                       for p in plugins.getPlugins(PluginDescriptor.WHERE_SOFTWAREMANAGER):
+                               if p.__call__.has_key("SoftwareSupported"):
+                                       callFnc = p.__call__["SoftwareSupported"](None)
+                                       if callFnc is not None:
+                                               if p.__call__.has_key("menuEntryName"):
+                                                       menuEntryName = p.__call__["menuEntryName"](None)
+                                               else:
+                                                       menuEntryName = _('Extended Software')
+                                               if p.__call__.has_key("menuEntryDescription"):
+                                                       menuEntryDescription = p.__call__["menuEntryDescription"](None)
+                                               else:
+                                                       menuEntryDescription = _('Extended Software Plugin')
+                                               self.list.append(('default-plugin', menuEntryName, menuEntryDescription + self.oktext, callFnc))
                        if config.usage.setup_level.index >= 2: # expert+
-                               self.list.append(("advanced", _("Advanced Options"), _("\nAdvanced options and settings." ) + self.oktext))
+                               self.list.append(("advanced", _("Advanced Options"), _("\nAdvanced options and settings." ) + self.oktext, None))
                elif self.menu == 1:
-                       self.list.append(("advancedrestore", _("Advanced restore"), _("\nRestore your backups by date." ) + self.oktext))
-                       self.list.append(("backuplocation", _("Choose backup location"),  _("\nSelect your backup device.\nCurrent device: " ) + config.plugins.configurationbackup.backuplocation.value + self.oktext ))
-                       self.list.append(("backupfiles", _("Choose backup files"),  _("Select files for backup. Currently selected:\n" ) + self.backupdirs + self.oktext))
+                       self.list.append(("advancedrestore", _("Advanced restore"), _("\nRestore your backups by date." ) + self.oktext, None))
+                       self.list.append(("backuplocation", _("Choose backup location"),  _("\nSelect your backup device.\nCurrent device: " ) + config.plugins.configurationbackup.backuplocation.value + self.oktext, None))
+                       self.list.append(("backupfiles", _("Choose backup files"),  _("Select files for backup. Currently selected:\n" ) + self.backupdirs + self.oktext, None))
                        if config.usage.setup_level.index >= 2: # expert+
-                               self.list.append(("ipkg-manager", _("Packet management"),  _("\nView, install and remove available or installed packages." ) + self.oktext))
-                       self.list.append(("ipkg-source",_("Choose upgrade source"), _("\nEdit the upgrade source address." ) + self.oktext))
+                               self.list.append(("ipkg-manager", _("Packet management"),  _("\nView, install and remove available or installed packages." ) + self.oktext, None))
+                       self.list.append(("ipkg-source",_("Choose upgrade source"), _("\nEdit the upgrade source address." ) + self.oktext, None))
+                       for p in plugins.getPlugins(PluginDescriptor.WHERE_SOFTWAREMANAGER):
+                               if p.__call__.has_key("AdvancedSoftwareSupported"):
+                                       callFnc = p.__call__["AdvancedSoftwareSupported"](None)
+                                       if callFnc is not None:
+                                               if p.__call__.has_key("menuEntryName"):
+                                                       menuEntryName = p.__call__["menuEntryName"](None)
+                                               else:
+                                                       menuEntryName = _('Advanced Software')
+                                               if p.__call__.has_key("menuEntryDescription"):
+                                                       menuEntryDescription = p.__call__["menuEntryDescription"](None)
+                                               else:
+                                                       menuEntryDescription = _('Advanced Software Plugin')
+                                               self.list.append(('advanced-plugin', menuEntryName, menuEntryDescription + self.oktext, callFnc))
 
                self["menu"] = List(self.list)
                self["key_red"] = StaticText(_("Close"))
@@ -150,33 +176,36 @@ class UpdatePluginMenu(Screen):
        def go(self):
                current = self["menu"].getCurrent()
                if current:
-                       current = current[0]
+                       currentEntry = current[0]
                        if self.menu == 0:
-                               if (current == "software-update"):
+                               if (currentEntry == "software-update"):
                                        self.session.openWithCallback(self.runUpgrade, MessageBox, _("Do you want to update your Dreambox?")+"\n"+_("\nAfter pressing OK, please wait!"))
-                               elif (current == "software-restore"):
+                               elif (currentEntry == "software-restore"):
                                        self.session.open(ImageWizard)
-                               elif (current == "install-plugins"):
+                               elif (currentEntry == "install-plugins"):
                                        self.session.open(PluginManager, self.skin_path)
-                               elif (current == "system-backup"):
+                               elif (currentEntry == "system-backup"):
                                        self.session.openWithCallback(self.backupDone,BackupScreen, runBackup = True)
-                               elif (current == "system-restore"):
+                               elif (currentEntry == "system-restore"):
                                        if os_path.exists(self.fullbackupfilename):
                                                self.session.openWithCallback(self.startRestore, MessageBox, _("Are you sure you want to restore your Enigma2 backup?\nEnigma2 will restart after the restore"))
                                        else:
                                                self.session.open(MessageBox, _("Sorry no backups found!"), MessageBox.TYPE_INFO, timeout = 10)
-                               elif (current == "ipkg-install"):
+                               elif (currentEntry == "ipkg-install"):
                                        try:
                                                from Plugins.Extensions.MediaScanner.plugin import main
                                                main(self.session)
                                        except:
                                                self.session.open(MessageBox, _("Sorry MediaScanner is not installed!"), MessageBox.TYPE_INFO, timeout = 10)
-                               elif (current == "advanced"):
+                               elif (currentEntry == "default-plugin"):
+                                       self.extended = current[3]
+                                       self.extended(self.session, None)
+                               elif (currentEntry == "advanced"):
                                        self.session.open(UpdatePluginMenu, 1)
                        elif self.menu == 1:
-                               if (current == "ipkg-manager"):
+                               if (currentEntry == "ipkg-manager"):
                                        self.session.open(PacketManager, self.skin_path)
-                               elif (current == "backuplocation"):
+                               elif (currentEntry == "backuplocation"):
                                        parts = [ (r.description, r.mountpoint, self.session) for r in harddiskmanager.getMountedPartitions(onlyhotplug = False)]
                                        for x in parts:
                                                if not access(x[1], F_OK|R_OK|W_OK) or x[1] == '/':
@@ -186,12 +215,15 @@ class UpdatePluginMenu(Screen):
                                                        parts.remove(x)
                                        if len(parts):
                                                self.session.openWithCallback(self.backuplocation_choosen, ChoiceBox, title = _("Please select medium to use as backup location"), list = parts)
-                               elif (current == "backupfiles"):
+                               elif (currentEntry == "backupfiles"):
                                        self.session.openWithCallback(self.backupfiles_choosen,BackupSelection)
-                               elif (current == "advancedrestore"):
+                               elif (currentEntry == "advancedrestore"):
                                        self.session.open(RestoreMenu, self.skin_path)
-                               elif (current == "ipkg-source"):
+                               elif (currentEntry == "ipkg-source"):
                                        self.session.open(IPKGMenu, self.skin_path)
+                               elif (currentEntry == "advanced-plugin"):
+                                       self.extended = current[3]
+                                       self.extended(self.session, None)
 
        def backupfiles_choosen(self, ret):
                self.backupdirs = ' '.join( config.plugins.configurationbackup.backupdirs.value )
@@ -478,13 +510,13 @@ class PacketManager(Screen):
        def setStatus(self,status = None):
                if status:
                        self.statuslist = []
-                       divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
+                       divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png"))
                        if status == 'update':
-                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgrade.png"))
+                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgrade.png"))
                                self.statuslist.append(( _("Package list update"), '', _("Trying to download a new packetlist. Please wait..." ),'',statuspng, divpng ))
                                self['list'].setList(self.statuslist)   
                        elif status == 'error':
-                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png"))
+                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/remove.png"))
                                self.statuslist.append(( _("Error"), '', _("There was an error downloading the packetlist. Please try again." ),'',statuspng, divpng ))
                                self['list'].setList(self.statuslist)                           
 
@@ -600,15 +632,15 @@ class PacketManager(Screen):
                self.buildPacketList()
 
        def buildEntryComponent(self, name, version, description, state):
-               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
+               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png"))
                if state == 'installed':
-                       installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installed.png"))
+                       installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installed.png"))
                        return((name, version, description, state, installedpng, divpng))       
                elif state == 'upgradeable':
-                       upgradeablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgradeable.png"))
+                       upgradeablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgradeable.png"))
                        return((name, version, description, state, upgradeablepng, divpng))     
                else:
-                       installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installable.png"))
+                       installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installable.png"))
                        return((name, version, description, state, installablepng, divpng))
 
        def buildPacketList(self):
@@ -779,19 +811,19 @@ class PluginManager(Screen, DreamInfoHandler):
                        self["key_green"].setText("")
                        self["key_blue"].setText("")
                        self["key_yellow"].setText("")
-                       divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
+                       divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png"))
                        if status == 'update':
-                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgrade.png"))
+                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgrade.png"))
                                self.statuslist.append(( _("Package list update"), '', _("Trying to download a new packetlist. Please wait..." ),'', '', statuspng, divpng, None, '' ))
                                self["list"].style = "default"
                                self['list'].setList(self.statuslist)
                        elif status == 'sync':
-                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgrade.png"))
+                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgrade.png"))
                                self.statuslist.append(( _("Package list update"), '', _("Searching for new installed or removed packages. Please wait..." ),'', '', statuspng, divpng, None, '' ))
                                self["list"].style = "default"
                                self['list'].setList(self.statuslist)
                        elif status == 'error':
-                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png"))
+                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/remove.png"))
                                self.statuslist.append(( _("Error"), '', _("There was an error downloading the packetlist. Please try again." ),'', '', statuspng, divpng, None, '' ))
                                self["list"].style = "default"
                                self['list'].setList(self.statuslist)
@@ -978,18 +1010,18 @@ class PluginManager(Screen, DreamInfoHandler):
                        self.Console.ePopen(cmd, self.InstallMetaPackage_Finished)
 
        def buildEntryComponent(self, name, details, description, packagename, state, selected = False):
-               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
+               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png"))
                if state == 'installed':
-                       installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installed.png"))
+                       installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installed.png"))
                        return((name, details, description, packagename, state, installedpng, divpng, selected))
                elif state == 'installable':
-                       installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installable.png"))
+                       installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installable.png"))
                        return((name, details, description, packagename, state, installablepng, divpng, selected))
                elif state == 'remove':
-                       removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png"))
+                       removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/remove.png"))
                        return((name, details, description, packagename, state, removepng, divpng, selected))
                elif state == 'install':
-                       installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/install.png"))
+                       installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/install.png"))
                        return((name, details, description, packagename, state, installpng, divpng, selected))
 
        def buildPacketList(self, categorytag = None):
@@ -1051,7 +1083,7 @@ class PluginManager(Screen, DreamInfoHandler):
                self.selectionChanged()
 
        def buildCategoryComponent(self, tag = None):
-               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
+               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png"))
                if tag is not None:
                        if tag == 'System':
                                return(( _("System"), _("View list of available system extensions" ), tag, divpng ))
@@ -1210,10 +1242,10 @@ class PluginManagerInfo(Screen):
                        self['list'].updateList(self.list)
 
        def buildEntryComponent(self, action,info):
-               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
-               upgradepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgrade.png"))
-               installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/install.png"))
-               removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png"))
+               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png"))
+               upgradepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgrade.png"))
+               installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/install.png"))
+               removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/remove.png"))
                if action == 'install':
                        return(( _('Installing'), info, installpng, divpng))
                elif action == 'remove':
@@ -1282,11 +1314,11 @@ class PluginManagerHelp(Screen):
                self['list'].updateList(self.list)
 
        def buildEntryComponent(self, state):
-               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
-               installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installed.png"))
-               installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installable.png"))
-               removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png"))
-               installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/install.png"))
+               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png"))
+               installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installed.png"))
+               installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installable.png"))
+               removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/remove.png"))
+               installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/install.png"))
 
                if state == 'installed':
                        return(( _('This plugin is installed.'), _('You can remove this plugin.'), installedpng, divpng))
@@ -1432,7 +1464,7 @@ class PluginDetails(Screen, DreamInfoHandler):
                if not noScreenshot:
                        filename = self.thumbnail
                else:
-                       filename = resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/noprev.png")
+                       filename = resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/noprev.png")
 
                sc = AVSwitch().getFramebufferScale()
                self.picload.setPara((self["screenshot"].instance.size().width(), self["screenshot"].instance.size().height(), sc[0], sc[1], False, 1, "#00000000"))
diff --git a/lib/python/Plugins/SystemPlugins/TempFanControl/Makefile.am b/lib/python/Plugins/SystemPlugins/TempFanControl/Makefile.am
new file mode 100644 (file)
index 0000000..78ff11c
--- /dev/null
@@ -0,0 +1,5 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/SystemPlugins/TempFanControl
+
+install_PYTHON = \
+       __init__.py \
+       plugin.py
diff --git a/lib/python/Plugins/SystemPlugins/TempFanControl/__init__.py b/lib/python/Plugins/SystemPlugins/TempFanControl/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py b/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py
new file mode 100644 (file)
index 0000000..38e343f
--- /dev/null
@@ -0,0 +1,163 @@
+from Components.ActionMap import ActionMap
+from Components.Sensors import sensors
+from Components.Sources.Sensor import SensorSource
+from Components.Sources.StaticText import StaticText
+from Components.ConfigList import ConfigListScreen
+from Components.config import getConfigListEntry
+
+from Screens.Screen import Screen
+
+from Plugins.Plugin import PluginDescriptor
+from Components.FanControl import fancontrol
+
+class TempFanControl(Screen, ConfigListScreen):
+       skin = """
+               <screen position="90,100" size="570,420" title="Fan Control" >
+                       <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" />
+                       <ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" size="140,40" alphatest="on" />
+                       <widget source="red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+                       <widget source="yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
+                       <widget source="blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
+                       
+                       <widget name="config" position="10,50" size="550,90" scrollbarMode="showOnDemand" />
+                       
+                       <widget source="SensorTempText0" render="Label" position="10,150" zPosition="1" size="90,40" font="Regular;20" halign="left" valign="top" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="SensorTemp0" render="Label" position="100,150" zPosition="1" size="100,20" font="Regular;19" halign="right">
+                               <convert type="SensorToText"></convert>
+                       </widget>
+                       <widget source="SensorTempText1" render="Label" position="10,170" zPosition="1" size="90,40" font="Regular;20" halign="left" valign="top" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="SensorTemp1" render="Label" position="100,170" zPosition="1" size="100,20" font="Regular;19" halign="right">
+                               <convert type="SensorToText"></convert>
+                       </widget>
+                       <widget source="SensorTempText2" render="Label" position="10,190" zPosition="1" size="90,40" font="Regular;20" halign="left" valign="top" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="SensorTemp2" render="Label" position="100,190" zPosition="1" size="100,20" font="Regular;19" halign="right">
+                               <convert type="SensorToText"></convert>
+                       </widget>
+                       <widget source="SensorTempText3" render="Label" position="10,210" zPosition="1" size="90,40" font="Regular;20" halign="left" valign="top" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="SensorTemp3" render="Label" position="100,210" zPosition="1" size="100,20" font="Regular;19" halign="right">
+                               <convert type="SensorToText"></convert>
+                       </widget>
+                       <widget source="SensorTempText4" render="Label" position="10,230" zPosition="1" size="90,40" font="Regular;20" halign="left" valign="top" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="SensorTemp4" render="Label" position="100,230" zPosition="1" size="100,20" font="Regular;19" halign="right">
+                               <convert type="SensorToText"></convert>
+                       </widget>
+                       <widget source="SensorTempText5" render="Label" position="10,250" zPosition="1" size="90,40" font="Regular;20" halign="left" valign="top" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="SensorTemp5" render="Label" position="100,250" zPosition="1" size="100,20" font="Regular;19" halign="right">
+                               <convert type="SensorToText"></convert>
+                       </widget>
+                       <widget source="SensorTempText6" render="Label" position="10,270" zPosition="1" size="90,40" font="Regular;20" halign="left" valign="top" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="SensorTemp6" render="Label" position="100,270" zPosition="1" size="100,20" font="Regular;19" halign="right">
+                               <convert type="SensorToText"></convert>
+                       </widget>
+                       <widget source="SensorTempText7" render="Label" position="10,290" zPosition="1" size="90,40" font="Regular;20" halign="left" valign="top" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="SensorTemp7" render="Label" position="100,290" zPosition="1" size="100,20" font="Regular;19" halign="right">
+                               <convert type="SensorToText"></convert>
+                       </widget>
+                       
+                       <widget source="SensorFanText0" render="Label" position="290,150" zPosition="1" size="90,40" font="Regular;20" halign="left" valign="top" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="SensorFan0" render="Label" position="380,150" zPosition="1" size="150,20" font="Regular;19" halign="right">
+                               <convert type="SensorToText"></convert>
+                       </widget>
+                       <widget source="SensorFanText1" render="Label" position="290,170" zPosition="1" size="90,40" font="Regular;20" halign="left" valign="top" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="SensorFan1" render="Label" position="380,170" zPosition="1" size="150,20" font="Regular;19" halign="right">
+                               <convert type="SensorToText"></convert>
+                       </widget>
+                       <widget source="SensorFanText2" render="Label" position="290,190" zPosition="1" size="90,40" font="Regular;20" halign="left" valign="top" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="SensorFan2" render="Label" position="380,190" zPosition="1" size="150,20" font="Regular;19" halign="right">
+                               <convert type="SensorToText"></convert>
+                       </widget>
+                       <widget source="SensorFanText3" render="Label" position="290,210" zPosition="1" size="90,40" font="Regular;20" halign="left" valign="top" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="SensorFan3" render="Label" position="380,210" zPosition="1" size="150,20" font="Regular;19" halign="right">
+                               <convert type="SensorToText"></convert>
+                       </widget>
+                       <widget source="SensorFanText4" render="Label" position="290,230" zPosition="1" size="90,40" font="Regular;20" halign="left" valign="top" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="SensorFan4" render="Label" position="380,230" zPosition="1" size="150,20" font="Regular;19" halign="right">
+                               <convert type="SensorToText"></convert>
+                       </widget>
+                       <widget source="SensorFanText5" render="Label" position="290,250" zPosition="1" size="90,40" font="Regular;20" halign="left" valign="top" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="SensorFan5" render="Label" position="380,250" zPosition="1" size="150,20" font="Regular;19" halign="right">
+                               <convert type="SensorToText"></convert>
+                       </widget>
+                       <widget source="SensorFanText6" render="Label" position="290,270" zPosition="1" size="90,40" font="Regular;20" halign="left" valign="top" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="SensorFan6" render="Label" position="380,270" zPosition="1" size="150,20" font="Regular;19" halign="right">
+                               <convert type="SensorToText"></convert>
+                       </widget>
+                       <widget source="SensorFanText7" render="Label" position="290,290" zPosition="1" size="90,40" font="Regular;20" halign="left" valign="top" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="SensorFan7" render="Label" position="380,290" zPosition="1" size="150,20" font="Regular;19" halign="right">
+                               <convert type="SensorToText"></convert>
+                       </widget>
+               </screen>"""
+       
+       def __init__(self, session, args = None):
+               Screen.__init__(self, session)
+               
+               templist = sensors.getSensorsList(sensors.TYPE_TEMPERATURE)
+               tempcount = len(templist)
+               fanlist = sensors.getSensorsList(sensors.TYPE_FAN_RPM)
+               fancount = len(fanlist)
+               
+               self["red"] = StaticText(_("Cancel"))
+               self["green"] = StaticText(_("OK"))
+               self["yellow"] = StaticText("")
+               self["blue"] = StaticText("")   
+               
+               for count in range(8):
+                       if count < tempcount:
+                               id = templist[count]
+                               self["SensorTempText%d" % count] = StaticText(sensors.getSensorName(id))                
+                               self["SensorTemp%d" % count] = SensorSource(sensorid = id)
+                       else:
+                               self["SensorTempText%d" % count] = StaticText("")
+                               self["SensorTemp%d" % count] = SensorSource()
+                               
+                       if count < fancount:
+                               id = fanlist[count]
+                               self["SensorFanText%d" % count] = StaticText(sensors.getSensorName(id))         
+                               self["SensorFan%d" % count] = SensorSource(sensorid = id)
+                       else:
+                               self["SensorFanText%d" % count] = StaticText("")
+                               self["SensorFan%d" % count] = SensorSource()
+               
+               self.list = []
+               for count in range(fancontrol.getFanCount()):
+                       self.list.append(getConfigListEntry(_("Fan %d Voltage") % (count + 1), fancontrol.getConfig(count).vlt))
+                       self.list.append(getConfigListEntry(_("Fan %d PWM") % (count + 1), fancontrol.getConfig(count).pwm))
+               ConfigListScreen.__init__(self, self.list, session = self.session)
+               #self["config"].list = self.list
+               #self["config"].setList(self.list)
+               
+               self["actions"] = ActionMap(["OkCancelActions", "ColorActions"], 
+               {
+                       "ok": self.save,
+                       "cancel": self.revert,
+                       "red": self.revert,
+                       "green": self.save
+               }, -1)
+               
+       def save(self):
+               for count in range(fancontrol.getFanCount()):
+                       fancontrol.getConfig(count).vlt.save()
+                       fancontrol.getConfig(count).pwm.save()
+               self.close()
+               
+       def revert(self):
+               for count in range(fancontrol.getFanCount()):
+                       fancontrol.getConfig(count).vlt.load()
+                       fancontrol.getConfig(count).pwm.load()
+               self.close()
+               
+def main(session, **kwargs):
+       session.open(TempFanControl)
+
+def startMenu(menuid):
+       if menuid != "system":
+               return []
+       
+       return [(_("Temperature and Fan control"), main, "tempfancontrol", 80)]
+
+def Plugins(**kwargs):
+       return PluginDescriptor(name = "Temperature and Fan control", description = _("Temperature and Fan control"), where = PluginDescriptor.WHERE_MENU, fnc = startMenu)
+       
\ No newline at end of file
index 9e248084826e0764ec843f828ed6e218efbd4933..2e80f30673ce9fccf429158af140174c144da54f 100755 (executable)
@@ -2,4 +2,4 @@ installdir = $(datadir)/meta/
 
 dist_install_DATA = plugin_videoenhancement.xml
 
-EXTRA_DIST = videoenhancement.jpg
+EXTRA_DIST = videoenhancement_en.jpg videoenhancement_de.jpg
index 33b222ef0e9865faf616f2f91af17260ab33ac0b..208c7e0c0971126b8ecea459c4f9683ac4169be6 100755 (executable)
@@ -1,5 +1,8 @@
 <default>
          <prerequisites>
+                    <hardware type="dm8000" />
+                    <hardware type="dm800" />
+                    <hardware type="dm500hd" />
                     <tag type="Display" />
                     <tag type="System" />
          </prerequisites>
                     <packagename>enigma2-plugin-systemplugins-videoenhancement</packagename>
                     <shortdescription>VideoEnhancement provides advanced video enhancement settings.</shortdescription>
                     <description>The VideoEnhancement extension provides advanced video enhancement settings.</description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/videoenhancement.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_videoenhancement_en.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
-                    <name>VideoEnhancement</name>
+                    <name>Erweiterte A/V Einstellungen</name>
                     <packagename>enigma2-plugin-systemplugins-videoenhancement</packagename>
-                    <shortdescription>Videomode bietet erweiterte Video Konfigurationsoptionen.</shortdescription>
-                    <description>Die Videomode-Erweiterung bietet erweiterte Video Konfigurationsoptionen.</description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/videoenhancement.jpg" />
+                    <shortdescription>Erweiterte A/V Einstellungen für Ihre Dreambox.</shortdescription>
+                    <description>Erweiterte A/V Einstellungen für Ihre Dreambox.</description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_videoenhancement_de.jpg" />
           </info>
 
          <files type="package"> <!-- without version, without .ipk -->
diff --git a/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement.jpg b/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement.jpg
deleted file mode 100755 (executable)
index 0e0ef6f..0000000
Binary files a/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement.jpg and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement_de.jpg b/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement_de.jpg
new file mode 100755 (executable)
index 0000000..ecf0161
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement_de.jpg differ
diff --git a/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement_en.jpg b/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement_en.jpg
new file mode 100755 (executable)
index 0000000..a97a7a3
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement_en.jpg differ
old mode 100644 (file)
new mode 100755 (executable)
index 75abb90..c460943
@@ -9,7 +9,7 @@
                     <packagename>enigma2-plugin-systemplugins-videotune</packagename>
                     <shortdescription>VideoTune helps fine-tuning your tv display.</shortdescription>
                     <description>The VideoTune helps fine-tuning your tv display.\nYou can control brightness and contrast of your tv.</description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/videotune.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_videotune.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia - DE</author>
@@ -18,7 +18,7 @@
                     <shortdescription>VideoTune hilft beim fein-einstellen des Fernsehers.</shortdescription>
                     <description>VideoTune hilf beim fein-einstellen des Fernsehers.\nSie können Kontrast und Helligkeit fein-einstellen.
                     </description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/videotune.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_videotune.jpg" />
           </info>
          <files type="package"> <!-- ohne versionsnummer, ohne .ipkg -->
                <file type="package" name="enigma2-plugin-systemplugins-videotune" />
index 3759c21af13e4f66bde3e1c2af8fffc1cf31144a..cd1529aabad25d0582791c326110eb3f09bf3218 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
index 6c012e841c7e6f64f410de5ea10667df0d41bb22..ef474435f9dbe360487c04f9136d662432f2873e 100755 (executable)
@@ -2,4 +2,4 @@ installdir = $(datadir)/meta/
 
 dist_install_DATA = plugin_videomode.xml
 
-EXTRA_DIST = videomode.jpg
+EXTRA_DIST = videomode_en.jpg videomode_de.jpg
old mode 100644 (file)
new mode 100755 (executable)
index 3891e0b..fbb6e3f
@@ -9,7 +9,7 @@
                     <packagename>enigma2-plugin-systemplugins-videomode</packagename>
                     <shortdescription>Videomode provides advanced video modes.</shortdescription>
                     <description>The Videomode extension provides advanced video modes.</description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/videomode.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_videomode_en.jpg" />
           </info>
           <info language="de">
                     <author>Dream Multimedia</author>
@@ -17,7 +17,7 @@
                     <packagename>enigma2-plugin-systemplugins-videomode</packagename>
                     <shortdescription>Videomode bietet erweiterte Video Einstellungen.</shortdescription>
                     <description>Die Videomode-Erweiterung bietet erweiterte Video-Einstellungen.</description>
-                    <screenshot src="http://www.dreamboxupdate.com/preview/videomode.jpg" />
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_videomode_de.jpg" />
           </info>
 
          <files type="package"> <!-- without version, without .ipk -->
diff --git a/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode.jpg b/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode.jpg
deleted file mode 100644 (file)
index adb5646..0000000
Binary files a/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode.jpg and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode_de.jpg b/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode_de.jpg
new file mode 100755 (executable)
index 0000000..00b7ac7
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode_de.jpg differ
diff --git a/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode_en.jpg b/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode_en.jpg
new file mode 100755 (executable)
index 0000000..1f4288b
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode_en.jpg differ
index 365372c23776a2ec909f178788af59cdad30bf70..2f36237987af5bd6dba7bad76f07fb0ac9191715 100755 (executable)
@@ -1,6 +1,6 @@
 installdir = $(pkglibdir)/python/Plugins/SystemPlugins/WirelessLan
 
-#SUBDIRS = meta
+SUBDIRS = meta
 
 install_PYTHON =       \
        __init__.py \
index ba1e13d4ace9df1c3ef1687141c601a78bfa9ac2..1c1471cee25fd9fc7623abcb6c1a303a6b4d10ed 100755 (executable)
@@ -1,7 +1,7 @@
-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 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
 
@@ -35,13 +35,12 @@ config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewl
 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)
+                       a = a + chr(i)
+                       if i < 32 or i > 127:
+                               b = b + ' '
+                       else:
+                               b = b + chr(i)
                
                self.iface = iface
                self.wlaniface = {}
@@ -245,91 +244,6 @@ class Wlan:
                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
diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/WirelessLan/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..6bc4aab
--- /dev/null
@@ -0,0 +1,5 @@
+installdir = $(datadir)/meta/
+
+dist_install_DATA = plugin_wirelesslan.xml
+
+EXTRA_DIST = wirelesslan_de.jpg wirelesslan_en.jpg
diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/meta/plugin_wirelesslan.xml b/lib/python/Plugins/SystemPlugins/WirelessLan/meta/plugin_wirelesslan.xml
new file mode 100755 (executable)
index 0000000..1f882b3
--- /dev/null
@@ -0,0 +1,27 @@
+<default>
+         <prerequisites>
+                    <tag type="Network" />
+                    <tag type="System" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>WirelessLan</name>
+                    <packagename>enigma2-plugin-systemplugins-wirelesslan</packagename>
+                    <shortdescription>Configure your WLAN network interface</shortdescription>
+                    <description>The WirelessLan extensions helps you configuring your WLAN network interface.</description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_wirelesslan_en.jpg" />
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>WirelessLan</name>
+                    <packagename>enigma2-plugin-systemplugins-wirelesslan</packagename>
+                    <shortdescription>Konfigurieren Sie Ihr WLAN Netzwerk.</shortdescription>
+                    <description>Die WirelessLan Erweiterung hilft Ihnen beim konfigurieren Ihres WLAN Netzwerkes..</description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/plugin_wirelesslan_de.jpg" />
+          </info>
+
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-systemplugins-wirelesslan" />
+       </files>
+
+</default>
diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/meta/wirelesslan_de.jpg b/lib/python/Plugins/SystemPlugins/WirelessLan/meta/wirelesslan_de.jpg
new file mode 100755 (executable)
index 0000000..3869541
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/WirelessLan/meta/wirelesslan_de.jpg differ
diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/meta/wirelesslan_en.jpg b/lib/python/Plugins/SystemPlugins/WirelessLan/meta/wirelesslan_en.jpg
new file mode 100755 (executable)
index 0000000..fe4fa97
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/WirelessLan/meta/wirelesslan_en.jpg differ
index b7a64b9a44400f5b2e7311a75925d939b63d503b..6873ffa41411ce20204c1dac0173e009a9df9506 100755 (executable)
@@ -4,6 +4,7 @@ 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.Sources.List import List
 from Components.MenuList import MenuList
 from Components.config import config, getConfigListEntry, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, ConfigSelection, ConfigPassword
 from Components.ConfigList import ConfigListScreen
@@ -11,8 +12,9 @@ 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
+from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
+from Tools.LoadPixmap import LoadPixmap
+from Wlan import Wlan, wpaSupplicant, iStatus
 
 plugin_path = "/usr/lib/enigma2/python/Plugins/SystemPlugins/WirelessLan"
 
@@ -39,37 +41,35 @@ config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewl
 
 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>
-       """
+               <screen name="WlanStatus" 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:'))
@@ -114,7 +114,6 @@ class WlanStatus(Screen):
                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):
@@ -131,10 +130,9 @@ class WlanStatus(Screen):
 
        def exit(self):
                self.timer.stop()
-               self.close()    
+               self.close(True)        
 
        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..."))
@@ -155,37 +153,55 @@ class WlanStatus(Screen):
 
 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>
-       """
+               <screen name="WlanScan" 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 source="list" render="Listbox" position="5,40" size="550,300" scrollbarMode="showOnDemand">
+                               <convert type="TemplatedMultiContent">
+                                       {"template": [
+                                                       MultiContentEntryText(pos = (0, 0), size = (550, 30), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the essid
+                                                       MultiContentEntryText(pos = (0, 30), size = (175, 20), font=1, flags = RT_HALIGN_LEFT, text = 5), # index 5 is the interface
+                                                       MultiContentEntryText(pos = (175, 30), size = (175, 20), font=1, flags = RT_HALIGN_LEFT, text = 4), # index 0 is the encryption
+                                                       MultiContentEntryText(pos = (350, 0), size = (200, 20), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 0 is the signal
+                                                       MultiContentEntryText(pos = (350, 30), size = (200, 20), font=1, flags = RT_HALIGN_LEFT, text = 3), # index 0 is the maxrate
+                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 52), size = (550, 2), png = 6), # index 6 is the div pixmap
+                                               ],
+                                       "fonts": [gFont("Regular", 28),gFont("Regular", 18)],
+                                       "itemHeight": 54
+                                       }
+                               </convert>
+                       </widget>
+                       <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.APList = None
+               self.newAPList = None
+               self.WlanList = None
+               self.cleanList = None
+               self.oldlist = None
+               self.listLenght = None
+               self.rescanTimer = eTimer()
+               self.rescanTimer.callback.append(self.rescanTimerFired)
                
                self["info"] = StaticText()
                
-               self.list = []  
-               self["list"] = WlanList(self.session, self.iface)
+               self.list = []
+               self["list"] = List(self.list)
                
-               self.setInfo()
-
                self["key_red"] = StaticText(_("Close"))
                self["key_green"] = StaticText(_("Connect"))
-               self["key_yellow"] = StaticText(_("Refresh"))
+               self["key_yellow"] = StaticText()
                        
                self["actions"] = NumberActionMap(["WizardActions", "InputActions", "EPGSelectActions"],
                {
@@ -195,63 +211,161 @@ class WlanScan(Screen):
                
                self["shortcuts"] = ActionMap(["ShortcutActions"],
                {
-                       "red": self.cancel,
+                       "red": self.cancel,
                        "green": self.select,
-                       "yellow": self.rescan,
                })
                self.onLayoutFinish.append(self.layoutFinished)
+               self.getAccessPoints(refresh = False)
                
        def layoutFinished(self):
                self.setTitle(_("Choose a wireless network"))
        
        def select(self):
                cur = self["list"].getCurrent()
-               #print "CURRENT",cur
                if cur is not None:
+                       self.rescanTimer.stop()
+                       del self.rescanTimer
                        if cur[1] is not None:
-                               essid = cur[0]
-                               if essid == '':
-                                       essid = cur[1]
-                               encrypted = cur[2]
-                               self.close(essid,self["list"].getList())
+                               essid = cur[1]
+                               self.close(essid,self.getWlanList())
                        else:
                                self.close(None,None)
                else:
+                       self.rescanTimer.stop()
+                       del self.rescanTimer
                        self.close(None,None)
        
        def WlanSetupClosed(self, *ret):
                if ret[0] == 2:
+                       self.rescanTimer.stop()
+                       del self.rescanTimer
                        self.close(None)
        
-       def rescan(self):
-               self["list"].reload()
-               self.setInfo()
-       
        def cancel(self):
                if self.oldInterfaceState is False:
+                       iNetwork.setAdapterAttribute(self.iface, "up", False)
                        iNetwork.deactivateInterface(self.iface,self.deactivateInterfaceCB)
                else:
+                       self.rescanTimer.stop()
+                       del self.rescanTimer
                        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.rescanTimer.stop()
+                               del self.rescanTimer
                                self.close(None)
 
-       def setInfo(self):
-               length = self["list"].getLength()
+       def rescanTimerFired(self):
+               self.rescanTimer.stop()
+               self.updateAPList()
+
+       def buildEntryComponent(self, essid, bssid, encrypted, iface, maxrate, signal):
+               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
+               encryption = encrypted and _("Yes") or _("No")
+               if bssid == 'hidden...':
+                       return((essid, bssid, None, None, None, None, divpng))
+               else:                                   
+                       return((essid, bssid, _("Signal: ") + str(signal), _("Max. Bitrate: ") + str(maxrate), _("Encrypted: ") + encryption, _("Interface: ") + str(iface), divpng))
+
+       def updateAPList(self):
+               self.oldlist = []
+               self.oldlist = self.cleanList
+               self.newAPList = []
+               newList = []
+               tmpList = []
+               newListIndex = None
+               currentListEntry = None
+               currentListIndex = None
+               newList = self.getAccessPoints(refresh = True)
                
+               for oldentry in self.oldlist:
+                       if oldentry not in newList:
+                               newList.append(oldentry)
+
+               for newentry in newList:
+                       if newentry[1] == "hidden...":
+                               continue
+                       tmpList.append(newentry)
+
+               if len(tmpList):
+                       if "hidden..." not in tmpList:
+                               tmpList.append( ( _("enter hidden network SSID"), "hidden...", True, self.iface, _("unavailable"), "" ) )
+       
+                       for entry in tmpList:
+                               self.newAPList.append(self.buildEntryComponent( entry[0], entry[1], entry[2], entry[3], entry[4], entry[5] ))
+       
+                       currentListEntry = self["list"].getCurrent()
+                       idx = 0
+                       for entry in self.newAPList:
+                               if entry == currentListEntry:
+                                       newListIndex = idx
+                               idx +=1
+                       self['list'].setList(self.newAPList)
+                       self["list"].setIndex(newListIndex)
+                       self["list"].updateList(self.newAPList)
+                       self.listLenght = len(self.newAPList)
+                       self.buildWlanList()
+                       self.setInfo()
+
+       def getAccessPoints(self, refresh = False):
+               self.APList = []
+               self.cleanList = []
+               self.w = Wlan(self.iface)
+               aps = self.w.getNetworkList()
+               if aps is not None:
+                       print "[NetworkWizard.py] got Accespoints!"
+                       tmpList = []
+                       compList = []
+                       for ap in aps:
+                               a = aps[ap]
+                               if a['active']:
+                                       tmpList.append( (a['essid'], a['bssid']) )
+                                       compList.append( (a['essid'], a['bssid'], a['encrypted'], a['iface'], a['maxrate'], a['signal']) )
+
+                       for entry in tmpList:
+                               if entry[0] == "":
+                                       for compentry in compList:
+                                               if compentry[1] == entry[1]:
+                                                       compList.remove(compentry)
+                       for entry in compList:
+                               self.cleanList.append( ( entry[0], entry[1], entry[2], entry[3], entry[4], entry[5] ) )
+               
+               if "hidden..." not in self.cleanList:
+                       self.cleanList.append( ( _("enter hidden network SSID"), "hidden...", True, self.iface, _("unavailable"), "" ) )
+
+               for entry in self.cleanList:
+                       self.APList.append(self.buildEntryComponent( entry[0], entry[1], entry[2], entry[3], entry[4], entry[5] ))
+               
+               if refresh is False:
+                       self['list'].setList(self.APList)
+               self.listLenght = len(self.APList)
+               self.setInfo()
+               self.rescanTimer.start(5000)
+               return self.cleanList
+
+       def setInfo(self):
+               length = self.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!"))        
+                       self["info"].setText(str(length)+_(" wireless networks found!"))
+
+       def buildWlanList(self):
+               self.WlanList = []
+               currList = []
+               currList = self['list'].list
+               for entry in currList:
+                       self.WlanList.append( (entry[1], entry[0]) )            
+
+       def getLength(self):
+               return self.listLenght          
+
+       def getWlanList(self):
+               return self.WlanList
 
 
 def WlanStatusScreenMain(session, iface):
@@ -259,13 +373,11 @@ def WlanStatusScreenMain(session, iface):
 
 
 def callFunction(iface):
-       
        w = Wlan(iface)
        i = w.getWirelessInterfaces()
        if i:
                if iface in i:
                        return WlanStatusScreenMain
-       
        return None
 
 
@@ -282,4 +394,3 @@ def configStrings(iface):
 
 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 48bb28ea4b0e84059411a8852d49b2b0ee059eb6..c1c6f948052e914fc21794acbbbd837b97622f71 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 3dde7e2286f89427285b12aef6a414431b6c0e92..f8edba11fe06c9e6b737f5afcd08f5e0b1393095 100644 (file)
@@ -6,6 +6,7 @@ from Components.Label import Label
 from Components.EpgList import EPGList, EPG_TYPE_SINGLE, EPG_TYPE_SIMILAR, EPG_TYPE_MULTI
 from Components.ActionMap import ActionMap
 from Components.TimerSanityCheck import TimerSanityCheck
+from Components.UsageConfig import preferredTimerPath
 from Components.Sources.ServiceEvent import ServiceEvent
 from Components.Sources.Event import Event
 from Screens.TimerEdit import TimerSanityConflict
@@ -235,7 +236,7 @@ class EPGSelection(Screen):
                                self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName())
                                break
                else:
-                       newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event))
+                       newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, dirname = preferredTimerPath(), *parseEvent(event))
                        self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
 
        def finishedAdd(self, answer):
index c1ffb5851d3e3e34c064076aabdddc90b47480ef..cced3ceba1fa60f1535a289aabdb4c319f51372a 100644 (file)
@@ -6,6 +6,7 @@ from Components.Button import Button
 from Components.Label import Label
 from Components.ScrollLabel import ScrollLabel
 from Components.TimerList import TimerList
+from Components.UsageConfig import preferredTimerPath
 from enigma import eEPGCache, eTimer, eServiceReference
 from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT
 from TimerEntry import TimerEntry
@@ -85,7 +86,7 @@ class EventViewBase:
                                self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName())
                                break
                else:
-                       newEntry = RecordTimerEntry(self.currentService, checkOldTimers = True, *parseEvent(self.event))
+                       newEntry = RecordTimerEntry(self.currentService, checkOldTimers = True, dirname = preferredTimerPath(), *parseEvent(self.event))
                        self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
 
        def finishedAdd(self, answer):
index 59cc21d3e956834cdab50ae797e4afc0813b24de..a15c7ac1b89b5597b0b314d6cf6f5fc55935d5e7 100644 (file)
@@ -212,7 +212,6 @@ class MoviePlayer(InfoBarBase, InfoBarShowHide, \
                                        return
 
                if answer in ("quit", "quitanddeleteconfirmed"):
-                       config.movielist.last_videodir.cancel()
                        self.close()
                elif answer == "movielist":
                        ref = self.session.nav.getCurrentlyPlayingServiceReference()
index 2cbfeb733819faceecff80e23feecbe0982297a9..58cee9f3e9375e1afc77092f5de82ef554c6bb7f 100644 (file)
@@ -10,6 +10,7 @@ from Components.ServiceEventTracker import ServiceEventTracker
 from Components.Sources.Boolean import Boolean
 from Components.config import config, ConfigBoolean, ConfigClock
 from Components.SystemInfo import SystemInfo
+from Components.UsageConfig import preferredInstantRecordPath, defaultMoviePath
 from EpgSelection import EPGSelection
 from Plugins.Plugin import PluginDescriptor
 
@@ -28,7 +29,7 @@ from Screens.TimeDateInput import TimeDateInput
 from ServiceReference import ServiceReference
 
 from Tools import Notifications
-from Tools.Directories import SCOPE_HDD, resolveFilename, fileExists
+from Tools.Directories import fileExists
 
 from enigma import eTimer, eServiceCenter, eDVBServicePMTHandler, iServiceInformation, \
        iPlayableService, eServiceReference, eEPGCache
@@ -690,8 +691,7 @@ class InfoBarSeek:
                                iPlayableService.evEOF: self.__evEOF,
                                iPlayableService.evSOF: self.__evSOF,
                        })
-
-               self.minSpeedBackward = useSeekBackHack and 16 or 0
+               self.fast_winding_hint_message_showed = False
 
                class InfoBarSeekActionMap(HelpableActionMap):
                        def __init__(self, screen, *args, **kwargs):
@@ -739,24 +739,19 @@ class InfoBarSeek:
                self.__seekableStatusChanged()
 
        def makeStateForward(self, n):
-               minspeed = config.seek.stepwise_minspeed.value
-               repeat = int(config.seek.stepwise_repeat.value)
-               if minspeed != "Never" and n >= int(minspeed) and repeat > 1:
-                       return (0, n * repeat, repeat, ">> %dx" % n)
-               else:
+#              minspeed = config.seek.stepwise_minspeed.value
+#              repeat = int(config.seek.stepwise_repeat.value)
+#              if minspeed != "Never" and n >= int(minspeed) and repeat > 1:
+#                      return (0, n * repeat, repeat, ">> %dx" % n)
+#              else:
                        return (0, n, 0, ">> %dx" % n)
 
        def makeStateBackward(self, n):
-               minspeed = config.seek.stepwise_minspeed.value
-               repeat = int(config.seek.stepwise_repeat.value)
-               if self.minSpeedBackward and n < self.minSpeedBackward:
-                       r = (self.minSpeedBackward - 1)/ n + 1
-                       if minspeed != "Never" and n >= int(minspeed) and repeat > 1:
-                               r = max(r, repeat)
-                       return (0, -n * r, r, "<< %dx" % n)
-               elif minspeed != "Never" and n >= int(minspeed) and repeat > 1:
-                       return (0, -n * repeat, repeat, "<< %dx" % n)
-               else:
+#              minspeed = config.seek.stepwise_minspeed.value
+#              repeat = int(config.seek.stepwise_repeat.value)
+#              if minspeed != "Never" and n >= int(minspeed) and repeat > 1:
+#                      return (0, -n * repeat, repeat, "<< %dx" % n)
+#              else:
                        return (0, -n, 0, "<< %dx" % n)
 
        def makeStateSlowMotion(self, n):
@@ -823,6 +818,7 @@ class InfoBarSeek:
 #                      print "seekable"
 
        def __serviceStarted(self):
+               self.fast_winding_hint_message_showed = False
                self.seekstate = self.SEEK_STATE_PLAY
                self.__seekableStatusChanged()
 
@@ -876,7 +872,7 @@ class InfoBarSeek:
                        if config.seek.on_pause.value == "play":
                                self.unPauseService()
                        elif config.seek.on_pause.value == "step":
-                               self.doSeekRelative(0)
+                               self.doSeekRelative(1)
                        elif config.seek.on_pause.value == "last":
                                self.setSeekState(self.lastseekstate)
                                self.lastseekstate = self.SEEK_STATE_PLAY
@@ -913,6 +909,12 @@ class InfoBarSeek:
                        self.showAfterSeek()
 
        def seekFwd(self):
+               seek = self.getSeek()
+               if seek and not (seek.isCurrentlySeekable() & 2):
+                       if not self.fast_winding_hint_message_showed and (seek.isCurrentlySeekable() & 1):
+                               self.session.open(MessageBox, _("No fast winding possible yet.. but you can use the number buttons to skip forward/backward!"), MessageBox.TYPE_INFO, timeout=10)
+                               self.fast_winding_hint_message_showed = True
+                       return
                if self.seekstate == self.SEEK_STATE_PLAY:
                        self.setSeekState(self.makeStateForward(int(config.seek.enter_forward.value)))
                elif self.seekstate == self.SEEK_STATE_PAUSE:
@@ -942,6 +944,12 @@ class InfoBarSeek:
                        self.setSeekState(self.makeStateSlowMotion(speed))
 
        def seekBack(self):
+               seek = self.getSeek()
+               if seek and not (seek.isCurrentlySeekable() & 2):
+                       if not self.fast_winding_hint_message_showed and (seek.isCurrentlySeekable() & 1):
+                               self.session.open(MessageBox, _("No fast winding possible yet.. but you can use the number buttons to skip forward/backward!"), MessageBox.TYPE_INFO, timeout=10)
+                               self.fast_winding_hint_message_showed = True
+                       return
                seekstate = self.seekstate
                if seekstate == self.SEEK_STATE_PLAY:
                        self.setSeekState(self.makeStateBackward(int(config.seek.enter_backward.value)))
@@ -949,7 +957,7 @@ class InfoBarSeek:
                        self.setSeekState(self.makeStateBackward(int(config.seek.enter_backward.value)))
                        self.doSeekRelative(-6)
                elif seekstate == self.SEEK_STATE_PAUSE:
-                       self.doSeekRelative(-3)
+                       self.doSeekRelative(-1)
                elif self.isStateForward(seekstate):
                        speed = seekstate[1]
                        if seekstate[2]:
@@ -1212,10 +1220,7 @@ class InfoBarTimeshift:
                        self.setSeekState(self.SEEK_STATE_PAUSE)
 
                if back:
-                       self.doSeek(-5) # seek some gops before end
                        self.ts_rewind_timer.start(200, 1)
-               else:
-                       self.doSeek(-1) # seek 1 gop before end
 
        def rewindService(self):
                self.setSeekState(self.makeStateBackward(int(config.seek.enter_backward.value)))
@@ -1484,7 +1489,7 @@ class InfoBarInstantRecord:
                if isinstance(serviceref, eServiceReference):
                        serviceref = ServiceReference(serviceref)
 
-               recording = RecordTimerEntry(serviceref, begin, end, name, description, eventid, dirname = config.movielist.last_videodir.value)
+               recording = RecordTimerEntry(serviceref, begin, end, name, description, eventid, dirname = preferredInstantRecordPath())
                recording.dontSave = True
                
                if event is None or limitEvent == False:
@@ -1585,9 +1590,9 @@ class InfoBarInstantRecord:
                        self.session.nav.RecordTimer.timeChanged(entry)
 
        def instantRecord(self):
-               dir = config.movielist.last_videodir.value
-               if not fileExists(dir, 'w'):
-                       dir = resolveFilename(SCOPE_HDD)
+               dir = preferredInstantRecordPath()
+               if not dir or not fileExists(dir, 'w'):
+                       dir = defaultMoviePath()
                try:
                        stat = os_stat(dir)
                except:
@@ -1669,17 +1674,46 @@ class InfoBarAudioSelection:
                                else:
                                        break
 
+                       availableKeys = []
+                       usedKeys = []
+
                        if SystemInfo["CanDownmixAC3"]:
-                               tlist = [(_("AC3 downmix") + " - " +(_("Off"), _("On"))[config.av.downmix_ac3.value and 1 or 0], "CALLFUNC", self.changeAC3Downmix),
-                                       ((_("Left"), _("Stereo"), _("Right"))[self.audioChannel.getCurrentChannel()], "mode"),
-                                       ("--", "")] + tlist
-                               keys = [ "red", "green", "", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] + [""]*n
-                               selection += 3
-                       else:
-                               tlist = [((_("Left"), _("Stereo"), _("Right"))[self.audioChannel.getCurrentChannel()], "mode"), ("--", "")] + tlist
-                               keys = [ "red", "", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] + [""]*n
+                               flist = [(_("AC3 downmix") + " - " +(_("Off"), _("On"))[config.av.downmix_ac3.value and 1 or 0], "CALLFUNC", self.changeAC3Downmix),
+                                       ((_("Left"), _("Stereo"), _("Right"))[self.audioChannel.getCurrentChannel()], "mode")]
+                               usedKeys.extend(["red", "green"])
+                               availableKeys.extend(["yellow", "blue"])
                                selection += 2
-                       self.session.openWithCallback(self.audioSelected, ChoiceBox, title=_("Select audio track"), list = tlist, selection = selection, keys = keys, skin_name = "AudioTrackSelection")
+                       else:
+                               flist = [((_("Left"), _("Stereo"), _("Right"))[self.audioChannel.getCurrentChannel()], "mode")]
+                               usedKeys.extend(["red"])
+                               availableKeys.extend(["green", "yellow", "blue"])
+                               selection += 1
+
+                       if hasattr(self, "runPlugin"):
+                               class PluginCaller:
+                                       def __init__(self, fnc, *args):
+                                               self.fnc = fnc
+                                               self.args = args
+                                       def __call__(self, *args, **kwargs):
+                                               self.fnc(*self.args)
+
+                               Plugins = [ (p.name, PluginCaller(self.runPlugin, p)) for p in plugins.getPlugins(where = PluginDescriptor.WHERE_AUDIOMENU) ]
+
+                               for p in Plugins:
+                                       selection += 1
+                                       flist.append((p[0], "CALLFUNC", p[1]))
+                                       if availableKeys:
+                                               usedKeys.append(availableKeys[0])
+                                               del availableKeys[0]
+                                       else:
+                                               usedKeys.append("")
+
+                       flist.append(("--", ""))
+                       usedKeys.append("")
+                       selection += 1
+
+                       keys = usedKeys + [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" ] + [""] * n
+                       self.session.openWithCallback(self.audioSelected, ChoiceBox, title=_("Select audio track"), list = flist + tlist, selection = selection, keys = keys, skin_name = "AudioTrackSelection")
                else:
                        del self.audioTracks
 
old mode 100644 (file)
new mode 100755 (executable)
index 082daa5..fce10ac
@@ -13,14 +13,14 @@ def _cached(x):
 
 from Screens.Rc import Rc
 
-from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN
 
 from Tools.LoadPixmap import LoadPixmap
 
 def LanguageEntryComponent(file, name, index):
-       png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "countries/" + file + ".png"))
+       png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "countries/" + file + ".png"))
        if png == None:
-               png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "countries/missing.png"))
+               png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "countries/missing.png"))
        res = (index, name, png)
        return res
 
index 61d7105dfbbbc787e86e319fb41ca1827f29b473..29d94f553fef38bd347ad1db29b57edc0ff14f36 100644 (file)
@@ -289,6 +289,11 @@ class LocationBox(Screen, NumericalTextInput, HelpableScreen):
                        else:
                                self["filelist"].refresh()
                                self.removeBookmark(name, True)
+                               val = self.realBookmarks and self.realBookmarks.value
+                               if val and name in val:
+                                       val.remove(name)
+                                       self.realBookmarks.value = val
+                                       self.realBookmarks.save()
 
        def up(self):
                self[self.currList].up()
index 44994b86d0a5aab8c8d50b7364254459e02fb1ec..585983c2752f0ffc694bf975ee54ab9a4f401211 100755 (executable)
@@ -14,5 +14,5 @@ install_PYTHON = \
        SubtitleDisplay.py SubservicesQuickzap.py ParentalControlSetup.py NumericalTextInputHelpDialog.py \
        SleepTimerEdit.py Ipkg.py RdsDisplay.py Globals.py DefaultWizard.py \
        SessionGlobals.py LocationBox.py WizardLanguage.py TaskView.py Rc.py VirtualKeyBoard.py \
-       TextBox.py FactoryReset.py
+       TextBox.py FactoryReset.py RecordPaths.py
 
index 5f2032f16d2f0fe3608fcf0f82299fb9e83467d5..bb0709e5955a9be8fd72e8445fad9cb4fc85e0b6 100644 (file)
@@ -97,8 +97,12 @@ class Menu(Screen):
 
        def addMenu(self, destList, node):
                requires = node.get("requires")
-               if requires and not SystemInfo.get(requires, False):
-                       return
+               if requires:
+                       if requires[0] == '!':
+                               if SystemInfo.get(requires[1:], False):
+                                       return
+                       elif not SystemInfo.get(requires, False):
+                               return
                MenuTitle = _(node.get("text", "??").encode("UTF-8"))
                entryID = node.get("entryID", "undefined")
                weight = node.get("weight", 50)
@@ -120,8 +124,12 @@ class Menu(Screen):
 
        def addItem(self, destList, node):
                requires = node.get("requires")
-               if requires and not SystemInfo.get(requires, False):
-                       return
+               if requires:
+                       if requires[0] == '!':
+                               if SystemInfo.get(requires[1:], False):
+                                       return
+                       elif not SystemInfo.get(requires, False):
+                               return
                item_text = node.get("text", "").encode("UTF-8")
                entryID = node.get("entryID", "undefined")
                weight = node.get("weight", 50)
index 86bf07d3b69bff1fc2b18799d521d548e2b35419..f3538b7b730090e71cd6e1fdc4041ec39ec33eee 100644 (file)
@@ -12,9 +12,11 @@ class MessageBox(Screen):
        TYPE_WARNING = 2
        TYPE_ERROR = 3
 
-       def __init__(self, session, text, type = TYPE_YESNO, timeout = -1, close_on_any_key = False, default = True, enable_input = True):
+       def __init__(self, session, text, type = TYPE_YESNO, timeout = -1, close_on_any_key = False, default = True, enable_input = True, msgBoxID = None):
                self.type = type
                Screen.__init__(self, session)
+               
+               self.msgBoxID = msgBoxID
 
                self["text"] = Label(text)
                self["Text"] = StaticText(text)
index 174a4f072050e6d5961d31ea785a856d9f7aa11d..0468f8a010fc72f5f12b869cdfb8cb55a9626361 100644 (file)
@@ -7,8 +7,9 @@ from Components.DiskInfo import DiskInfo
 from Components.Pixmap import Pixmap
 from Components.Label import Label
 from Components.PluginComponent import plugins
-from Components.config import config, ConfigSubsection, ConfigText, ConfigInteger, ConfigLocations
+from Components.config import config, ConfigSubsection, ConfigText, ConfigInteger, ConfigLocations, ConfigSet
 from Components.Sources.ServiceEvent import ServiceEvent
+from Components.UsageConfig import defaultMoviePath
 
 from Plugins.Plugin import PluginDescriptor
 
@@ -31,6 +32,7 @@ config.movielist.last_timer_videodir = ConfigText(default=resolveFilename(SCOPE_
 config.movielist.videodirs = ConfigLocations(default=[resolveFilename(SCOPE_HDD)])
 config.movielist.first_tags = ConfigText(default="")
 config.movielist.second_tags = ConfigText(default="")
+config.movielist.last_selected_tags = ConfigSet([], default=[])
 
 
 def setPreferredTagEditor(te):
@@ -168,7 +170,10 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo):
                HelpableScreen.__init__(self)
 
                self.tags = [ ]
-               self.selected_tags = None
+               if selectedmovie:
+                       self.selected_tags = config.movielist.last_selected_tags.value
+               else:
+                       self.selected_tags = None
                self.selected_tags_ele = None
 
                self.movemode = False
@@ -183,8 +188,8 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo):
                self["DescriptionBorder"] = Pixmap()
                self["DescriptionBorder"].hide()
 
-               if not pathExists(config.movielist.last_videodir.value):
-                       config.movielist.last_videodir.value = resolveFilename(SCOPE_HDD)
+               if not fileExists(config.movielist.last_videodir.value):
+                       config.movielist.last_videodir.value = defaultMoviePath()
                        config.movielist.last_videodir.save()
                self.current_ref = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + config.movielist.last_videodir.value)
 
@@ -292,6 +297,7 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo):
                self.close(None)
 
        def saveconfig(self):
+               config.movielist.last_selected_tags.value = self.selected_tags
                config.movielist.moviesort.save()
                config.movielist.listtype.save()
                config.movielist.description.save()
@@ -339,8 +345,8 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo):
                self["list"].setSortType(type)
 
        def reloadList(self, sel = None, home = False):
-               if not pathExists(config.movielist.last_videodir.value):
-                       path = resolveFilename(SCOPE_HDD)
+               if not fileExists(config.movielist.last_videodir.value):
+                       path = defaultMoviePath()
                        config.movielist.last_videodir.value = path
                        config.movielist.last_videodir.save()
                        self.current_ref = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + path)
@@ -370,7 +376,7 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo):
 
        def gotFilename(self, res):
                if res is not None and res is not config.movielist.last_videodir.value:
-                       if pathExists(res):
+                       if fileExists(res):
                                config.movielist.last_videodir.value = res
                                config.movielist.last_videodir.save()
                                self.current_ref = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + res)
@@ -392,7 +398,7 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo):
        def showTagsN(self, tagele):
                if not self.tags:
                        self.showTagWarning()
-               elif not tagele or self.selected_tags_ele == tagele or not tagele.value in self.tags:
+               elif not tagele or (self.selected_tags and tagele.value in self.selected_tags) or not tagele.value in self.tags:
                        self.showTagsMenu(tagele)
                else:
                        self.selected_tags_ele = tagele
index ec2bafe54de9dfc065db3bcac2594586ee0a2b40..3e9354ead818872950be3067608a96ffb11a4db4 100755 (executable)
@@ -6,6 +6,7 @@ from Screens.VirtualKeyBoard import VirtualKeyBoard
 from Screens.HelpMenu import HelpableScreen
 from Components.Network import iNetwork
 from Components.Sources.StaticText import StaticText
+from Components.Sources.Boolean import Boolean
 from Components.Label import Label,MultiColorLabel
 from Components.Pixmap import Pixmap,MultiPixmap
 from Components.MenuList import MenuList
@@ -14,7 +15,7 @@ from Components.ConfigList import ConfigListScreen
 from Components.PluginComponent import plugins
 from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
 from Components.ActionMap import ActionMap, NumberActionMap, HelpableActionMap
-from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_SKIN
 from Tools.LoadPixmap import LoadPixmap
 from Plugins.Plugin import PluginDescriptor
 from enigma import eTimer, ePoint, eSize, RT_HALIGN_LEFT, eListboxPythonMultiContent, gFont
@@ -36,14 +37,14 @@ def InterfaceEntryComponent(index,name,default,active ):
        num_configured_if = len(iNetwork.getConfiguredAdapters())
        if num_configured_if >= 2:
                if default is True:
-                       png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue.png"))
+                       png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/buttons/button_blue.png"))
                if default is False:
-                       png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue_off.png"))
+                       png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/buttons/button_blue_off.png"))
                res.append(MultiContentEntryPixmapAlphaTest(pos=(10, 5), size=(25, 25), png = png))
        if active is True:
-               png2 = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_on.png"))
+               png2 = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_on.png"))
        if active is False:
-               png2 = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_error.png"))
+               png2 = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_error.png"))
        res.append(MultiContentEntryPixmapAlphaTest(pos=(40, 1), size=(25, 25), png = png2))
        return res
 
@@ -278,7 +279,6 @@ class NameserverSetup(Screen, ConfigListScreen, HelpableScreen):
 
        def remove(self):
                print "currentIndex:", self["config"].getCurrentIndex()
-               
                index = self["config"].getCurrentIndex()
                if index < len(self.nameservers):
                        iNetwork.removeNameserver(self.nameservers[index])
@@ -309,24 +309,19 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
 
                self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
                        {
-                       "cancel": (self.cancel, _("exit network adapter setup menu")),
-                       "ok": (self.ok, _("select menu entry")),
+                       "cancel": (self.keyCancel, _("exit network adapter configuration")),
+                       "ok": (self.keySave, _("activate network adapter configuration")),
                        })
 
                self["ColorActions"] = HelpableActionMap(self, "ColorActions",
                        {
-                       "red": (self.cancel, _("exit network adapter configuration")),
+                       "red": (self.keyCancel, _("exit network adapter configuration")),
                        "blue": (self.KeyBlue, _("open nameserver configuration")),
                        })
 
-               self["VirtualKB"] = HelpableActionMap(self, "VirtualKeyboardActions",
-                       {
-                       "showVirtualKeyboard": (self.KeyText, [_("open virtual keyboard input help"),_("* Only available when entering hidden SSID or network key")] ),
-                       })
-
                self["actions"] = NumberActionMap(["SetupActions"],
                {
-                       "ok": self.ok,
+                       "ok": self.keySave,
                }, -2)
 
                self.list = []
@@ -355,9 +350,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                self["key_red"] = StaticText(_("Cancel"))
                self["key_blue"] = StaticText(_("Edit DNS"))
 
-               self["VKeyIcon"] = Pixmap()
+               self["VKeyIcon"] = Boolean(False)
                self["HelpWindow"] = Pixmap()
-
+               self["HelpWindow"].hide()
+               
        def layoutFinished(self):
                self["DNS1"].setText(self.primaryDNS.getText())
                self["DNS2"].setText(self.secondaryDNS.getText())
@@ -386,9 +382,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                        self["Gateway"].setText("")
                        self["Gatewaytext"].setText("")
                self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface))
-               self["VKeyIcon"].hide()
-               self["VirtualKB"].setEnabled(False)
-               self["HelpWindow"].hide()
 
        def createConfig(self):
                self.InterfaceEntry = None
@@ -426,7 +419,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                                try:
                                        self.aps = self.w.getNetworkList()
                                        if self.aps is not None:
-                                               print "[NetworkSetup.py] got Accespoints!"
                                                for ap in self.aps:
                                                        a = self.aps[ap]
                                                        if a['active']:
@@ -443,7 +435,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                                self.default = self.wsconfig['ssid']
 
                        if "hidden..." not in self.nwlist:
-                               self.nwlist.append(("hidden...",_("hidden network")))
+                               self.nwlist.append(("hidden...",_("enter hidden network SSID")))
                        if self.default not in self.nwlist:
                                self.nwlist.append((self.default,self.default))
                        config.plugins.wlan.essid = NoSave(ConfigSelection(self.nwlist, default = self.default ))
@@ -518,30 +510,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
 
                self["config"].list = self.list
                self["config"].l.setList(self.list)
-               if not self.selectionChanged in self["config"].onSelectionChanged:
-                       self["config"].onSelectionChanged.append(self.selectionChanged)
 
        def KeyBlue(self):
                self.session.openWithCallback(self.NameserverSetupClosed, NameserverSetup)
 
-       def KeyText(self):
-               if self.iface == "wlan0" or self.iface == "ath0" :
-                       if self["config"].getCurrent() == self.hiddenSSID:
-                               if config.plugins.wlan.essid.value == 'hidden...':
-                                       self.session.openWithCallback(self.VirtualKeyBoardSSIDCallback, VirtualKeyBoard, title = (_("Enter WLAN network name/SSID:")), text = config.plugins.wlan.essid.value)
-                       if self["config"].getCurrent() == self.encryptionKey:
-                               self.session.openWithCallback(self.VirtualKeyBoardKeyCallback, VirtualKeyBoard, title = (_("Enter WLAN passphrase/key:")), text = config.plugins.wlan.encryption.psk.value)
-
-       def VirtualKeyBoardSSIDCallback(self, callback = None):
-               if callback is not None and len(callback):
-                       config.plugins.wlan.hiddenessid.setValue(callback)
-                       self["config"].invalidate(self.hiddenSSID)
-
-       def VirtualKeyBoardKeyCallback(self, callback = None):
-               if callback is not None and len(callback):
-                       config.plugins.wlan.encryption.psk.setValue(callback)
-                       self["config"].invalidate(self.encryptionKey)
-
        def newConfig(self):
                if self["config"].getCurrent() == self.InterfaceEntry:
                        self.createSetup()
@@ -564,34 +536,41 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
        def keyRight(self):
                ConfigListScreen.keyRight(self)
                self.newConfig()
+       
+       def keySave(self):
+               self.hideInputHelp()
+               if self["config"].isChanged():
+                       self.session.openWithCallback(self.keySaveConfirm, MessageBox, (_("Are you sure you want to activate this network configuration?\n\n") + self.oktext ) )
+               else:
+                       if self.finished_cb:
+                               self.finished_cb()
+                       else:
+                               self.close('cancel')
 
-       def selectionChanged(self):
-               current = self["config"].getCurrent()
-               if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...':
-                       helpwindowpos = self["HelpWindow"].getPosition()
-                       if current[1].help_window.instance is not None:
-                               current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1]))
-                               self["VKeyIcon"].show()
-                               self["VirtualKB"].setEnabled(True)
-               elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value:
-                       helpwindowpos = self["HelpWindow"].getPosition()
-                       if current[1].help_window.instance is not None:
-                               current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1]))
-                               self["VKeyIcon"].show()
-                               self["VirtualKB"].setEnabled(True)
+       def keySaveConfirm(self, ret = False):
+               if (ret == True):               
+                       num_configured_if = len(iNetwork.getConfiguredAdapters())
+                       if num_configured_if >= 1:
+                               if num_configured_if == 1 and self.iface in iNetwork.getConfiguredAdapters():
+                                       self.applyConfig(True)
+                               else:
+                                       self.session.openWithCallback(self.secondIfaceFoundCB, MessageBox, _("A second configured interface has been found.\n\nDo you want to disable the second network interface?"), default = True)
+                       else:
+                               self.applyConfig(True)
                else:
-                       self["VKeyIcon"].hide()
-                       self["VirtualKB"].setEnabled(False)
+                       self.keyCancel()                
 
-       def ok(self):
-               current = self["config"].getCurrent()
-               if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...':
-                       if current[1].help_window.instance is not None:
-                               current[1].help_window.instance.hide()
-               elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value:
-                       if current[1].help_window.instance is not None:
-                               current[1].help_window.instance.hide()
-               self.session.openWithCallback(self.applyConfig, MessageBox, (_("Are you sure you want to activate this network configuration?\n\n") + self.oktext ) )
+       def secondIfaceFoundCB(self,data):
+               if data is False:
+                       self.applyConfig(True)
+               else:
+                       configuredInterfaces = iNetwork.getConfiguredAdapters()
+                       for interface in configuredInterfaces:
+                               if interface == self.iface:
+                                       continue
+                               iNetwork.setAdapterAttribute(interface, "up", False)
+                               iNetwork.deactivateInterface(interface)
+                               self.applyConfig(True)
 
        def applyConfig(self, ret = False):
                if (ret == True):
@@ -612,7 +591,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                        iNetwork.restartNetwork(self.applyConfigDataAvail)
                        self.applyConfigRef = self.session.openWithCallback(self.applyConfigfinishedCB, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False)
                else:
-                       self.cancel()
+                       self.keyCancel()
 
        def applyConfigDataAvail(self, data):
                if data is True:
@@ -624,46 +603,39 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
 
        def applyConfigfinishedCB(self,data):
                if data is True:
-                       num_configured_if = len(iNetwork.getConfiguredAdapters())
-                       if num_configured_if >= 2:
-                               self.session.openWithCallback(self.secondIfaceFoundCB, MessageBox, _("Your network configuration has been activated.\nA second configured interface has been found.\n\nDo you want to disable the second network interface?"), default = True)
+                       if self.finished_cb:
+                               self.session.openWithCallback(lambda x : self.finished_cb(), MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10)
                        else:
-                               if self.finished_cb:
-                                       self.session.openWithCallback(lambda x : self.finished_cb(), MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10)
-                               else:
-                                       self.session.openWithCallback(self.ConfigfinishedCB, MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10)
-
-       def secondIfaceFoundCB(self,data):
-               if data is False:
-                       self.close('ok')
-               else:
-                       configuredInterfaces = iNetwork.getConfiguredAdapters()
-                       for interface in configuredInterfaces:
-                               if interface == self.iface:
-                                       continue
-                               iNetwork.setAdapterAttribute(interface, "up", False)
-                               iNetwork.deactivateInterface(interface)
-                               self.applyConfig(True)
+                               self.session.openWithCallback(self.ConfigfinishedCB, MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10)
 
        def ConfigfinishedCB(self,data):
                if data is not None:
                        if data is True:
                                self.close('ok')
 
-       def cancel(self):
+       def keyCancelConfirm(self, result):
+               if not result:
+                       return
                if self.oldInterfaceState is False:
-                       iNetwork.deactivateInterface(self.iface,self.cancelCB)
+                       iNetwork.deactivateInterface(self.iface,self.keyCancelCB)
                else:
                        self.close('cancel')
 
-       def cancelCB(self,data):
+       def keyCancel(self):
+               self.hideInputHelp()
+               if self["config"].isChanged():
+                       self.session.openWithCallback(self.keyCancelConfirm, MessageBox, _("Really close without saving settings?"))
+               else:
+                       self.close('cancel')
+
+       def keyCancelCB(self,data):
                if data is not None:
                        if data is True:
                                self.close('cancel')
 
        def runAsync(self, finished_cb):
                self.finished_cb = finished_cb
-               self.ok()
+               self.keySave()
 
        def NameserverSetupClosed(self, *ret):
                iNetwork.loadNameserverConfig()
@@ -675,6 +647,15 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
 
        def cleanup(self):
                iNetwork.stopLinkStateConsole()
+               
+       def hideInputHelp(self):
+               current = self["config"].getCurrent()
+               if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...':
+                       if current[1].help_window.instance is not None:
+                               current[1].help_window.instance.hide()
+               elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value:
+                       if current[1].help_window.instance is not None:
+                               current[1].help_window.instance.hide()
 
 
 class AdapterSetupConfiguration(Screen, HelpableScreen):
@@ -684,6 +665,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                self.session = session
                self.iface = iface
                self.restartLanRef = None
+               self.LinkState = None
                self.mainmenu = self.genMainMenu()
                self["menulist"] = MenuList(self.mainmenu)
                self["key_red"] = StaticText(_("Close"))
@@ -733,6 +715,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                self.onClose.append(self.cleanup)
 
        def ok(self):
+               self.cleanup()
                if self["menulist"].getCurrent()[1] == 'edit':
                        if self.iface == 'wlan0' or self.iface == 'ath0':
                                try:
@@ -813,7 +796,6 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                self.loadDescription()
 
        def loadDescription(self):
-               print self["menulist"].getCurrent()[1]
                if self["menulist"].getCurrent()[1] == 'edit':
                        self["description"].setText(_("Edit the network configuration of your Dreambox.\n" ) + self.oktext )
                if self["menulist"].getCurrent()[1] == 'test':
@@ -832,16 +814,18 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                        self["description"].setText(_(self["menulist"].getCurrent()[1][1]) + self.oktext )
                
        def updateStatusbar(self, data = None):
+               self.mainmenu = self.genMainMenu()
+               self["menulist"].l.setList(self.mainmenu)
                self["IFtext"].setText(_("Network:"))
                self["IF"].setText(iNetwork.getFriendlyAdapterName(self.iface))
                self["Statustext"].setText(_("Link:"))
                
                if self.iface == 'wlan0' or self.iface == 'ath0':
                        try:
-                               from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status
+                               from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
                        except:
-                                       self["statuspic"].setPixmapNum(1)
-                                       self["statuspic"].show()
+                               self["statuspic"].setPixmapNum(1)
+                               self["statuspic"].show()
                        else:
                                iStatus.getDataForInterface(self.iface,self.getInfoCB)
                else:
@@ -863,7 +847,6 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                        callFnc = p.__call__["ifaceSupported"](self.iface)
                        if callFnc is not None:
                                self.extended = callFnc
-                               print p.__call__
                                if p.__call__.has_key("WlanPluginEntry"): # internally used only for WLAN Plugin
                                        menu.append((_("Scan Wireless Networks"), "scanwlan"))
                                        if iNetwork.getAdapterAttribute(self.iface, "up"):
@@ -902,20 +885,14 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                                                # Display Wlan not available Message
                                                self.showErrorMessage()
                        else:
-                               self.mainmenu = self.genMainMenu()
-                               self["menulist"].l.setList(self.mainmenu)
                                self.updateStatusbar()
                else:
-                       self.mainmenu = self.genMainMenu()
-                       self["menulist"].l.setList(self.mainmenu)
                        self.updateStatusbar()
 
        def WlanStatusClosed(self, *ret):
                if ret is not None and len(ret):
                        from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status
                        iStatus.stopWlanConsole()
-                       self.mainmenu = self.genMainMenu()
-                       self["menulist"].l.setList(self.mainmenu)
                        self.updateStatusbar()
 
        def WlanScanClosed(self,*ret):
@@ -924,8 +901,6 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                else:
                        from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status
                        iStatus.stopWlanConsole()
-                       self.mainmenu = self.genMainMenu()
-                       self["menulist"].l.setList(self.mainmenu)
                        self.updateStatusbar()
                        
        def restartLan(self, ret = False):
@@ -947,15 +922,19 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                        self.session.open(MessageBox, _("Finished restarting your network"), type = MessageBox.TYPE_INFO, timeout = 10, default = False)
 
        def dataAvail(self,data):
-               self.output = data.strip()
-               result = self.output.split('\n')
-               pattern = re_compile("Link detected: yes")
-               for item in result:
-                       if re_search(pattern, item):
-                               self["statuspic"].setPixmapNum(0)
-                       else:
-                               self["statuspic"].setPixmapNum(1)
-               self["statuspic"].show()
+               self.LinkState = None
+               for line in data.splitlines():
+                       line = line.strip()
+                       if 'Link detected:' in line:
+                               if "yes" in line:
+                                       self.LinkState = True
+                               else:
+                                       self.LinkState = False
+               if self.LinkState == True:
+                       iNetwork.checkNetworkState(self.checkNetworkCB)
+               else:
+                       self["statuspic"].setPixmapNum(1)
+                       self["statuspic"].show()                        
 
        def showErrorMessage(self):
                self.session.open(MessageBox, self.errortext, type = MessageBox.TYPE_INFO,timeout = 10 )
@@ -963,22 +942,42 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
        def cleanup(self):
                iNetwork.stopLinkStateConsole()
                iNetwork.stopDeactivateInterfaceConsole()
+               iNetwork.stopPingConsole()
                try:
-                       from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status
+                       from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
                except ImportError:
                        pass
                else:
                        iStatus.stopWlanConsole()
 
        def getInfoCB(self,data,status):
+               self.LinkState = None
                if data is not None:
                        if data is True:
                                if status is not None:
                                        if status[self.iface]["acesspoint"] == "No Connection" or status[self.iface]["acesspoint"] == "Not-Associated" or status[self.iface]["acesspoint"] == False:
+                                               self.LinkState = False
                                                self["statuspic"].setPixmapNum(1)
+                                               self["statuspic"].show()
                                        else:
-                                               self["statuspic"].setPixmapNum(0)
-                                       self["statuspic"].show()
+                                               self.LinkState = True
+                                               iNetwork.checkNetworkState(self.checkNetworkCB)
+
+       def checkNetworkCB(self,data):
+               if iNetwork.getAdapterAttribute(self.iface, "up") is True:
+                       if self.LinkState is True:
+                               if data <= 2:
+                                       self["statuspic"].setPixmapNum(0)
+                               else:
+                                       self["statuspic"].setPixmapNum(1)
+                               self["statuspic"].show()        
+                       else:
+                               self["statuspic"].setPixmapNum(1)
+                               self["statuspic"].show()
+               else:
+                       self["statuspic"].setPixmapNum(1)
+                       self["statuspic"].show()
+
 
 class NetworkAdapterTest(Screen):      
        def __init__(self, session,iface):
@@ -1397,4 +1396,4 @@ class NetworkAdapterTest(Screen):
                        pass
                else:
                        iStatus.stopWlanConsole()
-                       
+
index 3a7df9fb9cb49a2120e61eee042b1d0360120f5b..61bb7d0ac8e99a9aa0e221204dde06bfa2c10c50 100755 (executable)
@@ -1,5 +1,5 @@
 from Screen import Screen
-
+from Components.Language import language
 from enigma import eConsoleAppContainer
 
 from Components.ActionMap import ActionMap
@@ -14,6 +14,10 @@ from Tools.LoadPixmap import LoadPixmap
 
 from time import time
 
+def languageChanged():
+       plugins.clearPluginList()
+       plugins.readPluginList(resolveFilename(SCOPE_PLUGINS))
+
 class PluginBrowser(Screen):
        def __init__(self, session):
                Screen.__init__(self, session)
@@ -226,3 +230,4 @@ class PluginDownloadBrowser(Screen):
                self.list = list
                self["list"].l.setList(list)
 
+language.addCallback(languageChanged)
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
index 36d4590..0b99584
@@ -4,7 +4,7 @@ from Components.ActionMap import NumberActionMap
 from Components.ServiceEventTracker import ServiceEventTracker
 from Components.Pixmap import Pixmap
 from Components.Label import Label
-from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN
 from Tools.LoadPixmap import LoadPixmap
 
 class RdsInfoDisplay(Screen):
@@ -122,10 +122,10 @@ class RassInteractive(Screen):
                        9 : self["subpages_9"] }
 
                self.subpage_png = {
-                       1 : LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/rass_page1.png")),
-                       2 : LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/rass_page2.png")),
-                       3 : LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/rass_page3.png")),
-                       4 : LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/rass_page4.png")) }
+                       1 : LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/rass_page1.png")),
+                       2 : LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/rass_page2.png")),
+                       3 : LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/rass_page3.png")),
+                       4 : LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/rass_page4.png")) }
 
                self.current_page=0;
                self.current_subpage=0;
diff --git a/lib/python/Screens/RecordPaths.py b/lib/python/Screens/RecordPaths.py
new file mode 100644 (file)
index 0000000..c833266
--- /dev/null
@@ -0,0 +1,194 @@
+from Screens.Screen import Screen
+from Screens.LocationBox import MovieLocationBox, TimeshiftLocationBox
+from Screens.MessageBox import MessageBox
+from Components.Label import Label
+from Components.config import config, ConfigSelection, getConfigListEntry, configfile
+from Components.ConfigList import ConfigListScreen
+from Components.ActionMap import ActionMap
+from Tools.Directories import fileExists
+
+
+class RecordPathsSettings(Screen,ConfigListScreen):
+       skin = """
+               <screen name="RecordPathsSettings" position="160,150" size="450,200" title="Recording paths">
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="10,0" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/green.png" position="300,0" size="140,40" alphatest="on" />
+                       <widget source="key_red" render="Label" position="10,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="key_green" render="Label" position="300,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+                       <widget name="config" position="10,44" size="430,146" />
+               </screen>"""
+
+       def __init__(self, session):
+               from Components.Sources.StaticText import StaticText
+               Screen.__init__(self, session)
+               self["key_red"] = StaticText(_("Cancel"))
+               self["key_green"] = StaticText(_("Save"))
+
+               ConfigListScreen.__init__(self, [])
+               self.initConfigList()
+
+               self["setupActions"] = ActionMap(["SetupActions", "ColorActions"],
+               {
+                   "green": self.save,
+                   "red": self.cancel,
+                   "cancel": self.cancel,
+                   "ok": self.ok,
+               }, -2)
+
+       def checkReadWriteDir(self, configele):
+               print "checkReadWrite: ", configele.value
+               if configele.value in [x[0] for x in self.styles] or fileExists(configele.value, "w"):
+                       configele.last_value = configele.value
+                       return True
+               else:
+                       dir = configele.value
+                       configele.value = configele.last_value
+                       self.session.open(
+                               MessageBox,
+                               _("The directory %s is not writable.\nMake sure you select a writable directory instead.")%dir,
+                               type = MessageBox.TYPE_ERROR
+                               )
+                       return False
+
+       def initConfigList(self):
+               self.styles = [ ("<default>", _("<Default movie location>")), ("<current>", _("<Current movielist location>")), ("<timer>", _("<Last timer location>")) ]
+               styles_keys = [x[0] for x in self.styles]
+               tmp = config.movielist.videodirs.value
+               default = config.usage.default_path.value
+               if default not in tmp:
+                       tmp = tmp[:]
+                       tmp.append(default)
+               print "DefaultPath: ", default, tmp
+               self.default_dirname = ConfigSelection(default = default, choices = tmp)
+               tmp = config.movielist.videodirs.value
+               default = config.usage.timer_path.value
+               if default not in tmp and default not in styles_keys:
+                       tmp = tmp[:]
+                       tmp.append(default)
+               print "TimerPath: ", default, tmp
+               self.timer_dirname = ConfigSelection(default = default, choices = self.styles+tmp)
+               tmp = config.movielist.videodirs.value
+               default = config.usage.instantrec_path.value
+               if default not in tmp and default not in styles_keys:
+                       tmp = tmp[:]
+                       tmp.append(default)
+               print "InstantrecPath: ", default, tmp
+               self.instantrec_dirname = ConfigSelection(default = default, choices = self.styles+tmp)
+               default = config.usage.timeshift_path.value
+               tmp = config.usage.allowed_timeshift_paths.value
+               if default not in tmp:
+                       tmp = tmp[:]
+                       tmp.append(default)
+               print "TimeshiftPath: ", default, tmp
+               self.timeshift_dirname = ConfigSelection(default = default, choices = tmp)
+               self.default_dirname.addNotifier(self.checkReadWriteDir, initial_call=False, immediate_feedback=False)
+               self.timer_dirname.addNotifier(self.checkReadWriteDir, initial_call=False, immediate_feedback=False)
+               self.instantrec_dirname.addNotifier(self.checkReadWriteDir, initial_call=False, immediate_feedback=False)
+               self.timeshift_dirname.addNotifier(self.checkReadWriteDir, initial_call=False, immediate_feedback=False)
+
+               self.list = []
+               if config.usage.setup_level.index >= 2:
+                       self.default_entry = getConfigListEntry(_("Default movie location"), self.default_dirname)
+                       self.list.append(self.default_entry)
+                       self.timer_entry = getConfigListEntry(_("Timer record location"), self.timer_dirname)
+                       self.list.append(self.timer_entry)
+                       self.instantrec_entry = getConfigListEntry(_("Instant record location"), self.instantrec_dirname)
+                       self.list.append(self.instantrec_entry)
+               else:
+                       self.default_entry = getConfigListEntry(_("Movie location"), self.default_dirname)
+                       self.list.append(self.default_entry)
+               self.timeshift_entry = getConfigListEntry(_("Timeshift location"), self.timeshift_dirname)
+               self.list.append(self.timeshift_entry)
+               self["config"].setList(self.list)
+
+       def ok(self):
+               currentry = self["config"].getCurrent()
+               self.lastvideodirs = config.movielist.videodirs.value
+               self.lasttimeshiftdirs = config.usage.allowed_timeshift_paths.value
+               if config.usage.setup_level.index >= 2:
+                       txt = _("Default movie location")
+               else:
+                       txt = _("Movie location")
+               if currentry == self.default_entry:
+                       self.entrydirname = self.default_dirname
+                       self.session.openWithCallback(
+                               self.dirnameSelected,
+                               MovieLocationBox,
+                               txt,
+                               self.default_dirname.value
+                       )
+               elif currentry == self.timer_entry:
+                       self.entrydirname = self.timer_dirname
+                       self.session.openWithCallback(
+                               self.dirnameSelected,
+                               MovieLocationBox,
+                               _("Initial location in new timers"),
+                               self.timer_dirname.value
+                       )
+               elif currentry == self.instantrec_entry:
+                       self.entrydirname = self.instantrec_dirname
+                       self.session.openWithCallback(
+                               self.dirnameSelected,
+                               MovieLocationBox,
+                               _("Location for instant recordings"),
+                               self.instantrec_dirname.value
+                       )
+               elif currentry == self.timeshift_entry:
+                       self.entrydirname = self.timeshift_dirname
+                       config.usage.timeshift_path.value = self.timeshift_dirname.value
+                       self.session.openWithCallback(
+                               self.dirnameSelected,
+                               TimeshiftLocationBox
+                       )
+
+       def dirnameSelected(self, res):
+               if res is not None:
+                       self.entrydirname.value = res
+                       if config.movielist.videodirs.value != self.lastvideodirs:
+                               styles_keys = [x[0] for x in self.styles]
+                               tmp = config.movielist.videodirs.value
+                               default = self.default_dirname.value
+                               if default not in tmp:
+                                       tmp = tmp[:]
+                                       tmp.append(default)
+                               self.default_dirname.setChoices(tmp, default=default)
+                               tmp = config.movielist.videodirs.value
+                               default = self.timer_dirname.value
+                               if default not in tmp and default not in styles_keys:
+                                       tmp = tmp[:]
+                                       tmp.append(default)
+                               self.timer_dirname.setChoices(self.styles+tmp, default=default)
+                               tmp = config.movielist.videodirs.value
+                               default = self.instantrec_dirname.value
+                               if default not in tmp and default not in styles_keys:
+                                       tmp = tmp[:]
+                                       tmp.append(default)
+                               self.instantrec_dirname.setChoices(self.styles+tmp, default=default)
+                               self.entrydirname.value = res
+                       if config.usage.allowed_timeshift_paths.value != self.lasttimeshiftdirs:
+                               tmp = config.usage.allowed_timeshift_paths.value
+                               default = self.instantrec_dirname.value
+                               if default not in tmp:
+                                       tmp = tmp[:]
+                                       tmp.append(default)
+                               self.timeshift_dirname.setChoices(tmp, default=default)
+                               self.entrydirname.value = res
+                       if self.entrydirname.last_value != res:
+                               self.checkReadWriteDir(self.entrydirname)
+
+       def save(self):
+               currentry = self["config"].getCurrent()
+               if self.checkReadWriteDir(currentry[1]):
+                       config.usage.default_path.value = self.default_dirname.value
+                       config.usage.timer_path.value = self.timer_dirname.value
+                       config.usage.instantrec_path.value = self.instantrec_dirname.value 
+                       config.usage.timeshift_path.value = self.timeshift_dirname.value
+                       config.usage.default_path.save()
+                       config.usage.timer_path.save()
+                       config.usage.instantrec_path.save()
+                       config.usage.timeshift_path.save()
+                       self.close()
+
+       def cancel(self):
+               self.close()
+
index 8b5089a312b4e10bb2878488a60ff46d600fd038..e24e4636e0cf9285d2f252d64f9d886b16b8677e 100644 (file)
@@ -8,6 +8,7 @@ from Components.NimManager import nimmanager
 from Components.config import getConfigListEntry, config, ConfigNothing, ConfigSelection, updateConfigElement
 from Components.Sources.List import List
 from Screens.MessageBox import MessageBox
+from Screens.ChoiceBox import ChoiceBox
 
 from time import mktime, localtime
 from datetime import datetime
@@ -342,10 +343,10 @@ class NimSetup(Screen, ConfigListScreen):
                new_configured_sats = nimmanager.getConfiguredSats()
                self.unconfed_sats = old_configured_sats - new_configured_sats
                self.satpos_to_remove = None
-               self.deleteConfirmed(False)
+               self.deleteConfirmed((None, "no"))
 
        def deleteConfirmed(self, confirmed):
-               if confirmed:
+               if confirmed[1] == "yes" or confirmed[1] == "yestoall":
                        eDVBDB.getInstance().removeServices(-1, -1, -1, self.satpos_to_remove)
 
                if self.satpos_to_remove is not None:
@@ -365,11 +366,15 @@ class NimSetup(Screen, ConfigListScreen):
                                else:
                                        h = _("E")
                                sat_name = ("%d.%d" + h) % (orbpos / 10, orbpos % 10)
-                       self.session.openWithCallback(self.deleteConfirmed, MessageBox, _("Delete no more configured satellite\n%s?") %(sat_name))
+                               
+                       if confirmed[1] == "yes" or confirmed[1] == "no":
+                               self.session.openWithCallback(self.deleteConfirmed, ChoiceBox, _("Delete no more configured satellite\n%s?") %(sat_name), [(_("Yes"), "yes"), (_("No"), "no"), (_("Yes to all"), "yestoall"), (_("No to all"), "notoall")])
+                       if confirmed[1] == "yestoall" or confirmed[1] == "notoall":
+                               self.deleteConfirmed(confirmed)
                        break
                if not self.satpos_to_remove:
                        self.close()
-
+               
        def __init__(self, session, slotid):
                Screen.__init__(self, session)
                self.list = [ ]
index bea087244b81dcc001667d418cd25f7e7d708c2b..fa787a7043500f63583d329b159e90039557fb04 100644 (file)
@@ -524,6 +524,8 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
                        for n in nimmanager.nim_slots:
                                if n.config_mode == "nothing":
                                        continue
+                               if n.config_mode == "advanced" and len(nimmanager.getSatListForNim(n.slot)) < 1:
+                                       continue
                                if n.config_mode in ("loopthrough", "satposdepends"):
                                        root_id = nimmanager.sec.getRoot(n.slot_id, int(n.config.connectedTo.value))
                                        if n.type == nimmanager.nim_slots[root_id].type: # check if connected from a DVB-S to DVB-S2 Nim or vice versa
index dc511448d1fcd0cb123a01db14b20b25f50f28ba..00e78593a6abc592d6a0b8b998e9a8502bc560cd 100644 (file)
@@ -1,10 +1,13 @@
 from Screen import Screen
 from MessageBox import MessageBox
 from Components.AVSwitch import AVSwitch
+from Tools import Notifications
 
 class Scart(Screen):
        def __init__(self, session, start_visible=True):
                Screen.__init__(self, session)
+               self.msgBox = None
+               self.notificationVisible = None
 
                self.avswitch = AVSwitch()
 
@@ -22,7 +25,11 @@ class Scart(Screen):
                if not self.msgVisible:
                        self.msgVisible = True
                        self.avswitch.setInput("SCART")
-                       self.msgBox = self.session.openWithCallback(self.MsgBoxClosed, MessageBox, _("If you see this, something is wrong with\nyour scart connection. Press OK to return."), MessageBox.TYPE_ERROR)
+                       if not self.session.in_exec:
+                               self.notificationVisible = True
+                               Notifications.AddNotificationWithCallback(self.MsgBoxClosed, MessageBox, _("If you see this, something is wrong with\nyour scart connection. Press OK to return."), MessageBox.TYPE_ERROR, msgBoxID = "scart_msgbox")
+                       else:
+                               self.msgBox = self.session.openWithCallback(self.MsgBoxClosed, MessageBox, _("If you see this, something is wrong with\nyour scart connection. Press OK to return."), MessageBox.TYPE_ERROR)
 
        def MsgBoxClosed(self, *val):
                self.msgBox = None
@@ -35,3 +42,13 @@ class Scart(Screen):
                                return
                        self.avswitch.setInput("ENCODER")
                        self.msgVisible = False
+               if self.notificationVisible:
+                       self.avswitch.setInput("ENCODER")
+                       self.notificationVisible = False
+                       for notification in Notifications.current_notifications:
+                               try:
+                                       if notification[1].msgBoxID == "scart_msgbox":
+                                               notification[1].close()
+                               except:
+                                       print "other notification is open. try another one."
+                       
\ No newline at end of file
index ff061d8800fe9e9f6d666594e52ab7141277aa0b..e5e7af4e3e522fc2102c8fa250394011c069390b 100644 (file)
@@ -5,6 +5,7 @@ from Components.Input import Input
 from Components.Label import Label
 from Components.Pixmap import Pixmap
 from Components.config import config, ConfigInteger
+from Components.SystemInfo import SystemInfo
 from enigma import eEPGCache
 from SleepTimer import SleepTimer
 from time import time
@@ -77,7 +78,11 @@ class SleepTimerEdit(Screen):
                        self["red_text"].setText(_("Action:") + " " + _("Disable timer"))
                
                if config.SleepTimer.action.value == "shutdown":
-                       self["green_text"].setText(_("Sleep timer action:") + " " + _("Deep Standby"))
+                       if SystemInfo["DeepstandbySupport"]:
+                               shutdownString = _("Deep Standby")
+                       else:
+                               shutdownString = _("Shutdown")
+                       self["green_text"].setText(_("Sleep timer action:") + " " + shutdownString)
                elif config.SleepTimer.action.value == "standby":
                        self["green_text"].setText(_("Sleep timer action:") + " " + _("Standby"))
                
index 1453c05f338de2a28e142bbde4f7d80afd7738fb..eb926ca3acf9615501bd214b178cfbf1c8eefa48 100644 (file)
@@ -1,6 +1,7 @@
 from Screen import Screen
 from Components.ConfigList import ConfigListScreen
 from Components.config import config, ConfigSubsection, ConfigSelection, getConfigListEntry
+from Components.SystemInfo import SystemInfo
 from InfoBarGenerics import InfoBarNotifications
 import Screens.Standby
 from Tools import Notifications
@@ -44,7 +45,11 @@ class JobView(InfoBarNotifications, Screen, ConfigListScreen):
 
                self.afterevents = [ "nothing", "standby", "deepstandby", "close" ]
                self.settings = ConfigSubsection()
-               self.settings.afterEvent = ConfigSelection(choices = [("nothing", _("do nothing")), ("close", _("Close")), ("standby", _("go to standby")), ("deepstandby", _("go to deep standby"))], default = self.afterevents[afterEvent])
+               if SystemInfo["DeepstandbySupport"]:
+                       shutdownString = _("go to deep standby")
+               else:
+                       shutdownString = _("shut down")
+               self.settings.afterEvent = ConfigSelection(choices = [("nothing", _("do nothing")), ("close", _("Close")), ("standby", _("go to standby")), ("deepstandby", shutdownString)], default = self.afterevents[afterEvent])
                self.setupList()
                self.state_changed()
 
index caaf8c95eb7279dd54a2aa4c4ff56fafecf76c72..54354987003c47fbc59626ba30c88467b2f5029d 100644 (file)
@@ -4,6 +4,7 @@ from Components.config import config
 from Components.MenuList import MenuList
 from Components.TimerList import TimerList
 from Components.TimerSanityCheck import TimerSanityCheck
+from Components.UsageConfig import preferredTimerPath
 from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT
 from Screen import Screen
 from Screens.ChoiceBox import ChoiceBox
@@ -243,7 +244,7 @@ class TimerEditList(Screen):
                else:
                        data = parseEvent(event, description = False)
 
-               self.addTimer(RecordTimerEntry(serviceref, checkOldTimers = True, dirname = config.movielist.last_timer_videodir.value, *data))
+               self.addTimer(RecordTimerEntry(serviceref, checkOldTimers = True, dirname = preferredTimerPath(), *data))
                
        def addTimer(self, timer):
                self.session.openWithCallback(self.finishedAdd, TimerEntry, timer)
index edd19685755acbefe5f53312b3e9af17f97956a9..42a3195c04be15dbb54f0b363fe7cb30d3244db5 100644 (file)
@@ -8,11 +8,12 @@ from Components.MenuList import MenuList
 from Components.Button import Button
 from Components.Label import Label
 from Components.Pixmap import Pixmap
+from Components.UsageConfig import defaultMoviePath
+from Components.SystemInfo import SystemInfo
 from Screens.MovieSelection import getPreferredTagEditor
 from Screens.LocationBox import MovieLocationBox
 from Screens.ChoiceBox import ChoiceBox
 from RecordTimer import AFTEREVENT
-from Tools.Directories import resolveFilename, SCOPE_HDD
 from enigma import eEPGCache
 from time import localtime, mktime, time, strftime
 from datetime import datetime
@@ -93,7 +94,11 @@ class TimerEntry(Screen, ConfigListScreen):
                                day[weekday] = 1
 
                        self.timerentry_justplay = ConfigSelection(choices = [("zap", _("zap")), ("record", _("record"))], default = {0: "record", 1: "zap"}[justplay])
-                       self.timerentry_afterevent = ConfigSelection(choices = [("nothing", _("do nothing")), ("standby", _("go to standby")), ("deepstandby", _("go to deep standby")), ("auto", _("auto"))], default = afterevent)
+                       if SystemInfo["DeepstandbySupport"]:
+                               shutdownString = _("go to deep standby")
+                       else:
+                               shutdownString = _("shut down")
+                       self.timerentry_afterevent = ConfigSelection(choices = [("nothing", _("do nothing")), ("standby", _("go to standby")), ("deepstandby", shutdownString), ("auto", _("auto"))], default = afterevent)
                        self.timerentry_type = ConfigSelection(choices = [("once",_("once")), ("repeated", _("repeated"))], default = type)
                        self.timerentry_name = ConfigText(default = self.timer.name, visible_width = 50, fixed_size = False)
                        self.timerentry_description = ConfigText(default = self.timer.description, visible_width = 50, fixed_size = False)
@@ -106,7 +111,7 @@ class TimerEntry(Screen, ConfigListScreen):
                        self.timerentry_starttime = ConfigClock(default = self.timer.begin)
                        self.timerentry_endtime = ConfigClock(default = self.timer.end)
 
-                       default = self.timer.dirname or resolveFilename(SCOPE_HDD)
+                       default = self.timer.dirname or defaultMoviePath()
                        tmp = config.movielist.videodirs.value
                        if default not in tmp:
                                tmp.append(default)
@@ -273,9 +278,10 @@ class TimerEntry(Screen, ConfigListScreen):
                self.timer.service_ref = self.timerentry_service_ref
                self.timer.tags = self.timerentry_tags
 
-               self.timer.dirname = self.timerentry_dirname.value
-               config.movielist.last_timer_videodir.value = self.timer.dirname
-               config.movielist.last_timer_videodir.save()
+               if self.timer.dirname or self.timerentry_dirname.value != defaultMoviePath():
+                       self.timer.dirname = self.timerentry_dirname.value
+                       config.movielist.last_timer_videodir.value = self.timer.dirname
+                       config.movielist.last_timer_videodir.save()
 
                if self.timerentry_type.value == "once":
                        self.timer.begin, self.timer.end = self.getBeginEnd()
index 19500ed7ef79668d9a067ac919ffd929ca5ab49e..7846e4b85dc5aeb0165472e8005bdc9acb9dd85d 100755 (executable)
@@ -7,26 +7,25 @@ from Components.MenuList import MenuList
 from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
 from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_CENTER, RT_VALIGN_CENTER
 from Screen import Screen
-from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN
 from Tools.LoadPixmap import LoadPixmap
 
 class VirtualKeyBoardList(MenuList):
        def __init__(self, list, enableWrapAround=False):
                MenuList.__init__(self, list, enableWrapAround, eListboxPythonMultiContent)
-               self.l.setFont(0, gFont("Regular", 22))
+               self.l.setFont(0, gFont("Regular", 28))
                self.l.setItemHeight(45)
 
 def VirtualKeyBoardEntryComponent(keys, selectedKey,shiftMode=False):
-       key_backspace = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_backspace.png"))
-       key_bg = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_bg.png"))
-       key_clr = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_clr.png"))
-       key_esc = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_esc.png"))
-       key_ok = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_ok.png"))
-       key_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_sel.png"))
-       key_shift = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_shift.png"))
-       key_shift_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_shift_sel.png"))
-       key_space = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_space.png"))
-       
+       key_backspace = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_backspace.png"))
+       key_bg = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_bg.png"))
+       key_clr = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_clr.png"))
+       key_esc = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_esc.png"))
+       key_ok = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_ok.png"))
+       key_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_sel.png"))
+       key_shift = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_shift.png"))
+       key_shift_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_shift_sel.png"))
+       key_space = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_space.png"))
        res = [ (keys) ]
        
        x = 0
@@ -36,33 +35,45 @@ def VirtualKeyBoardEntryComponent(keys, selectedKey,shiftMode=False):
        else:
                shiftkey_png = key_shift
        for key in keys:
+               width = None
                if key == "EXIT":
-                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_esc))
+                       width = key_esc.size().width()
+                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_esc))
                elif key == "BACKSPACE":
-                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_backspace))
+                       width = key_backspace.size().width()
+                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_backspace))
                elif key == "CLEAR":
-                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_clr))
+                       width = key_clr.size().width()
+                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_clr))
                elif key == "SHIFT":
-                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=shiftkey_png))
+                       width = shiftkey_png.size().width()
+                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=shiftkey_png))
                elif key == "SPACE":
-                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_space))
+                       width = key_space.size().width()
+                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_space))
                elif key == "OK":
-                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_ok))
+                       width = key_ok.size().width()
+                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_ok))
                #elif key == "<-":
                #       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_left))
                #elif key == "->":
                #       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_right))
                
                else:
+                       width = key_bg.size().width()
                        res.extend((
-                               MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_bg),
-                               MultiContentEntryText(pos=(x, 0), size=(45, 45), font=0, text=key.encode("utf-8"), flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER)
+                               MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_bg),
+                               MultiContentEntryText(pos=(x, 0), size=(width, 45), font=0, text=key.encode("utf-8"), flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER)
                        ))
                
                if selectedKey == count:
-                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_sel))
-               
-               x += 45
+                       width = key_sel.size().width()
+                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_sel))
+
+               if width is not None:
+                       x += width
+               else:
+                       x += 45
                count += 1
        
        return res
index 74219eb1c2b8b187ded4fc0b02b22f8791783123..1bff0284d24647a19dc82c203c0af093e42580d5 100755 (executable)
@@ -1,16 +1,15 @@
 from Screen import Screen
-
 from Screens.HelpMenu import HelpableScreen
 from Screens.MessageBox import MessageBox
-from Components.config import config, KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_0, KEY_DELETE, KEY_BACKSPACE, KEY_OK, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT, KEY_NUMBERS
+from Components.config import config, ConfigText, ConfigPassword, KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_0, KEY_DELETE, KEY_BACKSPACE, KEY_OK, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT, KEY_NUMBERS
 
 from Components.Label import Label
+from Components.Sources.StaticText import StaticText
 from Components.Slider import Slider
 from Components.ActionMap import NumberActionMap
 from Components.MenuList import MenuList
 from Components.ConfigList import ConfigList
 from Components.Sources.List import List
-
 from enigma import eTimer
 
 from xml.sax import make_parser
@@ -19,8 +18,8 @@ from xml.sax.handler import ContentHandler
 class WizardSummary(Screen):
        skin = """
        <screen position="0,0" size="132,64">
-               <widget name="text" position="6,4" size="120,42" font="Regular;14" transparent="1" />
-               <widget source="parent.list" render="Label" position="6,25" size="120,21" font="Regular;16">
+               <widget source="text" render="Label" position="6,0" size="120,16" font="Regular;16" transparent="1" />
+               <widget source="parent.list" render="Label" position="6,18" size="120,46" font="Regular;12">
                        <convert type="StringListSelection" />
                </widget>
        </screen>"""
@@ -36,7 +35,7 @@ class WizardSummary(Screen):
                #self.skinName.append("Wizard")
                #print "*************+++++++++++++++++****************++++++++++******************* WizardSummary", self.skinName
                        #
-               self["text"] = Label("")
+               self["text"] = StaticText("")
                self.onShow.append(self.setCallback)
                
        def setCallback(self):
@@ -214,12 +213,13 @@ class Wizard(Screen):
                self.onShown.append(self.updateValues)
 
                self.configInstance = None
+               self.currentConfigIndex = None
                
                self.lcdCallbacks = []
                
                self.disableKeys = False
                
-               self["actions"] = NumberActionMap(["WizardActions", "NumberActions", "ColorActions", "SetupActions", "InputAsciiActions"],
+               self["actions"] = NumberActionMap(["WizardActions", "NumberActions", "ColorActions", "SetupActions", "InputAsciiActions", "KeyboardInputActions"],
                {
                        "gotAsciiCode": self.keyGotAscii,
                        "ok": self.ok,
@@ -245,6 +245,13 @@ class Wizard(Screen):
                        "9": self.keyNumberGlobal,
                        "0": self.keyNumberGlobal
                }, -1)
+
+               self["VirtualKB"] = NumberActionMap(["VirtualKeyboardActions"],
+               {
+                       "showVirtualKeyboard": self.KeyText,
+               }, -2)
+               
+               self["VirtualKB"].setEnabled(False)
                
        def red(self):
                print "red"
@@ -405,6 +412,7 @@ class Wizard(Screen):
                self.resetCounter()
                if (self.showConfig and self.wizard[self.currStep]["config"]["screen"] != None  or self.wizard[self.currStep]["config"]["type"] == "dynamic"):
                        self["config"].instance.moveSelection(self["config"].instance.moveUp)
+                       self.handleInputHelpers()
                elif (self.showList and len(self.wizard[self.currStep]["evaluatedlist"]) > 0):
                        self["list"].selectPrevious()
                        if self.wizard[self.currStep].has_key("onselect"):
@@ -418,6 +426,7 @@ class Wizard(Screen):
                self.resetCounter()
                if (self.showConfig and self.wizard[self.currStep]["config"]["screen"] != None  or self.wizard[self.currStep]["config"]["type"] == "dynamic"):
                        self["config"].instance.moveSelection(self["config"].instance.moveDown)
+                       self.handleInputHelpers()
                elif (self.showList and len(self.wizard[self.currStep]["evaluatedlist"]) > 0):
                        #self["list"].instance.moveSelection(self["list"].instance.moveDown)
                        self["list"].selectNext()
@@ -598,6 +607,9 @@ class Wizard(Screen):
                                                print "clearConfigList", self.configInstance["config"], self["config"]
                                else:
                                        self["config"].l.setList([])
+                                       self.handleInputHelpers()
+                                       
+                                       
                        else:
                                if self.has_key("config"):
                                        self["config"].hide()
@@ -614,6 +626,45 @@ class Wizard(Screen):
                                        self.finished(gotoStep = self.wizard[self.currStep]["timeoutstep"])
                self.updateText()
 
+       def handleInputHelpers(self):
+               if self["config"].getCurrent() is not None:
+                       if isinstance(self["config"].getCurrent()[1], ConfigText) or isinstance(self["config"].getCurrent()[1], ConfigPassword):
+                               if self.has_key("VKeyIcon"):
+                                       self["VirtualKB"].setEnabled(True)
+                                       self["VKeyIcon"].boolean = True
+                               if self.has_key("HelpWindow"):
+                                       if self["config"].getCurrent()[1].help_window.instance is not None:
+                                               helpwindowpos = self["HelpWindow"].getPosition()
+                                               from enigma import ePoint
+                                               self["config"].getCurrent()[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1]))
+                       else:
+                               if self.has_key("VKeyIcon"):
+                                       self["VirtualKB"].setEnabled(False)
+                                       self["VKeyIcon"].boolean = False
+               else:
+                       if self.has_key("VKeyIcon"):
+                               self["VirtualKB"].setEnabled(False)
+                               self["VKeyIcon"].boolean = False
+
+       def KeyText(self):
+               from Screens.VirtualKeyBoard import VirtualKeyBoard
+               self.currentConfigIndex = self["config"].getCurrentIndex()
+               self.session.openWithCallback(self.VirtualKeyBoardCallback, VirtualKeyBoard, title = self["config"].getCurrent()[0], text = self["config"].getCurrent()[1].getValue())
+
+       def VirtualKeyBoardCallback(self, callback = None):
+               if callback is not None and len(callback):
+                       if isinstance(self["config"].getCurrent()[1], ConfigText) or isinstance(self["config"].getCurrent()[1], ConfigPassword):
+                               if self.has_key("HelpWindow"):
+                                       if self["config"].getCurrent()[1].help_window.instance is not None:
+                                               helpwindowpos = self["HelpWindow"].getPosition()
+                                               from enigma import ePoint
+                                               self["config"].getCurrent()[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1]))
+                       self["config"].instance.moveSelectionTo(self.currentConfigIndex)
+                       self["config"].setCurrentIndex(self.currentConfigIndex)
+                       self["config"].getCurrent()[1].setValue(callback)
+                       self["config"].invalidate(self["config"].getCurrent())
+
+
 class WizardManager:
        def __init__(self):
                self.wizards = []
index 681bc049345678290c1fbd1f4efdb84bbacd21a2..8ed2c8a46017951c8702db09bd1047d3a6094c99 100755 (executable)
@@ -33,6 +33,7 @@ SCOPE_DEFAULTDIR = 13
 SCOPE_DEFAULTPARTITION = 14
 SCOPE_DEFAULTPARTITIONMOUNTDIR = 15
 SCOPE_METADIR = 16
+SCOPE_CURRENT_PLUGIN = 17
 
 PATH_CREATE = 0
 PATH_DONTCREATE = 1
@@ -85,7 +86,27 @@ def resolveFilename(scope, base = "", path_prefix = None):
                tmp = defaultPaths[SCOPE_SKIN]
                pos = config.skin.primary_skin.value.rfind('/')
                if pos != -1:
-                       path = tmp[0]+config.skin.primary_skin.value[:pos+1]
+                       #if basefile is not available use default skin path as fallback
+                       tmpfile = tmp[0]+config.skin.primary_skin.value[:pos+1] + base
+                       if fileExists(tmpfile):
+                               path = tmp[0]+config.skin.primary_skin.value[:pos+1]
+                       else:
+                               path = tmp[0]
+               else:
+                       path = tmp[0]
+
+       elif scope == SCOPE_CURRENT_PLUGIN:
+               tmp = defaultPaths[SCOPE_PLUGINS]
+               from Components.config import config
+               skintmp = defaultPaths[SCOPE_SKIN]
+               pos = config.skin.primary_skin.value.rfind('/')
+               if pos != -1:
+                       #if basefile is not available inside current skin path, use the original provided file as fallback
+                       skintmpfile = skintmp[0]+config.skin.primary_skin.value[:pos+1] + base
+                       if fileExists(skintmpfile):
+                               path = skintmp[0]+config.skin.primary_skin.value[:pos+1]
+                       else:
+                               path = tmp[0]
                else:
                        path = tmp[0]
        else:
index 1a28fbdd17907d2dda1a43403d85abef3df4db58..e6af1e668678e927e01189dbc698766adc359ef8 100644 (file)
@@ -917,7 +917,7 @@ eDVBServicePlay::eDVBServicePlay(const eServiceReference &ref, eDVBService *serv
        m_is_pvr = !m_reference.path.empty();
        
        m_timeshift_enabled = m_timeshift_active = 0, m_timeshift_changed = 0;
-       m_skipmode = 0;
+       m_skipmode = m_fastforward = m_slowmotion = 0;
        
        CONNECT(m_service_handler.serviceEvent, eDVBServicePlay::serviceEvent);
        CONNECT(m_service_handler_timeshift.serviceEvent, eDVBServicePlay::serviceEventTimeshift);
@@ -1029,6 +1029,9 @@ void eDVBServicePlay::serviceEvent(int event)
                m_event((iPlayableService*)this, evUpdatedInfo);
                break;
        }
+       case eDVBServicePMTHandler::eventPreStart:
+               loadCuesheet();
+               break;
        case eDVBServicePMTHandler::eventEOF:
                m_event((iPlayableService*)this, evEOF);
                break;
@@ -1095,7 +1098,6 @@ RESULT eDVBServicePlay::start()
                        m_event_handler.inject(event, 0);
                        m_event_handler.inject(empty, 1);
                }
-               loadCuesheet();
                m_event(this, evStart);
        }
        return 0;
@@ -1185,7 +1187,10 @@ RESULT eDVBServicePlay::setSlowMotion(int ratio)
        eDebug("eDVBServicePlay::setSlowMotion(%d)", ratio);
        setFastForward_internal(0);
        if (m_decoder)
+       {
+               m_slowmotion = ratio;
                return m_decoder->setSlowMotion(ratio);
+       }
        else
                return -1;
 }
@@ -1197,10 +1202,11 @@ RESULT eDVBServicePlay::setFastForward(int ratio)
        return setFastForward_internal(ratio);
 }
 
-RESULT eDVBServicePlay::setFastForward_internal(int ratio)
+RESULT eDVBServicePlay::setFastForward_internal(int ratio, bool final_seek)
 {
-       int skipmode, ffratio;
-       
+       int skipmode, ffratio, ret = 0;
+       pts_t pos=0;
+
        if (ratio > 8)
        {
                skipmode = ratio;
@@ -1225,19 +1231,28 @@ RESULT eDVBServicePlay::setFastForward_internal(int ratio)
                if (m_cue)
                        m_cue->setSkipmode(skipmode * 90000); /* convert to 90000 per second */
        }
-       
+
        m_skipmode = skipmode;
-       
+
+       if (final_seek)
+               eDebug("trickplay stopped .. ret %d, pos %lld", getPlayPosition(pos), pos);
+
+       m_fastforward = ffratio;
+
        if (!m_decoder)
                return -1;
-               
+
        if (ffratio == 0)
                ; /* return m_decoder->play(); is done in caller*/
        else if (ffratio != 1)
-               return m_decoder->setFastForward(ffratio);
+               ret = m_decoder->setFastForward(ffratio);
        else
-               return m_decoder->setTrickmode();
-       return 0;
+               ret = m_decoder->setTrickmode();
+
+       if (pos)
+               eDebug("final seek after trickplay ret %d", seekTo(pos));
+
+       return ret;
 }
 
 RESULT eDVBServicePlay::seek(ePtr<iSeekableService> &ptr)
@@ -1266,9 +1281,10 @@ RESULT eDVBServicePlay::getLength(pts_t &len)
 RESULT eDVBServicePlay::pause()
 {
        eDebug("eDVBServicePlay::pause");
-       setFastForward_internal(0);
+       setFastForward_internal(0, m_slowmotion || m_fastforward > 1);
        if (m_decoder)
        {
+               m_slowmotion = 0;
                m_is_paused = 1;
                return m_decoder->pause();
        } else
@@ -1278,9 +1294,10 @@ RESULT eDVBServicePlay::pause()
 RESULT eDVBServicePlay::unpause()
 {
        eDebug("eDVBServicePlay::unpause");
-       setFastForward_internal(0);
+       setFastForward_internal(0, m_slowmotion || m_fastforward > 1);
        if (m_decoder)
        {
+               m_slowmotion = 0;
                m_is_paused = 0;
                return m_decoder->play();
        } else
@@ -1370,7 +1387,7 @@ RESULT eDVBServicePlay::setTrickmode(int trick)
 
 RESULT eDVBServicePlay::isCurrentlySeekable()
 {
-       return m_is_pvr || m_timeshift_active;
+       return m_is_pvr || m_timeshift_active ? 3 : 0; // fast forward/backward possible and seeking possible
 }
 
 RESULT eDVBServicePlay::frontendInfo(ePtr<iFrontendInformation> &ptr)
@@ -1728,6 +1745,7 @@ int eDVBServicePlay::selectAudioStream(int i)
 {
        eDVBServicePMTHandler::program program;
        eDVBServicePMTHandler &h = m_timeshift_active ? m_service_handler_timeshift : m_service_handler;
+       pts_t position = -1;
 
        if (h.getProgramInfo(program))
                return -1;
@@ -1750,6 +1768,9 @@ int eDVBServicePlay::selectAudioStream(int i)
                apidtype = program.audioStreams[stream].type;
        }
 
+       if (i != -1 && apid != m_current_audio_pid && (m_is_pvr || m_timeshift_active))
+               eDebug("getPlayPosition ret %d, pos %lld in selectAudioStream", getPlayPosition(position), position);
+
        m_current_audio_pid = apid;
 
        if (m_is_primary && m_decoder->setAudioPID(apid, apidtype))
@@ -1758,6 +1779,9 @@ int eDVBServicePlay::selectAudioStream(int i)
                return -4;
        }
 
+       if (position != -1)
+               eDebug("seekTo ret %d", seekTo(position));
+
        int rdsPid = apid;
 
                /* if we are not in PVR mode, timeshift is not active and we are not in pip mode, check if we need to enable the rds reader */
@@ -2229,7 +2253,7 @@ void eDVBServicePlay::switchToLive()
        m_new_subtitle_page_connection = 0;
        m_rds_decoder_event_connection = 0;
        m_video_event_connection = 0;
-       m_is_paused = m_skipmode = 0; /* not supported in live mode */
+       m_is_paused = m_skipmode = m_fastforward = m_slowmotion = 0; /* not supported in live mode */
 
                /* free the timeshift service handler, we need the resources */
        m_service_handler_timeshift.free();
@@ -2263,18 +2287,20 @@ void eDVBServicePlay::switchToTimeshift()
        r.path = m_timeshift_file;
 
        m_cue = new eCueSheet();
+       m_cue->seekTo(0, -1000);
        m_service_handler_timeshift.tune(r, 1, m_cue, 0, m_dvb_service); /* use the decoder demux for everything */
 
        eDebug("eDVBServicePlay::switchToTimeshift, in pause mode now.");
        pause();
        updateDecoder(); /* mainly to switch off PCR, and to set pause */
-       
+
        m_event((iPlayableService*)this, evSeekableStatusChanged);
 }
 
 void eDVBServicePlay::updateDecoder()
 {
        int vpid = -1, vpidtype = -1, pcrpid = -1, tpid = -1, achannel = -1, ac3_delay=-1, pcm_delay=-1;
+       bool mustPlay = false;
 
        eDVBServicePMTHandler &h = m_timeshift_active ? m_service_handler_timeshift : m_service_handler;
 
@@ -2355,11 +2381,10 @@ void eDVBServicePlay::updateDecoder()
                                        Py_DECREF(subs);
                                }
                        }
-                       m_decoder->play(); /* pids will be set later */
                }
                if (m_cue)
                        m_cue->setDecodingDemux(m_decode_demux, m_decoder);
-               m_decoder->play(); /* pids will be set later. */
+               mustPlay = true;
        }
 
        m_timeshift_changed = 0;
@@ -2398,17 +2423,8 @@ void eDVBServicePlay::updateDecoder()
                        }
                }
 
-               std::string config_delay;
-               int config_delay_int = 0;
-               if(ePythonConfigQuery::getConfigValue("config.av.generalAC3delay", config_delay) == 0)
-                       config_delay_int = atoi(config_delay.c_str());
-               m_decoder->setAC3Delay(ac3_delay == -1 ? config_delay_int : ac3_delay + config_delay_int);
-
-               if(ePythonConfigQuery::getConfigValue("config.av.generalPCMdelay", config_delay) == 0)
-                       config_delay_int = atoi(config_delay.c_str());
-               else
-                       config_delay_int = 0;
-               m_decoder->setPCMDelay(pcm_delay == -1 ? config_delay_int : pcm_delay + config_delay_int);
+               setAC3Delay(ac3_delay == -1 ? 0 : ac3_delay);
+               setPCMDelay(pcm_delay == -1 ? 0 : pcm_delay);
 
                m_decoder->setVideoPID(vpid, vpidtype);
                selectAudioStream();
@@ -2433,7 +2449,11 @@ void eDVBServicePlay::updateDecoder()
                                m_decoder->setRadioPic(radio_pic);
                }
 
-               m_decoder->set();
+               if (mustPlay)
+                       m_decoder->play();
+               else
+                       m_decoder->set();
+
                m_decoder->setAudioChannel(achannel);
 
                /* don't worry about non-existing services, nor pvr services */
@@ -2932,16 +2952,28 @@ void eDVBServicePlay::setAC3Delay(int delay)
 {
        if (m_dvb_service)
                m_dvb_service->setCacheEntry(eDVBService::cAC3DELAY, delay ? delay : -1);
-       if (m_decoder)
-               m_decoder->setAC3Delay(delay);
+       if (m_decoder) {
+               std::string config_delay;
+               int config_delay_int = 0;
+               if(ePythonConfigQuery::getConfigValue("config.av.generalAC3delay", config_delay) == 0)
+                       config_delay_int = atoi(config_delay.c_str());
+               m_decoder->setAC3Delay(delay + config_delay_int);
+       }
 }
 
 void eDVBServicePlay::setPCMDelay(int delay)
 {
        if (m_dvb_service)
                m_dvb_service->setCacheEntry(eDVBService::cPCMDELAY, delay ? delay : -1);
-       if (m_decoder)
-               m_decoder->setPCMDelay(delay);
+       if (m_decoder) {
+               std::string config_delay;
+               int config_delay_int = 0;
+               if(ePythonConfigQuery::getConfigValue("config.av.generalPCMdelay", config_delay) == 0)
+                       config_delay_int = atoi(config_delay.c_str());
+               else
+                       config_delay_int = 0;
+               m_decoder->setPCMDelay(delay + config_delay_int);
+       }
 }
 
 void eDVBServicePlay::video_event(struct iTSMPEGDecoder::videoEvent event)
index b4d0f1967550e0a8c950491b0fb760400aa768e0..e3c7fd58933fa13e0510f46bbb0129a1ed2333c9 100644 (file)
@@ -220,7 +220,7 @@ private:
 
        int m_current_audio_stream;
        int selectAudioStream(int n = -1);
-       RESULT setFastForward_internal(int ratio);
+       RESULT setFastForward_internal(int ratio, bool final_seek=false);
        
                /* timeshift */
        ePtr<iDVBTSRecorder> m_record;
@@ -233,6 +233,8 @@ private:
        void updateDecoder();
        
        int m_skipmode;
+       int m_fastforward;
+       int m_slowmotion;
        
                /* cuesheet */
        
index 34d09363b4be1d1be31b7568cec27a71b88467fb..c0ae42fdc41d02029ae6e4a04b4cc5fa6ce69ca9 100644 (file)
@@ -2,20 +2,23 @@
 
        /* note: this requires gstreamer 0.10.x and a big list of plugins. */
        /* it's currently hardcoded to use a big-endian alsasink as sink. */
+#include <lib/base/ebase.h>
 #include <lib/base/eerror.h>
+#include <lib/base/init_num.h>
+#include <lib/base/init.h>
+#include <lib/base/nconfig.h>
 #include <lib/base/object.h>
-#include <lib/base/ebase.h>
-#include <string>
+#include <lib/dvb/decoder.h>
+#include <lib/components/file_eraser.h>
+#include <lib/gui/esubtitle.h>
 #include <lib/service/servicemp3.h>
 #include <lib/service/service.h>
-#include <lib/components/file_eraser.h>
-#include <lib/base/init_num.h>
-#include <lib/base/init.h>
+
+#include <string>
+
 #include <gst/gst.h>
 #include <gst/pbutils/missing-plugins.h>
 #include <sys/stat.h>
-/* for subtitles */
-#include <lib/gui/esubtitle.h>
 
 // eServiceFactoryMP3
 
@@ -43,6 +46,7 @@ eServiceFactoryMP3::eServiceFactoryMP3()
                extensions.push_back("mp4");
                extensions.push_back("mov");
                extensions.push_back("m4a");
+               extensions.push_back("m2ts");
                sc->addServiceFactory(eServiceFactoryMP3::id, this, extensions);
        }
 
@@ -187,6 +191,8 @@ int eStaticServiceMP3Info::getLength(const eServiceReference &ref)
 }
 
 // eServiceMP3
+int eServiceMP3::ac3_delay,
+    eServiceMP3::pcm_delay;
 
 eServiceMP3::eServiceMP3(eServiceReference ref)
        :m_ref(ref), m_pump(eApp, 1)
@@ -635,7 +641,31 @@ RESULT eServiceMP3::setTrickmode(int trick)
 
 RESULT eServiceMP3::isCurrentlySeekable()
 {
-       return 1;
+       int ret = 3; // seeking and fast/slow winding possible
+       GstElement *sink;
+
+       if (!m_gst_playbin)
+               return 0;
+       if (m_state != stRunning)
+               return 0;
+
+       g_object_get (G_OBJECT (m_gst_playbin), "video-sink", &sink, NULL);
+
+       // disable fast winding yet when a dvbvideosink or dvbaudiosink is used
+       // for this we must do some changes on different places.. (gstreamer.. our sinks.. enigma2)
+       if (sink) {
+               ret &= ~2; // only seeking possible
+               gst_object_unref(sink);
+       }
+       else {
+               g_object_get (G_OBJECT (m_gst_playbin), "audio-sink", &sink, NULL);
+               if (sink) {
+                       ret &= ~2; // only seeking possible
+                       gst_object_unref(sink);
+               }
+       }
+
+       return ret;
 }
 
 RESULT eServiceMP3::info(ePtr<iServiceInformation>&i)
@@ -659,7 +689,6 @@ RESULT eServiceMP3::getName(std::string &name)
        return 0;
 }
 
-
 int eServiceMP3::getInfo(int w)
 {
        const gchar *tag = 0;
@@ -955,6 +984,12 @@ RESULT eServiceMP3::subtitle(ePtr<iSubtitleOutput> &ptr)
        return 0;
 }
 
+RESULT eServiceMP3::audioDelay(ePtr<iAudioDelay> &ptr)
+{
+       ptr = this;
+       return 0;
+}
+
 int eServiceMP3::getNumberOfTracks()
 {
        return m_audioStreams.size();
@@ -1093,6 +1128,8 @@ void eServiceMP3::gstBusCall(GstBus *bus, GstMessage *msg)
                                                g_object_set (G_OBJECT (sink), "emit-signals", TRUE, NULL);
                                                gst_object_unref(sink);
                                        }
+                                       setAC3Delay(ac3_delay);
+                                       setPCMDelay(pcm_delay);
                                }       break;
                                case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
                                {
@@ -1579,6 +1616,96 @@ int eServiceMP3::setBufferSize(int size)
        return 0;
 }
 
+int eServiceMP3::getAC3Delay()
+{
+       return ac3_delay;
+}
+
+int eServiceMP3::getPCMDelay()
+{
+       return pcm_delay;
+}
+
+void eServiceMP3::setAC3Delay(int delay)
+{
+       ac3_delay = delay;
+       if (!m_gst_playbin || m_state != stRunning)
+               return;
+       else
+       {
+               GstElement *sink;
+               int config_delay_int = delay;
+               g_object_get (G_OBJECT (m_gst_playbin), "video-sink", &sink, NULL);
+
+               if (sink)
+               {
+                       std::string config_delay;
+                       if(ePythonConfigQuery::getConfigValue("config.av.generalAC3delay", config_delay) == 0)
+                               config_delay_int += atoi(config_delay.c_str());
+                       gst_object_unref(sink);
+               }
+               else
+               {
+                       eDebug("dont apply ac3 delay when no video is running!");
+                       config_delay_int = 0;
+               }
+
+               g_object_get (G_OBJECT (m_gst_playbin), "audio-sink", &sink, NULL);
+
+               if (sink)
+               {
+                       gchar *name = gst_element_get_name(sink);
+                       if (strstr(name, "dvbaudiosink"))
+                               eTSMPEGDecoder::setHwAC3Delay(config_delay_int);
+                       g_free(name);
+                       gst_object_unref(sink);
+               }
+       }
+}
+
+void eServiceMP3::setPCMDelay(int delay)
+{
+       pcm_delay = delay;
+       if (!m_gst_playbin || m_state != stRunning)
+               return;
+       else
+       {
+               GstElement *sink;
+               int config_delay_int = delay;
+               g_object_get (G_OBJECT (m_gst_playbin), "video-sink", &sink, NULL);
+
+               if (sink)
+               {
+                       std::string config_delay;
+                       if(ePythonConfigQuery::getConfigValue("config.av.generalPCMdelay", config_delay) == 0)
+                               config_delay_int += atoi(config_delay.c_str());
+                       gst_object_unref(sink);
+               }
+               else
+               {
+                       eDebug("dont apply pcm delay when no video is running!");
+                       config_delay_int = 0;
+               }
+
+               g_object_get (G_OBJECT (m_gst_playbin), "audio-sink", &sink, NULL);
+
+               if (sink)
+               {
+                       gchar *name = gst_element_get_name(sink);
+                       if (strstr(name, "dvbaudiosink"))
+                               eTSMPEGDecoder::setHwPCMDelay(config_delay_int);
+                       else
+                       {
+                               // this is realy untested..and not used yet
+                               gint64 offset = config_delay_int;
+                               offset *= 1000000; // milli to nano
+                               g_object_set (G_OBJECT (m_gst_playbin), "ts-offset", offset, NULL);
+                       }
+                       g_free(name);
+                       gst_object_unref(sink);
+               }
+       }
+}
 
 #else
 #warning gstreamer not available, not building media player
index 15ed0b077b0448e6ec41e5e574c6fa5ded862a13..985179f65642143902bb0a9a5ef7df6bef8fd762 100644 (file)
@@ -49,8 +49,9 @@ typedef enum { atUnknown, atMPEG, atMP3, atAC3, atDTS, atAAC, atPCM, atOGG, atFL
 typedef enum { stPlainText, stSSA, stSRT } subtype_t;
 typedef enum { ctNone, ctMPEGTS, ctMPEGPS, ctMKV, ctAVI, ctMP4, ctVCD, ctCDA } containertype_t;
 
-class eServiceMP3: public iPlayableService, public iPauseableService, 
-       public iServiceInformation, public iSeekableService, public iAudioTrackSelection, public iAudioChannelSelection, public iSubtitleOutput, public iStreamedService, public Object
+class eServiceMP3: public iPlayableService, public iPauseableService,
+       public iServiceInformation, public iSeekableService, public iAudioTrackSelection, public iAudioChannelSelection, 
+       public iSubtitleOutput, public iStreamedService, public iAudioDelay, public Object
 {
        DECLARE_REF(eServiceMP3);
 public:
@@ -70,13 +71,14 @@ public:
        RESULT audioTracks(ePtr<iAudioTrackSelection> &ptr);
        RESULT audioChannel(ePtr<iAudioChannelSelection> &ptr);
        RESULT subtitle(ePtr<iSubtitleOutput> &ptr);
+       RESULT audioDelay(ePtr<iAudioDelay> &ptr);
 
                // not implemented (yet)
        RESULT frontendInfo(ePtr<iFrontendInformation> &ptr) { ptr = 0; return -1; }
        RESULT subServices(ePtr<iSubserviceList> &ptr) { ptr = 0; return -1; }
        RESULT timeshift(ePtr<iTimeshiftService> &ptr) { ptr = 0; return -1; }
        RESULT cueSheet(ePtr<iCueSheet> &ptr) { ptr = 0; return -1; }
-       RESULT audioDelay(ePtr<iAudioDelay> &ptr) { ptr = 0; return -1; }
+
        RESULT rdsDecoder(ePtr<iRdsDecoder> &ptr) { ptr = 0; return -1; }
        RESULT keys(ePtr<iServiceKeys> &ptr) { ptr = 0; return -1; }
        RESULT stream(ePtr<iStreamableService> &ptr) { ptr = 0; return -1; }
@@ -122,6 +124,12 @@ public:
        PyObject *getBufferCharge();
        int setBufferSize(int size);
 
+               // iAudioDelay
+       int getAC3Delay();
+       int getPCMDelay();
+       void setAC3Delay(int);
+       void setPCMDelay(int);
+
        struct audioStream
        {
                GstPad* pad;
@@ -166,6 +174,8 @@ public:
                }
        };
 private:
+       static int pcm_delay;
+       static int ac3_delay;
        int m_currentAudioStream;
        int m_currentSubtitleStream;
        int selectAudioStream(int i);
index 44e6a6e0ec6d96364435eb2844532955768351b6..6b9adfb9d1caa98eefcd6881fb25ad88581dd8c8 100644 (file)
@@ -315,7 +315,7 @@ RESULT eServiceXine::setTrickmode(int trick)
 
 RESULT eServiceXine::isCurrentlySeekable()
 {
-       return 1;
+       return 3;
 }
 
 RESULT eServiceXine::info(ePtr<iServiceInformation>&i)
index a37289ae18082567ff1ff43ba0de55da1d6f45d2..4f26387e09cbd7f8063e9259acf3b3160f19e679 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 be9d9a537326ac5a28605526b49bc753627664fb..3f420b4bb6ee2e996e5a863dc42d457fc8073ae5 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 e42c10033a6937a52810195ca26cf53a8b8973e4..c748538acaa441727457e2c5643f78f21c607510 100755 (executable)
--- a/mytest.py
+++ b/mytest.py
@@ -41,14 +41,14 @@ profile("LOAD:skin")
 from skin import readSkin
 
 profile("LOAD:Tools")
-from Tools.Directories import InitFallbackFiles, resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
+from Tools.Directories import InitFallbackFiles, resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_SKIN
 from Components.config import config, configfile, ConfigText, ConfigYesNo, ConfigInteger, NoSave
 InitFallbackFiles()
 
 profile("ReloadProfiles")
 eDVBDB.getInstance().reloadBouquets()
 
-config.misc.radiopic = ConfigText(default = resolveFilename(SCOPE_SKIN_IMAGE)+"radio.mvi")
+config.misc.radiopic = ConfigText(default = resolveFilename(SCOPE_CURRENT_SKIN, "radio.mvi"))
 config.misc.isNextRecordTimerAfterEventActionAuto = ConfigYesNo(default=False)
 config.misc.useTransponderTime = ConfigYesNo(default=True)
 config.misc.startCounter = ConfigInteger(default=0) # number of e2 starts...
index 46b67b2c8d664b2bdbbd9113b5cc82aa6fdf8060..2319b7fb356913b6244a7fce3af209e0bd30f329 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 100755 (executable)
new mode 100644 (file)
index 3f22e6e..2c11213
--- a/po/de.po
+++ b/po/de.po
@@ -2,7 +2,7 @@
 # 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"
@@ -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,49 +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!"
@@ -200,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"
@@ -218,10 +215,10 @@ 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!"
@@ -242,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"
@@ -263,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>"
@@ -356,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."
@@ -389,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"
@@ -411,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"
@@ -444,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"
@@ -456,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"
@@ -468,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"
@@ -500,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"
@@ -511,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"
@@ -538,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."
@@ -547,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"
@@ -563,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"
@@ -578,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"
@@ -603,7 +582,7 @@ msgid "Audio Options..."
 msgstr "Audio-Optionen..."
 
 msgid "Author: "
-msgstr ""
+msgstr "Autor:"
 
 msgid "Authoring mode"
 msgstr "Ablaufmodus"
@@ -639,7 +618,7 @@ msgid "BB"
 msgstr "BB"
 
 msgid "BER"
-msgstr ""
+msgstr "BER"
 
 msgid "BER:"
 msgstr "BER:"
@@ -648,7 +627,7 @@ msgid "Back"
 msgstr "Zurück"
 
 msgid "Background"
-msgstr ""
+msgstr "Hintergrund"
 
 msgid "Backup"
 msgstr "Sicherung"
@@ -666,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"
@@ -706,10 +684,10 @@ msgid "Block noise reduction"
 msgstr ""
 
 msgid "Blue boost"
-msgstr ""
+msgstr "Blauanteil erhöhen"
 
 msgid "Bookmarks"
-msgstr ""
+msgstr "Lesezeichen"
 
 msgid "Brightness"
 msgstr "Helligkeit"
@@ -726,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"
@@ -741,7 +717,7 @@ msgid "CF Drive"
 msgstr "CF-Laufwerk"
 
 msgid "CI assignment"
-msgstr ""
+msgstr "CI-Zuweisung"
 
 msgid "CVBS"
 msgstr "CVBS"
@@ -759,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: "
@@ -789,7 +765,7 @@ msgid "Change setup pin"
 msgstr "Einstellungen-Pincode ändern"
 
 msgid "Change step size"
-msgstr ""
+msgstr "Schrittweite ändern."
 
 msgid "Channel"
 msgstr "Kanal"
@@ -861,7 +837,7 @@ msgid "Cleanup Wizard"
 msgstr "Aufräumassistent"
 
 msgid "Cleanup Wizard settings"
-msgstr "Aufräumassistent Einstellunge"
+msgstr "Aufräumassistent Einstellungen"
 
 msgid "CleanupWizard"
 msgstr "Aufräumassistent"
@@ -876,7 +852,7 @@ msgid "Close"
 msgstr "Schließen"
 
 msgid "Close title selection"
-msgstr ""
+msgstr "Titelauswahl schließen"
 
 msgid "Code rate high"
 msgstr "Empfangsrate hoch"
@@ -912,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"
@@ -933,7 +909,7 @@ 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"
@@ -994,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"
@@ -1006,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?"
@@ -1018,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"
@@ -1062,7 +1040,7 @@ msgid "Current settings:"
 msgstr "Aktuelle Einstellungen:"
 
 msgid "Current value: "
-msgstr ""
+msgstr "Aktueller Wert:"
 
 msgid "Current version:"
 msgstr "Aktuelle Version:"
@@ -1089,10 +1067,10 @@ msgid "Czech"
 msgstr "Tschechisch"
 
 msgid "D"
-msgstr ""
+msgstr "D"
 
 msgid "DHCP"
-msgstr ""
+msgstr "DHCP"
 
 msgid "DVB-S"
 msgstr "DVB-S"
@@ -1101,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 ""
@@ -1119,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"
@@ -1149,7 +1127,7 @@ msgid "Delete"
 msgstr "Löschen"
 
 msgid "Delete crashlogs"
-msgstr ""
+msgstr "Crashlogs löschen"
 
 msgid "Delete entry"
 msgstr "Eintrag löschen"
@@ -1196,10 +1174,10 @@ msgid "DiSEqC repeats"
 msgstr "DiSEqC-Wiederholungen"
 
 msgid "DiSEqC-Tester settings"
-msgstr ""
+msgstr "DiSEqC-Tester Einstellungen"
 
 msgid "Dialing:"
-msgstr ""
+msgstr "Wählen:"
 
 msgid "Digital contour removal"
 msgstr ""
@@ -1212,7 +1190,7 @@ msgid "Directory %s nonexistent."
 msgstr "Verzeichnis %s existiert nicht."
 
 msgid "Directory browser"
-msgstr ""
+msgstr "Verzeichnis Browser"
 
 msgid "Disable"
 msgstr "Aus"
@@ -1224,7 +1202,7 @@ msgid "Disable Subtitles"
 msgstr "Untertitel abschalten"
 
 msgid "Disable crashlog reporting"
-msgstr ""
+msgstr "Crashlogübermittlung deaktivieren"
 
 msgid "Disable timer"
 msgstr "Timer deaktivieren"
@@ -1233,7 +1211,7 @@ msgid "Disabled"
 msgstr "Ausgeschaltet"
 
 msgid "Disconnect"
-msgstr ""
+msgstr "Trennen"
 
 #, python-format
 msgid ""
@@ -1261,7 +1239,7 @@ msgid "Display Setup"
 msgstr "Display-Einstellungen"
 
 msgid "Display and Userinterface"
-msgstr ""
+msgstr "Display und Userinterface"
 
 #, python-format
 msgid ""
@@ -1344,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?"
@@ -1366,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"
@@ -1381,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"
@@ -1412,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"
@@ -1461,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"
@@ -1473,7 +1448,7 @@ msgid "Enable 5V for active antenna"
 msgstr "5V für aktive Antenne"
 
 msgid "Enable Cleanup Wizard?"
-msgstr "Aufräumassisten aktivieren?"
+msgstr "Aufräumassistent aktivieren?"
 
 msgid "Enable multiple bouquets"
 msgstr "Mehrere Bouquets erlauben"
@@ -1495,7 +1470,7 @@ msgid "Encryption"
 msgstr "Verschlüsselung"
 
 msgid "Encryption Key"
-msgstr "WLAN Sicherheitsschlüssel"
+msgstr "WLAN-Sicherheitsschlüssel"
 
 msgid "Encryption Keytype"
 msgstr "Passwortverschlüsselungstyp"
@@ -1546,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ü..."
@@ -1558,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"
@@ -1575,7 +1550,7 @@ msgstr ""
 "Erneut versuchen?"
 
 msgid "Estonian"
-msgstr ""
+msgstr "Estnisch"
 
 msgid "Eventview"
 msgstr "Programmübersicht"
@@ -1590,7 +1565,7 @@ msgid "Execution finished!!"
 msgstr "Ausführung beendet!"
 
 msgid "Exif"
-msgstr ""
+msgstr "Exif"
 
 msgid "Exit"
 msgstr "Beenden"
@@ -1602,7 +1577,7 @@ 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"
@@ -1659,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"
@@ -1667,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 ""
@@ -1680,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 ""
@@ -1743,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"
@@ -1773,7 +1745,7 @@ msgid "Greek"
 msgstr "Griechisch"
 
 msgid "Green boost"
-msgstr ""
+msgstr "Grünanteil erhöhen"
 
 msgid "Guard Interval"
 msgstr ""
@@ -1806,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"
@@ -1844,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"
@@ -1873,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"
@@ -1916,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"
@@ -1925,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"
@@ -1987,7 +1945,7 @@ msgid "Invert display"
 msgstr "Display invertieren"
 
 msgid "Ipkg"
-msgstr ""
+msgstr "Ipkg"
 
 msgid "Is this videomode ok?"
 msgstr "Diesen Videomodus beibehalten?"
@@ -1998,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"
@@ -2036,7 +1995,7 @@ msgid "Language..."
 msgstr "Sprache..."
 
 msgid "Last config"
-msgstr ""
+msgstr "Letzte Konfiguration"
 
 msgid "Last speed"
 msgstr "Letzte Geschwindigkeit"
@@ -2045,7 +2004,7 @@ msgid "Latitude"
 msgstr "Breitengrad"
 
 msgid "Latvian"
-msgstr ""
+msgstr "Lettisch"
 
 msgid "Leave DVD Player?"
 msgstr "DVD Player beenden?"
@@ -2053,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 ""
 
@@ -2064,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"
@@ -2103,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"
@@ -2221,7 +2181,7 @@ msgid "Multi EPG"
 msgstr "Multi-EPG"
 
 msgid "Multimedia"
-msgstr ""
+msgstr "Multimedia"
 
 msgid "Multiple service support"
 msgstr "Kann mehrere Sender entschlüsseln"
@@ -2269,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"
@@ -2350,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."
@@ -2365,13 +2325,10 @@ msgid "No free tuner!"
 msgstr "Kein freier Tuner"
 
 msgid "No networks found"
-msgstr ""
+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 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 ""
@@ -2388,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"
@@ -2420,31 +2376,28 @@ msgstr ""
 "Wenn Sie 'NEIN' wählen, bleibt der Einstellungen-Schutz deaktiviert!"
 
 msgid "No wireless networks found! Please refresh."
-msgstr ""
+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"
@@ -2456,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"
 
@@ -2478,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"
@@ -2495,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"
@@ -2512,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"
@@ -2539,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"
@@ -2551,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 ""
 
@@ -2591,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"
@@ -2605,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 ""
 
@@ -2622,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..."
@@ -2643,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..."
@@ -2653,31 +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."
+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"
+"Please configure or verify your Nameservers by filling out the required values.\n"
 "When you are ready press OK to continue."
 msgstr ""
 "Konfigurieren Sie Ihre DNS-Server durch Ausfüllen der entsprechenden Werte.\n"
 "Drücken Sie OK zum Fortfahren"
 
 msgid ""
-"Please configure your internet connection by filling out the required "
-"values.\n"
+"Please configure your internet connection by filling out the required values.\n"
 "When you are ready press OK to continue."
 msgstr ""
 "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 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!"
@@ -2704,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."
@@ -2739,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"
@@ -2757,13 +2692,11 @@ 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"
+"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"
+"Bitte wählen Sie die Netzwerkschnittstelle welche Sie für Ihren Internetzugang nutzen möchten.\n"
 "\n"
 "Drücken Sie OK zum Fortfahren"
 
@@ -2772,7 +2705,7 @@ msgid ""
 "\n"
 "Please press OK to continue."
 msgstr ""
-"Bitte wählen Sie das Funknetzwerk zu welchem Sie sich verbinden möchten.\n"
+"Bitte wählen Sie das Funknetzwerk zu dem Sie sich verbinden möchten.\n"
 "\n"
 "Drücken Sie OK zum Fortfahren."
 
@@ -2794,24 +2727,20 @@ 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..."
@@ -2898,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."
@@ -2914,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"
@@ -2944,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"
@@ -3032,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"
@@ -3071,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."
@@ -3092,7 +3021,7 @@ msgid "Remove title"
 msgstr "Titel entfernen"
 
 msgid "Removed successfully."
-msgstr ""
+msgstr "Erfolgreich entfernt."
 
 msgid "Removing"
 msgstr "Entfernen"
@@ -3105,7 +3034,7 @@ msgid "Rename"
 msgstr "Umbenennen"
 
 msgid "Rename crashlogs"
-msgstr ""
+msgstr "Crashlogs umbenennen"
 
 msgid "Repeat"
 msgstr "Wiederholung"
@@ -3128,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"
@@ -3158,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"
@@ -3169,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"
@@ -3250,10 +3175,10 @@ msgid "Sats"
 msgstr ""
 
 msgid "Satteliteequipment"
-msgstr ""
+msgstr "Satteliten-Equipment"
 
 msgid "Saturation"
-msgstr ""
+msgstr "Sättigung"
 
 msgid "Saturday"
 msgstr "Samstag"
@@ -3265,7 +3190,7 @@ msgid "Save Playlist"
 msgstr "Wiedergabeliste speichern"
 
 msgid "Scaler sharpness"
-msgstr ""
+msgstr "Scaler Schärfe"
 
 msgid "Scaling Mode"
 msgstr "Skalierungsmodus"
@@ -3298,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"
@@ -3339,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"
@@ -3362,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"
@@ -3371,7 +3289,7 @@ msgid "Seek"
 msgstr "Springen"
 
 msgid "Select"
-msgstr ""
+msgstr "Auswählen"
 
 msgid "Select HDD"
 msgstr "Festplattenauswahl"
@@ -3380,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"
@@ -3398,7 +3316,7 @@ 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"
@@ -3407,25 +3325,25 @@ 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"
@@ -3449,7 +3367,7 @@ msgid "Sequence repeat"
 msgstr "Sequenz-Wiederholung"
 
 msgid "Serbian"
-msgstr ""
+msgstr "Serbisch"
 
 msgid "Service"
 msgstr "Kanal"
@@ -3488,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"
@@ -3503,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"
@@ -3521,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"
@@ -3557,7 +3475,7 @@ 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"
@@ -3618,10 +3536,10 @@ msgid "Slot %d"
 msgstr "Steckplatz %d"
 
 msgid "Slovakian"
-msgstr ""
+msgstr "Slowakisch"
 
 msgid "Slovenian"
-msgstr ""
+msgstr "Slowenisch"
 
 msgid "Slow"
 msgstr "Langsam"
@@ -3636,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"
@@ -3670,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"
@@ -3744,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?"
@@ -3803,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 ""
 
@@ -3832,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"
@@ -3850,7 +3769,7 @@ msgid ""
 "Thank you for using the wizard.\n"
 "Please press OK to continue."
 msgstr ""
-"Vielen Dank, dass Sie den Assisten benutzt haben.\n"
+"Vielen Dank, dass Sie den Assistenten benutzt haben.\n"
 "Drücken Sie OK zum Fortfahren."
 
 msgid ""
@@ -3860,26 +3779,14 @@ 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 herunterladen und auf dem Stick speichern?"
+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 herunterladen und auf dem Stick speichern?"
 
 msgid "The backup failed. Please choose a different backup location."
-msgstr ""
-"Die Sicherung ist fehlgeschlagen. Bitte einen anderen Sicherungs-Ort "
-"auswählen."
+msgstr "Die Sicherung ist fehlgeschlagen. Bitte einen anderen Sicherungs-Ort auswählen."
 
 #, python-format
 msgid ""
@@ -3896,44 +3803,32 @@ msgstr ""
 "Soll der USB-Flasher auf diesen Stick installiert werden?"
 
 msgid "The following files were found..."
-msgstr ""
+msgstr "Die folgenden Dateien wurden gefunden..."
 
 msgid ""
 "The input port should be configured now.\n"
-"You can now configure the screen by displaying some test pictures. Do you "
-"want to do that now?"
+"You can now configure the screen by displaying some test pictures. Do you want to do that now?"
 msgstr ""
 "Der Videoeingang sollte nun konfiguriert sein.\n"
-"Sie können nun für weitere Bildschirmeinstellungen einige Testbilder "
-"anzeigen lassen. Möchten Sie dies jetzt machen?"
+"Sie können nun für weitere Bildschirmeinstellungen einige Testbilder anzeigen lassen. Möchten Sie dies jetzt machen?"
 
 msgid "The installation of the default services lists is finished."
 msgstr "Die Installation der Standard-Kanallisten wurde abgeschlossen."
 
-msgid ""
-"The installation of the default settings is finished. You can now continue "
-"configuring your Dreambox by pressing the OK button on the remote control."
-msgstr ""
-"Die Installation der Standardeinstellungen wurde beendet. Sie können nun mit "
-"der Konfiguration Ihrer Dreambox fortfahren, indem Sie die OK-Taste auf "
-"Ihrer Fernbedienung drücken."
+msgid "The installation of the default settings is finished. You can now continue configuring your Dreambox by pressing the OK button on the remote control."
+msgstr "Die Installation der Standardeinstellungen wurde beendet. Sie können nun mit der Konfiguration Ihrer Dreambox fortfahren, indem Sie die OK-Taste auf Ihrer Fernbedienung drücken."
 
-msgid ""
-"The md5sum validation failed, the file may be corrupted! Are you sure that "
-"you want to burn this image to flash memory? You are doing this at your own "
-"risk!"
-msgstr ""
+msgid "The md5sum validation failed, the file may be corrupted! Are you sure that you want to burn this image to flash memory? You are doing this at your own risk!"
+msgstr "Die md5sum-Gültigkeitsprüfung ist fehlgeschlagen, die Datei könnte beschädigt sein! Sind Sie sicher, dass sie dieses Image in den Flashspeicher schreiben möchten? Dies geschieht auf eigene Gefahr!"
 
-msgid ""
-"The md5sum validation failed, the file may be downloaded incompletely or be "
-"corrupted!"
-msgstr ""
+msgid "The md5sum validation failed, the file may be downloaded incompletely or be corrupted!"
+msgstr "Die md5sum-Gültigkeitsprüfung ist fehlgeschlagen, die Datei könnte unvollständig heruntergeladen oder beschädigt sein!"
 
 msgid "The package doesn't contain anything."
 msgstr "Das Paket enthält keine Daten"
 
 msgid "The package:"
-msgstr ""
+msgstr "Die Erweiterung:"
 
 #, python-format
 msgid "The path %s already exists."
@@ -3959,8 +3854,7 @@ msgid "The sleep timer has been disabled."
 msgstr "Der Ausschalt-Timer wurde deaktiviert"
 
 msgid "The timer file (timers.xml) is corrupt and could not be loaded."
-msgstr ""
-"Die Timer-Datei (timers.xml) ist kaputt und konnte nicht geladen werden."
+msgstr "Die Timer-Datei (timers.xml) ist kaputt und konnte nicht geladen werden."
 
 msgid ""
 "The wireless LAN plugin is not installed!\n"
@@ -3976,73 +3870,57 @@ msgstr ""
 "das Wireless LAN plugin ist nicht installiert!\n"
 "Bitte installieren Sie es."
 
-msgid ""
-"The wizard can backup your current settings. Do you want to do a backup now?"
-msgstr ""
-"Der Assistent kann jetzt Ihre Einstellungen sichern. Wollen Sie dies nun "
-"durchführen?"
+msgid "The wizard can backup your current settings. Do you want to do a backup now?"
+msgstr "Der Assistent kann jetzt Ihre Einstellungen sichern. Wollen Sie dies nun durchführen?"
 
 msgid "The wizard is finished now."
 msgstr "Der Assistent ist nun beendet."
 
 msgid "There are at least "
-msgstr ""
+msgstr "Es gibt mindestens"
 
 msgid "There are no default services lists in your image."
 msgstr "Es befinden sich keine Standard-Kanallisten in Ihrer Firmware."
 
 msgid "There are no default settings in your image."
-msgstr "Es befinden sich keine Standard Einstellungen in Ihrer Firmware."
+msgstr "Es befinden sich keine Standard-Einstellungen in Ihrer Firmware."
 
 msgid "There are now "
-msgstr ""
+msgstr "Es sind nun "
 
 msgid "There is nothing to be done."
-msgstr ""
+msgstr "Es gibt nichts zu tun."
 
 msgid ""
 "There might not be enough Space on the selected Partition.\n"
 "Do you really want to continue?"
 msgstr ""
-"Es könnte sein das nicht genügend freier Speicherplatz auf\n"
+"Es könnte sein, dass nicht genügend freier Speicherplatz auf\n"
 "der gewählten Partition vorhanden ist.\n"
 "Wollen Sie wirklich fortfahren?"
 
 msgid "There was an error downloading the packetlist. Please try again."
-msgstr ""
+msgstr "Beim Herunterladen ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut."
 
 msgid "There was an error. The package:"
-msgstr ""
+msgstr "Es gab ein Problem. Die Erweiterung:"
 
 #, python-format
 msgid "This .NFI file does not contain a valid %s image!"
-msgstr ""
+msgstr "Diese .NFI Datei enthält kein gültiges %s Image!"
 
-msgid ""
-"This .NFI file does not have a md5sum signature and is not guaranteed to "
-"work. Do you really want to burn this image to flash memory?"
-msgstr ""
-"Diese .NFI Datei besitzt keine md5sum Signatur und es kann nicht "
-"sichergestellt werden, dass sie funktioniert.Wollen Sie die Datei trotzdem "
-"in den Flash-Speicher schreiben?"
+msgid "This .NFI file does not have a md5sum signature and is not guaranteed to work. Do you really want to burn this image to flash memory?"
+msgstr "Diese .NFI Datei besitzt keine md5sum Signatur und es kann nicht sichergestellt werden, dass sie funktioniert. Wollen Sie die Datei trotzdem in den Flash-Speicher schreiben?"
 
-msgid ""
-"This .NFI file has a valid md5 signature. Continue programming this image to "
-"flash memory?"
-msgstr ""
-"Diese .NFI Datei besitzt eine gültige md5 Signatur. Wollen Sie mit dem "
-"Beschreiben des Flash-Speichers fortfahren?"
+msgid "This .NFI file has a valid md5 signature. Continue programming this image to flash memory?"
+msgstr "Diese .NFI Datei besitzt eine gültige md5 Signatur. Wollen Sie mit dem Beschreiben des Flash-Speichers fortfahren?"
 
-msgid ""
-"This DVD RW medium is already formatted - reformatting will erase all "
-"content on the disc."
-msgstr ""
-"Dieses wiederbeschreibbare Medium ist bereits formatiert - durch eine "
-"Neuformatierung wird der gesamte Inhalt gelöscht"
+msgid "This DVD RW medium is already formatted - reformatting will erase all content on the disc."
+msgstr "Dieses wiederbeschreibbare Medium ist bereits formatiert - durch eine Neuformatierung wird der gesamte Inhalt gelöscht"
 
 #, python-format
 msgid "This Dreambox can't decode %s streams!"
-msgstr ""
+msgstr "Diese Dreambox kann %s Streams nicht dekodieren!"
 
 #, python-format
 msgid "This Dreambox can't decode %s video streams!"
@@ -4055,29 +3933,27 @@ msgid "This is unsupported at the moment."
 msgstr "Diese Funktion wird noch nicht unterstützt."
 
 msgid "This plugin is installed."
-msgstr ""
+msgstr "Diese Erweiterung ist installiert."
 
 msgid "This plugin is not installed."
-msgstr ""
+msgstr "Diese Erweiterung ist nicht installiert."
 
 msgid "This plugin will be installed."
-msgstr ""
+msgstr "Diese Erweiterung wird installiert."
 
 msgid "This plugin will be removed."
-msgstr ""
+msgstr "Diese Erweiterung wird deinstalliert."
 
 msgid ""
 "This test checks for configured Nameservers.\n"
 "If you get a \"unconfirmed\" message:\n"
 "- please check your DHCP, cabling and Adapter setup\n"
-"- if you configured your Nameservers manually please verify your entries in "
-"the \"Nameserver\" Configuration"
+"- if you configured your Nameservers manually please verify your entries in the \"Nameserver\" Configuration"
 msgstr ""
 "Dieser Test sucht nach konfigurierten Nameservern\n"
 "Wenn Sie eine \"Unbestätigt\"-Meldung erhalten:\n"
 "- Überprüfen Sie Ihr DHCP, Ihre Verkabelung und Ihre Adapter-Konfiguration.\n"
-"- Haben Sie Ihre Namensserver manuell konfiguriert, überprüfen Sie bitte "
-"Ihre Konfiguration in den \"DNS\"-Einstellungen"
+"- Haben Sie Ihre Namensserver manuell konfiguriert, überprüfen Sie bitte Ihre Konfiguration in den \"DNS\"-Einstellungen"
 
 msgid ""
 "This test checks whether a network cable is connected to your LAN-Adapter.\n"
@@ -4102,25 +3978,19 @@ msgstr ""
 "- Überprüfen Sie Ihr DHCP, Ihre Verkabelung und Ihre Adapter-Konfiguration."
 
 msgid ""
-"This test checks whether your LAN Adapter is set up for automatic IP Address "
-"configuration with DHCP.\n"
+"This test checks whether your LAN Adapter is set up for automatic IP Address configuration with DHCP.\n"
 "If you get a \"disabled\" message:\n"
 " - then your LAN Adapter is configured for manual IP Setup\n"
-"- verify thay you have entered correct IP informations in the AdapterSetup "
-"dialog.\n"
+"- verify thay you have entered correct IP informations in the AdapterSetup dialog.\n"
 "If you get an \"enabeld\" message:\n"
 "-verify that you have a configured and working DHCP Server in your network."
 msgstr ""
-"Dieser Test überprüft, ob Ihr Netzwerkadapter für automatische IP-Adressen-"
-"Konfiguration über DHCP eingerichtet ist.\n"
+"Dieser Test überprüft, ob Ihr Netzwerkadapter für automatische IP-Adressen-Konfiguration über DHCP eingerichtet ist.\n"
 "Wenn Sie eine \"Deaktiviert\"-Meldung erhalten:\n"
-"- Dann ist Ihr Netzwerkadapter für manuelle IP-Adressen-Konfiguration "
-"eingerichtet.\n"
-"- Überprüfen Sie die Richtigkeit Ihrer Einstellungen im Netzwerkadapter-"
-"Einstellungen-Menü.\n"
+"- Dann ist Ihr Netzwerkadapter für manuelle IP-Adressen-Konfiguration eingerichtet.\n"
+"- Überprüfen Sie die Richtigkeit Ihrer Einstellungen im Netzwerkadapter-Einstellungen-Menü.\n"
 "Wenn Sie eine \"Aktiviert\"-Meldung erhalten:\n"
-"- Überprüfen Sie, dass sich ein funktionierender DHCP-Server in Ihrem "
-"Netzwerk befindet."
+"- Überprüfen Sie, dass sich ein funktionierender DHCP-Server in Ihrem Netzwerk befindet."
 
 msgid "This test detects your configured LAN-Adapter."
 msgstr "Dieser Test stellt Ihren konfigurierten Netzwerkadapter fest."
@@ -4135,7 +4005,7 @@ msgid "Thu"
 msgstr "Do"
 
 msgid "Thumbnails"
-msgstr ""
+msgstr "Vorschaubilder"
 
 msgid "Thursday"
 msgstr "Donnerstag"
@@ -4203,19 +4073,14 @@ msgstr "Titleset"
 
 msgid ""
 "To update your Dreambox firmware, please follow these steps:\n"
-"1) Turn off your box with the rear power switch and plug in the bootable USB "
-"stick.\n"
-"2) Turn mains back on and hold the DOWN button on the front panel pressed "
-"for 10 seconds.\n"
+"1) Turn off your box with the rear power switch and plug in the bootable USB stick.\n"
+"2) Turn mains back on and hold the DOWN button on the front panel pressed for 10 seconds.\n"
 "3) Wait for bootup and follow instructions of the wizard."
 msgstr ""
-"Um Ihre Dreambox-Firmware zu aktualisieren, folgen Sie bitte diesen "
-"Anweisungen:\n"
-"1) Schalten Sie Ihre Dreambox mit dem Schalter auf der Rückseite aus und "
-"stecken Sie den bootfähigen USB-Stick ein.\n"
-"2) Schalten Sie den Netzschalter wieder ein und halten dabei den \"nach unten"
-"\"-Knopf auf der Vorderseite für 10 Sekunden gedrückt.\n"
-"3) Nach dem Bootvorgang folgen Sie bitten den Instruktionen des Assistenten."
+"Um Ihre Dreambox-Firmware zu aktualisieren, folgen Sie bitte diesen Anweisungen:\n"
+"1) Schalten Sie Ihre Dreambox mit dem Schalter auf der Rückseite aus und stecken Sie den bootfähigen USB-Stick ein.\n"
+"2) Schalten Sie den Netzschalter wieder ein und halten dabei den \"nach unten\"-Knopf auf der Vorderseite für 10 Sekunden gedrückt.\n"
+"3) Nach dem Bootvorgang folgen Sie bitte den Instruktionen des Assistenten."
 
 msgid "Today"
 msgstr "Heute"
@@ -4260,7 +4125,7 @@ msgid "Try to find used transponders in cable network.. please wait..."
 msgstr "Suche benutzte Transponder im Kabel Netzwerk.. bitte warten..."
 
 msgid "Trying to download a new packetlist. Please wait..."
-msgstr ""
+msgstr "Versuche eine neue Aktualisierungsliste herunterzuladen. Bitte warten Sie..."
 
 msgid "Tue"
 msgstr "Di"
@@ -4311,10 +4176,10 @@ msgid "USB Stick"
 msgstr "USB-Stick"
 
 msgid "USB stick wizard"
-msgstr "USB Stick Assistent"
+msgstr "USB-Stick Assistent"
 
 msgid "Ukrainian"
-msgstr ""
+msgstr "Ukrainisch"
 
 msgid ""
 "Unable to complete filesystem check.\n"
@@ -4368,9 +4233,7 @@ msgid "Updating finished. Here is the result:"
 msgstr "Aktualisierung beendet. Hier das Ergebnis:"
 
 msgid "Updating... Please wait... This can take some minutes..."
-msgstr ""
-"Update wird durchgeführt... Bitte warten... Der Vorgang kann einige Minuten "
-"dauern."
+msgstr "Update wird durchgeführt... Bitte warten... Der Vorgang kann einige Minuten dauern."
 
 msgid "Upgrade finished."
 msgstr "Upgrade beendet."
@@ -4417,15 +4280,11 @@ msgstr ""
 "\n"
 "Einstellungen für Tuner A"
 
-msgid ""
-"Use the up/down keys on your remote control to select an option. After that, "
-"press OK."
-msgstr ""
-"Mit den hoch/runter-Tasten können Sie eine Option auswählen. Danach bitte OK "
-"drücken."
+msgid "Use the up/down keys on your remote control to select an option. After that, press OK."
+msgstr "Mit den hoch/runter-Tasten können Sie eine Option auswählen. Danach bitte OK drücken."
 
 msgid "Use this video enhancement settings?"
-msgstr ""
+msgstr "Diese erweiterten A/V-Einstellungen benutzen?"
 
 msgid "Use time of currently running service"
 msgstr "Benutze Zeit vom aktuell laufenden Programm"
@@ -4443,7 +4302,7 @@ msgid "User defined"
 msgstr "Benutzerdefiniert"
 
 msgid "Username"
-msgstr ""
+msgstr "Benutzername"
 
 msgid "VCR scart"
 msgstr "Scart-Videorekorder"
@@ -4470,26 +4329,24 @@ msgid "Video Wizard"
 msgstr "Video-Assistent"
 
 msgid "Video enhancement preview"
-msgstr ""
+msgstr "Erweiterte A/V-Einstellungen Vorschau"
 
 msgid "Video enhancement settings"
-msgstr ""
+msgstr "Erweiterte A/V-Einstellungen"
 
 msgid "Video enhancement setup"
-msgstr ""
+msgstr "Erweiterte A/V-Einstellungen"
 
 msgid ""
 "Video input selection\n"
 "\n"
-"Please press OK if you can see this page on your TV (or select a different "
-"input port).\n"
+"Please press OK if you can see this page on your TV (or select a different input port).\n"
 "\n"
 "The next input port will be automatically probed in 10 seconds."
 msgstr ""
 "Auswahl des Videoeingangs\n"
 "\n"
-"Bitte drücken Sie OK, wenn Sie diese Seite auf Ihrem Fernseher sehen können "
-"(oder wählen Sie einen anderen Eingang aus).\n"
+"Bitte drücken Sie OK, wenn Sie diese Seite auf Ihrem Fernseher sehen können (oder wählen Sie einen anderen Eingang aus).\n"
 "\n"
 "Der nächste Videoeingang wird automatisch nach 10 Sekunden getestet."
 
@@ -4497,61 +4354,61 @@ msgid "Video mode selection."
 msgstr "Auswahl des Videomodus."
 
 msgid "Videoenhancement Setup"
-msgstr ""
+msgstr "Erweiterte A/V-Einstellungen"
 
 msgid "View Movies..."
-msgstr ""
+msgstr "Filme ansehen"
 
 msgid "View Photos..."
-msgstr ""
+msgstr "Photos ansehen"
 
 msgid "View Rass interactive..."
 msgstr "Rass Interaktiv anzeigen..."
 
 msgid "View Video CD..."
-msgstr ""
+msgstr "Video CD ansehen"
 
 msgid "View details"
-msgstr ""
+msgstr "Details ansehen"
 
 msgid "View list of available "
-msgstr ""
+msgstr "Eine Liste der Verfügbaren "
 
 msgid "View list of available CommonInterface extensions"
-msgstr ""
+msgstr "Eine Liste der verfügbaren Common Interface Erweiterungen anzeigen."
 
 msgid "View list of available Display and Userinterface extensions."
-msgstr ""
+msgstr "Eine Liste der verfügbaren Display und Userinterface Erweiterungen anzeigen."
 
 msgid "View list of available EPG extensions."
-msgstr ""
+msgstr "Eine Liste der verfügbaren EPG Erweiterungen anzeigen."
 
 msgid "View list of available Satteliteequipment extensions."
-msgstr ""
+msgstr "Eine Liste der verfügbaren Satelliten-Equipment Erweiterungen anzeigen."
 
 msgid "View list of available communication extensions."
-msgstr ""
+msgstr "Eine Liste der verfügbaren Kommunikations-Erweiterungen anzeigen."
 
 msgid "View list of available default settings"
-msgstr ""
+msgstr "Eine Liste der verfügbaren Standard-Einstellungen anzeigen."
 
 msgid "View list of available multimedia extensions."
-msgstr ""
+msgstr "Eine Liste der verfügbaren Multimedia-Erweiterungen anzeigen."
 
 msgid "View list of available networking extensions"
-msgstr ""
+msgstr "Eine Liste der verfügbaren Netzwerk-Erweiterungen anzeigen."
 
 msgid "View list of available recording extensions"
-msgstr ""
+msgstr "Eine Liste der verfügbaren Aufnahme-Erweiterungen anzeigen."
 
 msgid "View list of available skins"
-msgstr ""
+msgstr "Eine Liste der verfügbaren Skins anzeigen."
 
 msgid "View list of available software extensions"
-msgstr ""
+msgstr "Eine Liste der verfügbaren Software-Erweiterungen anzeigen."
 
 msgid "View list of available system extensions"
-msgstr ""
+msgstr "Eine Liste der verfügbaren System-Erweiterungen anzeigen."
 
 msgid "View teletext..."
 msgstr "Videotext anzeigen..."
@@ -4587,16 +4444,13 @@ msgid "Waiting"
 msgstr "Warte"
 
 msgid "Warn if free space drops below (kB):"
-msgstr ""
+msgstr "Warnen wenn der freie interne Speicher unter (kB) fällt:"
 
 msgid ""
-"We will now test if your TV can also display this resolution at 50hz. If "
-"your screen goes black, wait 20 seconds and it will switch back to 60hz.\n"
+"We will now test if your TV can also display this resolution at 50hz. If your screen goes black, wait 20 seconds and it will switch back to 60hz.\n"
 "Please press OK to begin."
 msgstr ""
-"Wir testen nun, ob Ihr Fernseher diese Auflösung bei 50Hz darstellen kann. "
-"Sollte das Bild schwarz werden, so warten Sie bitte 20 Sekunden, um "
-"automatisch auf 60Hz zurückzuschalten.\n"
+"Wir testen nun, ob Ihr Fernseher diese Auflösung bei 50Hz darstellen kann. Sollte das Bild schwarz werden, so warten Sie bitte 20 Sekunden, es wird automatisch auf 60Hz zurückgeschaltet.\n"
 "Bitte drücken Sie OK, um zu beginnen."
 
 msgid "Wed"
@@ -4611,43 +4465,37 @@ msgstr "Wochentag"
 msgid ""
 "Welcome to the Cutlist editor.\n"
 "\n"
-"Seek to the start of the stuff you want to cut away. Press OK, select 'start "
-"cut'.\n"
+"Seek to the start of the stuff you want to cut away. Press OK, select 'start cut'.\n"
 "\n"
 "Then seek to the end, press OK, select 'end cut'. That's it."
 msgstr ""
 
-msgid ""
-"Welcome to the Image upgrade wizard. The wizard will assist you in upgrading "
-"the firmware of your Dreambox by providing a backup facility for your "
-"current settings and a short explanation of how to upgrade your firmware."
-msgstr ""
-"Willkommen im Image-Upgrade-Assistenten. Der Assistent wird Ihnen bei der "
-"Aktualisierung der Firmware helfen. Sie können mit diesem Assistenten die "
-"aktuellen Einstellungen sichern und bekommen eine kleine Einweisung, wie Sie "
-"die Firmware aktualisieren können."
+msgid "Welcome to the Image upgrade wizard. The wizard will assist you in upgrading the firmware of your Dreambox by providing a backup facility for your current settings and a short explanation of how to upgrade your firmware."
+msgstr "Willkommen im Image-Upgrade-Assistenten. Der Assistent wird Ihnen bei der Aktualisierung der Firmware helfen. Sie können mit diesem Assistenten die aktuellen Einstellungen sichern und bekommen eine kleine Einweisung, wie Sie die Firmware aktualisieren können."
 
 msgid ""
 "Welcome to the cleanup wizard.\n"
 "\n"
 "We have detected that your available internal memory has dropped below 2MB.\n"
-"To ensure stable operation of your Dreambox, the internal memory should be "
-"cleaned up.\n"
+"To ensure stable operation of your Dreambox, the internal memory should be cleaned up.\n"
 "You can use this wizard to remove some extensions.\n"
 msgstr ""
+"Willkommen.\n"
+"\n"
+"Es wurde festgestellt, dass Ihr verfügbarer interner Speicher unter den von Ihnen festgelegten Wert gefallen ist.\n"
+"Um einen stabilen Betrieb Ihrer Dreambox sicherzustellen, sollte der interne Speicher bereinigt werden.\n"
+"Sie können diesen Assistenten benutzen, um Erweiterungen zu entfernen.\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"
+"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 ""
 "Willkommen.\n"
 "\n"
-"Wenn Sie Ihre Dreambox mit dem Internet verbinden möchten, wird Sie dieser "
-"Assistent durch die grundlegenden Netzwerkeinstellungen führen.\n"
+"Wenn Sie Ihre Dreambox mit dem Internet verbinden möchten, wird Sie dieser Assistent durch die grundlegenden Netzwerkeinstellungen führen.\n"
 "\n"
 "Drücken Sie OK um Ihr Netzwerk zu konfigurieren"
 
@@ -4659,8 +4507,7 @@ msgid ""
 msgstr ""
 "Willkommen.\n"
 "\n"
-"Der Startassistent wird Sie durch die Grundeinstellungen Ihrer Dreambox "
-"führen.\n"
+"Der Startassistent wird Sie durch die Grundeinstellungen Ihrer Dreambox führen.\n"
 "Drücken Sie OK auf Ihrer Fernbedienung, um zum nächsten Schritt zu gelangen."
 
 msgid "Welcome..."
@@ -4673,18 +4520,16 @@ msgid "What do you want to scan?"
 msgstr "Was wollen Sie scannen?"
 
 msgid "What to do with submitted crashlogs?"
-msgstr ""
+msgstr "Was soll mit übermittelten Crashlogs passieren?"
 
 msgid ""
 "When you do a factory reset, you will lose ALL your configuration data\n"
 "(including bouquets, services, satellite data ...)\n"
-"After completion of factory reset, your receiver will restart "
-"automatically!\n"
+"After completion of factory reset, your receiver will restart automatically!\n"
 "\n"
 "Really do a factory reset?"
 msgstr ""
-"Wenn Sie die Werkseinstellungen wiederherstellen, verlieren Sie sämtliche "
-"Konfigurationsdateien\n"
+"Wenn Sie die Werkseinstellungen wiederherstellen, verlieren Sie sämtliche Konfigurationsdateien\n"
 "(einschließlich Kanalliste, Tuner-Konfiguration...)\n"
 "Nach der Wiederherstellung wird die Dreambox automatisch neu starten\n"
 "\n"
@@ -4700,13 +4545,13 @@ msgid "Wireless"
 msgstr "Funk"
 
 msgid "Wireless LAN"
-msgstr ""
+msgstr "Funk-Netzwerk"
 
 msgid "Wireless Network"
 msgstr "Funk Netzwerk"
 
 msgid "Wireless Network State"
-msgstr ""
+msgstr "WLAN-Netzwerk Status"
 
 msgid "Write error while recording. Disk full?\n"
 msgstr "Schreibfehler bei der Aufnahme. Festplatte voll?\n"
@@ -4730,7 +4575,7 @@ msgid "Yes, and delete this movie"
 msgstr "Ja, diesen Film löschen"
 
 msgid "Yes, and don't ask again"
-msgstr ""
+msgstr "Ja, und nicht mehr nachfragen"
 
 msgid "Yes, backup my settings!"
 msgstr "Ja, meine Einstellungen sichern!"
@@ -4757,61 +4602,43 @@ msgid "Yes, view the tutorial"
 msgstr "Ja, Tutorial anzeigen"
 
 msgid "You can cancel the installation."
-msgstr ""
+msgstr "Sie können die Installation abbrechen."
 
 msgid "You can cancel the removal."
-msgstr ""
+msgstr "Sie können das Entfernen abbrechen."
 
-msgid ""
-"You can choose some default settings now. Please select the settings you "
-"want to be installed."
-msgstr ""
-"Sie können jetzt einige Standardeinstellungen auswählen. Bitte wählen Sie "
-"die Einstellungen aus, die installiert werden sollen."
+msgid "You can choose some default settings now. Please select the settings you want to be installed."
+msgstr "Sie können jetzt einige Standardeinstellungen auswählen. Bitte wählen Sie die Einstellungen aus, die installiert werden sollen."
 
 msgid "You can choose, what you want to install..."
 msgstr "Sie können wählen was Sie installieren möchten..."
 
 msgid "You can install this plugin."
-msgstr ""
+msgstr "Sie können diese Erweiterung installieren."
 
 msgid "You can remove this plugin."
-msgstr ""
+msgstr "Sie können diese Erweiterung deinstallieren."
 
 msgid "You cannot delete this!"
 msgstr "Löschen nicht möglich!"
 
 msgid "You chose not to install any default services lists."
-msgstr "Sie haben keine Standard-Kanalliste zum installieren ausgewählt."
+msgstr "Sie haben keine Standard-Kanalliste zum Installieren ausgewählt."
 
-msgid ""
-"You chose not to install any default settings. You can however install the "
-"default settings later in the settings menu."
-msgstr ""
-"Sie haben keine Standardeinstellung für die Installation ausgewählt, können "
-"dies aber später im Einstellungsmenü nachholen."
+msgid "You chose not to install any default settings. You can however install the default settings later in the settings menu."
+msgstr "Sie haben keine Standardeinstellung für die Installation ausgewählt, können dies aber später im Einstellungsmenü nachholen."
 
-msgid ""
-"You chose not to install anything. Please press OK finish the install wizard."
-msgstr ""
-"Sie wählten nichts zum Installieren aus. Bitte drücken Sie OK, um den "
-"Installations-Assistenten zu beenden."
+msgid "You chose not to install anything. Please press OK finish the install wizard."
+msgstr "Sie wählten nichts zum Installieren aus. Bitte drücken Sie OK, um den Installations-Assistenten zu beenden."
 
-msgid ""
-"You do not seem to have a harddisk in your Dreambox. So backing up to a "
-"harddisk is not an option for you."
-msgstr ""
-"Sie scheinen keine Festplatte in der Dreambox zu haben. Daher ist das "
-"Sichern auf Festplatte nicht möglich."
+msgid "You do not seem to have a harddisk in your Dreambox. So backing up to a harddisk is not an option for you."
+msgstr "Sie scheinen keine Festplatte in der Dreambox zu haben. Daher ist das Sichern auf Festplatte nicht möglich."
 
 msgid ""
-"You have chosen to backup to a compact flash card. The card must be in the "
-"slot. We do not verify if it is really used at the moment. So better backup "
-"to the harddisk!\n"
+"You have chosen to backup to a compact flash card. The card must be in the slot. We do not verify if it is really used at the moment. So better backup to the harddisk!\n"
 "Please press OK to start the backup now."
 msgstr ""
-"Sie wollen auf eine Compact Flash-Karte sichern. Die Karte muss sich bereits "
-"vor dem Einschalten Ihrer Dreambox im Schacht befinden.\n"
+"Sie wollen auf eine Compact Flash-Karte sichern. Die Karte muss sich bereits vor dem Einschalten Ihrer Dreambox im Schacht befinden.\n"
 "Die bevorzugte Methode ist die Sicherung auf Festplatte!\n"
 "Bitte OK drücken, um die Sicherung trotzdem zu starten."
 
@@ -4819,52 +4646,31 @@ msgid ""
 "You have chosen to backup to an usb drive. Better backup to the harddisk!\n"
 "Please press OK to start the backup now."
 msgstr ""
-"Sie wollen eine Sicherung auf ein USB-Laufwerk durchführen. Die empfohlene "
-"Methode\n"
-"ist die Sicherung auf Festplatte! Bitte drücken Sie OK, um die Sicherung zu "
-"starten."
+"Sie wollen eine Sicherung auf ein USB-Laufwerk durchführen. Die empfohlene Methode\n"
+"ist die Sicherung auf Festplatte! Bitte drücken Sie OK, um die Sicherung zu starten."
 
-msgid ""
-"You have chosen to backup to your harddisk. Please press OK to start the "
-"backup now."
-msgstr ""
-"Sie wollen Ihre Einstellungen auf die Festplatte sichern. Bitte drücken Sie "
-"OK, um die Sicherung zu starten."
+msgid "You have chosen to backup to your harddisk. Please press OK to start the backup now."
+msgstr "Sie wollen Ihre Einstellungen auf die Festplatte sichern. Bitte drücken Sie OK, um die Sicherung zu starten."
 
-msgid ""
-"You have chosen to backup your settings. Please press OK to start the backup "
-"now."
-msgstr ""
-"Sie haben sich entschieden Ihre Einstellungen zu sichern. Drücken Sie OK, um "
-"den Vorgang zu starten."
+msgid "You have chosen to backup your settings. Please press OK to start the backup now."
+msgstr "Sie haben sich entschieden Ihre Einstellungen zu sichern. Drücken Sie OK, um den Vorgang zu starten."
 
-msgid ""
-"You have chosen to create a new .NFI flasher bootable USB stick. This will "
-"repartition the USB stick and therefore all data on it will be erased."
-msgstr ""
+msgid "You have chosen to create a new .NFI flasher bootable USB stick. This will repartition the USB stick and therefore all data on it will be erased."
+msgstr "Sie möchten einen bootbaren USB-Stick zum Flashen von .NFI-Images erstellen. Dies wird den USB-Stick repartitionieren wodurch alle darauf enthaltenen Daten verloren gehen."
 
-msgid ""
-"You have chosen to restore your settings. Enigma2 will restart after "
-"restore. Please press OK to start the restore now."
-msgstr ""
+msgid "You have chosen to restore your settings. Enigma2 will restart after restore. Please press OK to start the restore now."
+msgstr "Sie haben sich entschlossen, Ihre Einstellungen wiederherzustellen. Enigma2 wird nach der Wiederherstellung neu starten. Bitte drücken Sie OK um mit der Wiederherstellung zu beginnen."
 
 #, python-format
 msgid "You have to wait %s!"
 msgstr "Sie müssen %s warten!"
 
 msgid ""
-"You need a PC connected to your dreambox. If you need further instructions, "
-"please visit the website http://www.dm7025.de.\n"
-"Your dreambox will now be halted. After you have performed the update "
-"instructions from the website, your new firmware will ask you to restore "
-"your settings."
-msgstr ""
-"Sie müssen einen PC mit Ihrer Dreambox verbunden haben. Wenn Sie "
-"weiterführende Informationen benötigen, besuchen Sie die Webseite http://www."
-"dm7025.de.\n"
-"Die Dreambox wird nun ausgeschaltet. Nachdem Sie das Update wie auf der "
-"Webseite beschrieben durchgeführt haben, wird Sie die neue Firmware fragen, "
-"ob Sie die Einstellungen wiederherstellen wollen."
+"You need a PC connected to your dreambox. If you need further instructions, please visit the website http://www.dm7025.de.\n"
+"Your dreambox will now be halted. After you have performed the update instructions from the website, your new firmware will ask you to restore your settings."
+msgstr ""
+"Sie müssen einen PC mit Ihrer Dreambox verbunden haben. Wenn Sie weiterführende Informationen benötigen, besuchen Sie die Webseite http://www.dm7025.de.\n"
+"Die Dreambox wird nun ausgeschaltet. Nachdem Sie das Update wie auf der Webseite beschrieben durchgeführt haben, wird Sie die neue Firmware fragen, ob Sie die Einstellungen wiederherstellen wollen."
 
 msgid ""
 "You need to set a pin code and hide it from your children.\n"
@@ -4889,37 +4695,25 @@ msgstr ""
 "Drücken Sie OK zum Fortfahren."
 
 msgid "Your Dreambox will restart after pressing OK on your remote control."
-msgstr ""
-"Ihre Dreambox wird neu starten nachdem Sie OK auf Ihrer Fernbedienung "
-"gedrückt haben."
+msgstr "Ihre Dreambox wird neu starten nachdem Sie OK auf Ihrer Fernbedienung gedrückt haben."
 
 msgid "Your TV works with 50 Hz. Good!"
 msgstr "Ihr Fernseher arbeitet mit 50 Hz. Prima!"
 
-msgid ""
-"Your backup succeeded. We will now continue to explain the further upgrade "
-"process."
-msgstr ""
-"Ihre Sicherung ist geglückt. Die Dreambox wird nun den weiteren "
-"Aktualisierungs-Prozess erklären."
+msgid "Your backup succeeded. We will now continue to explain the further upgrade process."
+msgstr "Ihre Sicherung ist geglückt. Die Dreambox wird nun den weiteren Aktualisierungs-Prozess erklären."
 
-msgid ""
-"Your collection exceeds the size of a single layer medium, you will need a "
-"blank dual layer DVD!"
-msgstr ""
+msgid "Your collection exceeds the size of a single layer medium, you will need a blank dual layer DVD!"
+msgstr "Die Zusammenstellung überschreitet die Größe eines einfachen Mediums, sie werden einen Dual-Layer-Rohling benötigen!"
 
 msgid "Your dreambox is shutting down. Please stand by..."
 msgstr "Ihre Dreambox schaltet sich nun aus. Bitte warten Sie einen Moment..."
 
-msgid ""
-"Your dreambox isn't connected to the internet properly. Please check it and "
-"try again."
-msgstr ""
-"Ihre Dreambox ist nicht korrekt mit dem Internet verbunden. Bitte beheben "
-"Sie dies und versuchen Sie es dann erneut."
+msgid "Your dreambox isn't connected to the internet properly. Please check it and try again."
+msgstr "Ihre Dreambox ist nicht korrekt mit dem Internet verbunden. Bitte beheben Sie dies und versuchen Sie es dann erneut."
 
 msgid "Your email address:"
-msgstr ""
+msgstr "Ihre Email-Adresse:"
 
 msgid ""
 "Your frontprocessor firmware must be upgraded.\n"
@@ -4936,10 +4730,10 @@ msgstr ""
 "Bitte wählen Sie eine Option zum Fortfahren."
 
 msgid "Your name (optional):"
-msgstr ""
+msgstr "Ihr Name (optional):"
 
 msgid "Your network configuration has been activated."
-msgstr "Ihre Netzwerkkonfiguration wurde aktiviert."
+msgstr "Ihre Netzwerk-Konfiguration wurde aktiviert."
 
 msgid ""
 "Your network configuration has been activated.\n"
@@ -4947,7 +4741,7 @@ msgid ""
 "\n"
 "Do you want to disable the second network interface?"
 msgstr ""
-"Ihre Netzwerkkonfiguration wurde aktiviert.\n"
+"Ihre Netzwerk-Konfiguration wurde aktiviert.\n"
 "Ein zweiter konfigurierter Netzwerkadapter wurde gefunden.\n"
 "\n"
 "Wollen Sie den zweiten Netzwerkadapter deaktivieren?"
@@ -4959,7 +4753,7 @@ msgid ""
 "Please choose what you want to do next."
 msgstr ""
 "Ihre Funk-Internetverbindung konnte nicht gestartet werden!\n"
-"Ist Ihr USB WLAN Stick korrekt angeschlossen?\n"
+"Ist Ihr USB WLAN-Stick korrekt angeschlossen?\n"
 "\n"
 "Bitte wählen Sie eine Option zum Fortfahren."
 
@@ -4986,10 +4780,10 @@ msgid "[move mode]"
 msgstr "[Verschiebemodus]"
 
 msgid "a gui to assign services/providers to common interface modules"
-msgstr ""
+msgstr "Eine GUI um Services/Provider einem Common Interface zuzuweisen."
 
 msgid "a gui to assign services/providers/caids to common interface modules"
-msgstr ""
+msgstr "Eine GUI um Services/Provider/CAIDs einem Common Interface zuzuweisen."
 
 msgid "abort alternatives edit"
 msgstr "Alternativen-Bearbeitung abbrechen"
@@ -5007,10 +4801,10 @@ msgid "activate current configuration"
 msgstr "Aktuelle Konfiguration aktivieren"
 
 msgid "add Provider"
-msgstr ""
+msgstr "Provider hinzufügen"
 
 msgid "add Service"
-msgstr ""
+msgstr "Service hinzufügen"
 
 msgid "add a nameserver entry"
 msgstr "DNS Servereintrag hinzufügen"
@@ -5071,16 +4865,16 @@ msgstr ""
 "Sicherung:\n"
 
 msgid "assigned CAIds"
-msgstr ""
+msgstr "zugewiesene CAIDs"
 
 msgid "assigned CAIds:"
-msgstr ""
+msgstr "zugewiesene CAIDs:"
 
 msgid "assigned Services/Provider"
-msgstr ""
+msgstr "zugewiesene Services/Provider"
 
 msgid "assigned Services/Provider:"
-msgstr ""
+msgstr "zugewiesene Services/Provider:"
 
 #, python-format
 msgid "audio track (%s) format"
@@ -5097,7 +4891,7 @@ msgid "auto"
 msgstr ""
 
 msgid "available"
-msgstr ""
+msgstr "verfügbar"
 
 msgid "back"
 msgstr "zurück"
@@ -5272,13 +5066,13 @@ msgid "exit movielist"
 msgstr "Verlasse Filmliste"
 
 msgid "exit nameserver configuration"
-msgstr "DNS Serverkonfiguration verlassen"
+msgstr "DNS-Serverkonfiguration verlassen"
 
 msgid "exit network adapter configuration"
-msgstr "Netzwerkadapterkonfiguration verlassen"
+msgstr "Netzwerkadapter-Konfiguration verlassen"
 
 msgid "exit network adapter setup menu"
-msgstr "Netzwerkadaptermenu verlassen"
+msgstr "Netzwerkadaptermenü verlassen"
 
 msgid "exit network interface list"
 msgstr "Netzwerkadapterübersicht verlassen"
@@ -5454,7 +5248,7 @@ msgid "movie list"
 msgstr "Filmliste"
 
 msgid "multinorm"
-msgstr ""
+msgstr "Multinorm"
 
 msgid "never"
 msgstr "niemals"
@@ -5469,16 +5263,16 @@ msgid "no"
 msgstr "nein"
 
 msgid "no CAId selected"
-msgstr ""
+msgstr "Keine CAID ausgewählt"
 
 msgid "no CI slots found"
-msgstr ""
+msgstr "Kein CI Slot gefunden"
 
 msgid "no HDD found"
 msgstr "Keine Festplatte gefunden"
 
 msgid "no Services/Providers selected"
-msgstr ""
+msgstr "Keine Service/Provider ausgewählt"
 
 msgid "no module found"
 msgstr "Kein Modul gefunden"
@@ -5520,7 +5314,7 @@ msgid "once"
 msgstr "einmalig"
 
 msgid "open nameserver configuration"
-msgstr "DNS Server Konfiguration öffnen"
+msgstr "DNS-Server Konfiguration öffnen"
 
 msgid "open servicelist"
 msgstr "Kanalliste öffnen"
@@ -5571,7 +5365,7 @@ msgid "red"
 msgstr "rot"
 
 msgid "remove a nameserver entry"
-msgstr "DNS Servereintrag entfernen"
+msgstr "DNS-Servereintrag entfernen"
 
 msgid "remove after this position"
 msgstr "Nach dieser Position entfernen"
@@ -5625,7 +5419,7 @@ msgid "save playlist"
 msgstr "Wiedergabeliste speichern"
 
 msgid "save playlist on exit"
-msgstr "Wiedergabeliste beim Beenden speicher"
+msgstr "Wiedergabeliste beim Beenden speichern"
 
 msgid "scan done!"
 msgstr "Suche beendet!"
@@ -5653,10 +5447,10 @@ msgid "select .NFI flash file"
 msgstr "Wählen Sie eine .NFI Flashdatei"
 
 msgid "select CAId"
-msgstr ""
+msgstr "CAID auswählen"
 
 msgid "select CAId's"
-msgstr ""
+msgstr "CAIDs auswählen"
 
 msgid "select image from server"
 msgstr "Wählen Sie ein Image vom Server"
@@ -5680,7 +5474,7 @@ msgid "setup pin"
 msgstr "Einstellungs-Pincode"
 
 msgid "show DVD main menu"
-msgstr "Zeige das DVD Hauptmenu"
+msgstr "Zeige das DVD Hauptmenü"
 
 msgid "show EPG..."
 msgstr "Zeige EPG..."
@@ -5871,12 +5665,8 @@ msgstr "ja"
 msgid "yes (keep feeds)"
 msgstr "ja (Feeds behalten)"
 
-msgid ""
-"your dreambox might be unusable now. Please consult the manual for further "
-"assistance before rebooting your dreambox."
-msgstr ""
-"Ihre Dreambox könnte jetzt unbenutzbar sein. Bitte konsultieren Sie das "
-"Handbuch bevor Sie Ihre Dreambox rebooten."
+msgid "your dreambox might be unusable now. Please consult the manual for further assistance before rebooting your dreambox."
+msgstr "Ihre Dreambox könnte jetzt unbenutzbar sein. Bitte konsultieren Sie das Handbuch bevor Sie Ihre Dreambox rebooten."
 
 msgid "zap"
 msgstr "Umschalten"
@@ -5906,8 +5696,7 @@ msgstr "umgeschaltet"
 #~ "\n"
 #~ msgstr ""
 #~ "Sind Sie sicher, dass Sie die WLAN Unterstützung aktivieren wollen?\n"
-#~ "Verbinden Sie Ihren WLAN USB Stick mit der Dreambox und drücken Sie die "
-#~ "OK-Taste.\n"
+#~ "Verbinden Sie Ihren WLAN USB Stick mit der Dreambox und drücken Sie die OK-Taste.\n"
 #~ "\n"
 
 #~ msgid ""
@@ -5980,12 +5769,10 @@ msgstr "umgeschaltet"
 
 #~ 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 ""
 #~ "Kein funktionierender WLAN Netzwerkadapter gefunden.\n"
-#~ "Stellen Sie sicher, dass Sie ein kompatibles Gerät angeschlossen haben "
-#~ "und das Ihr Netzwerk richtig konfiguriert ist."
+#~ "Stellen Sie sicher, dass Sie ein kompatibles Gerät angeschlossen haben und das Ihr Netzwerk richtig konfiguriert ist."
 
 #~ msgid "No, let me choose default lists"
 #~ msgstr "Nein, Standard-Kanalliste verwenden."
@@ -5995,37 +5782,29 @@ msgstr "umgeschaltet"
 
 #~ msgid ""
 #~ "Pressing OK enables the built in wireless LAN support of your Dreambox.\n"
-#~ "Wlan USB Sticks with Zydas ZD1211B and RAlink RT73 Chipset are "
-#~ "supported.\n"
+#~ "Wlan USB Sticks with Zydas ZD1211B and RAlink RT73 Chipset are supported.\n"
 #~ "Connect your Wlan USB Stick to your Dreambox before pressing OK.\n"
 #~ "\n"
 #~ msgstr ""
 #~ "OK aktiviert die eingebaute WLAN-Unterstützung Ihrer Dreambox.\n"
-#~ "WLAN-USB-Sticks mit Zydas-ZD1211B und RAlink-RT73-Chipsatz werden "
-#~ "unterstützt.\n"
+#~ "WLAN-USB-Sticks mit Zydas-ZD1211B und RAlink-RT73-Chipsatz werden unterstützt.\n"
 #~ "Schließen Sie Ihren USB-Stick an, bevor Sie OK drücken.\n"
 #~ "\n"
 
 #~ msgid "Really delete this timer?"
 #~ msgstr "Diesen Timer wirklich löschen?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really reboot "
-#~ "now?"
+#~ msgid "Recording(s) are in progress or coming up in few seconds... really reboot now?"
 #~ msgstr ""
 #~ "Zurzeit sind Aufnahmen aktiv oder starten gleich...\n"
 #~ "Wollen Sie trotzdem neu starten?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really "
-#~ "restart now?"
+#~ msgid "Recording(s) are in progress or coming up in few seconds... really restart now?"
 #~ msgstr ""
 #~ "Zurzeit sind Aufnahmen aktiv oder starten gleich...\n"
 #~ "Wollen Sie trotzdem neu starten?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really "
-#~ "shutdown now?"
+#~ msgid "Recording(s) are in progress or coming up in few seconds... really shutdown now?"
 #~ msgstr ""
 #~ "Zurzeit sind Aufnahmen aktiv oder starten gleich...\n"
 #~ "Wollen Sie trotzdem ausschalten?"
@@ -6036,9 +5815,7 @@ msgstr "umgeschaltet"
 #~ msgid ""
 #~ "Reset the network configuration of your Dreambox.\n"
 #~ "\n"
-#~ msgstr ""
-#~ "Setzen Sie die Netzwerk-Konfiguration Ihrer Dreambox auf Standardwerte "
-#~ "zurück\n"
+#~ msgstr "Setzen Sie die Netzwerk-Konfiguration Ihrer Dreambox auf Standardwerte zurück\n"
 
 #~ msgid "Restore backups..."
 #~ msgstr "Sicherungen wiederherstellen"
@@ -6058,10 +5835,7 @@ msgstr "umgeschaltet"
 #~ msgid "Step "
 #~ msgstr "Schritt "
 
-#~ msgid ""
-#~ "The installation of the default settings is finished. Your can now "
-#~ "continue configuring your Dreambox by pressing the OK button on the "
-#~ "remote control."
+#~ msgid "The installation of the default settings is finished. Your can now continue configuring your Dreambox by pressing the OK button on the remote control."
 #~ msgstr "Die Installation der Standardeinstellungen wurde beendet. "
 
 #~ msgid ""
index 806c044e5f7bf278837525441b176e8893d0a001..80bd2b1f750173a2fb587d4dd6adf43622ed875d 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -83,7 +83,7 @@ msgid ""
 "Scan for local packages and install them."
 msgstr ""
 "\n"
-"Etsi ja asenna IPKG-paketteja."
+"Etsi ja asenna paikallisia IPKG-paketteja."
 
 msgid ""
 "\n"
@@ -119,7 +119,7 @@ msgid " updates available."
 msgstr "päivitystä tarjolla."
 
 msgid " wireless networks found!"
-msgstr ""
+msgstr "WLAN-verkkoja löytyi!"
 
 msgid "#000000"
 msgstr ""
@@ -199,11 +199,8 @@ msgstr "* Käytettävissä vain kun syötetään piilotettu SSID tai verkkoavain
 msgid ".NFI Download failed:"
 msgstr ".NFI lataus epäonnistui:"
 
-msgid ""
-".NFI file passed md5sum signature check. You can safely flash this image!"
-msgstr ""
-".NFI-tiedoston md5sum-allekirjoitus on kunnossa. Voit asentaa tämän "
-"päivityksen."
+msgid ".NFI file passed md5sum signature check. You can safely flash this image!"
+msgstr ".NFI-tiedoston md5sum-allekirjoitus on kunnossa. Voit asentaa tämän päivityksen."
 
 msgid "/usr/share/enigma2 directory"
 msgstr "/usr/share/enigma2-hakemisto"
@@ -218,7 +215,7 @@ msgid "1"
 msgstr ""
 
 msgid "1 wireless network found!"
-msgstr ""
+msgstr "1 WLAN-verkko löytyi!"
 
 msgid "1.0"
 msgstr "1.0"
@@ -350,16 +347,12 @@ msgstr ""
 "Tallennus on parhaillaan käynnissä.\n"
 "Mitä haluat tehdä?"
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"configure the positioner."
+msgid "A recording is currently running. Please stop the recording before trying to configure the positioner."
 msgstr ""
 "Tallennus on parhaillaan käynnissä. Pysäytä tallennus\n"
 "ennen kuin yrität muokata kääntömoottorin asetuksia."
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"start the satfinder."
+msgid "A recording is currently running. Please stop the recording before trying to start the satfinder."
 msgstr ""
 "Tallennus on parhaillaan käynnissä. Pysäytä tallennus\n"
 "ennen kuin käynnistät satelliittietsimen."
@@ -442,7 +435,7 @@ msgid "Add Bookmark"
 msgstr "Kirjanmerkki"
 
 msgid "Add WLAN configuration?"
-msgstr ""
+msgstr "Lisää tiedot WLAN-verkosta?"
 
 msgid "Add a mark"
 msgstr "Lisää merkki"
@@ -451,7 +444,7 @@ msgid "Add a new title"
 msgstr "Lisää uusi tallenne"
 
 msgid "Add network configuration?"
-msgstr ""
+msgstr "Lisää tiedot lähiverkosta?"
 
 msgid "Add timer"
 msgstr "Lisää ajastus"
@@ -465,29 +458,21 @@ msgstr "Lisää suosikkilistalle"
 msgid "Add to favourites"
 msgstr "Lisää suosikkilistalle"
 
-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 "Jos valinta on ei, lisätään Enigma2:n asetukset, Dreamboxin malli, sarjanumero yms."
 
 msgid "Adds network configuration if enabled."
-msgstr ""
+msgstr "Jos valittu, lisätään tiedot lähiverkosta."
 
 msgid "Adds wlan configuration if enabled."
-msgstr ""
+msgstr "Jos valittu, lisätään tiedot WLAN-verkosta."
 
-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."
+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 ""
-"Säädä värikylläisyys siten, että kaikki sävyt erottuvat ja ovat "
-"mahdollisimman\n"
+"Säädä värikylläisyys siten, että kaikki sävyt erottuvat ja ovat mahdollisimman\n"
 "kylläisiä.\n"
 "\n"
-"Kun olet tyytyväinen tulokseen, sulje testikuva painamalla OK tai valitse "
-"numeronäppäimillä 1-6 joku muu testikuva."
+"Kun olet tyytyväinen tulokseen, sulje testikuva painamalla OK tai valitse numeronäppäimillä 1-6 joku muu testikuva."
 
 msgid "Advanced"
 msgstr "Laajennetut"
@@ -496,7 +481,7 @@ msgid "Advanced Options"
 msgstr "Laajennetut valinnat"
 
 msgid "Advanced Video Enhancement Setup"
-msgstr ""
+msgstr "Laajemmat kuvanparannukset asetukset"
 
 msgid "Advanced Video Setup"
 msgstr "Laajennetut video-asetukset"
@@ -507,12 +492,8 @@ msgstr "Laajennettu palautus"
 msgid "After event"
 msgstr "Ajastuksen jälkeen"
 
-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 ""
-"Kun alkuasennus on päättynyt, pitää sinun valita lapsilukolla suojattavat "
-"kanavat. Katso ohjekirjasta kuinka se tehdään."
+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 "Kun alkuasennus on päättynyt, pitää sinun valita lapsilukolla suojattavat kanavat. Katso ohjekirjasta kuinka se tehdään."
 
 msgid "Album"
 msgstr "Albumi"
@@ -542,7 +523,7 @@ msgid "An unknown error occured!"
 msgstr "Tuntematon virhe!"
 
 msgid "Anonymize crashlog?"
-msgstr ""
+msgstr "Anonyymi kaatumisloki?"
 
 msgid "Arabic"
 msgstr "Arabia"
@@ -616,7 +597,7 @@ msgid "Auto chapter split every ? minutes (0=never)"
 msgstr "Kappalejako joka ? min välein (0=ei koskaan)"
 
 msgid "Auto flesh"
-msgstr ""
+msgstr "Ihonvärin korostus"
 
 msgid "Auto scart switching"
 msgstr "Autom. SCARTin kytkentä"
@@ -670,7 +651,7 @@ msgid "Backup is done. Please press OK to see the result."
 msgstr "Varmuuskopiointi suoritettu. Paina OK nähdäksesi tulokset."
 
 msgid "Backup is running..."
-msgstr ""
+msgstr "Varmuuskopiointi käynnissä"
 
 msgid "Backup system settings"
 msgstr "Varmuuskopioi asetukset"
@@ -703,10 +684,10 @@ msgid "Bitrate:"
 msgstr "Nopeus:"
 
 msgid "Block noise reduction"
-msgstr ""
+msgstr "Pakkausneliöiden pehmennys"
 
 msgid "Blue boost"
-msgstr ""
+msgstr "Sinisen korostus"
 
 msgid "Bookmarks"
 msgstr "Kirjanmerkit"
@@ -726,9 +707,7 @@ msgstr "Polta DVD:lle..."
 msgid "Bus: "
 msgstr "Väylä: "
 
-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 "Painamalla kaukosäätimen OK-näppäintä, näet tietopalkin."
 
 msgid "C"
@@ -789,7 +768,7 @@ msgid "Change setup pin"
 msgstr "Vaihda asetusten tunnusluku"
 
 msgid "Change step size"
-msgstr ""
+msgstr "Muuta askelkokoa"
 
 msgid "Channel"
 msgstr "Kanava"
@@ -858,13 +837,13 @@ msgid "Cleanup"
 msgstr "Poista vanhat"
 
 msgid "Cleanup Wizard"
-msgstr ""
+msgstr "Puhdistusavustaja"
 
 msgid "Cleanup Wizard settings"
-msgstr ""
+msgstr "Puhdistusavustajan asetukset"
 
 msgid "CleanupWizard"
-msgstr ""
+msgstr "Puhdistusavustaja"
 
 #  Ohjatun asennuksen (Startup Wizard) kutosruudun valintateksti
 #  Tekstin pitää ilmeisesti olla melko lyhyt, koska käyttäjän
@@ -1017,16 +996,16 @@ msgid "Couldn't record due to conflicting timer %s"
 msgstr "Ajastusristiriidan takia ei voitu tallentaa %s"
 
 msgid "Crashlog settings"
-msgstr ""
+msgstr "Kaatumislokin asetukset"
 
 msgid "CrashlogAutoSubmit"
-msgstr ""
+msgstr "Kaatumislokien automaattilähetys"
 
 msgid "CrashlogAutoSubmit settings"
-msgstr ""
+msgstr "Kaatumislokien automaattilähetys"
 
 msgid "CrashlogAutoSubmit settings..."
-msgstr ""
+msgstr "Kaatumislokien automaattilähetys..."
 
 msgid ""
 "Crashlogs found!\n"
@@ -1061,7 +1040,7 @@ msgid "Current settings:"
 msgstr "Nykyiset asetukset"
 
 msgid "Current value: "
-msgstr ""
+msgstr "Nykyinen arvo: "
 
 msgid "Current version:"
 msgstr "Nykyinen versio:"
@@ -1101,13 +1080,13 @@ msgid "DVB-S2"
 msgstr "DVB-S2"
 
 msgid "DVD File Browser"
-msgstr ""
+msgstr "DVD-tiedostoselain"
 
 msgid "DVD Player"
 msgstr "DVD-soitin"
 
 msgid "DVD Titlelist"
-msgstr ""
+msgstr "DVD-otsikkoluettelo"
 
 msgid "DVD media toolbox"
 msgstr "DVD-levyn työkalut"
@@ -1119,19 +1098,19 @@ msgid "Date"
 msgstr "Päiväys"
 
 msgid "Decide if you want to enable or disable the Cleanup Wizard."
-msgstr ""
+msgstr "Valitse haluatko ottaa puhdistusavustajan käyttöön."
 
 msgid "Decide what should be done when crashlogs are found."
-msgstr ""
+msgstr "Valitse mitä tehdään kun kaatumislokeja löytyy."
 
 msgid "Decide what should happen to the crashlogs after submission."
-msgstr ""
+msgstr "Valitse mitä kaatumislokeille tehdään lähettämisen jälkeen."
 
 msgid "Deep Standby"
 msgstr "Virransäästötila"
 
 msgid "Default"
-msgstr ""
+msgstr "Oletus"
 
 msgid "Default Settings"
 msgstr "Oletusasetukset"
@@ -1149,7 +1128,7 @@ msgid "Delete"
 msgstr "Poista"
 
 msgid "Delete crashlogs"
-msgstr ""
+msgstr "Poista kaatumislokit"
 
 msgid "Delete entry"
 msgstr "Poista valinta"
@@ -1169,7 +1148,7 @@ msgid "Description"
 msgstr "Kuvaus"
 
 msgid "Deselect"
-msgstr ""
+msgstr "Ei valittu"
 
 msgid "Destination directory"
 msgstr "Kohdehakemisto"
@@ -1196,13 +1175,13 @@ msgid "DiSEqC repeats"
 msgstr "DiSEqC-toistoja"
 
 msgid "DiSEqC-Tester settings"
-msgstr ""
+msgstr "DiSEqC-testin asetukset"
 
 msgid "Dialing:"
 msgstr ""
 
 msgid "Digital contour removal"
-msgstr ""
+msgstr "Ääriviivakorostumien poisto"
 
 msgid "Direct playback of linked titles without menu"
 msgstr "Linkitettyjen tallenteiden toisto ilman valikkoa"
@@ -1212,7 +1191,7 @@ msgid "Directory %s nonexistent."
 msgstr "Hakemistoa %s ei löydy."
 
 msgid "Directory browser"
-msgstr ""
+msgstr "Hakemistoselain"
 
 msgid "Disable"
 msgstr "Keskeytä"
@@ -1224,7 +1203,7 @@ msgid "Disable Subtitles"
 msgstr "Poista tekstitys"
 
 msgid "Disable crashlog reporting"
-msgstr ""
+msgstr "Raportointi pois käytöstä"
 
 msgid "Disable timer"
 msgstr "Poista käytöstä"
@@ -1233,7 +1212,7 @@ msgid "Disabled"
 msgstr "Ei käytössä"
 
 msgid "Disconnect"
-msgstr ""
+msgstr "Katkaise yhteys"
 
 #, python-format
 msgid ""
@@ -1358,10 +1337,8 @@ msgstr ""
 "Jatketaanko kohdasta,\n"
 "johon katselu viimeksi jäi?"
 
-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 "Haluatko lähettää sähköpostiosoitteesi ja nimesi mahdollista yhteydenottoa varten?"
 
 msgid "Do you want to update your Dreambox?"
 msgstr "Haluatko päivittää Dreamboxisi?"
@@ -1431,7 +1408,7 @@ msgid "Dutch"
 msgstr "Hollanti"
 
 msgid "Dynamic contrast"
-msgstr ""
+msgstr "Dynaaminen kontrasti"
 
 msgid "E"
 msgstr "E"
@@ -1478,7 +1455,7 @@ msgid "Edit title"
 msgstr "Editoi"
 
 msgid "Edit upgrade source url."
-msgstr ""
+msgstr "Muokkaa päivitys-URL:ia."
 
 msgid "Electronic Program Guide"
 msgstr "Ohjelmaopas"
@@ -1490,7 +1467,7 @@ msgid "Enable 5V for active antenna"
 msgstr "Syötä 5 voltin käyttöjännite aktiiviantennille"
 
 msgid "Enable Cleanup Wizard?"
-msgstr ""
+msgstr "Käytä puhdistusavustajaa?"
 
 msgid "Enable multiple bouquets"
 msgstr "Salli useiden suosikkilistojen luonti ja käyttö"
@@ -1521,7 +1498,7 @@ msgid "Encryption Type"
 msgstr "Suojausjärjestelmä"
 
 msgid "Encryption:"
-msgstr ""
+msgstr "Salaus:"
 
 msgid "End time"
 msgstr "Lopetusaika"
@@ -1569,7 +1546,7 @@ msgid "Enter the service pin"
 msgstr "Syötä kanavan tunnusluku"
 
 msgid "Enter your email address so that we can contact you if needed."
-msgstr ""
+msgstr "Syötä sähköpostiosoitteesi jotta voimme tarvittaessa ottaa yhteyttä."
 
 msgid "Error"
 msgstr "Virhe"
@@ -1586,7 +1563,7 @@ msgstr ""
 "Yritä uudelleen?"
 
 msgid "Estonian"
-msgstr ""
+msgstr "Viro"
 
 msgid "Eventview"
 msgstr "Ohjelmatiedot"
@@ -1613,7 +1590,7 @@ msgid "Exit network wizard"
 msgstr "Poistu verkkoasennuksesta"
 
 msgid "Exit the cleanup wizard"
-msgstr ""
+msgstr "Lopeta puhdistusavustaja"
 
 #  Tämä on imagewizard.xml:stä löytyvä valintateksti
 msgid "Exit the wizard"
@@ -1680,10 +1657,8 @@ msgstr "Verkko käynnistyi uudelleen"
 msgid "Finnish"
 msgstr "Suomi"
 
-msgid ""
-"First we need to download the latest boot environment for the USB flasher."
-msgstr ""
-"Aluksi lataamme viimeisimmän käynnistysympäristön USB-päivitysohjelmalle."
+msgid "First we need to download the latest boot environment for the USB flasher."
+msgstr "Aluksi lataamme viimeisimmän käynnistysympäristön USB-päivitysohjelmalle."
 
 msgid "Flash"
 msgstr ""
@@ -1692,7 +1667,7 @@ msgid "Flashing failed"
 msgstr "Päivitys epäonnistui"
 
 msgid "Following tasks will be done after you press continue!"
-msgstr ""
+msgstr "Seuraavat tehtävät suoritetaan kun painat jatka!"
 
 msgid "Format"
 msgstr "Alusta"
@@ -1786,7 +1761,7 @@ msgid "Greek"
 msgstr "Kreikka"
 
 msgid "Green boost"
-msgstr ""
+msgstr "Vihreän korostus"
 
 msgid "Guard Interval"
 msgstr "Suojaväli"
@@ -1807,7 +1782,7 @@ msgid "Hidden network SSID"
 msgstr "Piilotettu verkko-SSID"
 
 msgid "Hidden networkname"
-msgstr ""
+msgstr "Piilotettu verkkonimi"
 
 msgid "Hierarchy Information"
 msgstr "Hierarkia-tietoja"
@@ -1825,10 +1800,10 @@ msgid "How many minutes do you want to record?"
 msgstr "Kuinka monta minuuttia haluat tallentaa?"
 
 msgid "How to handle found crashlogs?"
-msgstr ""
+msgstr "Mitä löydetyille lokeille tehdään?"
 
 msgid "Hue"
-msgstr ""
+msgstr "Sävy"
 
 msgid "Hungarian"
 msgstr "Unkari"
@@ -1840,7 +1815,7 @@ msgid "ISO file is too large for this filesystem!"
 msgstr "ISO-tiedosto on liian suuri tälle tiedostojärjestelmälle!"
 
 msgid "ISO path"
-msgstr "ISO-polku"
+msgstr "ISO-hakemisto"
 
 msgid "Icelandic"
 msgstr "Islanti"
@@ -1856,23 +1831,14 @@ msgstr ""
 "Paina OK palataksesi takaisin."
 
 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 ""
-"Jos televisiossasi on kirkkauden tai kontrastin automaattisäätö, kytke se "
-"pois päältä. Jos kuva-asetuksissa on säätöjä nimeltä \"dynamic\" kytke ne "
-"normaaliarvoon. Säädä huoneen valaistus sopivaksi. Säädä television "
-"kontrasti alimpaan arvoon.\n"
+"Jos televisiossasi on kirkkauden tai kontrastin automaattisäätö, kytke se pois päältä. Jos kuva-asetuksissa on säätöjä nimeltä \"dynamic\" kytke ne normaaliarvoon. Säädä huoneen valaistus sopivaksi. Säädä television kontrasti alimpaan arvoon.\n"
 "\n"
-"Säädä television valoisuus niin alas kuin mahdollista ilman, että testikuvan "
-"kaksi tumminta sävyä (1 ja 2) muuttuu yhtä tummiksi.\n"
+"Säädä television valoisuus niin alas kuin mahdollista ilman, että testikuvan kaksi tumminta sävyä (1 ja 2) muuttuu yhtä tummiksi.\n"
 "\n"
 "Älä välitä kirkkaista sävyistä, ne säädetään seuraavassa vaiheessa.\n"
 "\n"
@@ -1887,14 +1853,13 @@ msgstr "Päivitys"
 msgid "In Progress"
 msgstr "Käynnissä"
 
-msgid ""
-"In order to record a timer, the TV was switched to the recording service!\n"
+msgid "In order to record a timer, the TV was switched to the recording service!\n"
 msgstr ""
 "Pakotettu kanavanvaihto. Ajastettu tallennus\n"
 "käynnistyi juuri ja tarvitsi tätä viritintä.\n"
 
 msgid "Include your email and name (optional) in the mail?"
-msgstr ""
+msgstr "Lisää lähetykseen sähköpostiosoite ja nimi?"
 
 msgid "Increased voltage"
 msgstr "Korotettu LNB-jännite"
@@ -1940,10 +1905,10 @@ msgid "Install a new image with your web browser"
 msgstr "Päivitä uusi ohjelmisto WWW-selaimella"
 
 msgid "Install extensions."
-msgstr ""
+msgstr "Asenna laajennukset."
 
 msgid "Install local extension"
-msgstr ""
+msgstr "Asenna paikallinen laajennus"
 
 msgid "Install or remove finished."
 msgstr "Asenna tai poista valmiit."
@@ -2013,12 +1978,13 @@ msgstr "Italia"
 msgid "Job View"
 msgstr "Työnäkymä"
 
-#. 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 "Aina kokoruutu"
 
 msgid "Keyboard"
-msgstr "Näppäimistö"
+msgstr "Näppäimistö..."
 
 msgid "Keyboard Map"
 msgstr "Näppäinasettelu"
@@ -2051,7 +2017,7 @@ msgid "Language..."
 msgstr "Kielivalinta..."
 
 msgid "Last config"
-msgstr ""
+msgstr "Aikais.arvot"
 
 msgid "Last speed"
 msgstr "Aikaisempi nopeus"
@@ -2068,7 +2034,8 @@ msgstr "Poistutaanko DVD-soittimesta?"
 msgid "Left"
 msgstr "Vasen"
 
-#. 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 ""
 
@@ -2215,7 +2182,7 @@ msgid "Monday"
 msgstr "Maanantai"
 
 msgid "Mosquito noise reduction"
-msgstr ""
+msgstr "Mosquito-kohinan vaimennus"
 
 msgid "Mount failed"
 msgstr "Liittäminen epäonnistui"
@@ -2254,9 +2221,7 @@ msgid "NEXT"
 msgstr "SEURAAVA"
 
 msgid "NFI image flashing completed. Press Yellow to Reboot!"
-msgstr ""
-"NFI-päivityksen asennus on suoritettu. Käynnistä uudelleen keltaisella "
-"näppäimellä!"
+msgstr "NFI-päivityksen asennus on suoritettu. Käynnistä uudelleen keltaisella näppäimellä!"
 
 msgid "NOW"
 msgstr "NYT"
@@ -2320,7 +2285,7 @@ msgid "Network:"
 msgstr "Sovitin:"
 
 msgid "NetworkWizard"
-msgstr "Verkkovelho"
+msgstr "Verkkoavustaja"
 
 msgid "New"
 msgstr "Uusi"
@@ -2371,7 +2336,7 @@ msgid "No details for this image file"
 msgstr "Ei tietoja tästä päivityksestä"
 
 msgid "No displayable files on this medium found!"
-msgstr "Näytettäviä tiedostoja ei löytynyt!"
+msgstr "Tiedostoja ei löytynyt!"
 
 msgid "No event info found, recording indefinitely."
 msgstr ""
@@ -2384,8 +2349,7 @@ msgstr "Kaikki virittimet ovat jo käytössä!"
 msgid "No networks found"
 msgstr "Verkkoja ei löytynyt"
 
-msgid ""
-"No packages were upgraded yet. So you can check your network and try again."
+msgid "No packages were upgraded yet. So you can check your network and try again."
 msgstr ""
 "Ohjelmistoja ei ole vielä päivitetty.\n"
 "Voit tarkistaa verkkoasetukset ja yrittää uudelleen."
@@ -2442,30 +2406,24 @@ msgstr ""
 
 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 ""
 "Toimivaa verkkokorttia ei löydy.\n"
-"Tarkista, että olet kytkennyt verkkokaapelin ja lähiverkon asetukset ovat "
-"oikein."
+"Tarkista, että olet kytkennyt verkkokaapelin ja lähiverkon asetukset ovat oikein."
 
 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 ""
 "Toimivaa langatonta yhteyttä ei löydy.\n"
-"Tarkista, että olet kytkenyt yhteensopivan WLAN-laitteen ja verkko on "
-"määritelty oikein."
+"Tarkista, että olet kytkenyt yhteensopivan WLAN-laitteen ja verkko on määritelty oikein."
 
 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 ""
 "Toimivaa langatonta yhteyttä ei löydy.\n"
-"Tarkista, että olet kytkenyt yhteensopivan WLAN-laitteen tai kytke "
-"lähiverkko päälle."
+"Tarkista, että olet kytkenyt yhteensopivan WLAN-laitteen tai kytke lähiverkko päälle."
 
 msgid "No, but restart from begin"
 msgstr "Ei, aloita alusta"
@@ -2477,19 +2435,20 @@ msgid "No, just start my dreambox"
 msgstr "Ei, käynnistä vain Dreambox"
 
 msgid "No, not now"
-msgstr ""
+msgstr "Ei, ei nyt"
 
 #  Ohjatun asennuksen (Startup Wizard) kutosruudun valintateksti
 msgid "No, scan later manually"
 msgstr "Ei, kanavat haetaan myöhemmin manuaalisesti"
 
 msgid "No, send them never"
-msgstr ""
+msgstr "Ei, älä lähetä koskaan"
 
 msgid "None"
 msgstr "Ei mitään"
 
-#. 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 "Epälineaarinen"
 
@@ -2500,12 +2459,8 @@ msgid "Norwegian"
 msgstr "Norja"
 
 #, python-format
-msgid ""
-"Not enough diskspace. Please free up some diskspace and try again. (%d MB "
-"required, %d MB available)"
-msgstr ""
-"Liian vähän levytilaa. Vapauta levytilaa ja yritä uudelleen. (%d Mt "
-"tarvitaan, %d Mt vapaana)"
+msgid "Not enough diskspace. Please free up some diskspace and try again. (%d MB required, %d MB available)"
+msgstr "Liian vähän levytilaa. Vapauta levytilaa ja yritä uudelleen. (%d Mt tarvitaan, %d Mt vapaana)"
 
 msgid ""
 "Nothing to scan!\n"
@@ -2517,10 +2472,7 @@ msgstr ""
 msgid "Now Playing"
 msgstr "Toistetaan"
 
-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."
+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 ""
 "Säädä kontrastisäädöllä tausta mahdollisimman valkoiseksi.\n"
 "\n"
@@ -2535,10 +2487,10 @@ msgid "OK, guide me through the upgrade process"
 msgstr "OK, opasta minua päivityksessä"
 
 msgid "OK, remove another extensions"
-msgstr ""
+msgstr "OK, poista toinen laajennus"
 
 msgid "OK, remove some extensions"
-msgstr ""
+msgstr "OK, poista joitain laajennuksia"
 
 msgid "OSD Settings"
 msgstr "Kuvaruutunäytön asetukset"
@@ -2562,7 +2514,7 @@ msgid "Only Free scan"
 msgstr "Hae vain salaamattomat"
 
 msgid "Optionally enter your name if you want to."
-msgstr ""
+msgstr "Jos haluat, lisää nimesi."
 
 msgid "Orbital Position"
 msgstr "Sijainti"
@@ -2594,7 +2546,8 @@ msgstr "Ohjelmapakettien hallinta"
 msgid "Page"
 msgstr "Sivu"
 
-#. 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 ""
 
@@ -2628,7 +2581,8 @@ msgstr "PiP-kuvan asetukset"
 msgid "PicturePlayer"
 msgstr "Kuvien katselu"
 
-#. 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 ""
 
@@ -2678,24 +2632,20 @@ msgid "Please choose the default services lists you want to install."
 msgstr "Valitse oletuskanavalistat jotka haluat asentaa ja paina OK."
 
 msgid ""
-"Please configure or verify your Nameservers by filling out the required "
-"values.\n"
+"Please configure or verify your Nameservers by filling out the required values.\n"
 "When you are ready press OK to continue."
 msgstr ""
 "Määritä ja tarkista nimipalvelimien tiedot.\n"
 "Paina OK-näppäintä kun olet valmis."
 
 msgid ""
-"Please configure your internet connection by filling out the required "
-"values.\n"
+"Please configure your internet connection by filling out the required values.\n"
 "When you are ready press OK to continue."
 msgstr ""
 "Määritä lähiverkkoyhteys syöttämällä tarvittavat arvot.\n"
 "Paina OK-näppäintä kun olet valmis."
 
-msgid ""
-"Please disconnect all USB devices from your Dreambox and (re-)attach the "
-"target USB stick (minimum size is 64 MB) now!"
+msgid "Please disconnect all USB devices from your Dreambox and (re-)attach the target USB stick (minimum size is 64 MB) now!"
 msgstr ""
 
 msgid "Please do not change any values unless you know what you are doing!"
@@ -2723,20 +2673,16 @@ msgid "Please enter the old pin code"
 msgstr "Syötä vanha tunnusluku"
 
 msgid "Please enter your email address here:"
-msgstr ""
+msgstr "Syötä sähköpostiosoitteesi:"
 
 msgid "Please enter your name here (optional):"
-msgstr ""
+msgstr "Syötä nimesi (ei pakollinen):"
 
 msgid "Please follow the instructions on the TV"
 msgstr "Seuraa ruudulla näkyviä ohjeita"
 
-msgid ""
-"Please note that the previously selected media could not be accessed and "
-"therefore the default directory is being used instead."
-msgstr ""
-"Huomaa, että oletushakemisto on käytössä, koska aikaisemmin valittua levyä "
-"ei voitu ladata."
+msgid "Please note that the previously selected media could not be accessed and therefore the default directory is being used instead."
+msgstr "Huomaa, että oletushakemisto on käytössä, koska aikaisemmin valittua levyä ei voitu ladata."
 
 msgid "Please press OK to continue."
 msgstr "Jatka painamalla OK."
@@ -2760,10 +2706,10 @@ msgid "Please select a subservice..."
 msgstr "Valitse alipalvelu..."
 
 msgid "Please select an extension to remove."
-msgstr ""
+msgstr "Valitse poistettava lisäosa."
 
 msgid "Please select an option below."
-msgstr ""
+msgstr "Valitse jokin vaihtoehto."
 
 msgid "Please select medium to use as backup location"
 msgstr "Valitse tallennuspaikka varmuuskopiolle"
@@ -2778,8 +2724,7 @@ msgid "Please select the movie path..."
 msgstr "Valitse tallennehakemisto..."
 
 msgid ""
-"Please select the network interface that you want to use for your internet "
-"connection.\n"
+"Please select the network interface that you want to use for your internet connection.\n"
 "\n"
 "Please press OK to continue."
 msgstr ""
@@ -2815,22 +2760,20 @@ msgstr ""
 "Muuta ikkunan kokoa Bouquet +/- napeilla.\n"
 "Palaa TV-tilaan OK-näppäimellä tai hylkää siirto EXIT-näppäimellä."
 
-msgid ""
-"Please use the UP and DOWN keys to select your language. Afterwards press "
-"the OK button."
+msgid "Please use the UP and DOWN keys to select your language. Afterwards press the OK button."
 msgstr "Valitse kieli ylös/alas näppäimillä ja paina OK-näppäintä."
 
 msgid "Please wait for activation of your network configuration..."
 msgstr "Odota, verkon määritykset aktivoidaan..."
 
 msgid "Please wait while removing selected package..."
-msgstr ""
+msgstr "Odota, valittua pakettia poistetaan..."
 
 msgid "Please wait while scanning is in progress..."
 msgstr "Odota, haku on käynnissä..."
 
 msgid "Please wait while searching for removable packages..."
-msgstr ""
+msgstr "Odota, poistettavia paketteja haetaan..."
 
 msgid "Please wait while we configure your network..."
 msgstr "Odota, verkkoa määritetään..."
@@ -2857,10 +2800,10 @@ msgid "Plugin manager"
 msgstr "Lisäosien hallinta"
 
 msgid "Plugin manager activity information"
-msgstr ""
+msgstr "Lisäosien hallinnan asennustiedot"
 
 msgid "Plugin manager help"
-msgstr ""
+msgstr "Lisäosien hallinan ohje"
 
 msgid "Plugins"
 msgstr "Plugin-lisäosat"
@@ -2917,7 +2860,7 @@ msgid "Press OK on your remote control to continue."
 msgstr "Jatka painamalla OK-näppäintä."
 
 msgid "Press OK to activate the selected skin."
-msgstr ""
+msgstr "Ota valittu teema käyttöön painamalla OK."
 
 msgid "Press OK to activate the settings."
 msgstr "Ota käyttöön painamalla OK."
@@ -2933,22 +2876,22 @@ msgid "Press OK to scan"
 msgstr "Aloita haku painamalla OK"
 
 msgid "Press OK to select a Provider."
-msgstr ""
+msgstr "Valitse palveluntarjoaja painamalla OK."
 
 msgid "Press OK to select/deselect a CAId."
-msgstr ""
+msgstr "Valitse/poista CAId:t OK-näppäimellä"
 
 msgid "Press OK to start the scan"
 msgstr "Aloita haku painamalla OK"
 
 msgid "Press OK to toggle the selection."
-msgstr ""
+msgstr "Muuta valintaa OK-näppäimellä."
 
 msgid "Press OK to view full changelog"
-msgstr ""
+msgstr "Katso koko muutosloki OK-näppäimellä"
 
 msgid "Press yellow to set this interface as default interface."
-msgstr ""
+msgstr "Määritä tämä oletukseksi keltaisella näppäimellä."
 
 msgid "Prev"
 msgstr "Edellinen"
@@ -2963,7 +2906,7 @@ msgid "Priority"
 msgstr "Prioriteetti"
 
 msgid "Process"
-msgstr ""
+msgstr "Suorita"
 
 msgid "Properties of current title"
 msgstr "Omaisuudet"
@@ -3090,7 +3033,7 @@ msgid "Remove currently selected title"
 msgstr "Poista valittu otsikko"
 
 msgid "Remove failed."
-msgstr ""
+msgstr "Poista epäonnistuneet."
 
 msgid "Remove finished."
 msgstr "Poista suoritetut."
@@ -3111,7 +3054,7 @@ msgid "Remove title"
 msgstr "Poista"
 
 msgid "Removed successfully."
-msgstr ""
+msgstr "Poistettu onnistuneesti"
 
 msgid "Removing"
 msgstr "Poistetaan"
@@ -3145,10 +3088,10 @@ msgid "Reset and renumerate title names"
 msgstr "Nollaa ja uudelleenjärjestä otsikot"
 
 msgid "Reset video enhancement settings to system defaults?"
-msgstr ""
+msgstr "Nollaa kuvanparannus oletusarvoihin?"
 
 msgid "Reset video enhancement settings to your last configuration?"
-msgstr ""
+msgstr "Nollaa kuvanparannus aikaisempiin arvoihin?"
 
 msgid "Resolution"
 msgstr "Tarkkuus"
@@ -3177,23 +3120,19 @@ msgid "Restore"
 msgstr "Palauta"
 
 msgid "Restore backups"
-msgstr ""
+msgstr "Palauta varmistus"
 
 msgid "Restore is running..."
-msgstr ""
+msgstr "Palautus käynnissä..."
 
 msgid "Restore running"
-msgstr ""
+msgstr "Palautus käynnissä"
 
 msgid "Restore system settings"
 msgstr "Palauta asetukset"
 
-msgid ""
-"Restoring the settings is done. Please press OK to activate the restored "
-"settings now."
-msgstr ""
-"Asetusten palautus on suoritettu. Paina OK ottaaksesi palautetut asetukset "
-"käyttöön."
+msgid "Restoring the settings is done. Please press OK to activate the restored settings now."
+msgstr "Asetusten palautus on suoritettu. Paina OK ottaaksesi palautetut asetukset käyttöön."
 
 msgid "Resume from last position"
 msgstr "Jatka viimeksi katsotusta kohdasta"
@@ -3272,7 +3211,7 @@ msgid "Satteliteequipment"
 msgstr "Satelliittilaite"
 
 msgid "Saturation"
-msgstr ""
+msgstr "Värikylläisyys"
 
 msgid "Saturday"
 msgstr "Lauantai"
@@ -3284,7 +3223,7 @@ msgid "Save Playlist"
 msgstr "Tallenna soittolista"
 
 msgid "Scaler sharpness"
-msgstr ""
+msgstr "Skaalaimen terävyys"
 
 msgid "Scaling Mode"
 msgstr "Skaalaustila"
@@ -3358,21 +3297,14 @@ msgstr ""
 msgid "Scan band US SUPER"
 msgstr ""
 
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"WLAN USB Stick\n"
+msgid "Scan your network for wireless Access Points and connect to them using your WLAN USB Stick\n"
 msgstr "Hae WLAN-tukiasemia ja kytkeydy niihin USB WLAN-tikun avulla\n"
 
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"selected wireless device.\n"
+msgid "Scan your network for wireless Access Points and connect to them using your selected wireless device.\n"
 msgstr ""
 
-msgid ""
-"Scans default lamedbs sorted by satellite with a connected dish positioner"
-msgstr ""
-"Hakee oletuskanavalistan satelliittijärjestyksessä käyttäen kytkettyä "
-"antennimoottoria"
+msgid "Scans default lamedbs sorted by satellite with a connected dish positioner"
+msgstr "Hakee oletuskanavalistan satelliittijärjestyksessä käyttäen kytkettyä antennimoottoria"
 
 msgid "Search east"
 msgstr "Etsintä itään"
@@ -3417,7 +3349,7 @@ msgid "Select files for backup. Currently selected:\n"
 msgstr "Valitse kopioitavat tiedostot. Nykyinen valinta:\n"
 
 msgid "Select files/folders to backup"
-msgstr ""
+msgstr "Valitse varmistettavat tiedostot/kansiot"
 
 msgid "Select image"
 msgstr "Valitse päivitys"
@@ -3426,7 +3358,7 @@ msgid "Select interface"
 msgstr "Valitse verkkosovitin"
 
 msgid "Select package"
-msgstr ""
+msgstr "Valitse paketti"
 
 msgid "Select provider to add..."
 msgstr "Valitse lisättävä palveluntarjoaja..."
@@ -3438,7 +3370,7 @@ msgid "Select service to add..."
 msgstr "Valitse lisättävä kanava..."
 
 msgid "Select upgrade source to edit."
-msgstr ""
+msgstr "Valitse muokattava päivityslähde."
 
 msgid "Select video input"
 msgstr "Valitse video-sisäänmeno"
@@ -3468,7 +3400,7 @@ msgid "Sequence repeat"
 msgstr "Jakson toisto"
 
 msgid "Serbian"
-msgstr ""
+msgstr "Serbia"
 
 msgid "Service"
 msgstr "Kanava"
@@ -3524,7 +3456,7 @@ msgid "Set as default Interface"
 msgstr "Aseta oletukseksi"
 
 msgid "Set available internal memory threshold for the warning."
-msgstr ""
+msgstr "Aseta vapaan muistin määrä varoitusta varten."
 
 msgid "Set interface as default Interface"
 msgstr "Määritä sovitin oletussovittimeksi"
@@ -3542,7 +3474,7 @@ msgid "Setup Mode"
 msgstr "Mukautusvalintojen laajuus"
 
 msgid "Sharpness"
-msgstr ""
+msgstr "Terävyys"
 
 msgid "Show Info"
 msgstr "Näytä tiedot"
@@ -3617,7 +3549,7 @@ msgid "Singlestep (GOP)"
 msgstr "Kuva-kuvalta (GOP)"
 
 msgid "Skin"
-msgstr ""
+msgstr "Teema..."
 
 msgid "Skin..."
 msgstr "Teema..."
@@ -3639,10 +3571,10 @@ msgid "Slot %d"
 msgstr "Portti %d"
 
 msgid "Slovakian"
-msgstr ""
+msgstr "Slovakia"
 
 msgid "Slovenian"
-msgstr ""
+msgstr "Slovenia"
 
 msgid "Slow"
 msgstr "Hidas"
@@ -3723,7 +3655,7 @@ msgid "Spanish"
 msgstr "Espanja"
 
 msgid "Split preview mode"
-msgstr ""
+msgstr "Jaettu esikatseluruutu"
 
 msgid "Standby"
 msgstr "Valmiustila"
@@ -3825,7 +3757,8 @@ msgstr "Symbolinopeus"
 msgid "System"
 msgstr "Järjestelmä"
 
-#. 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 ""
 
@@ -3895,17 +3828,10 @@ msgstr ""
 "värinäppäimien takaa löytyviä\n"
 "toimintoja."
 
-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 ""
-"DVD-standardi ei tue H.264 (HDTV) videota. Haluatko luoda Dreamboxin omassa "
-"formaatissa olevan data-DVD:n? Levy ei toistu normaaleissa DVD-soittimissa."
+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 "DVD-standardi ei tue H.264 (HDTV) videota. Haluatko luoda Dreamboxin omassa formaatissa olevan data-DVD:n? Levy ei toistu normaaleissa DVD-soittimissa."
 
-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?"
+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 ""
 
 msgid "The backup failed. Please choose a different backup location."
@@ -3930,8 +3856,7 @@ msgstr "Seuraavat tiedostot löytyi..."
 
 msgid ""
 "The input port should be configured now.\n"
-"You can now configure the screen by displaying some test pictures. Do you "
-"want to do that now?"
+"You can now configure the screen by displaying some test pictures. Do you want to do that now?"
 msgstr ""
 "Näytön liitäntä pitäisi nyt olla kunnossa.\n"
 "Voit nyt säätää näyttöä testikuvien avulla. Haluatko tehdä sen?"
@@ -3939,38 +3864,24 @@ msgstr ""
 msgid "The installation of the default services lists is finished."
 msgstr "Oletuskanavalistojen asennus on suoritettu."
 
-msgid ""
-"The installation of the default settings is finished. You can now continue "
-"configuring your Dreambox by pressing the OK button on the remote control."
-msgstr ""
-"Oletusarvojen asennus on suoritettu. Voit jatkaa Dreamboxin asetusten "
-"muokkausta painamalla OK."
+msgid "The installation of the default settings is finished. You can now continue configuring your Dreambox by pressing the OK button on the remote control."
+msgstr "Oletusarvojen asennus on suoritettu. Voit jatkaa Dreamboxin asetusten muokkausta painamalla OK."
 
-msgid ""
-"The md5sum validation failed, the file may be corrupted! Are you sure that "
-"you want to burn this image to flash memory? You are doing this at your own "
-"risk!"
-msgstr ""
-"MD5SUM-tarkistusluku virheellinen, tiedosto voi olla vioittunut! Oletko "
-"varma, että haluat asentaa tämän ohjelmistopäivityksen? Teet sen omalla "
-"vastuulla!"
+msgid "The md5sum validation failed, the file may be corrupted! Are you sure that you want to burn this image to flash memory? You are doing this at your own risk!"
+msgstr "MD5SUM-tarkistusluku virheellinen, tiedosto voi olla vioittunut! Oletko varma, että haluat asentaa tämän ohjelmistopäivityksen? Teet sen omalla vastuulla!"
 
-msgid ""
-"The md5sum validation failed, the file may be downloaded incompletely or be "
-"corrupted!"
-msgstr ""
-"MD5SUM-tarkistusluku virheellinen, tiedosto voi olla keskeneräinen tai "
-"vioittunut!"
+msgid "The md5sum validation failed, the file may be downloaded incompletely or be corrupted!"
+msgstr "MD5SUM-tarkistusluku virheellinen, tiedosto voi olla keskeneräinen tai vioittunut!"
 
 msgid "The package doesn't contain anything."
 msgstr "Paketti ei sisällä mitään."
 
 msgid "The package:"
-msgstr ""
+msgstr "Paketti:"
 
 #, python-format
 msgid "The path %s already exists."
-msgstr "Polku %s on jo olemassa."
+msgstr "Hakemisto %s on jo olemassa."
 
 msgid "The pin code has been changed successfully."
 msgstr "Tunnusluku on nyt vaihdettu."
@@ -4008,13 +3919,11 @@ msgstr ""
 "WLAN-lisäosaa ei ole asennettu!\n"
 "Asenna se."
 
-msgid ""
-"The wizard can backup your current settings. Do you want to do a backup now?"
-msgstr ""
-"Velho voi kopioida nykyiset asetuksesi. Haluatko varmuuskopioida asetukset?"
+msgid "The wizard can backup your current settings. Do you want to do a backup now?"
+msgstr "Avustaja voi kopioida nykyiset asetuksesi. Haluatko varmuuskopioida asetukset?"
 
 msgid "The wizard is finished now."
-msgstr "Velho on lopettanut. Paina OK."
+msgstr "Avustaja on lopettanut. Paina OK."
 
 msgid "There are at least "
 msgstr "Saatavilla ainakin"
@@ -4026,10 +3935,10 @@ msgid "There are no default settings in your image."
 msgstr "Oletusarvoja ei löydy. Paina OK."
 
 msgid "There are now "
-msgstr ""
+msgstr "Nyt on "
 
 msgid "There is nothing to be done."
-msgstr ""
+msgstr "Ei tehtäviä."
 
 msgid ""
 "There might not be enough Space on the selected Partition.\n"
@@ -4042,32 +3951,20 @@ msgid "There was an error downloading the packetlist. Please try again."
 msgstr "Virhe ladattaessa IPKG-ohjelmapakettiluetteloa. Yritä uudestaan."
 
 msgid "There was an error. The package:"
-msgstr ""
+msgstr "Tapahtui virhe. Paketti:"
 
 #, python-format
 msgid "This .NFI file does not contain a valid %s image!"
 msgstr "Tämä .NFI-tiedosto ei sisällä toimivaa %s ohjelmistopäivitystä!"
 
-msgid ""
-"This .NFI file does not have a md5sum signature and is not guaranteed to "
-"work. Do you really want to burn this image to flash memory?"
-msgstr ""
-"Tällä .NFI-tiedostolla ei ole MD5SUM-tarkistuslukua eikä sen toiminnasta ole "
-"takeita. Oletko varma, että haluat asentaa tämän ohjelmistopäivityksen?"
+msgid "This .NFI file does not have a md5sum signature and is not guaranteed to work. Do you really want to burn this image to flash memory?"
+msgstr "Tällä .NFI-tiedostolla ei ole MD5SUM-tarkistuslukua eikä sen toiminnasta ole takeita. Oletko varma, että haluat asentaa tämän ohjelmistopäivityksen?"
 
-msgid ""
-"This .NFI file has a valid md5 signature. Continue programming this image to "
-"flash memory?"
-msgstr ""
-".NFI-tiedoston MD5-tarkistusluku on kunnossa. Jatketaanko "
-"ohjelmistopäivityksen asentamista?"
+msgid "This .NFI file has a valid md5 signature. Continue programming this image to flash memory?"
+msgstr ".NFI-tiedoston MD5-tarkistusluku on kunnossa. Jatketaanko ohjelmistopäivityksen asentamista?"
 
-msgid ""
-"This DVD RW medium is already formatted - reformatting will erase all "
-"content on the disc."
-msgstr ""
-"Tämä DVD-RW levy on jo alustettu - uudelleenalustus tuhoaa levyn kaiken "
-"sisällön."
+msgid "This DVD RW medium is already formatted - reformatting will erase all content on the disc."
+msgstr "Tämä DVD-RW levy on jo alustettu - uudelleenalustus tuhoaa levyn kaiken sisällön."
 
 #, python-format
 msgid "This Dreambox can't decode %s streams!"
@@ -4099,14 +3996,12 @@ msgid ""
 "This test checks for configured Nameservers.\n"
 "If you get a \"unconfirmed\" message:\n"
 "- please check your DHCP, cabling and Adapter setup\n"
-"- if you configured your Nameservers manually please verify your entries in "
-"the \"Nameserver\" Configuration"
+"- if you configured your Nameservers manually please verify your entries in the \"Nameserver\" Configuration"
 msgstr ""
 "Tämä testi tarkistaa nimipalvelimet.\n"
 "Jos näet \"vahvistamaton\" ilmoituksen:\n"
 "- tarkista DHCP, kaapelointi ja Sovittimen asetukset\n"
-"- jos määrittelit nimipalvelimet käsin, tarkista arvot \"Nimipalvelimen "
-"asetukset\" kohdassa"
+"- jos määrittelit nimipalvelimet käsin, tarkista arvot \"Nimipalvelimen asetukset\" kohdassa"
 
 msgid ""
 "This test checks whether a network cable is connected to your LAN-Adapter.\n"
@@ -4131,24 +4026,19 @@ msgstr ""
 "- tarkista DHCP, kaapeli ja verkkosovittimen asetukset"
 
 msgid ""
-"This test checks whether your LAN Adapter is set up for automatic IP Address "
-"configuration with DHCP.\n"
+"This test checks whether your LAN Adapter is set up for automatic IP Address configuration with DHCP.\n"
 "If you get a \"disabled\" message:\n"
 " - then your LAN Adapter is configured for manual IP Setup\n"
-"- verify thay you have entered correct IP informations in the AdapterSetup "
-"dialog.\n"
+"- verify thay you have entered correct IP informations in the AdapterSetup dialog.\n"
 "If you get an \"enabeld\" message:\n"
 "-verify that you have a configured and working DHCP Server in your network."
 msgstr ""
-"Tämä testi tarkistaa, onko verkkosovittimelle määritetty automaattinen IP-"
-"osoite DHCP:n kautta.\n"
+"Tämä testi tarkistaa, onko verkkosovittimelle määritetty automaattinen IP-osoite DHCP:n kautta.\n"
 "Jos näet \"ei käytössä\" ilmoituksen:\n"
 "- verkkosovitin on määritelty käyttämään kiinteää IP-osoitetta\n"
-"- tarkista, että olet syöttänyt oikeat IP-tiedot Sovittimen asetukset -"
-"kohdassa.\n"
+"- tarkista, että olet syöttänyt oikeat IP-tiedot Sovittimen asetukset -kohdassa.\n"
 "Jos näet \"käytössä\" ilmoituksen:\n"
-"- tarkista, että sinulla on lähiverkossasi toimiva ja oikein määritelty DCHP-"
-"palvelin."
+"- tarkista, että sinulla on lähiverkossasi toimiva ja oikein määritelty DCHP-palvelin."
 
 msgid "This test detects your configured LAN-Adapter."
 msgstr "Tämä testi tunnistaa määrittelemäsi verkkosovittimen."
@@ -4233,10 +4123,8 @@ msgstr "Tila"
 
 msgid ""
 "To update your Dreambox firmware, please follow these steps:\n"
-"1) Turn off your box with the rear power switch and plug in the bootable USB "
-"stick.\n"
-"2) Turn mains back on and hold the DOWN button on the front panel pressed "
-"for 10 seconds.\n"
+"1) Turn off your box with the rear power switch and plug in the bootable USB stick.\n"
+"2) Turn mains back on and hold the DOWN button on the front panel pressed for 10 seconds.\n"
 "3) Wait for bootup and follow instructions of the wizard."
 msgstr ""
 
@@ -4319,7 +4207,7 @@ msgid "Two"
 msgstr "Kaksi"
 
 msgid "Type"
-msgstr ""
+msgstr "Tyyppi"
 
 msgid "Type of scan"
 msgstr "Hakutapa"
@@ -4334,7 +4222,7 @@ msgid "USB Stick"
 msgstr "USB-muisti"
 
 msgid "USB stick wizard"
-msgstr ""
+msgstr "USB-muistiavustaja"
 
 msgid "Ukrainian"
 msgstr "Ukraina"
@@ -4383,7 +4271,7 @@ msgid "Unmount failed"
 msgstr "Irrottaminen epäonnistui"
 
 msgid "Unsupported"
-msgstr ""
+msgstr "Ei tuettu"
 
 msgid "Update"
 msgstr "Päivitä"
@@ -4432,7 +4320,7 @@ msgstr "Käytä virran mittausta"
 
 msgid "Use the Networkwizard to configure your Network\n"
 msgstr ""
-"Muokkaa lähiverkon asetukset Verkkovelhon avulla\n"
+"Muokkaa lähiverkon asetukset verkkoavustajan opastamana\n"
 "\n"
 
 #  Ohjatun asennuksen (Start Wizard) kolmas ruutu. Teksti on rivitetty
@@ -4450,9 +4338,7 @@ msgstr ""
 
 #  Ohjatun asennuksen (Start Wizard) toinen ruutu. Teksti on rivitetty
 #  tilaansa käsin. Hyödyksi käytetään Unicode-nuolisymboleja.
-msgid ""
-"Use the up/down keys on your remote control to select an option. After that, "
-"press OK."
+msgid "Use the up/down keys on your remote control to select an option. After that, press OK."
 msgstr ""
 "Valitse haluamasi vaihtoehto\n"
 "kaukosäätimen nuolinäppäimillä\n"
@@ -4462,10 +4348,10 @@ msgstr ""
 "OK-näppäimellä."
 
 msgid "Use this video enhancement settings?"
-msgstr ""
+msgstr "Käytä näitä kuvanparannuksen asetuksia?"
 
 msgid "Use time of currently running service"
-msgstr ""
+msgstr "käytä katseltavan kanavan aikaa"
 
 msgid "Use usals for this sat"
 msgstr "Käytä USALS:ia tälle satelliitille"
@@ -4500,7 +4386,7 @@ msgid "Video Fine-Tuning"
 msgstr "TV-kuvan hienosäätö..."
 
 msgid "Video Fine-Tuning Wizard"
-msgstr "TV-kuvan hienosäätövelho"
+msgstr "TV-kuvan hienosäätöavustaja"
 
 msgid "Video Output"
 msgstr "Video-ulostulo"
@@ -4509,29 +4395,27 @@ msgid "Video Setup"
 msgstr "Video-asetukset"
 
 msgid "Video Wizard"
-msgstr "Video-velho"
+msgstr "Video-avustaja"
 
 msgid "Video enhancement preview"
-msgstr ""
+msgstr "Kuvanparannuksen esikatselu"
 
 msgid "Video enhancement settings"
-msgstr ""
+msgstr "Kuvanparannuksen asetukset..."
 
 msgid "Video enhancement setup"
-msgstr ""
+msgstr "Kuvanparannuksen asetukset"
 
 msgid ""
 "Video input selection\n"
 "\n"
-"Please press OK if you can see this page on your TV (or select a different "
-"input port).\n"
+"Please press OK if you can see this page on your TV (or select a different input port).\n"
 "\n"
 "The next input port will be automatically probed in 10 seconds."
 msgstr ""
 "Video-sisäänmenon valinta\n"
 "\n"
-"Paina OK jos näet tämän ruudun TV:ssä (tai valitse TV:stä toinen "
-"sisäänmeno)\n"
+"Paina OK jos näet tämän ruudun TV:ssä (tai valitse TV:stä toinen sisäänmeno)\n"
 "\n"
 "Seuraavaa sisäänmenoa tunnistetaan automaattisesti 10 sekunnin kuluttua."
 
@@ -4539,7 +4423,7 @@ msgid "Video mode selection."
 msgstr "Video-tilan valinta."
 
 msgid "Videoenhancement Setup"
-msgstr ""
+msgstr "Kuvanparannusasetukset"
 
 msgid "View Movies..."
 msgstr "Näytä tallenteita..."
@@ -4557,7 +4441,7 @@ msgid "View details"
 msgstr "Yksityiskohdat"
 
 msgid "View list of available "
-msgstr ""
+msgstr "Näytä saatavilla olevat"
 
 msgid "View list of available CommonInterface extensions"
 msgstr "Näytä saatavilla olevat CI-laajennukset"
@@ -4629,16 +4513,13 @@ msgid "Waiting"
 msgstr "Odottaa"
 
 msgid "Warn if free space drops below (kB):"
-msgstr ""
+msgstr "Varoita jos tyhjä tila putoaa alle (kB):"
 
 msgid ""
-"We will now test if your TV can also display this resolution at 50hz. If "
-"your screen goes black, wait 20 seconds and it will switch back to 60hz.\n"
+"We will now test if your TV can also display this resolution at 50hz. If your screen goes black, wait 20 seconds and it will switch back to 60hz.\n"
 "Please press OK to begin."
 msgstr ""
-"Testaamme nyt näyttääkö televisiosi tämän tarkkuuden 50hz:llä. Jos ruutu "
-"menee mustaksi, odota 20 sekuntia jolloin 60hz tila kytkeytyy takaisin "
-"päälle.\n"
+"Testaamme nyt näyttääkö televisiosi tämän tarkkuuden 50hz:llä. Jos ruutu menee mustaksi, odota 20 sekuntia jolloin 60hz tila kytkeytyy takaisin päälle.\n"
 "Aloita painamalla OK."
 
 msgid "Wed"
@@ -4653,49 +4534,42 @@ msgstr "Viikonpäivä"
 msgid ""
 "Welcome to the Cutlist editor.\n"
 "\n"
-"Seek to the start of the stuff you want to cut away. Press OK, select 'start "
-"cut'.\n"
+"Seek to the start of the stuff you want to cut away. Press OK, select 'start cut'.\n"
 "\n"
 "Then seek to the end, press OK, select 'end cut'. That's it."
 msgstr ""
 "Tervetuloa leikkauskohtien muokkaukseen.\n"
 "\n"
-"Hae kohta, josta haluat aloittaa poisleikkauksen. Paina OK-näppäintä ja "
-"valitse 'Aloita leikkaus'.\n"
+"Hae kohta, josta haluat aloittaa poisleikkauksen. Paina OK-näppäintä ja valitse 'Aloita leikkaus'.\n"
 "\n"
-"Hae seuraavaksi kohta, johon haluat lopettaa leikkauksen. Paina OK-näppäintä "
-"ja valitse 'Lopeta leikkaus'."
+"Hae seuraavaksi kohta, johon haluat lopettaa leikkauksen. Paina OK-näppäintä ja valitse 'Lopeta leikkaus'."
 
-msgid ""
-"Welcome to the Image upgrade wizard. The wizard will assist you in upgrading "
-"the firmware of your Dreambox by providing a backup facility for your "
-"current settings and a short explanation of how to upgrade your firmware."
-msgstr ""
-"Tervetuloa ohjelmiston päivitys-Velhoon. Velho avustaa ohjelmiston "
-"päivityksessä ja varmuuskopioinnissa sekä asetusten palauttamisessa "
-"päivityksen jälkeen."
+msgid "Welcome to the Image upgrade wizard. The wizard will assist you in upgrading the firmware of your Dreambox by providing a backup facility for your current settings and a short explanation of how to upgrade your firmware."
+msgstr "Tervetuloa ohjelmiston päivitysavustajaan. Avustaja opastaa ohjelmiston päivityksessä ja varmuuskopioinnissa sekä asetusten palauttamisessa päivityksen jälkeen."
 
 msgid ""
 "Welcome to the cleanup wizard.\n"
 "\n"
 "We have detected that your available internal memory has dropped below 2MB.\n"
-"To ensure stable operation of your Dreambox, the internal memory should be "
-"cleaned up.\n"
+"To ensure stable operation of your Dreambox, the internal memory should be cleaned up.\n"
 "You can use this wizard to remove some extensions.\n"
 msgstr ""
+"Tervetuloa puhdistusavustajaan.\n"
+"\n"
+"Tunnistimme, että vapaa sisäinen muisti putosi alle 2MB:n.\n"
+"Jotta Dreamboxin toiminta olisi vakaata, pitää sisäistä muistia vapauttaa.\n"
+"Voit poistaa lisäosia tällä avustajalla.\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"
+"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 ""
 "Tervetuloa.\n"
 "\n"
-"Jos haluat yhdistää Dreamboxin verkkoon, auttaa tämä velho määrittämään "
-"Dreamboxin lähiverhon perusasetukset.\n"
+"Jos haluat yhdistää Dreamboxin verkkoon, auttaa tämä avustaja määrittämään Dreamboxin lähiverhon perusasetukset.\n"
 "\n"
 "Siirry seuraavaan vaiheeseen painamalla OK-nappia."
 
@@ -4732,13 +4606,12 @@ msgid "What do you want to scan?"
 msgstr "Kanavahaun lisäasetukset:"
 
 msgid "What to do with submitted crashlogs?"
-msgstr ""
+msgstr "Mitä lähetetyille lokeille tehdään?"
 
 msgid ""
 "When you do a factory reset, you will lose ALL your configuration data\n"
 "(including bouquets, services, satellite data ...)\n"
-"After completion of factory reset, your receiver will restart "
-"automatically!\n"
+"After completion of factory reset, your receiver will restart automatically!\n"
 "\n"
 "Really do a factory reset?"
 msgstr ""
@@ -4783,7 +4656,7 @@ msgid "Yes, and delete this movie"
 msgstr "Kyllä ja poista tämä tallenne"
 
 msgid "Yes, and don't ask again"
-msgstr ""
+msgstr "Kyllä, älä kysy uudestaan"
 
 msgid "Yes, backup my settings!"
 msgstr "Kyllä, varmuuskopioi asetukset!"
@@ -4815,9 +4688,7 @@ msgstr "Voi keskeyttää asennuksen."
 msgid "You can cancel the removal."
 msgstr "Voit keskeyttää poiston."
 
-msgid ""
-"You can choose some default settings now. Please select the settings you "
-"want to be installed."
+msgid "You can choose some default settings now. Please select the settings you want to be installed."
 msgstr "Valitse mitkä oletusarvot haluat asentaa."
 
 msgid "You can choose, what you want to install..."
@@ -4835,84 +4706,51 @@ msgstr "Et voi poistaa tätä!"
 msgid "You chose not to install any default services lists."
 msgstr "Et valinnut yhtään oletuskanavalistaa. Paina OK."
 
-msgid ""
-"You chose not to install any default settings. You can however install the "
-"default settings later in the settings menu."
-msgstr ""
-"Et valinnut mitään oletusasetuksia. Voit kuitenkin asentaa ne myöhemmin "
-"asetusvalikon kautta."
+msgid "You chose not to install any default settings. You can however install the default settings later in the settings menu."
+msgstr "Et valinnut mitään oletusasetuksia. Voit kuitenkin asentaa ne myöhemmin asetusvalikon kautta."
 
-msgid ""
-"You chose not to install anything. Please press OK finish the install wizard."
+msgid "You chose not to install anything. Please press OK finish the install wizard."
 msgstr "Et valinnut mitään asennettavaksi. Poistu painamalla OK."
 
-msgid ""
-"You do not seem to have a harddisk in your Dreambox. So backing up to a "
-"harddisk is not an option for you."
-msgstr ""
-"Laitteessasi ei näytä olevan kiintolevyä, joten et voi varmuuskopioida "
-"kiintolevylle."
+msgid "You do not seem to have a harddisk in your Dreambox. So backing up to a harddisk is not an option for you."
+msgstr "Laitteessasi ei näytä olevan kiintolevyä, joten et voi varmuuskopioida kiintolevylle."
 
 msgid ""
-"You have chosen to backup to a compact flash card. The card must be in the "
-"slot. We do not verify if it is really used at the moment. So better backup "
-"to the harddisk!\n"
+"You have chosen to backup to a compact flash card. The card must be in the slot. We do not verify if it is really used at the moment. So better backup to the harddisk!\n"
 "Please press OK to start the backup now."
 msgstr ""
-"Olet valinnut varmuuskopioinnin Compact Flash -kortille. Kortin on oltava "
-"lukijassa. Sen toimintaa ei voi todeta. Suosittelemme varmuuskopiointia "
-"kiintolevylle!\n"
+"Olet valinnut varmuuskopioinnin Compact Flash -kortille. Kortin on oltava lukijassa. Sen toimintaa ei voi todeta. Suosittelemme varmuuskopiointia kiintolevylle!\n"
 "Paina OK aloittaakseni varmuuskopioinnin nyt."
 
 msgid ""
 "You have chosen to backup to an usb drive. Better backup to the harddisk!\n"
 "Please press OK to start the backup now."
 msgstr ""
-"Olet valinnut varmuuskopioinnin USB:lle. Kiintolevy on luotettavampi "
-"vaihtoehto!\n"
+"Olet valinnut varmuuskopioinnin USB:lle. Kiintolevy on luotettavampi vaihtoehto!\n"
 "Paina OK aloittaaksesi varmuuskopioinnin."
 
-msgid ""
-"You have chosen to backup to your harddisk. Please press OK to start the "
-"backup now."
-msgstr ""
-"Olet valinnut varmuuskopioinnin kiintolevylle. Paina OK aloittaaksesi "
-"varmistuksen nyt."
+msgid "You have chosen to backup to your harddisk. Please press OK to start the backup now."
+msgstr "Olet valinnut varmuuskopioinnin kiintolevylle. Paina OK aloittaaksesi varmistuksen nyt."
 
-msgid ""
-"You have chosen to backup your settings. Please press OK to start the backup "
-"now."
+msgid "You have chosen to backup your settings. Please press OK to start the backup now."
 msgstr "Valitsit asetusten varmuuskopioinnin. Aloita painamalla OK-näppäintä."
 
-msgid ""
-"You have chosen to create a new .NFI flasher bootable USB stick. This will "
-"repartition the USB stick and therefore all data on it will be erased."
-msgstr ""
-"Olet valinnut .NFI-päivitysohjelman asennuksen USB-muistille. Tämä toiminto "
-"osioi USB-muistin ja tuhoaa siltä kaikki tiedostot."
+msgid "You have chosen to create a new .NFI flasher bootable USB stick. This will repartition the USB stick and therefore all data on it will be erased."
+msgstr "Olet valinnut .NFI-päivitysohjelman asennuksen USB-muistille. Tämä toiminto osioi USB-muistin ja tuhoaa siltä kaikki tiedostot."
 
-msgid ""
-"You have chosen to restore your settings. Enigma2 will restart after "
-"restore. Please press OK to start the restore now."
-msgstr ""
-"Valitsit asetusten palautuksen. Enigma2 käynnistyy uudelleen palautuksen "
-"jälkeen. Aloita painamalla OK-näppäintä."
+msgid "You have chosen to restore your settings. Enigma2 will restart after restore. Please press OK to start the restore now."
+msgstr "Valitsit asetusten palautuksen. Enigma2 käynnistyy uudelleen palautuksen jälkeen. Aloita painamalla OK-näppäintä."
 
 #, python-format
 msgid "You have to wait %s!"
 msgstr "Sinun täytyy odottaa %s!"
 
 msgid ""
-"You need a PC connected to your dreambox. If you need further instructions, "
-"please visit the website http://www.dm7025.de.\n"
-"Your dreambox will now be halted. After you have performed the update "
-"instructions from the website, your new firmware will ask you to restore "
-"your settings."
+"You need a PC connected to your dreambox. If you need further instructions, please visit the website http://www.dm7025.de.\n"
+"Your dreambox will now be halted. After you have performed the update instructions from the website, your new firmware will ask you to restore your settings."
 msgstr ""
-"Tarvitse PC:n, joka on yhdistetty Dreamboksiin. Katso lisätietoja http://www."
-"dm7025.de.\n"
-"Dreamboksisi sammutetaan nyt. Kun olet tehnyt päivitystoimenpiteet sivuston "
-"mukaisesti, uusi ohjelmaversio pyytää sinua palauttamaan asetukset."
+"Tarvitse PC:n, joka on yhdistetty Dreamboksiin. Katso lisätietoja http://www.dm7025.de.\n"
+"Dreamboksisi sammutetaan nyt. Kun olet tehnyt päivitystoimenpiteet sivuston mukaisesti, uusi ohjelmaversio pyytää sinua palauttamaan asetukset."
 
 msgid ""
 "You need to set a pin code and hide it from your children.\n"
@@ -4942,28 +4780,20 @@ msgstr "Dreambox käynnistyy uudelleen kun painat OK."
 msgid "Your TV works with 50 Hz. Good!"
 msgstr "Televisiosi toimii 50Hz:llä. Hyvä!"
 
-msgid ""
-"Your backup succeeded. We will now continue to explain the further upgrade "
-"process."
+msgid "Your backup succeeded. We will now continue to explain the further upgrade process."
 msgstr "Varmuuskopiointi onnistui. Päivitys jatkuu eteenpäin."
 
-msgid ""
-"Your collection exceeds the size of a single layer medium, you will need a "
-"blank dual layer DVD!"
+msgid "Your collection exceeds the size of a single layer medium, you will need a blank dual layer DVD!"
 msgstr ""
 
 msgid "Your dreambox is shutting down. Please stand by..."
 msgstr "Laite sammutetaan. Odota..."
 
-msgid ""
-"Your dreambox isn't connected to the internet properly. Please check it and "
-"try again."
-msgstr ""
-"Yhteyttä Internetiin ei kyetty muodostamaan. Tarkista verkkoasetukset ja "
-"yritä uudelleen."
+msgid "Your dreambox isn't connected to the internet properly. Please check it and try again."
+msgstr "Yhteyttä Internetiin ei kyetty muodostamaan. Tarkista verkkoasetukset ja yritä uudelleen."
 
 msgid "Your email address:"
-msgstr ""
+msgstr "Sähköpostiosoite:"
 
 msgid ""
 "Your frontprocessor firmware must be upgraded.\n"
@@ -4980,7 +4810,7 @@ msgstr ""
 "Valitse mitä haluat tehdä seuraavaksi."
 
 msgid "Your name (optional):"
-msgstr ""
+msgstr "Nimi (ei pakollinen):"
 
 msgid "Your network configuration has been activated."
 msgstr "Verkkoasetukset on aktivoitu."
@@ -5118,13 +4948,13 @@ msgid "assigned CAIds"
 msgstr "Määritetyt CAId:t"
 
 msgid "assigned CAIds:"
-msgstr ""
+msgstr "Määritetyt CAId:t:"
 
 msgid "assigned Services/Provider"
 msgstr "Määritetyt kanavat/palveluntarjoajat"
 
 msgid "assigned Services/Provider:"
-msgstr ""
+msgstr "Määritetyt kanavat/palveluntarjoajat:"
 
 #, python-format
 msgid "audio track (%s) format"
@@ -5141,7 +4971,7 @@ msgid "auto"
 msgstr ""
 
 msgid "available"
-msgstr ""
+msgstr "saatavilla"
 
 #  Tämä teksti näytetään monessa valikossa EXIT-napin
 #  kaltaisena poistumistoimintona.
@@ -5210,7 +5040,7 @@ msgid "copy to bouquets"
 msgstr "kopioi suosikkilistalle"
 
 msgid "could not be removed"
-msgstr ""
+msgstr "ei voitu poistaa"
 
 msgid "create directory"
 msgstr "luo hakemisto"
@@ -5363,7 +5193,7 @@ msgid "go to standby"
 msgstr "siirry valmiustilaan"
 
 msgid "grab this frame as bitmap"
-msgstr ""
+msgstr "tallenna tämä ruutu kuvatiedostoksi"
 
 msgid "green"
 msgstr "vihreä"
@@ -5486,16 +5316,16 @@ msgid "move PiP to main picture"
 msgstr "Siirrä PiP pääkuvaan"
 
 msgid "move down to last entry"
-msgstr ""
+msgstr "siirry viimeiseen kohtaan"
 
 msgid "move down to next entry"
-msgstr ""
+msgstr "siirry seuraavaan kohtaan"
 
 msgid "move up to first entry"
-msgstr ""
+msgstr "siirry ensimmäiseen kohtaan"
 
 msgid "move up to previous entry"
-msgstr ""
+msgstr "siirry edelliseen kohtaan"
 
 msgid "movie list"
 msgstr "tallenneluettelo"
@@ -5525,7 +5355,7 @@ msgid "no HDD found"
 msgstr "kiintolevyä ei löydy"
 
 msgid "no Services/Providers selected"
-msgstr ""
+msgstr "palveluja/palveluntarjoajia ei valittu"
 
 msgid "no module found"
 msgstr "(ei CA-moduulia)"
@@ -5579,7 +5409,7 @@ msgid "open servicelist(up)"
 msgstr "Avaa kanavalista(ylöspäin)"
 
 msgid "open virtual keyboard input help"
-msgstr ""
+msgstr "avaa virtuaalinäppäimistön ohje"
 
 msgid "pass"
 msgstr "hyväksytty"
@@ -5703,7 +5533,7 @@ msgid "select CAId"
 msgstr "Valitse CAId"
 
 msgid "select CAId's"
-msgstr ""
+msgstr "valitse CAId:t"
 
 msgid "select image from server"
 msgstr "valitse päivitys palvelimelta"
@@ -5712,7 +5542,7 @@ msgid "select interface"
 msgstr "valitse sovitin"
 
 msgid "select menu entry"
-msgstr ""
+msgstr "valitse valikon kohta"
 
 msgid "select movie"
 msgstr "valitse tallenne"
@@ -5898,7 +5728,7 @@ msgid "waiting"
 msgstr "odottaa"
 
 msgid "was removed successfully"
-msgstr ""
+msgstr "poistettiin onnistuneesti"
 
 msgid "weekly"
 msgstr "joka viikko"
@@ -5918,13 +5748,8 @@ msgstr "Kyllä"
 msgid "yes (keep feeds)"
 msgstr "Kyllä (pidä feedit)"
 
-msgid ""
-"your dreambox might be unusable now. Please consult the manual for further "
-"assistance before rebooting your dreambox."
-msgstr ""
-"Asennus ei onnistunut. Dreambox saattaa olla käyttökelvottomassa tilassa. "
-"Joudut ehkä asentamaan ohjelmiston uudelleen tietokoneen avulla. Katso "
-"käyttöoppaasta lisäohjeita ennen kuin käynnistät laitteen uudelleen."
+msgid "your dreambox might be unusable now. Please consult the manual for further assistance before rebooting your dreambox."
+msgstr "Asennus ei onnistunut. Dreambox saattaa olla käyttökelvottomassa tilassa. Joudut ehkä asentamaan ohjelmiston uudelleen tietokoneen avulla. Katso käyttöoppaasta lisäohjeita ennen kuin käynnistät laitteen uudelleen."
 
 msgid "zap"
 msgstr "kanavanvaihto"
index 2c0bcaca50013ab4d153d6586f45b9781f3a3044..73c365fb06b8385a84b5f37d141be71e8296de1b 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -101,6 +101,8 @@ msgid ""
 "\n"
 "System will restart after the restore!"
 msgstr ""
+"\n"
+"Systeem zal opnieuw opstarten na het herstellen!"
 
 msgid ""
 "\n"
@@ -194,21 +196,16 @@ msgid "(show optional DVD audio menu)"
 msgstr "(optioneel DVD audio menu weergeven)"
 
 msgid "* Only available if more than one interface is active."
-msgstr "* Enkel beschikbaar indien meer dan één interface actief is."
+msgstr "* Alleen beschikbaar indien meer dan één interface actief is."
 
 msgid "* Only available when entering hidden SSID or network key"
-msgstr ""
-"* Enkel beschikbaar bij het ingegeven van de verborgen SSID of netwerk "
-"sleutel"
+msgstr "* Alleen beschikbaar bij het ingegeven van de verborgen SSID of netwerk sleutel"
 
 msgid ".NFI Download failed:"
 msgstr ".NFI Download mislukt:"
 
-msgid ""
-".NFI file passed md5sum signature check. You can safely flash this image!"
-msgstr ""
-"Md5 controle was succesvol op .NFI bestand. U kunt dit image veilig "
-"schrijven!"
+msgid ".NFI file passed md5sum signature check. You can safely flash this image!"
+msgstr "Md5 controle was succesvol op .NFI bestand. U kunt dit image veilig schrijven!"
 
 msgid "/usr/share/enigma2 directory"
 msgstr "/usr/share/enigma2 map"
@@ -355,19 +352,11 @@ msgstr ""
 "Bezig met opnemen.\n"
 "Wat wilt u doen?"
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"configure the positioner."
-msgstr ""
-"U bent aan het opnemen. Stop eerst de opname voordat u probeert de rotor "
-"instellingen te wijzigen."
+msgid "A recording is currently running. Please stop the recording before trying to configure the positioner."
+msgstr "U bent aan het opnemen. Stop eerst de opname voordat u probeert de rotor instellingen te wijzigen."
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"start the satfinder."
-msgstr ""
-"U bent aan het opnemen. Stop eerst de opname voordat u de signaalmeting "
-"start."
+msgid "A recording is currently running. Please stop the recording before trying to start the satfinder."
+msgstr "U bent aan het opnemen. Stop eerst de opname voordat u de signaalmeting start."
 
 #, python-format
 msgid "A required tool (%s) was not found."
@@ -388,7 +377,7 @@ msgstr ""
 "schakelen. Wilt u dit toestaan?"
 
 msgid "A small overview of the available icon states and actions."
-msgstr ""
+msgstr "Een klein overzicht van de status en acties."
 
 msgid ""
 "A timer failed to record!\n"
@@ -428,7 +417,7 @@ msgid "Action on long powerbutton press"
 msgstr "Bij lang indrukken stand-by toets"
 
 msgid "Action:"
-msgstr "Aktie:"
+msgstr "Actie:"
 
 msgid "Activate Picture in Picture"
 msgstr "Activeer Picture In Picture"
@@ -469,12 +458,8 @@ msgstr "Aan boeket toevoegen"
 msgid "Add to favourites"
 msgstr "Aan favorieten toevoegen"
 
-msgid ""
-"Adds enigma2 settings and dreambox model informations like SN, rev... if "
-"enabled."
-msgstr ""
-"Enigma2 instellingen en Dreambox model informatie toevoegen zoals SN, rev... "
-"indien ingeschakeld."
+msgid "Adds enigma2 settings and dreambox model informations like SN, rev... if enabled."
+msgstr "Enigma2 instellingen en Dreambox model informatie toevoegen zoals SN, rev... indien ingeschakeld."
 
 msgid "Adds network configuration if enabled."
 msgstr "Netwerkconfiguratie toevoegen indien ingeschakeld."
@@ -482,15 +467,8 @@ msgstr "Netwerkconfiguratie toevoegen indien ingeschakeld."
 msgid "Adds wlan configuration if enabled."
 msgstr "Wlan configuratie toevoegen indien ingeschakeld."
 
-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 ""
-"Wijzig de kleuren zodanig dat alle tinten zichtbaar, maar wel zo kleurig "
-"mogelijk zijn. Zodra het resultaat u bevalt, druk dan op OK om dit menu af "
-"te sluiten of gebruik de nummertoetsen om een ander testscherm te selecteren."
+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 "Wijzig de kleuren zodanig dat alle tinten zichtbaar, maar wel zo kleurig mogelijk zijn. Zodra het resultaat u bevalt, druk dan op OK om dit menu af te sluiten of gebruik de nummertoetsen om een ander testscherm te selecteren."
 
 msgid "Advanced"
 msgstr "Expert"
@@ -510,12 +488,8 @@ msgstr "Geavanceerd herstellen"
 msgid "After event"
 msgstr "Na opname"
 
-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 ""
-"Zodra de installatiewizard gereed is, kunt u een zender beveiligen. "
-"Raadpleeg de handleiding voor aanwijzigingen."
+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 "Zodra de installatiewizard gereed is, kunt u een zender beveiligen. Raadpleeg de handleiding voor aanwijzigingen."
 
 msgid "Album"
 msgstr "Album"
@@ -592,7 +566,7 @@ msgid "Artist"
 msgstr "Artiest"
 
 msgid "Ask before shutdown:"
-msgstr "Slaaptimer aktie bevestigen:"
+msgstr "Slaaptimer actie bevestigen:"
 
 msgid "Ask user"
 msgstr "Vraag gebruiker"
@@ -619,7 +593,7 @@ msgid "Auto chapter split every ? minutes (0=never)"
 msgstr "Automatisch hoofdstuk splitsen elke ? min (0=nooit)"
 
 msgid "Auto flesh"
-msgstr "Automatische huidskleur tiint"
+msgstr "Automatische huidskleur tint"
 
 msgid "Auto scart switching"
 msgstr "Automatisch scart schakelen"
@@ -673,7 +647,7 @@ msgid "Backup is done. Please press OK to see the result."
 msgstr "Back-up is voltooid. Druk op OK om de resultaten te zien."
 
 msgid "Backup is running..."
-msgstr ""
+msgstr "Back-up is bezig..."
 
 msgid "Backup system settings"
 msgstr "Back-up uw instellingen"
@@ -694,13 +668,13 @@ msgid "Behavior of 0 key in PiP-mode"
 msgstr "Functie van de 0-toets in PiP modus"
 
 msgid "Behavior when a movie is started"
-msgstr "Aktie na 'start afspelen'"
+msgstr "Actie na 'start afspelen'"
 
 msgid "Behavior when a movie is stopped"
-msgstr "Aktie na 'stop afspelen'"
+msgstr "Actie na 'stop afspelen'"
 
 msgid "Behavior when a movie reaches the end"
-msgstr "Aktie na 'einde bestand'"
+msgstr "Actie na 'einde bestand'"
 
 msgid "Bitrate:"
 msgstr "Bitrate:"
@@ -729,12 +703,8 @@ msgstr "Schrijf op DVD..."
 msgid "Bus: "
 msgstr "Bus: "
 
-msgid ""
-"By pressing the OK Button on your remote control, the info bar is being "
-"displayed."
-msgstr ""
-"Door op de OK Knop van de afstandsbediening te drukken, word de infobalk "
-"zichtbaar."
+msgid "By pressing the OK Button on your remote control, the info bar is being displayed."
+msgstr "Door op de OK Knop van de afstandsbediening te drukken, word de infobalk zichtbaar."
 
 msgid "C"
 msgstr "C"
@@ -830,7 +800,7 @@ msgid "Choose Tuner"
 msgstr "Kies een tuner"
 
 msgid "Choose a wireless network"
-msgstr ""
+msgstr "Kies een draadloos netwerk"
 
 msgid "Choose backup files"
 msgstr "Kies back-up bestanden"
@@ -851,7 +821,7 @@ msgid "Choose upgrade source"
 msgstr "Kies upgrade bron"
 
 msgid "Choose your Skin"
-msgstr "Kies een Skin"
+msgstr "Kies uw favoriete Skin"
 
 msgid "Circular left"
 msgstr "Circulaire links"
@@ -866,10 +836,10 @@ msgid "Cleanup Wizard"
 msgstr "Cleanup Wizard"
 
 msgid "Cleanup Wizard settings"
-msgstr ""
+msgstr "Cleanup Wizard instellingen"
 
 msgid "CleanupWizard"
-msgstr ""
+msgstr "CleanupWizard"
 
 msgid "Clear before scan"
 msgstr "Vóór zoeken alle zenders wissen?"
@@ -881,7 +851,7 @@ msgid "Close"
 msgstr "Sluiten"
 
 msgid "Close title selection"
-msgstr ""
+msgstr "Sluit titel selectie"
 
 msgid "Code rate high"
 msgstr "Hoge ontvangst rate"
@@ -990,7 +960,7 @@ msgid ""
 msgstr ""
 "Verbinding met Fritz!Box\n"
 "mislukt! (%s)\n"
-"probeer opnieuw..."
+"Probeert opnieuw..."
 
 msgid "Constellation"
 msgstr "Constellatie"
@@ -1108,13 +1078,13 @@ msgid "DVB-S2"
 msgstr "DVB-S2"
 
 msgid "DVD File Browser"
-msgstr ""
+msgstr "DVD Bestandsbrowser"
 
 msgid "DVD Player"
 msgstr "DVD-speler"
 
 msgid "DVD Titlelist"
-msgstr ""
+msgstr "DVD Titellijst"
 
 msgid "DVD media toolbox"
 msgstr "DVD medium hulpmiddel"
@@ -1126,7 +1096,7 @@ msgid "Date"
 msgstr "Datum"
 
 msgid "Decide if you want to enable or disable the Cleanup Wizard."
-msgstr ""
+msgstr "Bepalen of u de Cleanup Wizard wilt activeren of deactiveren."
 
 msgid "Decide what should be done when crashlogs are found."
 msgstr "Beslissen wat er moet gebeuren wanneer crashlogs zijn gevonden."
@@ -1179,7 +1149,7 @@ msgid "Deselect"
 msgstr "Deselecteer"
 
 msgid "Destination directory"
-msgstr "Doel map"
+msgstr "Doelmap"
 
 msgid "Detected HDD:"
 msgstr "Gedetecteerde harde schijf:"
@@ -1203,7 +1173,7 @@ msgid "DiSEqC repeats"
 msgstr "DiSEqC herhaling"
 
 msgid "DiSEqC-Tester settings"
-msgstr ""
+msgstr "DiSEqC-Tester instellingen"
 
 msgid "Dialing:"
 msgstr "Bellen:"
@@ -1219,7 +1189,7 @@ msgid "Directory %s nonexistent."
 msgstr "Map %s bestaat niet."
 
 msgid "Directory browser"
-msgstr ""
+msgstr "Mapbrowser"
 
 msgid "Disable"
 msgstr "Uit"
@@ -1250,7 +1220,7 @@ msgid ""
 msgstr ""
 "Verbinding metFritz!Box\n"
 "verbroken! (%s)\n"
-"probeer opnieuw..."
+"Probeert opnieuw..."
 
 msgid "Dish"
 msgstr "Schotel"
@@ -1350,17 +1320,13 @@ msgid "Do you want to remove the package:\n"
 msgstr "Wilt u het volgende pakket verwijderen:\n"
 
 msgid "Do you want to restore your settings?"
-msgstr "Wilt u uw instelingen nu terugzetten?"
+msgstr "Wilt u uw instelingen nu terugplaatsen?"
 
 msgid "Do you want to resume this playback?"
 msgstr "Wilt u het afspelen vervolgen?"
 
-msgid ""
-"Do you want to submit your email address and name so that we can contact you "
-"if needed?"
-msgstr ""
-"Wilt u uw e-mailadres en naam opgeven zodat wij contact met u kunnen opnemen "
-"indien nodig?"
+msgid "Do you want to submit your email address and name so that we can contact you if needed?"
+msgstr "Wilt u uw e-mailadres en naam opgeven zodat wij contact met u kunnen opnemen indien nodig?"
 
 msgid "Do you want to update your Dreambox?"
 msgstr "Wilt u uw Dreambox updaten?"
@@ -1394,8 +1360,7 @@ msgstr "Klaar - %d pakket(ten) geïnstalleerd of vervangen met %d fouten"
 
 #, python-format
 msgid "Done - Installed, upgraded or removed %d packages with %d errors"
-msgstr ""
-"Klaar - %d pakket(ten) geïnstalleerd, vervangen of verwijderd met %d fouten"
+msgstr "Klaar - %d pakket(ten) geïnstalleerd, vervangen of verwijderd met %d fouten"
 
 msgid "Download"
 msgstr "Downloaden"
@@ -1474,7 +1439,7 @@ msgid "Edit title"
 msgstr "Wijzig titel"
 
 msgid "Edit upgrade source url."
-msgstr ""
+msgstr "Bewerk upgrade bron url."
 
 msgid "Electronic Program Guide"
 msgstr "Electronische Programma Gids"
@@ -1483,10 +1448,10 @@ msgid "Enable"
 msgstr "Aan"
 
 msgid "Enable 5V for active antenna"
-msgstr "5V voor aktieve antenne aanschakelen"
+msgstr "5V voor actieve antenne inschakelen"
 
 msgid "Enable Cleanup Wizard?"
-msgstr ""
+msgstr "Activeer Cleanup Wizard?"
 
 msgid "Enable multiple bouquets"
 msgstr "Meerdere boeketten toestaan"
@@ -1536,6 +1501,12 @@ msgid ""
 "\n"
 "© 2006 - Stephan Reichholf"
 msgstr ""
+"Enigma2 Skinselector\n"
+"\n"
+"Als u problemen ondervind kunt u contact opnemen\n"
+"via e-mail: stephan@reichholf.net\n"
+"\n"
+"© 2006 - Stephan Reichholf"
 
 msgid ""
 "Enigma2 Skinselector v0.5 BETA\n"
@@ -1571,8 +1542,7 @@ msgid "Enter the service pin"
 msgstr "Voer de zender pincode in"
 
 msgid "Enter your email address so that we can contact you if needed."
-msgstr ""
-"Geef uw e-mailadres, zodat wij contact met u kunnen opnemen indien nodig."
+msgstr "Geef uw e-mailadres, zodat wij contact met u kunnen opnemen indien nodig."
 
 msgid "Error"
 msgstr "Fout"
@@ -1589,7 +1559,7 @@ msgstr ""
 "Opnieuw?"
 
 msgid "Estonian"
-msgstr ""
+msgstr "Estlands"
 
 msgid "Eventview"
 msgstr "Programmaoverzicht"
@@ -1681,8 +1651,7 @@ msgstr "Herstarten van uw netwerk is voltooid"
 msgid "Finnish"
 msgstr "Fins"
 
-msgid ""
-"First we need to download the latest boot environment for the USB flasher."
+msgid "First we need to download the latest boot environment for the USB flasher."
 msgstr "Eerst dienen we de opstart omgeving voor de USB flasher te downloaden."
 
 msgid "Flash"
@@ -1692,7 +1661,7 @@ msgid "Flashing failed"
 msgstr "Flashen mislukt"
 
 msgid "Following tasks will be done after you press continue!"
-msgstr ""
+msgstr "Volgende taken zullen gebeuren nadat u op OK drukt!"
 
 msgid "Format"
 msgstr "Formaat"
@@ -1854,25 +1823,15 @@ msgstr ""
 "scart aansluiting. Druk op OK om terug te keren."
 
 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 ""
-"Indien uw TV over contrast- of helderheidsoptimalisatie opties en andere "
-"'beeldverbeteraars' beschikt, zet deze dan uit!\n"
-"Instellingen als 'Dynamic', op standaard instellen. Stel bij een LCD TV de "
-"achtergrondverlichting op een niveau in dat u bevalt. Zet 'contrast' zo laag "
-"mogelijk.\n"
-"Daarna 'helderheid' zo laag mogelijk instellen, maar wel zodanig dat alle "
-"donkerste grijstinten zichtbaar zijn.\n"
-"Let nu even niet op de heldere vlakken. Die worden pas bij de volgende stap "
-"ingestelt.\n"
+"Indien uw TV over contrast- of helderheidsoptimalisatie opties en andere 'beeldverbeteraars' beschikt, zet deze dan uit!\n"
+"Instellingen als 'Dynamic', op standaard instellen. Stel bij een LCD TV de achtergrondverlichting op een niveau in dat u bevalt. Zet 'contrast' zo laag mogelijk.\n"
+"Daarna 'helderheid' zo laag mogelijk instellen, maar wel zodanig dat alle donkerste grijstinten zichtbaar zijn.\n"
+"Let nu even niet op de heldere vlakken. Die worden pas bij de volgende stap ingestelt.\n"
 "Indien het resultaat nu goed is, druk dan op OK."
 
 msgid "Image flash utility"
@@ -1884,12 +1843,11 @@ msgstr "Image vernieuwen"
 msgid "In Progress"
 msgstr "Is bezig"
 
-msgid ""
-"In order to record a timer, the TV was switched to the recording service!\n"
+msgid "In order to record a timer, the TV was switched to the recording service!\n"
 msgstr "Voor een timer opname, is nu de juiste zender ingeschakelt!\n"
 
 msgid "Include your email and name (optional) in the mail?"
-msgstr "Uw e-mailadres en naam (optioneel) in de mail?"
+msgstr "Vermeld uw e-mailadres en naam (optioneel) in de mail?"
 
 msgid "Increased voltage"
 msgstr "Verhoogd voltage"
@@ -1898,7 +1856,7 @@ msgid "Index"
 msgstr "Index"
 
 msgid "Info"
-msgstr ""
+msgstr "Info"
 
 msgid "InfoBar"
 msgstr "Infobalk"
@@ -1934,10 +1892,10 @@ msgid "Install a new image with your web browser"
 msgstr "Installeer een nieuwe image met uw browser"
 
 msgid "Install extensions."
-msgstr ""
+msgstr "Extensies installeren."
 
 msgid "Install local extension"
-msgstr ""
+msgstr "Installeer lokale extenties"
 
 msgid "Install or remove finished."
 msgstr "Installeren of verwijderen voltooid."
@@ -2007,7 +1965,8 @@ msgstr "Italiaans"
 msgid "Job View"
 msgstr "Voortgang"
 
-#. 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 "Alleen schalen"
 
@@ -2062,7 +2021,8 @@ msgstr "DVD-speler afsluiten?"
 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 "Letterbox"
 
@@ -2372,11 +2332,8 @@ msgstr "Geen vrije tuner!"
 msgid "No networks found"
 msgstr "Geen netwerken gevonden"
 
-msgid ""
-"No packages were upgraded yet. So you can check your network and try again."
-msgstr ""
-"Er zijn geen softwarepakketjes gevonden. Controleer uw netwerk en probeer "
-"opnieuw."
+msgid "No packages were upgraded yet. So you can check your network and try again."
+msgstr "Er zijn geen softwarepakketjes gevonden. Controleer uw netwerk en probeer opnieuw."
 
 msgid "No picture on TV? Press EXIT and retry."
 msgstr "Geen beeld op uw TV? Druk op exit en probeer opnieuw."
@@ -2422,40 +2379,34 @@ msgstr ""
 "Indien u 'nee' kiest, blijft het menu onbeveiligd!"
 
 msgid "No wireless networks found! Please refresh."
-msgstr "Geen draadloze netwerken gevonden! Verniew."
+msgstr "Geen draadloze netwerken gevonden! Vernieuw."
 
 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 ""
 "Geen werkende locale netwerkadapter gevonden.\n"
-"Controleer of er een netwerkkabel is geplaatst en uw netwerk correct is "
-"geconfigureerd."
+"Controleer of er een netwerkkabel is geplaatst en uw netwerk correct is geconfigureerd."
 
 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 ""
 "Geen werkende draadloze netwerkadapter gevonden.\n"
-"Controleer of er een compatibel WLAN apparaat is geplaatst en uw netwerk "
-"correct is geconfigureerd."
+"Controleer of er een compatibel WLAN apparaat is geplaatst en uw netwerk correct is geconfigureerd."
 
 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 ""
 "Geen werkende draadloze netwerk interface gevonden.\n"
-"Controleer of er een compatibel WLAN apparaat is geplaatst of activeer uw "
-"lokale netwerk interface."
+"Controleer of er een compatibel WLAN apparaat is geplaatst of activeer uw lokale netwerk interface."
 
 msgid "No, but restart from begin"
 msgstr "Nee, vanaf begin herstarten"
 
 msgid "No, do nothing."
-msgstr "nee, geen aktie."
+msgstr "Nee, geen actie."
 
 msgid "No, just start my dreambox"
 msgstr "Nee, uitsluitend Dreambox starten"
@@ -2470,9 +2421,10 @@ msgid "No, send them never"
 msgstr "Nee, verstuur ze nooit"
 
 msgid "None"
-msgstr "geen"
+msgstr "Geen"
 
-#. 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 "Nonlineair"
 
@@ -2483,12 +2435,8 @@ msgid "Norwegian"
 msgstr "Noors"
 
 #, python-format
-msgid ""
-"Not enough diskspace. Please free up some diskspace and try again. (%d MB "
-"required, %d MB available)"
-msgstr ""
-"Onvoldoende harde schijf ruimte. Maak ruimte vrij en probeer het opnieuw (%d "
-"MB benodigd, %d MB beschikbaar)"
+msgid "Not enough diskspace. Please free up some diskspace and try again. (%d MB required, %d MB available)"
+msgstr "Onvoldoende harde schijf ruimte. Maak ruimte vrij en probeer het opnieuw (%d MB benodigd, %d MB beschikbaar)"
 
 msgid ""
 "Nothing to scan!\n"
@@ -2500,14 +2448,9 @@ msgstr ""
 msgid "Now Playing"
 msgstr "Weergave loopt"
 
-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."
+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 ""
-"Gebruik nu 'contrast' om de helderheid van de achtergrond zo hoog mogelijk "
-"in te stellen, maar zorg er voor dat u nog steeds de helderste grijze "
-"vlakken van elkaar kunt onderscheiden.\n"
+"Gebruik nu 'contrast' om de helderheid van de achtergrond zo hoog mogelijk in te stellen, maar zorg er voor dat u nog steeds de helderste grijze vlakken van elkaar kunt onderscheiden.\n"
 "Indien het resultaat nu goed is, druk dan op OK."
 
 msgid "OK"
@@ -2568,15 +2511,16 @@ msgid "Package removed successfully.\n"
 msgstr "Pakket met succes verwijderd.\n"
 
 msgid "Packet management"
-msgstr "Pakket beheer"
+msgstr "Pakketbeheer"
 
 msgid "Packet manager"
-msgstr "Pakket beheer"
+msgstr "Pakketbeheer"
 
 msgid "Page"
 msgstr "Pagina"
 
-#. 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 "Pan&Scan"
 
@@ -2610,7 +2554,8 @@ msgstr "PiP Instellingen"
 msgid "PicturePlayer"
 msgstr "PicturePlayer"
 
-#. 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 "Pillarbox"
 
@@ -2660,33 +2605,24 @@ msgid "Please choose the default services lists you want to install."
 msgstr "Kies de te installeren standaard zenderlijst a.u.b."
 
 msgid ""
-"Please configure or verify your Nameservers by filling out the required "
-"values.\n"
+"Please configure or verify your Nameservers by filling out the required values.\n"
 "When you are ready press OK to continue."
 msgstr ""
-"Configureer of kijk uw nameservers na door de verplichte velden in te "
-"vullen.\n"
+"Configureer of kijk uw nameservers na door de verplichte velden in te vullen.\n"
 "Druk op OK om verder te gaan."
 
 msgid ""
-"Please configure your internet connection by filling out the required "
-"values.\n"
+"Please configure your internet connection by filling out the required values.\n"
 "When you are ready press OK to continue."
 msgstr ""
 "Configureer uw internetverbinding door de verplichte velden in te vullen.\n"
 "Druk op OK om verder te gaan."
 
-msgid ""
-"Please disconnect all USB devices from your Dreambox and (re-)attach the "
-"target USB stick (minimum size is 64 MB) now!"
-msgstr ""
-"Verwijder al uw USB apparaten van uw Dreambox en plaats nu de doel USB stick "
-"(min grootte van 64 mb)!"
+msgid "Please disconnect all USB devices from your Dreambox and (re-)attach the target USB stick (minimum size is 64 MB) now!"
+msgstr "Verwijder al uw USB apparaten van uw Dreambox en plaats nu de doel USB stick (min grootte van 64 mb)!"
 
 msgid "Please do not change any values unless you know what you are doing!"
-msgstr ""
-"Wijzig hier geen instellingen indien u niet precies weet waar u mee bezig "
-"bent. "
+msgstr "Wijzig hier geen instellingen indien u niet precies weet waar u mee bezig bent. "
 
 msgid "Please enter a name for the new bouquet"
 msgstr "Voer de naam voor uw nieuwe boeket in"
@@ -2718,12 +2654,8 @@ msgstr "Geef hier uw naam (optioneel):"
 msgid "Please follow the instructions on the TV"
 msgstr "Volg nu de instructies op uw TV"
 
-msgid ""
-"Please note that the previously selected media could not be accessed and "
-"therefore the default directory is being used instead."
-msgstr ""
-"De voorheen geselecteerde media kon niet worden benaderd en om die reden "
-"wordt nu de standaard map gebruikt."
+msgid "Please note that the previously selected media could not be accessed and therefore the default directory is being used instead."
+msgstr "De voorheen geselecteerde media kon niet worden benaderd en om die reden wordt nu de standaard map gebruikt."
 
 msgid "Please press OK to continue."
 msgstr "Druk op OK om door te gaan."
@@ -2759,19 +2691,17 @@ msgid "Please select tag to filter..."
 msgstr "Selecteer markering om te filteren..."
 
 msgid "Please select target directory or medium"
-msgstr "Selecteer doel map of medium"
+msgstr "Selecteer doelmap of medium"
 
 msgid "Please select the movie path..."
 msgstr "Selecteer het opname pad..."
 
 msgid ""
-"Please select the network interface that you want to use for your internet "
-"connection.\n"
+"Please select the network interface that you want to use for your internet connection.\n"
 "\n"
 "Please press OK to continue."
 msgstr ""
-"Selecteer de netwerk interface die u wilt gebruiken voor uw "
-"internetverbinding.\n"
+"Selecteer de netwerk interface die u wilt gebruiken voor uw internetverbinding.\n"
 "\n"
 "Druk op OK om verder te gaan."
 
@@ -2802,12 +2732,8 @@ msgstr ""
 "Druk op Boeket +/- om PiP venster te vergroten of verkleinen.\n"
 "Druk op OK om terug te gaan naar TV modus of EXIT na verplaatsen."
 
-msgid ""
-"Please use the UP and DOWN keys to select your language. Afterwards press "
-"the OK button."
-msgstr ""
-"Gebruik de omhoog/omlaag toeten om de gewenste taal te selecteren. Druk "
-"daarna op OK."
+msgid "Please use the UP and DOWN keys to select your language. Afterwards press the OK button."
+msgstr "Gebruik de omhoog/omlaag toeten om de gewenste taal te selecteren. Druk daarna op OK."
 
 msgid "Please wait for activation of your network configuration..."
 msgstr "Een ogenblikje geduld a.u.b. terwijl we uw netwerk activeren..."
@@ -2825,8 +2751,7 @@ msgid "Please wait while we configure your network..."
 msgstr "Een ogenblikje geduld a.u.b. terwijl we uw netwerk configureren..."
 
 msgid "Please wait while we prepare your network interfaces..."
-msgstr ""
-"Een ogenblikje geduld a.u.b. terwijl we uw netwerk interface klaar maken..."
+msgstr "Een ogenblikje geduld a.u.b. terwijl we uw netwerk interface klaar maken..."
 
 msgid "Please wait while we test your network..."
 msgstr "Een ogenblikje geduld a.u.b. we testen uw netwerk..."
@@ -2844,13 +2769,13 @@ msgid "Plugin browser"
 msgstr "Applicatie browser"
 
 msgid "Plugin manager"
-msgstr "Pakket beheer"
+msgstr "Applicatie beheer"
 
 msgid "Plugin manager activity information"
-msgstr ""
+msgstr "Pluginbeheer activiteit informatie"
 
 msgid "Plugin manager help"
-msgstr ""
+msgstr "Help Pakketbeheer"
 
 msgid "Plugins"
 msgstr "Applicaties"
@@ -2907,7 +2832,7 @@ msgid "Press OK on your remote control to continue."
 msgstr "Druk op de OK toets om door te gaan."
 
 msgid "Press OK to activate the selected skin."
-msgstr ""
+msgstr "Druk op OK om de geselecteerde skin te activeren."
 
 msgid "Press OK to activate the settings."
 msgstr "Druk op OK om op te slaan"
@@ -2923,16 +2848,16 @@ msgid "Press OK to scan"
 msgstr "Druk OK om te zoeken."
 
 msgid "Press OK to select a Provider."
-msgstr ""
+msgstr "Druk op OK om een Zender/Provider te selecteren."
 
 msgid "Press OK to select/deselect a CAId."
-msgstr ""
+msgstr "Om een CAId te selecteren/deselecteren druk op OK."
 
 msgid "Press OK to start the scan"
 msgstr "Druk OK om te zoeken."
 
 msgid "Press OK to toggle the selection."
-msgstr ""
+msgstr "Druk op OK om te selecteren."
 
 msgid "Press OK to view full changelog"
 msgstr "Druk op OK en bekijk de volledige changelog"
@@ -3165,10 +3090,10 @@ msgid "Restore"
 msgstr "Herstellen"
 
 msgid "Restore backups"
-msgstr ""
+msgstr "Back-ups terugplaatsen"
 
 msgid "Restore is running..."
-msgstr ""
+msgstr "Terugplaatsen is bezig..."
 
 msgid "Restore running"
 msgstr "Herstellen bezig"
@@ -3176,12 +3101,8 @@ msgstr "Herstellen bezig"
 msgid "Restore system settings"
 msgstr "Herstel uw instellingen"
 
-msgid ""
-"Restoring the settings is done. Please press OK to activate the restored "
-"settings now."
-msgstr ""
-"Herstellen van de instellingen is gereed. Druk op OK om de instellingen te "
-"activeren."
+msgid "Restoring the settings is done. Please press OK to activate the restored settings now."
+msgstr "Herstellen van de instellingen is gereed. Druk op OK om de instellingen te activeren."
 
 msgid "Resume from last position"
 msgstr "Ga door op laatste positie"
@@ -3272,7 +3193,7 @@ msgid "Save Playlist"
 msgstr "Afspeellijst opslaan"
 
 msgid "Scaler sharpness"
-msgstr ""
+msgstr "Scaler scherpte"
 
 msgid "Scaling Mode"
 msgstr "Schaalmodus"
@@ -3346,24 +3267,14 @@ msgstr "Zoek band US MID"
 msgid "Scan band US SUPER"
 msgstr "Zoek band US SUPER"
 
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"WLAN USB Stick\n"
-msgstr ""
-"Zoek naar WiFi accesspoints en verbind hiermee middels uw WLAN USB Stick.\n"
+msgid "Scan your network for wireless Access Points and connect to them using your WLAN USB Stick\n"
+msgstr "Zoek naar WiFi accesspoints en verbind hiermee middels uw WLAN USB Stick.\n"
 
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"selected wireless device.\n"
-msgstr ""
-"Doorzoek uw netwerk naar draadloze Access Points en connecteer met behulp "
-"van uw geselecteerde draadloze apparaat.\n"
+msgid "Scan your network for wireless Access Points and connect to them using your selected wireless device.\n"
+msgstr "Doorzoek uw netwerk naar draadloze Access Points en connecteer met behulp van uw geselecteerde draadloze apparaat.\n"
 
-msgid ""
-"Scans default lamedbs sorted by satellite with a connected dish positioner"
-msgstr ""
-"Doorzoekt standaard lamedbs gesorteerd op satelliet, middels een verbonden "
-"DiSEqC rotor"
+msgid "Scans default lamedbs sorted by satellite with a connected dish positioner"
+msgstr "Doorzoekt standaard lamedbs gesorteerd op satelliet, middels een verbonden DiSEqC rotor"
 
 msgid "Search east"
 msgstr "Zoek oost"
@@ -3372,8 +3283,7 @@ msgid "Search west"
 msgstr "Zoek west"
 
 msgid "Searching for new installed or removed packages. Please wait..."
-msgstr ""
-"Zoeken naar nieuw geïnstalleerde of verwijderde pakketten. Een ogenblikje..."
+msgstr "Zoeken naar nieuw geïnstalleerde of verwijderde pakketten. Een ogenblikje..."
 
 msgid "Secondary DNS"
 msgstr "Secondaire DNS"
@@ -3409,7 +3319,7 @@ msgid "Select files for backup. Currently selected:\n"
 msgstr "Kies bestanden voor back-up. Momenteel geselecteerd:\n"
 
 msgid "Select files/folders to backup"
-msgstr ""
+msgstr "Kies bestanden/mappen om te back-uppen"
 
 msgid "Select image"
 msgstr "Selecteer bestand"
@@ -3430,7 +3340,7 @@ msgid "Select service to add..."
 msgstr "Selecteer zender om toe te voegen..."
 
 msgid "Select upgrade source to edit."
-msgstr ""
+msgstr "Selecteer upgrade bron om te bewerken."
 
 msgid "Select video input"
 msgstr "Selecteer video ingang"
@@ -3514,7 +3424,7 @@ msgid "Set as default Interface"
 msgstr "Als standaard interface instellen"
 
 msgid "Set available internal memory threshold for the warning."
-msgstr ""
+msgstr "Voor een waarschuwing stel de beschikbare interne geheugendrempel in."
 
 msgid "Set interface as default Interface"
 msgstr "Stel deze interface in als standaard"
@@ -3607,7 +3517,7 @@ msgid "Singlestep (GOP)"
 msgstr "Stap voor stap"
 
 msgid "Skin"
-msgstr ""
+msgstr "Skin"
 
 msgid "Skin..."
 msgstr "Skin..."
@@ -3619,7 +3529,7 @@ msgid "Sleep Timer"
 msgstr "Slaaptimer"
 
 msgid "Sleep timer action:"
-msgstr "Slaaptimer aktie:"
+msgstr "Slaaptimer actie:"
 
 msgid "Slideshow Interval (sec.)"
 msgstr "Diavoorstelling interval (sec.)"
@@ -3814,7 +3724,8 @@ msgstr "Symbolrate"
 msgid "System"
 msgstr "Systeem"
 
-#. 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 ""
 "Deze vertaling wordt u aangeboden door :\n"
@@ -3874,20 +3785,11 @@ msgstr ""
 "Bedankt voor het gebruik van deze wizard. Uw box is klaar voor gebruik.\n"
 "Druk op OK om uw Dreambox te gebruiken."
 
-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 ""
-"De DVD standaard ondersteunt geen H.264 (HDTV) video. Wil je een Dreambox "
-"formaat data DVD maken (deze speelt niet af in een DVD speler) ?"
+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 "De DVD standaard ondersteunt geen H.264 (HDTV) video. Wil je een Dreambox formaat data DVD maken (deze speelt niet af in een DVD speler) ?"
 
-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 ""
-"De USB stick is opstartbaar. Wilt u de laatste image downloaden van de feed "
-"server en opslaan op de stick ?"
+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 "De USB stick is opstartbaar. Wilt u de laatste image downloaden van de feed server en opslaan op de stick ?"
 
 msgid "The backup failed. Please choose a different backup location."
 msgstr "Back-up is mislukt. Kies een andere back-up locatie a.u.b."
@@ -3911,37 +3813,22 @@ msgstr "De volgende bestanden werden gevonden..."
 
 msgid ""
 "The input port should be configured now.\n"
-"You can now configure the screen by displaying some test pictures. Do you "
-"want to do that now?"
+"You can now configure the screen by displaying some test pictures. Do you want to do that now?"
 msgstr ""
 "De video ingang van uw TV kan nu worden ingesteld.\n"
-"U kunt uw TV instellen door een aantal testbeelden weer te geven. Wilt u dat "
-"nu doen?"
+"U kunt uw TV instellen door een aantal testbeelden weer te geven. Wilt u dat nu doen?"
 
 msgid "The installation of the default services lists is finished."
 msgstr "De installatie van de standaard zenderlijst is voltooid."
 
-msgid ""
-"The installation of the default settings is finished. You can now continue "
-"configuring your Dreambox by pressing the OK button on the remote control."
-msgstr ""
-"De installatie van de standaard zenderlijst is voltooid. U kunt nu uw "
-"Dreambox verder configureren door op OK te drukken."
+msgid "The installation of the default settings is finished. You can now continue configuring your Dreambox by pressing the OK button on the remote control."
+msgstr "De installatie van de standaard zenderlijst is voltooid. U kunt nu uw Dreambox verder configureren door op OK te drukken."
 
-msgid ""
-"The md5sum validation failed, the file may be corrupted! Are you sure that "
-"you want to burn this image to flash memory? You are doing this at your own "
-"risk!"
-msgstr ""
-"De md5 validatie is mislukt, het bestand is waarschijnlijk beschadigd! Bent "
-"u zeker dat u dit image wil schrijven naar het flash geheugen? Dit is op uw "
-"eigen risico!"
+msgid "The md5sum validation failed, the file may be corrupted! Are you sure that you want to burn this image to flash memory? You are doing this at your own risk!"
+msgstr "De md5 validatie is mislukt, het bestand is waarschijnlijk beschadigd! Bent u zeker dat u dit image wil schrijven naar het flash geheugen? Dit is op uw eigen risico!"
 
-msgid ""
-"The md5sum validation failed, the file may be downloaded incompletely or be "
-"corrupted!"
-msgstr ""
-"De md5 validatie is mislukt, het bestand is niet compleet of beschadigd!"
+msgid "The md5sum validation failed, the file may be downloaded incompletely or be corrupted!"
+msgstr "De md5 validatie is mislukt, het bestand is niet compleet of beschadigd!"
 
 msgid "The package doesn't contain anything."
 msgstr "Dit pakket bevat geen data."
@@ -3973,8 +3860,7 @@ msgid "The sleep timer has been disabled."
 msgstr "De slaaptimer is uitgeschakeld."
 
 msgid "The timer file (timers.xml) is corrupt and could not be loaded."
-msgstr ""
-"Het timer bestand (timer.xml) is beschadigd en kan niet worden geladen."
+msgstr "Het timer bestand (timer.xml) is beschadigd en kan niet worden geladen."
 
 msgid ""
 "The wireless LAN plugin is not installed!\n"
@@ -3986,13 +3872,10 @@ msgstr ""
 msgid ""
 "The wireless LAN plugin is not installed!\n"
 "Please install it."
-msgstr ""
-"De WiFi plugin is niet geïnstalleerd.Deze plugin eerst installeren a.u.b."
+msgstr "De WiFi plugin is niet geïnstalleerd.Deze plugin eerst installeren a.u.b."
 
-msgid ""
-"The wizard can backup your current settings. Do you want to do a backup now?"
-msgstr ""
-"De wizard kan uw huidige settings opslaan. Wilt u nu een back-up maken?"
+msgid "The wizard can backup your current settings. Do you want to do a backup now?"
+msgstr "De wizard kan uw huidige settings opslaan. Wilt u nu een back-up maken?"
 
 msgid "The wizard is finished now."
 msgstr "De wizard is nu gereed."
@@ -4010,7 +3893,7 @@ msgid "There are now "
 msgstr "Er zijn nu"
 
 msgid "There is nothing to be done."
-msgstr ""
+msgstr "Er is niets om uit te voeren."
 
 msgid ""
 "There might not be enough Space on the selected Partition.\n"
@@ -4020,9 +3903,7 @@ msgstr ""
 "Weet u zeker dat u wilt doorgaan?"
 
 msgid "There was an error downloading the packetlist. Please try again."
-msgstr ""
-"Er is een fout opgetreden bij het downloaden van de pakketlijst. Probeer het "
-"opnieuw."
+msgstr "Er is een fout opgetreden bij het downloaden van de pakketlijst. Probeer het opnieuw."
 
 msgid "There was an error. The package:"
 msgstr "Er is een fout. Het pakket:"
@@ -4031,26 +3912,14 @@ msgstr "Er is een fout. Het pakket:"
 msgid "This .NFI file does not contain a valid %s image!"
 msgstr "Dit .NFI bestand bevat geen geldig %s image!"
 
-msgid ""
-"This .NFI file does not have a md5sum signature and is not guaranteed to "
-"work. Do you really want to burn this image to flash memory?"
-msgstr ""
-"Dit .NFI bestand bevat geen geldige md5 signatuur en is niet gegarandeerd om "
-"te werken. Wilt u echt dit image in het flash geheugen schrijven?"
+msgid "This .NFI file does not have a md5sum signature and is not guaranteed to work. Do you really want to burn this image to flash memory?"
+msgstr "Dit .NFI bestand bevat geen geldige md5 signatuur en is niet gegarandeerd om te werken. Wilt u echt dit image in het flash geheugen schrijven?"
 
-msgid ""
-"This .NFI file has a valid md5 signature. Continue programming this image to "
-"flash memory?"
-msgstr ""
-"Dit .NFI bestand heeft een geldige md5 signatuur. Wilt u dit image in het "
-"flash geheugen schrijven?"
+msgid "This .NFI file has a valid md5 signature. Continue programming this image to flash memory?"
+msgstr "Dit .NFI bestand heeft een geldige md5 signatuur. Wilt u dit image in het flash geheugen schrijven?"
 
-msgid ""
-"This DVD RW medium is already formatted - reformatting will erase all "
-"content on the disc."
-msgstr ""
-"Dit DVD-RW medium is reeds geformatteerd - herformatteren zal alles wissen "
-"op deze disk."
+msgid "This DVD RW medium is already formatted - reformatting will erase all content on the disc."
+msgstr "Dit DVD-RW medium is reeds geformatteerd - herformatteren zal alles wissen op deze disk."
 
 #, python-format
 msgid "This Dreambox can't decode %s streams!"
@@ -4082,13 +3951,12 @@ msgid ""
 "This test checks for configured Nameservers.\n"
 "If you get a \"unconfirmed\" message:\n"
 "- please check your DHCP, cabling and Adapter setup\n"
-"- if you configured your Nameservers manually please verify your entries in "
-"the \"Nameserver\" Configuration"
+"- if you configured your Nameservers manually please verify your entries in the \"Nameserver\" Configuration"
 msgstr ""
 "Deze test controleert de Nameservers.\n"
 "Indien u een \"onbevestigd\" bericht ziet:\n"
-"- Controleer dan uw DHCP server, kabels en instellingen\n"
-"- Indien de Nameservers handmatig ingesteld zijn, controleer deze dan."
+"- controleer dan uw DHCP server, kabels en instellingen\n"
+"- indien de Nameservers handmatig ingesteld zijn, controleer deze dan."
 
 msgid ""
 "This test checks whether a network cable is connected to your LAN-Adapter.\n"
@@ -4096,8 +3964,7 @@ msgid ""
 "- verify that a network cable is attached\n"
 "- verify that the cable is not broken"
 msgstr ""
-"Deze test controleert of er een netwerkkabel met uw LAN adapter verbonden "
-"is.\n"
+"Deze test controleert of er een netwerkkabel met uw LAN adapter verbonden is.\n"
 "Indien u een \"disconnected\" bericht ziet:\n"
 "- controleer of de netwerkkabel goed aangesloten is\n"
 "- controleer of de kabel niet defect is."
@@ -4108,30 +3975,25 @@ msgid ""
 "- no valid IP Address was found\n"
 "- please check your DHCP, cabling and adapter setup"
 msgstr ""
-"Deze test controleert of er voor uw LAN adapter een geldig IP adres gevonden "
-"is.\n"
+"Deze test controleert of er voor uw LAN adapter een geldig IP adres gevonden is.\n"
 "Indien u de \"onbevestigd\" melding ziet:\n"
-"- Is er geen geldig IP adres gevonden\n"
-"- Dient u uw DHCP server, kabels en instellingen te controleren"
+"- is er geen geldig IP adres gevonden\n"
+"- dient u uw DHCP server, kabels en instellingen te controleren"
 
 msgid ""
-"This test checks whether your LAN Adapter is set up for automatic IP Address "
-"configuration with DHCP.\n"
+"This test checks whether your LAN Adapter is set up for automatic IP Address configuration with DHCP.\n"
 "If you get a \"disabled\" message:\n"
 " - then your LAN Adapter is configured for manual IP Setup\n"
-"- verify thay you have entered correct IP informations in the AdapterSetup "
-"dialog.\n"
+"- verify thay you have entered correct IP informations in the AdapterSetup dialog.\n"
 "If you get an \"enabeld\" message:\n"
 "-verify that you have a configured and working DHCP Server in your network."
 msgstr ""
-"Deze test controleert of uw LAN adapter ingesteld is voor automatisch "
-"toewijzen van het IP adres middels DHCP.\n"
+"Deze test controleert of uw LAN adapter ingesteld is voor automatisch toewijzen van het IP adres middels DHCP.\n"
 "Indien u de \"Gedeactiveerd\" melding ziet:\n"
-"- Is uw LAN adapter mogelijk handmatig ingesteld\n"
+"- is uw LAN adapter mogelijk handmatig ingesteld\n"
 "- controleer dan of u wel de juiste (IP) gegevens gebruikt heeft\n"
 "Indien u een \"Ingeschakeld\" melding ziet:\n"
-"- controleer dan of u wel een correct werkende DHCP server in uw netwerk "
-"heeft."
+"- controleer dan of u wel een correct werkende DHCP server in uw netwerk heeft."
 
 msgid "This test detects your configured LAN-Adapter."
 msgstr "Deze test detecteert de geconfigureerde LAN-adapter."
@@ -4214,17 +4076,13 @@ msgstr "Titelset modus"
 
 msgid ""
 "To update your Dreambox firmware, please follow these steps:\n"
-"1) Turn off your box with the rear power switch and plug in the bootable USB "
-"stick.\n"
-"2) Turn mains back on and hold the DOWN button on the front panel pressed "
-"for 10 seconds.\n"
+"1) Turn off your box with the rear power switch and plug in the bootable USB stick.\n"
+"2) Turn mains back on and hold the DOWN button on the front panel pressed for 10 seconds.\n"
 "3) Wait for bootup and follow instructions of the wizard."
 msgstr ""
 "Om de Dreambox firmware te upgraden, ga als volgt te werk :\n"
-"1)Zet uw box af via de knop achteraan het toestel en plaats een opstartbare "
-"USB stick.\n"
-"2)Zet de box aan via dezelfde knop en druk op de DOWN toets gedurende 10 "
-"seconden.\n"
+"1)Zet uw box af via de knop achteraan het toestel en plaats een opstartbare USB stick.\n"
+"2)Zet de box aan via dezelfde knop en druk op de DOWN toets gedurende 10 seconden.\n"
 "3)Wacht op het opstarten en volg de instructies van de wizard."
 
 msgid "Today"
@@ -4264,14 +4122,10 @@ msgid "Tries left:"
 msgstr "Aantal pogingen over:"
 
 msgid "Try to find used Transponders in cable network.. please wait..."
-msgstr ""
-"Probeert gebruikte transponders op het kabelnetwerk te vinden. Een ogenblik "
-"a.u.b..."
+msgstr "Probeert gebruikte transponders op het kabelnetwerk te vinden. Een ogenblik a.u.b..."
 
 msgid "Try to find used transponders in cable network.. please wait..."
-msgstr ""
-"Probeert gebruikte transponders op het kabelnetwerk te vinden. Een ogenblik "
-"a.u.b..."
+msgstr "Probeert gebruikte transponders op het kabelnetwerk te vinden. Een ogenblik a.u.b..."
 
 msgid "Trying to download a new packetlist. Please wait..."
 msgstr "Probeert een nieuwe pakketlijst te downloaden. Een ogenblik a.u.b..."
@@ -4386,9 +4240,7 @@ msgid "Updating finished. Here is the result:"
 msgstr "Software update gereed. Dit is het resultaat:"
 
 msgid "Updating... Please wait... This can take some minutes..."
-msgstr ""
-"Software update is bezig. Een ogenblik geduld a.u.b. Dit kan enkele minuten "
-"duren..."
+msgstr "Software update is bezig. Een ogenblik geduld a.u.b. Dit kan enkele minuten duren..."
 
 msgid "Upgrade finished."
 msgstr "Upgrade voltooid."
@@ -4435,18 +4287,14 @@ msgstr ""
 "\n"
 "Instellingen voor tuner A"
 
-msgid ""
-"Use the up/down keys on your remote control to select an option. After that, "
-"press OK."
-msgstr ""
-"U kunt met de omhoog/omlaag toets op uw afstandsbediening een optie kiezen. "
-"Druk daarna op OK."
+msgid "Use the up/down keys on your remote control to select an option. After that, press OK."
+msgstr "U kunt met de omhoog/omlaag toets op uw afstandsbediening een optie kiezen. Druk daarna op OK."
 
 msgid "Use this video enhancement settings?"
 msgstr "Gebruik deze videoverbetering instellingen?"
 
 msgid "Use time of currently running service"
-msgstr ""
+msgstr "Gebruik de tijd van de momenteel lopende dienst"
 
 msgid "Use usals for this sat"
 msgstr "USALS aanschakelen"
@@ -4488,7 +4336,7 @@ msgid "Video Wizard"
 msgstr "Video Wizard"
 
 msgid "Video enhancement preview"
-msgstr "Videoverbetering preview"
+msgstr "Voorbeeld  videoverbetering"
 
 msgid "Video enhancement settings"
 msgstr "Videoverbetering instellingen..."
@@ -4499,8 +4347,7 @@ msgstr "Videoverbetering instelling..."
 msgid ""
 "Video input selection\n"
 "\n"
-"Please press OK if you can see this page on your TV (or select a different "
-"input port).\n"
+"Please press OK if you can see this page on your TV (or select a different input port).\n"
 "\n"
 "The next input port will be automatically probed in 10 seconds."
 msgstr ""
@@ -4537,8 +4384,7 @@ msgid "View list of available CommonInterface extensions"
 msgstr "Bekijk de lijst met beschikbare CommonInterface extensies"
 
 msgid "View list of available Display and Userinterface extensions."
-msgstr ""
-"Bekijk de lijst met beschikbare Display en gebruikersinterface extensies."
+msgstr "Bekijk de lijst met beschikbare Display en gebruikersinterface extensies."
 
 msgid "View list of available EPG extensions."
 msgstr "Bekijk de lijst met beschikbare EPG-extensies."
@@ -4604,16 +4450,13 @@ msgid "Waiting"
 msgstr "Wacht..."
 
 msgid "Warn if free space drops below (kB):"
-msgstr ""
+msgstr "Waarschuwen als vrije ruimte daalt onder (kB):"
 
 msgid ""
-"We will now test if your TV can also display this resolution at 50hz. If "
-"your screen goes black, wait 20 seconds and it will switch back to 60hz.\n"
+"We will now test if your TV can also display this resolution at 50hz. If your screen goes black, wait 20 seconds and it will switch back to 60hz.\n"
 "Please press OK to begin."
 msgstr ""
-"Er zal nu worden getest of uw TV deze resolutie ook bij 50Hz weer kan geven. "
-"Indien u nu zwart beeld krijgt, dient u 20 seconden te wachten, waarna er "
-"teruggeschakelt wordt naar 60Hz.\n"
+"Er zal nu worden getest of uw TV deze resolutie ook bij 50Hz weer kan geven. Indien u nu zwart beeld krijgt, dient u 20 seconden te wachten, waarna er teruggeschakelt wordt naar 60Hz.\n"
 "Druk nu op OK om met de test te beginnen."
 
 msgid "Wed"
@@ -4628,48 +4471,42 @@ msgstr "Weekdag"
 msgid ""
 "Welcome to the Cutlist editor.\n"
 "\n"
-"Seek to the start of the stuff you want to cut away. Press OK, select 'start "
-"cut'.\n"
+"Seek to the start of the stuff you want to cut away. Press OK, select 'start cut'.\n"
 "\n"
 "Then seek to the end, press OK, select 'end cut'. That's it."
 msgstr ""
-"Wekom bij de Cutlist editor.\n"
+"Welkom bij de Cutlist editor.\n"
 "\n"
-"Start met zoeken wat je wenst te verwijderen. Druk op OK, selecteer 'start "
-"cut'.\n"
+"Start met zoeken wat je wenst te verwijderen. Druk op OK, selecteer 'start cut'.\n"
 "\n"
 "Ga naar het einde, druk op OK, selecteer 'end cut'. Eenvoudiger kan niet."
 
-msgid ""
-"Welcome to the Image upgrade wizard. The wizard will assist you in upgrading "
-"the firmware of your Dreambox by providing a backup facility for your "
-"current settings and a short explanation of how to upgrade your firmware."
-msgstr ""
-"Welkom bij de software update wizard. De wizard bied u hulp bij het "
-"vernieuwen van de software in uw Dreambox, het maken van een back-up van uw "
-"huidige instellingen en geeft u een korte uitleg over dit proces."
+msgid "Welcome to the Image upgrade wizard. The wizard will assist you in upgrading the firmware of your Dreambox by providing a backup facility for your current settings and a short explanation of how to upgrade your firmware."
+msgstr "Welkom bij de software update wizard. De wizard bied u hulp bij het vernieuwen van de software in uw Dreambox, het maken van een back-up van uw huidige instellingen en geeft u een korte uitleg over dit proces."
 
 msgid ""
 "Welcome to the cleanup wizard.\n"
 "\n"
 "We have detected that your available internal memory has dropped below 2MB.\n"
-"To ensure stable operation of your Dreambox, the internal memory should be "
-"cleaned up.\n"
+"To ensure stable operation of your Dreambox, the internal memory should be cleaned up.\n"
 "You can use this wizard to remove some extensions.\n"
 msgstr ""
+"Welkom bij de cleanup wizard.\n"
+"\n"
+"We hebben geconstateerd dat uw beschikbare interne geheugen is gedaald tot onder de 2 MB.\n"
+"Met het oog op een stabiele werking van je Dreambox, moet het interne geheugen worden opgeruimd.\n"
+"U kunt deze wizard gebruiken om een aantal extensies te verwijderen.\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"
+"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 ""
 "Welkom.\n"
 "\n"
-"Als u uw Dreambox wenst te connecteren naar het internet, kan deze wizard u "
-"helpen bij de basis netwerkinstellingen van uw Dreambox .\n"
+"Als u uw Dreambox wenst te connecteren naar het internet, kan deze wizard u helpen bij de basis netwerkinstellingen van uw Dreambox .\n"
 "\n"
 "Druk op  OK om je netwerk te configureren."
 
@@ -4699,16 +4536,14 @@ msgstr "Wat te doen met ingediende crashlogs?"
 msgid ""
 "When you do a factory reset, you will lose ALL your configuration data\n"
 "(including bouquets, services, satellite data ...)\n"
-"After completion of factory reset, your receiver will restart "
-"automatically!\n"
+"After completion of factory reset, your receiver will restart automatically!\n"
 "\n"
 "Really do a factory reset?"
 msgstr ""
 "Wanneer u de fabrieksinstellingen wenst, verliest u\n"
 "alle gegevens van uw configuratie.\n"
 "(inclusief boeketten, zenders, satellietdata, etc ...)\n"
-"Na voltooiing van de fabrieksinstellingen, zal uw ontvanger automatisch "
-"herstarten!\n"
+"Na voltooiing van de fabrieksinstellingen, zal uw ontvanger automatisch herstarten!\n"
 "\n"
 "Werkelijk uitvoeren?"
 
@@ -4784,12 +4619,8 @@ msgstr "Installatie kan worden geannulleerd."
 msgid "You can cancel the removal."
 msgstr "Verwijderen kan worden geannuleerd."
 
-msgid ""
-"You can choose some default settings now. Please select the settings you "
-"want to be installed."
-msgstr ""
-"U kunt nu een standaard zenderlijst installeren. Kies de zenderlijst die u "
-"wenst te installeren."
+msgid "You can choose some default settings now. Please select the settings you want to be installed."
+msgstr "U kunt nu een standaard zenderlijst installeren. Kies de zenderlijst die u wenst te installeren."
 
 msgid "You can choose, what you want to install..."
 msgstr "U kunt hier kiezen wat u wenst te installeren."
@@ -4806,89 +4637,51 @@ msgstr "U kunt dit niet wissen!"
 msgid "You chose not to install any default services lists."
 msgstr "U heeft er voor gekozen om geen standaard zenderlijst te installeren."
 
-msgid ""
-"You chose not to install any default settings. You can however install the "
-"default settings later in the settings menu."
-msgstr ""
-"U heeft er voor gekozen om standaard instellingen niet te gebruiken. U kunt "
-"dit later vanuit het menu alsnog doen."
+msgid "You chose not to install any default settings. You can however install the default settings later in the settings menu."
+msgstr "U heeft er voor gekozen om standaard instellingen niet te gebruiken. U kunt dit later vanuit het menu alsnog doen."
 
-msgid ""
-"You chose not to install anything. Please press OK finish the install wizard."
-msgstr ""
-"U heeft er voor gekozen om niets te installeren. Druk op OK om de wizard af "
-"te sluiten. "
+msgid "You chose not to install anything. Please press OK finish the install wizard."
+msgstr "U heeft er voor gekozen om niets te installeren. Druk op OK om de wizard af te sluiten. "
 
-msgid ""
-"You do not seem to have a harddisk in your Dreambox. So backing up to a "
-"harddisk is not an option for you."
-msgstr ""
-"Er bevind zich waarschijnlijk geen harde schijf in uw Dreambox. U kunt de "
-"instellingen in dit geval niet naar de harde schijf opslaan."
+msgid "You do not seem to have a harddisk in your Dreambox. So backing up to a harddisk is not an option for you."
+msgstr "Er bevind zich waarschijnlijk geen harde schijf in uw Dreambox. U kunt de instellingen in dit geval niet naar de harde schijf opslaan."
 
 msgid ""
-"You have chosen to backup to a compact flash card. The card must be in the "
-"slot. We do not verify if it is really used at the moment. So better backup "
-"to the harddisk!\n"
+"You have chosen to backup to a compact flash card. The card must be in the slot. We do not verify if it is really used at the moment. So better backup to the harddisk!\n"
 "Please press OK to start the backup now."
 msgstr ""
-"U heeft gekozen om de instellingen op een compact flash kaart op te slaan. "
-"De kaart moet in het slot zitten. De inhoud van de kaart wordt overschreven. "
-"Mogelijk is het beter de instellingen op de harde schijf op te slaan!\n"
+"U heeft gekozen om de instellingen op een compact flash kaart op te slaan. De kaart moet in het slot zitten. De inhoud van de kaart wordt overschreven. Mogelijk is het beter de instellingen op de harde schijf op te slaan!\n"
 "Druk op OK om de back-up te starten."
 
 msgid ""
 "You have chosen to backup to an usb drive. Better backup to the harddisk!\n"
 "Please press OK to start the backup now."
 msgstr ""
-"U heeft gekozen uw instellingen op een USB stick op te slaan. Gebruik van "
-"een harde schijf voor dit doel wordt aangeraden!\n"
+"U heeft gekozen uw instellingen op een USB stick op te slaan. Gebruik van een harde schijf voor dit doel wordt aangeraden!\n"
 "Druk op OK om de back-up te starten."
 
-msgid ""
-"You have chosen to backup to your harddisk. Please press OK to start the "
-"backup now."
-msgstr ""
-"U heeft gekozen uw instellingen op de harde schijf op te slaan. Druk op OK "
-"om de back-up te starten."
+msgid "You have chosen to backup to your harddisk. Please press OK to start the backup now."
+msgstr "U heeft gekozen uw instellingen op de harde schijf op te slaan. Druk op OK om de back-up te starten."
 
-msgid ""
-"You have chosen to backup your settings. Please press OK to start the backup "
-"now."
-msgstr ""
-"U heeft gekozen om uw instellingen te back-uppen. Druk op OK om te beginnen "
-"met de back-up."
+msgid "You have chosen to backup your settings. Please press OK to start the backup now."
+msgstr "U heeft gekozen om uw instellingen te back-uppen. Druk op OK om te beginnen met de back-up."
 
-msgid ""
-"You have chosen to create a new .NFI flasher bootable USB stick. This will "
-"repartition the USB stick and therefore all data on it will be erased."
-msgstr ""
-"U heeft gekozen om een nieuwe .NFI flasher opstart USB stick aan te maken. "
-"Alle data op de USB stick gaat onherroepelijk verloren."
+msgid "You have chosen to create a new .NFI flasher bootable USB stick. This will repartition the USB stick and therefore all data on it will be erased."
+msgstr "U heeft gekozen om een nieuwe .NFI flasher opstart USB stick aan te maken. Alle data op de USB stick gaat onherroepelijk verloren."
 
-msgid ""
-"You have chosen to restore your settings. Enigma2 will restart after "
-"restore. Please press OK to start the restore now."
-msgstr ""
-"U heeft gekozen om uw instellingen te herstellen. Enigma2 zal herstarten na "
-"het herstel. Druk op OK om te beginnen met het herstel."
+msgid "You have chosen to restore your settings. Enigma2 will restart after restore. Please press OK to start the restore now."
+msgstr "U heeft gekozen om uw instellingen te herstellen. Enigma2 zal herstarten na het herstel. Druk op OK om te beginnen met het herstel."
 
 #, python-format
 msgid "You have to wait %s!"
 msgstr "Wacht op %s!"
 
 msgid ""
-"You need a PC connected to your dreambox. If you need further instructions, "
-"please visit the website http://www.dm7025.de.\n"
-"Your dreambox will now be halted. After you have performed the update "
-"instructions from the website, your new firmware will ask you to restore "
-"your settings."
+"You need a PC connected to your dreambox. If you need further instructions, please visit the website http://www.dm7025.de.\n"
+"Your dreambox will now be halted. After you have performed the update instructions from the website, your new firmware will ask you to restore your settings."
 msgstr ""
-"U dient uw PC met uw Dreambox te verbinden. Voor meer informatie verwijzen "
-"wij u naar de website http://www.dm7025.de.\n"
-"De dreambox word nu uitgeschakelt. Indien u deze aanwijzingen nauwgezet "
-"volgt, zal de Dreambox u na de update vragen of u uw instellingen terug wilt "
-"plaatsen."
+"U dient uw PC met uw Dreambox te verbinden. Voor meer informatie verwijzen wij u naar de website http://www.dream-multimedia-tv.de.\n"
+"De dreambox word nu uitgeschakelt. Indien u deze aanwijzingen nauwgezet volgt, zal de Dreambox u na de update vragen of u uw instellingen terug wilt plaatsen."
 
 msgid ""
 "You need to set a pin code and hide it from your children.\n"
@@ -4918,29 +4711,17 @@ msgstr "Uw Dreambox zal na OK drukken herstarten."
 msgid "Your TV works with 50 Hz. Good!"
 msgstr "Uw TV werkt prima op 50Hz!"
 
-msgid ""
-"Your backup succeeded. We will now continue to explain the further upgrade "
-"process."
-msgstr ""
-"De back-up is geslaagd. U krijgt nu een korte uitleg over het vervolg van "
-"het update proces."
+msgid "Your backup succeeded. We will now continue to explain the further upgrade process."
+msgstr "De back-up is geslaagd. U krijgt nu een korte uitleg over het vervolg van het update proces."
 
-msgid ""
-"Your collection exceeds the size of a single layer medium, you will need a "
-"blank dual layer DVD!"
-msgstr ""
-"Uw verzameling is groter dan wat erop een enkel laags medium past, u heeft "
-"een lege dubbel laags DVD nodig!"
+msgid "Your collection exceeds the size of a single layer medium, you will need a blank dual layer DVD!"
+msgstr "Uw verzameling is groter dan wat erop een enkel laags medium past, u heeft een lege dubbel laags DVD nodig!"
 
 msgid "Your dreambox is shutting down. Please stand by..."
 msgstr "Uw Dreambox wordt nu afgesloten. Een ogenblik a.u.b..."
 
-msgid ""
-"Your dreambox isn't connected to the internet properly. Please check it and "
-"try again."
-msgstr ""
-"Uw Dreambox heeft geen verbinding met het internet kunnen maken. Controleer "
-"instellingen en kabels en probeer opnieuw."
+msgid "Your dreambox isn't connected to the internet properly. Please check it and try again."
+msgstr "Uw Dreambox heeft geen verbinding met het internet kunnen maken. Controleer instellingen en kabels en probeer opnieuw."
 
 msgid "Your email address:"
 msgstr "Uw e-mailadres:"
@@ -5027,10 +4808,10 @@ msgid "activate current configuration"
 msgstr "activeer huidige configuratie"
 
 msgid "add Provider"
-msgstr "Provider toevoegen"
+msgstr "Provider"
 
 msgid "add Service"
-msgstr "Zender toevoegen"
+msgstr "Zender"
 
 msgid "add a nameserver entry"
 msgstr "voeg een nameserver toe"
@@ -5094,13 +4875,13 @@ msgid "assigned CAIds"
 msgstr "Toegewezen CAids:"
 
 msgid "assigned CAIds:"
-msgstr ""
+msgstr "Toegewezen CAids:"
 
 msgid "assigned Services/Provider"
 msgstr "Toegewezen Zenders/Provider:"
 
 msgid "assigned Services/Provider:"
-msgstr ""
+msgstr "Toegewezen Zenders/Provider:"
 
 #, python-format
 msgid "audio track (%s) format"
@@ -5154,7 +4935,7 @@ msgid "chapters"
 msgstr "hoofdstukken"
 
 msgid "choose destination directory"
-msgstr "Kies doel map"
+msgstr "Kies doelmap"
 
 msgid "circular left"
 msgstr "circular links"
@@ -5205,7 +4986,7 @@ msgid "delete file"
 msgstr "Verwijder bestand"
 
 msgid "delete playlist entry"
-msgstr "wis item in de afspeellijst"
+msgstr "Wis item in de afspeellijst"
 
 msgid "delete saved playlist"
 msgstr "Opgeslagen afspeellijst wissen"
@@ -5229,7 +5010,7 @@ msgid "do not change"
 msgstr "niet schakelen"
 
 msgid "do nothing"
-msgstr "Geen aktie"
+msgstr "Geen actie"
 
 msgid "don't record"
 msgstr "Niet opnemen"
@@ -5387,16 +5168,16 @@ msgid "insert mark here"
 msgstr "Markeerpunt invoegen"
 
 msgid "jump back to the previous title"
-msgstr "terug naar vorige titel"
+msgstr "Terug naar vorige titel"
 
 msgid "jump forward to the next title"
-msgstr "vooruit naar volgende titel"
+msgstr "Vooruit naar volgende titel"
 
 msgid "jump to listbegin"
-msgstr "naar begin lijst "
+msgstr "Ga naar begin lijst "
 
 msgid "jump to listend"
-msgstr "naar einde lijst"
+msgstr "Ga naar einde lijst"
 
 msgid "jump to next marked position"
 msgstr "spring naar de volgende markering"
@@ -5429,7 +5210,7 @@ msgid "load playlist"
 msgstr "Afspeellijst laden"
 
 msgid "locked"
-msgstr "Ja"
+msgstr "vergrendeld"
 
 msgid "loopthrough to"
 msgstr "Doorlus naar"
@@ -5438,7 +5219,7 @@ msgid "manual"
 msgstr "handmatig"
 
 msgid "menu"
-msgstr "menu"
+msgstr "Menu"
 
 msgid "menulist"
 msgstr "menulijst"
@@ -5486,7 +5267,7 @@ msgid "next channel in history"
 msgstr "Volgende zender in geschiedenis"
 
 msgid "no"
-msgstr "nee"
+msgstr "Nee"
 
 msgid "no CAId selected"
 msgstr "Geen CAId geselecteerd"
@@ -5498,7 +5279,7 @@ msgid "no HDD found"
 msgstr "geen harde schijf gevonden"
 
 msgid "no Services/Providers selected"
-msgstr ""
+msgstr "Geen Zenders/Providers geselecteerd"
 
 msgid "no module found"
 msgstr "Geen module gevonden"
@@ -5513,7 +5294,7 @@ msgid "none"
 msgstr "geen"
 
 msgid "not locked"
-msgstr "Nee"
+msgstr "niet vergrendeld"
 
 msgid "not used"
 msgstr "niet gebruikt"
@@ -5558,7 +5339,7 @@ msgid "pass"
 msgstr "passage"
 
 msgid "pause"
-msgstr "pause"
+msgstr "Pause"
 
 msgid "play entry"
 msgstr "Afspelen"
@@ -5633,7 +5414,7 @@ msgid "repeated"
 msgstr "herhalen"
 
 msgid "rewind to the previous chapter"
-msgstr "terugspoelen naar vorig hoofdstuk"
+msgstr "Terugspoelen naar vorig hoofdstuk"
 
 msgid "right"
 msgstr "rechts"
@@ -5787,7 +5568,7 @@ msgid "stop PiP"
 msgstr "Stop PiP"
 
 msgid "stop entry"
-msgstr "stoppen"
+msgstr "Stoppen"
 
 msgid "stop recording"
 msgstr "Stop opname"
@@ -5808,7 +5589,7 @@ msgid "switch to playlist"
 msgstr "Ga naar afspeellijst"
 
 msgid "switch to the next angle"
-msgstr "schakel naar de volgende hoek"
+msgstr "Schakel naar de volgende hoek"
 
 msgid "switch to the next audio track"
 msgstr "Volgend audio spoor"
@@ -5886,17 +5667,13 @@ msgid "yellow"
 msgstr "geel"
 
 msgid "yes"
-msgstr "ja"
+msgstr "Ja"
 
 msgid "yes (keep feeds)"
 msgstr "ja (bewaar feeds)"
 
-msgid ""
-"your dreambox might be unusable now. Please consult the manual for further "
-"assistance before rebooting your dreambox."
-msgstr ""
-"uw Dreambox is nu mogelijk onbruikbaar. Raadpleeg de handleiding voordat u "
-"de Dreambox herstart."
+msgid "your dreambox might be unusable now. Please consult the manual for further assistance before rebooting your dreambox."
+msgstr "uw Dreambox is nu mogelijk onbruikbaar. Raadpleeg de handleiding voordat u de Dreambox herstart."
 
 msgid "zap"
 msgstr "zap"
@@ -5930,9 +5707,7 @@ msgstr "zapte"
 #~ msgstr "Details"
 
 #~ msgid "Do you want to continue installing or removing selected plugins?\n"
-#~ msgstr ""
-#~ "Wilt u doorgaan met het installeren of verwijderen van de geselecteerde "
-#~ "applicaties?\n"
+#~ msgstr "Wilt u doorgaan met het installeren of verwijderen van de geselecteerde applicaties?\n"
 
 #~ msgid "Edit IPKG source URL..."
 #~ msgstr "Wijzig IPKG bron URL..."
index 6bfa39a4bf9468581887af27de197ef7dc92c2f7..6e46eb881842d3d3b51a2156b58dff7d83af0829 100755 (executable)
--- a/po/sr.po
+++ b/po/sr.po
@@ -1,3 +1,4 @@
+# 
 msgid ""
 msgstr ""
 "Project-Id-Version: Enigma2\n"
@@ -10,8 +11,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Poedit-Language: Serbian\n"
-"X-Poedit-Country: SERBIA\n"
 "X-Poedit-SourceCharset: utf-8\n"
+"X-Poedit-Country: SERBIA\n"
 
 msgid ""
 "\n"
@@ -119,7 +120,7 @@ msgid " updates available."
 msgstr "ažuriranja dostupna."
 
 msgid " wireless networks found!"
-msgstr ""
+msgstr "Bežične mreža pronađene!"
 
 msgid "#000000"
 msgstr "#000000"
@@ -199,10 +200,8 @@ msgstr "* Dostupan samo kod unošenja skrivenog SSID ili mrežnog ključa "
 msgid ".NFI Download failed:"
 msgstr ".NFI skidanje nije uspelo:"
 
-msgid ""
-".NFI file passed md5sum signature check. You can safely flash this image!"
-msgstr ""
-".NFI datoteka je prošla proveru potpisa.Možeš sigurno flešovati imidž! "
+msgid ".NFI file passed md5sum signature check. You can safely flash this image!"
+msgstr ".NFI datoteka je prošla proveru potpisa.Možeš sigurno flešovati imidž! "
 
 msgid "/usr/share/enigma2 directory"
 msgstr "/usr/share/enigma2 direktorijum"
@@ -217,7 +216,7 @@ msgid "1"
 msgstr "1"
 
 msgid "1 wireless network found!"
-msgstr ""
+msgstr "Jedna bežična mreža nađena!"
 
 msgid "1.0"
 msgstr "1.0"
@@ -349,19 +348,11 @@ msgstr ""
 "Snimanje je trenutno u toku.\n"
 "Šta želite da uradte?"
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"configure the positioner."
-msgstr ""
-"Snimanje je u toku. Molim zaustavite snimanje pre nego što pokušate "
-"konfigurisati pozicioner."
+msgid "A recording is currently running. Please stop the recording before trying to configure the positioner."
+msgstr "Snimanje je u toku. Molim zaustavite snimanje pre nego što pokušate konfigurisati pozicioner."
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"start the satfinder."
-msgstr ""
-"Snimanje je trenutno u toku. Molim zaustavite snimanje pre nego što "
-"pokrenete satelitski pretraživač."
+msgid "A recording is currently running. Please stop the recording before trying to start the satfinder."
+msgstr "Snimanje je trenutno u toku. Molim zaustavite snimanje pre nego što pokrenete satelitski pretraživač."
 
 #, python-format
 msgid "A required tool (%s) was not found."
@@ -416,7 +407,7 @@ msgid "About..."
 msgstr "O programu..."
 
 msgid "Accesspoint:"
-msgstr ""
+msgstr "Pristupna tačka:"
 
 msgid "Action on long powerbutton press"
 msgstr "Dejstvo za dugo pritisnutu tipku paljenja"
@@ -463,12 +454,8 @@ msgstr "Dodaj u buket"
 msgid "Add to favourites"
 msgstr "Dodaj u favorite"
 
-msgid ""
-"Adds enigma2 settings and dreambox model informations like SN, rev... if "
-"enabled."
-msgstr ""
-"Dodaje enigma2 postavke i informacije o modelu drimboksa kao SN,rev...ako je "
-"uključen."
+msgid "Adds enigma2 settings and dreambox model informations like SN, rev... if enabled."
+msgstr "Dodaje enigma2 postavke i informacije o modelu drimboksa kao SN,rev...ako je uključen."
 
 msgid "Adds network configuration if enabled."
 msgstr "Dodaje mrežnu konfiguraciju ako je aktivirana."
@@ -476,16 +463,8 @@ msgstr "Dodaje mrežnu konfiguraciju ako je aktivirana."
 msgid "Adds wlan configuration if enabled."
 msgstr "Dodaje wlan konfiguraciju ako je ukljucen."
 
-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 ""
-"Podesi postavke boje,tako da su sve senke boja raspoznatljive,ali izgledaju "
-"maksimalno zasićene.Ako ste zadovoljni rezultatom,pritisnite OK da zatvorite "
-"fino video-podešavanje,ili koristite numeričke tipke da izaberete druge test "
-"ekrane. "
+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 "Podesi postavke boje,tako da su sve senke boja raspoznatljive,ali izgledaju maksimalno zasićene.Ako ste zadovoljni rezultatom,pritisnite OK da zatvorite fino video-podešavanje,ili koristite numeričke tipke da izaberete druge test ekrane. "
 
 msgid "Advanced"
 msgstr "Napredno"
@@ -505,12 +484,8 @@ msgstr "Napredno vraćanje"
 msgid "After event"
 msgstr "Posle dešavanja"
 
-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 ""
-"Nakon što čarobnjak završi,treba da zaštitite pojedine kanale. Pogledajte u "
-"drimbox uputstva kako da to uradite."
+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 "Nakon što čarobnjak završi,treba da zaštitite pojedine kanale. Pogledajte u drimbox uputstva kako da to uradite."
 
 msgid "Album"
 msgstr "Album"
@@ -665,8 +640,7 @@ msgid "Backup failed."
 msgstr "Rezervna kopija nije uspela"
 
 msgid "Backup is done. Please press OK to see the result."
-msgstr ""
-"Sigurnosna kopija je napravljena. Molim pritisnite OK za pregled rezultata."
+msgstr "Sigurnosna kopija je napravljena. Molim pritisnite OK za pregled rezultata."
 
 msgid "Backup is running..."
 msgstr "Bekap u toku..."
@@ -699,7 +673,7 @@ msgid "Behavior when a movie reaches the end"
 msgstr "Način rada kad je film stigao do kraja"
 
 msgid "Bitrate:"
-msgstr ""
+msgstr "Bit rata:"
 
 msgid "Block noise reduction"
 msgstr "Blokiraj smanjenje šuma"
@@ -725,11 +699,8 @@ msgstr "Nareži na DVD"
 msgid "Bus: "
 msgstr "Bus:"
 
-msgid ""
-"By pressing the OK Button on your remote control, the info bar is being "
-"displayed."
-msgstr ""
-"Pritiskom na tipku OK daljinskog upravljača, info traka će biti prikazana."
+msgid "By pressing the OK Button on your remote control, the info bar is being displayed."
+msgstr "Pritiskom na tipku OK daljinskog upravljača, info traka će biti prikazana."
 
 msgid "C"
 msgstr "C"
@@ -825,7 +796,7 @@ msgid "Choose Tuner"
 msgstr "Odaberi tjuner"
 
 msgid "Choose a wireless network"
-msgstr ""
+msgstr "Izaberi bežičnu mrežu"
 
 msgid "Choose backup files"
 msgstr "Izaberite snimljene datoteke  "
@@ -939,19 +910,19 @@ msgid "Configuration Mode"
 msgstr "Mod konfiguracije"
 
 msgid "Configure interface"
-msgstr ""
+msgstr "Konfiguriši interfejs"
 
 msgid "Configure nameservers"
-msgstr ""
+msgstr "Konfiguriši nejmservere"
 
 msgid "Configure your internal LAN"
-msgstr ""
+msgstr "Konfiguriši svoj interni LAN"
 
 msgid "Configure your network again"
-msgstr ""
+msgstr "Konfiguriši svoju mrežu ponovo"
 
 msgid "Configure your wireless LAN again"
-msgstr ""
+msgstr "Konfiguriši svoj bežični LAN ponovo"
 
 msgid "Configuring"
 msgstr "Konfigurišem"
@@ -963,7 +934,7 @@ msgid "Connect"
 msgstr "Spojiti"
 
 msgid "Connect to a Wireless Network"
-msgstr ""
+msgstr "Spoji se na bežičnu mrežu"
 
 msgid "Connected to"
 msgstr "Povezan sa"
@@ -1198,7 +1169,7 @@ msgid "DiSEqC repeats"
 msgstr "DiSEqC ponavljanja"
 
 msgid "DiSEqC-Tester settings"
-msgstr ""
+msgstr "Postavke DISEqC testera"
 
 msgid "Dialing:"
 msgstr "Zovem:"
@@ -1214,7 +1185,7 @@ msgid "Directory %s nonexistent."
 msgstr "Direktorijum %s ne postoji"
 
 msgid "Directory browser"
-msgstr ""
+msgstr "Pretraživač direktorijuma"
 
 msgid "Disable"
 msgstr "Onemogući"
@@ -1350,12 +1321,8 @@ msgstr "Želite li vratiti vaše postavke iz sigurnosne kopije?"
 msgid "Do you want to resume this playback?"
 msgstr "Želite li nastaviti snimak?"
 
-msgid ""
-"Do you want to submit your email address and name so that we can contact you "
-"if needed?"
-msgstr ""
-"Da li želite dostaviti vaš imejl i ime da možemo da vas kontaktiramo u "
-"slučaju potrebe?"
+msgid "Do you want to submit your email address and name so that we can contact you if needed?"
+msgstr "Da li želite dostaviti vaš imejl i ime da možemo da vas kontaktiramo u slučaju potrebe?"
 
 msgid "Do you want to update your Dreambox?"
 msgstr "Da li želite da ažurirate vaš drimbox?"
@@ -1496,7 +1463,7 @@ msgstr "Omogućeno"
 
 #, python-format
 msgid "Encrypted: %s"
-msgstr ""
+msgstr "Kodirano: %s"
 
 msgid "Encryption"
 msgstr "Šifrovanje"
@@ -1511,7 +1478,7 @@ msgid "Encryption Type"
 msgstr "Tip šifrovanja"
 
 msgid "Encryption:"
-msgstr ""
+msgstr "Kodiranje:"
 
 msgid "End time"
 msgstr "Završno vreme"
@@ -1571,8 +1538,7 @@ msgid "Enter the service pin"
 msgstr "Unesite pin kanala"
 
 msgid "Enter your email address so that we can contact you if needed."
-msgstr ""
-"Unesite vašu imejl adresu tako da vas možemo kontaktirati ako je potrebno."
+msgstr "Unesite vašu imejl adresu tako da vas možemo kontaktirati ako je potrebno."
 
 msgid "Error"
 msgstr "Greška"
@@ -1613,7 +1579,7 @@ msgid "Exit editor"
 msgstr "Izađi iz editora"
 
 msgid "Exit network wizard"
-msgstr ""
+msgstr "Izađi iz mrež. čarob."
 
 msgid "Exit the cleanup wizard"
 msgstr "Izađite iz čarobnjaka za čišćenje"
@@ -1681,8 +1647,7 @@ msgstr "Završeno je restartovanje vaše mreže"
 msgid "Finnish"
 msgstr "Finski"
 
-msgid ""
-"First we need to download the latest boot environment for the USB flasher."
+msgid "First we need to download the latest boot environment for the USB flasher."
 msgstr "Treba prethodno skinuti poslednje but okruženje za USB flešer"
 
 msgid "Flash"
@@ -1805,7 +1770,7 @@ msgid "Hidden network SSID"
 msgstr "Skriveni mrežni SSID"
 
 msgid "Hidden networkname"
-msgstr ""
+msgstr "Skriveno mrežno ime"
 
 msgid "Hierarchy Information"
 msgstr "Informacije hijerarhije"
@@ -1854,22 +1819,13 @@ msgstr ""
 "vašim skart priključkom. Pritisnite OK za povratak."
 
 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 ""
-"Ako vaš TV ima poboljšavanje osvetljenja ili kontrasta,isključite ga.Ako "
-"imate nešto zvano  \"dynamic \",postavite na standarno.Podesite nivo "
-"pozadinskog osvetljenja na vrednosti po vašem ukusu.Smanjite kontrast na "
-"vašem TV koliko je moguće.\n"
-"Zatim smanjite do minimuma osvetljenje,ali budite sigurni da se najniže "
-"senke sive razaznaju.\n"
+"Ako vaš TV ima poboljšavanje osvetljenja ili kontrasta,isključite ga.Ako imate nešto zvano  \"dynamic \",postavite na standarno.Podesite nivo pozadinskog osvetljenja na vrednosti po vašem ukusu.Smanjite kontrast na vašem TV koliko je moguće.\n"
+"Zatim smanjite do minimuma osvetljenje,ali budite sigurni da se najniže senke sive razaznaju.\n"
 "Ne brinite sada za svetle senke.One će biti postavljene u sledećem koraku.\n"
 "Ako ste zadovoljni rezultatom,stisnite OK."
 
@@ -1882,10 +1838,8 @@ msgstr "Nadogradnja-imidža"
 msgid "In Progress"
 msgstr "U toku"
 
-msgid ""
-"In order to record a timer, the TV was switched to the recording service!\n"
-msgstr ""
-"Da bi počelo snimanje po tajmeru,TV je prebačen na kanal za snimanje!\n"
+msgid "In order to record a timer, the TV was switched to the recording service!\n"
+msgstr "Da bi počelo snimanje po tajmeru,TV je prebačen na kanal za snimanje!\n"
 
 msgid "Include your email and name (optional) in the mail?"
 msgstr "Uključite vaš imejl i ime (opciono) u poruku?"
@@ -1973,7 +1927,7 @@ msgstr "Integrisana bežična veza"
 
 #, python-format
 msgid "Interface: %s"
-msgstr ""
+msgstr "Interfejs: %s"
 
 msgid "Intermediate"
 msgstr "Srednje"
@@ -2006,7 +1960,8 @@ msgstr "Italijanski"
 msgid "Job View"
 msgstr "Pregled poslova"
 
-#. 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 "Samo razmeri"
 
@@ -2061,7 +2016,8 @@ msgstr "Napustiti DVD plejer"
 msgid "Left"
 msgstr "Levo"
 
-#. 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 "Letterbox"
 
@@ -2081,7 +2037,7 @@ msgid "Limits on"
 msgstr "Limite na"
 
 msgid "Link Quality:"
-msgstr ""
+msgstr "Kvalitet linka:"
 
 msgid "Link:"
 msgstr "Link:"
@@ -2160,7 +2116,7 @@ msgstr "Margina pre snimanja (minuti)"
 
 #, python-format
 msgid "Max. Bitrate: %s"
-msgstr ""
+msgstr "Maks. Bit rata: %s"
 
 msgid "Media player"
 msgstr "Medija plejer"
@@ -2290,7 +2246,7 @@ msgid "Network Setup"
 msgstr "Postavke Mreže"
 
 msgid "Network Wizard"
-msgstr ""
+msgstr "Mrežni čarobnjak"
 
 msgid "Network scan"
 msgstr "Pretraga mreže"
@@ -2335,7 +2291,7 @@ msgid "No 50 Hz, sorry. :("
 msgstr "Nema 50 Hz,žao mi je, :("
 
 msgid "No Connection"
-msgstr ""
+msgstr "Nema konekcije"
 
 msgid "No HDD found or HDD not initialized!"
 msgstr "Disk nije pronađen ili nije inicijaliziran!"
@@ -2369,13 +2325,10 @@ msgid "No free tuner!"
 msgstr "Nema slobodnog tjunera!"
 
 msgid "No networks found"
-msgstr ""
+msgstr "Nijedna mreža nije pronađena"
 
-msgid ""
-"No packages were upgraded yet. So you can check your network and try again."
-msgstr ""
-"Još nijedan paket nije nadograđen.Proverite postavke mreže i pokušajte "
-"ponovo."
+msgid "No packages were upgraded yet. So you can check your network and try again."
+msgstr "Još nijedan paket nije nadograđen.Proverite postavke mreže i pokušajte ponovo."
 
 msgid "No picture on TV? Press EXIT and retry."
 msgstr "Nema slike na TV?Pritisnite IZLAZ i probajte ponovo."
@@ -2421,34 +2374,28 @@ msgstr ""
 "Ukoliko kažete 'Ne' ovde, postavke uređaja ostaju nezaštićene!"
 
 msgid "No wireless networks found! Please refresh."
-msgstr ""
+msgstr "Nijedna bežična mreža nije nađena! Molim osveži."
 
 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 ""
 "Nije pronađen lokalni mrežni adapter u radu.\n"
-"Molimo proverite da li ste uključili mrežni kabl i da li je mreža ispravno "
-"konfigurisana."
+"Molimo proverite da li ste uključili mrežni kabl i da li je mreža ispravno konfigurisana."
 
 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 ""
 "Nije pronađen adapter za bežičnu mrežu u radu.\n"
-"Molimo proverite da ste prikačili kompatibilan WLAN uređaj i da je mreža "
-"ispravno konfigurisana."
+"Molimo proverite da ste prikačili kompatibilan WLAN uređaj i da je mreža ispravno konfigurisana."
 
 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 ""
 "Nije pronađen interfejs za bežičnu mrežu.\n"
-"Molimo proverite da li ste priključili kompatibilan WLAN uređaj ili "
-"omogućili vaš lokalni mrežni interfejs."
+"Molimo proverite da li ste priključili kompatibilan WLAN uređaj ili omogućili vaš lokalni mrežni interfejs."
 
 msgid "No, but restart from begin"
 msgstr "Ne, ali restartuj od početka"
@@ -2471,7 +2418,8 @@ msgstr "Ne, nikad ne šalji. "
 msgid "None"
 msgstr "Nijedan"
 
-#. 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 "Nelinearno"
 
@@ -2482,12 +2430,8 @@ msgid "Norwegian"
 msgstr "Norveški"
 
 #, python-format
-msgid ""
-"Not enough diskspace. Please free up some diskspace and try again. (%d MB "
-"required, %d MB available)"
-msgstr ""
-"Nedovoljno prostora na disku. Molimo oslobodite nešto prostora i probajte "
-"ponovo. (%d MB potrebno,%d MB omogućeno)"
+msgid "Not enough diskspace. Please free up some diskspace and try again. (%d MB required, %d MB available)"
+msgstr "Nedovoljno prostora na disku. Molimo oslobodite nešto prostora i probajte ponovo. (%d MB potrebno,%d MB omogućeno)"
 
 msgid ""
 "Nothing to scan!\n"
@@ -2499,14 +2443,8 @@ msgstr ""
 msgid "Now Playing"
 msgstr "Trenutno pokrenuto"
 
-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 ""
-"Sada koristite postavke kontrasta,da pojačate pozadinsko svetlo najviše "
-"moguće,ali budite sigurni da još uvek možete videti razliku između dva "
-"najsvetlija nivoa senki.Ako ste ovo učinili,pritisnite 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 "Sada koristite postavke kontrasta,da pojačate pozadinsko svetlo najviše moguće,ali budite sigurni da još uvek možete videti razliku između dva najsvetlija nivoa senki.Ako ste ovo učinili,pritisnite OK."
 
 msgid "OK"
 msgstr "OK"
@@ -2574,7 +2512,8 @@ msgstr "Menadžer paketa"
 msgid "Page"
 msgstr "Stranica"
 
-#. 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 "Pan&Scan"
 
@@ -2608,7 +2547,8 @@ msgstr "SuS postavke"
 msgid "PicturePlayer"
 msgstr "Pregledač slika"
 
-#. 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 "Pillarbox"
 
@@ -2646,8 +2586,7 @@ msgid "Please check your network settings!"
 msgstr "Molim proverite vaše mrežne postavke"
 
 msgid "Please choose .NFI image file from feed server to download"
-msgstr ""
-"Molim izaberite .NFI imidž datoteku sa snabdevačkog servera za skidanje"
+msgstr "Molim izaberite .NFI imidž datoteku sa snabdevačkog servera za skidanje"
 
 msgid "Please choose an extension..."
 msgstr "Molim odaberite proširenje..."
@@ -2659,23 +2598,21 @@ msgid "Please choose the default services lists you want to install."
 msgstr "Molim izaberite standardnu listu kanala za instalaciju."
 
 msgid ""
-"Please configure or verify your Nameservers by filling out the required "
-"values.\n"
+"Please configure or verify your Nameservers by filling out the required values.\n"
 "When you are ready press OK to continue."
 msgstr ""
+"Molim konfiguriši ili potvrdi svoje nejmservere popunjavajući tražene vrednosti.\n"
+"Kada si spreman pritisni OK da nastaviš. "
 
 msgid ""
-"Please configure your internet connection by filling out the required "
-"values.\n"
+"Please configure your internet connection by filling out the required values.\n"
 "When you are ready press OK to continue."
 msgstr ""
+"Molim konfiguriši svoju internet vezu popunjavajući tražene vrednosti.\n"
+"Kada si spreman pritisni OK da nastaviš. "
 
-msgid ""
-"Please disconnect all USB devices from your Dreambox and (re-)attach the "
-"target USB stick (minimum size is 64 MB) now!"
-msgstr ""
-"Molimo odspojite sve USB uređaje sa vašeg drimboxa i sada (opet)dodajte "
-"ciljni USB stik (minimalna veličina je 64MB)!"
+msgid "Please disconnect all USB devices from your Dreambox and (re-)attach the target USB stick (minimum size is 64 MB) now!"
+msgstr "Molimo odspojite sve USB uređaje sa vašeg drimboxa i sada (opet)dodajte ciljni USB stik (minimalna veličina je 64MB)!"
 
 msgid "Please do not change any values unless you know what you are doing!"
 msgstr "Molim ne menjate vrednosti ukoliko ne znate šta radite!"
@@ -2710,12 +2647,8 @@ msgstr "Molim unesite vaše ime ovde (opciono):"
 msgid "Please follow the instructions on the TV"
 msgstr "Molim,pratite uputstva na TV-u"
 
-msgid ""
-"Please note that the previously selected media could not be accessed and "
-"therefore the default directory is being used instead."
-msgstr ""
-"Molim primetite da prethodno odabrani medij ne može biti dostupan i zbog "
-"toga se koristi standardni direktorijum."
+msgid "Please note that the previously selected media could not be accessed and therefore the default directory is being used instead."
+msgstr "Molim primetite da prethodno odabrani medij ne može biti dostupan i zbog toga se koristi standardni direktorijum."
 
 msgid "Please press OK to continue."
 msgstr "Molim pritisnite OK za nastavak"
@@ -2757,17 +2690,22 @@ msgid "Please select the movie path..."
 msgstr "Molim izaberite putanju filma..."
 
 msgid ""
-"Please select the network interface that you want to use for your internet "
-"connection.\n"
+"Please select the network interface that you want to use for your internet connection.\n"
 "\n"
 "Please press OK to continue."
 msgstr ""
+"Molim izaberi mrežni interfejs koji želiš da koristiš za svoju internet vezu.\n"
+"\n"
+"Molim pritisni OK da nastaviš."
 
 msgid ""
 "Please select the wireless network that you want to connect to.\n"
 "\n"
 "Please press OK to continue."
 msgstr ""
+"Molim izaberi bežičnu mrežu na koju želiš da se spojiš.\n"
+"\n"
+"Molim pritisni OK da nastaviš."
 
 msgid "Please set up tuner B"
 msgstr "Molim podesite tuner B"
@@ -2787,12 +2725,8 @@ msgstr ""
 "Pritisnite Bouquet +/- tipke za promenu veličine prozora.\n"
 "Pritisnite OK za povratak u TV mod ili EXIT za prekid premeštanja."
 
-msgid ""
-"Please use the UP and DOWN keys to select your language. Afterwards press "
-"the OK button."
-msgstr ""
-"Molim koristite UP i DOWN tipke da izaberete jezik.Posle toga pritisnite OK "
-"dugme."
+msgid "Please use the UP and DOWN keys to select your language. Afterwards press the OK button."
+msgstr "Molim koristite UP i DOWN tipke da izaberete jezik.Posle toga pritisnite OK dugme."
 
 msgid "Please wait for activation of your network configuration..."
 msgstr "Molim sačekajte za aktiviranje vaše mrežne konfiguracije..."
@@ -2810,10 +2744,10 @@ msgid "Please wait while we configure your network..."
 msgstr "Molim sačekajte dok konfigurišemo vašu mrežu..."
 
 msgid "Please wait while we prepare your network interfaces..."
-msgstr ""
+msgstr "Molim sačekajte dok pripremim vaše mrežne interfejse..."
 
 msgid "Please wait while we test your network..."
-msgstr ""
+msgstr "Molim sačekajte doktestiram vašu mrežu..."
 
 msgid "Please wait while your network is restarting..."
 msgstr "Molim sačekajte dok se vaša mreža ponovo startuje"
@@ -3037,7 +2971,7 @@ msgid "Reenter new pin"
 msgstr "Ponovite novi pin"
 
 msgid "Refresh"
-msgstr ""
+msgstr "Osveži"
 
 msgid "Refresh Rate"
 msgstr "Brzina osvježavanja"
@@ -3160,12 +3094,8 @@ msgstr "Vraćanje u toku"
 msgid "Restore system settings"
 msgstr "Vratite sistemske postavke"
 
-msgid ""
-"Restoring the settings is done. Please press OK to activate the restored "
-"settings now."
-msgstr ""
-"Vraćanje postavki je završeno.Molim pritisnite OK za aktiviranje vraćenih "
-"postavki sada."
+msgid "Restoring the settings is done. Please press OK to activate the restored settings now."
+msgstr "Vraćanje postavki je završeno.Molim pritisnite OK za aktiviranje vraćenih postavki sada."
 
 msgid "Resume from last position"
 msgstr "Nastavite sa poslednje pozicije"
@@ -3217,7 +3147,7 @@ msgid "SNR:"
 msgstr "SNR:"
 
 msgid "SSID:"
-msgstr ""
+msgstr "SSID:"
 
 msgid "Sat"
 msgstr "Sat"
@@ -3330,25 +3260,14 @@ msgstr "Skeniraj band US MID"
 msgid "Scan band US SUPER"
 msgstr "Skeniraj band US SUPER"
 
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"WLAN USB Stick\n"
-msgstr ""
-"Pretražite vašu mrežu za bežične pristupne tačke i povežite se koristeći vaš "
-"WLAN USB stik\n"
+msgid "Scan your network for wireless Access Points and connect to them using your WLAN USB Stick\n"
+msgstr "Pretražite vašu mrežu za bežične pristupne tačke i povežite se koristeći vaš WLAN USB stik\n"
 
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"selected wireless device.\n"
-msgstr ""
-"Pretražite vašu mrežu za bežične pristupne tačke i povežite se koristeći vaš "
-"izabrani bežični uređaj.\n"
+msgid "Scan your network for wireless Access Points and connect to them using your selected wireless device.\n"
+msgstr "Pretražite vašu mrežu za bežične pristupne tačke i povežite se koristeći vaš izabrani bežični uređaj.\n"
 
-msgid ""
-"Scans default lamedbs sorted by satellite with a connected dish positioner"
-msgstr ""
-"Pretražuje osnovne lamedbs razvrstane po satelitima sa povezanim antenskim "
-"pozicionerom"
+msgid "Scans default lamedbs sorted by satellite with a connected dish positioner"
+msgstr "Pretražuje osnovne lamedbs razvrstane po satelitima sa povezanim antenskim pozicionerom"
 
 msgid "Search east"
 msgstr "Pretraži istok"
@@ -3399,7 +3318,7 @@ msgid "Select image"
 msgstr "Izaberi imidž"
 
 msgid "Select interface"
-msgstr ""
+msgstr "Izaberi interfejs"
 
 msgid "Select package"
 msgstr "Izaberi paket"
@@ -3426,7 +3345,7 @@ msgid "Select video mode"
 msgstr "Izaberi video mod"
 
 msgid "Select wireless network"
-msgstr ""
+msgstr "Izaberite bežičnu mrežu"
 
 msgid "Selected source image"
 msgstr "Izaberi izvorni imidž"
@@ -3558,10 +3477,10 @@ msgid "Shutdown Dreambox after"
 msgstr "Isključi drimbox posle"
 
 msgid "Signal Strength:"
-msgstr ""
+msgstr "Jačina signala:"
 
 msgid "Signal: "
-msgstr ""
+msgstr "Signal:"
 
 msgid "Similar"
 msgstr "Slično"
@@ -3798,7 +3717,8 @@ msgstr "Simbol rata"
 msgid "System"
 msgstr "Sistem "
 
-#. 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 "PREVODILAC_INFO"
 
@@ -3845,30 +3765,21 @@ msgid ""
 "Thank you for using the wizard.\n"
 "Please press OK to continue."
 msgstr ""
+"Hvala na korišćenju čarobnjaka.\n"
+"Molim pritisni OK da nastaviš."
 
 msgid ""
 "Thank you for using the wizard. Your box is now ready to use.\n"
 "Please press OK to start using your Dreambox."
 msgstr ""
-"Hvala vam na korišćenju čarobnjaka. Vaš prijemnik je sada spreman za "
-"korišćenje.\n"
+"Hvala vam na korišćenju čarobnjaka. Vaš prijemnik je sada spreman za korišćenje.\n"
 "Molim pritisnite tipku OK za početak korišćenja vašeg Drimboxa."
 
-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 ""
-"DVD standard ne podržava H.264 (HDTV) video strimove.Da li želite umesto "
-"toga da napravite drimbox format DVD (koji se neće moći reprodukovati u "
-"samostalnim DVD plejerima)?"
+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 "DVD standard ne podržava H.264 (HDTV) video strimove.Da li želite umesto toga da napravite drimbox format DVD (koji se neće moći reprodukovati u samostalnim DVD plejerima)?"
 
-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 ""
-"USB stik je sada butabilan.Da li želite da skinete poslednji imidž sa "
-"snabdevačkog servera i sačuvate ga na stiku?"
+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 "USB stik je sada butabilan.Da li želite da skinete poslednji imidž sa snabdevačkog servera i sačuvate ga na stiku?"
 
 msgid "The backup failed. Please choose a different backup location."
 msgstr "Neuspešna sigurnosna kopija. Molim odaberite drugu lokaciju."
@@ -3892,38 +3803,22 @@ msgstr "Sledeće datoteke su pronađene..."
 
 msgid ""
 "The input port should be configured now.\n"
-"You can now configure the screen by displaying some test pictures. Do you "
-"want to do that now?"
+"You can now configure the screen by displaying some test pictures. Do you want to do that now?"
 msgstr ""
 "Ulazni port bi sada trebalo konfigurisati.\n"
-"Možete sada konfigurisati ekran prikazujući neke test slike.Želite li to "
-"sada da učinite? "
+"Možete sada konfigurisati ekran prikazujući neke test slike.Želite li to sada da učinite? "
 
 msgid "The installation of the default services lists is finished."
 msgstr "Instalacija osnovne liste kanala je završena."
 
-msgid ""
-"The installation of the default settings is finished. You can now continue "
-"configuring your Dreambox by pressing the OK button on the remote control."
-msgstr ""
-"Instalacija osnovnih postavki je završena.Sada možete nastaviti "
-"konfiguraciju vašeg drimboxa pritiskajući OK tipku na daljinskom upravljaču."
+msgid "The installation of the default settings is finished. You can now continue configuring your Dreambox by pressing the OK button on the remote control."
+msgstr "Instalacija osnovnih postavki je završena.Sada možete nastaviti konfiguraciju vašeg drimboxa pritiskajući OK tipku na daljinskom upravljaču."
 
-msgid ""
-"The md5sum validation failed, the file may be corrupted! Are you sure that "
-"you want to burn this image to flash memory? You are doing this at your own "
-"risk!"
-msgstr ""
-"md5sum provera valjanosti nije uspela,datoteka može biti oštećena!Da li ste "
-"sigurni da želite da upišete ovaj imidž u fleš memoriju?Uradite to na svoj "
-"rizik! "
+msgid "The md5sum validation failed, the file may be corrupted! Are you sure that you want to burn this image to flash memory? You are doing this at your own risk!"
+msgstr "md5sum provera valjanosti nije uspela,datoteka može biti oštećena!Da li ste sigurni da želite da upišete ovaj imidž u fleš memoriju?Uradite to na svoj rizik! "
 
-msgid ""
-"The md5sum validation failed, the file may be downloaded incompletely or be "
-"corrupted!"
-msgstr ""
-"md5sum provera valjanosti nije uspela,datoteka može biti nekompletna ili "
-"oštećena!"
+msgid "The md5sum validation failed, the file may be downloaded incompletely or be corrupted!"
+msgstr "md5sum provera valjanosti nije uspela,datoteka može biti nekompletna ili oštećena!"
 
 msgid "The package doesn't contain anything."
 msgstr "Paket ne sadrži ništa."
@@ -3961,6 +3856,8 @@ msgid ""
 "The wireless LAN plugin is not installed!\n"
 "Please install it and choose what you want to do next."
 msgstr ""
+"Bežični LAN dodatak nije instaliran!\n"
+"Molim instaliraj ga i izaberi šta želiš sledeće učiniti."
 
 msgid ""
 "The wireless LAN plugin is not installed!\n"
@@ -3969,11 +3866,8 @@ msgstr ""
 "Bežični LAN dodatak nije instaliran!\n"
 "Molimo instalirajte ga."
 
-msgid ""
-"The wizard can backup your current settings. Do you want to do a backup now?"
-msgstr ""
-"Čarobnjak može napraviti sigurnosnu kopiju postavki. Želite li je napraviti "
-"sada?"
+msgid "The wizard can backup your current settings. Do you want to do a backup now?"
+msgstr "Čarobnjak može napraviti sigurnosnu kopiju postavki. Želite li je napraviti sada?"
 
 msgid "The wizard is finished now."
 msgstr "Čarobnjak je sada gotov."
@@ -4010,26 +3904,14 @@ msgstr "Desila se greška.Paket:"
 msgid "This .NFI file does not contain a valid %s image!"
 msgstr "Ova .NFI datoteka ne sadrži validan %s imidž!"
 
-msgid ""
-"This .NFI file does not have a md5sum signature and is not guaranteed to "
-"work. Do you really want to burn this image to flash memory?"
-msgstr ""
-"Ovaj .NFI imidž nema md5sum proveru i nema garancije da će raditi. Da li "
-"stvarno želite da upišete ovaj imidž u fleš memoriju?"
+msgid "This .NFI file does not have a md5sum signature and is not guaranteed to work. Do you really want to burn this image to flash memory?"
+msgstr "Ovaj .NFI imidž nema md5sum proveru i nema garancije da će raditi. Da li stvarno želite da upišete ovaj imidž u fleš memoriju?"
 
-msgid ""
-"This .NFI file has a valid md5 signature. Continue programming this image to "
-"flash memory?"
-msgstr ""
-"Ova .NFI datoteka ima validnu md5 proveru.Nastavite programiranje ovog "
-"imidža u fleš memoriju?"
+msgid "This .NFI file has a valid md5 signature. Continue programming this image to flash memory?"
+msgstr "Ova .NFI datoteka ima validnu md5 proveru.Nastavite programiranje ovog imidža u fleš memoriju?"
 
-msgid ""
-"This DVD RW medium is already formatted - reformatting will erase all "
-"content on the disc."
-msgstr ""
-"Ovaj DVD RW medij je već formatiran-ponovno formatiranje će izbrisati ceo "
-"sadržaj diska."
+msgid "This DVD RW medium is already formatted - reformatting will erase all content on the disc."
+msgstr "Ovaj DVD RW medij je već formatiran-ponovno formatiranje će izbrisati ceo sadržaj diska."
 
 #, python-format
 msgid "This Dreambox can't decode %s streams!"
@@ -4061,14 +3943,12 @@ msgid ""
 "This test checks for configured Nameservers.\n"
 "If you get a \"unconfirmed\" message:\n"
 "- please check your DHCP, cabling and Adapter setup\n"
-"- if you configured your Nameservers manually please verify your entries in "
-"the \"Nameserver\" Configuration"
+"- if you configured your Nameservers manually please verify your entries in the \"Nameserver\" Configuration"
 msgstr ""
 "Ovaj test proverava konfigurisane nejmservere.\n"
 "Ako dobijete poruku \"nepotvrđen\":\n"
 "-proverite vaš DHCP.kablove i postavke adaptera\n"
-"-ako ste nejmserver ručno konfigurisali,molimo proverite vaše unose u  "
-"\"Nejmserver \" konfiguraciji"
+"-ako ste nejmserver ručno konfigurisali,molimo proverite vaše unose u  \"Nejmserver \" konfiguraciji"
 
 msgid ""
 "This test checks whether a network cable is connected to your LAN-Adapter.\n"
@@ -4093,21 +3973,17 @@ msgstr ""
 "-molimo proverite vaš DHCP,kablove i postavke adaptera "
 
 msgid ""
-"This test checks whether your LAN Adapter is set up for automatic IP Address "
-"configuration with DHCP.\n"
+"This test checks whether your LAN Adapter is set up for automatic IP Address configuration with DHCP.\n"
 "If you get a \"disabled\" message:\n"
 " - then your LAN Adapter is configured for manual IP Setup\n"
-"- verify thay you have entered correct IP informations in the AdapterSetup "
-"dialog.\n"
+"- verify thay you have entered correct IP informations in the AdapterSetup dialog.\n"
 "If you get an \"enabeld\" message:\n"
 "-verify that you have a configured and working DHCP Server in your network."
 msgstr ""
-"Ovaj test proverava da li je vaš adapter postavljen za automatski izbor IP "
-"adrese sa DHCP.\n"
+"Ovaj test proverava da li je vaš adapter postavljen za automatski izbor IP adrese sa DHCP.\n"
 "Ako dobijete poruku \"onemogućen \":\n"
 "-onda je vaš adapter konfigurisan za manuelne IP postavke\n"
-"-proverite da li ste uneli ispravne IP podatke u dijalog postavkama "
-"adaptera.\n"
+"-proverite da li ste uneli ispravne IP podatke u dijalog postavkama adaptera.\n"
 "Ako ste dobili poruku  \"omogućen \":\n"
 "-proverite da li u vašoj mreži postoji konfigurisan i u funkciji DHCP server."
 
@@ -4192,16 +4068,13 @@ msgstr "Način postavki naziva"
 
 msgid ""
 "To update your Dreambox firmware, please follow these steps:\n"
-"1) Turn off your box with the rear power switch and plug in the bootable USB "
-"stick.\n"
-"2) Turn mains back on and hold the DOWN button on the front panel pressed "
-"for 10 seconds.\n"
+"1) Turn off your box with the rear power switch and plug in the bootable USB stick.\n"
+"2) Turn mains back on and hold the DOWN button on the front panel pressed for 10 seconds.\n"
 "3) Wait for bootup and follow instructions of the wizard."
 msgstr ""
 "Da unapredite vaš drimbox firmver,molimo pratite sledeće korake:\n"
 "1) Ugasite vaš box na prekidaču pozad i uključite butabilan USB stik.\n"
-"2) Upalite glavni prekidač pozadi držeći dugme DOLE na prednjoj ploči 10 "
-"sekundi.\n"
+"2) Upalite glavni prekidač pozadi držeći dugme DOLE na prednjoj ploči 10 sekundi.\n"
 "3) Sačekajte na podizanje i pratite uputstva čarobnjaka."
 
 msgid "Today"
@@ -4241,14 +4114,10 @@ msgid "Tries left:"
 msgstr "Pokušaja ostalo:"
 
 msgid "Try to find used Transponders in cable network.. please wait..."
-msgstr ""
-"Pokušavam pronaći korišćene transpondere u kablovskoj mreži.. molim "
-"pričekajte..."
+msgstr "Pokušavam pronaći korišćene transpondere u kablovskoj mreži.. molim pričekajte..."
 
 msgid "Try to find used transponders in cable network.. please wait..."
-msgstr ""
-"Pokušavam pronaći korišćene transpondere u kablovskoj mreži.. molim "
-"pričekajte..."
+msgstr "Pokušavam pronaći korišćene transpondere u kablovskoj mreži.. molim pričekajte..."
 
 msgid "Trying to download a new packetlist. Please wait..."
 msgstr "Pokušavam skinuti novu listu paketa.Molim sačekajte..."
@@ -4351,7 +4220,7 @@ msgid "Unmount failed"
 msgstr "Demauntiranje nije uspelo"
 
 msgid "Unsupported"
-msgstr ""
+msgstr "Nije podržano"
 
 msgid "Update"
 msgstr "Ažuriranje"
@@ -4410,18 +4279,14 @@ msgstr ""
 "\n"
 "Molim podesite tuner A"
 
-msgid ""
-"Use the up/down keys on your remote control to select an option. After that, "
-"press OK."
-msgstr ""
-"Koristite gore/dole tipke na vašem daljinskom upravljaču za izbor opcije. "
-"Posle toga, pritisnite OK."
+msgid "Use the up/down keys on your remote control to select an option. After that, press OK."
+msgstr "Koristite gore/dole tipke na vašem daljinskom upravljaču za izbor opcije. Posle toga, pritisnite OK."
 
 msgid "Use this video enhancement settings?"
 msgstr "Koristi postavke ovog video poboljšavanja?"
 
 msgid "Use time of currently running service"
-msgstr ""
+msgstr "Koristi vreme trenutnog kanala u radu"
 
 msgid "Use usals for this sat"
 msgstr "Koristi USALS za ovaj satelit"
@@ -4474,15 +4339,13 @@ msgstr "Podešavanje video poboljšavanja"
 msgid ""
 "Video input selection\n"
 "\n"
-"Please press OK if you can see this page on your TV (or select a different "
-"input port).\n"
+"Please press OK if you can see this page on your TV (or select a different input port).\n"
 "\n"
 "The next input port will be automatically probed in 10 seconds."
 msgstr ""
 "Izbor video ulaza\n"
 "\n"
-"Molim pritisnite OK ako možete da vidite ovu stranu na vašem TV (ili "
-"izaberite različit ulazni port).\n"
+"Molim pritisnite OK ako možete da vidite ovu stranu na vašem TV (ili izaberite različit ulazni port).\n"
 "\n"
 "Sledeći ulazni port će biti automatski proban za 10 sekundi"
 
@@ -4583,12 +4446,10 @@ msgid "Warn if free space drops below (kB):"
 msgstr "Upozorii ako slobodan prostor padne ispod (kB):"
 
 msgid ""
-"We will now test if your TV can also display this resolution at 50hz. If "
-"your screen goes black, wait 20 seconds and it will switch back to 60hz.\n"
+"We will now test if your TV can also display this resolution at 50hz. If your screen goes black, wait 20 seconds and it will switch back to 60hz.\n"
 "Please press OK to begin."
 msgstr ""
-"Proverićemo da li vaš TV može prikazati ovu rezoluciju pri 50Hz.Ako vaš "
-"ekran pocrni,pričekajte 20 sekundi i vratiće se nazad na 60 Hz.\n"
+"Proverićemo da li vaš TV može prikazati ovu rezoluciju pri 50Hz.Ako vaš ekran pocrni,pričekajte 20 sekundi i vratiće se nazad na 60 Hz.\n"
 "Molim pritisnite OK za početak."
 
 msgid "Wed"
@@ -4603,45 +4464,39 @@ msgstr "Nedeljnii dan"
 msgid ""
 "Welcome to the Cutlist editor.\n"
 "\n"
-"Seek to the start of the stuff you want to cut away. Press OK, select 'start "
-"cut'.\n"
+"Seek to the start of the stuff you want to cut away. Press OK, select 'start cut'.\n"
 "\n"
 "Then seek to the end, press OK, select 'end cut'. That's it."
 msgstr ""
 "Dobrodošli na uređivač liste.\n"
 "\n"
-"Tražite početak onoga što želite da odbacite.Pritisnite OK,izaberite \"počni "
-"isecanje\".\n"
+"Tražite početak onoga što želite da odbacite.Pritisnite OK,izaberite \"počni isecanje\".\n"
 "\n"
 "Zatim tražite kraj,pritisnite OK,izaberite \"završi isecanje\".To je to."
 
-msgid ""
-"Welcome to the Image upgrade wizard. The wizard will assist you in upgrading "
-"the firmware of your Dreambox by providing a backup facility for your "
-"current settings and a short explanation of how to upgrade your firmware."
-msgstr ""
-"Dobro došli u čarobnjaka za nadogradnju softvera. Čarobnjak će vam pomoći "
-"tokom nadogradnje firmvera na vašem drimboxu s pružanjem mogućnosti "
-"sigurnosne kopije vaših trenutnih postavki i kratkim objašnjenjem kako "
-"nadograditi vaš softver."
+msgid "Welcome to the Image upgrade wizard. The wizard will assist you in upgrading the firmware of your Dreambox by providing a backup facility for your current settings and a short explanation of how to upgrade your firmware."
+msgstr "Dobro došli u čarobnjaka za nadogradnju softvera. Čarobnjak će vam pomoći tokom nadogradnje firmvera na vašem drimboxu s pružanjem mogućnosti sigurnosne kopije vaših trenutnih postavki i kratkim objašnjenjem kako nadograditi vaš softver."
 
 msgid ""
 "Welcome to the cleanup wizard.\n"
 "\n"
 "We have detected that your available internal memory has dropped below 2MB.\n"
-"To ensure stable operation of your Dreambox, the internal memory should be "
-"cleaned up.\n"
+"To ensure stable operation of your Dreambox, the internal memory should be cleaned up.\n"
 "You can use this wizard to remove some extensions.\n"
 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"
+"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 ""
+"Dobro došli.\n"
+"\n"
+"Ako želite da spojite svoj drimboks na Internet,ovaj čarobnjak će vas voditi kroz osnovna mrežna podešavanja vašeg drimboksa.\n"
+"\n"
+"Pritisnite OK da počnete konfigurisanje vaše mreže"
 
 msgid ""
 "Welcome.\n"
@@ -4652,8 +4507,7 @@ msgstr ""
 "Dobro došli.\n"
 "\n"
 "Ovaj početni čarobnjak će vas voditi kroz osnovne postavke vašeg drimboxa.\n"
-"Pritisnite OK tipku na vašem daljinskom upravljaču za prelazak na sledeći "
-"korak."
+"Pritisnite OK tipku na vašem daljinskom upravljaču za prelazak na sledeći korak."
 
 msgid "Welcome..."
 msgstr "Dobrodošli..."
@@ -4670,13 +4524,11 @@ msgstr "Šta činiti sa poslatim krah zapisima?"
 msgid ""
 "When you do a factory reset, you will lose ALL your configuration data\n"
 "(including bouquets, services, satellite data ...)\n"
-"After completion of factory reset, your receiver will restart "
-"automatically!\n"
+"After completion of factory reset, your receiver will restart automatically!\n"
 "\n"
 "Really do a factory reset?"
 msgstr ""
-"Kad radite resetovanje na fabričke vrednosti,izgubićete sve konfiguracijske "
-"podatke\n"
+"Kad radite resetovanje na fabričke vrednosti,izgubićete sve konfiguracijske podatke\n"
 "(uključujući bukete,kanale,podatke o satelitima...)\n"
 "Posle kompletnog resetovanja,vaš risiver će automatski restartovati!\n"
 "\n"
@@ -4692,13 +4544,13 @@ msgid "Wireless"
 msgstr "Bežično"
 
 msgid "Wireless LAN"
-msgstr ""
+msgstr "Bežični LAN"
 
 msgid "Wireless Network"
 msgstr "Bežična mreža"
 
 msgid "Wireless Network State"
-msgstr ""
+msgstr "Stanje bežične mreže"
 
 msgid "Write error while recording. Disk full?\n"
 msgstr "Greška tokom snimanja. Disk Pun?\n"
@@ -4754,12 +4606,8 @@ msgstr "Možete otkazati instaliranje."
 msgid "You can cancel the removal."
 msgstr "Možete otkazati uklanjanje."
 
-msgid ""
-"You can choose some default settings now. Please select the settings you "
-"want to be installed."
-msgstr ""
-"Sada možete izabrati neke osnovne postavke.Molimo izaberite postavke koje "
-"želite instalirati."
+msgid "You can choose some default settings now. Please select the settings you want to be installed."
+msgstr "Sada možete izabrati neke osnovne postavke.Molimo izaberite postavke koje želite instalirati."
 
 msgid "You can choose, what you want to install..."
 msgstr "Možete izabrati šta želite da instalirate..."
@@ -4776,89 +4624,51 @@ msgstr "Ne možete ovo obrisati!"
 msgid "You chose not to install any default services lists."
 msgstr "Izabrali ste da ne instalirate osnovnu listu kanala."
 
-msgid ""
-"You chose not to install any default settings. You can however install the "
-"default settings later in the settings menu."
-msgstr ""
-"Izabrali ste da ne instalirate bilo koje osnovne postavke.Svakako možete "
-"instalirati osnovne postavke kasnije u meniu postavki."
+msgid "You chose not to install any default settings. You can however install the default settings later in the settings menu."
+msgstr "Izabrali ste da ne instalirate bilo koje osnovne postavke.Svakako možete instalirati osnovne postavke kasnije u meniu postavki."
 
-msgid ""
-"You chose not to install anything. Please press OK finish the install wizard."
-msgstr ""
-"Izabrali ste da ništa ne instalirate.Molimo pritisnite OK da završite "
-"čarobnjaka za instalaciju."
+msgid "You chose not to install anything. Please press OK finish the install wizard."
+msgstr "Izabrali ste da ništa ne instalirate.Molimo pritisnite OK da završite čarobnjaka za instalaciju."
 
-msgid ""
-"You do not seem to have a harddisk in your Dreambox. So backing up to a "
-"harddisk is not an option for you."
-msgstr ""
-"Izgleda da vi nemate instalirani hard disk u vašem drimboxu.Zbog toga izrada "
-"sigurnosne kopije nije opcija za vas."
+msgid "You do not seem to have a harddisk in your Dreambox. So backing up to a harddisk is not an option for you."
+msgstr "Izgleda da vi nemate instalirani hard disk u vašem drimboxu.Zbog toga izrada sigurnosne kopije nije opcija za vas."
 
 msgid ""
-"You have chosen to backup to a compact flash card. The card must be in the "
-"slot. We do not verify if it is really used at the moment. So better backup "
-"to the harddisk!\n"
+"You have chosen to backup to a compact flash card. The card must be in the slot. We do not verify if it is really used at the moment. So better backup to the harddisk!\n"
 "Please press OK to start the backup now."
 msgstr ""
-"Vi ste izabrali lokaciju za sigurnosnu kopiju na kompakt fleš kartici. "
-"Kartica mora biti u otvoru.Ne proverava se da li se kartica trenutno "
-"koristi. Zato bolje da kopiju napravite na hard disku!\n"
+"Vi ste izabrali lokaciju za sigurnosnu kopiju na kompakt fleš kartici. Kartica mora biti u otvoru.Ne proverava se da li se kartica trenutno koristi. Zato bolje da kopiju napravite na hard disku!\n"
 "Molim pritisnite OK za početak izrade."
 
 msgid ""
 "You have chosen to backup to an usb drive. Better backup to the harddisk!\n"
 "Please press OK to start the backup now."
 msgstr ""
-"Odabrali ste lokaciju za sigurnosnu kopiju na USB disku. Bolje je stavite na "
-"hard disk!\n"
+"Odabrali ste lokaciju za sigurnosnu kopiju na USB disku. Bolje je stavite na hard disk!\n"
 "Molim pritisnite OK za početak."
 
-msgid ""
-"You have chosen to backup to your harddisk. Please press OK to start the "
-"backup now."
-msgstr ""
-"Vi ste odabrali lokaciju za sigurnosnu kopiju na hard disku. Molim "
-"pritisnite OK za početak izrade sada."
+msgid "You have chosen to backup to your harddisk. Please press OK to start the backup now."
+msgstr "Vi ste odabrali lokaciju za sigurnosnu kopiju na hard disku. Molim pritisnite OK za početak izrade sada."
 
-msgid ""
-"You have chosen to backup your settings. Please press OK to start the backup "
-"now."
-msgstr ""
-"Izabrali ste da snimite svoje postavke.Molimo pritisnite OK da sada počnete "
-"snimanje."
+msgid "You have chosen to backup your settings. Please press OK to start the backup now."
+msgstr "Izabrali ste da snimite svoje postavke.Molimo pritisnite OK da sada počnete snimanje."
 
-msgid ""
-"You have chosen to create a new .NFI flasher bootable USB stick. This will "
-"repartition the USB stick and therefore all data on it will be erased."
-msgstr ""
-"Izabrali ste da kreirate novi .NFI flešer butabilni USB stik.Ovo će ponovo "
-"particirati USB stik i svi podaci će biti izbrisani.i "
+msgid "You have chosen to create a new .NFI flasher bootable USB stick. This will repartition the USB stick and therefore all data on it will be erased."
+msgstr "Izabrali ste da kreirate novi .NFI flešer butabilni USB stik.Ovo će ponovo particirati USB stik i svi podaci će biti izbrisani.i "
 
-msgid ""
-"You have chosen to restore your settings. Enigma2 will restart after "
-"restore. Please press OK to start the restore now."
-msgstr ""
-"Izabrali ste da povratite vaše postavke.Enigma2 će ponovo startovati posle "
-"vraćanja.Molim sada pritisnite OK da počnete vraćanje."
+msgid "You have chosen to restore your settings. Enigma2 will restart after restore. Please press OK to start the restore now."
+msgstr "Izabrali ste da povratite vaše postavke.Enigma2 će ponovo startovati posle vraćanja.Molim sada pritisnite OK da počnete vraćanje."
 
 #, python-format
 msgid "You have to wait %s!"
 msgstr "Morate pričekati %s!"
 
 msgid ""
-"You need a PC connected to your dreambox. If you need further instructions, "
-"please visit the website http://www.dm7025.de.\n"
-"Your dreambox will now be halted. After you have performed the update "
-"instructions from the website, your new firmware will ask you to restore "
-"your settings."
+"You need a PC connected to your dreambox. If you need further instructions, please visit the website http://www.dm7025.de.\n"
+"Your dreambox will now be halted. After you have performed the update instructions from the website, your new firmware will ask you to restore your settings."
 msgstr ""
-"Potreban je PC spojen s vašim drimboxom. Ukoliko trebate dodatne "
-"instrukcije, molim posetite ovu stranicu http://www.dm7025.de.\n"
-"Vaš drimbox će sada stati.Pošto ste izvršili proceduru nadogradnje prema "
-"uputstvima s web-stranice, vaš novi softver će vas pitati želite li vratiti "
-"sigurnosnu kopiju vaših postavki."
+"Potreban je PC spojen s vašim drimboxom. Ukoliko trebate dodatne instrukcije, molim posetite ovu stranicu http://www.dm7025.de.\n"
+"Vaš drimbox će sada stati.Pošto ste izvršili proceduru nadogradnje prema uputstvima s web-stranice, vaš novi softver će vas pitati želite li vratiti sigurnosnu kopiju vaših postavki."
 
 msgid ""
 "You need to set a pin code and hide it from your children.\n"
@@ -4876,38 +4686,29 @@ msgid ""
 "\n"
 "Please press OK to continue."
 msgstr ""
+"Vaš drimboks je sad spreman za upotrebu.\n"
+"\n"
+"Vaša internet veza sada radi.\n"
+"\n"
+"Molim pritisni OK da nastaviš."
 
 msgid "Your Dreambox will restart after pressing OK on your remote control."
-msgstr ""
-"Vaš drimbox će ponovo startovati posle pritiskanja OK na vašem daljinskom "
-"upravljaču."
+msgstr "Vaš drimbox će ponovo startovati posle pritiskanja OK na vašem daljinskom upravljaču."
 
 msgid "Your TV works with 50 Hz. Good!"
 msgstr "Vaš TV radi na 50 Hz.Dobro!"
 
-msgid ""
-"Your backup succeeded. We will now continue to explain the further upgrade "
-"process."
-msgstr ""
-"Sigurnosna kopija je uspešno napravljena. Sada ćemo dalje objasniti za "
-"sljedeći proces nadogradnje."
+msgid "Your backup succeeded. We will now continue to explain the further upgrade process."
+msgstr "Sigurnosna kopija je uspešno napravljena. Sada ćemo dalje objasniti za sljedeći proces nadogradnje."
 
-msgid ""
-"Your collection exceeds the size of a single layer medium, you will need a "
-"blank dual layer DVD!"
-msgstr ""
-"Vaša kolekcija prelazi veličinu jednoslojnog medija,trebate prazan dvoslojni "
-"DVD!  "
+msgid "Your collection exceeds the size of a single layer medium, you will need a blank dual layer DVD!"
+msgstr "Vaša kolekcija prelazi veličinu jednoslojnog medija,trebate prazan dvoslojni DVD!  "
 
 msgid "Your dreambox is shutting down. Please stand by..."
 msgstr "Vaš drimbox se sada gasi .Molimo stand by..."
 
-msgid ""
-"Your dreambox isn't connected to the internet properly. Please check it and "
-"try again."
-msgstr ""
-"Vaš drimbox nije ispravno spojen na internet. Molim proverite i pokušajte "
-"ponovo."
+msgid "Your dreambox isn't connected to the internet properly. Please check it and try again."
+msgstr "Vaš drimbox nije ispravno spojen na internet. Molim proverite i pokušajte ponovo."
 
 msgid "Your email address:"
 msgstr "Vaša imejl adresa:"
@@ -4923,6 +4724,8 @@ msgid ""
 "Your internet connection is not working!\n"
 "Please choose what you want to do next."
 msgstr ""
+"Vaša internet veza ne radi!\n"
+"Molim izaberi šta želiš sledeće učiniti."
 
 msgid "Your name (optional):"
 msgstr "Vaše  ime (opciono):"
@@ -5235,7 +5038,7 @@ msgid "enigma2 and network"
 msgstr "Enigma2 i mreža"
 
 msgid "enter hidden network SSID"
-msgstr ""
+msgstr "Unesi skriveni mrežni SSID"
 
 msgid "equal to"
 msgstr "jednako"
@@ -5310,7 +5113,7 @@ msgid "hidden network"
 msgstr "skrivena mreža"
 
 msgid "hidden..."
-msgstr ""
+msgstr "skriven..."
 
 msgid "hide extended description"
 msgstr "sakrij prošireni opis"
@@ -5796,7 +5599,7 @@ msgid "toggle time, chapter, audio, subtitle info"
 msgstr "Prebacuj vreme,poglavlje,audio,subtitl informacije"
 
 msgid "unavailable"
-msgstr ""
+msgstr "nedostupno"
 
 msgid "unconfirmed"
 msgstr "Nepotvrđeno"
@@ -5852,12 +5655,8 @@ msgstr "Da "
 msgid "yes (keep feeds)"
 msgstr "Da ( zadrži fidove)"
 
-msgid ""
-"your dreambox might be unusable now. Please consult the manual for further "
-"assistance before rebooting your dreambox."
-msgstr ""
-"vaš drimbox sada može biti  beskoristan. Molim proverite uputstvo za dalju "
-"pomoć pre ponovnog podizanja vašeg drimboxa."
+msgid "your dreambox might be unusable now. Please consult the manual for further assistance before rebooting your dreambox."
+msgstr "vaš drimbox sada može biti  beskoristan. Molim proverite uputstvo za dalju pomoć pre ponovnog podizanja vašeg drimboxa."
 
 msgid "zap"
 msgstr "zap"
@@ -6074,47 +5873,23 @@ msgstr "prebačen"
 #~ msgid "Record Splitsize"
 #~ msgstr "Vel.Dat. kod Snimanja"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really reboot "
-#~ "now?"
-#~ msgstr ""
-#~ "Snimanje je trenutno u toku ili će uskoro početi...želite li stvarno "
-#~ "reboot sada?"
+#~ msgid "Recording(s) are in progress or coming up in few seconds... really reboot now?"
+#~ msgstr "Snimanje je trenutno u toku ili će uskoro početi...želite li stvarno reboot sada?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really "
-#~ "restart now?"
-#~ msgstr ""
-#~ "Snimanje je trenutno u toku ili će uskoro početi...želite li stvarno "
-#~ "restart sada?"
+#~ msgid "Recording(s) are in progress or coming up in few seconds... really restart now?"
+#~ msgstr "Snimanje je trenutno u toku ili će uskoro početi...želite li stvarno restart sada?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really "
-#~ "shutdown now?"
-#~ msgstr ""
-#~ "Snimanje je trenutno u toku ili će uskoro početi...želite li stvarno "
-#~ "isključiti sada?"
+#~ msgid "Recording(s) are in progress or coming up in few seconds... really shutdown now?"
+#~ msgstr "Snimanje je trenutno u toku ili će uskoro početi...želite li stvarno isključiti sada?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or comming up in few seconds... really "
-#~ "reboot now?"
-#~ msgstr ""
-#~ "Snimanje je u tijeku ili će poćeti za nekoliko trenutaka...zaista želite "
-#~ "reboot sada ?"
+#~ msgid "Recording(s) are in progress or comming up in few seconds... really reboot now?"
+#~ msgstr "Snimanje je u tijeku ili će poćeti za nekoliko trenutaka...zaista želite reboot sada ?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or comming up in few seconds... really "
-#~ "restart now?"
-#~ msgstr ""
-#~ "Snimanje je u tijeku ili će poćeti za nekoliko trenutaka...zaista želite "
-#~ "restartati?"
+#~ msgid "Recording(s) are in progress or comming up in few seconds... really restart now?"
+#~ msgstr "Snimanje je u tijeku ili će poćeti za nekoliko trenutaka...zaista želite restartati?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or comming up in few seconds... really "
-#~ "shutdown now?"
-#~ msgstr ""
-#~ "Snimanje je u tijeku ili će poćeti za nekoliko trenutaka...zaista želite "
-#~ "isključiti sada?"
+#~ msgid "Recording(s) are in progress or comming up in few seconds... really shutdown now?"
+#~ msgstr "Snimanje je u tijeku ili će poćeti za nekoliko trenutaka...zaista želite isključiti sada?"
 
 #~ msgid "Remove service"
 #~ msgstr "Izbriši uslugu"
index a437a8e0c8cca0c70754227b6b8c02d74eca4f19..8a143ba836c00c5b48cd89b0b4b383771c4c53eb 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -125,7 +125,7 @@ msgid " updates available."
 msgstr " Uppdateringar tillgängliga."
 
 msgid " wireless networks found!"
-msgstr ""
+msgstr " trådlöst nätverk hittat!"
 
 msgid "#000000"
 msgstr ""
@@ -205,10 +205,8 @@ msgstr "* Enbart tillgänglig vid angiven dold SSID eller nätverksnyckel"
 msgid ".NFI Download failed:"
 msgstr ".NFI Nedladdning misslyckades:"
 
-msgid ""
-".NFI file passed md5sum signature check. You can safely flash this image!"
-msgstr ""
-".NFI fil passerade md5sum signatur kontroll. Du kan använda denna image!"
+msgid ".NFI file passed md5sum signature check. You can safely flash this image!"
+msgstr ".NFI fil passerade md5sum signatur kontroll. Du kan använda denna image!"
 
 msgid "/usr/share/enigma2 directory"
 msgstr "/usr/share/enigma2 bibliotek"
@@ -223,7 +221,7 @@ msgid "1"
 msgstr ""
 
 msgid "1 wireless network found!"
-msgstr ""
+msgstr "1 trådlöst nätverk hittat!"
 
 msgid "1.0"
 msgstr "1.0"
@@ -355,19 +353,11 @@ msgstr ""
 "En inspelning pågår redan.\n"
 "Vad vill du göra?"
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"configure the positioner."
-msgstr ""
-"En inspelning pågår. Vänligen avbryt den innan du försöker konfigurera "
-"motorn."
+msgid "A recording is currently running. Please stop the recording before trying to configure the positioner."
+msgstr "En inspelning pågår. Vänligen avbryt den innan du försöker konfigurera motorn."
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"start the satfinder."
-msgstr ""
-"En inspelning pågår. Vänligen avbryt inspelningen före du försöker starta "
-"satfinder."
+msgid "A recording is currently running. Please stop the recording before trying to start the satfinder."
+msgstr "En inspelning pågår. Vänligen avbryt inspelningen före du försöker starta satfinder."
 
 #, python-format
 msgid "A required tool (%s) was not found."
@@ -469,12 +459,8 @@ msgstr "Lägg till i favoritlista"
 msgid "Add to favourites"
 msgstr "Lägg till i favoriter"
 
-msgid ""
-"Adds enigma2 settings and dreambox model informations like SN, rev... if "
-"enabled."
-msgstr ""
-"Lägger till enigma2 inställningar och dreambox  modellinformation såsom SN, "
-"rev... om aktiverad."
+msgid "Adds enigma2 settings and dreambox model informations like SN, rev... if enabled."
+msgstr "Lägger till enigma2 inställningar och dreambox  modellinformation såsom SN, rev... om aktiverad."
 
 msgid "Adds network configuration if enabled."
 msgstr "Lägger till nätverkskonfiguration om aktiverad."
@@ -482,16 +468,8 @@ msgstr "Lägger till nätverkskonfiguration om aktiverad."
 msgid "Adds wlan configuration if enabled."
 msgstr "Lägger till wlan konfiguration om aktiverad."
 
-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 ""
-"Justera färginställningarna så att alla färgnivåer är urskiljningsbara, men "
-"de ska vara så färgfulla som möjligt. När du är nöjd med resultatet, tryck "
-"OK för att stänga videoinställningarna eller tryck på nummerknapp för att "
-"välja annan testbild."
+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 "Justera färginställningarna så att alla färgnivåer är urskiljningsbara, men de ska vara så färgfulla som möjligt. När du är nöjd med resultatet, tryck OK för att stänga videoinställningarna eller tryck på nummerknapp för att välja annan testbild."
 
 msgid "Advanced"
 msgstr "Avancerat"
@@ -511,12 +489,8 @@ msgstr "Avancerad återskapning"
 msgid "After event"
 msgstr "Efter program"
 
-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 ""
-"Efter startguiden är avslutad, behöver du skydda enskilda kanaler. Läs i din "
-"manual för Dreambox om hur du utför det."
+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 "Efter startguiden är avslutad, behöver du skydda enskilda kanaler. Läs i din manual för Dreambox om hur du utför det."
 
 msgid "Album"
 msgstr "Album"
@@ -730,9 +704,7 @@ msgstr "Bränn till DVD..."
 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 "Infobalken visas om du trycker OK på din fjärrkontroll."
 
 msgid "C"
@@ -829,7 +801,7 @@ msgid "Choose Tuner"
 msgstr "Välj tuner"
 
 msgid "Choose a wireless network"
-msgstr ""
+msgstr "Välj ett trådlöst nätverk"
 
 msgid "Choose backup files"
 msgstr "Välj backupfil"
@@ -1202,7 +1174,7 @@ msgid "DiSEqC repeats"
 msgstr "DiSEqC repetetioner"
 
 msgid "DiSEqC-Tester settings"
-msgstr ""
+msgstr "DiSEqC-Tester inställningar"
 
 msgid "Dialing:"
 msgstr "Ringer upp:"
@@ -1218,7 +1190,7 @@ msgid "Directory %s nonexistent."
 msgstr "Bibliotek %s finns ej."
 
 msgid "Directory browser"
-msgstr ""
+msgstr "Biblioteksbläddrare"
 
 msgid "Disable"
 msgstr "Avaktivera"
@@ -1354,11 +1326,8 @@ msgstr "Vill du återställa dina inställningar?"
 msgid "Do you want to resume this playback?"
 msgstr "Vill du återuppta uppspelningen?"
 
-msgid ""
-"Do you want to submit your email address and name so that we can contact you "
-"if needed?"
-msgstr ""
-"Vill du skicka med din epost och namn så vi kan kontakta dig om så behövs?"
+msgid "Do you want to submit your email address and name so that we can contact you if needed?"
+msgstr "Vill du skicka med din epost och namn så vi kan kontakta dig om så behövs?"
 
 msgid "Do you want to update your Dreambox?"
 msgstr "Vill du uppdatera din Dreambox?"
@@ -1392,8 +1361,7 @@ msgstr "Klar - Installerat eller uppgraderat %d paket med %d fel"
 
 #, python-format
 msgid "Done - Installed, upgraded or removed %d packages with %d errors"
-msgstr ""
-"Klar - installerat, uppgraderat eller avinstallerat %d paket med %d fel"
+msgstr "Klar - installerat, uppgraderat eller avinstallerat %d paket med %d fel"
 
 msgid "Download"
 msgstr "Nedladdning"
@@ -1515,7 +1483,7 @@ msgid "Encryption Type"
 msgstr "Krypteringstyp"
 
 msgid "Encryption:"
-msgstr ""
+msgstr "Kryptering:"
 
 msgid "End time"
 msgstr "Sluttid"
@@ -1684,8 +1652,7 @@ msgstr "Klar med omstarten av ditt nätverk"
 msgid "Finnish"
 msgstr "Finska"
 
-msgid ""
-"First we need to download the latest boot environment for the USB flasher."
+msgid "First we need to download the latest boot environment for the USB flasher."
 msgstr "Först måste vi ladda ner senaste bootmiljön för USB flasher."
 
 msgid "Flash"
@@ -1857,22 +1824,13 @@ msgstr ""
 "din scartkontakt. Tryck OK för återgå."
 
 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 ""
-"Om din TV har ljusstyrke- eller kontrastförbättrare rekommenderas du att "
-"stänga av den. Om det finns något som heter \"dynamic\" rekommenderas du att "
-"använda standard. Justera ljusstyrkan till en inställning som du tycker är "
-"bra. Använd så lite kontrast som möjligt.\n"
-"Sätt ljusstyrkan till så låg som möjligt, men säkerställ att de två lägsta "
-"nivåerna av grå är urskiljningsbara.\n"
+"Om din TV har ljusstyrke- eller kontrastförbättrare rekommenderas du att stänga av den. Om det finns något som heter \"dynamic\" rekommenderas du att använda standard. Justera ljusstyrkan till en inställning som du tycker är bra. Använd så lite kontrast som möjligt.\n"
+"Sätt ljusstyrkan till så låg som möjligt, men säkerställ att de två lägsta nivåerna av grå är urskiljningsbara.\n"
 "Ta inte hänsyn till de ljusa nivåerna nu. De kommer justeras i nästa steg.\n"
 "När du är nöjd med resultatet, tryck OK."
 
@@ -1885,8 +1843,7 @@ msgstr "Image uppgradering"
 msgid "In Progress"
 msgstr "I utförande"
 
-msgid ""
-"In order to record a timer, the TV was switched to the recording service!\n"
+msgid "In order to record a timer, the TV was switched to the recording service!\n"
 msgstr "För att göra en timerinspelning, växlades TV till inspelande kanal!\n"
 
 msgid "Include your email and name (optional) in the mail?"
@@ -2008,7 +1965,8 @@ msgstr "Italienska"
 msgid "Job View"
 msgstr "Arbets Vy"
 
-#. 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 "Bara skala"
 
@@ -2063,7 +2021,8 @@ msgstr "Avsluta DVD Spelare?"
 msgid "Left"
 msgstr "Vänster"
 
-#. 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 "Letterbox"
 
@@ -2337,7 +2296,7 @@ msgid "No 50 Hz, sorry. :("
 msgstr "Ingen 50 Hz, tyvärr. :("
 
 msgid "No Connection"
-msgstr ""
+msgstr "Ingen anslutning"
 
 msgid "No HDD found or HDD not initialized!"
 msgstr "Ingen hårddisk hittad eller initierad!"
@@ -2371,10 +2330,9 @@ msgid "No free tuner!"
 msgstr "Ingen ledig tuner!"
 
 msgid "No networks found"
-msgstr ""
+msgstr "Inget nätverk hittat"
 
-msgid ""
-"No packages were upgraded yet. So you can check your network and try again."
+msgid "No packages were upgraded yet. So you can check your network and try again."
 msgstr "Inga paket uppgraderade. Undersök ditt nätverk och prova igen."
 
 msgid "No picture on TV? Press EXIT and retry."
@@ -2421,34 +2379,28 @@ msgstr ""
 "Om du anger 'Nej' här kommer installationsskyddet vara avaktiverat!"
 
 msgid "No wireless networks found! Please refresh."
-msgstr ""
+msgstr "Inget trådlöst nätverk hittat! Vänligen uppdatera."
 
 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 ""
 "Inget fungerandes lokalt nätverkskort funnet.\n"
-"Vänligen bekräfta att du har anslutit en nätverkskabel och att ditt nätverk "
-"är korrekt konfigurerat."
+"Vänligen bekräfta att du har anslutit en nätverkskabel och att ditt nätverk är korrekt konfigurerat."
 
 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 ""
 "Inget fungerandes trådlöst nätverkskort funnet.\n"
-"Vänligen bekräfta att du har anslutit ett kompatibelt WLAN enhet och att din "
-"nätverkskonfiguration är korrekt."
+"Vänligen bekräfta att du har anslutit ett kompatibelt WLAN enhet och att din nätverkskonfiguration är korrekt."
 
 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 ""
 "Inget fungerandes trådlöst nätverkskort funnet.\n"
-"Vänligen bekräfta att du har anslutit ett kompatibelt WLAN enhet eller "
-"aktiverat ditt lokala nätverkskort."
+"Vänligen bekräfta att du har anslutit ett kompatibelt WLAN enhet eller aktiverat ditt lokala nätverkskort."
 
 msgid "No, but restart from begin"
 msgstr "Nej, men starta om från början"
@@ -2466,12 +2418,13 @@ msgid "No, scan later manually"
 msgstr "Nej, sök manuellt senare"
 
 msgid "No, send them never"
-msgstr "Ne, skicka aldrig"
+msgstr "Nej, skicka aldrig"
 
 msgid "None"
 msgstr "Inga"
 
-#. 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 "Ej linjär"
 
@@ -2482,12 +2435,8 @@ msgid "Norwegian"
 msgstr "Norska"
 
 #, python-format
-msgid ""
-"Not enough diskspace. Please free up some diskspace and try again. (%d MB "
-"required, %d MB available)"
-msgstr ""
-"Inte tillräckligt med diskutrymme. Vänligen frigör diskutrymme och försök "
-"igen. (%d MB krävs, %d MB tillgängligt)"
+msgid "Not enough diskspace. Please free up some diskspace and try again. (%d MB required, %d MB available)"
+msgstr "Inte tillräckligt med diskutrymme. Vänligen frigör diskutrymme och försök igen. (%d MB krävs, %d MB tillgängligt)"
 
 msgid ""
 "Nothing to scan!\n"
@@ -2499,14 +2448,8 @@ msgstr ""
 msgid "Now Playing"
 msgstr "Spelas nu"
 
-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 ""
-"Använd kontrastinställningen för att justera ljusstyrka på bakgrunden så "
-"mycket som möjligt, men säkerställ att du fortfarande kan se skillnaden "
-"mellan de två ljusaste nivåerna av skuggor. När du har gjort det tryck 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 "Använd kontrastinställningen för att justera ljusstyrka på bakgrunden så mycket som möjligt, men säkerställ att du fortfarande kan se skillnaden mellan de två ljusaste nivåerna av skuggor. När du har gjort det tryck OK."
 
 msgid "OK"
 msgstr "OK"
@@ -2574,7 +2517,8 @@ msgstr "Pakethanterare"
 msgid "Page"
 msgstr "Sida"
 
-#. 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 "Pan&Scan"
 
@@ -2608,7 +2552,8 @@ msgstr "BiB konfiguration"
 msgid "PicturePlayer"
 msgstr "Bildspelare"
 
-#. 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 "Svarta kanter"
 
@@ -2658,26 +2603,21 @@ msgid "Please choose the default services lists you want to install."
 msgstr "Vänligen välj vilken grundservicelista som du vill installera."
 
 msgid ""
-"Please configure or verify your Nameservers by filling out the required "
-"values.\n"
+"Please configure or verify your Nameservers by filling out the required values.\n"
 "When you are ready press OK to continue."
 msgstr ""
-"Vänligen konfigurera eller bekräfta din namnserver med att fylla i de "
-"begärda fälten.\n"
+"Vänligen konfigurera eller bekräfta din namnserver med att fylla i de begärda fälten.\n"
 "När du är klar tryck OK för att fortsätta"
 
 msgid ""
-"Please configure your internet connection by filling out the required "
-"values.\n"
+"Please configure your internet connection by filling out the required values.\n"
 "When you are ready press OK to continue."
 msgstr ""
+"Vänligen konfigurera din Internet anslutning med att fylla i begärda fält.\n"
+"När du är klar tryck OK för att forsätta."
 
-msgid ""
-"Please disconnect all USB devices from your Dreambox and (re-)attach the "
-"target USB stick (minimum size is 64 MB) now!"
-msgstr ""
-"Vänligen koppla bort alla USB enheter från din Dreambox och (åter-)anslut "
-"mål USB stick (minimumstorlek är 64MB) nu!"
+msgid "Please disconnect all USB devices from your Dreambox and (re-)attach the target USB stick (minimum size is 64 MB) now!"
+msgstr "Vänligen koppla bort alla USB enheter från din Dreambox och (åter-)anslut mål USB stick (minimumstorlek är 64MB) nu!"
 
 msgid "Please do not change any values unless you know what you are doing!"
 msgstr "Vänligen ändra inte om du inte vet vad du gör!"
@@ -2712,12 +2652,8 @@ msgstr "Vänligen ange ditt namn här (valfritt):"
 msgid "Please follow the instructions on the TV"
 msgstr "Vänligen följ instruktionerna på TVn"
 
-msgid ""
-"Please note that the previously selected media could not be accessed and "
-"therefore the default directory is being used instead."
-msgstr ""
-"Vänligen notera att föregående valda mediat var inte åtkomstbart och därför "
-"är nu default bibliotek valt."
+msgid "Please note that the previously selected media could not be accessed and therefore the default directory is being used instead."
+msgstr "Vänligen notera att föregående valda mediat var inte åtkomstbart och därför är nu default bibliotek valt."
 
 msgid "Please press OK to continue."
 msgstr "Vänligen tryck OK för att försätta."
@@ -2759,13 +2695,11 @@ msgid "Please select the movie path..."
 msgstr "Vänligen ange filmens sökväg..."
 
 msgid ""
-"Please select the network interface that you want to use for your internet "
-"connection.\n"
+"Please select the network interface that you want to use for your internet connection.\n"
 "\n"
 "Please press OK to continue."
 msgstr ""
-"Vänligen välj nätverkskort som du vill använda för anslutning till "
-"Internet.\n"
+"Vänligen välj nätverkskort som du vill använda för anslutning till Internet.\n"
 "\n"
 "Vänligen tryck OK för att fortsätta"
 
@@ -2774,6 +2708,9 @@ msgid ""
 "\n"
 "Please press OK to continue."
 msgstr ""
+"Vänligen välj det trådlösa nätverk du vill ansluta till.\n"
+"\n"
+"Vänligen tryck OK för att forsätta."
 
 msgid "Please set up tuner B"
 msgstr "Vänligen installera tuner B"
@@ -2791,15 +2728,10 @@ msgid ""
 msgstr ""
 "Använd piltangenterna för att flytta BiB fönstret.\n"
 "Tryck Bouquet +/- för ändra storleken på fönstret.\n"
-"Tryck OK för att gå tillbaka till TV läge eller EXIT för att avbryta "
-"flyttning."
+"Tryck OK för att gå tillbaka till TV läge eller EXIT för att avbryta flyttning."
 
-msgid ""
-"Please use the UP and DOWN keys to select your language. Afterwards press "
-"the OK button."
-msgstr ""
-"Vänligen använd UPP och NER pil för att välja språk. Efter val tryck på OK "
-"knappen."
+msgid "Please use the UP and DOWN keys to select your language. Afterwards press the OK button."
+msgstr "Vänligen använd UPP och NER pil för att välja språk. Efter val tryck på OK knappen."
 
 msgid "Please wait for activation of your network configuration..."
 msgstr "Vänligen vänta för aktivering av din nätverkskonfiguration..."
@@ -3167,12 +3099,8 @@ msgstr "Återskapning pågår"
 msgid "Restore system settings"
 msgstr "Återskapa systeminställningar"
 
-msgid ""
-"Restoring the settings is done. Please press OK to activate the restored "
-"settings now."
-msgstr ""
-"Återställning av inställningar klart. Tryck OK för att aktivera återskapade "
-"inställningar"
+msgid "Restoring the settings is done. Please press OK to activate the restored settings now."
+msgstr "Återställning av inställningar klart. Tryck OK för att aktivera återskapade inställningar"
 
 msgid "Resume from last position"
 msgstr "Återuppspela från senaste position"
@@ -3337,22 +3265,13 @@ msgstr "Sök US MID band"
 msgid "Scan band US SUPER"
 msgstr "Sök US SUPER band"
 
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"WLAN USB Stick\n"
-msgstr ""
-"Sök ditt nätverk för trådlös Access Punkt och anslut till den med WLAN USB "
-"Stick\n"
+msgid "Scan your network for wireless Access Points and connect to them using your WLAN USB Stick\n"
+msgstr "Sök ditt nätverk för trådlös Access Punkt och anslut till den med WLAN USB Stick\n"
 
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"selected wireless device.\n"
-msgstr ""
-"Söka ditt nätverk efter trådlös Accesspunkt och ansluta till det med ditt "
-"valda trådlösa enhet.\n"
+msgid "Scan your network for wireless Access Points and connect to them using your selected wireless device.\n"
+msgstr "Söka ditt nätverk efter trådlös Accesspunkt och ansluta till det med ditt valda trådlösa enhet.\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 "Sök grund lamedbs sorterat på satellite med en "
 
 msgid "Search east"
@@ -3803,7 +3722,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 ""
 "Översättning utfört av: WeeGull\n"
@@ -3853,6 +3773,8 @@ msgid ""
 "Thank you for using the wizard.\n"
 "Please press OK to continue."
 msgstr ""
+"Tack för att du använde guiden.\n"
+"Vänligen tryck OK för att forsätta."
 
 msgid ""
 "Thank you for using the wizard. Your box is now ready to use.\n"
@@ -3861,21 +3783,11 @@ msgstr ""
 "Tack för att du använde guiden. Din box är nu konfigurerad.\n"
 "Tryck OK för att börja använda din Dreambox."
 
-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 ""
-"DVD standarden stödjer inte H.264 (HDTV) videoströmmar. Vill du skapa en "
-"Dreambox format data DVD (kommer ej kunnas spelas i vanlig DVD spelare) "
-"istället? "
+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 "DVD standarden stödjer inte H.264 (HDTV) videoströmmar. Vill du skapa en Dreambox format data DVD (kommer ej kunnas spelas i vanlig DVD spelare) istället? "
 
-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 ""
-"USB sticken är nu bootbar. Vill du ladda ner senaste image från feed server "
-"och spara den på sticken?"
+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 "USB sticken är nu bootbar. Vill du ladda ner senaste image från feed server och spara den på sticken?"
 
 msgid "The backup failed. Please choose a different backup location."
 msgstr "Backupen misslyckades, välj en annan plats för din backup "
@@ -3899,8 +3811,7 @@ msgstr "Följande filer hittades..."
 
 msgid ""
 "The input port should be configured now.\n"
-"You can now configure the screen by displaying some test pictures. Do you "
-"want to do that now?"
+"You can now configure the screen by displaying some test pictures. Do you want to do that now?"
 msgstr ""
 "Ingångsport bör konfigureras nu.\n"
 "Du kan konfigurera skärmen med hjälp av några testbilder. Vill du gör det nu?"
@@ -3908,27 +3819,14 @@ msgstr ""
 msgid "The installation of the default services lists is finished."
 msgstr "Installationen av grundservicelistan är klar."
 
-msgid ""
-"The installation of the default settings is finished. You can now continue "
-"configuring your Dreambox by pressing the OK button on the remote control."
-msgstr ""
-"Installationen av grundinställningar är nu klar. Du kan nu slutföra din "
-"konfiguration av Dreambox med att trycka på OK knappen på din fjärrkontroll."
+msgid "The installation of the default settings is finished. You can now continue configuring your Dreambox by pressing the OK button on the remote control."
+msgstr "Installationen av grundinställningar är nu klar. Du kan nu slutföra din konfiguration av Dreambox med att trycka på OK knappen på din fjärrkontroll."
 
-msgid ""
-"The md5sum validation failed, the file may be corrupted! Are you sure that "
-"you want to burn this image to flash memory? You are doing this at your own "
-"risk!"
-msgstr ""
-"md5sun validering misslyckades, filen kan vara korrupt! Är du säker på att "
-"du vill flasha denna image till flashminnet? Du utför detta på egen risk!"
+msgid "The md5sum validation failed, the file may be corrupted! Are you sure that you want to burn this image to flash memory? You are doing this at your own risk!"
+msgstr "md5sun validering misslyckades, filen kan vara korrupt! Är du säker på att du vill flasha denna image till flashminnet? Du utför detta på egen risk!"
 
-msgid ""
-"The md5sum validation failed, the file may be downloaded incompletely or be "
-"corrupted!"
-msgstr ""
-"md5sum validering misslyckades, filen kanske inte blev helt nedladdad eller "
-"är korrupt!"
+msgid "The md5sum validation failed, the file may be downloaded incompletely or be corrupted!"
+msgstr "md5sum validering misslyckades, filen kanske inte blev helt nedladdad eller är korrupt!"
 
 msgid "The package doesn't contain anything."
 msgstr "Paketet innehåller ingenting."
@@ -3976,10 +3874,8 @@ msgstr ""
 "Pluginen för trådlöst LAN är inte installerad!\n"
 "Vänligen installera den."
 
-msgid ""
-"The wizard can backup your current settings. Do you want to do a backup now?"
-msgstr ""
-"Guiden kan ta en backup på nuvarande inställningar. Vill du ta en backup nu?"
+msgid "The wizard can backup your current settings. Do you want to do a backup now?"
+msgstr "Guiden kan ta en backup på nuvarande inställningar. Vill du ta en backup nu?"
 
 msgid "The wizard is finished now."
 msgstr "Guiden är nu färdig."
@@ -4003,8 +3899,7 @@ msgid ""
 "There might not be enough Space on the selected Partition.\n"
 "Do you really want to continue?"
 msgstr ""
-"Det är inte säkert att det finns tillräckligt med utrymme på vald "
-"partition.\n"
+"Det är inte säkert att det finns tillräckligt med utrymme på vald partition.\n"
 "Vill du verkligen fortsätta?"
 
 msgid "There was an error downloading the packetlist. Please try again."
@@ -4017,26 +3912,14 @@ msgstr "Ett fel uppstod. Paketet:"
 msgid "This .NFI file does not contain a valid %s image!"
 msgstr "Denna .NFI fil innehåller ingen giltig %s image!"
 
-msgid ""
-"This .NFI file does not have a md5sum signature and is not guaranteed to "
-"work. Do you really want to burn this image to flash memory?"
-msgstr ""
-"Denna .NFI har ingen md5sum signatur och är inte garanterad att den "
-"fungerar. Vill du verkligen flasha denna image till flashminnet?"
+msgid "This .NFI file does not have a md5sum signature and is not guaranteed to work. Do you really want to burn this image to flash memory?"
+msgstr "Denna .NFI har ingen md5sum signatur och är inte garanterad att den fungerar. Vill du verkligen flasha denna image till flashminnet?"
 
-msgid ""
-"This .NFI file has a valid md5 signature. Continue programming this image to "
-"flash memory?"
-msgstr ""
-"Denna .NFI har giltig md5sum. Fortsätta programmera denna image till "
-"flashminnet?"
+msgid "This .NFI file has a valid md5 signature. Continue programming this image to flash memory?"
+msgstr "Denna .NFI har giltig md5sum. Fortsätta programmera denna image till flashminnet?"
 
-msgid ""
-"This DVD RW medium is already formatted - reformatting will erase all "
-"content on the disc."
-msgstr ""
-"Detta DVD RW media är redan formaterat - omformatering kommer ta bort all "
-"data på skivan."
+msgid "This DVD RW medium is already formatted - reformatting will erase all content on the disc."
+msgstr "Detta DVD RW media är redan formaterat - omformatering kommer ta bort all data på skivan."
 
 #, python-format
 msgid "This Dreambox can't decode %s streams!"
@@ -4068,14 +3951,12 @@ msgid ""
 "This test checks for configured Nameservers.\n"
 "If you get a \"unconfirmed\" message:\n"
 "- please check your DHCP, cabling and Adapter setup\n"
-"- if you configured your Nameservers manually please verify your entries in "
-"the \"Nameserver\" Configuration"
+"- if you configured your Nameservers manually please verify your entries in the \"Nameserver\" Configuration"
 msgstr ""
 "Detta test kontrollerar konfigurationen för Namnservrar.\n"
 "Om du får ett \"obekräftat\" meddelande:\n"
 "- vänligen kontrollera din DHCP, kablar och adapter installation\n"
-"- om du har konfigurerat din Namnserver manuellt vänligen bekräfta dina "
-"inställningar i \"Namnserver\" INstallation"
+"- om du har konfigurerat din Namnserver manuellt vänligen bekräfta dina inställningar i \"Namnserver\" INstallation"
 
 msgid ""
 "This test checks whether a network cable is connected to your LAN-Adapter.\n"
@@ -4083,8 +3964,7 @@ msgid ""
 "- verify that a network cable is attached\n"
 "- verify that the cable is not broken"
 msgstr ""
-"Detta test kontrollerar om en nätverkskablen är ansluten till din LAN "
-"adapter.\n"
+"Detta test kontrollerar om en nätverkskablen är ansluten till din LAN adapter.\n"
 "Om du får ett \"Ej ansluten\" meddelande:\n"
 "- bekräfta att nätverkskabel är ansluten\n"
 "- bekräfta att kabeln inte är trasig"
@@ -4101,24 +3981,19 @@ msgstr ""
 "- vänlig kontrollera din DHCP, kablar och nätverkskorts installation"
 
 msgid ""
-"This test checks whether your LAN Adapter is set up for automatic IP Address "
-"configuration with DHCP.\n"
+"This test checks whether your LAN Adapter is set up for automatic IP Address configuration with DHCP.\n"
 "If you get a \"disabled\" message:\n"
 " - then your LAN Adapter is configured for manual IP Setup\n"
-"- verify thay you have entered correct IP informations in the AdapterSetup "
-"dialog.\n"
+"- verify thay you have entered correct IP informations in the AdapterSetup dialog.\n"
 "If you get an \"enabeld\" message:\n"
 "-verify that you have a configured and working DHCP Server in your network."
 msgstr ""
-"Detta test kontrollerar om din LAN adapter är konfigurerad för automatisk IP "
-"adress tilldelning med DHCP.\n"
+"Detta test kontrollerar om din LAN adapter är konfigurerad för automatisk IP adress tilldelning med DHCP.\n"
 "Om du får en \"deaktiverad\" meddelande:\n"
 "- ditt LAN är konfigurerat för manuell IP tilldelning\n"
-"- bekräfta att du har angivit korrekt IP information i Adapterinstallation "
-"dialogen.\n"
+"- bekräfta att du har angivit korrekt IP information i Adapterinstallation dialogen.\n"
 "Om du får ett \"aktiverat\" meddelande:\n"
-"- bekräfta att du har konfigurerad och fungerandes DHCP server på ditt "
-"nätverk."
+"- bekräfta att du har konfigurerad och fungerandes DHCP server på ditt nätverk."
 
 msgid "This test detects your configured LAN-Adapter."
 msgstr "Detta test upptäcker konfigurerade LAN adapter."
@@ -4201,17 +4076,13 @@ msgstr "Titelset läge"
 
 msgid ""
 "To update your Dreambox firmware, please follow these steps:\n"
-"1) Turn off your box with the rear power switch and plug in the bootable USB "
-"stick.\n"
-"2) Turn mains back on and hold the DOWN button on the front panel pressed "
-"for 10 seconds.\n"
+"1) Turn off your box with the rear power switch and plug in the bootable USB stick.\n"
+"2) Turn mains back on and hold the DOWN button on the front panel pressed for 10 seconds.\n"
 "3) Wait for bootup and follow instructions of the wizard."
 msgstr ""
 "För att uppdatera din Dreambox firmware, vänligen utför följande steg:\n"
-"1) Stäng av din box med strömbrytaren på baksidan och sätt in bootbar USB "
-"stick.\n"
-"2) Slå på strömbrytaren och håll NER pil på fronten intryckt i ungerfär 10 "
-"sekunder.\n"
+"1) Stäng av din box med strömbrytaren på baksidan och sätt in bootbar USB stick.\n"
+"2) Slå på strömbrytaren och håll NER pil på fronten intryckt i ungerfär 10 sekunder.\n"
 "3) Vänta på uppstart och följ instruktionerna från guiden."
 
 msgid "Today"
@@ -4416,17 +4287,14 @@ msgstr ""
 "\n"
 "Inställning Tuner A"
 
-msgid ""
-"Use the up/down keys on your remote control to select an option. After that, "
-"press OK."
-msgstr ""
-"Använd upp/ner pilarna på din fjärrkontroll för att välja. Tryck sedan OK."
+msgid "Use the up/down keys on your remote control to select an option. After that, press OK."
+msgstr "Använd upp/ner pilarna på din fjärrkontroll för att välja. Tryck sedan OK."
 
 msgid "Use this video enhancement settings?"
 msgstr "Använd denna videoförbättringskonfiguration?"
 
 msgid "Use time of currently running service"
-msgstr ""
+msgstr "Använd tid från närvarande vald service"
 
 msgid "Use usals for this sat"
 msgstr "Använd USALS för denna sat"
@@ -4479,15 +4347,13 @@ msgstr "Videoförbättringsinstallation"
 msgid ""
 "Video input selection\n"
 "\n"
-"Please press OK if you can see this page on your TV (or select a different "
-"input port).\n"
+"Please press OK if you can see this page on your TV (or select a different input port).\n"
 "\n"
 "The next input port will be automatically probed in 10 seconds."
 msgstr ""
 "Video ingångsval\n"
 "\n"
-"Vänligen tryck OK om du kan se denna bild på din TV (eller välj annan "
-"ingångsport).\n"
+"Vänligen tryck OK om du kan se denna bild på din TV (eller välj annan ingångsport).\n"
 "\n"
 "Nästa ingångsport kommer automatiskt provas om 10 sekunder."
 
@@ -4519,8 +4385,7 @@ msgid "View list of available CommonInterface extensions"
 msgstr "Visa lista över tillgängliga CommonInterface utökningar"
 
 msgid "View list of available Display and Userinterface extensions."
-msgstr ""
-"Visa lista över tillgängliga Display och Användargränssnitt utökningar."
+msgstr "Visa lista över tillgängliga Display och Användargränssnitt utökningar."
 
 msgid "View list of available EPG extensions."
 msgstr "Visa lista över tillgängliga EPG utökningar."
@@ -4589,12 +4454,10 @@ msgid "Warn if free space drops below (kB):"
 msgstr "Varna om tillgängligt utrymme understiger (kB):"
 
 msgid ""
-"We will now test if your TV can also display this resolution at 50hz. If "
-"your screen goes black, wait 20 seconds and it will switch back to 60hz.\n"
+"We will now test if your TV can also display this resolution at 50hz. If your screen goes black, wait 20 seconds and it will switch back to 60hz.\n"
 "Please press OK to begin."
 msgstr ""
-"Vi kommer nu testa om din TV kan hantera upplösningen i 50 Hz. Om din skärm "
-"blir svart, vänta ca 20 sek så kommer den att återgå till 60 Hz.\n"
+"Vi kommer nu testa om din TV kan hantera upplösningen i 50 Hz. Om din skärm blir svart, vänta ca 20 sek så kommer den att återgå till 60 Hz.\n"
 "Vänlig tryck OK för att starta."
 
 msgid "Wed"
@@ -4609,8 +4472,7 @@ msgstr "Veckodag"
 msgid ""
 "Welcome to the Cutlist editor.\n"
 "\n"
-"Seek to the start of the stuff you want to cut away. Press OK, select 'start "
-"cut'.\n"
+"Seek to the start of the stuff you want to cut away. Press OK, select 'start cut'.\n"
 "\n"
 "Then seek to the end, press OK, select 'end cut'. That's it."
 msgstr ""
@@ -4618,40 +4480,34 @@ msgstr ""
 "\n"
 "Sök början på det innehåll du vill klippa bort. Tryck OK, välj 'start cut'.\n"
 "\n"
-"Sök därefter slutet på det innehåll du vill klippa bort, tryck OK, välj 'end "
-"cut'. Det var allt."
+"Sök därefter slutet på det innehåll du vill klippa bort, tryck OK, välj 'end cut'. Det var allt."
 
-msgid ""
-"Welcome to the Image upgrade wizard. The wizard will assist you in upgrading "
-"the firmware of your Dreambox by providing a backup facility for your "
-"current settings and a short explanation of how to upgrade your firmware."
-msgstr ""
-"Välkommen till uppgraderings guiden. Guiden hjälper dig med uppgraderingen "
-"av mjukvaran i din Dreambox genom att tillgodose en backupmöjlighet till "
-"dina aktuella inställningar och en kort förklaring hur du uppgraderar "
-"mjukvaran."
+msgid "Welcome to the Image upgrade wizard. The wizard will assist you in upgrading the firmware of your Dreambox by providing a backup facility for your current settings and a short explanation of how to upgrade your firmware."
+msgstr "Välkommen till uppgraderings guiden. Guiden hjälper dig med uppgraderingen av mjukvaran i din Dreambox genom att tillgodose en backupmöjlighet till dina aktuella inställningar och en kort förklaring hur du uppgraderar mjukvaran."
 
 msgid ""
 "Welcome to the cleanup wizard.\n"
 "\n"
 "We have detected that your available internal memory has dropped below 2MB.\n"
-"To ensure stable operation of your Dreambox, the internal memory should be "
-"cleaned up.\n"
+"To ensure stable operation of your Dreambox, the internal memory should be cleaned up.\n"
 "You can use this wizard to remove some extensions.\n"
 msgstr ""
+"Välkommen till upprensnings guiden.\n"
+"\n"
+"Det har upptäckts att tillgängligt utrymme på interna minnet understiger 2MB.\n"
+"För att uppnå en stabil Dreambox bör interna minnet rensas upp.\n"
+"Du kan använda den här guiden för att ta bort vissa utökningar.\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"
+"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 ""
 "Välkommen.\n"
 "\n"
-"Om du vill ansluta din Dreambox till Internet, då kommer den här guiden "
-"hjälpa dig genom grundläggande konfiguration av din Dreambox.\n"
+"Om du vill ansluta din Dreambox till Internet, då kommer den här guiden hjälpa dig genom grundläggande konfiguration av din Dreambox.\n"
 "\n"
 "Tryck OK för att starta konfigurationen av ditt nätverk."
 
@@ -4681,8 +4537,7 @@ msgstr "Vad ska ske med skickade crashlogs?"
 msgid ""
 "When you do a factory reset, you will lose ALL your configuration data\n"
 "(including bouquets, services, satellite data ...)\n"
-"After completion of factory reset, your receiver will restart "
-"automatically!\n"
+"After completion of factory reset, your receiver will restart automatically!\n"
 "\n"
 "Really do a factory reset?"
 msgstr ""
@@ -4764,12 +4619,8 @@ msgstr "Du kan avbryta installationen."
 msgid "You can cancel the removal."
 msgstr "Du kan avbryta borttagningen."
 
-msgid ""
-"You can choose some default settings now. Please select the settings you "
-"want to be installed."
-msgstr ""
-"Du kan välja från några grundinställningar nu. Vänligen välj de "
-"inställningar du vill installera."
+msgid "You can choose some default settings now. Please select the settings you want to be installed."
+msgstr "Du kan välja från några grundinställningar nu. Vänligen välj de inställningar du vill installera."
 
 msgid "You can choose, what you want to install..."
 msgstr "Du kan välja, vad vill du ska installeras..."
@@ -4786,89 +4637,51 @@ msgstr "Du kan inte ta bort detta!"
 msgid "You chose not to install any default services lists."
 msgstr "Du har valt att inte installera någon grundservicelista."
 
-msgid ""
-"You chose not to install any default settings. You can however install the "
-"default settings later in the settings menu."
-msgstr ""
-"Du har valt att inte installera grundinställningar. Du kan om du vill senare "
-"installera grundinställningarna via installations menyerna."
+msgid "You chose not to install any default settings. You can however install the default settings later in the settings menu."
+msgstr "Du har valt att inte installera grundinställningar. Du kan om du vill senare installera grundinställningarna via installations menyerna."
 
-msgid ""
-"You chose not to install anything. Please press OK finish the install wizard."
-msgstr ""
-"Du har valt att inte installetra något. Vänligen tryck OK för att avsluta "
-"installations guiden."
+msgid "You chose not to install anything. Please press OK finish the install wizard."
+msgstr "Du har valt att inte installetra något. Vänligen tryck OK för att avsluta installations guiden."
 
-msgid ""
-"You do not seem to have a harddisk in your Dreambox. So backing up to a "
-"harddisk is not an option for you."
-msgstr ""
-"Du verkar inte ha någon hårddisk i din Dreambox. Att ta backup till en "
-"hårddisk är därför inte möjligt."
+msgid "You do not seem to have a harddisk in your Dreambox. So backing up to a harddisk is not an option for you."
+msgstr "Du verkar inte ha någon hårddisk i din Dreambox. Att ta backup till en hårddisk är därför inte möjligt."
 
 msgid ""
-"You have chosen to backup to a compact flash card. The card must be in the "
-"slot. We do not verify if it is really used at the moment. So better backup "
-"to the harddisk!\n"
+"You have chosen to backup to a compact flash card. The card must be in the slot. We do not verify if it is really used at the moment. So better backup to the harddisk!\n"
 "Please press OK to start the backup now."
 msgstr ""
-"Du har valt att ta backup till ett flash-kort. Kortet måste sitta i sloten. "
-"Vi kan inte verifiera att den används förnärvarande. Så det är bättre att ta "
-"backup till hårddisk!\n"
+"Du har valt att ta backup till ett flash-kort. Kortet måste sitta i sloten. Vi kan inte verifiera att den används förnärvarande. Så det är bättre att ta backup till hårddisk!\n"
 "Tryck OK för att starta backupen."
 
 msgid ""
 "You have chosen to backup to an usb drive. Better backup to the harddisk!\n"
 "Please press OK to start the backup now."
 msgstr ""
-"Du har valt att ta backup till ett USB minne. Bättre att ta backup till "
-"HDD!\n"
+"Du har valt att ta backup till ett USB minne. Bättre att ta backup till HDD!\n"
 "Tryck OK för att starta backup."
 
-msgid ""
-"You have chosen to backup to your harddisk. Please press OK to start the "
-"backup now."
-msgstr ""
-"Du har valt att ta backup till din hårddisk. Vänligen tryck OK så startar "
-"backupen."
+msgid "You have chosen to backup to your harddisk. Please press OK to start the backup now."
+msgstr "Du har valt att ta backup till din hårddisk. Vänligen tryck OK så startar backupen."
 
-msgid ""
-"You have chosen to backup your settings. Please press OK to start the backup "
-"now."
-msgstr ""
-"Du har valt att ta backup på dina inställningar. Vänligen tryck OK för att "
-"starta backup nu."
+msgid "You have chosen to backup your settings. Please press OK to start the backup now."
+msgstr "Du har valt att ta backup på dina inställningar. Vänligen tryck OK för att starta backup nu."
 
-msgid ""
-"You have chosen to create a new .NFI flasher bootable USB stick. This will "
-"repartition the USB stick and therefore all data on it will be erased."
-msgstr ""
-"Du har valt att skapa en ny .NFI flash startbar USB stick. Detta kommer "
-"repartitionera USB stickan och efter det kommer all data på den vara borta."
+msgid "You have chosen to create a new .NFI flasher bootable USB stick. This will repartition the USB stick and therefore all data on it will be erased."
+msgstr "Du har valt att skapa en ny .NFI flash startbar USB stick. Detta kommer repartitionera USB stickan och efter det kommer all data på den vara borta."
 
-msgid ""
-"You have chosen to restore your settings. Enigma2 will restart after "
-"restore. Please press OK to start the restore now."
-msgstr ""
-"Du har valt att återskapa dina inställningar. Enigma2 kommer starta om efter "
-"återskapningen. Vänligen tryck OK för att starta återskapningen nu."
+msgid "You have chosen to restore your settings. Enigma2 will restart after restore. Please press OK to start the restore now."
+msgstr "Du har valt att återskapa dina inställningar. Enigma2 kommer starta om efter återskapningen. Vänligen tryck OK för att starta återskapningen nu."
 
 #, python-format
 msgid "You have to wait %s!"
 msgstr "Du måste vänta %s!"
 
 msgid ""
-"You need a PC connected to your dreambox. If you need further instructions, "
-"please visit the website http://www.dm7025.de.\n"
-"Your dreambox will now be halted. After you have performed the update "
-"instructions from the website, your new firmware will ask you to restore "
-"your settings."
+"You need a PC connected to your dreambox. If you need further instructions, please visit the website http://www.dm7025.de.\n"
+"Your dreambox will now be halted. After you have performed the update instructions from the website, your new firmware will ask you to restore your settings."
 msgstr ""
-"Du behöver ha en PC kopplad till din Dreambox. Behöver du ytterligare "
-"instruktioner vänligen gå till websidan http://www.dm7025.de.\n"
-"Din dreambox kommer nu att stoppas. När du har genomfört uppdateringen "
-"instruktioner från websidan, din nya mjukvara kommer att fråga dig om du "
-"vill återställa dina inställningar."
+"Du behöver ha en PC kopplad till din Dreambox. Behöver du ytterligare instruktioner vänligen gå till websidan http://www.dm7025.de.\n"
+"Din dreambox kommer nu att stoppas. När du har genomfört uppdateringen instruktioner från websidan, din nya mjukvara kommer att fråga dig om du vill återställa dina inställningar."
 
 msgid ""
 "You need to set a pin code and hide it from your children.\n"
@@ -4886,6 +4699,11 @@ msgid ""
 "\n"
 "Please press OK to continue."
 msgstr ""
+"Din Dreambox är nu klar för användning.\n"
+"\n"
+"Din Internet anslutning fungerar nu.\n"
+"\n"
+"Vänligen tryck OK för att forsätta."
 
 msgid "Your Dreambox will restart after pressing OK on your remote control."
 msgstr "Din Dreambox kommer starta vid tryck på OK på din fjärrkontroll."
@@ -4893,29 +4711,17 @@ msgstr "Din Dreambox kommer starta vid tryck på OK på din fjärrkontroll."
 msgid "Your TV works with 50 Hz. Good!"
 msgstr "Din TV fungerar med 50 Hz. Bra!"
 
-msgid ""
-"Your backup succeeded. We will now continue to explain the further upgrade "
-"process."
-msgstr ""
-"Backupen lyckades. Vi kommer nu att fortsätta förklara "
-"uppgraderingsprocessen."
+msgid "Your backup succeeded. We will now continue to explain the further upgrade process."
+msgstr "Backupen lyckades. Vi kommer nu att fortsätta förklara uppgraderingsprocessen."
 
-msgid ""
-"Your collection exceeds the size of a single layer medium, you will need a "
-"blank dual layer DVD!"
-msgstr ""
-"Din samling överstiger storleken på single layer media, du kommer behöva en "
-"tom dual layer DVD!"
+msgid "Your collection exceeds the size of a single layer medium, you will need a blank dual layer DVD!"
+msgstr "Din samling överstiger storleken på single layer media, du kommer behöva en tom dual layer DVD!"
 
 msgid "Your dreambox is shutting down. Please stand by..."
 msgstr "Din Dreambox håller på att stängas av. Vänligen vänta..."
 
-msgid ""
-"Your dreambox isn't connected to the internet properly. Please check it and "
-"try again."
-msgstr ""
-"Din dreambox är inte ansluten till Internet på korrekt sätt. Åtgärda och "
-"försök igen."
+msgid "Your dreambox isn't connected to the internet properly. Please check it and try again."
+msgstr "Din dreambox är inte ansluten till Internet på korrekt sätt. Åtgärda och försök igen."
 
 msgid "Your email address:"
 msgstr "Din epost adress:"
@@ -4931,6 +4737,8 @@ msgid ""
 "Your internet connection is not working!\n"
 "Please choose what you want to do next."
 msgstr ""
+"Din Internat anslutning fungerar inte!\n"
+"Vänligen välj vad du vill utföra."
 
 msgid "Your name (optional):"
 msgstr "Ditt namn (valfritt):"
@@ -4979,14 +4787,10 @@ msgid "[move mode]"
 msgstr "[flyttläge]"
 
 msgid "a gui to assign services/providers to common interface modules"
-msgstr ""
-"ett gränssnitt för att tilldela services/providers till ett common interface "
-"modul"
+msgstr "ett gränssnitt för att tilldela services/providers till ett common interface modul"
 
 msgid "a gui to assign services/providers/caids to common interface modules"
-msgstr ""
-"ett gränssnitt för att tilldela services/providers/caids till ett common "
-"interface modul"
+msgstr "ett gränssnitt för att tilldela services/providers/caids till ett common interface modul"
 
 msgid "abort alternatives edit"
 msgstr "avbryt ändra alternativ"
@@ -5868,12 +5672,8 @@ msgstr "ja"
 msgid "yes (keep feeds)"
 msgstr "ja (behåll feeds)"
 
-msgid ""
-"your dreambox might be unusable now. Please consult the manual for further "
-"assistance before rebooting your dreambox."
-msgstr ""
-"din dreambox kanske inte fungerar längre. Vänligen läs manualen hur du får "
-"hjälp innan du startar om din dreambox."
+msgid "your dreambox might be unusable now. Please consult the manual for further assistance before rebooting your dreambox."
+msgstr "din dreambox kanske inte fungerar längre. Vänligen läs manualen hur du får hjälp innan du startar om din dreambox."
 
 msgid "zap"
 msgstr "zap"
@@ -6024,8 +5824,7 @@ msgstr "zapped"
 #~ msgstr "Vill du verkligen avsluta?"
 
 #~ msgid "Do you want to continue installing or removing selected plugins?\n"
-#~ msgstr ""
-#~ "Vill du fortsätta med installation eller borttagning av vald plugin?\n"
+#~ msgstr "Vill du fortsätta med installation eller borttagning av vald plugin?\n"
 
 #~ msgid "Downloading image description..."
 #~ msgstr "Ladda ner image beskrivning..."
@@ -6106,48 +5905,38 @@ msgstr "zapped"
 
 #~ msgid ""
 #~ "No working local networkadapter 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 ""
 #~ "Inget fungerades lokalt nätverkskort hittat.\n"
-#~ "Vänligen bekräfta att du har anslutit en nätverkskabel och att ditt "
-#~ "Nätverk är korrekt konfigurerat."
+#~ "Vänligen bekräfta att du har anslutit en nätverkskabel och att ditt Nätverk är korrekt konfigurerat."
 
 #~ msgid ""
 #~ "No working wireless interface found.\n"
-#~ " Please verify that you have attached a compatible WLAN USB Stick or "
-#~ "enable your local network interface."
+#~ " Please verify that you have attached a compatible WLAN USB Stick or enable your local network interface."
 #~ msgstr ""
 #~ "Inget fungerade trådlöst nätverkskort hittat.\n"
-#~ " Vänligen bekräfta att du har anslutit ett kompatibelt WLAN USB Stick "
-#~ "eller aktiverat ditt lokala nätverkskort."
+#~ " Vänligen bekräfta att du har anslutit ett kompatibelt WLAN USB Stick eller aktiverat ditt lokala nätverkskort."
 
 #~ msgid ""
 #~ "No working wireless interface found.\n"
-#~ " Please verify that you have attached a compatible WLAN device or enable "
-#~ "you local network interface."
+#~ " Please verify that you have attached a compatible WLAN device or enable you local network interface."
 #~ msgstr ""
 #~ "Inget fungerandes trådlöst kort hittat.\n"
-#~ " Vänligen bekräfta att du har anslutit ett kompatibelt WLAN kort eller "
-#~ "aktiverat lokalt nätverkskort."
+#~ " Vänligen bekräfta att du har anslutit ett kompatibelt WLAN kort eller aktiverat lokalt nätverkskort."
 
 #~ msgid ""
 #~ "No working wireless 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 ""
 #~ "Inget fungerandes trådlöst kort hittat.\n"
-#~ " Vänligen bekräfta att du har anslutit ett kompatibelt WLAN kort eller "
-#~ "aktiverat ditt lokala nätverkskort."
+#~ " Vänligen bekräfta att du har anslutit ett kompatibelt WLAN kort eller aktiverat ditt lokala nätverkskort."
 
 #~ msgid ""
 #~ "No working wireless networkadapter found.\n"
-#~ "Please verify that you have attached a compatible WLAN USB Stick and your "
-#~ "Network is configured correctly."
+#~ "Please verify that you have attached a compatible WLAN USB Stick and your Network is configured correctly."
 #~ msgstr ""
 #~ "Inget fungerande trådlöst nätverkskort hittat.\n"
-#~ "Vänligen bekräfta att du har anslutit ett kompatibelt WLAN USB Stick och "
-#~ "konfigurerat ditt Nätverk korrekt."
+#~ "Vänligen bekräfta att du har anslutit ett kompatibelt WLAN USB Stick och konfigurerat ditt Nätverk korrekt."
 
 #~ msgid "No, let me choose default lists"
 #~ msgstr "Nej, låt mig välja grundlista"
@@ -6155,14 +5944,8 @@ msgstr "zapped"
 #~ msgid "No, send them never."
 #~ msgstr "Nej, skicka aldrig."
 
-#~ msgid ""
-#~ "Now please insert the USB stick (minimum size is 64 MB) that you want to "
-#~ "format and use as .NFI image flasher. Press OK after you've put the stick "
-#~ "back in."
-#~ msgstr ""
-#~ "Vänligen anslut nu USB stick (minsta storlek 64MB) som du vill formatera "
-#~ "och använda som .NFI image flasher. Tryck OK efter du anslutit stickan i "
-#~ "boxen. "
+#~ msgid "Now please insert the USB stick (minimum size is 64 MB) that you want to format and use as .NFI image flasher. Press OK after you've put the stick back in."
+#~ msgstr "Vänligen anslut nu USB stick (minsta storlek 64MB) som du vill formatera och använda som .NFI image flasher. Tryck OK efter du anslutit stickan i boxen. "
 
 #~ msgid "Other..."
 #~ msgstr "Annat..."
@@ -6170,31 +5953,21 @@ msgstr "zapped"
 #~ msgid "Partitioning USB stick..."
 #~ msgstr "Partitionera USB stick..."
 
-#~ msgid ""
-#~ "Please attach your Zydas ZD1211B chipset compatibe WLAN USB Stick to your "
-#~ "Dreambox and press the OK button on your remote control to enable the "
-#~ "built in wireless network support"
-#~ msgstr ""
-#~ "Vänligen anslut ditt Zydas ZD1211B chipset kompatibelt WLAN USB Stick "
-#~ "till din Dreambox och tryck OK på din fjärrkontroll för att aktivera det "
-#~ "inbyggda trådlösa nätverksstödet."
+#~ msgid "Please attach your Zydas ZD1211B chipset compatibe WLAN USB Stick to your Dreambox and press the OK button on your remote control to enable the built in wireless network support"
+#~ msgstr "Vänligen anslut ditt Zydas ZD1211B chipset kompatibelt WLAN USB Stick till din Dreambox och tryck OK på din fjärrkontroll för att aktivera det inbyggda trådlösa nätverksstödet."
 
 #~ msgid ""
-#~ "Please configure your local LAN internet connection by filling out the "
-#~ "needed values.\n"
+#~ "Please configure your local LAN internet connection by filling out the needed values.\n"
 #~ "When you are ready please press OK to continue."
 #~ msgstr ""
-#~ "Vänligen konfigurera ditt lokala LANs Internet anslutning med att fylla i "
-#~ "de behövda värdena.\n"
+#~ "Vänligen konfigurera ditt lokala LANs Internet anslutning med att fylla i de behövda värdena.\n"
 #~ "När du är klar vänligen tryck på OK för att forsätta."
 
 #~ msgid ""
-#~ "Please configure your wireless LAN internet connection by filling out the "
-#~ "needed values.\n"
+#~ "Please configure your wireless LAN internet connection by filling out the needed values.\n"
 #~ "When you are ready please press OK to continue."
 #~ msgstr ""
-#~ "Vänligen konfigurera ditt trådlösa LANs Internet med att fylla i de "
-#~ "behövda värdena.\n"
+#~ "Vänligen konfigurera ditt trådlösa LANs Internet med att fylla i de behövda värdena.\n"
 #~ "När du är klar vänligen tryck OK för att forsätta."
 
 #~ msgid "Please select below the wireless network you want to connect to."
@@ -6214,38 +5987,26 @@ msgstr "zapped"
 
 #~ msgid ""
 #~ "Pressing OK enables the built in wireless LAN support of your Dreambox.\n"
-#~ "Wlan USB Sticks with Zydas ZD1211B and RAlink RT73 Chipset are "
-#~ "supported.\n"
+#~ "Wlan USB Sticks with Zydas ZD1211B and RAlink RT73 Chipset are supported.\n"
 #~ "Connect your Wlan USB Stick to your Dreambox before pressing OK.\n"
 #~ "\n"
 #~ msgstr ""
-#~ "Att trycka på OK aktiverar det inbyggda stödet för trådlöst LAN på din "
-#~ "Dreambox.\n"
-#~ "WLAN USB Stick med Zydas ZD1211B och RAlink RT73 chipset stödjs för "
-#~ "detta.\n"
+#~ "Att trycka på OK aktiverar det inbyggda stödet för trådlöst LAN på din Dreambox.\n"
+#~ "WLAN USB Stick med Zydas ZD1211B och RAlink RT73 chipset stödjs för detta.\n"
 #~ "Anslut ditt WLAN USB Stick till din Dreambox före du trycker på OK.\n"
 #~ "\n"
 
 #~ msgid "Really delete this timer?"
 #~ msgstr "Verkligen ta bort denna timer?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really reboot "
-#~ "now?"
-#~ msgstr ""
-#~ "Inspelning(ar) pågår eller ska snart påbörjas... verkligen starta om nu?"
+#~ msgid "Recording(s) are in progress or coming up in few seconds... really reboot now?"
+#~ msgstr "Inspelning(ar) pågår eller ska snart påbörjas... verkligen starta om nu?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really "
-#~ "restart now?"
-#~ msgstr ""
-#~ "Inspelning(ar) pågår eller ska snart påbörjas... verkligen starta om nu?"
+#~ msgid "Recording(s) are in progress or coming up in few seconds... really restart now?"
+#~ msgstr "Inspelning(ar) pågår eller ska snart påbörjas... verkligen starta om nu?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really "
-#~ "shutdown now?"
-#~ msgstr ""
-#~ "Inspelning(ar) pågår eller ska snart påbörjas... verkligen stänga av nu?"
+#~ msgid "Recording(s) are in progress or coming up in few seconds... really shutdown now?"
+#~ msgstr "Inspelning(ar) pågår eller ska snart påbörjas... verkligen stänga av nu?"
 
 #~ msgid "Remounting stick partition..."
 #~ msgstr "Ommontera stcik partition..."
@@ -6299,8 +6060,7 @@ msgstr "zapped"
 #~ "\n"
 #~ "Please press OK to continue."
 #~ msgstr ""
-#~ "Tack för att du använde guiden. Din dreambox är nu klar för att "
-#~ "användas.\n"
+#~ "Tack för att du använde guiden. Din dreambox är nu klar för att användas.\n"
 #~ "\n"
 #~ "Ditt lokala LANs Internet anslutning fungerar nu.\n"
 #~ "\n"
@@ -6313,8 +6073,7 @@ msgstr "zapped"
 #~ "\n"
 #~ "Please press OK to continue."
 #~ msgstr ""
-#~ "Tack för att du använde guiden. Din Dreambox är nu klar för att "
-#~ "användas.\n"
+#~ "Tack för att du använde guiden. Din Dreambox är nu klar för att användas.\n"
 #~ "\n"
 #~ "Ditt trådlösa Internet anslutning fungerar nu.\n"
 #~ "\n"
@@ -6324,32 +6083,17 @@ msgstr "zapped"
 #~ "Thank you for using the wizard. Your Dreambox is now ready to use.\n"
 #~ "Please press OK to start using your Dreambox."
 #~ msgstr ""
-#~ "Tack för att du använde guiden. Din Dreambox är nu klar för att "
-#~ "användas.\n"
+#~ "Tack för att du använde guiden. Din Dreambox är nu klar för att användas.\n"
 #~ "Vänligen tryck OK för att börja använda din Dreambox."
 
-#~ msgid ""
-#~ "The .NFI Image flasher USB stick is now ready to use. Please download an ."
-#~ "NFI image file from the feed server and save it on the stick. Then reboot "
-#~ "and hold the 'Down' key on the front panel to boot the .NFI flasher from "
-#~ "the stick!"
-#~ msgstr ""
-#~ ".NFI Image flasher USB stick är nu klar för att användas. Vänligen ladda "
-#~ "ner .NFI image fil från feed server och spara på stickan. Efter det "
-#~ "starta om och håll 'Ner' knappen på fronten intryckt för att starta .NFI "
-#~ "flasher från stickan!"
+#~ msgid "The .NFI Image flasher USB stick is now ready to use. Please download an .NFI image file from the feed server and save it on the stick. Then reboot and hold the 'Down' key on the front panel to boot the .NFI flasher from the stick!"
+#~ msgstr ".NFI Image flasher USB stick är nu klar för att användas. Vänligen ladda ner .NFI image fil från feed server och spara på stickan. Efter det starta om och håll 'Ner' knappen på fronten intryckt för att starta .NFI flasher från stickan!"
 
 #~ msgid "Title:"
 #~ msgstr "Titel:"
 
-#~ msgid ""
-#~ "To make sure you intend to do this, please remove the target USB stick "
-#~ "now and stick it back in upon prompt. Press OK when you have taken the "
-#~ "stick out."
-#~ msgstr ""
-#~ "För att säkerställa att du verkligen vill göra detta, vänligen ta ut mål "
-#~ "USB stickan nu och sätt tillbaka den vid begäran. Tryck OK när du har "
-#~ "tagit ut stickan."
+#~ msgid "To make sure you intend to do this, please remove the target USB stick now and stick it back in upon prompt. Press OK when you have taken the stick out."
+#~ msgstr "För att säkerställa att du verkligen vill göra detta, vänligen ta ut mål USB stickan nu och sätt tillbaka den vid begäran. Tryck OK när du har tagit ut stickan."
 
 #~ msgid "Unicable"
 #~ msgstr "Unicable"
@@ -6372,15 +6116,13 @@ msgstr "zapped"
 #~ 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"
+#~ "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 the OK button on your remote control to move to the next step."
 #~ msgstr ""
 #~ "Välkommen.\n"
 #~ "\n"
-#~ "Om du vill ansluta din Dreambox till Internet, denna guide kommer hjälpa "
-#~ "dig med grundinställningarna av nätverket i din Dreambox.\n"
+#~ "Om du vill ansluta din Dreambox till Internet, denna guide kommer hjälpa dig med grundinställningarna av nätverket i din Dreambox.\n"
 #~ "\n"
 #~ "Tryck OK på din fjärrkontroll för att gå till nästa steg."
 
diff --git a/skin.py b/skin.py
old mode 100644 (file)
new mode 100755 (executable)
index 5b8ce65..064fd21
--- a/skin.py
+++ b/skin.py
@@ -148,6 +148,8 @@ def applySingleAttribute(guiObject, desktop, attrib, value, scale = ((1,1),(1,1)
                        guiObject.setFont(parseFont(value, scale))
                elif attrib == 'zPosition':
                        guiObject.setZPosition(int(value))
+               elif attrib == 'itemHeight':
+                       guiObject.setItemHeight(int(value))
                elif attrib in ("pixmap", "backgroundPixmap", "selectionPixmap"):
                        ptr = loadPixmap(value, desktop) # this should already have been filename-resolved.
                        if attrib == "pixmap":