Merge commit 'origin/translations' into experimental
authoracid-burn <acid-burn@opendreambox.org>
Wed, 31 Mar 2010 08:07:21 +0000 (10:07 +0200)
committeracid-burn <acid-burn@opendreambox.org>
Wed, 31 Mar 2010 08:07:21 +0000 (10:07 +0200)
289 files changed:
Navigation.py
RecordTimer.py
configure.ac
data/defaults/Dream/Makefile.am
data/defaults/Dream/dm500hd.info
data/defaults/Dream/dm7025.info
data/defaults/Dream/dm800.info
data/defaults/Dream/dm8000.info
data/defaults/Dream/hdbouquets/Makefile.am [new file with mode: 0644]
data/defaults/Dream/hdbouquets/userbouquet.favourites.tv [new file with mode: 0644]
data/defaults/Dream/sdbouquets/Makefile.am [new file with mode: 0644]
data/defaults/Dream/sdbouquets/userbouquet.favourites.tv [new file with mode: 0644]
data/defaults/Dream/userbouquet.favourites.tv [deleted file]
data/encoding.conf
data/keymap.xml
data/menu.xml [changed mode: 0644->0755]
data/setup.xml
data/skin.xml
data/skin_default.xml
data/skin_default/Makefile.am [changed mode: 0644->0755]
data/skin_default/border_menu_350.png [new file with mode: 0755]
data/skin_default/celserviceeventprogressbar.png [new file with mode: 0644]
data/skin_default/div-h.png [changed mode: 0644->0755]
data/skin_default/icons/dish.png
data/skin_default/lock.png [new file with mode: 0644]
data/skin_default/lockBouquet.png [new file with mode: 0644]
data/skin_default/unhandled-key.png [new file with mode: 0644]
data/skin_default/unlock.png [new file with mode: 0644]
data/skin_default/unlockBouquet.png [new file with mode: 0644]
doc/DEFAULTS
lib/actions/action.cpp
lib/base/ebase.cpp
lib/base/ebase.h
lib/base/elock.h
lib/base/filepush.cpp
lib/base/ioprio.cpp
lib/driver/rc.cpp
lib/driver/rc.h
lib/driver/rcconsole.cpp
lib/driver/rcinput.cpp
lib/driver/rcinput.h
lib/dvb/decoder.cpp
lib/dvb/decoder.h
lib/dvb/dvb.cpp
lib/dvb/epgcache.cpp
lib/dvb/epgcache.h
lib/dvb/frontend.cpp
lib/dvb/frontend.h
lib/dvb/idvb.h
lib/dvb/lowlevel/mhw.h
lib/dvb/pmt.cpp
lib/dvb/pmt.h
lib/dvb/pvrparse.cpp
lib/dvb/scan.cpp
lib/dvb/scan.h
lib/dvb/sec.cpp
lib/dvb/tstools.cpp
lib/dvb/tstools.h
lib/gdi/grc.cpp
lib/gdi/grc.h
lib/gui/elistboxcontent.cpp
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/Converter/ServiceInfo.py
lib/python/Components/Converter/TemplatedMultiContent.py [changed mode: 0644->0755]
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/Ipkg.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
lib/python/Components/ParentalControlList.py
lib/python/Components/PluginComponent.py
lib/python/Components/Renderer/Listbox.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
lib/python/Components/Sources/List.py
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/Task.py
lib/python/Components/TimerList.py [changed mode: 0644->0755]
lib/python/Components/TuneTest.py
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/DVDProject.py
lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py
lib/python/Plugins/Extensions/DVDBurn/Process.py
lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py
lib/python/Plugins/Extensions/DVDBurn/TitleCutter.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/DVDBurn/plugin.py
lib/python/Plugins/Extensions/DVDPlayer/Makefile.am
lib/python/Plugins/Extensions/DVDPlayer/meta/plugin_dvdplayer.xml [changed mode: 0644->0755]
lib/python/Plugins/Extensions/DVDPlayer/plugin.py
lib/python/Plugins/Extensions/DVDPlayer/src/Makefile.am
lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp
lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.h
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/Extensions/SocketMMI/Makefile.am
lib/python/Plugins/Extensions/SocketMMI/src/Makefile.am
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/CleanupWizard/plugin.py
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/CrashlogAutoSubmit/plugin.py
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/NetworkWizard/plugin.py
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/PositionerSetup/plugin.py
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/Makefile.am [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/SoftwareTools.py [new file with mode: 0755]
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/HDMI.png [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/Videomode/Makefile.am
lib/python/Plugins/SystemPlugins/Videomode/VideoWizard.py
lib/python/Plugins/SystemPlugins/Videomode/lcd_HDMI.png [new file with mode: 0644]
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/Videomode/plugin.py
lib/python/Plugins/SystemPlugins/Videomode/videowizard.xml
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/ChannelSelection.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 [changed mode: 0644->0755]
lib/python/Screens/MessageBox.py
lib/python/Screens/MovieSelection.py
lib/python/Screens/NetworkSetup.py
lib/python/Screens/ParentalControlSetup.py [changed mode: 0755->0644]
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/Screen.py
lib/python/Screens/ServiceStopScreen.py [new file with mode: 0644]
lib/python/Screens/SleepTimerEdit.py
lib/python/Screens/Standby.py
lib/python/Screens/TaskView.py
lib/python/Screens/TimerEdit.py
lib/python/Screens/TimerEntry.py
lib/python/Screens/UnhandledKey.py [new file with mode: 0644]
lib/python/Screens/VirtualKeyBoard.py
lib/python/Screens/Wizard.py
lib/python/Tools/Directories.py
lib/python/Tools/HardwareInfo.py
lib/service/iservice.h
lib/service/listboxservice.cpp
lib/service/listboxservice.h
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/ar.po
po/ca.po
po/cs.po
po/da.po
po/de.po
po/el.po
po/en.po
po/enigma2.pot
po/enigma2_rel25.pot [deleted file]
po/es.po
po/et.po
po/fi.po
po/fr.po
po/fy.po
po/hr.po
po/hu.po
po/is.po
po/it.po
po/lt.po
po/lv.po
po/nl.po
po/no.po
po/pl.po
po/pt.po
po/ru.po
po/sk.po
po/sl.po
po/sr.po
po/sv.po
po/tr.po
po/uk.po
po/xml2po.py
skin.py [changed mode: 0644->0755]
tools/genmetaindex.py

index 2ca87f6..a905da1 100644 (file)
@@ -50,10 +50,10 @@ 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:
-                       print "ignore request to play already running service"
+               if ref and oldref and ref == oldref and not forceRestart:
+                       print "ignore request to play already running service(1)"
                        return 0
                print "playing", ref and ref.toString()
                if ref is None:
@@ -64,6 +64,10 @@ class Navigation:
                                if not oldref:
                                        oldref = eServiceReference()
                                playref = getBestPlayableServiceReference(ref, oldref)
+                               print "playref", playref
+                               if playref and oldref and playref == oldref and not forceRestart:
+                                       print "ignore request to play already running service(2)"
+                                       return 0
                                if not playref or (checkParentalControl and not parentalControl.isServicePlayable(playref, boundFunction(self.playService, checkParentalControl = False))):
                                        self.stopService()
                                        return 0
index 4907f64..f670417 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 5e403de..d1b1d27 100755 (executable)
@@ -90,6 +90,8 @@ data/fonts/Makefile
 data/countries/Makefile
 data/defaults/Makefile
 data/defaults/Dream/Makefile
+data/defaults/Dream/hdbouquets/Makefile
+data/defaults/Dream/sdbouquets/Makefile
 data/extensions/Makefile
 data/skin_default/Makefile
 data/skin_default/menu/Makefile
@@ -155,6 +157,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 +179,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 113442c..31ba1c6 100644 (file)
@@ -1,3 +1,5 @@
+SUBDIRS = hdbouquets sdbouquets
+
 installdir = $(pkgdatadir)/defaults/Dream
 
 dist_install_DATA = \
@@ -9,5 +11,4 @@ dist_install_DATA = \
        settings.500hd \
        settings.7025 \
        settings.800 \
-       settings.8000 \
-       userbouquet.favourites.tv
+       settings.8000
index fbf7888..b1b4d53 100644 (file)
@@ -20,7 +20,7 @@
                        </prerequisites>
                </file-->
                <file type="favourites" directory="" name="bouquets.tv" />              
-               <file type="favourites" directory="" name="userbouquet.favourites.tv" />
+               <file type="favourites" directory="hdbouquets/" name="userbouquet.favourites.tv" />
                <!--file type="package" directory="packages/" name="small-test_1.0_mipsel.ipk" /-->
        </files>
 </default>
index 0461b68..a1585cf 100644 (file)
@@ -20,7 +20,7 @@
                        </prerequisites>
                </file-->
                <file type="favourites" directory="" name="bouquets.tv" />              
-               <file type="favourites" directory="" name="userbouquet.favourites.tv" />
+               <file type="favourites" directory="sdbouquets/" name="userbouquet.favourites.tv" />
                <!--file type="package" directory="packages/" name="small-test_1.0_mipsel.ipk" /-->
        </files>
 </default>
index 8c68349..4793bd8 100644 (file)
@@ -20,7 +20,7 @@
                        </prerequisites>
                </file-->
                <file type="favourites" directory="" name="bouquets.tv" />              
-               <file type="favourites" directory="" name="userbouquet.favourites.tv" />
+               <file type="favourites" directory="hdbouquets/" name="userbouquet.favourites.tv" />
                <!--file type="package" directory="packages/" name="small-test_1.0_mipsel.ipk" /-->
        </files>
 </default>
index 8b11946..2ef2013 100644 (file)
@@ -20,7 +20,7 @@
                        </prerequisites>
                </file-->
                <file type="favourites" directory="" name="bouquets.tv" />              
-               <file type="favourites" directory="" name="userbouquet.favourites.tv" />
+               <file type="favourites" directory="hdbouquets/" name="userbouquet.favourites.tv" />
                <!--file type="package" directory="packages/" name="small-test_1.0_mipsel.ipk" /-->
        </files>
 </default>
diff --git a/data/defaults/Dream/hdbouquets/Makefile.am b/data/defaults/Dream/hdbouquets/Makefile.am
new file mode 100644 (file)
index 0000000..843a07d
--- /dev/null
@@ -0,0 +1,4 @@
+installdir = $(pkgdatadir)/defaults/Dream/hdbouquets
+
+dist_install_DATA = \
+       userbouquet.favourites.tv
diff --git a/data/defaults/Dream/hdbouquets/userbouquet.favourites.tv b/data/defaults/Dream/hdbouquets/userbouquet.favourites.tv
new file mode 100644 (file)
index 0000000..91536b1
--- /dev/null
@@ -0,0 +1,129 @@
+#NAME Favourites (TV)\r
+#SERVICE 1:0:19:2B5C:3F3:1:C00000:0:0:0:\r
+#SERVICE 1:0:19:2B66:3F3:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6DCC:44D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2EE3:441:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:445C:453:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2EF4:441:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:445D:453:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:445E:453:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:33:21:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:701:5:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:2F1C:441:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6D6E:437:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2FC:5:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:F98:454:1:C00000:0:0:0:\r
+#SERVICE 1:0:19:2B70:3F3:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6D67:437:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:7031:41B:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:7032:41B:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:7033:41B:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E46:431:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6DCE:44D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6DD1:44D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6DCF:44D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E42:431:1:C00000:0:0:0:\r
+#SERVICE 1:64:B:0:0:0:0:0:0:0::Doku/Wissen/Themen\r
+#DESCRIPTION Doku/Wissen/Themen\r
+#SERVICE 1:0:1:6DD0:44D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6D6B:437:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2775:444:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:293:5:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:6D70:437:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:277B:444:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:332D:45B:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:3139:459:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2F5A:454:1:C00000:0:0:0:\r
+#SERVICE 1:64:A:0:0:0:0:0:0:0::Sport\r
+#DESCRIPTION Sport\r
+#SERVICE 1:0:1:384:21:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:79E0:443:1:C00000:0:0:0:\r
+#SERVICE 1:64:1:0:0:0:0:0:0:0::Kinder\r
+#DESCRIPTION Kinder\r
+#SERVICE 1:0:1:2F08:441:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6D68:437:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:7008:436:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6FE0:443:1:C00000:0:0:0:\r
+#SERVICE 1:64:2:0:0:0:0:0:0:0::Nachrichten\r
+#DESCRIPTION Nachrichten\r
+#SERVICE 1:0:1:2F3A:441:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:445F:453:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:79F4:443:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2753:402:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:7035:41B:1:C00000:0:0:0:\r
+#SERVICE 1:64:3:0:0:0:0:0:0:0::Regional\r
+#DESCRIPTION Regional\r
+#SERVICE 1:0:1:3146:459:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:300:7:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:2778:444:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:277A:444:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2779:444:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2777:444:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:32D6:45D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:277D:444:1:C00000:0:0:0:\r
+#SERVICE 1:64:4:0:0:0:0:0:0:0::Musik\r
+#DESCRIPTION Musik\r
+#SERVICE 1:0:1:2774:444:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:7004:436:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:7001:436:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6FE1:443:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2FD:7:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:32D5:45D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:332E:45B:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:304:5:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:702:5:85:C00000:0:0:0:\r
+#SERVICE 1:64:5:0:0:0:0:0:0:0::Reisen\r
+#DESCRIPTION Reisen\r
+#SERVICE 1:0:1:20:21:85:C00000:0:0:0:\r
+#SERVICE 1:64:9:0:0:0:0:0:0:0::Beratung\r
+#DESCRIPTION Beratung\r
+#SERVICE 1:0:1:295:21:85:C00000:0:0:0:\r
+#SERVICE 1:64:6:0:0:0:0:0:0:0::Einkaufen\r
+#DESCRIPTION Einkaufen\r
+#SERVICE 1:0:1:301:7:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:28:21:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:79EA:443:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2F44:454:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:3148:459:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:36:7:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:307:7:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:296:5:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:383:21:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:313C:459:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:3159:459:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2E:21:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:381:21:85:C00000:0:0:0:\r
+#SERVICE 1:64:7:0:0:0:0:0:0:0::High Definition\r
+#DESCRIPTION High Definition\r
+#SERVICE 1:0:19:6EEC:4B1:1:C00000:0:0:0:\r
+#SERVICE 1:0:19:EF12:421:1:C00000:0:0:0:\r
+#SERVICE 1:0:19:EF13:421:1:C00000:0:0:0:\r
+#SERVICE 1:64:0:0:0:0:0:0:0:0::Alternativen\r
+#DESCRIPTION Alternativen\r
+#SERVICE 1:0:1:6DCB:44D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E44:431:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E45:431:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E41:431:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E40:431:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E43:431:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6EE1:4B1:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E2D:431:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E2E:431:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6F46:445:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E47:431:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6F76:457:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E92:4B1:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E93:4B1:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6F78:457:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6F79:457:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E94:4B1:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6F77:457:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6EEB:4B1:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E97:4B1:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E96:4B1:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E95:4B1:1:C00000:0:0:0:\r
+#SERVICE 1:64:8:0:0:0:0:0:0:0::Alternative SD services\r
+#DESCRIPTION Alternative SD services\r
+#SERVICE 1:0:1:6DCA:44D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6D66:437:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:7034:41B:1:C00000:0:0:0:\r
diff --git a/data/defaults/Dream/sdbouquets/Makefile.am b/data/defaults/Dream/sdbouquets/Makefile.am
new file mode 100644 (file)
index 0000000..50328e5
--- /dev/null
@@ -0,0 +1,4 @@
+installdir = $(pkgdatadir)/defaults/Dream/sdbouquets
+
+dist_install_DATA = \
+       userbouquet.favourites.tv
diff --git a/data/defaults/Dream/sdbouquets/userbouquet.favourites.tv b/data/defaults/Dream/sdbouquets/userbouquet.favourites.tv
new file mode 100644 (file)
index 0000000..5f89c48
--- /dev/null
@@ -0,0 +1,127 @@
+#NAME Favourites (TV)\r
+#SERVICE 1:0:1:6DCA:44D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6D66:437:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6DCC:44D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2EE3:441:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:445C:453:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2EF4:441:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:445D:453:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:445E:453:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:33:21:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:701:5:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:2F1C:441:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6D6E:437:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2FC:5:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:F98:454:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:7034:41B:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6D67:437:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:7031:41B:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:7032:41B:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:7033:41B:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E46:431:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6DCE:44D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6DD1:44D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6DCF:44D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E42:431:1:C00000:0:0:0:\r
+#SERVICE 1:64:B:0:0:0:0:0:0:0::Doku/Wissen/Themen\r
+#DESCRIPTION Doku/Wissen/Themen\r
+#SERVICE 1:0:1:6DD0:44D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6D6B:437:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2775:444:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:293:5:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:6D70:437:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:277B:444:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:332D:45B:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:3139:459:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2F5A:454:1:C00000:0:0:0:\r
+#SERVICE 1:64:A:0:0:0:0:0:0:0::Sport\r
+#DESCRIPTION Sport\r
+#SERVICE 1:0:1:384:21:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:79E0:443:1:C00000:0:0:0:\r
+#SERVICE 1:64:1:0:0:0:0:0:0:0::Kinder\r
+#DESCRIPTION Kinder\r
+#SERVICE 1:0:1:2F08:441:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6D68:437:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:7008:436:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6FE0:443:1:C00000:0:0:0:\r
+#SERVICE 1:64:2:0:0:0:0:0:0:0::Nachrichten\r
+#DESCRIPTION Nachrichten\r
+#SERVICE 1:0:1:2F3A:441:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:445F:453:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:79F4:443:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2753:402:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:7035:41B:1:C00000:0:0:0:\r
+#SERVICE 1:64:3:0:0:0:0:0:0:0::Regional\r
+#DESCRIPTION Regional\r
+#SERVICE 1:0:1:3146:459:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:300:7:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:2778:444:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:277A:444:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2779:444:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2777:444:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:32D6:45D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:277D:444:1:C00000:0:0:0:\r
+#SERVICE 1:64:4:0:0:0:0:0:0:0::Musik\r
+#DESCRIPTION Musik\r
+#SERVICE 1:0:1:2774:444:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:7004:436:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:7001:436:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6FE1:443:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2FD:7:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:32D5:45D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:332E:45B:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:304:5:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:702:5:85:C00000:0:0:0:\r
+#SERVICE 1:64:5:0:0:0:0:0:0:0::Reisen\r
+#DESCRIPTION Reisen\r
+#SERVICE 1:0:1:20:21:85:C00000:0:0:0:\r
+#SERVICE 1:64:9:0:0:0:0:0:0:0::Beratung\r
+#DESCRIPTION Beratung\r
+#SERVICE 1:0:1:295:21:85:C00000:0:0:0:\r
+#SERVICE 1:64:6:0:0:0:0:0:0:0::Einkaufen\r
+#DESCRIPTION Einkaufen\r
+#SERVICE 1:0:1:301:7:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:28:21:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:79EA:443:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2F44:454:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:3148:459:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:36:7:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:307:7:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:296:5:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:383:21:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:313C:459:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:3159:459:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:2E:21:85:C00000:0:0:0:\r
+#SERVICE 1:0:1:381:21:85:C00000:0:0:0:\r
+#SERVICE 1:64:7:0:0:0:0:0:0:0::High Definition\r
+#DESCRIPTION High Definition\r
+#SERVICE 1:0:19:2B5C:3F3:1:C00000:0:0:0:\r
+#SERVICE 1:0:19:2B66:3F3:1:C00000:0:0:0:\r
+#SERVICE 1:0:19:2B70:3F3:1:C00000:0:0:0:\r
+#SERVICE 1:0:19:6EEC:4B1:1:C00000:0:0:0:\r
+#SERVICE 1:0:19:EF12:421:1:C00000:0:0:0:\r
+#SERVICE 1:0:19:EF13:421:1:C00000:0:0:0:\r
+#SERVICE 1:64:0:0:0:0:0:0:0:0::Alternativen\r
+#DESCRIPTION Alternativen\r
+#SERVICE 1:0:1:6DCB:44D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E44:431:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E45:431:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E41:431:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E40:431:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E43:431:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6EE1:4B1:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E2D:431:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E2E:431:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6F46:445:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E47:431:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6F76:457:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E92:4B1:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E93:4B1:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6F78:457:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6F79:457:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E94:4B1:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6F77:457:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6EEB:4B1:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E97:4B1:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E96:4B1:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6E95:4B1:1:C00000:0:0:0:\r
diff --git a/data/defaults/Dream/userbouquet.favourites.tv b/data/defaults/Dream/userbouquet.favourites.tv
deleted file mode 100644 (file)
index f1adaf9..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-#NAME Favourites (TV)\r
-#SERVICE 1:0:1:6DCA:44D:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6D66:437:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6DCC:44D:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:2EE3:441:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:445C:453:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:2EF4:441:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:445D:453:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:445E:453:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:33:21:85:C00000:0:0:0:\r
-#SERVICE 1:0:1:701:5:85:C00000:0:0:0:\r
-#SERVICE 1:0:1:2F1C:441:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:7005:436:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:2FC:5:85:C00000:0:0:0:\r
-#SERVICE 1:0:1:F98:454:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:7034:41B:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6D67:437:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:7031:41B:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:7032:41B:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:7033:41B:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6E46:431:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6DCE:44D:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6DD1:44D:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6DCF:44D:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6E42:431:1:C00000:0:0:0:\r
-#SERVICE 1:64:B:0:0:0:0:0:0:0::Doku/Wissen/Themen\r
-#DESCRIPTION Doku/Wissen/Themen\r
-#SERVICE 1:0:1:6DD0:44D:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6D6E:437:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6D6B:437:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:2775:444:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:293:5:85:C00000:0:0:0:\r
-#SERVICE 1:0:1:3138:459:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6D70:437:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:277B:444:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:332D:45B:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:3139:459:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:2F5A:454:1:C00000:0:0:0:\r
-#SERVICE 1:64:A:0:0:0:0:0:0:0::Sport\r
-#DESCRIPTION Sport\r
-#SERVICE 1:0:1:384:21:85:C00000:0:0:0:\r
-#SERVICE 1:0:1:79E0:443:1:C00000:0:0:0:\r
-#SERVICE 1:64:1:0:0:0:0:0:0:0::Kinder\r
-#DESCRIPTION Kinder\r
-#SERVICE 1:0:1:2F08:441:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6D68:437:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:7008:436:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6FE0:443:1:C00000:0:0:0:\r
-#SERVICE 1:64:2:0:0:0:0:0:0:0::Nachrichten\r
-#DESCRIPTION Nachrichten\r
-#SERVICE 1:0:1:2F3A:441:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:445F:453:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:79F4:443:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:2753:402:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:7035:41B:1:C00000:0:0:0:\r
-#SERVICE 1:64:3:0:0:0:0:0:0:0::Regional\r
-#DESCRIPTION Regional\r
-#SERVICE 1:0:1:3146:459:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:300:7:85:C00000:0:0:0:\r
-#SERVICE 1:0:1:2778:444:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:277A:444:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:2779:444:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:2777:444:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:32D6:45D:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:277D:444:1:C00000:0:0:0:\r
-#SERVICE 1:64:4:0:0:0:0:0:0:0::Musik\r
-#DESCRIPTION Musik\r
-#SERVICE 1:0:1:2774:444:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:7004:436:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:7001:436:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6FE1:443:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:2FD:7:85:C00000:0:0:0:\r
-#SERVICE 1:0:1:32D5:45D:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:332E:45B:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:304:5:85:C00000:0:0:0:\r
-#SERVICE 1:0:1:702:5:85:C00000:0:0:0:\r
-#SERVICE 1:64:5:0:0:0:0:0:0:0::Reisen\r
-#DESCRIPTION Reisen\r
-#SERVICE 1:0:1:20:21:85:C00000:0:0:0:\r
-#SERVICE 1:0:1:3339:45B:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:27B9:444:1:C00000:0:0:0:\r
-#SERVICE 1:64:9:0:0:0:0:0:0:0::Beratung\r
-#DESCRIPTION Beratung\r
-#SERVICE 1:0:1:295:21:85:C00000:0:0:0:\r
-#SERVICE 1:64:6:0:0:0:0:0:0:0::Einkaufen\r
-#DESCRIPTION Einkaufen\r
-#SERVICE 1:0:1:301:7:85:C00000:0:0:0:\r
-#SERVICE 1:0:1:28:21:85:C00000:0:0:0:\r
-#SERVICE 1:0:1:79EA:443:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:2F44:454:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:3148:459:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:36:7:85:C00000:0:0:0:\r
-#SERVICE 1:0:1:307:7:85:C00000:0:0:0:\r
-#SERVICE 1:0:1:296:5:85:C00000:0:0:0:\r
-#SERVICE 1:0:1:2791:444:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:383:21:85:C00000:0:0:0:\r
-#SERVICE 1:0:1:313C:459:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:3159:459:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:2E:21:85:C00000:0:0:0:\r
-#SERVICE 1:0:1:381:21:85:C00000:0:0:0:\r
-#SERVICE 1:64:7:0:0:0:0:0:0:0::High Definition\r
-#DESCRIPTION High Definition\r
-#SERVICE 1:0:19:2B5C:3F3:1:C00000:0:0:0:\r
-#SERVICE 1:0:19:2B66:3F3:1:C00000:0:0:0:\r
-#SERVICE 1:0:19:2B70:3F3:1:C00000:0:0:0:\r
-#SERVICE 1:0:19:6EEC:4B1:1:C00000:0:0:0:\r
-#SERVICE 1:0:19:1324:3EF:1:C00000:0:0:0:\r
-#SERVICE 1:0:19:1325:3EF:1:C00000:0:0:0:\r
-#SERVICE 1:0:19:2B84:3F3:1:C00000:0:0:0:\r
-#SERVICE 1:64:0:0:0:0:0:0:0:0::Alternativen\r
-#DESCRIPTION Alternativen\r
-#SERVICE 1:0:1:6DCB:44D:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6E44:431:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6E45:431:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6E41:431:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6E40:431:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6E43:431:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6EE1:4B1:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6E2D:431:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6E2E:431:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6F46:445:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6E47:431:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6F76:457:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6E92:4B1:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6E93:4B1:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6F78:457:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6F79:457:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6E94:4B1:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6F77:457:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6EEB:4B1:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6E97:4B1:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6E96:4B1:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:6E95:4B1:1:C00000:0:0:0:\r
index 14eeaef..a3cefe6 100644 (file)
@@ -1,28 +1,36 @@
 #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
 rus ISO8859-5
 bul ISO8859-5
+cze ISO6397
+ces ISO6397
+slo ISO6397
+slk ISO6397
 #Sorry for that.. in DVB Spec this is the default behavior 
 #when no other encoding is given in dvb-texts..
 #but this breaks too much providers yet.. 
 #so our default is ISO8859-1 without two char byte encoding
 #So all transponders which needs this must be listed here
 #TSID ONID
-0x447 0x1 #ASTRA 19.2 UPC Direct
-0x427 0x1 #ASTRA 19.2 UPC Direct
-0x44b 0x1 #ASTRA 19.2 UPC Direct
-0x4ff 0x1 #ASTRA 19.2 UPC Direct
-0x407 0x1 #ASTRA 19.2 UPC Direct
-0x436 0x1 #ASTRA 19.2 MTV Euro - MTV Networks
-0x42a 0x1 #ASTRA 19.2 VH1 Classic - MTV Networks
-0xbc6 0x3 #ASTRA 23.5 Cslink, Skylink
-0xc85 0x3 #ASTRA 23.5 Cslink, Skylink
-0xc89 0x3 #ASTRA 23.5 Cslink, Skylink
-0xc8f 0x3 #ASTRA 23.5 Cslink, Skylink
-0xbc7 0x3 #ASTRA 23.5 Cslink, Skylink
+0x447 0x1 # Astra 19.2°E 12.304 H - UPC Direct 
+0x427 0x1 # Astra 19.2°E 10.920 H - UPC Direct 
+0x44b 0x1 # Astra 19.2°E 12.382 H - UPC Direct
+0x4ff 0x1 # Astra 19.2°E 11.992 H - UPC Direct 
+0x407 0x1 # Astra 19.2°E 11.671 H - UPC Direct 
+0x436 0x1 # Astra 19.2°E 11.973 V - MTV Networks Europe
+0x42a 0x1 # Astra 19.2°E 11.739 V - MTV Networks Europe
+0xc23 0x3 # Astra 23.5°E 10.803 H - CS Link / SkyLink
+0xc85 0x3 # Astra 23.5°E 11.797 H - CS Link / SkyLink
+0xc89 0x3 # Astra 23.5°E 11.876 H - CS Link / SkyLink
+0xc8f 0x3 # Astra 23.5°E 11.992 H - CS Link / SkyLink
+0xc93 0x3 # Astra 23.5°E 12.070 H - CS Link / SkyLink
+0xc95 0x3 # Astra 23.5°E 12.109 H - SkyLink
+0xbc6 0x3 # Astra 23.5°E 12.525 V - CS Link / SkyLink
+0xbc7 0x3 # Astra 23.5°E 12.565 H - SkyLink
 400 318 #Hotbird 13.0 Cyfra+
 1000 318 #Hotbird 13.0 Grupa ITI
 1500 318 #Hotbird 13.0 Cyfra+
index 25538f8..9461d50 100755 (executable)
                <key id="KEY_BLUE" mapto="extensions" flags="b" />
        </map>
        
+       <map context="SatlistShortcutAction">
+               <key id="KEY_BLUE" mapto="nothingconnected" flags="b" />
+       </map>
+       
        <map context="InfobarChannelSelection">
                <key id="KEY_LEFT" mapto="zapUp" flags="mr" />
                <key id="KEY_RIGHT" mapto="zapDown" flags="mr" />
old mode 100644 (file)
new mode 100755 (executable)
index c7fb889..b437fbc
@@ -24,7 +24,7 @@
                <menu level="0" text="Information" entryID="info_screen">
                        <id val="information" />
                        <item level="1" text="Service" entryID="service_info_screen"><screen module="ServiceInfo" screen="ServiceInfo"/></item>
-                       <item level="0" text="About..." entryID="about_screen"><screen module="About" /></item>
+                       <item level="0" text="About" entryID="about_screen"><screen module="About" /></item>
                </menu>
 
                <item level="1" text="Plugins" entryID="plugin_selection"><screen module="PluginBrowser" screen="PluginBrowser" /></item>
@@ -48,7 +48,7 @@
                        </menu>
                        <menu weight="5" level="0" text="System" entryID="system_selection">
                                <id val="system" />
-                               <item level="0" text="Language..." entryID="language_setup"><screen module="LanguageSelection" /></item>
+                               <item level="0" text="Language" entryID="language_setup"><screen module="LanguageSelection" /></item>
                                <item level="0" entryID="usage_setup"><setup id="usage" /></item>
                                <item level="0" entryID="timezone_setup"><setup id="timezone"/></item>
                                <item level="0" entryID="av_setup"><setup id="avsetup"/></item>
                                <menu level="0" text="Harddisk" entryID="hardisk_selection" requires="Harddisk">
                                        <id val="harddisk" />
                                        <item level="1" entryID="harddisk_setup"><setup id="harddisk"/></item>
-                                       <item level="0" text="Initialization..." entryID="harddisk_init"><screen module="HarddiskSetup" screen="HarddiskSelection"/></item>
-                                       <item level="0" text="Filesystem Check..." entryID="harddisk_check"><screen module="HarddiskSetup" screen="HarddiskFsckSelection"/></item>
+                                       <item level="0" text="Initialization" entryID="harddisk_init"><screen module="HarddiskSetup" screen="HarddiskSelection"/></item>
+                                       <item level="0" text="Filesystem Check" entryID="harddisk_check"><screen module="HarddiskSetup" screen="HarddiskFsckSelection"/></item>
                                </menu>
                                <!--<item text="Remote Control"><setup id="rc" /></item>-->
                                <!--<item text="OSD"><setup id="osd" /></item>-->
                                <item requires="Display"><setup level="1" id="lcd" /></item>
-                               <item level="0" text="Network..." entryID="network_setup"><screen module="NetworkSetup" screen="NetworkAdapterSelection" /></item>
+                               <item level="0" text="Network" entryID="network_setup"><screen module="NetworkSetup" screen="NetworkAdapterSelection" /></item>
                                <item text="Keyboard"><setup id="keyboard" /></item>
                                <!--<menu level="1" text="Network..." entryID="network_setup">
                                        <id val="network" />
                                        <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>
                        <!--item level="0" text="Startwizard" entryID="startwizzard"><screen module="StartWizard" screen="StartWizard" /></item-->
-                       <item weight="20" level="0" text="Default settings" entryID="default_wizard">
-                               <code>
-from Screens.DefaultWizard import DefaultWizard
-self.session.open(DefaultWizard, silent = False)
-</code>
-                       </item>
                        <item weight="25" level="0" text="Factory reset" entryID="factory_reset">
                                <code>
 from Screens.FactoryReset import FactoryReset
@@ -104,6 +98,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 9425afd..705eaf3 100644 (file)
                        <item level="1" text="Change bouquets in quickzap">config.usage.quickzap_bouquet_change</item>
                        <item level="1" text="Alternative radio mode">config.usage.e1like_radio_mode</item>
                        <item level="1" text="Action on long powerbutton press">config.usage.on_long_powerpress</item>
+                       <item level="1" text="Action on short powerbutton press">config.usage.on_short_powerpress</item>
                        <item level="0" text="Infobar timeout">config.usage.infobar_timeout</item>
                        <item level="1" text="12V output" requires="12V_Output">config.usage.output_12V</item>
+                       <item level="0" text="Show event-progress in channel selection">config.usage.show_event_progress_in_servicelist</item>
                        <item level="2" text="Show infobar on channel change">config.usage.show_infobar_on_zap</item>
                        <item level="2" text="Show infobar on skip forward/backward">config.usage.show_infobar_on_skip</item>
                        <item level="2" text="Show infobar on event change">config.usage.show_infobar_on_event_change</item>
index d5fe01e..32adb2b 100755 (executable)
                </widget>
                <!-- Remaining time -->
                <widget source="session.CurrentService" render="Label" position="576,129" size="100,20" font="Regular;18" halign="center" valign="center" backgroundColor="#06224f" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
-                       <convert type="ServicePosition">Remaining</convert>
+                       <convert type="ServicePosition">Remaining,Negate</convert>
                </widget>
        </screen>
 </skin>
index 16504ab..0114349 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>
 
@@ -68,8 +70,8 @@
                <widget name="menu" position="10,10" size="290,225" scrollbarMode="showOnDemand" />
        </screen>
        <!-- Channel context menu -->
-       <screen name="ChannelContextMenu" position="center,center" size="300,255" title="Channellist menu">
-               <widget name="menu" position="10,10" size="290,230" scrollbarMode="showOnDemand" />
+       <screen name="ChannelContextMenu" position="center,center" size="350,255" title="Channellist menu">
+               <widget name="menu" position="10,10" size="340,230" scrollbarMode="showOnDemand" />
        </screen>
        <!-- Channel selection - TV -->
        <screen name="ChannelSelection" position="center,center" size="560,430" title="Channel Selection">
@@ -248,9 +250,13 @@ 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>
+       <!-- unhandled key pressed -->
+       <screen name="UnhandledKey" flags="wfNoBorder" position="620,50" size="34,45" title="UnhandledKey" zPosition="100" backgroundColor="transparent">
+               <widget name="UnhandledKeyPixmap" pixmap="skin_default/unhandled-key.png" position="0,0" size="34,45" alphatest="off" />
+       </screen>
        <!-- EPG Selection - Single -->
        <screen name="EPGSelection" position="center,center" size="560,430" title="EPG Selection">
                <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
@@ -566,9 +572,11 @@ self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
                <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="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="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
                <widget name="list" position="5,50" size="550,280" scrollbarMode="showOnDemand" zPosition="10"/>
                <ePixmap pixmap="skin_default/div-h.png" position="0,340" zPosition="1" size="560,2" />
                <widget source="introduction" render="Label" position="0,350" size="560,50" zPosition="10" font="Regular;21" halign="center" valign="center" backgroundColor="#25062748" transparent="1" />
@@ -618,14 +626,14 @@ self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
        </screen>
        <!-- Nim selection -->
        <screen name="NimSelection" position="center,center" size="400,330" title="Choose Tuner">
-               <widget source="nimlist" render="Listbox" position="0,0" size="380,300" scrollbarMode="showOnDemand">
+               <widget source="nimlist" render="Listbox" position="0,0" size="380,360" scrollbarMode="showOnDemand">
                        <convert type="TemplatedMultiContent">
                                {"template": [
                                                MultiContentEntryText(pos = (10, 5), size = (360, 30), flags = RT_HALIGN_LEFT, text = 1), # index 1 is the nim name,
-                                               MultiContentEntryText(pos = (50, 30), size = (320, 30), font = 1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is a description of the nim settings,
+                                               MultiContentEntryText(pos = (50, 30), size = (320, 50), font = 1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is a description of the nim settings,
                                        ],
                                 "fonts": [gFont("Regular", 20), gFont("Regular", 15)],
-                                "itemHeight": 70
+                                "itemHeight": 80
                                }
                        </convert>
                </widget>
old mode 100644 (file)
new mode 100755 (executable)
index e2d2abc..6038c2e
@@ -15,6 +15,7 @@ dist_install_DATA = \
        border_eventinfo.png \
        border_info.png \
        border_menu_300.png \
+       border_menu_350.png \
        border_menu.png \
        border_multiepg.png \
        bottombar.png \
@@ -22,6 +23,7 @@ dist_install_DATA = \
        b_tl.png \
        b_t.png \
        b_tr.png \
+       celserviceeventprogressbar.png \
        div-h.png \
        div-v.png \
        epg_more.png \
@@ -31,6 +33,8 @@ dist_install_DATA = \
        expanded-plugins.png \
        info-bg_mp.png \
        info-bg.png \
+       lock.png \
+       lockBouquet.png \
        mediaplayer_bg.png \
        mute.png \
        nim_active.png \
@@ -50,6 +54,9 @@ dist_install_DATA = \
        sleeptimer.png \
        timeline-now.png \
        timeline.png \
+       unhandled-key.png \
+       unlock.png \
+       unlockBouquet.png \
        verticalline-plugins.png \
        vkey_backspace.png \
        vkey_bg.png \
diff --git a/data/skin_default/border_menu_350.png b/data/skin_default/border_menu_350.png
new file mode 100755 (executable)
index 0000000..4f6f49c
Binary files /dev/null and b/data/skin_default/border_menu_350.png differ
diff --git a/data/skin_default/celserviceeventprogressbar.png b/data/skin_default/celserviceeventprogressbar.png
new file mode 100644 (file)
index 0000000..7bf5c65
Binary files /dev/null and b/data/skin_default/celserviceeventprogressbar.png differ
old mode 100644 (file)
new mode 100755 (executable)
index d6fcc7f..9ab4ff4
Binary files a/data/skin_default/div-h.png and b/data/skin_default/div-h.png differ
index f3c6548..6148e07 100644 (file)
Binary files a/data/skin_default/icons/dish.png and b/data/skin_default/icons/dish.png differ
diff --git a/data/skin_default/lock.png b/data/skin_default/lock.png
new file mode 100644 (file)
index 0000000..d0ae7f6
Binary files /dev/null and b/data/skin_default/lock.png differ
diff --git a/data/skin_default/lockBouquet.png b/data/skin_default/lockBouquet.png
new file mode 100644 (file)
index 0000000..d503dd2
Binary files /dev/null and b/data/skin_default/lockBouquet.png differ
diff --git a/data/skin_default/unhandled-key.png b/data/skin_default/unhandled-key.png
new file mode 100644 (file)
index 0000000..8e54349
Binary files /dev/null and b/data/skin_default/unhandled-key.png differ
diff --git a/data/skin_default/unlock.png b/data/skin_default/unlock.png
new file mode 100644 (file)
index 0000000..bd4486e
Binary files /dev/null and b/data/skin_default/unlock.png differ
diff --git a/data/skin_default/unlockBouquet.png b/data/skin_default/unlockBouquet.png
new file mode 100644 (file)
index 0000000..c5d146d
Binary files /dev/null and b/data/skin_default/unlockBouquet.png differ
index b61696f..669652e 100644 (file)
@@ -92,7 +92,7 @@ So this would only install the lamedb.192 file, if you have a DVB-S NIM in your
 - "image default"
   An image default is stored in /usr/share/enigma2/defaults. You can have several defaults at the same time, but you should keep
   in mind, that these defaults are all installed without user interaction. So defaults with contrary contents should be avoided
-  (e.g. setting a default parameter in one settings file an setting another setting for the same parameter in another could lead
+  (e.g. setting a default parameter in one settings file and setting another setting for the same parameter in another could lead
   to unexpected behaviour, since the installation order is undetermined and completely random. so use prerequisites insted)
   The "image default" is also used to set box specific config elements (for example show the new RC on a dm8000) and install the
   default bouquets.
index 0eb4cdb..a2d85ff 100644 (file)
@@ -208,7 +208,7 @@ void eActionMap::keyPressed(const std::string &device, int key, int flags)
                                }
                        } else
                        {
-                               eDebug("wildcard.");
+//                             eDebug("wildcard.");
                                ePyObject pArgs = PyTuple_New(2);
                                PyTuple_SET_ITEM(pArgs, 0, PyInt_FromLong(key));
                                PyTuple_SET_ITEM(pArgs, 1, PyInt_FromLong(flags));
index 313732a..5bafe73 100644 (file)
@@ -225,6 +225,7 @@ int eMainloop::processOneEvent(unsigned int twisted_timeout, PyObject **res, ePy
        }
 
        m_is_idle = 1;
+       ++m_idle_count;
 
        if (this == eApp)
        {
index 524052b..c69133f 100644 (file)
@@ -195,6 +195,7 @@ class eMainloop
        int processOneEvent(unsigned int user_timeout, PyObject **res=0, ePyObject additional=ePyObject());
        int retval;
        int m_is_idle;
+       int m_idle_count;
        eSocketNotifier *m_inActivate;
 
        int m_interrupt_requested;
@@ -210,7 +211,7 @@ public:
 #endif
 
        eMainloop()
-               :app_quit_now(0),loop_level(0),retval(0), m_is_idle(0), m_inActivate(0), m_interrupt_requested(0)
+               :app_quit_now(0),loop_level(0),retval(0), m_is_idle(0), m_idle_count(0), m_inActivate(0), m_interrupt_requested(0)
        {
                existing_loops.push_back(this);
        }
@@ -240,6 +241,7 @@ public:
 
                /* m_is_idle needs to be atomic, but it doesn't really matter much, as it's read-only from outside */
        int isIdle() { return m_is_idle; }
+       int idleCount() { return m_idle_count; }
 };
 
 /**
index 51582e6..0175718 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 3412c84..91f24ba 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 fb25740..3117b5e 100644 (file)
 extern "C" int sys_ioprio_set(int, int, int);
 extern "C" int sys_ioprio_get(int, int);
 
-#if defined(__i386__)
-#define __NR_ioprio_set                289
-#define __NR_ioprio_get                290
-#elif defined(__ppc__) || defined(__powerpc__)
-#define __NR_ioprio_set                273
-#define __NR_ioprio_get                274
-#elif defined(__x86_64__)
-#define __NR_ioprio_set                251
-#define __NR_ioprio_get                252
-#elif defined(__ia64__)
-#define __NR_ioprio_set                1274
-#define __NR_ioprio_get                1275
-#elif defined(__mips__)
-#define __NR_ioprio_set                4284
-#define __NR_ioprio_get                4285
-#else
-#error "Unsupported arch"
+#ifndef __NR_ioprio_set
+       #if defined(__i386__)
+               #define __NR_ioprio_set         289
+               #define __NR_ioprio_get         290
+       #elif defined(__ppc__) || defined(__powerpc__)
+               #define __NR_ioprio_set         273
+               #define __NR_ioprio_get         274
+       #elif defined(__x86_64__)
+               #define __NR_ioprio_set         251
+               #define __NR_ioprio_get         252
+       #elif defined(__ia64__)
+               #define __NR_ioprio_set         1274
+               #define __NR_ioprio_get         1275
+       #elif defined(__mips__)
+               #define __NR_ioprio_set         4284
+               #define __NR_ioprio_get         4285
+       #else
+               #error "Unsupported arch"
+       #endif
 #endif
 
 #if defined(_syscall3) && defined(_syscall2)
index c7acd11..c1ff13e 100644 (file)
@@ -81,7 +81,6 @@ eRCShortDriver::eRCShortDriver(const char *filename): eRCDriver(eRCInput::getIns
        {
                sn=eSocketNotifier::create(eApp, handle, eSocketNotifier::Read);
                CONNECT(sn->activated, eRCShortDriver::keyPressed);
-               eRCInput::getInstance()->setFile(handle);
        }
 }
 
@@ -115,7 +114,6 @@ eRCInputEventDriver::eRCInputEventDriver(const char *filename): eRCDriver(eRCInp
        {
                sn=eSocketNotifier::create(eApp, handle, eSocketNotifier::Read);
                CONNECT(sn->activated, eRCInputEventDriver::keyPressed);
-               eRCInput::getInstance()->setFile(handle);
        }
 }
 
@@ -127,6 +125,19 @@ std::string eRCInputEventDriver::getDeviceName()
        return name;
 }
 
+void eRCInputEventDriver::setExclusive(bool b)
+{
+       if (handle >= 0)
+       {
+               long evbits;
+               int grab = b;
+               if (::ioctl(handle, EVIOCGBIT(0, EV_MAX+1), &evbits) < 0)
+                       perror("EVIOCGBIT");
+               else if ((evbits & (1 << 0x1E)) && ::ioctl(handle, EVIOCGRAB, grab) < 0)
+                       perror("EVIOCGRAB");
+       }
+}
+
 eRCInputEventDriver::~eRCInputEventDriver()
 {
        if (handle>=0)
@@ -165,7 +176,6 @@ eRCInput::eRCInput()
 {
        ASSERT( !instance);
        instance=this;
-       handle = -1;
        locked = 0;
        keyboardMode = kmNone;
 }
@@ -183,21 +193,18 @@ bool eRCInput::open()
        return false;
 }
 
-int eRCInput::lock()
+void eRCInput::lock()
 {
        locked=1;
-       return handle;
+       for (std::map<std::string,eRCDevice*>::iterator i=devices.begin(); i != devices.end(); ++i)
+               i->second->setExclusive(false);
 }
 
 void eRCInput::unlock()
 {
-       if (locked)
-               locked=0;
-}
-
-void eRCInput::setFile(int newh)
-{
-       handle=newh;
+       locked=0;
+       for (std::map<std::string,eRCDevice*>::iterator i=devices.begin(); i != devices.end(); ++i)
+               i->second->setExclusive(true);
 }
 
 void eRCInput::addDevice(const std::string &id, eRCDevice *dev)
@@ -216,7 +223,7 @@ eRCDevice *eRCInput::getDevice(const std::string &id)
        if (i == devices.end())
        {
                eDebug("failed, possible choices are:");
-               for (std::map<std::string,eRCDevice*>::iterator i=devices.begin(); i != devices.end(); ++i)     
+               for (std::map<std::string,eRCDevice*>::iterator i=devices.begin(); i != devices.end(); ++i)
                        eDebug("%s", i->first.c_str());
                return 0;
        }
index 9708ea7..5290946 100644 (file)
@@ -53,6 +53,7 @@ public:
         * \param key The key to get the description for.
         * \result User readable description of given key.
         */
+       virtual void setExclusive(bool b) { };
 };
 
 /**
@@ -89,6 +90,7 @@ public:
        ~eRCDriver();
        
        void enable(int en) { enabled=en; }
+       virtual void setExclusive(bool) { }
 };
 
 class eRCShortDriver: public eRCDriver
@@ -112,6 +114,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
@@ -173,7 +176,6 @@ public:
 class eRCInput: public Object
 {
        int locked;     
-       int handle;
        static eRCInput *instance;
        int keyboardMode;
 #ifdef SWIG
@@ -199,8 +201,6 @@ public:
        void close();
        bool open();
 
-       void setFile(int handle);
-
        /* This is only relevant for "keyboard"-styled input devices,
           i.e. not plain remote controls. It's up to the input device
           driver to decide wheter an input device is a keyboard or
@@ -237,7 +237,7 @@ public:
        void setKeyboardMode(int mode) { keyboardMode = mode; }
        int  getKeyboardMode() { return keyboardMode; }
        static eRCInput *getInstance() { return instance; }
-       int lock();
+       void lock();
        void unlock();
        int islocked() { return locked; }
 };
index bcce560..eb5aee3 100644 (file)
@@ -16,7 +16,6 @@ eRCConsoleDriver::eRCConsoleDriver(const char *filename): eRCDriver(eRCInput::ge
        {
                sn=eSocketNotifier::create(eApp, handle, eSocketNotifier::Read);
                CONNECT(sn->activated, eRCConsoleDriver::keyPressed);
-               eRCInput::getInstance()->setFile(handle);
        }
        
                /* set console mode */
index d10d94f..2bfeefa 100644 (file)
@@ -83,8 +83,14 @@ eRCDeviceInputDev::eRCDeviceInputDev(eRCInputEventDriver *driver)
                        break;
                }
        }
+       setExclusive(true);
        eDebug("Input device \"%s\" is %sa keyboard.", id.c_str(), iskeyboard ? "" : "not ");
+}
 
+void eRCDeviceInputDev::setExclusive(bool b)
+{
+       if (!iskeyboard)
+               driver->setExclusive(b);
 }
 
 const char *eRCDeviceInputDev::getDescription() const
index c7f5697..3b4579c 100644 (file)
@@ -10,6 +10,7 @@ public:
        void handleCode(long code);
        eRCDeviceInputDev(eRCInputEventDriver *driver);
        const char *getDescription() const;
+       void setExclusive(bool);
 };
 
 #endif
index 90bf19e..ef8dadc 100644 (file)
@@ -222,9 +222,6 @@ int eDVBAudio::startPid(int pid, int type)
 
 void eDVBAudio::stop()
 {
-#if HAVE_DVB_API_VERSION > 2
-       flush();
-#endif
        eDebugNoNewLine("AUDIO_STOP - ");
        if (::ioctl(m_fd, AUDIO_STOP) < 0)
                eDebug("failed (%m)");
@@ -1048,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)
@@ -1064,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)
@@ -1080,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 b53638b..3a0fbac 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 894287e..17712dd 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 f80e177..48cbfbf 100644 (file)
@@ -255,6 +255,11 @@ void eEPGCache::DVBChannelAdded(eDVBChannel *chan)
 #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) );
                chan->connectStateChange(slot(*this, &eEPGCache::DVBChannelStateChanged), data->m_stateChangedConn);
@@ -880,6 +885,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();
                        break;
@@ -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 7d1b163..4d45d87 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 c0263fb..8216eea 100644 (file)
@@ -455,7 +455,7 @@ int eDVBFrontend::PriorityOrder=0;
 
 eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok, bool simulate)
        :m_simulate(simulate), m_enabled(false), m_type(-1), m_dvbid(fe), m_slotid(fe)
-       ,m_fd(-1), m_need_rotor_workaround(false), m_can_handle_dvbs2(false)
+       ,m_fd(-1), m_rotor_mode(false), m_need_rotor_workaround(false), m_can_handle_dvbs2(false)
        ,m_state(stateClosed), m_timeout(0), m_tuneTimer(0)
 #if HAVE_DVB_API_VERSION < 3
        ,m_secfd(-1)
@@ -483,6 +483,13 @@ eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok, bool simulate)
        closeFrontend();
 }
 
+void eDVBFrontend::reopenFrontend()
+{
+       closeFrontend();
+       m_type = -1;
+       openFrontend();
+}
+
 int eDVBFrontend::openFrontend()
 {
        if (m_state != stateClosed)
@@ -692,7 +699,8 @@ void eDVBFrontend::feEvent(int w)
                        {
                                eDebug("stateLostLock");
                                state = stateLostLock;
-                               sec_fe->m_data[CSW] = sec_fe->m_data[UCSW] = sec_fe->m_data[TONEBURST] = -1; // reset diseqc
+                               if (!m_rotor_mode)
+                                       sec_fe->m_data[CSW] = sec_fe->m_data[UCSW] = sec_fe->m_data[TONEBURST] = -1; // reset diseqc
                        }
                }
                if (m_state != state)
@@ -2343,6 +2351,20 @@ RESULT eDVBFrontend::tune(const iDVBFrontendParameters &where)
                        res = -EINVAL;
                        goto tune_error;
                }
+               if (m_rotor_mode != feparm.no_rotor_command_on_tune && !feparm.no_rotor_command_on_tune)
+               {
+                       eDVBFrontend *sec_fe = this;
+                       long tmp = m_data[LINKED_PREV_PTR];
+                       while (tmp != -1)
+                       {
+                               eDVBRegisteredFrontend *linked_fe = (eDVBRegisteredFrontend*)tmp;
+                               sec_fe = linked_fe->m_frontend;
+                               sec_fe->getData(LINKED_NEXT_PTR, tmp);
+                       }
+                       eDebug("(fe%d) reset diseqc after leave rotor mode!", m_dvbid);
+                       sec_fe->m_data[CSW] = sec_fe->m_data[UCSW] = sec_fe->m_data[TONEBURST] = sec_fe->m_data[ROTOR_CMD] = sec_fe->m_data[ROTOR_POS] = -1; // reset diseqc
+               }
+               m_rotor_mode = feparm.no_rotor_command_on_tune;
                if (!m_simulate)
                        m_sec->setRotorMoving(m_slotid, false);
                res=prepare_sat(feparm, timeout);
index bac2753..bc31755 100644 (file)
@@ -75,6 +75,7 @@ private:
        int m_dvbid;
        int m_slotid;
        int m_fd;
+       bool m_rotor_mode;
        bool m_need_rotor_workaround;
        bool m_can_handle_dvbs2;
        char m_filename[128];
@@ -145,6 +146,7 @@ public:
        static void setTypePriorityOrder(int val) { PriorityOrder = val; }
        static int getTypePriorityOrder() { return PriorityOrder; }
 
+       void reopenFrontend();
        int openFrontend();
        int closeFrontend(bool force=false);
        const char *getDescription() const { return m_description; }
index cff4dbb..a3e87e3 100644 (file)
@@ -459,6 +459,7 @@ class iDVBFrontend: public iDVBFrontend_ENUMS, public iObject
 public:
        virtual RESULT getFrontendType(int &SWIG_OUTPUT)=0;
        virtual RESULT tune(const iDVBFrontendParameters &where)=0;
+       virtual void reopenFrontend()=0;
 #ifndef SWIG
        virtual RESULT connectStateChange(const Slot1<void,iDVBFrontend*> &stateChange, ePtr<eConnection> &connection)=0;
 #endif
@@ -522,7 +523,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 0b4904f..f06c86e 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 9bd065b..ee89a3a 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 a9ca23f..483c06b 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 1393bf7..5cdecbd 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 fd29617..b37aa71 100644 (file)
@@ -12,6 +12,7 @@
 #include <lib/dvb/frontend.h>
 #include <lib/base/eerror.h>
 #include <lib/base/estring.h>
+#include <lib/python/python.h>
 #include <errno.h>
 
 #define SCAN_eDebug(x...) do { if (m_scan_debug) eDebug(x); } while(0)
@@ -23,37 +24,118 @@ eDVBScan::eDVBScan(iDVBChannel *channel, bool usePAT, bool debug)
        :m_channel(channel), m_channel_state(iDVBChannel::state_idle)
        ,m_ready(0), m_ready_all(usePAT ? (readySDT|readyPAT) : readySDT)
        ,m_pmt_running(false), m_abort_current_pmt(false), m_flags(0)
-       ,m_usePAT(usePAT), m_scan_debug(debug)
+       ,m_usePAT(usePAT), m_scan_debug(debug), m_show_add_tsid_onid_check_failed_msg(true)
 {
        if (m_channel->getDemux(m_demux))
                SCAN_eDebug("scan: failed to allocate demux!");
        m_channel->connectStateChange(slot(*this, &eDVBScan::stateChange), m_stateChanged_connection);
+       FILE *f = fopen("/etc/enigma2/scan_tp_valid_check.py", "r");
+       if (f)
+       {
+               char code[16384];
+               size_t rd = fread(code, 1, 16383, f);
+               if (rd)
+               {
+                       code[rd]=0;
+                       m_additional_tsid_onid_check_func = Py_CompileString(code, "/etc/enigma2/scan_tp_valid_check.py", Py_file_input);
+               }
+               fclose(f);
+       }
 }
 
 eDVBScan::~eDVBScan()
 {
+       if (m_additional_tsid_onid_check_func)
+               Py_DECREF(m_additional_tsid_onid_check_func);
 }
 
 int eDVBScan::isValidONIDTSID(int orbital_position, eOriginalNetworkID onid, eTransportStreamID tsid)
 {
+       int ret;
        switch (onid.get())
        {
        case 0:
        case 0x1111:
-               return 0;
+               ret=0;
+               break;
        case 0x13E:  // workaround for 11258H and 11470V on hotbird with same ONID/TSID (0x13E/0x578)
-               return orbital_position != 130 || tsid != 0x578;
+               ret = orbital_position != 130 || tsid != 0x578;
+               break;
        case 1:
-               return orbital_position == 192;
+               ret = orbital_position == 192;
+               break;
        case 0x00B1:
-               return tsid != 0x00B0;
+               ret = tsid != 0x00B0;
+               break;
        case 0x00eb:
-               return tsid != 0x4321;
+               ret = tsid != 0x4321;
+               break;
        case 0x0002:
-               return abs(orbital_position-282) < 6;
+               ret = abs(orbital_position-282) < 6 && tsid != 2019;
+               // 12070H and 10936V have same tsid/onid.. but even the same services are provided
+               break;
+       case 0x2000:
+               ret = tsid != 0x1000;
+               break;
+       case 0x5E: // Sirius 4.8E 12322V and 12226H
+               ret = abs(orbital_position-48) < 3 && tsid != 1;
+               break;
+       case 10100: // Eutelsat W7 36.0E 11644V and 11652V
+               ret = orbital_position != 360 || tsid != 10187;
+               break;
+       case 42: // Tuerksat 42.0E
+               ret = orbital_position != 420 || (
+                   tsid != 8 && // 11830V 12729V
+                   tsid != 5 && // 12679V 12685H
+                   tsid != 2 && // 11096V 12015H
+                   tsid != 55); // 11996V 11716V
+               break;
+       case 100: // Intelsat 10 68.5E 3808V 3796V 4012V, Amos 4.0W 10723V 11571H
+               ret = (orbital_position != 685 && orbital_position != 3560) || tsid != 1;
+               break;
+       case 70: // Thor 0.8W 11862H 12341V
+               ret = abs(orbital_position-3592) < 3 && tsid != 46;
+               break;
+       case 32: // NSS 806 (40.5W) 4059R, 3774L
+               ret = orbital_position != 3195 || tsid != 21;
+               break;
        default:
-               return onid.get() < 0xFF00;
+               ret = onid.get() < 0xFF00;
+               break;
+       }
+       if (ret && m_additional_tsid_onid_check_func)
+       {
+               bool failed = true;
+               ePyObject dict = PyDict_New();
+               extern void PutToDict(ePyObject &, const char *, long);
+               PyDict_SetItemString(dict, "__builtins__", PyEval_GetBuiltins());
+               PutToDict(dict, "orbpos", orbital_position);
+               PutToDict(dict, "tsid", tsid.get());
+               PutToDict(dict, "onid", onid.get());
+               ePyObject r = PyEval_EvalCode((PyCodeObject*)(PyObject*)m_additional_tsid_onid_check_func, dict, dict);
+               if (r)
+               {
+                       ePyObject o = PyDict_GetItemString(dict, "ret");
+                       if (o)
+                       {
+                               if (PyInt_Check(o))
+                               {
+                                       ret = PyInt_AsLong(o);
+                                       failed = false;
+                               }
+                       }
+                       Py_DECREF(r);
+               }
+               if (failed && m_show_add_tsid_onid_check_failed_msg)
+               {
+                       eDebug("execing /etc/enigma2/scan_tp_valid_check failed!\n"
+                               "usable global variables in scan_tp_valid_check.py are 'orbpos', 'tsid', 'onid'\n"
+                               "the return value must be stored in a global var named 'ret'");
+                       m_show_add_tsid_onid_check_failed_msg=false;
+               }
+               Py_DECREF(dict);
        }
+       return ret;
 }
 
 eDVBNamespace eDVBScan::buildNamespace(eOriginalNetworkID onid, eTransportStreamID tsid, unsigned long hash)
index 2f3ac34..8f64abe 100644 (file)
@@ -92,6 +92,8 @@ class eDVBScan: public Object, public iObject
        int m_flags;
        bool m_usePAT;
        bool m_scan_debug;
+       ePyObject m_additional_tsid_onid_check_func;
+       bool m_show_add_tsid_onid_check_failed_msg;
 public:
        eDVBScan(iDVBChannel *channel, bool usePAT=true, bool debug=true );
        ~eDVBScan();
index 9124688..0e3e7e0 100644 (file)
@@ -156,6 +156,11 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite
                                        ret = 15000;
                                }
 
+                               if (sat.no_rotor_command_on_tune && !rotor) {
+                                       eSecDebugNoSimulate("no rotor but no_rotor_command_on_tune is set.. ignore lnb %d", idx);
+                                       continue;
+                               }
+
                                eSecDebugNoSimulate("ret1 %d", ret);
 
                                if (linked_in_use)
@@ -170,21 +175,6 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite
                                        else
                                                ret += 15;
                                        eSecDebugNoSimulate("ret2 %d", ret);
-                                       if (ret) // special case when this tuner is linked to a satpos dependent tuner
-                                       {
-                                               fe->getData(eDVBFrontend::SATPOS_DEPENDS_PTR, satpos_depends_ptr);
-                                               if (satpos_depends_ptr != -1)
-                                               {
-                                                       eDVBRegisteredFrontend *satpos_depends_to_fe = (eDVBRegisteredFrontend*) satpos_depends_ptr;
-                                                       satpos_depends_to_fe->m_frontend->getData(eDVBFrontend::ROTOR_POS, rotor_pos);
-                                                       if (!rotor || rotor_pos == -1 /* we dont know the rotor position yet */
-                                                               || rotor_pos != sat.orbital_position ) // not the same orbital position?
-                                                       {
-                                                               ret = 0;
-                                                       }
-                                               }
-                                       }
-                                       eSecDebugNoSimulate("ret3 %d", ret);
                                }
                                else if (satpos_depends_ptr != -1)
                                {
@@ -199,6 +189,7 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite
                                                        else
                                                                ret += 10;
                                                }
+                                               eSecDebugNoSimulate("ret3 %d", ret);
                                        }
                                        else // current fe is dependent of another tuner ... (so this fe can't turn the rotor!)
                                        {
index a9eef40..d5ad249 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 c230a34..ed8b924 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 1f1b06a..dff6b05 100644 (file)
@@ -164,7 +164,13 @@ void *gRC::thread()
                                if (pthread_cond_timedwait(&cond, &mutex, &timeout) == ETIMEDOUT)
                                {
                                        if (eApp && !eApp->isIdle())
-                                               idle = 0;
+                                       {
+                                               int idle_count = eApp->idleCount();
+                                               if (idle_count == m_prev_idle_count)
+                                                       idle = 0;
+                                               else
+                                                       m_prev_idle_count = idle_count;
+                                       }
                                }
 
                                if (!idle)
index 5d0106b..3b8201a 100644 (file)
@@ -176,6 +176,7 @@ class gRC: public iObject, public Object
        
        ePtr<gCompositingData> m_compositing;
 
+       int m_prev_idle_count;
 public:
        gRC();
        virtual ~gRC();
index 4b4b58c..4465d84 100644 (file)
@@ -514,7 +514,7 @@ void eListboxPythonMultiContent::setSelectionClip(eRect &rect, bool update)
                m_listbox->entryChanged(m_cursor);
 }
 
-static void clearRegionHelper(gPainter &painter, eListboxStyle *local_style, const ePoint &offset, ePyObject &pbackColor, bool cursorValid)
+static void clearRegionHelper(gPainter &painter, eListboxStyle *local_style, const ePoint &offset, ePyObject &pbackColor, bool cursorValid, bool clear=true)
 {
        if (pbackColor)
        {
@@ -536,10 +536,11 @@ static void clearRegionHelper(gPainter &painter, eListboxStyle *local_style, con
                else if (local_style->m_transparent_background)
                        return;
        }
-       painter.clear();
+       if (clear)
+               painter.clear();
 }
 
-static void clearRegionSelectedHelper(gPainter &painter, eListboxStyle *local_style, const ePoint &offset, ePyObject &pbackColorSelected, bool cursorValid)
+static void clearRegionSelectedHelper(gPainter &painter, eListboxStyle *local_style, const ePoint &offset, ePyObject &pbackColorSelected, bool cursorValid, bool clear=true)
 {
        if (pbackColorSelected)
        {
@@ -559,10 +560,11 @@ static void clearRegionSelectedHelper(gPainter &painter, eListboxStyle *local_st
                        return;
                }
        }
-       painter.clear();
+       if (clear)
+               painter.clear();
 }
 
-static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *local_style, ePyObject pforeColor, ePyObject pforeColorSelected, ePyObject pbackColor, ePyObject pbackColorSelected, int selected, gRegion &rc, eRect &sel_clip, const ePoint &offset, bool cursorValid)
+static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *local_style, ePyObject pforeColor, ePyObject pforeColorSelected, ePyObject pbackColor, ePyObject pbackColorSelected, int selected, gRegion &rc, eRect &sel_clip, const ePoint &offset, bool cursorValid, bool clear=true)
 {
        if (selected && sel_clip.valid())
        {
@@ -571,7 +573,7 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l
                {
                        painter.clip(part);
                        style.setStyle(painter, eWindowStyle::styleListboxNormal);
-                       clearRegionHelper(painter, local_style, offset, pbackColor, cursorValid);
+                       clearRegionHelper(painter, local_style, offset, pbackColor, cursorValid, clear);
                        painter.clippop();
                        selected = 0;
                }
@@ -580,7 +582,7 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l
                {
                        painter.clip(part);
                        style.setStyle(painter, eWindowStyle::styleListboxSelected);
-                       clearRegionSelectedHelper(painter, local_style, offset, pbackColorSelected, cursorValid);
+                       clearRegionSelectedHelper(painter, local_style, offset, pbackColorSelected, cursorValid, clear);
                        painter.clippop();
                        selected = 1;
                }
@@ -588,14 +590,14 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l
        else if (selected)
        {
                style.setStyle(painter, eWindowStyle::styleListboxSelected);
-               clearRegionSelectedHelper(painter, local_style, offset, pbackColorSelected, cursorValid);
+               clearRegionSelectedHelper(painter, local_style, offset, pbackColorSelected, cursorValid, clear);
                if (local_style && local_style->m_selection)
                        painter.blit(local_style->m_selection, offset, eRect(), gPainter::BT_ALPHATEST);
        }
        else
        {
                style.setStyle(painter, eWindowStyle::styleListboxNormal);
-               clearRegionHelper(painter, local_style, offset, pbackColor, cursorValid);
+               clearRegionHelper(painter, local_style, offset, pbackColor, cursorValid, clear);
        }
 
        if (selected)
@@ -818,7 +820,8 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
 
                                {
                                        gRegion rc(rect);
-                                       clearRegion(painter, style, local_style, pforeColor, pforeColorSelected, pbackColor, pbackColorSelected, selected, rc, sel_clip, offset, cursorValid);
+                                       bool mustClear = (selected && pbackColorSelected) || (!selected && pbackColor);
+                                       clearRegion(painter, style, local_style, pforeColor, pforeColorSelected, pbackColor, pbackColorSelected, selected, rc, sel_clip, offset, cursorValid, mustClear);
                                }
 
                                painter.setFont(m_font[fnt]);
@@ -921,7 +924,8 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
 
                                {
                                        gRegion rc(rect);
-                                       clearRegion(painter, style, local_style, pforeColor, pforeColorSelected, pbackColor, pbackColorSelected, selected, rc, sel_clip, offset, cursorValid);
+                                       bool mustClear = (selected && pbackColorSelected) || (!selected && pbackColor);
+                                       clearRegion(painter, style, local_style, pforeColor, pforeColorSelected, pbackColor, pbackColorSelected, selected, rc, sel_clip, offset, cursorValid, mustClear);
                                }
 
                                // border
@@ -995,7 +999,8 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
 
                                {
                                        gRegion rc(rect);
-                                       clearRegion(painter, style, local_style, ePyObject(), ePyObject(), pbackColor, pbackColorSelected, selected, rc, sel_clip, offset, cursorValid);
+                                       bool mustClear = (selected && pbackColorSelected) || (!selected && pbackColor);
+                                       clearRegion(painter, style, local_style, ePyObject(), ePyObject(), pbackColor, pbackColorSelected, selected, rc, sel_clip, offset, cursorValid, mustClear);
                                }
 
                                painter.blit(pixmap, rect.topLeft(), rect, (type == TYPE_PIXMAP_ALPHATEST) ? gPainter::BT_ALPHATEST : (type == TYPE_PIXMAP_ALPHABLEND) ? gPainter::BT_ALPHABLEND : 0);
index bb2d756..8e332e3 100644 (file)
@@ -19,11 +19,21 @@ class About:
                                        #0120 2005 11 29 01 16
                                        #0123 4567 89 01 23 45
                                        version = splitted[1]
+                                       image_type = version[0] # 0 = release, 1 = experimental
+                                       major = version[1]
+                                       minor = version[2]
+                                       revision = version[3]
                                        year = version[4:8]
                                        month = version[8:10]
                                        day = version[10:12]
-
-                                       return '-'.join(("dev", year, month, day))
+                                       date = '-'.join((year, month, day))
+                                       if image_type == '0':
+                                               image_type = "Release"
+                                               version = '.'.join((major, minor, revision))
+                                               return ' '.join((image_type, version, date))
+                                       else:
+                                               image_type = "Experimental"
+                                               return ' '.join((image_type, date))
                        file.close()
                except IOError:
                        pass
old mode 100644 (file)
new mode 100755 (executable)
index fe505c2..33868d6
@@ -1,16 +1,16 @@
 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
 
-def ChoiceEntryComponent(key, text):
+def ChoiceEntryComponent(key = "", text = ["--"]):
        res = [ text ]
        if text[0] == "--":
                res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 00, 800, 25, 0, RT_HALIGN_LEFT, "-"*200))
        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 75c8a08..3b6fd3e 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
index 5014fde..fa3518c 100644 (file)
@@ -19,6 +19,7 @@ class ServiceInfo(Converter, object):
        ONID = 13
        SID = 14
        FRAMERATE = 15
+       TRANSFERBPS = 16
        
 
        def __init__(self, type):
@@ -40,6 +41,7 @@ class ServiceInfo(Converter, object):
                                "OnId": (self.ONID, (iPlayableService.evUpdatedInfo,)),
                                "Sid": (self.SID, (iPlayableService.evUpdatedInfo,)),
                                "Framerate": (self.FRAMERATE, (iPlayableService.evVideoSizeChanged,iPlayableService.evUpdatedInfo,)),
+                               "TransferBPS": (self.TRANSFERBPS, (iPlayableService.evUpdatedInfo,)),
                        }[type]
 
        def getServiceInfoString(self, info, what, convert = lambda x: "%d" % x):
@@ -112,6 +114,8 @@ class ServiceInfo(Converter, object):
                        return self.getServiceInfoString(info, iServiceInformation.sSID)
                elif self.type == self.FRAMERATE:
                        return self.getServiceInfoString(info, iServiceInformation.sFrameRate, lambda x: "%d fps" % ((x+500)/1000))
+               elif self.type == self.TRANSFERBPS:
+                       return self.getServiceInfoString(info, iServiceInformation.sTransferBPS, lambda x: "%d kB/s" % (x/1024))
                return ""
 
        text = property(getText)
old mode 100644 (file)
new mode 100755 (executable)
index b86d94b..b1d89f5
@@ -10,8 +10,8 @@ class TemplatedMultiContent(StringList):
                del l["self"] # cleanup locals a bit
                del l["args"]
 
-               self.template = eval(args, {}, l)
                self.active_style = None
+               self.template = eval(args, {}, l)
                assert "fonts" in self.template
                assert "itemHeight" in self.template
                assert "template" in self.template or "templates" in self.template
@@ -25,7 +25,6 @@ class TemplatedMultiContent(StringList):
                if not self.content:
                        from enigma import eListboxPythonMultiContent
                        self.content = eListboxPythonMultiContent()
-                       self.setTemplate()
 
                        # also setup fonts (also given by source)
                        index = 0
@@ -35,30 +34,37 @@ class TemplatedMultiContent(StringList):
 
                # if only template changed, don't reload list
                if what[0] == self.CHANGED_SPECIFIC and what[1] == "style":
-                       self.setTemplate()
-                       return
-
-               if self.source:
+                       pass
+               elif self.source:
                        self.content.setList(self.source.list)
-                       self.setTemplate()
 
+               self.setTemplate()
                self.downstream_elements.changed(what)
 
        def setTemplate(self):
                if self.source:
                        style = self.source.style
+
                        if style == self.active_style:
-                               return # style did not change
+                               return
 
                        # if skin defined "templates", that means that it defines multiple styles in a dict. template should still be a default
                        templates = self.template.get("templates")
                        template = self.template.get("template")
                        itemheight = self.template["itemHeight"]
+                       selectionEnabled = self.template.get("selectionEnabled", True)
+                       scrollbarMode = self.template.get("scrollbarMode", "showOnDemand")
 
                        if templates and style and style in templates: # if we have a custom style defined in the source, and different templates in the skin, look it up
                                template = templates[style][1]
                                itemheight = templates[style][0]
+                               if len(templates[style]) > 2:
+                                       selectionEnabled = templates[style][2]
+                               if len(templates[style]) > 3:
+                                       scrollbarMode = templates[style][3]
 
                        self.content.setTemplate(template)
-
                        self.content.setItemHeight(itemheight)
+                       self.selectionEnabled = selectionEnabled
+                       self.scrollbarMode = scrollbarMode
+                       self.active_style = style
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..a993c39
--- /dev/null
@@ -0,0 +1,117 @@
+import os
+
+from Components.config import config, ConfigSubList, ConfigSubsection, ConfigSlider
+from Tools.BoundFunction import boundFunction
+
+import NavigationInstance
+from enigma import iRecordableService
+
+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()
+               config.misc.standbyCounter.addNotifier(self.standbyCounterChanged, initial_call = False)
+
+       def setVoltage_PWM(self):
+               for fanid in range(self.getFanCount()):
+                       cfg = self.getConfig(fanid)
+                       self.setVoltage(fanid, cfg.vlt.value)
+                       self.setPWM(fanid, cfg.pwm.value)
+                       print "[FanControl]: setting fan values: fanid = %d, voltage = %d, pwm = %d" % (fanid, cfg.vlt.value, cfg.pwm.value)
+
+       def setVoltage_PWM_Standby(self):
+               for fanid in range(self.getFanCount()):
+                       cfg = self.getConfig(fanid)
+                       self.setVoltage(fanid, cfg.vlt_standby.value)
+                       self.setPWM(fanid, cfg.pwm_standby.value)
+                       print "[FanControl]: setting fan values (standby mode): fanid = %d, voltage = %d, pwm = %d" % (fanid, cfg.vlt_standby.value, cfg.pwm_standby.value)
+
+       def getRecordEvent(self, recservice, event):
+               recordings = len(NavigationInstance.instance.getRecordings())
+               if event == iRecordableService.evEnd:
+                       if recordings == 0:
+                               self.setVoltage_PWM_Standby()
+               elif event == iRecordableService.evStart:
+                       if recordings == 1:
+                               self.setVoltage_PWM()
+
+       def leaveStandby(self):
+               NavigationInstance.instance.record_event.remove(self.getRecordEvent)
+               recordings = NavigationInstance.instance.getRecordings()
+               if not recordings:
+                       self.setVoltage_PWM()
+
+       def standbyCounterChanged(self, configElement):
+               from Screens.Standby import inStandby
+               inStandby.onClose.append(self.leaveStandby)
+               recordings = NavigationInstance.instance.getRecordings()
+               NavigationInstance.instance.record_event.append(self.getRecordEvent)
+               if not recordings:
+                       self.setVoltage_PWM_Standby()
+
+       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 = 15, increment = 5, limits = (0, 255))
+                       fan.pwm = ConfigSlider(default = 0, increment = 5, limits = (0, 255))
+                       fan.vlt_standby = ConfigSlider(default = 5, increment = 5, limits = (0, 255))
+                       fan.pwm_standby = 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()
index 38b0854..841a2fe 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
@@ -35,12 +35,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 +160,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 +259,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 +272,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 +377,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 2efdb68..e8e612a 100755 (executable)
@@ -166,7 +166,7 @@ class Harddisk:
                lines = mounts.readlines()
                mounts.close()
 
-               cmd = "/bin/umount"
+               cmd = "umount"
 
                for line in lines:
                        parts = line.strip().split(" ")
@@ -177,12 +177,12 @@ class Harddisk:
                return (res >> 8)
 
        def createPartition(self):
-               cmd = 'printf "0,\n;\n;\n;\ny\n" | /sbin/sfdisk -f ' + self.disk_path
+               cmd = 'printf "0,\n;\n;\n;\ny\n" | sfdisk -f ' + self.disk_path
                res = system(cmd)
                return (res >> 8)
 
        def mkfs(self):
-               cmd = "/sbin/mkfs.ext3 "
+               cmd = "mkfs.ext3 "
                if self.diskSize() > 4 * 1024:
                        cmd += "-T largefile "
                cmd += "-m0 -O dir_index " + self.partitionPath("1")
@@ -202,7 +202,7 @@ class Harddisk:
                for line in lines:
                        parts = line.strip().split(" ")
                        if path.realpath(parts[0]) == self.partitionPath("1"):
-                               cmd = "/bin/mount -t ext3 " + parts[0]
+                               cmd = "mount -t ext3 " + parts[0]
                                res = system(cmd)
                                break
 
@@ -218,7 +218,7 @@ class Harddisk:
        def fsck(self):
                # We autocorrect any failures
                # TODO: we could check if the fs is actually ext3
-               cmd = "/sbin/fsck.ext3 -f -p " + self.partitionPath("1")
+               cmd = "fsck.ext3 -f -p " + self.partitionPath("1")
                res = system(cmd)
                return (res >> 8)
 
@@ -226,7 +226,7 @@ class Harddisk:
                part = self.partitionPath(n)
 
                if access(part, 0):
-                       cmd = '/bin/dd bs=512 count=3 if=/dev/zero of=' + part
+                       cmd = 'dd bs=512 count=3 if=/dev/zero of=' + part
                        res = system(cmd)
                else:
                        res = 0
@@ -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 0ba1165..7144777 100755 (executable)
@@ -1,4 +1,5 @@
 from enigma import eConsoleAppContainer
+from Tools.Directories import fileExists
 
 class IpkgComponent:
        EVENT_INSTALL = 0
@@ -20,7 +21,7 @@ class IpkgComponent:
        
        def __init__(self, ipkg = '/usr/bin/ipkg'):
                self.ipkg = ipkg
-               
+               self.opkgAvail = fileExists('/usr/bin/opkg')
                self.cmd = eConsoleAppContainer()
                self.cache = None
                self.callbackList = []
@@ -89,7 +90,10 @@ class IpkgComponent:
                        if data.find('Downloading') == 0:
                                self.callCallbacks(self.EVENT_DOWNLOAD, data.split(' ', 5)[1].strip())
                        elif data.find('Upgrading') == 0:
-                               self.callCallbacks(self.EVENT_UPGRADE, data.split('    ', 1)[1].split(' ')[0])
+                               if self.opkgAvail:
+                                       self.callCallbacks(self.EVENT_UPGRADE, data.split(' ', 1)[1].split(' ')[0])
+                               else:
+                                       self.callCallbacks(self.EVENT_UPGRADE, data.split('    ', 1)[1].split(' ')[0])
                        elif data.find('Installing') == 0:
                                self.callCallbacks(self.EVENT_INSTALL, data.split(' ', 1)[1].split(' ')[0])
                        elif data.find('Removing') == 0:
index 0e50123..dde158b 100644 (file)
@@ -28,6 +28,14 @@ class LCD:
        def isOled(self):
                return eDBoxLCD.getInstance().isOled()
 
+def leaveStandby():
+       config.lcd.bright.apply()
+
+def standbyCounterChanged(configElement):
+       from Screens.Standby import inStandby
+       inStandby.onClose.append(leaveStandby)
+       config.lcd.standby.apply()
+
 def InitLcd():
        detected = eDBoxLCD.getInstance().detected()
        SystemInfo["Display"] = detected
@@ -42,9 +50,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 +70,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:
@@ -69,3 +80,6 @@ def InitLcd():
                config.lcd.standby = ConfigNothing()
                config.lcd.bright.apply = lambda : doNothing()
                config.lcd.standby.apply = lambda : doNothing()
+
+       config.misc.standbyCounter.addNotifier(standbyCounterChanged, initial_call = False)
+
index 34710fa..b5ef068 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 f65d609..b9da48d 100755 (executable)
@@ -14,7 +14,7 @@ class Network:
                self.NetworkState = 0
                self.DnsState = 0
                self.nameservers = []
-               self.ethtool_bin = "/usr/sbin/ethtool"
+               self.ethtool_bin = "ethtool"
                self.container = eConsoleAppContainer()
                self.Console = Console()
                self.LinkConsole = Console()
@@ -24,6 +24,7 @@ class Network:
                self.activateConsole = Console()
                self.resetNetworkConsole = Console()
                self.DnsConsole = Console()
+               self.PingConsole = Console()
                self.config_ready = None
                self.getInterfaces()
 
@@ -233,7 +234,7 @@ class Network:
                                self.configuredNetworkAdapters = self.configuredInterfaces
                                # load ns only once     
                                self.loadNameserverConfig()
-                               print "read configured interfac:", ifaces
+                               print "read configured interface:", ifaces
                                print "self.ifaces after loading:", self.ifaces
                                self.config_ready = True
                                self.msgPlugins()
@@ -424,6 +425,7 @@ class Network:
 
        def checkNetworkState(self,statecallback):
                # www.dream-multimedia-tv.de, www.heise.de, www.google.de
+               self.NetworkState = 0
                cmd1 = "ping -c 1 82.149.226.170"
                cmd2 = "ping -c 1 193.99.144.85"
                cmd3 = "ping -c 1 209.85.135.103"
@@ -475,10 +477,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):
@@ -571,11 +580,11 @@ class Network:
                                self.wlanmodule = 'madwifi'
                if os_path.exists(rt73_dir):
                        rtfiles = listdir(rt73_dir)
-                       if len(rtfiles) == 2:
+                       if len(rtfiles) == 2 or len(rtfiles) == 5:
                                self.wlanmodule = 'ralink'
                if os_path.exists(zd1211b_dir):
                        zdfiles = listdir(zd1211b_dir)
-                       if len(zdfiles) == 1:
+                       if len(zdfiles) == 1 or len(zdfiles) == 5:
                                self.wlanmodule = 'zydas'
                return self.wlanmodule
        
index 05204a7..6af4c52 100644 (file)
@@ -1,4 +1,5 @@
 from Tools.HardwareInfo import HardwareInfo
+from Tools.BoundFunction import boundFunction
 
 from config import config, ConfigSubsection, ConfigSelection, ConfigFloat, \
        ConfigSatlist, ConfigYesNo, ConfigInteger, ConfigSubList, ConfigNothing, \
@@ -13,6 +14,7 @@ from enigma import eDVBSatelliteEquipmentControl as secClass, \
 
 from time import localtime, mktime
 from datetime import datetime
+from Tools.BoundFunction import boundFunction
 
 def getConfigSatlist(orbpos, satlist):
        default_orbpos = None
@@ -444,7 +446,7 @@ class SecConfigure:
                self.update()
 
 class NIM(object):
-       def __init__(self, slot, type, description, has_outputs = True, internally_connectable = None):
+       def __init__(self, slot, type, description, has_outputs = True, internally_connectable = None, multi_type = {}):
                self.slot = slot
 
                if type not in ("DVB-S", "DVB-C", "DVB-T", "DVB-S2", None):
@@ -455,6 +457,7 @@ class NIM(object):
                self.description = description
                self.has_outputs = has_outputs
                self.internally_connectable = internally_connectable
+               self.multi_type = multi_type
 
        def isCompatible(self, what):
                compatible = {
@@ -466,6 +469,9 @@ class NIM(object):
                        }
                return what in compatible[self.type]
        
+       def getType(self):
+               return self.type
+       
        def connectableTo(self):
                connectable = {
                                "DVB-S": ("DVB-S", "DVB-S2"),
@@ -491,6 +497,13 @@ class NIM(object):
        
        def internallyConnectableTo(self):
                return self.internally_connectable
+       
+       def isMultiType(self):
+               return (len(self.multi_type) > 0)
+       
+       # returns dict {<slotid>: <type>}
+       def getMultiTypeList(self):
+               return self.multi_type
 
        slot_id = property(getSlotID)
 
@@ -636,7 +649,15 @@ class NimManager:
                                entries[current_slot]["has_outputs"] = (input == "yes")
                        elif line.strip().startswith("Internally_Connectable:"):
                                input = int(line.strip()[len("Internally_Connectable:") + 1:])
-                               entries[current_slot]["internally_connectable"] = input 
+                               entries[current_slot]["internally_connectable"] = input
+                       elif  line.strip().startswith("Mode"):
+                               # "Mode 0: DVB-T" -> ["Mode 0", " DVB-T"]
+                               split = line.strip().split(":")
+                               # "Mode 0" -> ["Mode, "0"]
+                               split2 = split[0].split(" ")
+                               modes = entries[current_slot].get("multi_type", {})
+                               modes[split2[1]] = split[1].strip()
+                               entries[current_slot]["multi_type"] = modes
                        elif line.strip().startswith("empty"):
                                entries[current_slot]["type"] = None
                                entries[current_slot]["name"] = _("N/A")
@@ -650,12 +671,17 @@ class NimManager:
                                entry["has_outputs"] = True
                        if not (entry.has_key("internally_connectable")):
                                entry["internally_connectable"] = None
-                       self.nim_slots.append(NIM(slot = id, description = entry["name"], type = entry["type"], has_outputs = entry["has_outputs"], internally_connectable = entry["internally_connectable"]))
+                       if not (entry.has_key("multi_type")):
+                               entry["multi_type"] = {}
+                       self.nim_slots.append(NIM(slot = id, description = entry["name"], type = entry["type"], has_outputs = entry["has_outputs"], internally_connectable = entry["internally_connectable"], multi_type = entry["multi_type"]))
 
        def hasNimType(self, chktype):
                for slot in self.nim_slots:
                        if slot.isCompatible(chktype):
                                return True
+                       for type in slot.getMultiTypeList().values():
+                               if chktype == type:
+                                       return True
                return False
        
        def getNimType(self, slotid):
@@ -663,6 +689,9 @@ class NimManager:
        
        def getNimDescription(self, slotid):
                return self.nim_slots[slotid].friendly_full_description
+       
+       def getNimName(self, slotid):
+               return self.nim_slots[slotid].description
 
        def getNimListOfType(self, type, exception = -1):
                # returns a list of indexes for NIMs compatible to the given type, except for 'exception'
@@ -899,7 +928,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
 
@@ -938,16 +967,22 @@ def InitSecParams():
 # the configElement should be only visible when diseqc 1.2 is disabled
 
 def InitNimManager(nimmgr):
-       InitSecParams()
        hw = HardwareInfo()
+       addNimConfig = False
+       try:
+               config.Nims
+       except:
+               addNimConfig = True
 
-       config.Nims = ConfigSubList()
-       for x in range(len(nimmgr.nim_slots)):
-               config.Nims.append(ConfigSubsection())
+       if addNimConfig:
+               InitSecParams()
+               config.Nims = ConfigSubList()
+               for x in range(len(nimmgr.nim_slots)):
+                       config.Nims.append(ConfigSubsection())
 
        lnb_choices = {
                "universal_lnb": _("Universal LNB"),
-#              "unicable": _("Unicable"),
+               "unicable": _("Unicable"),
                "c_band": _("C-Band"),
                "user_defined": _("User defined")}
 
@@ -1213,10 +1248,49 @@ def InitNimManager(nimmgr):
                                tmp.lnb = lnb
                                nim.advanced.sat[x] = tmp
 
+       def toneAmplitudeChanged(configElement):
+               fe_id = configElement.fe_id
+               slot_id = configElement.slot_id
+               if nimmgr.nim_slots[slot_id].description == 'Alps BSBE2':
+                       open("/proc/stb/frontend/%d/tone_amplitude" %(fe_id), "w").write(configElement.value)
+                       
+       def tunerTypeChanged(nimmgr, configElement):
+               fe_id = configElement.fe_id
+               print "tunerTypeChanged feid %d to mode %s" % (fe_id, configElement.value)
+               open("/proc/stb/frontend/%d/mode" % (fe_id), "w").write(configElement.value)
+               frontend = eDVBResourceManager.getInstance().allocateRawChannel(fe_id).getFrontend()
+               frontend.reopenFrontend()
+               nimmgr.enumerateNIMs()
+       
+       empty_slots = 0
        for slot in nimmgr.nim_slots:
                x = slot.slot
                nim = config.Nims[x]
+               addMultiType = False
+               try:
+                       nim.multiType
+               except:
+                       addMultiType = True
+               if slot.isMultiType() and addMultiType:
+                       typeList = []
+                       for id in slot.getMultiTypeList().keys():
+                               type = slot.getMultiTypeList()[id]
+                               typeList.append((id, type))
+                       nim.multiType = ConfigSelection(typeList, "0")
+                       
+                       nim.multiType.fe_id = x - empty_slots
+                       nim.multiType.addNotifier(boundFunction(tunerTypeChanged, nimmgr))
+               
+       empty_slots = 0
+       for slot in nimmgr.nim_slots:
+               x = slot.slot
+               nim = config.Nims[x]
+
                if slot.isCompatible("DVB-S"):
+                       nim.toneAmplitude = ConfigSelection([("9", "600mV"), ("8", "700mV"), ("7", "800mV"), ("6", "900mV"), ("5", "1100mV")], "7")
+                       nim.toneAmplitude.fe_id = x - empty_slots
+                       nim.toneAmplitude.slot_id = x
+                       nim.toneAmplitude.addNotifier(toneAmplitudeChanged)
                        nim.diseqc13V = ConfigYesNo(False)
                        nim.diseqcMode = ConfigSelection(diseqc_mode_choices, "diseqc_a_b")
                        nim.connectedTo = ConfigSelection([(str(id), nimmgr.getNimDescription(id)) for id in nimmgr.getNimListOfType("DVB-S") if id != x])
@@ -1306,6 +1380,7 @@ def InitNimManager(nimmgr):
                        nim.terrestrial = ConfigSelection(choices = list)
                        nim.terrestrial_5V = ConfigOnOff()
                else:
+                       empty_slots += 1
                        nim.configMode = ConfigSelection(choices = { "nothing": _("disabled") }, default="nothing");
                        if slot.type is not None:
                                print "pls add support for this frontend type!", slot.type
index d68e01f..9942bca 100644 (file)
@@ -1,19 +1,34 @@
-from Components.config import config, ConfigSubsection, ConfigSelection, ConfigPIN, ConfigYesNo, ConfigSubList, ConfigInteger
+from Components.config import config, ConfigSubsection, ConfigSelection, ConfigPIN, ConfigText, ConfigYesNo, ConfigSubList, ConfigInteger
+#from Screens.ChannelSelection import service_types_tv
 from Screens.InputBox import PinInput
 from Screens.MessageBox import MessageBox
 from Tools.BoundFunction import boundFunction
 from ServiceReference import ServiceReference
 from Tools import Notifications
 from Tools.Directories import resolveFilename, SCOPE_CONFIG
+from enigma import eTimer
+import time
+
+TYPE_SERVICE = "SERVICE"
+TYPE_BOUQUETSERVICE = "BOUQUETSERVICE"
+TYPE_BOUQUET = "BOUQUET"
+LIST_BLACKLIST = "blacklist"
+LIST_WHITELIST = "whitelist"
+
+IMG_WHITESERVICE = LIST_WHITELIST + "-" + TYPE_SERVICE
+IMG_WHITEBOUQUET = LIST_WHITELIST + "-" + TYPE_BOUQUET
+IMG_BLACKSERVICE = LIST_BLACKLIST + "-" + TYPE_SERVICE
+IMG_BLACKBOUQUET = LIST_BLACKLIST + "-" + TYPE_BOUQUET
 
 def InitParentalControl():
        config.ParentalControl = ConfigSubsection()
        config.ParentalControl.configured = ConfigYesNo(default = False)
        config.ParentalControl.mode = ConfigSelection(default = "simple", choices = [("simple", _("simple")), ("complex", _("complex"))])
-       config.ParentalControl.storeservicepin = ConfigSelection(default = "never", choices = [("never", _("never")), ("5_minutes", _("5 minutes")), ("30_minutes", _("30 minutes")), ("60_minutes", _("60 minutes")), ("restart", _("until restart"))])
+       config.ParentalControl.storeservicepin = ConfigSelection(default = "never", choices = [("never", _("never")), ("5", _("5 minutes")), ("30", _("30 minutes")), ("60", _("60 minutes")), ("standby", _("until standby/restart"))])
+       config.ParentalControl.storeservicepincancel = ConfigSelection(default = "never", choices = [("never", _("never")), ("5", _("5 minutes")), ("30", _("30 minutes")), ("60", _("60 minutes")), ("standby", _("until standby/restart"))])
        config.ParentalControl.servicepinactive = ConfigYesNo(default = False)
        config.ParentalControl.setuppinactive = ConfigYesNo(default = False)
-       config.ParentalControl.type = ConfigSelection(default = "blacklist", choices = [("whitelist", _("whitelist")), ("blacklist", _("blacklist"))])
+       config.ParentalControl.type = ConfigSelection(default = "blacklist", choices = [(LIST_WHITELIST, _("whitelist")), (LIST_BLACKLIST, _("blacklist"))])
        config.ParentalControl.setuppin = ConfigPIN(default = -1)
        
        config.ParentalControl.retries = ConfigSubsection()
@@ -39,40 +54,58 @@ def InitParentalControl():
 
 class ParentalControl:
        def __init__(self):
-               self.open()
+               #Do not call open on init, because bouquets are not ready at that moment 
+#              self.open()
                self.serviceLevel = {}
-               
-       def addWhitelistService(self, service):
-               self.whitelist.append(service)
+               #Instead: Use Flags to see, if we already initialized config and called open
+               self.configInitialized = False
+               self.filesOpened = False
+               #This is the timer that is used to see, if the time for caching the pin is over
+               #Of course we could also work without a timer and compare the times every
+               #time we call isServicePlayable. But this might probably slow down zapping, 
+               #That's why I decided to use a timer
+               self.sessionPinTimer = eTimer()
+               self.sessionPinTimer.callback.append(self.resetSessionPin)
        
-       def addBlacklistService(self, service):
-               self.blacklist.append(service)
-
-       def setServiceLevel(self, service, level):
-               self.serviceLevel[service] = level
-
-       def deleteWhitelistService(self, service):
-               self.whitelist.remove(service)
-               if self.serviceLevel.has_key(service):
-                       self.serviceLevel.remove(service)
+       def serviceMethodWrapper(self, service, method, *args):
+               #This method is used to call all functions that need a service as Parameter: 
+               #It takes either a Service- Reference or a Bouquet- Reference and passes 
+               #Either the service or all services contained in the bouquet to the method given
+               #That way all other functions do not need to distinguish between service and bouquet. 
+               if "FROM BOUQUET" in service:
+                       method( service , TYPE_BOUQUET , *args )
+                       servicelist = self.readServicesFromBouquet(service,"C")
+                       for ref in servicelist:
+                               sRef = str(ref[0])
+                               method( sRef , TYPE_BOUQUETSERVICE , *args )
+               else:
+                       ref = ServiceReference(service)
+                       sRef = str(ref)
+                       method( sRef , TYPE_SERVICE , *args )
        
-       def deleteBlacklistService(self, service):
-               self.blacklist.remove(service)
-               if self.serviceLevel.has_key(service):
-                       self.serviceLevel.remove(service)
+       def setServiceLevel(self, service, type, level):
+               self.serviceLevel[service] = level
 
        def isServicePlayable(self, ref, callback):
                if not config.ParentalControl.configured.value or not config.ParentalControl.servicepinactive.value:
                        return True
-               #print "whitelist:", self.whitelist
-               #print "blacklist:", self.blacklist
-               #print "config.ParentalControl.type.value:", config.ParentalControl.type.value
-               #print "not in whitelist:", (service not in self.whitelist)
-               #print "checking parental control for service:", ref.toString()
+               #Check if we already read the whitelists and blacklists. If not: call open
+               if self.filesOpened == False:
+                       self.open()
+               #Check if configuration has already been read or if the significant values have changed.
+               #If true: read the configuration 
+               if self.configInitialized == False or self.storeServicePin != config.ParentalControl.storeservicepin.value or self.storeServicePinCancel != config.ParentalControl.storeservicepincancel.value:
+                       self.getConfigValues()
                service = ref.toCompareString()
-               if (config.ParentalControl.type.value == "whitelist" and service not in self.whitelist) or (config.ParentalControl.type.value == "blacklist" and service in self.blacklist):
+               if (config.ParentalControl.type.value == LIST_WHITELIST and not self.whitelist.has_key(service)) or (config.ParentalControl.type.value == LIST_BLACKLIST and self.blacklist.has_key(service)):
+                       #Check if the session pin is cached and return the cached value, if it is.
+                       if self.sessionPinCached == True:
+                               #As we can cache successful pin- entries as well as canceled pin- entries,
+                               #We give back the last action 
+                               return self.sessionPinCachedValue
                        self.callback = callback
-                       #print "service:", ServiceReference(service).getServiceName()
+                       #Someone started to implement different levels of protection. Seems they were never completed
+                       #I did not throw out this code, although it is of no use at the moment
                        levelNeeded = 0
                        if self.serviceLevel.has_key(service):
                                levelNeeded = self.serviceLevel[service]
@@ -83,103 +116,217 @@ class ParentalControl:
                        return True
                
        def protectService(self, service):
-               #print "protect"
-               #print "config.ParentalControl.type.value:", config.ParentalControl.type.value
-               if config.ParentalControl.type.value == "whitelist":
-                       if service in self.whitelist:
-                               self.deleteWhitelistService(service)
+               if config.ParentalControl.type.value == LIST_WHITELIST:
+                       if self.whitelist.has_key(service):
+                               self.serviceMethodWrapper(service, self.removeServiceFromList, self.whitelist)
+                               #self.deleteWhitelistService(service)
                else: # blacklist
-                       if service not in self.blacklist:
-                               self.addBlacklistService(service)
+                       if not self.blacklist.has_key(service):
+                               self.serviceMethodWrapper(service, self.addServiceToList, self.blacklist)
+                               #self.addBlacklistService(service)
                #print "whitelist:", self.whitelist
                #print "blacklist:", self.blacklist
 
-                               
        def unProtectService(self, service):
                #print "unprotect"
                #print "config.ParentalControl.type.value:", config.ParentalControl.type.value
-               if config.ParentalControl.type.value == "whitelist":
-                       if service not in self.whitelist:
-                               self.addWhitelistService(service)
+               if config.ParentalControl.type.value == LIST_WHITELIST:
+                       if not self.whitelist.has_key(service):
+                               self.serviceMethodWrapper(service, self.addServiceToList, self.whitelist)
+                               #self.addWhitelistService(service)
                else: # blacklist
-                       if service in self.blacklist:
-                               self.deleteBlacklistService(service)
+                       if self.blacklist.has_key(service):
+                               self.serviceMethodWrapper(service, self.removeServiceFromList, self.blacklist)
+                               #self.deleteBlacklistService(service)
                #print "whitelist:", self.whitelist
                #print "blacklist:", self.blacklist
 
        def getProtectionLevel(self, service):
-               if (config.ParentalControl.type.value == "whitelist" and service not in self.whitelist) or (config.ParentalControl.type.value == "blacklist" and service in self.blacklist):
+               if (config.ParentalControl.type.value == LIST_WHITELIST and not self.whitelist.has_key(service)) or (config.ParentalControl.type.value == LIST_BLACKLIST and self.blacklist.has_key(service)):
                        if self.serviceLevel.has_key(service):
                                return self.serviceLevel[service]
                        else:
                                return 0
                else:
                        return -1
+
+       def getProtectionType(self, service):
+               #New method used in ParentalControlList: This method does not only return
+               #if a service is protected or not, it also returns, why (whitelist or blacklist, service or bouquet)
+               if self.filesOpened == False:
+                       self.open()
+               sImage = ""
+               if (config.ParentalControl.type.value == LIST_WHITELIST):
+                       if self.whitelist.has_key(service):
+                               if TYPE_SERVICE in self.whitelist[service]:
+                                       sImage = IMG_WHITESERVICE
+                               else:
+                                       sImage = IMG_WHITEBOUQUET
+               elif (config.ParentalControl.type.value == LIST_BLACKLIST):
+                       if self.blacklist.has_key(service):
+                               if TYPE_SERVICE in self.blacklist[service]:
+                                       sImage = IMG_BLACKSERVICE
+                               else:
+                                       sImage = IMG_BLACKBOUQUET
+               bLocked = self.getProtectionLevel(service) != -1
+               return (bLocked,sImage)
+       
+       def getConfigValues(self):      
+               #Read all values from configuration 
+               self.checkPinInterval = False
+               self.checkPinIntervalCancel = False
+               self.checkSessionPin = False
+               self.checkSessionPinCancel = False
+               
+               self.sessionPinCached = False
+               self.pinIntervalSeconds = 0
+               self.pinIntervalSecondsCancel = 0
+
+               self.storeServicePin = config.ParentalControl.storeservicepin.value
+               self.storeServicePinCancel = config.ParentalControl.storeservicepincancel.value
+               
+               if self.storeServicePin == "never":
+                       pass
+               elif self.storeServicePin == "standby":
+                       self.checkSessionPin = True
+               else:
+                       self.checkPinInterval = True
+                       iMinutes = float(self.storeServicePin)
+                       iSeconds = iMinutes*60
+                       self.pinIntervalSeconds = iSeconds
+       
+               if self.storeServicePinCancel == "never":
+                       pass
+               elif self.storeServicePinCancel == "standby":
+                       self.checkSessionPinCancel = True
+               else:
+                       self.checkPinIntervalCancel = True
+                       iMinutes = float(self.storeServicePinCancel)
+                       iSeconds = iMinutes*60
+                       self.pinIntervalSecondsCancel = iSeconds
        
+               self.configInitialized = True
+               # Reset PIN cache on standby: Use StandbyCounter- Config- Callback
+               config.misc.standbyCounter.addNotifier(self.standbyCounterCallback, initial_call = False)
+
+       def standbyCounterCallback(self, configElement):
+               self.resetSessionPin()
+               
+       def resetSessionPin(self):
+               #Reset the session pin, stop the timer
+               self.sessionPinCached = False
+               self.sessionPinTimer.stop()
+
+       def getCurrentTimeStamp(self):
+               return time.time()
+
        def getPinList(self):
                return [ x.value for x in config.ParentalControl.servicepin ]
-       
+               
        def servicePinEntered(self, service, result):
-#              levelNeeded = 0
-               #if self.serviceLevel.has_key(service):
-                       #levelNeeded = self.serviceLevel[service]
-#              
-               #print "getPinList():", self.getPinList()
-               #pinList = self.getPinList()[:levelNeeded + 1]
-               #print "pinList:", pinList
-#              
-#              print "pin entered for service", service, "and pin was", pin
-               #if pin is not None and int(pin) in pinList:
+
                if result is not None and result:
-                       #print "pin ok, playing service"
+                       #This is the new function of caching the service pin
+                       #save last session and time of last entered pin...
+                       if self.checkSessionPin == True:
+                               self.sessionPinCached = True
+                               self.sessionPinCachedValue = True
+                       if self.checkPinInterval == True:
+                               self.sessionPinCached = True
+                               self.sessionPinCachedValue = True
+                               self.sessionPinTimer.start(self.pinIntervalSeconds*1000,1)
                        self.callback(ref = service)
                else:
+                       #This is the new function of caching cancelling of service pin
                        if result is not None:
                                Notifications.AddNotification(MessageBox,  _("The pin code you entered is wrong."), MessageBox.TYPE_ERROR)
-                       #print "wrong pin entered"
+                       else:
+                               if self.checkSessionPinCancel == True:
+                                       self.sessionPinCached = True
+                                       self.sessionPinCachedValue = False
+                               if self.checkPinIntervalCancel == True:
+                                       self.sessionPinCached = True
+                                       self.sessionPinCachedValue = False
+                                       self.sessionPinTimer.start(self.pinIntervalSecondsCancel*1000,1) 
                        
-       def saveWhitelist(self):
-               file = open(resolveFilename(SCOPE_CONFIG, "whitelist"), 'w')
-               for x in self.whitelist:
-                       file.write(x + "\n")
-               file.close
-       
-       def openWhitelist(self):
-               self.whitelist = []
-               try:
-                       file = open(resolveFilename(SCOPE_CONFIG, "whitelist"), 'r')
-                       lines = file.readlines()
-                       for x in lines:
-                               ref = ServiceReference(x.strip())
-                               self.whitelist.append(str(ref))
-                       file.close
-               except:
-                       pass
-               
-       def saveBlacklist(self):
-               file = open(resolveFilename(SCOPE_CONFIG, "blacklist"), 'w')
-               for x in self.blacklist:
-                       file.write(x + "\n")
+       def saveListToFile(self,sWhichList):
+               #Replaces saveWhiteList and saveBlackList: 
+               #I don't like to have two functions with identical code...
+               if sWhichList == LIST_BLACKLIST:
+                       vList = self.blacklist
+               else:
+                       vList = self.whitelist
+               file = open(resolveFilename(SCOPE_CONFIG, sWhichList), 'w')
+               for sService,sType in vList.iteritems():
+                       #Only Services that are selected directly and Bouqets are saved. 
+                       #Services that are added by a bouquet are not saved. 
+                       #This is the reason for the change in self.whitelist and self.blacklist
+                       if TYPE_SERVICE in sType or TYPE_BOUQUET in sType:
+                               file.write(str(sService) + "\n")
                file.close
 
-       def openBlacklist(self):
-               self.blacklist = []
+       def openListFromFile(self,sWhichList):
+               #Replaces openWhiteList and openBlackList: 
+               #I don't like to have two functions with identical code...
+               if sWhichList == LIST_BLACKLIST:
+                       self.blacklist = {}
+                       vList = self.blacklist
+               else:
+                       self.whitelist = {}
+                       vList = self.whitelist
                try:
-                       file = open(resolveFilename(SCOPE_CONFIG, "blacklist"), 'r')
+                       file = open(resolveFilename(SCOPE_CONFIG, sWhichList ), 'r')
                        lines = file.readlines()
                        for x in lines:
-                               ref = ServiceReference(x.strip())
-                               self.blacklist.append(str(ref))
+                               sPlain = x.strip()
+                               self.serviceMethodWrapper(sPlain, self.addServiceToList, vList)
                        file.close
                except:
                        pass
+       
+       def addServiceToList(self, service, type, vList):
+               #Replaces addWhitelistService and addBlacklistService
+               #The lists are not only lists of service references any more. 
+               #They are named lists with the service as key and an array of types as value:
+               
+               if vList.has_key(service):
+                       if not type in vList[service]:
+                               vList[service].append(type)
+               else:
+                       vList[service] = [type]
+       
+       def removeServiceFromList(self, service, type, vList):
+               #Replaces deleteWhitelistService and deleteBlacklistService
+               if vList.has_key(service):
+                       if type in vList[service]:
+                               vList[service].remove(type)
+                       if not vList[service]:
+                               del vList[service]
+               if self.serviceLevel.has_key(service):
+                       self.serviceLevel.remove(service)
+               
+       def readServicesFromBouquet(self,sBouquetSelection,formatstring):
+               #This method gives back a list of services for a given bouquet
+               from enigma import eServiceCenter, eServiceReference
+               from Screens.ChannelSelection import service_types_tv
+               serviceHandler = eServiceCenter.getInstance()
+               refstr = sBouquetSelection
+               root = eServiceReference(refstr)
+               list = serviceHandler.list(root)
+               if list is not None:
+                       services = list.getContent("CN", True) #(servicecomparestring, name)
+                       return services
                
        def save(self):
-               self.saveBlacklist()
-               self.saveWhitelist()
+               # we need to open the files in case we havent's read them yet
+               if not self.filesOpened:
+                       self.open()
+               self.saveListToFile(LIST_BLACKLIST)
+               self.saveListToFile(LIST_WHITELIST)
                
        def open(self):
-               self.openBlacklist()
-               self.openWhitelist()
+               self.openListFromFile(LIST_BLACKLIST)
+               self.openListFromFile(LIST_WHITELIST)
+               self.filesOpened = True
 
 parentalControl = ParentalControl()
index 128e6d3..797ea39 100644 (file)
@@ -1,19 +1,28 @@
 from MenuList import MenuList
-from Components.ParentalControl import parentalControl
+from Components.ParentalControl import parentalControl, IMG_WHITESERVICE, IMG_WHITEBOUQUET, IMG_BLACKSERVICE, IMG_BLACKBOUQUET
 from Tools.Directories import SCOPE_SKIN_IMAGE, resolveFilename
 
 from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_LEFT
 from Tools.LoadPixmap import LoadPixmap
 
-lockPicture = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock.png"))
+#Now there is a list of pictures instead of one...
+entryPicture = {}
 
-def ParentalControlEntryComponent(service, name, locked = True):
+entryPicture[IMG_BLACKSERVICE] = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock.png"))
+entryPicture[IMG_BLACKBOUQUET] = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lockBouquet.png"))
+entryPicture[IMG_WHITESERVICE] = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/unlock.png"))
+entryPicture[IMG_WHITEBOUQUET] = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/unlockBouquet.png"))
+
+def ParentalControlEntryComponent(service, name, protectionType):
+       locked = protectionType[0]
+       sImage = protectionType[1]
        res = [
                (service, name, locked),
                (eListboxPythonMultiContent.TYPE_TEXT, 80, 5, 300, 50, 0, RT_HALIGN_LEFT, name)
        ]
-       if locked:
-               res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 0, 0, 32, 32, lockPicture))
+       #Changed logic: The image is defined by sImage, not by locked anymore
+       if sImage != "":
+               res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 0, 0, 32, 32, entryPicture[sImage]))
        return res
 
 class ParentalControlList(MenuList):
@@ -25,9 +34,11 @@ class ParentalControlList(MenuList):
        def toggleSelectedLock(self):
                print "self.l.getCurrentSelection():", self.l.getCurrentSelection()
                print "self.l.getCurrentSelectionIndex():", self.l.getCurrentSelectionIndex()
-               self.list[self.l.getCurrentSelectionIndex()] = ParentalControlEntryComponent(self.l.getCurrentSelection()[0][0], self.l.getCurrentSelection()[0][1], not self.l.getCurrentSelection()[0][2]);
-               if self.l.getCurrentSelection()[0][2]:
-                       parentalControl.protectService(self.l.getCurrentSelection()[0][0])
+               curSel = self.l.getCurrentSelection()
+               if curSel[0][2]:
+                       parentalControl.unProtectService(self.l.getCurrentSelection()[0][0])
                else:
-                       parentalControl.unProtectService(self.l.getCurrentSelection()[0][0])    
+                       parentalControl.protectService(self.l.getCurrentSelection()[0][0])      
+               #Instead of just negating the locked- flag, now I call the getProtectionType every time...
+               self.list[self.l.getCurrentSelectionIndex()] = ParentalControlEntryComponent(curSel[0][0], curSel[0][1], parentalControl.getProtectionType(curSel[0][0]))
                self.l.setList(self.list)
index c91d6ad..5e439fd 100755 (executable)
@@ -46,7 +46,7 @@ class PluginComponent:
                        for pluginname in os_listdir(directory_category):
                                path = directory_category + "/" + pluginname
                                if os_path.isdir(path):
-                                       if fileExists(path + "/plugin.pyc") or fileExists(path + "/plugin.py"):
+                                       if fileExists(path + "/plugin.pyc") or fileExists(path + "/plugin.pyo") or fileExists(path + "/plugin.py"):
                                                try:
                                                        plugin = my_import('.'.join(["Plugins", c, pluginname, "plugin"]))
 
old mode 100644 (file)
new mode 100755 (executable)
index 7a89533..716fe44
@@ -19,6 +19,7 @@ class Listbox(Renderer, object):
                self.__content = None
                self.__wrap_around = False
                self.__selection_enabled = True
+               self.__scrollbarMode = "showOnDemand"
 
        GUI_WIDGET = eListbox
 
@@ -38,6 +39,7 @@ class Listbox(Renderer, object):
                instance.selectionChanged.get().append(self.selectionChanged)
                self.wrap_around = self.wrap_around # trigger
                self.selection_enabled = self.selection_enabled # trigger
+               self.scrollbarMode = self.scrollbarMode # trigger
 
        def preWidgetRemove(self, instance):
                instance.setContent(None)
@@ -76,7 +78,24 @@ class Listbox(Renderer, object):
 
        selection_enabled = property(lambda self: self.__selection_enabled, setSelectionEnabled)
 
+       def setScrollbarMode(self, mode):
+               self.__scrollbarMode = mode
+               if self.instance is not None:
+                       self.instance.setScrollbarMode(int(
+                               { "showOnDemand": 0,
+                                 "showAlways": 1,
+                                 "showNever": 2,
+                               }[mode]))
+
+       scrollbarMode = property(lambda self: self.__scrollbarMode, setScrollbarMode)
+       
        def changed(self, what):
+               if hasattr(self.source, "selectionEnabled"):
+                       self.selection_enabled = self.source.selectionEnabled
+               if hasattr(self.source, "scrollbarMode"):
+                       self.scrollbarMode = self.source.scrollbarMode
+               if len(what) > 1 and isinstance(what[1], str) and what[1] == "style":
+                       return
                self.content = self.source.content
 
        def entry_changed(self, index):
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
index b0283c1..cd055a8 100644 (file)
@@ -5,7 +5,9 @@ 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
+
+from Components.config import config
 
 class ServiceList(HTMLComponent, GUIComponent):
        MODE_NORMAL = 0
@@ -15,27 +17,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)
 
@@ -62,6 +64,22 @@ class ServiceList(HTMLComponent, GUIComponent):
                                        self.l.setColor(eListboxServiceContent.markedBackgroundSelected, parseColor(value))
                                elif attrib == "foregroundColorServiceNotAvail":
                                        self.l.setColor(eListboxServiceContent.serviceNotAvail, parseColor(value))
+                               elif attrib == "colorEventProgressbar":
+                                       self.l.setColor(eListboxServiceContent.serviceEventProgressbarColor, parseColor(value))
+                               elif attrib == "colorEventProgressbarSelected":
+                                       self.l.setColor(eListboxServiceContent.serviceEventProgressbarColorSelected, parseColor(value))
+                               elif attrib == "colorEventProgressbarBorder":
+                                       self.l.setColor(eListboxServiceContent.serviceEventProgressbarBorderColor, parseColor(value))
+                               elif attrib == "colorEventProgressbarBorderSelected":
+                                       self.l.setColor(eListboxServiceContent.serviceEventProgressbarBorderColorSelected, parseColor(value))
+                               elif attrib == "colorServiceDescription":
+                                       self.l.setColor(eListboxServiceContent.serviceDescriptionColor, parseColor(value))
+                               elif attrib == "colorServiceDescriptionSelected":
+                                       self.l.setColor(eListboxServiceContent.serviceDescriptionColorSelected, parseColor(value))
+                               elif attrib == "picServiceEventProgressbar":
+                                       pic = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, value))
+                                       if pic:
+                                               self.l.setPixmap(self.l.picServiceEventProgressbar, pic)
                                elif attrib == "serviceItemHeight":
                                        self.ItemHeight = int(value)
                                elif attrib == "serviceNameFont":
@@ -213,17 +231,24 @@ class ServiceList(HTMLComponent, GUIComponent):
 
        def setMode(self, mode):
                self.mode = mode
+               self.l.setItemHeight(self.ItemHeight)
+               self.l.setVisualMode(eListboxServiceContent.visModeComplex)
                if mode == self.MODE_NORMAL:
-                       self.l.setItemHeight(self.ItemHeight)
-                       self.l.setVisualMode(eListboxServiceContent.visModeComplex)
+                       if config.usage.show_event_progress_in_servicelist.value:
+                               self.l.setElementPosition(self.l.celServiceEventProgressbar, eRect(0, 0, 52, self.ItemHeight))
+                       else:
+                               self.l.setElementPosition(self.l.celServiceEventProgressbar, eRect(0, 0, 0, 0))
                        self.l.setElementFont(self.l.celServiceName, self.ServiceNameFont)
                        self.l.setElementPosition(self.l.celServiceName, eRect(0, 0, self.instance.size().width(), self.ItemHeight))
                        self.l.setElementFont(self.l.celServiceInfo, self.ServiceInfoFont)
                else:
-                       self.l.setItemHeight(self.ItemHeight)
-                       self.l.setVisualMode(eListboxServiceContent.visModeComplex)
+                       if config.usage.show_event_progress_in_servicelist.value:
+                               self.l.setElementPosition(self.l.celServiceEventProgressbar, eRect(60, 0, 52, self.ItemHeight))
+                       else:
+                               self.l.setElementPosition(self.l.celServiceEventProgressbar, eRect(60, 0, 0, 0))
                        self.l.setElementFont(self.l.celServiceNumber, self.ServiceNumberFont)
                        self.l.setElementPosition(self.l.celServiceNumber, eRect(0, 0, 50, self.ItemHeight))
                        self.l.setElementFont(self.l.celServiceName, self.ServiceNameFont)
                        self.l.setElementPosition(self.l.celServiceName, eRect(60, 0, self.instance.size().width()-60, self.ItemHeight))
                        self.l.setElementFont(self.l.celServiceInfo, self.ServiceInfoFont)
+
index 1eab32b..6f0670a 100644 (file)
@@ -91,8 +91,9 @@ to generate HTML."""
                return self.__style
 
        def setStyle(self, style):
-               self.__style = style
-               self.changed((self.CHANGED_SPECIFIC, "style"))
+               if self.__style != style:
+                       self.__style = style
+                       self.changed((self.CHANGED_SPECIFIC, "style"))
 
        style = property(getStyle, setStyle)
 
index 6ef8cac..436d31b 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 d2b405a..f9c4065 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"
index df94f8a..2e4e757 100644 (file)
@@ -16,6 +16,7 @@ class Job(object):
                self.end = 100
                self.__progress = 0
                self.weightScale = 1
+               self.afterEvent = None
 
                self.state_changed = CList()
 
@@ -370,12 +371,20 @@ class DiskspacePrecondition(Condition):
 class ToolExistsPrecondition(Condition):
        def check(self, task):
                import os
+               
                if task.cmd[0]=='/':
-                       realpath = task.cmd
+                       self.realpath = task.cmd
+                       print "[Task.py][ToolExistsPrecondition] WARNING: usage of absolute paths for tasks should be avoided!" 
+                       return os.access(self.realpath, os.X_OK)
                else:
-                       realpath = task.cwd + '/' + task.cmd
-               self.realpath = realpath
-               return os.access(realpath, os.X_OK)
+                       self.realpath = task.cmd
+                       path = os.environ.get('PATH', '').split(os.pathsep)
+                       path.append(task.cwd + '/')
+                       absolutes = filter(lambda file: os.access(file, os.X_OK), map(lambda directory, file = task.cmd: os.path.join(directory, file), path))
+                       if len(absolutes) > 0:
+                               self.realpath = task.cmd[0]
+                               return True
+               return False 
 
        def getErrorMessage(self, task):
                return _("A required tool (%s) was not found.") % (self.realpath)
old mode 100644 (file)
new mode 100755 (executable)
index 44a7eb4..30097c9
@@ -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):
 #
@@ -33,12 +33,18 @@ class TimerList(HTMLComponent, GUIComponent, object):
                                                count += 1
                                        flags = flags >> 1
                        if timer.justplay:
-                               res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, width-150, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + ((" %s "+ _("(ZAP)")) % (FuzzyTime(timer.begin)[1]))))
+                               if timer.end - timer.begin < 4: # rounding differences
+                                       res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, width-150, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + ((" %s "+ _("(ZAP)")) % (FuzzyTime(timer.begin)[1]))))
+                               else:
+                                       res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, width-150, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + ((" %s ... %s (%d " + _("mins") + ") ") % (FuzzyTime(timer.begin)[1], FuzzyTime(timer.end)[1], (timer.end - timer.begin) / 60)) + _("(ZAP)")))
                        else:
                                res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, width-150, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + ((" %s ... %s (%d " + _("mins") + ")") % (FuzzyTime(timer.begin)[1], FuzzyTime(timer.end)[1], (timer.end - timer.begin) / 60))))
                else:
                        if timer.justplay:
-                               res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, width-150, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + (("%s, %s " + _("(ZAP)")) % (FuzzyTime(timer.begin)))))
+                               if timer.end - timer.begin < 4:
+                                       res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, width-150, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + (("%s, %s " + _("(ZAP)")) % (FuzzyTime(timer.begin)))))
+                               else:
+                                       res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, width-150, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + (("%s, %s ... %s (%d " + _("mins") + ") ") % (FuzzyTime(timer.begin) + FuzzyTime(timer.end)[1:] + ((timer.end - timer.begin) / 60,))) + _("(ZAP)")))
                        else:
                                res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, width-150, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + (("%s, %s ... %s (%d " + _("mins") + ")") % (FuzzyTime(timer.begin) + FuzzyTime(timer.end)[1:] + ((timer.end - timer.begin) / 60,)))))
 
@@ -65,7 +71,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 f9ab3ed..44b1909 100644 (file)
@@ -1,8 +1,9 @@
 from enigma import eDVBFrontendParametersSatellite, eDVBFrontendParameters, eDVBResourceManager, eTimer
 
 class Tuner:
-       def __init__(self, frontend):
+       def __init__(self, frontend, ignore_rotor=False):
                self.frontend = frontend
+               self.ignore_rotor = ignore_rotor
 
        # transponder = (frequency, symbolrate, polarisation, fec, inversion, orbpos, system, modulation, rolloff, pilot, tsid, onid)
        #                    0         1             2         3       4         5       6        7          8       9      10    11
@@ -21,7 +22,7 @@ class Tuner:
                        parm.rolloff = transponder[8]
                        parm.pilot = transponder[9]
                        feparm = eDVBFrontendParameters()
-                       feparm.setDVBS(parm)
+                       feparm.setDVBS(parm, self.ignore_rotor)
                        self.lastparm = feparm
                        self.frontend.tune(feparm)
 
index 6fcab8b..b86c1a1 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")) ])
@@ -47,7 +51,14 @@ def InitUsageConfig():
 
        config.usage.on_long_powerpress = ConfigSelection(default = "show_menu", choices = [
                ("show_menu", _("show shutdown menu")),
-               ("shutdown", _("immediate shutdown")) ] )
+               ("shutdown", _("immediate shutdown")),
+               ("standby", _("Standby")) ] )
+       
+       config.usage.on_short_powerpress = ConfigSelection(default = "standby", choices = [
+               ("show_menu", _("show shutdown menu")),
+               ("shutdown", _("immediate shutdown")),
+               ("standby", _("Standby")) ] )
+
 
        config.usage.alternatives_priority = ConfigSelection(default = "0", choices = [
                ("0", "DVB-S/-C/-T"),
@@ -57,6 +68,8 @@ def InitUsageConfig():
                ("4", "DVB-T/-C/-S"),
                ("5", "DVB-T/-S/-C") ])
 
+       config.usage.show_event_progress_in_servicelist = ConfigYesNo(default = False)
+
        config.usage.blinking_display_clock_during_recording = ConfigYesNo(default = False)
 
        config.usage.show_message_when_recording_starts = ConfigYesNo(default = True)
@@ -65,19 +78,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 +141,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 789ec32..471b59e 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):
@@ -1140,6 +1138,9 @@ class ConfigDirectory(ConfigText):
                else:
                        return ConfigText.getMulti(self, selected)
 
+       def onSelect(self, session):
+               self.allmarked = (self.value != "")
+
 # a slider.
 class ConfigSlider(ConfigElement):
        def __init__(self, default = 0, increment = 1, limits = (0, 100)):
@@ -1285,7 +1286,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 +1322,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 +1341,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 +1355,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 7566346..0627df3 100644 (file)
@@ -7,9 +7,10 @@ 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
+from enigma import eListboxPythonMultiContent, eListbox, getDesktop, gFont, iPlayableService, RT_HALIGN_RIGHT
 from Screens.FixedMenu import FixedMenu
 from Screens.HelpMenu import HelpableScreen
 from ServiceReference import ServiceReference
@@ -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,8 +163,12 @@ 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)
+               desktopSize = getDesktop(0).size()
+               self["Video"] = VideoWindow(decoder = 0, fb_width=desktopSize.width(), fb_height=desktopSize.height())
 
                self["actions"] = HelpableActionMap(self, "CutListEditorActions",
                        {
@@ -184,12 +190,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 +248,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 +341,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 +353,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 +370,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 +380,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 8367246..7f755db 100644 (file)
@@ -1,5 +1,7 @@
 from Tools.Directories import fileExists
 from Components.config import config, ConfigSubsection, ConfigInteger, ConfigText, ConfigSelection, getConfigListEntry, ConfigSequence, ConfigSubList
+import DVDTitle
+import xml.dom.minidom
 
 class ConfigColor(ConfigSequence):
        def __init__(self, default = [128,128,128]):
@@ -10,7 +12,10 @@ class ConfigFilename(ConfigText):
                ConfigText.__init__(self, default = "", fixed_size = True, visible_width = False)
 
        def getMulti(self, selected):
-               filename = (self.text.rstrip("/").rsplit("/",1))[1].encode("utf-8")[:40] + " "
+               if self.text == "":
+                       return ("mtext"[1-selected:], "", 0)
+               cut_len = min(len(self.text),40)
+               filename = (self.text.rstrip("/").rsplit("/",1))[1].encode("utf-8")[:cut_len] + " "
                if self.allmarked:
                        mark = range(0, len(filename))
                else:
@@ -34,10 +39,11 @@ class DVDProject:
                self.settings.vmgm = ConfigFilename()
                self.filekeys = ["vmgm", "isopath", "menutemplate"]
                self.menutemplate = MenuTemplate()
+               self.error = ""
+               self.session = None
 
        def addService(self, service):
-               import DVDTitle
-               title = DVDTitle.DVDTitle()
+               title = DVDTitle.DVDTitle(self)
                title.addService(service)
                self.titles.append(title)
                return title
@@ -100,47 +106,78 @@ class DVDProject:
                return ret
 
        def loadProject(self, filename):
-               import xml.dom.minidom
-               try:
+               #try:
                        if not fileExists(filename):
                                self.error = "xml file not found!"
-                               raise AttributeError
-                       else:
-                               self.error = ""
+                               #raise AttributeError
                        file = open(filename, "r")
                        data = file.read().decode("utf-8").replace('&',"&amp;").encode("ascii",'xmlcharrefreplace')
                        file.close()
                        projectfiledom = xml.dom.minidom.parseString(data)
-                       for project in projectfiledom.childNodes[0].childNodes:
-                         if project.nodeType == xml.dom.minidom.Element.nodeType:
-                           if project.tagName == 'settings':
-                               i = 0
-                               if project.attributes.length < len(self.settings.dict())-1:
-                                       self.error = "project attributes missing"
-                                       raise AttributeError
-                               while i < project.attributes.length:
-                                       item = project.attributes.item(i)
-                                       key = item.name.encode("utf-8")
-                                       try:
-                                               val = eval(item.nodeValue)
-                                       except (NameError, SyntaxError):
-                                               val = item.nodeValue.encode("utf-8")
-                                       try:
-                                               self.settings.dict()[key].setValue(val)
-                                       except (KeyError):
-                                               self.error = "unknown attribute '%s'" % (key)
-                                               raise AttributeError
-                                       i += 1
+                       for node in projectfiledom.childNodes[0].childNodes:
+                         print "node:", node
+                         if node.nodeType == xml.dom.minidom.Element.nodeType:
+                           if node.tagName == 'settings':
+                               self.xmlAttributesToConfig(node, self.settings)
+                           elif node.tagName == 'titles':
+                               self.xmlGetTitleNodeRecursive(node)
+                               
                        for key in self.filekeys:
                                val = self.settings.dict()[key].getValue()
                                if not fileExists(val):
                                        self.error += "\n%s '%s' not found" % (key, val)
-                       if len(self.error):
-                               raise AttributeError
+               #except AttributeError:
+                       #print "loadProject AttributeError", self.error
+                       #self.error += (" in project '%s'") % (filename)
+                       #return False
+                       return True
+
+       def xmlAttributesToConfig(self, node, config):
+               try:
+                       i = 0
+                       #if node.attributes.length < len(config.dict())-1:
+                               #self.error = "project attributes missing"
+                               #raise AttributeError
+                       while i < node.attributes.length:
+                               item = node.attributes.item(i)
+                               key = item.name.encode("utf-8")
+                               try:
+                                       val = eval(item.nodeValue)
+                               except (NameError, SyntaxError):
+                                       val = item.nodeValue.encode("utf-8")
+                               try:
+                                       print "config[%s].setValue(%s)" % (key, val)
+                                       config.dict()[key].setValue(val)
+                               except (KeyError):
+                                       self.error = "unknown attribute '%s'" % (key)
+                                       print "KeyError", self.error
+                                       raise AttributeError
+                               i += 1
                except AttributeError:
-                       self.error += (" in project '%s'") % (filename)
+                       self.error += (" XML attribute error '%s'") % node.toxml()
                        return False
-               return True
+
+       def xmlGetTitleNodeRecursive(self, node, title_idx = -1):
+               print "[xmlGetTitleNodeRecursive]", title_idx, node
+               print node.childNodes
+               for subnode in node.childNodes:
+                 print "xmlGetTitleNodeRecursive subnode:", subnode
+                 if subnode.nodeType == xml.dom.minidom.Element.nodeType:
+                   if subnode.tagName == 'title':
+                       title_idx += 1
+                       title = DVDTitle.DVDTitle(self)
+                       self.titles.append(title)
+                       self.xmlGetTitleNodeRecursive(subnode, title_idx)
+                   if subnode.tagName == 'path':
+                       print "path:", subnode.firstChild.data
+                       filename = subnode.firstChild.data
+                       self.titles[title_idx].addFile(filename.encode("utf-8"))
+                   if subnode.tagName == 'properties':
+                       self.xmlAttributesToConfig(node, self.titles[title_idx].properties)
+                   if subnode.tagName == 'audiotracks':
+                       self.xmlGetTitleNodeRecursive(subnode, title_idx)
+                   if subnode.tagName == 'audiotrack':
+                       print "audiotrack...", subnode.toxml()
 
        def getSize(self):
                totalsize = 0
@@ -187,6 +224,7 @@ class MenuTemplate(DVDProject):
                self.filekeys = ["menubg", "menuaudio", "fontface_headline", "fontface_title", "fontface_subtitle"]
                from TitleProperties import languageChoices
                self.settings.menulang = ConfigSelection(choices = languageChoices.choices, default=languageChoices.choices[1][0])
+               self.error = ""
 
        def loadTemplate(self, filename):
                ret = DVDProject.loadProject(self, filename)
index 660005e..6dff00d 100644 (file)
@@ -1,4 +1,5 @@
 from Components.config import config, ConfigSubsection, ConfigSubList, ConfigInteger, ConfigText, ConfigSelection, getConfigListEntry, ConfigSequence, ConfigYesNo
+import TitleCutter
 
 class ConfigFixedText(ConfigText):
        def __init__(self, text, visible_width=60):
@@ -7,17 +8,17 @@ class ConfigFixedText(ConfigText):
                pass
 
 class DVDTitle:
-       def __init__(self):
+       def __init__(self, project):
                self.properties = ConfigSubsection()
                self.properties.menutitle = ConfigText(fixed_size = False, visible_width = 80)
                self.properties.menusubtitle = ConfigText(fixed_size = False, visible_width = 80)
-               self.DVBname = _("Title")
-               self.DVBdescr = _("Description")
-               self.DVBchannel = _("Channel")
                self.properties.aspect = ConfigSelection(choices = [("4:3", _("4:3")), ("16:9", _("16:9"))])
                self.properties.widescreen = ConfigSelection(choices = [("nopanscan", "nopanscan"), ("noletterbox", "noletterbox")])
                self.properties.autochapter = ConfigInteger(default = 0, limits = (0, 60))
                self.properties.audiotracks = ConfigSubList()
+               self.DVBname = _("Title")
+               self.DVBdescr = _("Description")
+               self.DVBchannel = _("Channel")
                self.cuesheet = [ ]
                self.source = None
                self.filesize = 0
@@ -27,6 +28,8 @@ class DVDTitle:
                self.chaptermarks = [ ]
                self.timeCreate = None
                self.VideoType = -1
+               self.project = project
+               self.length = 0
 
        def addService(self, service):
                from os import path
@@ -36,7 +39,7 @@ class DVDTitle:
                self.source = service
                serviceHandler = eServiceCenter.getInstance()
                info = serviceHandler.info(service)
-               sDescr = info and " " + info.getInfoString(service, iServiceInformation.sDescription) or ""
+               sDescr = info and info.getInfoString(service, iServiceInformation.sDescription) or ""
                self.DVBdescr = sDescr
                sTimeCreate = info.getInfo(service, iServiceInformation.sTimeCreate)
                if sTimeCreate > 1:
@@ -49,9 +52,20 @@ class DVDTitle:
                self.filesize = path.getsize(self.inputfile)
                self.estimatedDiskspace = self.filesize
                self.length = info.getLength(service)
+                                               
+       def addFile(self, filename):
+               from enigma import eServiceReference
+               ref = eServiceReference(1, 0, filename)
+               self.addService(ref)
+               self.project.session.openWithCallback(self.titleEditDone, TitleCutter.CutlistReader, self)
+       
+       def titleEditDone(self, cutlist):
+               self.initDVDmenuText(len(self.project.titles))
+               self.cuesheet = cutlist
+               self.produceFinalCuesheet()
 
-       def initDVDmenuText(self, project, track):
-               s = project.menutemplate.settings
+       def initDVDmenuText(self, track):
+               s = self.project.menutemplate.settings
                self.properties.menutitle.setValue(self.formatDVDmenuText(s.titleformat.getValue(), track))
                self.properties.menusubtitle.setValue(self.formatDVDmenuText(s.subtitleformat.getValue(), track))
 
index 44075d6..b64541b 100644 (file)
@@ -5,7 +5,7 @@ from Screens.MessageBox import MessageBox
 class png2yuvTask(Task):
        def __init__(self, job, inputfile, outputfile):
                Task.__init__(self, job, "Creating menu video")
-               self.setTool("/usr/bin/png2yuv")
+               self.setTool("png2yuv")
                self.args += ["-n1", "-Ip", "-f25", "-j", inputfile]
                self.dumpFile = outputfile
                self.weighting = 15
@@ -21,7 +21,7 @@ class png2yuvTask(Task):
 class mpeg2encTask(Task):
        def __init__(self, job, inputfile, outputfile):
                Task.__init__(self, job, "Encoding menu video")
-               self.setTool("/usr/bin/mpeg2enc")
+               self.setTool("mpeg2enc")
                self.args += ["-f8", "-np", "-a2", "-o", outputfile]
                self.inputFile = inputfile
                self.weighting = 25
@@ -36,7 +36,7 @@ class mpeg2encTask(Task):
 class spumuxTask(Task):
        def __init__(self, job, xmlfile, inputfile, outputfile):
                Task.__init__(self, job, "Muxing buttons into menu")
-               self.setTool("/usr/bin/spumux")
+               self.setTool("spumux")
                self.args += [xmlfile]
                self.inputFile = inputfile
                self.dumpFile = outputfile
@@ -54,7 +54,7 @@ class spumuxTask(Task):
 class MakeFifoNode(Task):
        def __init__(self, job, number):
                Task.__init__(self, job, "Make FIFO nodes")
-               self.setTool("/bin/mknod")
+               self.setTool("mknod")
                nodename = self.job.workspace + "/dvd_title_%d" % number + ".mpg"
                self.args += [nodename, "p"]
                self.weighting = 10
@@ -62,14 +62,14 @@ class MakeFifoNode(Task):
 class LinkTS(Task):
        def __init__(self, job, sourcefile, link_name):
                Task.__init__(self, job, "Creating symlink for source titles")
-               self.setTool("/bin/ln")
+               self.setTool("ln")
                self.args += ["-s", sourcefile, link_name]
                self.weighting = 10
 
 class CopyMeta(Task):
        def __init__(self, job, sourcefile):
                Task.__init__(self, job, "Copy title meta files")
-               self.setTool("/bin/cp")
+               self.setTool("cp")
                from os import listdir
                path, filename = sourcefile.rstrip("/").rsplit("/",1)
                tsfiles = listdir(path)
@@ -84,7 +84,7 @@ class DemuxTask(Task):
                Task.__init__(self, job, "Demux video into ES")
                title = job.project.titles[job.i]
                self.global_preconditions.append(DiskspacePrecondition(title.estimatedDiskspace))
-               self.setTool("/usr/bin/projectx")
+               self.setTool("projectx")
                self.args += [inputfile, "-demux", "-out", self.job.workspace ]
                self.end = 300
                self.prog_state = 0
@@ -194,7 +194,7 @@ class MplexTask(Task):
                self.weighting = weighting
                self.demux_task = demux_task
                self.postconditions.append(MplexTaskPostcondition())
-               self.setTool("/usr/bin/mplex")
+               self.setTool("mplex")
                self.args += ["-f8", "-o", outputfile, "-v1"]
                if inputfiles:
                        self.args += inputfiles
@@ -222,7 +222,7 @@ class RemoveESFiles(Task):
        def __init__(self, job, demux_task):
                Task.__init__(self, job, "Remove temp. files")
                self.demux_task = demux_task
-               self.setTool("/bin/rm")
+               self.setTool("rm")
                self.weighting = 10
 
        def prepare(self):
@@ -234,7 +234,7 @@ class DVDAuthorTask(Task):
        def __init__(self, job):
                Task.__init__(self, job, "Authoring DVD")
                self.weighting = 20
-               self.setTool("/usr/bin/dvdauthor")
+               self.setTool("dvdauthor")
                self.CWD = self.job.workspace
                self.args += ["-x", self.job.workspace+"/dvdauthor.xml"]
                self.menupreview = job.menupreview
@@ -255,7 +255,7 @@ class DVDAuthorTask(Task):
 class DVDAuthorFinalTask(Task):
        def __init__(self, job):
                Task.__init__(self, job, "dvdauthor finalize")
-               self.setTool("/usr/bin/dvdauthor")
+               self.setTool("dvdauthor")
                self.args += ["-T", "-o", self.job.workspace + "/dvd"]
 
 class WaitForResidentTasks(Task):
@@ -264,6 +264,7 @@ class WaitForResidentTasks(Task):
                
        def run(self, callback):
                print "waiting for %d resident task(s) %s to finish..." % (len(self.job.resident_tasks),str(self.job.resident_tasks))
+               self.callback = callback
                if self.job.resident_tasks == 0:
                        callback(self, [])
 
@@ -291,7 +292,7 @@ class BurnTaskPostcondition(Condition):
 
 class BurnTask(Task):
        ERROR_NOTWRITEABLE, ERROR_LOAD, ERROR_SIZE, ERROR_WRITE_FAILED, ERROR_DVDROM, ERROR_ISOFS, ERROR_FILETOOLARGE, ERROR_ISOTOOLARGE, ERROR_MINUSRWBUG, ERROR_UNKNOWN = range(10)
-       def __init__(self, job, extra_args=[], tool="/bin/growisofs"):
+       def __init__(self, job, extra_args=[], tool="growisofs"):
                Task.__init__(self, job, job.name)
                self.weighting = 500
                self.end = 120 # 100 for writing, 10 for buffer flush, 10 for closing disc
@@ -356,7 +357,7 @@ class BurnTask(Task):
 class RemoveDVDFolder(Task):
        def __init__(self, job):
                Task.__init__(self, job, "Remove temp. files")
-               self.setTool("/bin/rm")
+               self.setTool("rm")
                self.args += ["-rf", self.job.workspace]
                self.weighting = 10
 
@@ -881,13 +882,13 @@ class DVDJob(Job):
                        volName = self.project.settings.name.getValue()
                        if output == "dvd":
                                self.name = _("Burn DVD")
-                               tool = "/bin/growisofs"
+                               tool = "growisofs"
                                burnargs = [ "-Z", "/dev/" + harddiskmanager.getCD(), "-dvd-compat" ]
                                if self.project.size/(1024*1024) > self.project.MAX_SL:
                                        burnargs += [ "-use-the-force-luke=4gms", "-speed=1", "-R" ]
                        elif output == "iso":
                                self.name = _("Create DVD-ISO")
-                               tool = "/usr/bin/mkisofs"
+                               tool = "genisoimage"
                                isopathfile = getISOfilename(self.project.settings.isopath.getValue(), volName)
                                burnargs = [ "-o", isopathfile ]
                        burnargs += [ "-dvd-video", "-publisher", "Dreambox", "-V", volName, self.workspace + "/dvd" ]
@@ -919,14 +920,14 @@ class DVDdataJob(Job):
 
                output = self.project.settings.output.getValue()
                volName = self.project.settings.name.getValue()
-               tool = "/bin/growisofs"
+               tool = "growisofs"
                if output == "dvd":
                        self.name = _("Burn DVD")
                        burnargs = [ "-Z", "/dev/" + harddiskmanager.getCD(), "-dvd-compat" ]
                        if self.project.size/(1024*1024) > self.project.MAX_SL:
                                burnargs += [ "-use-the-force-luke=4gms", "-speed=1", "-R" ]
                elif output == "iso":
-                       tool = "/usr/bin/mkisofs"
+                       tool = "genisoimage"
                        self.name = _("Create DVD-ISO")
                        isopathfile = getISOfilename(self.project.settings.isopath.getValue(), volName)
                        burnargs = [ "-o", isopathfile ]
@@ -958,5 +959,5 @@ class DVDisoJob(Job):
                        if getSize(imagepath)/(1024*1024) > self.project.MAX_SL:
                                burnargs += [ "-use-the-force-luke=4gms", "-speed=1", "-R" ]
                        burnargs += [ "-dvd-video", "-publisher", "Dreambox", "-V", volName, imagepath ]
-               tool = "/bin/growisofs"
+               tool = "growisofs"
                BurnTask(self, burnargs, tool)
index c4289cb..39d7277 100755 (executable)
@@ -8,7 +8,6 @@ from Components.Sources.List import List
 from Components.Sources.StaticText import StaticText
 from Components.Sources.Progress import Progress
 from Components.FileList import FileList
-from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_LEFT
 from Tools.Directories import fileExists, resolveFilename, SCOPE_PLUGINS, SCOPE_FONTS, SCOPE_HDD
 from Components.config import config, getConfigListEntry
 from Components.ConfigList import ConfigListScreen
@@ -93,10 +92,10 @@ class ProjectSettings(Screen,ConfigListScreen):
                        <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="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="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
+                       <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+                       <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
+                       <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
                        <widget name="config" position="5,50" size="550,276" scrollbarMode="showOnDemand" />
                        <ePixmap pixmap="skin_default/div-h.png" position="0,350" zPosition="1" size="560,2" />
                        <widget source="info" render="Label" position="10,360" size="550,80" font="Regular;18" halign="center" valign="center" />
@@ -234,11 +233,19 @@ class ProjectSettings(Screen,ConfigListScreen):
                        else:
                                self.session.open(MessageBox,self.project.error,MessageBox.TYPE_ERROR)
                elif scope == "project":
-                       if self.project.loadProject(path):
-                               configRef.setValue(path)
-                               self.initConfigList()
+                       self.path = path
+                       print "len(self.titles)", len(self.project.titles)
+                       if len(self.project.titles):
+                               self.session.openWithCallback(self.askLoadCB, MessageBox,text = _("Your current collection will get lost!") + "\n" + _("Do you want to restore your settings?"), type = MessageBox.TYPE_YESNO)
                        else:
-                               self.session.open(MessageBox,self.project.error,MessageBox.TYPE_ERROR)
+                               self.askLoadCB(True)
                elif scope:
                        configRef.setValue(path)
                        self.initConfigList()
+
+       def askLoadCB(self, answer):
+               if answer is not None and answer:
+                       if self.project.loadProject(self.path):
+                               self.initConfigList()
+                       else:
+                               self.session.open(MessageBox,self.project.error,MessageBox.TYPE_ERROR)
\ No newline at end of file
index 61152e8..a52fad9 100644 (file)
@@ -52,13 +52,35 @@ class TitleCutter(CutListEditor):
                        CutListEditor.grabFrame(self)
 
        def exit(self):
+               if self.t.VideoType == -1:
+                       self.getPMTInfo()
                self.checkAndGrabThumb()
                self.session.nav.stopService()
                self.close(self.cut_list[:])
 
 class CutlistReader(TitleCutter):
+       skin = """
+               <screen position="0,0" size="720,576">
+               <eLabel position="0,0" size="720,576" zPosition="1" backgroundColor="#000000" />
+               <widget name="Video" position="0,0" size="100,75" />
+               <widget name="SeekState" position="0,0" />
+               <widget source="cutlist" position="0,0" render="Listbox" >
+                       <convert type="TemplatedMultiContent">
+                               {"template": [
+                                               MultiContentEntryText(text = 1),
+                                               MultiContentEntryText(text = 2)
+                                       ],
+                                "fonts": [gFont("Regular", 18)],
+                                "itemHeight": 20
+                               }
+                       </convert>
+               </widget>
+               <widget name="Timeline" position="0,0" />
+       </screen>"""
+
        def __init__(self, session, t):
                TitleCutter.__init__(self, session, t)
+               self.skin = CutlistReader.skin
 
        def getPMTInfo(self):
                TitleCutter.getPMTInfo(self)
index 928a8b8..ac60906 100755 (executable)
@@ -10,27 +10,47 @@ 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 Components.Label import MultiColorLabel
+from enigma import gFont, RT_HALIGN_LEFT, RT_HALIGN_RIGHT
 from Tools.Directories import resolveFilename, SCOPE_PLUGINS
 
 class TitleList(Screen, HelpableScreen):
        skin = """
-               <screen name="TitleList" position="center,center" size="560,445" title="DVD Tool" >
+               <screen name="TitleList" position="center,center" size="560,470" title="DVD Tool" >
                        <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="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="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
+                       <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+                       <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
+                       <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
                        <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" />
+                       <widget source="error_label" render="Label" position="10,48" size="540,296" zPosition="3" font="Regular;20" transparent="1" />
+                       <widget source="titles" render="Listbox" scrollbarMode="showOnDemand" position="10,86" size="546,296" zPosition="3" transparent="1" >
+                               <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 = (418, 6), size = (120, 20), font = 1, flags = RT_HALIGN_RIGHT, text = 3), # index 3 channel,
+                                                       MultiContentEntryText(pos = (326, 20), size = (154, 17), font = 1, flags = RT_HALIGN_RIGHT, text = 4), # index 4 begin time,
+                                                       MultiContentEntryText(pos = (480, 20), size = (58, 20), font = 1, flags = RT_HALIGN_RIGHT, text = 5), # index 5 duration,
+                                               ],
+                                       "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" />
+                       <ePixmap pixmap="skin_default/div-h.png" position="0,390" zPosition="10" size="560,2" />
+                       <ePixmap pixmap="skin_default/buttons/key_menu.png" position="10,394" size="35,25" alphatest="on" />
+                       <widget source="hint" render="Label" position="50,396" size="540,22" font="Regular;18" halign="left" />
+                       <widget name="medium_label"  position="10,420" size="540,22" font="Regular;18" halign="left" foregroundColors="#FFFFFF,#FFFF00,#FF0000" />
+                       <widget source="space_bar_single" render="Progress" position="10,446" size="270,24" borderWidth="1" zPosition="2" backgroundColor="#254f7497" />
+                       <widget source="space_label_single" render="Label" position="10,449" size="270,22" zPosition="3" font="Regular;18" halign="center" transparent="1" foregroundColor="#000000" />
+                       <widget source="space_bar_dual" render="Progress" position="10,446" size="540,24" borderWidth="1" backgroundColor="#254f7497" />
+                       <widget source="space_label_dual" render="Label" position="10,449" size="540,22" zPosition="2" font="Regular;18" halign="center" transparent="1" foregroundColor="#000000" />
+                       
                </screen>"""
 
        def __init__(self, session, project = None):
@@ -63,17 +83,19 @@ class TitleList(Screen, HelpableScreen):
 
                self["title_label"] = StaticText()
                self["error_label"] = StaticText()
-               self["space_label"] = StaticText()
-               self["space_bar"] = Progress()
-
+               self["space_label_single"] = StaticText()
+               self["space_label_dual"] = StaticText()
+               self["hint"] = StaticText(_("Advanced Options"))
+               self["medium_label"] = MultiColorLabel()
+               self["space_bar_single"] = Progress()
+               self["space_bar_dual"] = Progress()
+
+               self["titles"] = List([])
+               self.previous_size = 0
                if project is not None:
                        self.project = project
                else:
                        self.newProject()
-
-               self["titles"] = List(list = [ ], enableWrapAround = True, item_height=30, fonts = [gFont("Regular", 20)])
-               self.updateTitleList()
-               self.previous_size = 0
                self.onLayoutFinish.append(self.layoutFinished)
 
        def layoutFinished(self):
@@ -95,15 +117,16 @@ class TitleList(Screen, HelpableScreen):
                        j = self.backgroundJob
                        menu.append(("%s: %s (%d%%)" % (j.getStatustext(), j.name, int(100*j.progress/float(j.end))), self.showBackgroundJob))
                menu.append((_("DVD media toolbox"), self.toolbox))
-               menu.append((_("Preview menu"), self.previewMenu))
                if self.project.settings.output.getValue() == "dvd":
                        if len(self["titles"].list):
                                menu.append((_("Burn DVD"), self.burnProject))
                elif self.project.settings.output.getValue() == "iso":
                        menu.append((_("Create DVD-ISO"), self.burnProject))
                menu.append((_("Burn existing image to DVD"), self.selectImage))
-               menu.append((_("Edit chapters of current title"), self.editTitle))
-               menu.append((_("Reset and renumerate title names"), self.resetTitles))
+               if len(self["titles"].list):
+                       menu.append((_("Preview menu"), self.previewMenu))
+                       menu.append((_("Edit chapters of current title"), self.editTitle))
+                       menu.append((_("Reset and renumerate title names"), self.resetTitles))
                menu.append((_("Exit"), self.leave))
                self.session.openWithCallback(self.menuCallback, ChoiceBox, title="", list=menu)
 
@@ -137,9 +160,9 @@ class TitleList(Screen, HelpableScreen):
                                <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="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+                               <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+                               <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
                                <widget name="waitingtext" position="0,45" size="560,395" zPosition="4" font="Regular;22" halign="center" valign="center" />
                                <widget name="list" position="5,40" size="550,375" zPosition="2" scrollbarMode="showOnDemand" />
                                <widget name="DescriptionBorder" pixmap="skin_default/border_eventinfo.png" position="0,316" zPosition="1" size="560,103" transparent="1" alphatest="on" />
@@ -185,9 +208,12 @@ class TitleList(Screen, HelpableScreen):
                                        self.close(current)
                self.session.openWithCallback(self.selectedSource, DVDMovieSelection)
 
-       def selectedSource(self, source):
+       def selectedSource(self, source = None):
                if source is None:
                        return None
+               if not source.getPath().endswith(".ts"):
+                       self.session.open(MessageBox,text = _("You can only burn Dreambox recordings!"), type = MessageBox.TYPE_ERROR)
+                       return None
                t = self.project.addService(source)
                try:
                        editor = source.edit
@@ -213,7 +239,7 @@ class TitleList(Screen, HelpableScreen):
        def settingsCB(self, update=True):
                if not update:
                        return
-               self["title_label"].text = _("Table of content for collection") + " \"" + self.project.settings.name.getValue() + "\":"
+               self.updateTitleList()
 
        def loadTemplate(self):
                filename = resolveFilename(SCOPE_PLUGINS)+"Extensions/DVDBurn/DreamboxDVD.ddvdp.xml"
@@ -256,20 +282,21 @@ 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")
+                       self["title_label"].text = _("Table of content for collection") + " \"" + self.project.settings.name.getValue() + "\":"
                else:
                        self["key_red"].text = ""
                        self["key_yellow"].text = ""
+                       self["title_label"].text = _("Please add titles to the compilation")
 
        def updateSize(self):
                size = self.project.size/(1024*1024)
@@ -278,20 +305,32 @@ class TitleList(Screen, HelpableScreen):
                print "updateSize:", size, "MAX_DL:", MAX_DL, "MAX_SL:", MAX_SL
                if size > MAX_DL:
                        percent = 100 * size / float(MAX_DL)
-                       self["space_label"].text = "%d MB - " % size + _("exceeds dual layer medium!") + " (%.2f%% " % (100-percent) + _("free") + ")"
-                       self["space_bar"].value = int(percent)
+                       self["space_label_dual"].text = "%d MB (%.2f%%)" % (size, percent)
+                       self["space_bar_dual"].value = int(percent)
+                       self["space_bar_single"].value = 100
+                       self["space_label_single"].text = ""
+                       self["medium_label"].setText(_("exceeds dual layer medium!"))
+                       self["medium_label"].setForegroundColorNum(2)
                        if self.previous_size < MAX_DL:
                                self.session.open(MessageBox,text = _("exceeds dual layer medium!"), type = MessageBox.TYPE_ERROR)
                elif size > MAX_SL:
                        percent = 100 * size / float(MAX_DL)
-                       self["space_label"].text = "%d MB  " % size + _("of a DUAL layer medium used.") + " (%.2f%% " % (100-percent) + _("free") + ")"
-                       self["space_bar"].value = int(percent)
+                       self["space_label_dual"].text = "%d MB (%.2f%%)" % (size, percent)
+                       self["space_bar_dual"].value = int(percent)
+                       self["space_bar_single"].value = 100
+                       self["space_label_single"].text = ""
+                       self["medium_label"].setText(_("required medium type:") + " " + _("DUAL LAYER DVD") + ", %d MB " % (MAX_DL - size) + _("free"))
+                       self["medium_label"].setForegroundColorNum(1)
                        if self.previous_size < MAX_SL:
-                               self.session.open(MessageBox,text = _("Your collection exceeds the size of a single layer medium, you will need a blank dual layer DVD!"), type = MessageBox.TYPE_INFO)
+                               self.session.open(MessageBox, text = _("Your collection exceeds the size of a single layer medium, you will need a blank dual layer DVD!"), timeout = 10, type = MessageBox.TYPE_INFO)
                elif size < MAX_SL:
                        percent = 100 * size / float(MAX_SL)
-                       self["space_label"].text = "%d MB " % size + _("of a SINGLE layer medium used.") + " (%.2f%% " % (100-percent) + _("free") + ")"
-                       self["space_bar"].value = int(percent)
+                       self["space_label_single"].text = "%d MB (%.2f%%)" % (size, percent)
+                       self["space_bar_single"].value = int(percent)
+                       self["space_bar_dual"].value = 0
+                       self["space_label_dual"].text = ""
+                       self["medium_label"].setText(_("required medium type:") + " " + _("SINGLE LAYER DVD") + ", %d MB " % (MAX_SL - size) + _("free"))
+                       self["medium_label"].setForegroundColorNum(0)
                self.previous_size = size
 
        def getCurrentTitle(self):
@@ -309,9 +348,7 @@ class TitleList(Screen, HelpableScreen):
 
        def titleEditDone(self, cutlist):
                t = self.current_edit_title
-               t.initDVDmenuText(self.project,len(self.project.titles))
-               t.cuesheet = cutlist
-               t.produceFinalCuesheet()
+               t.titleEditDone(cutlist)
                if t.VideoType != 0:
                        self.session.openWithCallback(self.DVDformatCB,MessageBox,text = _("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?"), type = MessageBox.TYPE_YESNO)
                else:
@@ -321,7 +358,7 @@ class TitleList(Screen, HelpableScreen):
                count = 0
                for title in self.project.titles:
                        count += 1
-                       title.initDVDmenuText(self.project,count)
+                       title.initDVDmenuText(count)
                self.updateTitleList()
 
        def DVDformatCB(self, answer):
@@ -332,5 +369,13 @@ class TitleList(Screen, HelpableScreen):
                else:
                        self.removeTitle(t)
 
-       def leave(self):
-               self.close()
+       def leave(self, close = False):
+               if not len(self["titles"].list) or close:
+                       self.close()
+               else:
+                       self.session.openWithCallback(self.exitCB, MessageBox,text = _("Your current collection will get lost!") + "\n" + _("Do you really want to exit?"), type = MessageBox.TYPE_YESNO)
+
+       def exitCB(self, answer):
+               print "exitCB", answer
+               if answer is not None and answer:
+                       self.close()
\ No newline at end of file
index 11601cc..956f054 100755 (executable)
@@ -9,7 +9,7 @@ from Components.Sources.StaticText import StaticText
 from Components.Sources.Progress import Progress
 from Components.FileList import FileList
 from Components.Pixmap import Pixmap
-from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_LEFT, ePicLoad
+from enigma import ePicLoad
 from Tools.Directories import fileExists, resolveFilename, SCOPE_PLUGINS, SCOPE_FONTS, SCOPE_HDD
 from Components.config import config, getConfigListEntry, ConfigInteger, ConfigSubsection, ConfigSelection
 from Components.ConfigList import ConfigListScreen
@@ -21,10 +21,12 @@ class TitleProperties(Screen,ConfigListScreen):
                <screen name="TitleProperties" position="center,center" size="560,445" title="Properties of current title" >
                        <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="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_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
+                       <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+                       <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
+                       <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
                        <widget source="serviceinfo" render="Label" position="10,46" size="350,144" font="Regular;18" />
                        <widget name="thumbnail" position="370,46" size="180,144" alphatest="on" />
                        <widget name="config" position="10,206" size="540,228" scrollbarMode="showOnDemand" />
@@ -38,7 +40,8 @@ class TitleProperties(Screen,ConfigListScreen):
 
                self["key_red"] = StaticText(_("Cancel"))
                self["key_green"] = StaticText(_("OK"))
-               self["key_blue"] = StaticText(_("Edit Title"))
+               self["key_yellow"] = StaticText(_("Edit Title"))
+               self["key_blue"] = StaticText()
                self["serviceinfo"] = StaticText()
 
                self["thumbnail"] = Pixmap()
@@ -57,7 +60,7 @@ class TitleProperties(Screen,ConfigListScreen):
                {
                    "green": self.exit,
                    "red": self.cancel,
-                   "blue": self.editTitle,
+                   "yellow": self.editTitle,
                    "cancel": self.cancel,
                    "ok": self.ok,
                }, -2)
@@ -164,7 +167,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 1899cb7..0b3be7d 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" />
index 45f438d..bd856b4 100644 (file)
@@ -12,6 +12,6 @@ def main_add(session, service, **kwargs):
        dvdburn.selectedSource(service)
 
 def Plugins(**kwargs):
-       descr = _("Burn to DVD...")
+       descr = _("Burn to DVD")
        return [PluginDescriptor(name="DVD Burn", description=descr, where = PluginDescriptor.WHERE_MOVIELIST, fnc=main_add, icon="dvdburn.png"),
                PluginDescriptor(name="DVD Burn", description=descr, where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main, icon="dvdburn.png") ]
index d1a995c..71ea714 100644 (file)
@@ -4,7 +4,6 @@ SUBDIRS = src meta
 installdir = $(pkglibdir)/python/Plugins/Extensions/DVDPlayer
 
 install_PYTHON = \
-       src/servicedvd.so \
        __init__.py \
        plugin.py \
        keymap.xml \
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 e895a14..e092e82 100755 (executable)
@@ -93,7 +93,7 @@ class DVDSummary(Screen):
                <widget source="session.CurrentService" render="Label" position="5,4" size="120,28" font="Regular;12" transparent="1" >
                        <convert type="ServiceName">Name</convert>
                </widget>
-               <widget name="DVDPlayer" position="5,30" size="66,16" font="Regular;12" transparent="1" />
+               <widget name="DVDPlayer" position="5,30" size="66,16" font="Regular;11" transparent="1" />
                <widget name="Chapter" position="72,30" size="54,16" font="Regular;12" transparent="1" halign="right" />
                <widget source="session.CurrentService" render="Label" position="66,46" size="60,18" font="Regular;16" transparent="1" halign="right" >
                        <convert type="ServicePosition">Position</convert>
@@ -736,6 +736,7 @@ def filescan(**kwargs):
                        paths_to_scan =
                                [
                                        ScanPath(path = "video_ts", with_subdirs = False),
+                                       ScanPath(path = "VIDEO_TS", with_subdirs = False),
                                        ScanPath(path = "", with_subdirs = False),
                                ],
                        name = "DVD",
index 774871e..27c751c 100644 (file)
@@ -2,6 +2,11 @@ OBJS := servicedvd.cpp
 
 -include $(OBJS:.cpp=.d)
 
+installdir = $(pkglibdir)/python/Plugins/Extensions/DVDPlayer
+
+install_PYTHON = \
+       servicedvd.so
+
 servicedvd.so:
        $(CXX) $(CPPFLAGS) -MD $(CXXFLAGS) $(DEFS) -I$(top_srcdir)/include \
        -Wall -W $(OBJS) -shared -fPIC -Wl,-soname,servicedvd.so -o servicedvd.so \
index 94f2ee3..2ba5392 100644 (file)
@@ -85,12 +85,9 @@ RESULT eServiceFactoryDVD::offlineOperations(const eServiceReference &, ePtr<iSe
 DEFINE_REF(eServiceDVD);
 
 eServiceDVD::eServiceDVD(eServiceReference ref):
-       m_ref(ref),
-       m_ddvdconfig(ddvd_create()),
-       m_subtitle_widget(0),
-       m_state(stIdle),
-       m_current_trick(0),
-       m_pump(eApp, 1)
+       m_ref(ref), m_ddvdconfig(ddvd_create()), m_subtitle_widget(0), m_state(stIdle),
+       m_current_trick(0), m_pump(eApp, 1), m_width(-1), m_height(-1),
+       m_aspect(-1), m_framerate(-1), m_progressive(-1)
 {
        int aspect = DDVD_16_9;
        int policy = DDVD_PAN_SCAN;
@@ -309,6 +306,32 @@ void eServiceDVD::gotMessage(int /*what*/)
                        m_event(this, evSeekableStatusChanged);
                        m_event(this, evUser+12);
                        break;
+#ifdef DDVD_SUPPORTS_PICTURE_INFO
+               case DDVD_SIZE_CHANGED:
+               {
+                       int changed = m_width != -1 && m_height != -1 && m_aspect != -1;
+                       ddvd_get_last_size(m_ddvdconfig, &m_width, &m_height, &m_aspect);
+                       if (changed)
+                               m_event((iPlayableService*)this, evVideoSizeChanged);
+                       break;
+               }
+               case DDVD_PROGRESSIVE_CHANGED:
+               {
+                       int changed = m_progressive != -1;
+                       ddvd_get_last_progressive(m_ddvdconfig, &m_progressive);
+                       if (changed)
+                               m_event((iPlayableService*)this, evVideoProgressiveChanged);
+                       break;
+               }
+               case DDVD_FRAMERATE_CHANGED:
+               {
+                       int changed = m_framerate != -1;
+                       ddvd_get_last_framerate(m_ddvdconfig, &m_framerate);
+                       if (changed)
+                               m_event((iPlayableService*)this, evVideoFramerateChanged);
+                       break;
+               }
+#endif
                default:
                        break;
        }
@@ -500,6 +523,18 @@ int eServiceDVD::getInfo(int w)
                case sUser+7:
                case sUser+8:
                        return resIsPyObject;
+#ifdef DDVD_SUPPORTS_PICTURE_INFO
+               case sVideoWidth:
+                       return m_width;
+               case sVideoHeight:
+                       return m_height;
+               case sAspect:
+                       return m_aspect;
+               case sProgressive:
+                       return m_progressive;
+               case sFrameRate:
+                       return m_framerate;
+#endif
                default:
                        return resNA;
        }
@@ -696,7 +731,7 @@ RESULT eServiceDVD::setTrickmode(int /*trick*/)
 
 RESULT eServiceDVD::isCurrentlySeekable()
 {
-       return m_state == stRunning;
+       return m_state == stRunning ? 3 : 0;
 }
 
 RESULT eServiceDVD::keyPressed(int key)
index c730d50..c751a39 100644 (file)
@@ -127,6 +127,8 @@ private:
 
        void loadCuesheet();
        void saveCuesheet();
+
+       int m_width, m_height, m_aspect, m_framerate, m_progressive;
 };
 
 #endif
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 e2aa0e3..d80b8c2 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 808d852..2af2c39 100644 (file)
@@ -3,7 +3,6 @@ SUBDIRS = src meta
 installdir = $(pkglibdir)/python/Plugins/Extensions/SocketMMI
 
 install_PYTHON = \
-       src/socketmmi.so \
        __init__.py \
        plugin.py \
        SocketMMI.py
index ad97d67..8e80e18 100644 (file)
@@ -2,6 +2,11 @@ OBJS = socket_mmi.cpp
 
 -include $(OBJS:.cpp=.d)
 
+installdir = $(pkglibdir)/python/Plugins/Extensions/SocketMMI
+
+install_PYTHON = \
+       socketmmi.so
+
 socketmmi.so: socket_mmi.cpp socket_mmi.h
        $(CXX) $(CPPFLAGS) -MD $(CXXFLAGS) $(DEFS) -I$(top_srcdir)/include \
        -Wall -W $(OBJS) -shared -fPIC -Wl,-soname,socketmmi.so -o socketmmi.so \
index d7fc689..5a676cd 100755 (executable)
@@ -52,6 +52,15 @@ 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 94be474..d9d96bc 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 10ccc73..99add3d 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" />
index 6667e3e..f8677bb 100755 (executable)
@@ -122,7 +122,7 @@ def selSetup(menuid, **kwargs):
        if menuid != "system":
                return [ ]
 
-       return [(_("Cleanup Wizard settings") + "...", openconfig, "cleanup_config", 71)]
+       return [(_("Cleanup Wizard settings"), openconfig, "cleanup_config", 71)]
 
 def Plugins(**kwargs):
        list = []
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 b619c8c..aed728d 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" />
index cf998a7..2563981 100755 (executable)
@@ -391,7 +391,7 @@ def selSetup(menuid, **kwargs):
        if menuid != "system":
                return [ ]
 
-       return [(_("Crashlog settings") + "...", openconfig, "crashlog_config", 70)]
+       return [(_("Crashlog settings"), openconfig, "crashlog_config", 70)]
 
 
 def Plugins(**kwargs):
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 8405ed7..9b0a2ed 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 a8b187d..9cc538f 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 686bded..0633e7c 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 4d36115..a8b34ac 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,27 +46,115 @@ 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):
+       def __init__(self, session, interface = None):
                self.xmlfile = resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml")
                WizardLanguage.__init__(self, session, showSteps = False, showStepSlider = False)
                Rc.__init__(self)
                self.session = session
                self["wizard"] = Pixmap()
-               
+               self["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
+               if interface is not None:
+                       self.selectedInterface = interface
+               else:
+                       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
+               self.checkOldInterfaceState()
+               pass
+
+       def getInstalledInterfaceCount(self):
+               self.rescanTimer.stop()
+               self.Adapterlist = iNetwork.getAdapterList()
+               self.InstalledInterfaceCount = len(self.Adapterlist)
+               if self.Adapterlist is not None:
+                       if self.InstalledInterfaceCount == 1 and self.selectedInterface is None:
+                                       self.selectedInterface = self.Adapterlist[0]
+               self.originalAth0State = iNetwork.getAdapterAttribute('ath0', 'up')
+               self.originalEth0State = iNetwork.getAdapterAttribute('eth0', 'up')
+               self.originalWlan0State = iNetwork.getAdapterAttribute('wlan0', 'up')
+
+       def selectInterface(self):
+               self.InterfaceState = None
+               if self.selectedInterface is None and self.InstalledInterfaceCount <= 1:
+                       if self.selectedInterface == 'eth0':
+                               self.NextStep = 'nwconfig'
+                       else:
+                               self.NextStep = 'scanwlan'
+                       self.checkInterface(self.selectedInterface)
+               elif self.selectedInterface is not None and self.InstalledInterfaceCount <= 1:
+                       if self.selectedInterface == 'eth0':
+                               self.NextStep = 'nwconfig'
+                       else:
+                               self.NextStep = 'scanwlan'
+                       self.checkInterface(self.selectedInterface)
+               elif self.selectedInterface is None and self.InstalledInterfaceCount > 1:
+                       self.NextStep = 'selectinterface'
+                       self.currStep = self.getStepWithID(self.NextStep)
+                       self.afterAsyncCode()
+               elif self.selectedInterface is not None and self.InstalledInterfaceCount > 1:
+                       if self.selectedInterface == 'eth0':
+                               self.NextStep = 'nwconfig'
+                       else:
+                               self.NextStep = 'scanwlan'
+                       self.checkInterface(self.selectedInterface)
+               else:
+                       self.NextStep = 'selectinterface'
+                       self.currStep = self.getStepWithID(self.NextStep)
+                       self.afterAsyncCode()                   
+
+       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 +175,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':
-                               if iface in iNetwork.configuredNetworkAdapters and len(iNetwork.configuredNetworkAdapters) == 1:
-                                       if iNetwork.getAdapterAttribute(iface, 'up') is True:
-                                               self.isInterfaceUp = True
-                                       else:
-                                               self.isInterfaceUp = False
-                                       self.resetfinishedCB(False)
-                               else:
-                                       iNetwork.resetNetworkConfig('lan',self.checkInterfaceCB)
-                                       self.myref = self.session.openWithCallback(self.resetfinishedCB, MessageBox, _("Please wait while we prepare your network interfaces..."), type = MessageBox.TYPE_INFO, enable_input = False)
-                       elif iface == 'wlan0':
+                               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('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 +206,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 +250,147 @@ 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" + str(status[self.selectedInterface]["acesspoint"]) + "\n"
+                                       text3 = _('SSID:') + "\t" + str(status[self.selectedInterface]["essid"]) + "\n"
+                                       text4 = _('Link Quality:') + "\t" + str(status[self.selectedInterface]["quality"])+"%" + "\n"
+                                       text5 = _('Signal Strength:') + "\t" + str(status[self.selectedInterface]["signal"]) + "\n"
+                                       text6 = _('Bitrate:') + "\t" + str(status[self.selectedInterface]["bitrate"]) + "\n"
+                                       text7 = _('Encryption:') + " " + str(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
+                                       if str(status[self.selectedInterface]["acesspoint"]) == "Not-Associated":
+                                               self.InterfaceState = False
+                                       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
-               else:   
-                       self.w = Wlan(self.selectedInterface)
-                       aps = self.w.getNetworkList()
-                       if aps is not None:
-                               print "[NetworkWizard.py] got Accespoints!"
-                               for ap in aps:
-                                       a = aps[ap]
-                                       if a['active']:
-                                               if a['essid'] != "":
-                                                       #a['essid'] = a['bssid']
-                                                       list.append( (a['essid'], a['essid']) )
-                                                       self.WlanList.append(a['essid'])        
-                       if "hidden..." not in list:
-                               list.append( ( _("enter hidden network SSID"),_("hidden...") ) )
-                               self.WlanList.append(_("hidden..."))    
-                       return list
-
-       def modeSelectionMade(self, index):
-               self.modeSelect(index)
-               
-       def modeSelectionMoved(self):
-               self.modeSelect(self.selection)
-               
-       def modeSelect(self, mode):
-               self.ap = mode
-               print "ModeSelected:", mode
-
-       def restartNetwork(self):
-               iNetwork.restartNetwork()
-               self.checkNetwork()
+                       self.APList.append( ( _("No networks found"),_("unavailable") ) )
+                       return self.APList
+               else:
+                       try:
+                               self.w = Wlan(self.selectedInterface)
+                               aps = self.w.getNetworkList()
+                       except ValueError:
+                               self.APList = []
+                               self.APList.append( ( _("No networks found"),_("unavailable") ) )
+                               return self.APList
+                       else:
+                               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['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]) )
        
-       def isWlanPluginInstalled(self):                
+                               if "hidden..." not in self.APList:
+                                       self.APList.append(( _("enter hidden network SSID"), "hidden..." ))
+                       
+                               self.rescanTimer.start(3000)
+                               return self.APList
+
+       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:
@@ -242,3 +398,27 @@ class NetworkWizard(WizardLanguage, Rc):
                else:
                        self.WlanPluginInstalled = True
 
+       def listChoices(self):
+               self.rescanTimer.stop()
+               list = []
+               if self.WlanPluginInstalled == True:
+                       list.append((_("Configure your wireless LAN again"), "scanwlan"))
+               list.append((_("Configure your internal LAN"), "nwconfig"))
+               list.append((_("Exit network wizard"), "end"))          
+               return list
+
+       def ChoicesSelectionMade(self, index):
+               self.ChoicesSelect(index)
+
+       def ChoicesSelect(self, index):
+               if index == 'end':
+                       self.NextStep = 'end'
+               elif index == 'nwconfig':
+                       self.selectedInterface = "eth0"
+                       self.NextStep = 'nwconfig'
+               else:
+                       self.NextStep = 'scanwlan'
+
+       def ChoicesSelectionMoved(self):
+               pass
+
index 98dbe80..e8f738c 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 660bbcd..4d3adcb 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 134797a..c430043 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">
+                <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>
+               <code pos="after" async="yes">
+self.selectInterface()
+               </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="welcome" />
+                        <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 type="dynamic" source="listChoices" evaluation="ChoicesSelectionMade" onselect="ChoicesSelectionMoved" />
+                <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 type="dynamic" source="listChoices" evaluation="ChoicesSelectionMade" onselect="ChoicesSelectionMoved" />
+               
+                <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="welcome" />
+                        <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>
 
 
index dc3beca..49ec7da 100755 (executable)
@@ -9,7 +9,7 @@ def startSetup(menuid):
        if menuid != "system": 
                return [ ]
 
-       return [(_("Network Wizard") + "...", NetworkWizardMain, "nw_wizard", 40)]
+       return [(_("Network Wizard"), NetworkWizardMain, "nw_wizard", 40)]
 
 def NetworkWizard(*args, **kwargs):
        from NetworkWizard import NetworkWizard
@@ -19,4 +19,4 @@ def Plugins(**kwargs):
        list = []
        if config.misc.firstrun.value:
                list.append(PluginDescriptor(name=_("Network Wizard"), where = PluginDescriptor.WHERE_WIZARD, fnc=(25, NetworkWizard)))
-       return list
+       return list
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
index fa533c0..3cc9e75 100644 (file)
@@ -77,7 +77,7 @@ class PositionerSetup(Screen):
                
                self.frontendStatus = { }
                self.diseqc = Diseqc(self.frontend)
-               self.tuner = Tuner(self.frontend)
+               self.tuner = Tuner(self.frontend, True) #True means we dont like that the normal sec stuff sends commands to the rotor!
 
                tp = ( cur.get("frequency", 0) / 1000,
                        cur.get("symbol_rate", 0) / 1000,
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 689d97e..d29fb00 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 871f0a3..dcff3ca 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)
@@ -251,7 +252,7 @@ class RestoreMenu(Screen):
                if (self.exe == False) and (self.entry == True):
                        self.sel = self["filelist"].getCurrent()
                        self.val = self.path + "/" + self.sel
-                       self.session.openWithCallback(self.startRestore, MessageBox, _("Are you sure you want to restore\nfollowing backup:\n" + self.sel + "\nSystem will restart after the restore!"))
+                       self.session.openWithCallback(self.startRestore, MessageBox, _("Are you sure you want to restore\nfollowing backup:\n") + self.sel + _("\nSystem will restart after the restore!"))
 
        def keyCancel(self):
                self.close()
old mode 100644 (file)
new mode 100755 (executable)
index ee1e56d..2d5e338
@@ -6,7 +6,8 @@ install_PYTHON =        \
        __init__.py \
        plugin.py \
        BackupRestore.py \
-       ImageWizard.py
+       ImageWizard.py \
+       SoftwareTools.py
 
 dist_install_DATA = \
        imagewizard.xml \
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/SoftwareTools.py b/lib/python/Plugins/SystemPlugins/SoftwareManager/SoftwareTools.py
new file mode 100755 (executable)
index 0000000..e8cf6dc
--- /dev/null
@@ -0,0 +1,231 @@
+from enigma import eConsoleAppContainer
+from Components.Console import Console
+from Components.About import about
+from Components.DreamInfoHandler import DreamInfoHandler
+from Components.Language import language
+from Components.Sources.List import List
+from Components.Ipkg import IpkgComponent
+from Components.Network import iNetwork
+from Tools.Directories import pathExists, fileExists, resolveFilename, SCOPE_METADIR
+
+from time import time
+
+class SoftwareTools(DreamInfoHandler):
+       lastDownloadDate = None
+       NetworkConnectionAvailable = None
+       list_updating = False
+       available_updates = 0
+       available_updatelist  = []
+       available_packetlist  = []
+       installed_packetlist = {}
+
+       
+       def __init__(self):
+               aboutInfo = about.getImageVersionString()
+               if aboutInfo.startswith("dev-"):
+                       self.ImageVersion = 'Experimental'
+               else:
+                       self.ImageVersion = 'Stable'
+               self.language = language.getLanguage()[:2] # getLanguage returns e.g. "fi_FI" for "language_country"
+               DreamInfoHandler.__init__(self, self.statusCallback, blocking = False, neededTag = 'ALL_TAGS', neededFlag = self.ImageVersion, language = self.language)
+               self.directory = resolveFilename(SCOPE_METADIR)
+               self.list = List([])
+               self.NotifierCallback = None
+               self.Console = Console()
+               self.UpdateConsole = Console()
+               self.cmdList = []
+               self.unwanted_extensions = ('-dbg', '-dev', '-doc')
+               self.ipkg = IpkgComponent()
+               self.ipkg.addCallback(self.ipkgCallback)                
+
+       def statusCallback(self, status, progress):
+               pass            
+
+       def startSoftwareTools(self, callback = None):
+               if callback is not None:
+                       self.NotifierCallback = callback
+               iNetwork.checkNetworkState(self.checkNetworkCB)
+               
+       def checkNetworkCB(self,data):
+               if data is not None:
+                       if data <= 2:
+                               SoftwareTools.NetworkConnectionAvailable = True
+                               self.getUpdates()
+                       else:
+                               SoftwareTools.NetworkConnectionAvailable = False
+                               self.getUpdates()
+
+       def getUpdates(self, callback = None):
+               if SoftwareTools.NetworkConnectionAvailable == True:
+                       SoftwareTools.lastDownloadDate = time()
+                       if SoftwareTools.list_updating is False and callback is None:
+                               SoftwareTools.list_updating = True
+                               self.ipkg.startCmd(IpkgComponent.CMD_UPDATE)
+                       elif SoftwareTools.list_updating is False and callback is not None:
+                               SoftwareTools.list_updating = True
+                               self.NotifierCallback = callback
+                               self.ipkg.startCmd(IpkgComponent.CMD_UPDATE)
+                       elif SoftwareTools.list_updating is True and callback is not None:
+                               #update info collecting already in progress
+                               self.NotifierCallback = callback
+               else:
+                       SoftwareTools.list_updating = False
+                       if callback is not None:
+                               callback(False)
+                       elif self.NotifierCallback is not None:
+                               self.NotifierCallback(False)
+
+       def ipkgCallback(self, event, param):
+               if event == IpkgComponent.EVENT_ERROR:
+                       SoftwareTools.list_updating = False
+               elif event == IpkgComponent.EVENT_DONE:
+                       if SoftwareTools.list_updating:
+                               self.startIpkgListAvailable()
+               pass
+
+       def startIpkgListAvailable(self, callback = None):
+               if callback is not None:
+                       SoftwareTools.list_updating = True
+               if SoftwareTools.list_updating:
+                       if not self.UpdateConsole:
+                               self.UpdateConsole = Console()
+                       cmd = "ipkg list"
+                       self.UpdateConsole.ePopen(cmd, self.IpkgListAvailableCB, callback)
+
+       def IpkgListAvailableCB(self, result, retval, extra_args = None):
+               (callback) = extra_args
+               if result:
+                       if SoftwareTools.list_updating:
+                               SoftwareTools.available_packetlist = []
+                               for x in result.splitlines():
+                                       tokens = x.split(' - ')
+                                       name = tokens[0].strip()
+                                       if not any(name.endswith(x) for x in self.unwanted_extensions):
+                                               l = len(tokens)
+                                               version = l > 1 and tokens[1].strip() or ""
+                                               descr = l > 2 and tokens[2].strip() or ""
+                                               SoftwareTools.available_packetlist.append([name, version, descr])
+                               if callback is None:
+                                       self.startInstallMetaPackage()
+                               else:
+                                       if self.UpdateConsole:
+                                               if len(self.UpdateConsole.appContainers) == 0:
+                                                               callback(True)
+               else:
+                       SoftwareTools.list_updating = False
+                       if self.UpdateConsole:
+                               if len(self.UpdateConsole.appContainers) == 0:
+                                       if callback is not None:
+                                               callback(False)
+
+       def startInstallMetaPackage(self, callback = None):
+               if callback is not None:
+                       SoftwareTools.list_updating = True
+               if SoftwareTools.list_updating:
+                       if not self.UpdateConsole:
+                               self.UpdateConsole = Console()
+                       cmd = "ipkg install enigma2-meta enigma2-plugins-meta enigma2-skins-meta"
+                       self.UpdateConsole.ePopen(cmd, self.InstallMetaPackageCB, callback)
+
+       def InstallMetaPackageCB(self, result, retval, extra_args = None):
+               (callback) = extra_args
+               if result:
+                       self.fillPackagesIndexList()
+                       if callback is None:
+                               self.startIpkgListInstalled()
+                       else:
+                               if self.UpdateConsole:
+                                       if len(self.UpdateConsole.appContainers) == 0:
+                                                       callback(True)
+               else:
+                       SoftwareTools.list_updating = False
+                       if self.UpdateConsole:
+                               if len(self.UpdateConsole.appContainers) == 0:
+                                       if callback is not None:
+                                               callback(False)
+
+       def startIpkgListInstalled(self, callback = None):
+               if callback is not None:
+                       SoftwareTools.list_updating = True
+               if SoftwareTools.list_updating:
+                       if not self.UpdateConsole:
+                               self.UpdateConsole = Console()
+                       cmd = "ipkg list_installed"
+                       self.UpdateConsole.ePopen(cmd, self.IpkgListInstalledCB, callback)
+
+       def IpkgListInstalledCB(self, result, retval, extra_args = None):
+               (callback) = extra_args
+               if result:
+                       SoftwareTools.installed_packetlist = {}
+                       for x in result.splitlines():
+                               tokens = x.split(' - ')
+                               name = tokens[0].strip()
+                               if not any(name.endswith(x) for x in self.unwanted_extensions):
+                                       l = len(tokens)
+                                       version = l > 1 and tokens[1].strip() or ""
+                                       SoftwareTools.installed_packetlist[name] = version
+                       if callback is None:
+                               self.countUpdates()
+                       else:
+                               if self.UpdateConsole:
+                                       if len(self.UpdateConsole.appContainers) == 0:
+                                                       callback(True)
+               else:
+                       SoftwareTools.list_updating = False
+                       if self.UpdateConsole:
+                               if len(self.UpdateConsole.appContainers) == 0:
+                                       if callback is not None:
+                                               callback(False)
+
+       def countUpdates(self, callback = None):
+               SoftwareTools.available_updates = 0
+               SoftwareTools.available_updatelist  = []
+               for package in self.packagesIndexlist[:]:
+                       attributes = package[0]["attributes"]
+                       packagename = attributes["packagename"]
+                       for x in SoftwareTools.available_packetlist:
+                               if x[0] == packagename:
+                                       if SoftwareTools.installed_packetlist.has_key(packagename):
+                                               if SoftwareTools.installed_packetlist[packagename] != x[1]:
+                                                       SoftwareTools.available_updates +=1
+                                                       SoftwareTools.available_updatelist.append([packagename])
+
+               SoftwareTools.list_updating = False
+               if self.UpdateConsole:
+                       if len(self.UpdateConsole.appContainers) == 0:
+                               if callback is not None:
+                                       callback(True)
+                                       callback = None
+                               elif self.NotifierCallback is not None:
+                                       self.NotifierCallback(True)
+                                       self.NotifierCallback = None
+
+       def startIpkgUpdate(self, callback = None):
+               if not self.Console:
+                       self.Console = Console()
+               cmd = "ipkg update"
+               self.Console.ePopen(cmd, self.IpkgUpdateCB, callback)
+
+       def IpkgUpdateCB(self, result, retval, extra_args = None):
+               (callback) = extra_args
+               if result:
+                       if self.Console:
+                               if len(self.Console.appContainers) == 0:
+                                       if callback is not None:
+                                               callback(True)
+                                               callback = None
+
+       def cleanupSoftwareTools(self):
+               if self.NotifierCallback is not None:
+                       self.NotifierCallback = None
+               self.ipkg.stop()
+               if self.Console is not None:
+                       if len(self.Console.appContainers):
+                               for name in self.Console.appContainers.keys():
+                                       self.Console.kill(name)
+               if self.UpdateConsole is not None:
+                       if len(self.UpdateConsole.appContainers):
+                               for name in self.UpdateConsole.appContainers.keys():
+                                       self.UpdateConsole.kill(name)
+
+iSoftwareTools = SoftwareTools()
\ No newline at end of file
index 341938c..05a87d5 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 3a1f835..4917855 100755 (executable)
@@ -23,7 +23,8 @@ 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 Components.Network import iNetwork
+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
@@ -36,6 +37,7 @@ from twisted.internet import reactor
 
 from ImageWizard import ImageWizard
 from BackupRestore import BackupSelection, RestoreMenu, BackupScreen, RestoreScreen, getBackupPath, getBackupFilename
+from SoftwareTools import iSoftwareTools
 
 config.plugins.configurationbackup = ConfigSubsection()
 config.plugins.configurationbackup.backuplocation = ConfigText(default = '/media/hdd/', visible_width = 50, fixed_size = False)
@@ -74,30 +76,31 @@ def load_cache(cache_file):
 
 class UpdatePluginMenu(Screen):
        skin = """
-               <screen name="UpdatePluginMenu" position="center,center" size="560,400" title="Software manager" >
+               <screen name="UpdatePluginMenu" position="center,center" size="610,410" title="Software management" >
                        <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" />
-                       <ePixmap pixmap="skin_default/border_menu_300.png" position="5,50" zPosition="1" size="300,300" transparent="1" alphatest="on" />
-                       <widget source="menu" render="Listbox" position="10,60" size="290,260" scrollbarMode="showOnDemand">
+                       <ePixmap pixmap="skin_default/border_menu_350.png" position="5,50" zPosition="1" size="350,300" transparent="1" alphatest="on" />
+                       <widget source="menu" render="Listbox" position="15,60" size="330,290" scrollbarMode="showOnDemand">
                                <convert type="TemplatedMultiContent">
                                        {"template": [
-                                                       MultiContentEntryText(pos = (2, 2), size = (290, 22), flags = RT_HALIGN_LEFT, text = 1), # index 0 is the MenuText,
+                                                       MultiContentEntryText(pos = (2, 2), size = (330, 24), flags = RT_HALIGN_LEFT, text = 1), # index 0 is the MenuText,
                                                ],
-                                       "fonts": [gFont("Regular", 20)],
+                                       "fonts": [gFont("Regular", 22)],
                                        "itemHeight": 25
                                        }
                                </convert>
                        </widget>
-                       <widget source="menu" render="Listbox" position="310,50" size="240,300" scrollbarMode="showNever" selectionDisabled="1">
+                       <widget source="menu" render="Listbox" position="360,50" size="240,300" scrollbarMode="showNever" selectionDisabled="1">
                                <convert type="TemplatedMultiContent">
                                        {"template": [
                                                        MultiContentEntryText(pos = (2, 2), size = (240, 300), flags = RT_HALIGN_CENTER|RT_VALIGN_CENTER|RT_WRAP, text = 2), # index 2 is the Description,
                                                ],
-                                       "fonts": [gFont("Regular", 20)],
+                                       "fonts": [gFont("Regular", 22)],
                                        "itemHeight": 300
                                        }
                                </convert>
                        </widget>
+                       <widget source="status" render="Label" position="5,360" zPosition="10" size="600,50" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
                </screen>"""
                
        def __init__(self, session, args = 0):
@@ -106,77 +109,133 @@ class UpdatePluginMenu(Screen):
                self.menu = args
                self.list = []
                self.oktext = _("\nPress OK on your remote control to continue.")
+               self.text = ""
                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(("install-extensions", _("Manage extensions"), _("\nManage extensions or plugins for your Dreambox" ) + self.oktext, None))
+                       self.list.append(("software-update", _("Software update"), _("\nOnline update of your Dreambox software." ) + 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 extensions 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"))
+               self["status"] = StaticText("")
 
-               self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions"],
+               self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions", "InfobarEPGActions"],
                {
                        "ok": self.go,
                        "back": self.close,
                        "red": self.close,
                }, -1)
-
                self.onLayoutFinish.append(self.layoutFinished)
                self.backuppath = getBackupPath()
                self.backupfile = getBackupFilename()
                self.fullbackupfilename = self.backuppath + "/" + self.backupfile
                self.onShown.append(self.setWindowTitle)
+               #self.onClose.append(self.cleanup)
 
        def layoutFinished(self):
                idx = 0
                self["menu"].index = idx
+               #self.getUpdateInfos()
 
        def setWindowTitle(self):
-               self.setTitle(_("Software manager"))
+               self.setTitle(_("Software management"))
+
+       def cleanup(self):
+               iNetwork.stopPingConsole()
+               iSoftwareTools.cleanupSoftwareTools()
+
+       def getUpdateInfos(self):
+               self.text = ""
+               if iSoftwareTools.NetworkConnectionAvailable == True:
+                       if iSoftwareTools.list_updating is False:
+                               if iSoftwareTools.available_updates is not 0:
+                                       self.text = _("There are at least ") + str(iSoftwareTools.available_updates) + _(" updates available.")
+                               else:
+                                       self.text = "" #_("There are no updates available.")
+                       else:
+                               if iSoftwareTools.available_updates is not 0:
+                                       self.text = _("There are at least ") + str(iSoftwareTools.available_updates) + _(" updates available.")
+                               else:
+                                       self.text = ""  #_("There are no updates available.")
+                               self.text += "\n" + _("A search for available updates is currently in progress.")
+               else:
+                       self.text = _("No network connection available.")
+               self["status"].setText(self.text)
+
 
        def go(self):
+               #iNetwork.stopPingConsole()
                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-extensions"):
                                        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 +245,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 )
@@ -228,1262 +290,1215 @@ class UpdatePluginMenu(Screen):
                        self.exe = True
                        self.session.open(RestoreScreen, runRestore = True)
 
-class IPKGMenu(Screen):
-       skin = """
-               <screen name="IPKGMenu" position="center,center" size="560,400" title="Select upgrade source to edit." >
-                       <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" />
-                       <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 name="filelist" position="5,50" size="550,340" scrollbarMode="showOnDemand" />
-               </screen>"""
-
-       def __init__(self, session, plugin_path):
-               Screen.__init__(self, session)
-               self.skin_path = plugin_path
-               
-               self["key_red"] = StaticText(_("Close"))
-               self["key_green"] = StaticText(_("Edit"))
-
-               self.sel = []
-               self.val = []
-               self.entry = False
-               self.exe = False
-               
-               self.path = ""
-
-               self["actions"] = NumberActionMap(["SetupActions"],
-               {
-                       "ok": self.KeyOk,
-                       "cancel": self.keyCancel
-               }, -1)
-
-               self["shortcuts"] = ActionMap(["ShortcutActions"],
-               {
-                       "red": self.keyCancel,
-                       "green": self.KeyOk,
-               })
-               self.flist = []
-               self["filelist"] = MenuList(self.flist)
-               self.fill_list()
-               self.onLayoutFinish.append(self.layoutFinished)
-
-       def layoutFinished(self):
-               self.setWindowTitle()
-
-       def setWindowTitle(self):
-               self.setTitle(_("Select upgrade source to edit."))
-
-       def fill_list(self):
-               self.flist = []
-               self.path = '/etc/ipkg/'
-               if (os_path.exists(self.path) == False):
-                       self.entry = False
-                       return
-               for file in listdir(self.path):
-                       if (file.endswith(".conf")):
-                               if file != 'arch.conf':
-                                       self.flist.append((file))
-                                       self.entry = True
-                                       self["filelist"].l.setList(self.flist)
-
-       def KeyOk(self):
-               if (self.exe == False) and (self.entry == True):
-                       self.sel = self["filelist"].getCurrent()
-                       self.val = self.path + self.sel
-                       self.session.open(IPKGSource, self.val)
-
-       def keyCancel(self):
-               self.close()
-
-       def Exit(self):
-               self.close()
-
-
-class IPKGSource(Screen):
-       skin = """
-               <screen name="IPKGSource" position="center,center" size="560,80" title="Edit upgrade source url." >
-                       <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" />
-                       <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 name="text" position="5,50" size="550,25" font="Regular;20" backgroundColor="background" foregroundColor="#cccccc" />
-               </screen>"""
-
-       def __init__(self, session, configfile = None):
-               Screen.__init__(self, session)
-               self.session = session
-               self.configfile = configfile
-               text = ""
-               if self.configfile:
-                       try:
-                               fp = file(configfile, 'r')
-                               sources = fp.readlines()
-                               if sources:
-                                       text = sources[0]
-                               fp.close()
-                       except IOError:
-                               pass
-
-               desk = getDesktop(0)
-               x= int(desk.size().width())
-               y= int(desk.size().height())
-
-               self["key_red"] = StaticText(_("Cancel"))
-               self["key_green"] = StaticText(_("Save"))
-
-               if (y>=720):
-                       self["text"] = Input(text, maxSize=False, type=Input.TEXT)
-               else:
-                       self["text"] = Input(text, maxSize=False, visible_width = 55, type=Input.TEXT)
-
-               self["actions"] = NumberActionMap(["WizardActions", "InputActions", "TextEntryActions", "KeyboardInputActions","ShortcutActions"], 
-               {
-                       "ok": self.go,
-                       "back": self.close,
-                       "red": self.close,
-                       "green": self.go,
-                       "left": self.keyLeft,
-                       "right": self.keyRight,
-                       "home": self.keyHome,
-                       "end": self.keyEnd,
-                       "deleteForward": self.keyDeleteForward,
-                       "deleteBackward": self.keyDeleteBackward,
-                       "1": self.keyNumberGlobal,
-                       "2": self.keyNumberGlobal,
-                       "3": self.keyNumberGlobal,
-                       "4": self.keyNumberGlobal,
-                       "5": self.keyNumberGlobal,
-                       "6": self.keyNumberGlobal,
-                       "7": self.keyNumberGlobal,
-                       "8": self.keyNumberGlobal,
-                       "9": self.keyNumberGlobal,
-                       "0": self.keyNumberGlobal
-               }, -1)
-
-               self.onLayoutFinish.append(self.layoutFinished)
-
-       def layoutFinished(self):
-               self.setWindowTitle()
-               self["text"].right()
-
-       def setWindowTitle(self):
-               self.setTitle(_("Edit upgrade source url."))
-
-       def go(self):
-               text = self["text"].getText()
-               if text:
-                       fp = file(self.configfile, 'w')
-                       fp.write(text)
-                       fp.write("\n")
-                       fp.close()
-               self.close()
-
-       def keyLeft(self):
-               self["text"].left()
-       
-       def keyRight(self):
-               self["text"].right()
-       
-       def keyHome(self):
-               self["text"].home()
-       
-       def keyEnd(self):
-               self["text"].end()
-       
-       def keyDeleteForward(self):
-               self["text"].delete()
-       
-       def keyDeleteBackward(self):
-               self["text"].deleteBackward()
-       
-       def keyNumberGlobal(self, number):
-               self["text"].number(number)
 
+class PluginManager(Screen, DreamInfoHandler):
 
-class PacketManager(Screen):
        skin = """
-               <screen name="PacketManager" position="center,center" size="530,420" title="Packet manager" >
+               <screen name="PluginManager" position="center,center" size="560,440" title="Extensions management" >
                        <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="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="list" render="Listbox" position="5,50" size="520,365" scrollbarMode="showOnDemand">
+                       <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="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
+                       <widget source="list" render="Listbox" position="5,50" size="550,360" scrollbarMode="showOnDemand">
                                <convert type="TemplatedMultiContent">
-                                       {"template": [
-                                                       MultiContentEntryText(pos = (5, 1), size = (440, 28), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
-                                                       MultiContentEntryText(pos = (5, 26), size = (440, 20), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is the description
-                                                       MultiContentEntryPixmapAlphaTest(pos = (445, 2), size = (48, 48), png = 4), # index 4 is the status pixmap
-                                                       MultiContentEntryPixmapAlphaTest(pos = (5, 50), size = (510, 2), png = 5), # index 4 is the div pixmap
-                                               ],
-                                       "fonts": [gFont("Regular", 22),gFont("Regular", 14)],
+                               {"templates":
+                                       {"default": (51,[
+                                                       MultiContentEntryText(pos = (30, 1), size = (470, 24), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
+                                                       MultiContentEntryText(pos = (30, 25), size = (470, 24), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is the description
+                                                       MultiContentEntryPixmapAlphaTest(pos = (475, 0), size = (48, 48), png = 5), # index 5 is the status pixmap
+                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 49), size = (550, 2), png = 6), # index 6 is the div pixmap
+                                               ]),
+                                       "category": (40,[
+                                                       MultiContentEntryText(pos = (30, 0), size = (500, 22), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
+                                                       MultiContentEntryText(pos = (30, 22), size = (500, 16), font=2, flags = RT_HALIGN_LEFT, text = 1), # index 1 is the description
+                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 38), size = (550, 2), png = 3), # index 3 is the div pixmap
+                                               ])
+                                       },
+                                       "fonts": [gFont("Regular", 22),gFont("Regular", 20),gFont("Regular", 16)],
                                        "itemHeight": 52
-                                       }
+                               }
                                </convert>
                        </widget>
+                       <widget source="status" render="Label" position="5,410" zPosition="10" size="540,30" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
                </screen>"""
-               
-       def __init__(self, session, plugin_path, args = None):
+
+       def __init__(self, session, plugin_path = None, args = None):
                Screen.__init__(self, session)
                self.session = session
                self.skin_path = plugin_path
+               if self.skin_path == None:
+                       self.skin_path = resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager")
 
-               self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions"], 
+               self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions", "InfobarEPGActions", "HelpActions" ],
                {
-                       "ok": self.go,
+                       "ok": self.handleCurrent,
                        "back": self.exit,
                        "red": self.exit,
-                       "green": self.reload,
+                       "green": self.handleCurrent,
+                       "yellow": self.handleSelected,
+                       "showEventInfo": self.handleSelected,
+                       "displayHelp": self.handleHelp,
                }, -1)
-               
+
                self.list = []
                self.statuslist = []
+               self.selectedFiles = []
+               self.categoryList = []
+               self.packetlist = []
                self["list"] = List(self.list)
                self["key_red"] = StaticText(_("Close"))
-               self["key_green"] = StaticText(_("Reload"))
+               self["key_green"] = StaticText("")
+               self["key_yellow"] = StaticText("")
+               self["key_blue"] = StaticText("")
+               self["status"] = StaticText("")
 
-               self.list_updating = True
-               self.packetlist = []
-               self.installed_packetlist = {}
-               self.Console = Console()
                self.cmdList = []
-               self.cachelist = []
-               self.cache_ttl = 86400  #600 is default, 0 disables, Seconds cache is considered valid (24h should be ok for caching ipkgs)
-               self.cache_file = '/usr/lib/enigma2/python/Plugins/SystemPlugins/SoftwareManager/packetmanager.cache' #Path to cache directory   
                self.oktext = _("\nAfter pressing OK, please wait!")
-               self.unwanted_extensions = ('-dbg', '-dev', '-doc', 'busybox')
+               if not self.selectionChanged in self["list"].onSelectionChanged:
+                       self["list"].onSelectionChanged.append(self.selectionChanged)
 
-               self.ipkg = IpkgComponent()
-               self.ipkg.addCallback(self.ipkgCallback)
+               self.currList = ""
+               self.currentSelectedTag = None
+               self.currentSelectedIndex = None
+               self.currentSelectedPackage = None
+               self.saved_currentSelectedPackage = None
+               
                self.onShown.append(self.setWindowTitle)
-               self.onLayoutFinish.append(self.rebuildList)
+               self.onLayoutFinish.append(self.getUpdateInfos)
+
+       def setWindowTitle(self):
+               self.setTitle(_("Extensions management"))
 
        def exit(self):
-               self.ipkg.stop()
-               if self.Console is not None:
-                       if len(self.Console.appContainers):
-                               for name in self.Console.appContainers.keys():
-                                       self.Console.kill(name)
-               self.close()
+               if self.currList == "packages":
+                       self.currList = "category"
+                       self.currentSelectedTag = None
+                       self["list"].style = "category"
+                       self['list'].setList(self.categoryList)
+                       self["list"].setIndex(self.currentSelectedIndex)
+                       self["list"].updateList(self.categoryList)
+                       self.selectionChanged()
+               else:
+                       iSoftwareTools.cleanupSoftwareTools()
+                       self.prepareInstall()
+                       if len(self.cmdList):
+                               self.session.openWithCallback(self.runExecute, PluginManagerInfo, self.skin_path, self.cmdList)
+                       else:
+                               self.close()
 
-       def reload(self):
-               if (os_path.exists(self.cache_file) == True):
-                       remove(self.cache_file)
-                       self.list_updating = True
-                       self.rebuildList()
-                       
-       def setWindowTitle(self):
-               self.setTitle(_("Packet manager"))
+       def handleHelp(self):
+               if self.currList != "status":
+                       self.session.open(PluginManagerHelp, self.skin_path)
 
-       def setStatus(self,status = None):
+       def setState(self,status = None):
                if status:
+                       self.currList = "status"
                        self.statuslist = []
-                       divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
+                       self["key_green"].setText("")
+                       self["key_blue"].setText("")
+                       self["key_yellow"].setText("")
+                       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"))
-                               self.statuslist.append(( _("Package list update"), '', _("Trying to download a new packetlist. Please wait..." ),'',statuspng, divpng ))
-                               self['list'].setList(self.statuslist)   
+                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgrade.png"))
+                               self.statuslist.append(( _("Updating software catalog"), '', _("Searching for available updates. Please wait..." ),'', '', statuspng, divpng, None, '' ))
+                               self["list"].style = "default"
+                               self['list'].setList(self.statuslist)
+                       elif status == 'sync':
+                               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"))
-                               self.statuslist.append(( _("Error"), '', _("There was an error downloading the packetlist. Please try again." ),'',statuspng, divpng ))
-                               self['list'].setList(self.statuslist)                           
-
-       def rebuildList(self):
-               self.setStatus('update')
-               self.inv_cache = 0
-               self.vc = valid_cache(self.cache_file, self.cache_ttl)
-               if self.cache_ttl > 0 and self.vc != 0:
-                       try:
-                               self.buildPacketList()
-                       except:
-                               self.inv_cache = 1
-               if self.cache_ttl == 0 or self.inv_cache == 1 or self.vc == 0:
-                       self.run = 0
-                       self.ipkg.startCmd(IpkgComponent.CMD_UPDATE)
-
-       def go(self, returnValue = None):
-               cur = self["list"].getCurrent()
-               if cur:
-                       status = cur[3]
-                       package = cur[0]
-                       self.cmdList = []
-                       if status == 'installed':
-                               self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": package }))
-                               if len(self.cmdList):
-                                       self.session.openWithCallback(self.runRemove, MessageBox, _("Do you want to remove the package:\n") + package + "\n" + self.oktext)
-                       elif status == 'upgradeable':
-                               self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": package }))
-                               if len(self.cmdList):
-                                       self.session.openWithCallback(self.runUpgrade, MessageBox, _("Do you want to upgrade the package:\n") + package + "\n" + self.oktext)
-                       elif status == "installable":
-                               self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": package }))
-                               if len(self.cmdList):
-                                       self.session.openWithCallback(self.runUpgrade, MessageBox, _("Do you want to install the package:\n") + package + "\n" + self.oktext)
+                               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)
 
-       def runRemove(self, result):
-               if result:
-                       self.session.openWithCallback(self.runRemoveFinished, Ipkg, cmdList = self.cmdList)
+       def getUpdateInfos(self):
+               self.setState('update')
+               iSoftwareTools.startSoftwareTools(self.getUpdateInfosCB)
 
-       def runRemoveFinished(self):
-               self.session.openWithCallback(self.RemoveReboot, MessageBox, _("Remove finished.") +" "+_("Do you want to reboot your Dreambox?"), MessageBox.TYPE_YESNO)
+       def getUpdateInfosCB(self, retval = None):
+               if retval is not None:
+                       if retval is True:
+                               if iSoftwareTools.available_updates is not 0:
+                                       self["status"].setText(_("There are at least ") + str(iSoftwareTools.available_updates) + _(" updates available."))
+                               else:
+                                       self["status"].setText(_("There are no updates available."))
+                               self.rebuildList()
+                       elif retval is False:
+                               self.setState('error')
+                               self["status"].setText(_("No network connection available."))
 
-       def RemoveReboot(self, result):
-               if result is None:
-                       return
-               if result is False:
-                       cur = self["list"].getCurrent()
-                       if cur:
-                               item = self['list'].getIndex()
-                               self.list[item] = self.buildEntryComponent(cur[0], cur[1], cur[2], 'installable')
-                               self.cachelist[item] = [cur[0], cur[1], cur[2], 'installable']
-                               self['list'].setList(self.list)
-                               write_cache(self.cache_file, self.cachelist)
-                               self.reloadPluginlist()
-               if result:
-                       quitMainloop(3)
+       def rebuildList(self, retval = None):
+               if self.currentSelectedTag is None:
+                       self.buildCategoryList()
+               else:
+                       self.buildPacketList(self.currentSelectedTag)
 
-       def runUpgrade(self, result):
-               if result:
-                       self.session.openWithCallback(self.runUpgradeFinished, Ipkg, cmdList = self.cmdList)
+       def selectionChanged(self):
+               current = self["list"].getCurrent()
+               self["status"].setText("")
+               if current:
+                       if self.currList == "packages":
+                               self["key_red"].setText(_("Back"))
+                               if current[4] == 'installed':
+                                       self["key_green"].setText(_("Uninstall"))
+                               elif current[4] == 'installable':
+                                       self["key_green"].setText(_("Install"))
+                               elif current[4] == 'remove':
+                                       self["key_green"].setText(_("Undo uninstall"))
+                               elif current[4] == 'install':
+                                       self["key_green"].setText(_("Undo install"))
+                               self["key_yellow"].setText(_("View details"))
+                               self["key_blue"].setText("")
+                               if len(self.selectedFiles) == 0 and iSoftwareTools.available_updates is not 0:
+                                       self["status"].setText(_("There are at least ") + str(iSoftwareTools.available_updates) + _(" updates available."))
+                               elif len(self.selectedFiles) is not 0:
+                                       self["status"].setText(str(len(self.selectedFiles)) + _(" packages selected."))
+                               else:
+                                       self["status"].setText(_("There are currently no outstanding actions."))
+                       elif self.currList == "category":
+                               self["key_red"].setText(_("Close"))
+                               self["key_green"].setText("")
+                               self["key_yellow"].setText("")
+                               self["key_blue"].setText("")
+                               if len(self.selectedFiles) == 0 and iSoftwareTools.available_updates is not 0:
+                                       self["status"].setText(_("There are at least ") + str(iSoftwareTools.available_updates) + _(" updates available."))
+                                       self["key_yellow"].setText(_("Update"))
+                               elif len(self.selectedFiles) is not 0:
+                                       self["status"].setText(str(len(self.selectedFiles)) + _(" packages selected."))
+                                       self["key_yellow"].setText(_("Process"))
+                               else:
+                                       self["status"].setText(_("There are currently no outstanding actions."))
 
-       def runUpgradeFinished(self):
-               self.session.openWithCallback(self.UpgradeReboot, MessageBox, _("Upgrade finished.") +" "+_("Do you want to reboot your Dreambox?"), MessageBox.TYPE_YESNO)
-               
-       def UpgradeReboot(self, result):
-               if result is None:
-                       return
-               if result is False:
-                       cur = self["list"].getCurrent()
-                       if cur:
-                               item = self['list'].getIndex()
-                               self.list[item] = self.buildEntryComponent(cur[0], cur[1], cur[2], 'installed')
-                               self.cachelist[item] = [cur[0], cur[1], cur[2], 'installed']
-                               self['list'].setList(self.list)
-                               write_cache(self.cache_file, self.cachelist)
-                               self.reloadPluginlist()
-               if result:
-                       quitMainloop(3)
+       def getSelectionState(self, detailsFile):
+               for entry in self.selectedFiles:
+                       if entry[0] == detailsFile:
+                               return True
+               return False
 
-       def ipkgCallback(self, event, param):
-               if event == IpkgComponent.EVENT_ERROR:
-                       self.list_updating = False
-                       self.setStatus('error')
-               elif event == IpkgComponent.EVENT_DONE:
-                       if self.list_updating:
-                               self.list_updating = False
-                               if not self.Console:
-                                       self.Console = Console()
-                               cmd = "ipkg list"
-                               self.Console.ePopen(cmd, self.IpkgList_Finished)
-               #print event, "-", param
-               pass
+       def handleCurrent(self):
+               current = self["list"].getCurrent()
+               if current:
+                       if self.currList == "category":
+                               self.currentSelectedIndex = self["list"].index
+                               selectedTag = current[2]
+                               self.buildPacketList(selectedTag)
+                       elif self.currList == "packages":
+                               if current[7] is not '':
+                                       idx = self["list"].getIndex()
+                                       detailsFile = self.list[idx][1]
+                                       if self.list[idx][7] == True:
+                                               for entry in self.selectedFiles:
+                                                       if entry[0] == detailsFile:
+                                                               self.selectedFiles.remove(entry)
+                                       else:
+                                               alreadyinList = False
+                                               for entry in self.selectedFiles:
+                                                       if entry[0] == detailsFile:
+                                                               alreadyinList = True
+                                               if not alreadyinList:
+                                                       self.selectedFiles.append((detailsFile,current[4],current[3]))
+                                                       self.currentSelectedPackage = ((detailsFile,current[4],current[3]))
+                                       if current[4] == 'installed':
+                                               self.list[idx] = self.buildEntryComponent(current[0], current[1], current[2], current[3], 'remove', True)
+                                       elif current[4] == 'installable':
+                                               self.list[idx] = self.buildEntryComponent(current[0], current[1], current[2], current[3], 'install', True)
+                                       elif current[4] == 'remove':
+                                               self.list[idx] = self.buildEntryComponent(current[0], current[1], current[2], current[3], 'installed', False)
+                                       elif current[4] == 'install':
+                                               self.list[idx] = self.buildEntryComponent(current[0], current[1], current[2], current[3], 'installable',False)
+                                       self["list"].setList(self.list)
+                                       self["list"].setIndex(idx)
+                                       self["list"].updateList(self.list)
+                                       self.selectionChanged()
 
-       def IpkgList_Finished(self, result, retval, extra_args = None):
-               if len(result):
-                       self.packetlist = []
-                       for x in result.splitlines():
-                               split = x.split(' - ')   #self.blacklisted_packages
-                               if not any(split[0].strip().endswith(x) for x in self.unwanted_extensions):
-                                       self.packetlist.append([split[0].strip(), split[1].strip(),split[2].strip()])
-               if not self.Console:
-                       self.Console = Console()
-               cmd = "ipkg list_installed"
-               self.Console.ePopen(cmd, self.IpkgListInstalled_Finished)
+       def handleSelected(self):
+               current = self["list"].getCurrent()
+               if current:
+                       if self.currList == "packages":
+                               if current[7] is not '':
+                                       detailsfile = iSoftwareTools.directory[0] + "/" + current[1]
+                                       if (os_path.exists(detailsfile) == True):
+                                               self.saved_currentSelectedPackage = self.currentSelectedPackage
+                                               self.session.openWithCallback(self.detailsClosed, PluginDetails, self.skin_path, current)
+                                       else:
+                                               self.session.open(MessageBox, _("Sorry, no Details available!"), MessageBox.TYPE_INFO, timeout = 10)
+                       elif self.currList == "category":
+                               self.prepareInstall()
+                               if len(self.cmdList):
+                                       self.session.openWithCallback(self.runExecute, PluginManagerInfo, self.skin_path, self.cmdList)
 
-       def IpkgListInstalled_Finished(self, result, retval, extra_args = None):
-               if len(result):
-                       self.installed_packetlist = {}
-                       for x in result.splitlines():
-                               split = x.split(' - ')
-                               if not any(split[0].strip().endswith(x) for x in self.unwanted_extensions):
-                                       self.installed_packetlist[split[0].strip()] = split[1].strip()
-               self.buildPacketList()
+       def detailsClosed(self, result = None):
+               if result is not None:
+                       if result is not False:
+                               self.setState('sync')
+                               iSoftwareTools.lastDownloadDate = time()
+                               for entry in self.selectedFiles:
+                                       if entry == self.saved_currentSelectedPackage:
+                                               self.selectedFiles.remove(entry)
+                               iSoftwareTools.startIpkgListInstalled(self.rebuildList)
 
-       def buildEntryComponent(self, name, version, description, state):
-               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
+       def buildEntryComponent(self, name, details, description, packagename, state, selected = False):
+               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':
-                       installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "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"))
-                       return((name, version, description, state, upgradeablepng, divpng))     
-               else:
-                       installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installable.png"))
-                       return((name, version, description, state, installablepng, divpng))
-
-       def buildPacketList(self):
-               self.list = []
-               self.cachelist = []
-
-               if self.cache_ttl > 0 and self.vc != 0:
-                       print 'Loading packagelist cache from ',self.cache_file
-                       try:
-                               self.cachelist = load_cache(self.cache_file)
-                               if len(self.cachelist) > 0:
-                                       for x in self.cachelist:
-                                               self.list.append(self.buildEntryComponent(x[0], x[1], x[2], x[3]))
-                                       self['list'].setList(self.list)
-                       except:
-                               self.inv_cache = 1
+                       return((name, details, description, packagename, state, installedpng, divpng, selected))
+               elif state == 'installable':
+                       return((name, details, description, packagename, state, installablepng, divpng, selected))
+               elif state == 'remove':
+                       return((name, details, description, packagename, state, removepng, divpng, selected))
+               elif state == 'install':
+                       return((name, details, description, packagename, state, installpng, divpng, selected))
 
-               if self.cache_ttl == 0 or self.inv_cache == 1 or self.vc == 0:
-                       print 'rebuilding fresh package list'
+       def buildPacketList(self, categorytag = None):
+               if categorytag is not None:
+                       self.currList = "packages"
+                       self.currentSelectedTag = categorytag
+                       self.packetlist = []
+                       for package in iSoftwareTools.packagesIndexlist[:]:
+                               prerequisites = package[0]["prerequisites"]
+                               if prerequisites.has_key("tag"):
+                                       for foundtag in prerequisites["tag"]:
+                                               if categorytag == foundtag:
+                                                       attributes = package[0]["attributes"]
+                                                       if attributes.has_key("packagetype"):
+                                                               if attributes["packagetype"] == "internal":
+                                                                       continue
+                                                               self.packetlist.append([attributes["name"], attributes["details"], attributes["shortdescription"], attributes["packagename"]])
+                                                       else:
+                                                               self.packetlist.append([attributes["name"], attributes["details"], attributes["shortdescription"], attributes["packagename"]])
+                       self.list = []
                        for x in self.packetlist:
                                status = ""
-                               if self.installed_packetlist.has_key(x[0].strip()):
-                                       if self.installed_packetlist[x[0].strip()] == x[1].strip():
-                                               status = "installed"
-                                               self.list.append(self.buildEntryComponent(x[0].strip(), x[1].strip(), x[2].strip(), status))
+                               name = x[0].strip()
+                               details = x[1].strip()
+                               description = x[2].strip()
+                               packagename = x[3].strip()
+                               selectState = self.getSelectionState(details)
+                               if iSoftwareTools.installed_packetlist.has_key(packagename):
+                                       if selectState == True:
+                                               status = "remove"
                                        else:
-                                               status = "upgradeable"
-                                               self.list.append(self.buildEntryComponent(x[0].strip(), x[1].strip(), x[2].strip(), status))
+                                               status = "installed"
+                                       self.list.append(self.buildEntryComponent(name, details, description, packagename, status, selected = selectState))
                                else:
-                                       status = "installable"
-                                       self.list.append(self.buildEntryComponent(x[0].strip(), x[1].strip(), x[2].strip(), status))
-                               if not any(x[0].strip().endswith(x) for x in self.unwanted_extensions):
-                                       self.cachelist.append([x[0].strip(), x[1].strip(), x[2].strip(), status])
-                       write_cache(self.cache_file, self.cachelist)
+                                       if selectState == True:
+                                               status = "install"
+                                       else:
+                                               status = "installable"
+                                       self.list.append(self.buildEntryComponent(name, details, description, packagename, status, selected = selectState))
+                       if len(self.list):
+                               self.list.sort(key=lambda x: x[0])
+                       self["list"].style = "default"
                        self['list'].setList(self.list)
+                       self["list"].updateList(self.list)
+                       self.selectionChanged()
 
-       def reloadPluginlist(self):
-               plugins.readPluginList(resolveFilename(SCOPE_PLUGINS))
+       def buildCategoryList(self):
+               self.currList = "category"
+               self.categories = []
+               self.categoryList = []
+               for package in iSoftwareTools.packagesIndexlist[:]:
+                       prerequisites = package[0]["prerequisites"]
+                       if prerequisites.has_key("tag"):
+                               for foundtag in prerequisites["tag"]:
+                                       attributes = package[0]["attributes"]
+                                       if foundtag not in self.categories:
+                                               self.categories.append(foundtag)
+                                               self.categoryList.append(self.buildCategoryComponent(foundtag))
+               self.categoryList.sort(key=lambda x: x[0])
+               self["list"].style = "category"
+               self['list'].setList(self.categoryList)
+               self["list"].updateList(self.categoryList)
+               self.selectionChanged()
+
+       def buildCategoryComponent(self, tag = None):
+               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 ))
+                       elif tag == 'Skin':
+                               return(( _("Skins"), _("View list of available skins" ), tag, divpng ))
+                       elif tag == 'Recording':
+                               return(( _("Recordings"), _("View list of available recording extensions" ), tag, divpng ))
+                       elif tag == 'Network':
+                               return(( _("Network"), _("View list of available networking extensions" ), tag, divpng ))
+                       elif tag == 'CI':
+                               return(( _("CommonInterface"), _("View list of available CommonInterface extensions" ), tag, divpng ))
+                       elif tag == 'Default':
+                               return(( _("Default Settings"), _("View list of available default settings" ), tag, divpng ))
+                       elif tag == 'SAT':
+                               return(( _("Satellite equipment"), _("View list of available Satellite equipment extensions." ), tag, divpng ))
+                       elif tag == 'Software':
+                               return(( _("Software"), _("View list of available software extensions" ), tag, divpng ))
+                       elif tag == 'Multimedia':
+                               return(( _("Multimedia"), _("View list of available multimedia extensions." ), tag, divpng ))
+                       elif tag == 'Display':
+                               return(( _("Display and Userinterface"), _("View list of available Display and Userinterface extensions." ), tag, divpng ))
+                       elif tag == 'EPG':
+                               return(( _("Electronic Program Guide"), _("View list of available EPG extensions." ), tag, divpng ))
+                       elif tag == 'Communication':
+                               return(( _("Communication"), _("View list of available communication extensions." ), tag, divpng ))
+                       else: # dynamically generate non existent tags
+                               return(( str(tag), _("View list of available ") + str(tag) + _(" extensions." ), tag, divpng ))
+
+       def prepareInstall(self):
+               self.cmdList = []
+               if iSoftwareTools.available_updates > 0:
+                       self.cmdList.append((IpkgComponent.CMD_UPGRADE, { "test_only": False }))
+               if self.selectedFiles and len(self.selectedFiles):
+                       for plugin in self.selectedFiles:
+                               detailsfile = iSoftwareTools.directory[0] + "/" + plugin[0]
+                               if (os_path.exists(detailsfile) == True):
+                                       iSoftwareTools.fillPackageDetails(plugin[0])
+                                       self.package = iSoftwareTools.packageDetails[0]
+                                       if self.package[0].has_key("attributes"):
+                                               self.attributes = self.package[0]["attributes"]
+                                       if self.attributes.has_key("package"):
+                                               self.packagefiles = self.attributes["package"]
+                                       if plugin[1] == 'installed':
+                                               if self.packagefiles:
+                                                       for package in self.packagefiles[:]:
+                                                               self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": package["name"] }))
+                                               else:
+                                                       self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": plugin[2] }))
+                                       else:
+                                               if self.packagefiles:
+                                                       for package in self.packagefiles[:]:
+                                                               self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": package["name"] }))
+                                               else:
+                                                       self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": plugin[2] }))
+                               else:
+                                       if plugin[1] == 'installed':
+                                               self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": plugin[2] }))
+                                       else:
+                                               self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": plugin[2] }))
 
+       def runExecute(self, result = None):
+               if result is not None:
+                       if result[0] is True:
+                               self.session.openWithCallback(self.runExecuteFinished, Ipkg, cmdList = self.cmdList)
+                       elif result[0] is False:
+                               self.cmdList = result[1]
+                               self.session.openWithCallback(self.runExecuteFinished, Ipkg, cmdList = self.cmdList)
+               else:
+                       self.close()
 
-class PluginManager(Screen, DreamInfoHandler):
+       def runExecuteFinished(self):
+               self.session.openWithCallback(self.ExecuteReboot, MessageBox, _("Install or remove finished.") +" "+_("Do you want to reboot your Dreambox?"), MessageBox.TYPE_YESNO)
+
+       def ExecuteReboot(self, result):
+               if result is None:
+                       return
+               if result is False:
+                       self.reloadPluginlist()
+                       self.selectedFiles = []
+                       self.detailsClosed(True)
+               if result:
+                       quitMainloop(3)
+
+       def reloadPluginlist(self):
+               plugins.readPluginList(resolveFilename(SCOPE_PLUGINS))
 
-       lastDownloadDate = None
 
+class PluginManagerInfo(Screen):
        skin = """
-               <screen name="PluginManager" position="center,center" size="560,440" title="Plugin manager" >
+               <screen name="PluginManagerInfo" position="center,center" size="560,450" title="Plugin manager activity information" >
                        <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="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="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
-                       <widget source="list" render="Listbox" position="5,50" size="550,360" scrollbarMode="showOnDemand">
+                       <widget source="list" render="Listbox" position="5,50" size="550,350" scrollbarMode="showOnDemand" selectionDisabled="1">
                                <convert type="TemplatedMultiContent">
-                               {"templates":
-                                       {"default": (51,[
-                                                       MultiContentEntryText(pos = (30, 1), size = (470, 24), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
-                                                       MultiContentEntryText(pos = (30, 25), size = (470, 20), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is the description
-                                                       MultiContentEntryPixmapAlphaTest(pos = (475, 0), size = (48, 48), png = 5), # index 5 is the status pixmap
-                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 49), size = (550, 2), png = 6), # index 6 is the div pixmap
-                                               ]),
-                                       "category": (40,[
-                                                       MultiContentEntryText(pos = (30, 0), size = (500, 22), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
-                                                       MultiContentEntryText(pos = (30, 22), size = (500, 16), font=1, flags = RT_HALIGN_LEFT, text = 1), # index 1 is the description
-                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 38), size = (550, 2), png = 3), # index 3 is the div pixmap
-                                               ])
-                                       },
-                                       "fonts": [gFont("Regular", 22),gFont("Regular", 16)],
-                                       "itemHeight": 52
-                               }
+                                       {"template": [
+                                                       MultiContentEntryText(pos = (50, 0), size = (150, 26), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
+                                                       MultiContentEntryText(pos = (50, 27), size = (540, 23), font=1, flags = RT_HALIGN_LEFT, text = 1), # index 1 is the state
+                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 1), size = (48, 48), png = 2), # index 2 is the status pixmap
+                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 48), size = (550, 2), png = 3), # index 3 is the div pixmap
+                                               ],
+                                       "fonts": [gFont("Regular", 24),gFont("Regular", 22)],
+                                       "itemHeight": 50
+                                       }
                                </convert>
                        </widget>
-                       <widget source="status" render="Label" position="5,410" zPosition="10" size="540,30" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+                       <ePixmap pixmap="skin_default/div-h.png" position="0,404" zPosition="10" size="560,2" transparent="1" alphatest="on" />
+                       <widget source="status" render="Label" position="5,408" zPosition="10" size="550,44" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
                </screen>"""
 
-       def __init__(self, session, plugin_path, args = None):
+       def __init__(self, session, plugin_path, cmdlist = None):
                Screen.__init__(self, session)
                self.session = session
                self.skin_path = plugin_path
-               aboutInfo = about.getImageVersionString()
-               if aboutInfo.startswith("dev-"):
-                       self.ImageVersion = 'Experimental'
-               else:
-                       self.ImageVersion = 'Stable'
-               self.language = language.getLanguage()[:2] # getLanguage returns e.g. "fi_FI" for "language_country"
-
-               DreamInfoHandler.__init__(self, self.statusCallback, blocking = False, neededTag = 'ALL_TAGS', neededFlag = self.ImageVersion, language = self.language)
-               self.directory = resolveFilename(SCOPE_METADIR)
+               self.cmdlist = cmdlist
 
-               self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions", "InfobarEPGActions", "HelpActions" ],
+               self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions"],
                {
-                       "ok": self.handleCurrent,
+                       "ok": self.process_all,
                        "back": self.exit,
                        "red": self.exit,
-                       "green": self.handleCurrent,
-                       "yellow": self.handleSelected,
-                       "showEventInfo": self.handleSelected,
-                       "displayHelp": self.handleHelp,
+                       "green": self.process_extensions,
                }, -1)
 
                self.list = []
-               self.statuslist = []
-               self.selectedFiles = []
-               self.categoryList = []
                self["list"] = List(self.list)
-               self["key_red"] = StaticText(_("Close"))
-               self["key_green"] = StaticText("")
-               self["key_yellow"] = StaticText("")
-               self["key_blue"] = StaticText("")
-               self["status"] = StaticText("")
-
-               self.list_updating = True
-               self.packetlist = []
-               self.installed_packetlist = {}
-               self.available_packetlist = []
-               self.available_updates = 0
-               self.Console = Console()
-               self.cmdList = []
-               self.oktext = _("\nAfter pressing OK, please wait!")
-               self.unwanted_extensions = ('-dbg', '-dev', '-doc')
-
-               self.ipkg = IpkgComponent()
-               self.ipkg.addCallback(self.ipkgCallback)
-               if not self.selectionChanged in self["list"].onSelectionChanged:
-                       self["list"].onSelectionChanged.append(self.selectionChanged)
-
-               self.currList = ""
-               self.currentSelectedTag = None
-               self.currentSelectedIndex = None
+               self["key_red"] = StaticText(_("Cancel"))
+               self["key_green"] = StaticText(_("Only extensions."))
+               self["status"] = StaticText(_("Following tasks will be done after you press OK!"))
 
                self.onShown.append(self.setWindowTitle)
                self.onLayoutFinish.append(self.rebuildList)
 
        def setWindowTitle(self):
-               self.setTitle(_("Plugin manager"))
+               self.setTitle(_("Plugin manager activity information"))
 
-       def exit(self):
-               if self.currList == "packages":
-                       self.currList = "category"
-                       self.currentSelectedTag = None
-                       self["list"].style = "category"
-                       self['list'].setList(self.categoryList)
-                       self["list"].setIndex(self.currentSelectedIndex)
-                       self["list"].updateList(self.categoryList)
-                       self.selectionChanged()
+       def rebuildList(self):
+               self.list = []
+               if self.cmdlist is not None:
+                       for entry in self.cmdlist:
+                               action = ""
+                               info = ""
+                               cmd = entry[0]
+                               if cmd == 0:
+                                       action = 'install'
+                               elif cmd == 2:
+                                       action = 'remove'
+                               else:
+                                       action = 'upgrade'
+                               args = entry[1]
+                               if cmd == 0:
+                                       info = args['package']
+                               elif cmd == 2:
+                                       info = args['package']
+                               else:
+                                       info = _("Dreambox software because updates are available.")
+
+                               self.list.append(self.buildEntryComponent(action,info))
+                       self['list'].setList(self.list)
+                       self['list'].updateList(self.list)
+
+       def buildEntryComponent(self, action,info):
+               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':
+                       return(( _('Removing'), info, removepng, divpng))
                else:
-                       self.ipkg.stop()
-                       if self.Console is not None:
-                               if len(self.Console.appContainers):
-                                       for name in self.Console.appContainers.keys():
-                                               self.Console.kill(name)
-                       self.prepareInstall()
-                       if len(self.cmdList):
-                               self.session.openWithCallback(self.runExecute, PluginManagerInfo, self.skin_path, self.cmdList)
-                       else:
-                               self.close()
+                       return(( _('Upgrading'), info, upgradepng, divpng))
 
-       def handleHelp(self):
-               if self.currList != "status":
-                       self.session.open(PluginManagerHelp, self.skin_path)
+       def exit(self):
+               self.close()
 
-       def setState(self,status = None):
-               if status:
-                       self.currList = "status"
-                       self.statuslist = []
-                       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"))
-                       if status == 'update':
-                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "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"))
-                               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"))
-                               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)
+       def process_all(self):
+               self.close((True,None))
 
-       def statusCallback(self, status, progress):
-               pass
+       def process_extensions(self):
+               self.list = []
+               if self.cmdlist is not None:
+                       for entry in self.cmdlist:
+                               cmd = entry[0]
+                               if entry[0] in (0,2):
+                                       self.list.append((entry))
+               self.close((False,self.list))
 
-       def selectionChanged(self):
-               current = self["list"].getCurrent()
-               self["status"].setText("")
-               if current:
-                       if self.currList == "packages":
-                               self["key_red"].setText(_("Back"))
-                               if current[4] == 'installed':
-                                       self["key_green"].setText(_("Remove"))
-                               elif current[4] == 'installable':
-                                       self["key_green"].setText(_("Install"))
-                               elif current[4] == 'remove':
-                                       self["key_green"].setText(_("Undo\nRemove"))
-                               elif current[4] == 'install':
-                                       self["key_green"].setText(_("Undo\nInstall"))
-                               self["key_yellow"].setText(_("View details"))
-                               self["key_blue"].setText("")
-                               if len(self.selectedFiles) == 0 and self.available_updates is not 0:
-                                       self["status"].setText(_("There are at least ") + str(self.available_updates) + _(" updates available."))
-                               elif len(self.selectedFiles) is not 0:
-                                       self["status"].setText(str(len(self.selectedFiles)) + _(" packages selected."))
-                               else:
-                                       self["status"].setText(_("There is nothing to be done."))
-                       elif self.currList == "category":
-                               self["key_red"].setText(_("Close"))
-                               self["key_green"].setText("")
-                               self["key_yellow"].setText("")
-                               self["key_blue"].setText("")
-                               if len(self.selectedFiles) == 0 and self.available_updates is not 0:
-                                       self["status"].setText(_("There are at least ") + str(self.available_updates) + _(" updates available."))
-                                       self["key_yellow"].setText(_("Update"))
-                               elif len(self.selectedFiles) is not 0:
-                                       self["status"].setText(str(len(self.selectedFiles)) + _(" packages selected."))
-                                       self["key_yellow"].setText(_("Process"))
-                               else:
-                                       self["status"].setText(_("There is nothing to be done."))
 
-       def getSelectionState(self, detailsFile):
-               for entry in self.selectedFiles:
-                       if entry[0] == detailsFile:
-                               return True
-               return False
+class PluginManagerHelp(Screen):
+       skin = """
+               <screen name="PluginManagerHelp" position="center,center" size="560,450" title="Plugin manager help" >
+                       <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="list" render="Listbox" position="5,50" size="550,350" scrollbarMode="showOnDemand" selectionDisabled="1">
+                               <convert type="TemplatedMultiContent">
+                                       {"template": [
+                                                       MultiContentEntryText(pos = (50, 0), size = (540, 26), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
+                                                       MultiContentEntryText(pos = (50, 27), size = (540, 23), font=1, flags = RT_HALIGN_LEFT, text = 1), # index 1 is the state
+                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 1), size = (48, 48), png = 2), # index 2 is the status pixmap
+                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 48), size = (550, 2), png = 3), # index 3 is the div pixmap
+                                               ],
+                                       "fonts": [gFont("Regular", 24),gFont("Regular", 22)],
+                                       "itemHeight": 50
+                                       }
+                               </convert>
+                       </widget>
+                       <ePixmap pixmap="skin_default/div-h.png" position="0,404" zPosition="10" size="560,2" transparent="1" alphatest="on" />
+                       <widget source="status" render="Label" position="5,408" zPosition="10" size="550,44" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+               </screen>"""
+
+       def __init__(self, session, plugin_path):
+               Screen.__init__(self, session)
+               self.session = session
+               self.skin_path = plugin_path
+
+               self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions"],
+               {
+                       "back": self.exit,
+                       "red": self.exit,
+               }, -1)
+
+               self.list = []
+               self["list"] = List(self.list)
+               self["key_red"] = StaticText(_("Close"))
+               self["status"] = StaticText(_("A small overview of the available icon states and actions."))
+
+               self.onShown.append(self.setWindowTitle)
+               self.onLayoutFinish.append(self.rebuildList)
+
+       def setWindowTitle(self):
+               self.setTitle(_("Plugin manager help"))
 
        def rebuildList(self):
-               self.setState('update')
-               if not PluginManager.lastDownloadDate or (time() - PluginManager.lastDownloadDate) > 3600:
-                       # Only update from internet once per hour
-                       PluginManager.lastDownloadDate = time()
-                       print "last update time > 1h"
-                       self.ipkg.startCmd(IpkgComponent.CMD_UPDATE)
-               else:
-                       print "last update time < 1h"
-                       self.startIpkgList()
+               self.list = []
+               self.list.append(self.buildEntryComponent('install'))
+               self.list.append(self.buildEntryComponent('installable'))
+               self.list.append(self.buildEntryComponent('installed'))
+               self.list.append(self.buildEntryComponent('remove'))
+               self['list'].setList(self.list)
+               self['list'].updateList(self.list)
 
-       def ipkgCallback(self, event, param):
-               if event == IpkgComponent.EVENT_ERROR:
-                       self.list_updating = False
-                       self.setState('error')
-               elif event == IpkgComponent.EVENT_DONE:
-                       self.startIpkgList()
-               pass
+       def buildEntryComponent(self, state):
+               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"))
 
-       def startIpkgList(self):
-               if self.list_updating:
-                       if not self.Console:
-                               self.Console = Console()
-                       cmd = "ipkg list"
-                       self.Console.ePopen(cmd, self.IpkgList_Finished)
+               if state == 'installed':
+                       return(( _('This plugin is installed.'), _('You can remove this plugin.'), installedpng, divpng))
+               elif state == 'installable':
+                       return(( _('This plugin is not installed.'), _('You can install this plugin.'), installablepng, divpng))
+               elif state == 'install':
+                       return(( _('This plugin will be installed.'), _('You can cancel the installation.'), installpng, divpng))
+               elif state == 'remove':
+                       return(( _('This plugin will be removed.'), _('You can cancel the removal.'), removepng, divpng))
 
-       def IpkgList_Finished(self, result, retval, extra_args = None):
-               if len(result):
-                       self.available_packetlist = []
-                       for x in result.splitlines():
-                               split = x.split(' - ')
-                               if not any(split[0].strip().endswith(x) for x in self.unwanted_extensions):
-                                       self.available_packetlist.append([split[0].strip(), split[1].strip(), split[2].strip()])
-               self.startInstallMetaPackage()
+       def exit(self):
+               self.close()
 
-       def startInstallMetaPackage(self):
-               if self.list_updating:
-                       self.list_updating = False
-                       if not self.Console:
-                               self.Console = Console()
-                       cmd = "ipkg install enigma2-meta" #dummy,will change probably"
-                       self.Console.ePopen(cmd, self.InstallMetaPackage_Finished)
-
-       def InstallMetaPackage_Finished(self, result, retval, extra_args = None):
-               if len(result):
-                       self.fillPackagesIndexList()
-               if not self.Console:
-                       self.Console = Console()
-               self.setState('sync')
-               cmd = "ipkg list_installed"
-               self.Console.ePopen(cmd, self.IpkgListInstalled_Finished)
 
-       def IpkgListInstalled_Finished(self, result, retval, extra_args = None):
-               if len(result):
-                       self.installed_packetlist = {}
-                       for x in result.splitlines():
-                               split = x.split(' - ')
-                               if not any(split[0].strip().endswith(x) for x in self.unwanted_extensions):
-                                       self.installed_packetlist[split[0].strip()] = split[1].strip()
-               self.countUpdates()
-               if self.currentSelectedTag is None:
-                       self.buildCategoryList()
-               else:
-                       self.buildPacketList(self.currentSelectedTag)
+class PluginDetails(Screen, DreamInfoHandler):
+       skin = """
+               <screen name="PluginDetails" position="center,center" size="600,440" title="Plugin details" >
+                       <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" />
+                       <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="author" render="Label" position="10,50" size="500,25" zPosition="10" font="Regular;21" transparent="1" />
+                       <widget name="statuspic" position="550,40" size="48,48" alphatest="on"/>
+                       <widget name="divpic" position="0,80" size="600,2" alphatest="on"/>
+                       <widget name="detailtext" position="10,90" size="270,330" zPosition="10" font="Regular;21" transparent="1" halign="left" valign="top"/>
+                       <widget name="screenshot" position="290,90" size="300,330" alphatest="on"/>
+               </screen>"""
+       def __init__(self, session, plugin_path, packagedata = None):
+               Screen.__init__(self, session)
+               self.skin_path = plugin_path
+               self.language = language.getLanguage()[:2] # getLanguage returns e.g. "fi_FI" for "language_country"
+               self.attributes = None
+               self.translatedAttributes = None
+               DreamInfoHandler.__init__(self, self.statusCallback, blocking = False, language = self.language)
+               self.directory = resolveFilename(SCOPE_METADIR)
+               if packagedata:
+                       self.pluginname = packagedata[0]
+                       self.details = packagedata[1]
+                       self.pluginstate = packagedata[4]
+                       self.statuspicinstance = packagedata[5]
+                       self.divpicinstance = packagedata[6]
+                       self.fillPackageDetails(self.details)
 
-       def countUpdates(self):
-               self.available_updates = 0
-               for package in self.packagesIndexlist[:]:
-                       attributes = package[0]["attributes"]
-                       packagename = attributes["packagename"]
-                       for x in self.available_packetlist:
-                               if x[0].strip() == packagename:
-                                       if self.installed_packetlist.has_key(packagename):
-                                               if self.installed_packetlist[packagename] != x[1].strip():
-                                                       self.available_updates +=1
+               self.thumbnail = ""
 
-       def handleCurrent(self):
-               current = self["list"].getCurrent()
-               if current:
-                       if self.currList == "category":
-                               self.currentSelectedIndex = self["list"].index
-                               selectedTag = current[2]
-                               self.buildPacketList(selectedTag)
-                       elif self.currList == "packages":
-                               if current[7] is not '':
-                                       idx = self["list"].getIndex()
-                                       detailsFile = self.list[idx][1]
-                                       if self.list[idx][7] == True:
-                                               for entry in self.selectedFiles:
-                                                       if entry[0] == detailsFile:
-                                                               self.selectedFiles.remove(entry)
-                                       else:
-                                               alreadyinList = False
-                                               for entry in self.selectedFiles:
-                                                       if entry[0] == detailsFile:
-                                                               alreadyinList = True
-                                               if not alreadyinList:
-                                                       self.selectedFiles.append((detailsFile,current[4],current[3]))
-                                       if current[4] == 'installed':
-                                               self.list[idx] = self.buildEntryComponent(current[0], current[1], current[2], current[3], 'remove', True)
-                                       elif current[4] == 'installable':
-                                               self.list[idx] = self.buildEntryComponent(current[0], current[1], current[2], current[3], 'install', True)
-                                       elif current[4] == 'remove':
-                                               self.list[idx] = self.buildEntryComponent(current[0], current[1], current[2], current[3], 'installed', False)
-                                       elif current[4] == 'install':
-                                               self.list[idx] = self.buildEntryComponent(current[0], current[1], current[2], current[3], 'installable',False)
-                                       self["list"].setList(self.list)
-                                       self["list"].setIndex(idx)
-                                       self["list"].updateList(self.list)
-                                       self.selectionChanged()
+               self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions"],
+               {
+                       "back": self.exit,
+                       "red": self.exit,
+                       "green": self.go,
+                       "up": self.pageUp,
+                       "down": self.pageDown,
+                       "left": self.pageUp,
+                       "right": self.pageDown,
+               }, -1)
 
-       def handleSelected(self):
-               current = self["list"].getCurrent()
-               if current:
-                       if self.currList == "packages":
-                               if current[7] is not '':
-                                       detailsfile = self.directory[0] + "/" + current[1]
-                                       if (os_path.exists(detailsfile) == True):
-                                               self.session.openWithCallback(self.detailsClosed, PluginDetails, self.skin_path, current)
-                                       else:
-                                               self.session.open(MessageBox, _("Sorry, no Details available!"), MessageBox.TYPE_INFO, timeout = 10)
-                       elif self.currList == "category":
-                               self.prepareInstall()
-                               if len(self.cmdList):
-                                       self.session.openWithCallback(self.runExecute, PluginManagerInfo, self.skin_path, self.cmdList)
+               self["key_red"] = StaticText(_("Close"))
+               self["key_green"] = StaticText("")
+               self["author"] = StaticText()
+               self["statuspic"] = Pixmap()
+               self["divpic"] = Pixmap()
+               self["screenshot"] = Pixmap()
+               self["detailtext"] = ScrollLabel()
 
-       def detailsClosed(self, result):
-               if result:
-                       if not self.Console:
-                               self.Console = Console()
-                       self.setState('sync')
-                       PluginManager.lastDownloadDate = time()
-                       self.selectedFiles = []
-                       cmd = "ipkg update"
-                       self.Console.ePopen(cmd, self.InstallMetaPackage_Finished)
+               self["statuspic"].hide()
+               self["screenshot"].hide()
+               self["divpic"].hide()
 
-       def buildEntryComponent(self, name, details, description, packagename, state, selected = False):
-               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
-               if state == 'installed':
-                       installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "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"))
-                       return((name, details, description, packagename, state, installablepng, divpng, selected))
-               elif state == 'remove':
-                       removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "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"))
-                       return((name, details, description, packagename, state, installpng, divpng, selected))
+               self.package = self.packageDetails[0]
+               if self.package[0].has_key("attributes"):
+                       self.attributes = self.package[0]["attributes"]
+               if self.package[0].has_key("translation"):
+                       self.translatedAttributes = self.package[0]["translation"]
 
-       def buildPacketList(self, categorytag = None):
-               if categorytag is not None:
-                       self.currList = "packages"
-                       self.currentSelectedTag = categorytag
-                       self.packetlist = []
-                       for package in self.packagesIndexlist[:]:
-                               prerequisites = package[0]["prerequisites"]
-                               if prerequisites.has_key("tag"):
-                                       for foundtag in prerequisites["tag"]:
-                                               if categorytag == foundtag:
-                                                       attributes = package[0]["attributes"]
-                                                       if attributes.has_key("packagetype"):
-                                                               if attributes["packagetype"] == "internal":
-                                                                       continue
-                                                               self.packetlist.append([attributes["name"], attributes["details"], attributes["shortdescription"], attributes["packagename"]])
-                                                       else:
-                                                               self.packetlist.append([attributes["name"], attributes["details"], attributes["shortdescription"], attributes["packagename"]])
-                       self.list = []
-                       for x in self.packetlist:
-                               status = ""
-                               selectState = self.getSelectionState(x[1].strip())
-                               if self.installed_packetlist.has_key(x[3].strip()):
-                                       if selectState == True:
-                                               status = "remove"
-                                       else:
-                                               status = "installed"
-                                       self.list.append(self.buildEntryComponent(x[0].strip(), x[1].strip(), x[2].strip(), x[3].strip(), status, selected = selectState))
-                               else:
-                                       if selectState == True:
-                                               status = "install"
-                                       else:
-                                               status = "installable"
-                                       self.list.append(self.buildEntryComponent(x[0].strip(), x[1].strip(), x[2].strip(), x[3].strip(), status, selected = selectState))
-                       if len(self.list):
-                               self.list.sort(key=lambda x: x[0])
-                       self["list"].style = "default"
-                       self['list'].setList(self.list)
-                       self["list"].updateList(self.list)
-                       self.selectionChanged()
+               self.cmdList = []
+               self.oktext = _("\nAfter pressing OK, please wait!")
+               self.picload = ePicLoad()
+               self.picload.PictureData.get().append(self.paintScreenshotPixmapCB)
+               self.onShown.append(self.setWindowTitle)
+               self.onLayoutFinish.append(self.setInfos)
+
+       def setWindowTitle(self):
+               self.setTitle(_("Details for extension: " + self.pluginname))
+
+       def exit(self):
+               self.close(False)
+
+       def pageUp(self):
+               self["detailtext"].pageUp()
+
+       def pageDown(self):
+               self["detailtext"].pageDown()
+
+       def statusCallback(self, status, progress):
+               pass
+
+       def setInfos(self):
+               if self.translatedAttributes.has_key("name"):
+                       self.pluginname = self.translatedAttributes["name"]
+               elif self.attributes.has_key("name"):
+                       self.pluginname = self.attributes["name"]
+               else:
+                       self.pluginname = _("unknown")
+
+               if self.translatedAttributes.has_key("author"):
+                       self.author = self.translatedAttributes["author"]
+               elif self.attributes.has_key("author"):
+                       self.author = self.attributes["author"]
+               else:
+                       self.author = _("unknown")
+
+               if self.translatedAttributes.has_key("description"):
+                       self.description = self.translatedAttributes["description"]
+               elif self.attributes.has_key("description"):
+                       self.description = self.attributes["description"]
+               else:
+                       self.description = _("No description available.")
+
+               if self.translatedAttributes.has_key("screenshot"):
+                       self.loadThumbnail(self.translatedAttributes)
+               else:
+                       self.loadThumbnail(self.attributes)
+
+               self["author"].setText(_("Author: ") + self.author)
+               self["detailtext"].setText(self.description.strip())
+               if self.pluginstate in ('installable', 'install'):
+                       self["key_green"].setText(_("Install"))
+               else:
+                       self["key_green"].setText(_("Remove"))
+
+       def loadThumbnail(self, entry):
+               thumbnailUrl = None
+               if entry.has_key("screenshot"):
+                       thumbnailUrl = entry["screenshot"]
+               if thumbnailUrl is not None:
+                       self.thumbnail = "/tmp/" + thumbnailUrl.split('/')[-1]
+                       print "[PluginDetails] downloading screenshot " + thumbnailUrl + " to " + self.thumbnail
+                       client.downloadPage(thumbnailUrl,self.thumbnail).addCallback(self.setThumbnail).addErrback(self.fetchFailed)
+               else:
+                       self.setThumbnail(noScreenshot = True)
+
+       def setThumbnail(self, noScreenshot = False):
+               if not noScreenshot:
+                       filename = self.thumbnail
+               else:
+                       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"))
+               self.picload.startDecode(filename)
+
+               if self.statuspicinstance != None:
+                       self["statuspic"].instance.setPixmap(self.statuspicinstance.__deref__())
+                       self["statuspic"].show()
+               if self.divpicinstance != None:
+                       self["divpic"].instance.setPixmap(self.divpicinstance.__deref__())
+                       self["divpic"].show()
+
+       def paintScreenshotPixmapCB(self, picInfo=None):
+               ptr = self.picload.getData()
+               if ptr != None:
+                       self["screenshot"].instance.setPixmap(ptr.__deref__())
+                       self["screenshot"].show()
+               else:
+                       self.setThumbnail(noScreenshot = True)
+
+       def go(self):
+               if self.attributes.has_key("package"):
+                       self.packagefiles = self.attributes["package"]
+               self.cmdList = []
+               if self.pluginstate in ('installed', 'remove'):
+                       if self.packagefiles:
+                               for package in self.packagefiles[:]:
+                                       self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": package["name"] }))
+                                       if len(self.cmdList):
+                                               self.session.openWithCallback(self.runRemove, MessageBox, _("Do you want to remove the package:\n") + self.pluginname + "\n" + self.oktext)
+               else:
+                       if self.packagefiles:
+                               for package in self.packagefiles[:]:
+                                       self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": package["name"] }))
+                                       if len(self.cmdList):
+                                               self.session.openWithCallback(self.runUpgrade, MessageBox, _("Do you want to install the package:\n") + self.pluginname + "\n" + self.oktext)
+
+       def runUpgrade(self, result):
+               if result:
+                       self.session.openWithCallback(self.runUpgradeFinished, Ipkg, cmdList = self.cmdList)
+
+       def runUpgradeFinished(self):
+               self.session.openWithCallback(self.UpgradeReboot, MessageBox, _("Installation finished.") +" "+_("Do you want to reboot your Dreambox?"), MessageBox.TYPE_YESNO)
+
+       def UpgradeReboot(self, result):
+               if result is None:
+                       return
+               if result is False:
+                       self.close(True)
+               if result:
+                       quitMainloop(3)
+
+       def runRemove(self, result):
+               if result:
+                       self.session.openWithCallback(self.runRemoveFinished, Ipkg, cmdList = self.cmdList)
+
+       def runRemoveFinished(self):
+               self.session.openWithCallback(self.RemoveReboot, MessageBox, _("Remove finished.") +" "+_("Do you want to reboot your Dreambox?"), MessageBox.TYPE_YESNO)
+
+       def RemoveReboot(self, result):
+               if result is None:
+                       return
+               if result is False:
+                       self.close(True)
+               if result:
+                       quitMainloop(3)
+
+       def reloadPluginlist(self):
+               plugins.readPluginList(resolveFilename(SCOPE_PLUGINS))
+
+       def fetchFailed(self,string):
+               self.setThumbnail(noScreenshot = True)
+               print "[PluginDetails] fetch failed " + string.getErrorMessage()
+
+
+class UpdatePlugin(Screen):
+       skin = """
+               <screen name="UpdatePlugin" position="center,center" size="550,200" title="Software update" >
+                       <widget name="activityslider" position="0,0" size="550,5"  />
+                       <widget name="slider" position="0,150" size="550,30"  />
+                       <widget source="package" render="Label" position="10,30" size="540,20" font="Regular;18" halign="center" valign="center" backgroundColor="#25062748" transparent="1" />
+                       <widget source="status" render="Label" position="10,60" size="540,45" font="Regular;20" halign="center" valign="center" backgroundColor="#25062748" transparent="1" />
+               </screen>"""
+
+       def __init__(self, session, args = None):
+               Screen.__init__(self, session)
+
+               self.sliderPackages = { "dreambox-dvb-modules": 1, "enigma2": 2, "tuxbox-image-info": 3 }
+
+               self.slider = Slider(0, 4)
+               self["slider"] = self.slider
+               self.activityslider = Slider(0, 100)
+               self["activityslider"] = self.activityslider
+               self.status = StaticText(_("Upgrading Dreambox... Please wait"))
+               self["status"] = self.status
+               self.package = StaticText()
+               self["package"] = self.package
+
+               self.packages = 0
+               self.error = 0
+
+               self.activity = 0
+               self.activityTimer = eTimer()
+               self.activityTimer.callback.append(self.doActivityTimer)
+               self.activityTimer.start(100, False)
+
+               self.ipkg = IpkgComponent()
+               self.ipkg.addCallback(self.ipkgCallback)
+
+               self.updating = True
+               self.package.setText(_("Package list update"))
+               self.ipkg.startCmd(IpkgComponent.CMD_UPDATE)
+
+               self["actions"] = ActionMap(["WizardActions"], 
+               {
+                       "ok": self.exit,
+                       "back": self.exit
+               }, -1)
+
+       def doActivityTimer(self):
+               self.activity += 1
+               if self.activity == 100:
+                       self.activity = 0
+               self.activityslider.setValue(self.activity)
+
+       def ipkgCallback(self, event, param):
+               if event == IpkgComponent.EVENT_DOWNLOAD:
+                       self.status.setText(_("Downloading"))
+               elif event == IpkgComponent.EVENT_UPGRADE:
+                       if self.sliderPackages.has_key(param):
+                               self.slider.setValue(self.sliderPackages[param])
+                       self.package.setText(param)
+                       self.status.setText(_("Upgrading"))
+                       self.packages += 1
+               elif event == IpkgComponent.EVENT_INSTALL:
+                       self.package.setText(param)
+                       self.status.setText(_("Installing"))
+                       self.packages += 1
+               elif event == IpkgComponent.EVENT_CONFIGURING:
+                       self.package.setText(param)
+                       self.status.setText(_("Configuring"))
+               elif event == IpkgComponent.EVENT_MODIFIED:
+                       self.session.openWithCallback(
+                               self.modificationCallback,
+                               MessageBox,
+                               _("A configuration file (%s) was modified since Installation.\nDo you want to keep your version?") % (param)
+                       )
+               elif event == IpkgComponent.EVENT_ERROR:
+                       self.error += 1
+               elif event == IpkgComponent.EVENT_DONE:
+                       if self.updating:
+                               self.updating = False
+                               self.ipkg.startCmd(IpkgComponent.CMD_UPGRADE, args = {'test_only': False})
+                       elif self.error == 0:
+                               self.slider.setValue(4)
+                               
+                               self.activityTimer.stop()
+                               self.activityslider.setValue(0)
+                               
+                               self.package.setText("")
+                               self.status.setText(_("Done - Installed or upgraded %d packages") % self.packages)
+                       else:
+                               self.activityTimer.stop()
+                               self.activityslider.setValue(0)
+                               error = _("your dreambox might be unusable now. Please consult the manual for further assistance before rebooting your dreambox.")
+                               if self.packages == 0:
+                                       error = _("No packages were upgraded yet. So you can check your network and try again.")
+                               if self.updating:
+                                       error = _("Your dreambox isn't connected to the internet properly. Please check it and try again.")
+                               self.status.setText(_("Error") +  " - " + error)
+               #print event, "-", param
+               pass
+
+       def modificationCallback(self, res):
+               self.ipkg.write(res and "N" or "Y")
+
+       def exit(self):
+               if not self.ipkg.isRunning():
+                       if self.packages != 0 and self.error == 0:
+                               self.session.openWithCallback(self.exitAnswer, MessageBox, _("Upgrade finished.") +" "+_("Do you want to reboot your Dreambox?"))
+                       else:
+                               self.close()
+
+       def exitAnswer(self, result):
+               if result is not None and result:
+                       quitMainloop(2)
+               self.close()
+
+
+
+class IPKGMenu(Screen):
+       skin = """
+               <screen name="IPKGMenu" position="center,center" size="560,400" title="Select upgrade source to edit." >
+                       <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" />
+                       <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 name="filelist" position="5,50" size="550,340" scrollbarMode="showOnDemand" />
+               </screen>"""
+
+       def __init__(self, session, plugin_path):
+               Screen.__init__(self, session)
+               self.skin_path = plugin_path
+               
+               self["key_red"] = StaticText(_("Close"))
+               self["key_green"] = StaticText(_("Edit"))
 
-       def buildCategoryList(self):
-               self.currList = "category"
-               self.categories = []
-               self.categoryList = []
-               for package in self.packagesIndexlist[:]:
-                       prerequisites = package[0]["prerequisites"]
-                       if prerequisites.has_key("tag"):
-                               for foundtag in prerequisites["tag"]:
-                                       attributes = package[0]["attributes"]
-                                       if foundtag not in self.categories:
-                                               self.categories.append(foundtag)
-                                               self.categoryList.append(self.buildCategoryComponent(foundtag))
-               self.categoryList.sort(key=lambda x: x[0])
-               self["list"].style = "category"
-               self['list'].setList(self.categoryList)
-               self["list"].updateList(self.categoryList)
-               self.selectionChanged()
+               self.sel = []
+               self.val = []
+               self.entry = False
+               self.exe = False
+               
+               self.path = ""
 
-       def buildCategoryComponent(self, tag = None):
-               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
-               if tag is not None:
-                       if tag == 'System':
-                               return(( _("System"), _("View list of available system extensions" ), tag, divpng ))
-                       elif tag == 'Skin':
-                               return(( _("Skins"), _("View list of available skins" ), tag, divpng ))
-                       elif tag == 'Recording':
-                               return(( _("Recordings"), _("View list of available recording extensions" ), tag, divpng ))
-                       elif tag == 'Network':
-                               return(( _("Network"), _("View list of available networking extensions" ), tag, divpng ))
-                       elif tag == 'CI':
-                               return(( _("CommonInterface"), _("View list of available CommonInterface extensions" ), tag, divpng ))
-                       elif tag == 'Default':
-                               return(( _("Default Settings"), _("View list of available default settings" ), tag, divpng ))
-                       elif tag == 'SAT':
-                               return(( _("Satteliteequipment"), _("View list of available Satteliteequipment extensions." ), tag, divpng ))
-                       elif tag == 'Software':
-                               return(( _("Software"), _("View list of available software extensions" ), tag, divpng ))
-                       elif tag == 'Multimedia':
-                               return(( _("Multimedia"), _("View list of available multimedia extensions." ), tag, divpng ))
-                       elif tag == 'Display':
-                               return(( _("Display and Userinterface"), _("View list of available Display and Userinterface extensions." ), tag, divpng ))
-                       elif tag == 'EPG':
-                               return(( _("Electronic Program Guide"), _("View list of available EPG extensions." ), tag, divpng ))
-                       elif tag == 'Communication':
-                               return(( _("Communication"), _("View list of available communication extensions." ), tag, divpng ))
-                       else: # dynamically generate non existent tags
-                               return(( str(tag), _("View list of available ") + str(tag) + _(" extensions." ), tag, divpng ))
+               self["actions"] = NumberActionMap(["SetupActions"],
+               {
+                       "ok": self.KeyOk,
+                       "cancel": self.keyCancel
+               }, -1)
 
-       def prepareInstall(self):
-               self.cmdList = []
-               if self.available_updates > 0:
-                       self.cmdList.append((IpkgComponent.CMD_UPGRADE, { "test_only": False }))
-               if self.selectedFiles and len(self.selectedFiles):
-                       for plugin in self.selectedFiles:
-                               detailsfile = self.directory[0] + "/" + plugin[0]
-                               if (os_path.exists(detailsfile) == True):
-                                       self.fillPackageDetails(plugin[0])
-                                       self.package = self.packageDetails[0]
-                                       if self.package[0].has_key("attributes"):
-                                               self.attributes = self.package[0]["attributes"]
-                                       if self.attributes.has_key("package"):
-                                               self.packagefiles = self.attributes["package"]
-                                       if plugin[1] == 'installed':
-                                               if self.packagefiles:
-                                                       for package in self.packagefiles[:]:
-                                                               self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": package["name"] }))
-                                               else:
-                                                       self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": plugin[2] }))
-                                       else:
-                                               if self.packagefiles:
-                                                       for package in self.packagefiles[:]:
-                                                               self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": package["name"] }))
-                                               else:
-                                                       self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": plugin[2] }))
-                               else:
-                                       if plugin[1] == 'installed':
-                                               self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": plugin[2] }))
-                                       else:
-                                               self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": plugin[2] }))
+               self["shortcuts"] = ActionMap(["ShortcutActions"],
+               {
+                       "red": self.keyCancel,
+                       "green": self.KeyOk,
+               })
+               self.flist = []
+               self["filelist"] = MenuList(self.flist)
+               self.fill_list()
+               self.onLayoutFinish.append(self.layoutFinished)
 
-       def runExecute(self, result):
-               if result:
-                       self.session.openWithCallback(self.runExecuteFinished, Ipkg, cmdList = self.cmdList)
-               else:
-                       self.close()
+       def layoutFinished(self):
+               self.setWindowTitle()
 
-       def runExecuteFinished(self):
-               self.session.openWithCallback(self.ExecuteReboot, MessageBox, _("Install or remove finished.") +" "+_("Do you want to reboot your Dreambox?"), MessageBox.TYPE_YESNO)
+       def setWindowTitle(self):
+               self.setTitle(_("Select upgrade source to edit."))
 
-       def ExecuteReboot(self, result):
-               if result is None:
+       def fill_list(self):
+               self.flist = []
+               self.path = '/etc/ipkg/'
+               if (os_path.exists(self.path) == False):
+                       self.entry = False
                        return
-               if result is False:
-                       self.reloadPluginlist()
-                       self.detailsClosed(True)
-               if result:
-                       quitMainloop(3)
+               for file in listdir(self.path):
+                       if (file.endswith(".conf")):
+                               if file != 'arch.conf':
+                                       self.flist.append((file))
+                                       self.entry = True
+                                       self["filelist"].l.setList(self.flist)
 
-       def reloadPluginlist(self):
-               plugins.readPluginList(resolveFilename(SCOPE_PLUGINS))
+       def KeyOk(self):
+               if (self.exe == False) and (self.entry == True):
+                       self.sel = self["filelist"].getCurrent()
+                       self.val = self.path + self.sel
+                       self.session.open(IPKGSource, self.val)
 
+       def keyCancel(self):
+               self.close()
 
-class PluginManagerInfo(Screen):
+       def Exit(self):
+               self.close()
+
+
+class IPKGSource(Screen):
        skin = """
-               <screen name="PluginManagerInfo" position="center,center" size="560,440" title="Plugin manager activity information" >
+               <screen name="IPKGSource" position="center,center" size="560,80" title="Edit upgrade source url." >
                        <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" />
                        <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="list" render="Listbox" position="5,50" size="550,350" scrollbarMode="showOnDemand" selectionDisabled="1">
-                               <convert type="TemplatedMultiContent">
-                                       {"template": [
-                                                       MultiContentEntryText(pos = (50, 1), size = (150, 24), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
-                                                       MultiContentEntryText(pos = (50, 25), size = (540, 24), font=1, flags = RT_HALIGN_LEFT, text = 1), # index 1 is the state
-                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 1), size = (48, 48), png = 2), # index 2 is the status pixmap
-                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 49), size = (550, 2), png = 3), # index 3 is the div pixmap
-                                               ],
-                                       "fonts": [gFont("Regular", 22),gFont("Regular", 18)],
-                                       "itemHeight": 52
-                                       }
-                               </convert>
-                       </widget>
-                       <ePixmap pixmap="skin_default/div-h.png" position="0,410" zPosition="10" size="560,2" transparent="1" alphatest="on" />
-                       <widget source="status" render="Label" position="5,420" zPosition="10" size="550,30" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+                       <widget name="text" position="5,50" size="550,25" font="Regular;20" backgroundColor="background" foregroundColor="#cccccc" />
                </screen>"""
 
-       def __init__(self, session, plugin_path, cmdlist = None):
+       def __init__(self, session, configfile = None):
                Screen.__init__(self, session)
                self.session = session
-               self.skin_path = plugin_path
-               self.cmdlist = cmdlist
+               self.configfile = configfile
+               text = ""
+               if self.configfile:
+                       try:
+                               fp = file(configfile, 'r')
+                               sources = fp.readlines()
+                               if sources:
+                                       text = sources[0]
+                               fp.close()
+                       except IOError:
+                               pass
 
-               self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions"],
-               {
-                       "ok": self.process,
-                       "back": self.exit,
-                       "red": self.exit,
-                       "green": self.process,
-               }, -1)
+               desk = getDesktop(0)
+               x= int(desk.size().width())
+               y= int(desk.size().height())
 
-               self.list = []
-               self["list"] = List(self.list)
                self["key_red"] = StaticText(_("Cancel"))
-               self["key_green"] = StaticText(_("Continue"))
-               self["status"] = StaticText(_("Following tasks will be done after you press continue!"))
+               self["key_green"] = StaticText(_("Save"))
 
-               self.onShown.append(self.setWindowTitle)
-               self.onLayoutFinish.append(self.rebuildList)
+               if (y>=720):
+                       self["text"] = Input(text, maxSize=False, type=Input.TEXT)
+               else:
+                       self["text"] = Input(text, maxSize=False, visible_width = 55, type=Input.TEXT)
 
-       def setWindowTitle(self):
-               self.setTitle(_("Plugin manager activity information"))
+               self["actions"] = NumberActionMap(["WizardActions", "InputActions", "TextEntryActions", "KeyboardInputActions","ShortcutActions"], 
+               {
+                       "ok": self.go,
+                       "back": self.close,
+                       "red": self.close,
+                       "green": self.go,
+                       "left": self.keyLeft,
+                       "right": self.keyRight,
+                       "home": self.keyHome,
+                       "end": self.keyEnd,
+                       "deleteForward": self.keyDeleteForward,
+                       "deleteBackward": self.keyDeleteBackward,
+                       "1": self.keyNumberGlobal,
+                       "2": self.keyNumberGlobal,
+                       "3": self.keyNumberGlobal,
+                       "4": self.keyNumberGlobal,
+                       "5": self.keyNumberGlobal,
+                       "6": self.keyNumberGlobal,
+                       "7": self.keyNumberGlobal,
+                       "8": self.keyNumberGlobal,
+                       "9": self.keyNumberGlobal,
+                       "0": self.keyNumberGlobal
+               }, -1)
 
-       def rebuildList(self):
-               self.list = []
-               if self.cmdlist is not None:
-                       for entry in self.cmdlist:
-                               action = ""
-                               info = ""
-                               cmd = entry[0]
-                               if cmd == 0:
-                                       action = 'install'
-                               elif cmd == 2:
-                                       action = 'remove'
-                               else:
-                                       action = 'upgrade'
-                               args = entry[1]
-                               if cmd == 0:
-                                       info = args['package']
-                               elif cmd == 2:
-                                       info = args['package']
-                               else:
-                                       info = _("Dreambox software because updates are available.")
+               self.onLayoutFinish.append(self.layoutFinished)
 
-                               self.list.append(self.buildEntryComponent(action,info))
-                       self['list'].setList(self.list)
-                       self['list'].updateList(self.list)
+       def layoutFinished(self):
+               self.setWindowTitle()
+               self["text"].right()
 
-       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"))
-               if action == 'install':
-                       return(( _('Installing'), info, installpng, divpng))
-               elif action == 'remove':
-                       return(( _('Removing'), info, removepng, divpng))
-               else:
-                       return(( _('Upgrading'), info, upgradepng, divpng))
+       def setWindowTitle(self):
+               self.setTitle(_("Edit upgrade source url."))
 
-       def exit(self):
-               self.close(False)
+       def go(self):
+               text = self["text"].getText()
+               if text:
+                       fp = file(self.configfile, 'w')
+                       fp.write(text)
+                       fp.write("\n")
+                       fp.close()
+               self.close()
 
-       def process(self):
-               self.close(True)
+       def keyLeft(self):
+               self["text"].left()
+       
+       def keyRight(self):
+               self["text"].right()
+       
+       def keyHome(self):
+               self["text"].home()
+       
+       def keyEnd(self):
+               self["text"].end()
+       
+       def keyDeleteForward(self):
+               self["text"].delete()
+       
+       def keyDeleteBackward(self):
+               self["text"].deleteBackward()
+       
+       def keyNumberGlobal(self, number):
+               self["text"].number(number)
 
 
-class PluginManagerHelp(Screen):
+class PacketManager(Screen):
        skin = """
-               <screen name="PluginManagerHelp" position="center,center" size="560,440" title="Plugin manager help" >
+               <screen name="PacketManager" position="center,center" size="530,420" title="Packet manager" >
                        <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" />
                        <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="list" render="Listbox" position="5,50" size="550,350" scrollbarMode="showOnDemand" selectionDisabled="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="list" render="Listbox" position="5,50" size="520,365" scrollbarMode="showOnDemand">
                                <convert type="TemplatedMultiContent">
                                        {"template": [
-                                                       MultiContentEntryText(pos = (50, 1), size = (540, 24), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
-                                                       MultiContentEntryText(pos = (50, 25), size = (540, 24), font=1, flags = RT_HALIGN_LEFT, text = 1), # index 1 is the state
-                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 1), size = (48, 48), png = 2), # index 2 is the status pixmap
-                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 49), size = (550, 2), png = 3), # index 3 is the div pixmap
+                                                       MultiContentEntryText(pos = (5, 1), size = (440, 28), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
+                                                       MultiContentEntryText(pos = (5, 26), size = (440, 20), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is the description
+                                                       MultiContentEntryPixmapAlphaTest(pos = (445, 2), size = (48, 48), png = 4), # index 4 is the status pixmap
+                                                       MultiContentEntryPixmapAlphaTest(pos = (5, 50), size = (510, 2), png = 5), # index 4 is the div pixmap
                                                ],
-                                       "fonts": [gFont("Regular", 22),gFont("Regular", 18)],
+                                       "fonts": [gFont("Regular", 22),gFont("Regular", 14)],
                                        "itemHeight": 52
                                        }
                                </convert>
                        </widget>
-                       <ePixmap pixmap="skin_default/div-h.png" position="0,410" zPosition="10" size="550,2" transparent="1" alphatest="on" />
-                       <widget source="status" render="Label" position="5,420" zPosition="10" size="550,30" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
                </screen>"""
-
-       def __init__(self, session, plugin_path):
+               
+       def __init__(self, session, plugin_path, args = None):
                Screen.__init__(self, session)
                self.session = session
                self.skin_path = plugin_path
 
-               self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions"],
+               self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions"], 
                {
+                       "ok": self.go,
                        "back": self.exit,
                        "red": self.exit,
+                       "green": self.reload,
                }, -1)
-
+               
                self.list = []
+               self.statuslist = []
                self["list"] = List(self.list)
                self["key_red"] = StaticText(_("Close"))
-               self["status"] = StaticText(_("A small overview of the available icon states and actions."))
+               self["key_green"] = StaticText(_("Reload"))
+
+               self.list_updating = True
+               self.packetlist = []
+               self.installed_packetlist = {}
+               self.Console = Console()
+               self.cmdList = []
+               self.cachelist = []
+               self.cache_ttl = 86400  #600 is default, 0 disables, Seconds cache is considered valid (24h should be ok for caching ipkgs)
+               self.cache_file = '/usr/lib/enigma2/python/Plugins/SystemPlugins/SoftwareManager/packetmanager.cache' #Path to cache directory   
+               self.oktext = _("\nAfter pressing OK, please wait!")
+               self.unwanted_extensions = ('-dbg', '-dev', '-doc', 'busybox')
 
+               self.ipkg = IpkgComponent()
+               self.ipkg.addCallback(self.ipkgCallback)
                self.onShown.append(self.setWindowTitle)
                self.onLayoutFinish.append(self.rebuildList)
 
-       def setWindowTitle(self):
-               self.setTitle(_("Plugin manager help"))
-
-       def rebuildList(self):
-               self.list = []
-               self.list.append(self.buildEntryComponent('install'))
-               self.list.append(self.buildEntryComponent('installable'))
-               self.list.append(self.buildEntryComponent('installed'))
-               self.list.append(self.buildEntryComponent('remove'))
-               self['list'].setList(self.list)
-               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"))
-
-               if state == 'installed':
-                       return(( _('This plugin is installed.'), _('You can remove this plugin.'), installedpng, divpng))
-               elif state == 'installable':
-                       return(( _('This plugin is not installed.'), _('You can install this plugin.'), installablepng, divpng))
-               elif state == 'install':
-                       return(( _('This plugin will be installed.'), _('You can cancel the installation.'), installpng, divpng))
-               elif state == 'remove':
-                       return(( _('This plugin will be removed.'), _('You can cancel the removal.'), removepng, divpng))
-
        def exit(self):
+               self.ipkg.stop()
+               if self.Console is not None:
+                       if len(self.Console.appContainers):
+                               for name in self.Console.appContainers.keys():
+                                       self.Console.kill(name)
                self.close()
 
-
-class PluginDetails(Screen, DreamInfoHandler):
-       skin = """
-               <screen name="PluginDetails" position="center,center" size="600,440" title="Plugin details" >
-                       <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" />
-                       <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="author" render="Label" position="10,50" size="500,25" zPosition="10" font="Regular;21" transparent="1" />
-                       <widget name="statuspic" position="550,40" size="48,48" alphatest="on"/>
-                       <widget name="divpic" position="0,80" size="600,2" alphatest="on"/>
-                       <widget name="detailtext" position="10,90" size="270,330" zPosition="10" font="Regular;21" transparent="1" halign="left" valign="top"/>
-                       <widget name="screenshot" position="290,90" size="300,330" alphatest="on"/>
-               </screen>"""
-       def __init__(self, session, plugin_path, packagedata = None):
-               Screen.__init__(self, session)
-               self.skin_path = plugin_path
-               self.language = language.getLanguage()[:2] # getLanguage returns e.g. "fi_FI" for "language_country"
-               self.attributes = None
-               self.translatedAttributes = None
-               DreamInfoHandler.__init__(self, self.statusCallback, blocking = False, language = self.language)
-               self.directory = resolveFilename(SCOPE_METADIR)
-               if packagedata:
-                       self.pluginname = packagedata[0]
-                       self.details = packagedata[1]
-                       self.pluginstate = packagedata[4]
-                       self.statuspicinstance = packagedata[5]
-                       self.divpicinstance = packagedata[6]
-                       self.fillPackageDetails(self.details)
-
-               self.thumbnail = ""
-
-               self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions"],
-               {
-                       "back": self.exit,
-                       "red": self.exit,
-                       "green": self.go,
-                       "up": self.pageUp,
-                       "down": self.pageDown,
-                       "left": self.pageUp,
-                       "right": self.pageDown,
-               }, -1)
-
-               self["key_red"] = StaticText(_("Close"))
-               self["key_green"] = StaticText("")
-               self["author"] = StaticText()
-               self["statuspic"] = Pixmap()
-               self["divpic"] = Pixmap()
-               self["screenshot"] = Pixmap()
-               self["detailtext"] = ScrollLabel()
-
-               self["statuspic"].hide()
-               self["screenshot"].hide()
-               self["divpic"].hide()
-
-               self.package = self.packageDetails[0]
-               if self.package[0].has_key("attributes"):
-                       self.attributes = self.package[0]["attributes"]
-               if self.package[0].has_key("translation"):
-                       self.translatedAttributes = self.package[0]["translation"]
-
-               self.cmdList = []
-               self.oktext = _("\nAfter pressing OK, please wait!")
-               self.picload = ePicLoad()
-               self.picload.PictureData.get().append(self.paintScreenshotPixmapCB)
-               self.onShown.append(self.setWindowTitle)
-               self.onLayoutFinish.append(self.setInfos)
-
+       def reload(self):
+               if (os_path.exists(self.cache_file) == True):
+                       remove(self.cache_file)
+                       self.list_updating = True
+                       self.rebuildList()
+                       
        def setWindowTitle(self):
-               self.setTitle(_("Package details for: " + self.pluginname))
-
-       def exit(self):
-               self.close(False)
-
-       def pageUp(self):
-               self["detailtext"].pageUp()
-
-       def pageDown(self):
-               self["detailtext"].pageDown()
-
-       def statusCallback(self, status, progress):
-               pass
-
-       def setInfos(self):
-               if self.translatedAttributes.has_key("name"):
-                       self.pluginname = self.translatedAttributes["name"]
-               elif self.attributes.has_key("name"):
-                       self.pluginname = self.attributes["name"]
-               else:
-                       self.pluginname = _("unknown")
-
-               if self.translatedAttributes.has_key("author"):
-                       self.author = self.translatedAttributes["author"]
-               elif self.attributes.has_key("author"):
-                       self.author = self.attributes["author"]
-               else:
-                       self.author = _("unknown")
-
-               if self.translatedAttributes.has_key("description"):
-                       self.description = self.translatedAttributes["description"]
-               elif self.attributes.has_key("description"):
-                       self.description = self.attributes["description"]
-               else:
-                       self.description = _("No description available.")
-
-               if self.translatedAttributes.has_key("screenshot"):
-                       self.loadThumbnail(self.translatedAttributes)
-               else:
-                       self.loadThumbnail(self.attributes)
-
-               self["author"].setText(_("Author: ") + self.author)
-               self["detailtext"].setText(self.description.strip())
-               if self.pluginstate == 'installable':
-                       self["key_green"].setText(_("Install"))
-               else:
-                       self["key_green"].setText(_("Remove"))
-
-       def loadThumbnail(self, entry):
-               thumbnailUrl = None
-               if entry.has_key("screenshot"):
-                       thumbnailUrl = entry["screenshot"]
-               if thumbnailUrl is not None:
-                       self.thumbnail = "/tmp/" + thumbnailUrl.split('/')[-1]
-                       print "[PluginDetails] downloading screenshot " + thumbnailUrl + " to " + self.thumbnail
-                       client.downloadPage(thumbnailUrl,self.thumbnail).addCallback(self.setThumbnail).addErrback(self.fetchFailed)
-               else:
-                       self.setThumbnail(noScreenshot = True)
-
-       def setThumbnail(self, noScreenshot = False):
-               if not noScreenshot:
-                       filename = self.thumbnail
-               else:
-                       filename = resolveFilename(SCOPE_PLUGINS, "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"))
-               self.picload.startDecode(filename)
-
-               if self.statuspicinstance != None:
-                       self["statuspic"].instance.setPixmap(self.statuspicinstance.__deref__())
-                       self["statuspic"].show()
-               if self.divpicinstance != None:
-                       self["divpic"].instance.setPixmap(self.divpicinstance.__deref__())
-                       self["divpic"].show()
-
-       def paintScreenshotPixmapCB(self, picInfo=None):
-               ptr = self.picload.getData()
-               if ptr != None:
-                       self["screenshot"].instance.setPixmap(ptr.__deref__())
-                       self["screenshot"].show()
-               else:
-                       self.setThumbnail(noScreenshot = True)
-
-       def go(self):
-               if self.attributes.has_key("package"):
-                       self.packagefiles = self.attributes["package"]
-               self.cmdList = []
-               if self.pluginstate == 'installed':
-                       if self.packagefiles:
-                               for package in self.packagefiles[:]:
-                                       self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": package["name"] }))
-                                       if len(self.cmdList):
-                                               self.session.openWithCallback(self.runRemove, MessageBox, _("Do you want to remove the package:\n") + self.pluginname + "\n" + self.oktext)
-               else:
-                       if self.packagefiles:
-                               for package in self.packagefiles[:]:
-                                       self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": package["name"] }))
-                                       if len(self.cmdList):
-                                               self.session.openWithCallback(self.runUpgrade, MessageBox, _("Do you want to install the package:\n") + self.pluginname + "\n" + self.oktext)
-
-       def runUpgrade(self, result):
-               if result:
-                       self.session.openWithCallback(self.runUpgradeFinished, Ipkg, cmdList = self.cmdList)
+               self.setTitle(_("Packet manager"))
 
-       def runUpgradeFinished(self):
-               self.session.openWithCallback(self.UpgradeReboot, MessageBox, _("Installation finished.") +" "+_("Do you want to reboot your Dreambox?"), MessageBox.TYPE_YESNO)
+       def setStatus(self,status = None):
+               if status:
+                       self.statuslist = []
+                       divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png"))
+                       if status == 'update':
+                               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_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)                           
 
-       def UpgradeReboot(self, result):
-               if result is None:
-                       return
-               if result is False:
-                       self.close(True)
-               if result:
-                       quitMainloop(3)
+       def rebuildList(self):
+               self.setStatus('update')
+               self.inv_cache = 0
+               self.vc = valid_cache(self.cache_file, self.cache_ttl)
+               if self.cache_ttl > 0 and self.vc != 0:
+                       try:
+                               self.buildPacketList()
+                       except:
+                               self.inv_cache = 1
+               if self.cache_ttl == 0 or self.inv_cache == 1 or self.vc == 0:
+                       self.run = 0
+                       self.ipkg.startCmd(IpkgComponent.CMD_UPDATE)
+
+       def go(self, returnValue = None):
+               cur = self["list"].getCurrent()
+               if cur:
+                       status = cur[3]
+                       package = cur[0]
+                       self.cmdList = []
+                       if status == 'installed':
+                               self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": package }))
+                               if len(self.cmdList):
+                                       self.session.openWithCallback(self.runRemove, MessageBox, _("Do you want to remove the package:\n") + package + "\n" + self.oktext)
+                       elif status == 'upgradeable':
+                               self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": package }))
+                               if len(self.cmdList):
+                                       self.session.openWithCallback(self.runUpgrade, MessageBox, _("Do you want to upgrade the package:\n") + package + "\n" + self.oktext)
+                       elif status == "installable":
+                               self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": package }))
+                               if len(self.cmdList):
+                                       self.session.openWithCallback(self.runUpgrade, MessageBox, _("Do you want to install the package:\n") + package + "\n" + self.oktext)
 
        def runRemove(self, result):
                if result:
@@ -1496,131 +1511,129 @@ class PluginDetails(Screen, DreamInfoHandler):
                if result is None:
                        return
                if result is False:
-                       self.close(True)
+                       cur = self["list"].getCurrent()
+                       if cur:
+                               item = self['list'].getIndex()
+                               self.list[item] = self.buildEntryComponent(cur[0], cur[1], cur[2], 'installable')
+                               self.cachelist[item] = [cur[0], cur[1], cur[2], 'installable']
+                               self['list'].setList(self.list)
+                               write_cache(self.cache_file, self.cachelist)
+                               self.reloadPluginlist()
                if result:
                        quitMainloop(3)
 
-       def reloadPluginlist(self):
-               plugins.readPluginList(resolveFilename(SCOPE_PLUGINS))
-
-       def fetchFailed(self,string):
-               self.setThumbnail(noScreenshot = True)
-               print "[PluginDetails] fetch failed " + string.getErrorMessage()
-
-
-class UpdatePlugin(Screen):
-       skin = """
-               <screen name="UpdatePlugin" position="center,center" size="550,200" title="Software update" >
-                       <widget name="activityslider" position="0,0" size="550,5"  />
-                       <widget name="slider" position="0,150" size="550,30"  />
-                       <widget source="package" render="Label" position="10,30" size="540,20" font="Regular;18" halign="center" valign="center" backgroundColor="#25062748" transparent="1" />
-                       <widget source="status" render="Label" position="10,60" size="540,45" font="Regular;20" halign="center" valign="center" backgroundColor="#25062748" transparent="1" />
-               </screen>"""
-
-       def __init__(self, session, args = None):
-               Screen.__init__(self, session)
-
-               self.sliderPackages = { "dreambox-dvb-modules": 1, "enigma2": 2, "tuxbox-image-info": 3 }
-
-               self.slider = Slider(0, 4)
-               self["slider"] = self.slider
-               self.activityslider = Slider(0, 100)
-               self["activityslider"] = self.activityslider
-               self.status = StaticText(_("Upgrading Dreambox... Please wait"))
-               self["status"] = self.status
-               self.package = StaticText()
-               self["package"] = self.package
-
-               self.packages = 0
-               self.error = 0
-
-               self.activity = 0
-               self.activityTimer = eTimer()
-               self.activityTimer.callback.append(self.doActivityTimer)
-               self.activityTimer.start(100, False)
-
-               self.ipkg = IpkgComponent()
-               self.ipkg.addCallback(self.ipkgCallback)
-
-               self.updating = True
-               self.package.setText(_("Package list update"))
-               self.ipkg.startCmd(IpkgComponent.CMD_UPDATE)
-
-               self["actions"] = ActionMap(["WizardActions"], 
-               {
-                       "ok": self.exit,
-                       "back": self.exit
-               }, -1)
+       def runUpgrade(self, result):
+               if result:
+                       self.session.openWithCallback(self.runUpgradeFinished, Ipkg, cmdList = self.cmdList)
 
-       def doActivityTimer(self):
-               self.activity += 1
-               if self.activity == 100:
-                       self.activity = 0
-               self.activityslider.setValue(self.activity)
+       def runUpgradeFinished(self):
+               self.session.openWithCallback(self.UpgradeReboot, MessageBox, _("Upgrade finished.") +" "+_("Do you want to reboot your Dreambox?"), MessageBox.TYPE_YESNO)
+               
+       def UpgradeReboot(self, result):
+               if result is None:
+                       return
+               if result is False:
+                       cur = self["list"].getCurrent()
+                       if cur:
+                               item = self['list'].getIndex()
+                               self.list[item] = self.buildEntryComponent(cur[0], cur[1], cur[2], 'installed')
+                               self.cachelist[item] = [cur[0], cur[1], cur[2], 'installed']
+                               self['list'].setList(self.list)
+                               write_cache(self.cache_file, self.cachelist)
+                               self.reloadPluginlist()
+               if result:
+                       quitMainloop(3)
 
        def ipkgCallback(self, event, param):
-               if event == IpkgComponent.EVENT_DOWNLOAD:
-                       self.status.setText(_("Downloading"))
-               elif event == IpkgComponent.EVENT_UPGRADE:
-                       if self.sliderPackages.has_key(param):
-                               self.slider.setValue(self.sliderPackages[param])
-                       self.package.setText(param)
-                       self.status.setText(_("Upgrading"))
-                       self.packages += 1
-               elif event == IpkgComponent.EVENT_INSTALL:
-                       self.package.setText(param)
-                       self.status.setText(_("Installing"))
-                       self.packages += 1
-               elif event == IpkgComponent.EVENT_CONFIGURING:
-                       self.package.setText(param)
-                       self.status.setText(_("Configuring"))
-               elif event == IpkgComponent.EVENT_MODIFIED:
-                       self.session.openWithCallback(
-                               self.modificationCallback,
-                               MessageBox,
-                               _("A configuration file (%s) was modified since Installation.\nDo you want to keep your version?") % (param)
-                       )
-               elif event == IpkgComponent.EVENT_ERROR:
-                       self.error += 1
+               if event == IpkgComponent.EVENT_ERROR:
+                       self.list_updating = False
+                       self.setStatus('error')
                elif event == IpkgComponent.EVENT_DONE:
-                       if self.updating:
-                               self.updating = False
-                               self.ipkg.startCmd(IpkgComponent.CMD_UPGRADE, args = {'test_only': False})
-                       elif self.error == 0:
-                               self.slider.setValue(4)
-                               
-                               self.activityTimer.stop()
-                               self.activityslider.setValue(0)
-                               
-                               self.package.setText("")
-                               self.status.setText(_("Done - Installed or upgraded %d packages") % self.packages)
-                       else:
-                               self.activityTimer.stop()
-                               self.activityslider.setValue(0)
-                               error = _("your dreambox might be unusable now. Please consult the manual for further assistance before rebooting your dreambox.")
-                               if self.packages == 0:
-                                       error = _("No packages were upgraded yet. So you can check your network and try again.")
-                               if self.updating:
-                                       error = _("Your dreambox isn't connected to the internet properly. Please check it and try again.")
-                               self.status.setText(_("Error") +  " - " + error)
+                       if self.list_updating:
+                               self.list_updating = False
+                               if not self.Console:
+                                       self.Console = Console()
+                               cmd = "ipkg list"
+                               self.Console.ePopen(cmd, self.IpkgList_Finished)
                #print event, "-", param
                pass
 
-       def modificationCallback(self, res):
-               self.ipkg.write(res and "N" or "Y")
+       def IpkgList_Finished(self, result, retval, extra_args = None):
+               if result:
+                       self.packetlist = []
+                       for x in result.splitlines():
+                               tokens = x.split(' - ')   #self.blacklisted_packages
+                               name = tokens[0].strip()
+                               if not any(name.endswith(x) for x in self.unwanted_extensions):
+                                       l = len(tokens)
+                                       version = l > 1 and tokens[1].strip() or ""
+                                       descr = l > 2 and tokens[2].strip() or ""
+                                       self.packetlist.append([name, version, descr])
+               if not self.Console:
+                       self.Console = Console()
+               cmd = "ipkg list_installed"
+               self.Console.ePopen(cmd, self.IpkgListInstalled_Finished)
 
-       def exit(self):
-               if not self.ipkg.isRunning():
-                       if self.packages != 0 and self.error == 0:
-                               self.session.openWithCallback(self.exitAnswer, MessageBox, _("Upgrade finished.") +" "+_("Do you want to reboot your Dreambox?"))
-                       else:
-                               self.close()
+       def IpkgListInstalled_Finished(self, result, retval, extra_args = None):
+               if result:
+                       self.installed_packetlist = {}
+                       for x in result.splitlines():
+                               tokens = x.split(' - ')   #self.blacklisted_packages
+                               name = tokens[0].strip()
+                               if not any(name.endswith(x) for x in self.unwanted_extensions):
+                                       l = len(tokens)
+                                       version = l > 1 and tokens[1].strip() or ""
+                                       self.installed_packetlist[name] = version
+               self.buildPacketList()
 
-       def exitAnswer(self, result):
-               if result is not None and result:
-                       quitMainloop(2)
-               self.close()
+       def buildEntryComponent(self, name, version, description, state):
+               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png"))
+               if state == 'installed':
+                       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_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgradeable.png"))
+                       return((name, version, description, state, upgradeablepng, divpng))     
+               else:
+                       installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installable.png"))
+                       return((name, version, description, state, installablepng, divpng))
+
+       def buildPacketList(self):
+               self.list = []
+               self.cachelist = []
+
+               if self.cache_ttl > 0 and self.vc != 0:
+                       print 'Loading packagelist cache from ',self.cache_file
+                       try:
+                               self.cachelist = load_cache(self.cache_file)
+                               if len(self.cachelist) > 0:
+                                       for x in self.cachelist:
+                                               self.list.append(self.buildEntryComponent(x[0], x[1], x[2], x[3]))
+                                       self['list'].setList(self.list)
+                       except:
+                               self.inv_cache = 1
+
+               if self.cache_ttl == 0 or self.inv_cache == 1 or self.vc == 0:
+                       print 'rebuilding fresh package list'
+                       for x in self.packetlist:
+                               status = ""
+                               if self.installed_packetlist.has_key(x[0].strip()):
+                                       if self.installed_packetlist[x[0].strip()] == x[1].strip():
+                                               status = "installed"
+                                               self.list.append(self.buildEntryComponent(x[0].strip(), x[1].strip(), x[2].strip(), status))
+                                       else:
+                                               status = "upgradeable"
+                                               self.list.append(self.buildEntryComponent(x[0].strip(), x[1].strip(), x[2].strip(), status))
+                               else:
+                                       status = "installable"
+                                       self.list.append(self.buildEntryComponent(x[0].strip(), x[1].strip(), x[2].strip(), status))
+                               if not any(x[0].strip().endswith(x) for x in self.unwanted_extensions):
+                                       self.cachelist.append([x[0].strip(), x[1].strip(), x[2].strip(), status])
+                       write_cache(self.cache_file, self.cachelist)
+                       self['list'].setList(self.list)
 
+       def reloadPluginlist(self):
+               plugins.readPluginList(resolveFilename(SCOPE_PLUGINS))
 
 class IpkgInstaller(Screen):
        skin = """
@@ -1687,15 +1700,16 @@ def UpgradeMain(session, **kwargs):
 def startSetup(menuid):
        if menuid != "setup": 
                return [ ]
-       return [(_("Software manager"), UpgradeMain, "software_manager", 50)]
+       return [(_("Software management"), UpgradeMain, "software_manager", 50)]
+
 
 def Plugins(path, **kwargs):
        global plugin_path
        plugin_path = path
        list = [
-               PluginDescriptor(name=_("Software manager"), description=_("Manage your receiver's software"), where = PluginDescriptor.WHERE_MENU, fnc=startSetup), 
+               PluginDescriptor(name=_("Software management"), description=_("Manage your receiver's software"), where = PluginDescriptor.WHERE_MENU, fnc=startSetup),
                PluginDescriptor(name=_("Ipkg"), where = PluginDescriptor.WHERE_FILESCAN, fnc = filescan)
        ]
        if config.usage.setup_level.index >= 2: # expert+
-               list.append(PluginDescriptor(name=_("Software manager"), description=_("Manage your receiver's software"), where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc=UpgradeMain))
+               list.append(PluginDescriptor(name=_("Software management"), description=_("Manage your receiver's software"), where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc=UpgradeMain))
        return list
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..c8af9cd
--- /dev/null
@@ -0,0 +1,169 @@
+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="center,center" 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,120" 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))
+                       self.list.append(getConfigListEntry(_("Standby Fan %d Voltage") % (count + 1), fancontrol.getConfig(count).vlt_standby))
+                       self.list.append(getConfigListEntry(_("Standby Fan %d PWM") % (count + 1), fancontrol.getConfig(count).pwm_standby))
+               
+               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()
+                       fancontrol.getConfig(count).vlt_standby.save()
+                       fancontrol.getConfig(count).pwm_standby.save()
+               self.close()
+
+       def revert(self):
+               for count in range(fancontrol.getFanCount()):
+                       fancontrol.getConfig(count).vlt.load()
+                       fancontrol.getConfig(count).pwm.load()
+                       fancontrol.getConfig(count).vlt_standby.load()
+                       fancontrol.getConfig(count).pwm_standby.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)
+
index 9e24808..2e80f30 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 33b222e..208c7e0 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" />
diff --git a/lib/python/Plugins/SystemPlugins/Videomode/HDMI.png b/lib/python/Plugins/SystemPlugins/Videomode/HDMI.png
new file mode 100644 (file)
index 0000000..5aa8304
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/Videomode/HDMI.png differ
index 2ec0b33..1ac1d5d 100644 (file)
@@ -16,4 +16,6 @@ dist_install_DATA = \
        LICENSE \
        Scart.png \
        videowizard.xml \
-       YPbPr.png
+       YPbPr.png \
+       HDMI.png \
+       lcd_HDMI.png
index 3759c21..15f4d51 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
@@ -98,7 +99,10 @@ class VideoWizard(WizardLanguage, Rc):
                print "input selection moved:", self.selection
                self.inputSelect(self.selection)
                if self["portpic"].instance is not None:
-                       self["portpic"].instance.setPixmapFromFile(resolveFilename(SCOPE_PLUGINS, "SystemPlugins/Videomode/" + self.selection + ".png"))
+                       picname = self.selection
+                       if picname == "DVI" and HardwareInfo().get_device_name() == "dm500hd":
+                               picname = "HDMI"
+                       self["portpic"].instance.setPixmapFromFile(resolveFilename(SCOPE_PLUGINS, "SystemPlugins/Videomode/" + picname + ".png"))
                
        def inputSelect(self, port):
                print "inputSelect:", port
@@ -130,8 +134,12 @@ class VideoWizard(WizardLanguage, Rc):
        def modeSelect(self, mode):
                ratesList = self.listRates(mode)
                print "ratesList:", ratesList
-               self.hw.setMode(port = self.port, mode = mode, rate = ratesList[0][0])
-               
+               if self.port == "DVI" and mode in ("720p", "1080i"):
+                       self.rate = "multi"
+                       self.hw.setMode(port = self.port, mode = mode, rate = "multi")
+               else:
+                       self.hw.setMode(port = self.port, mode = mode, rate = ratesList[0][0])
+       
        def listRates(self, querymode = None):
                if querymode is None:
                        querymode = self.mode
diff --git a/lib/python/Plugins/SystemPlugins/Videomode/lcd_HDMI.png b/lib/python/Plugins/SystemPlugins/Videomode/lcd_HDMI.png
new file mode 100644 (file)
index 0000000..425da5c
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/Videomode/lcd_HDMI.png differ
index 6c012e8..ef47443 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 733edd6..39c1131 100755 (executable)
@@ -218,7 +218,7 @@ def startSetup(menuid):
        if menuid != "system": 
                return [ ]
 
-       return [(_("A/V Settings") + "...", videoSetupMain, "av_setup", 40)]
+       return [(_("A/V Settings"), videoSetupMain, "av_setup", 40)]
 
 def VideoWizard(*args, **kwargs):
        from VideoWizard import VideoWizard
index 29ac429..5dea661 100644 (file)
@@ -20,7 +20,7 @@ self.selectKey("DOWN")
 self["portpic"].hide()
                </code>
        </step>
-       <step id="rateselection" nextstep="dvirateintroduction" timeout="20" timeoutaction="selectnext">
+       <step id="rateselection" nextstep="end" timeout="20" timeoutaction="selectnext">
                <condition>
 self.condition = (self.port != "DVI" or self.mode == "PC")
                </condition>            
@@ -33,7 +33,7 @@ self.selectKey("UP")
 self.selectKey("DOWN")
                </code>
        </step>
-       <step id="dvirateintroduction" nextstep="dvirateselection">
+       <!--step id="dvirateintroduction" nextstep="dvirateselection">
                <condition>
 self.condition = (self.port == "DVI" and self.mode in ["720p", "1080i"])
                </condition>
@@ -89,7 +89,7 @@ self.selectKey("UP")
 self.selectKey("DOWN")
 self.rateSelect("50Hz")
                </code>
-       </step>
+       </step-->
        <step id="end">
                <code>
 self.hw.saveMode(self.port, self.mode, self.rate)
index 365372c..2f36237 100755 (executable)
@@ -1,6 +1,6 @@
 installdir = $(pkglibdir)/python/Plugins/SystemPlugins/WirelessLan
 
-#SUBDIRS = meta
+SUBDIRS = meta
 
 install_PYTHON =       \
        __init__.py \
index ba1e13d..1c1471c 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 b7a64b9..2df5814 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..."))
@@ -153,39 +151,58 @@ class WlanStatus(Screen):
                                self["statuspic"].setPixmapNum(0)
                        self["statuspic"].show()                
 
+
 class WlanScan(Screen):
        skin = """
-       <screen position="center,center" size="560,400" title="Choose a Wireless Network" >
-               <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
-               <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
-               <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
-               <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
-               <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
-               <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
-               <widget name="list" position="5,50" size="550,280" scrollbarMode="showOnDemand" />
-               <ePixmap pixmap="skin_default/div-h.png" position="0,340" zPosition="1" size="560,2" />         
-               <widget source="info" render="Label" position="0,350" size="560,50" font="Regular;24" halign="center" valign="center" backgroundColor="#25062748" transparent="1" />
-       </screen>
-       """
+               <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 = {}
+               self.listLength = 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 +212,165 @@ 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 == '':
+                               if cur[1] == 'hidden...':
                                        essid = cur[1]
-                               encrypted = cur[2]
-                               self.close(essid,self["list"].getList())
+                               else:
+                                       essid = cur[0]
+                               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):
+               newList = []
+               newList = self.getAccessPoints(refresh = True)  
+               self.newAPList = []
+               tmpList = []
+               newListIndex = None
+               currentListEntry = None
+               currentListIndex = None
+
+               for ap in self.oldlist.keys():
+                       data = self.oldlist[ap]['data']
+                       if data is not None:
+                               tmpList.append(data)
+
+               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[0] == currentListEntry[0]:
+                                       newListIndex = idx
+                               idx +=1
+                       self['list'].setList(self.newAPList)
+                       self["list"].setIndex(newListIndex)
+                       self["list"].updateList(self.newAPList)
+                       self.listLength = 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 "[WirelessLan.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 not self.oldlist.has_key(entry[0]):
+                                       self.oldlist[entry[0]] = { 'data': entry }
+                               else:
+                                       self.oldlist[entry[0]]['data'] = entry
+               
+               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 length == 0:
+               if refresh is False:
+                       self['list'].setList(self.APList)
+               self.listLength = len(self.APList)
+               self.setInfo()
+               self.rescanTimer.start(5000)
+               return self.cleanList
+
+       def setInfo(self):
+               length = self.getLength()
+               if length <= 1:
                        self["info"].setText(_("No wireless networks found! Please refresh."))
-               elif length == 1:
+               elif length == 2:
                        self["info"].setText(_("1 wireless network found!"))
                else:
-                       self["info"].setText(str(length)+_(" wireless networks found!"))        
+                       self["info"].setText(str(length-1)+_(" wireless networks found!"))
+
+       def buildWlanList(self):
+               self.WlanList = []
+               for entry in self['list'].list:
+                       if entry[1] == "hidden...":
+                               self.WlanList.append(( "hidden...",_("enter hidden network SSID") ))#continue
+                       else:
+                               self.WlanList.append( (entry[0], entry[0]) )
+
+       def getLength(self):
+               return self.listLength          
+
+       def getWlanList(self):
+               if self.WlanList is None:
+                       self.buildWlanList()
+               return self.WlanList
 
 
 def WlanStatusScreenMain(session, iface):
@@ -259,13 +378,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 +399,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 48bb28e..c1c6f94 100644 (file)
@@ -101,8 +101,8 @@ for where in targetlist:
        importlist.append(where[0])
 
 file.write("""from Screens.Screen import Screen
-from Plugins.Plugin import PluginDescriptor, %s
-""" % ', '.join(importlist))
+from Plugins.Plugin import PluginDescriptor
+""")
 
 mainlist = []
 for count in range(len(targetlist)):
index 0432823..0895c9c 100644 (file)
@@ -21,14 +21,16 @@ profile("ChannelSelection.py 2.3")
 from Components.Input import Input
 profile("ChannelSelection.py 3")
 from Components.ParentalControl import parentalControl
+from Components.ChoiceList import ChoiceList, ChoiceEntryComponent
+from Components.SystemInfo import SystemInfo
 from Screens.InputBox import InputBox, PinInput
 from Screens.MessageBox import MessageBox
 from Screens.ServiceInfo import ServiceInfo
 profile("ChannelSelection.py 4")
+from Screens.PictureInPicture import PictureInPicture
 from Screens.RdsDisplay import RassInteractive
 from ServiceReference import ServiceReference
 from Tools.BoundFunction import boundFunction
-from re import compile
 from os import remove
 profile("ChannelSelection.py after imports")
 
@@ -69,9 +71,9 @@ OFF = 0
 EDIT_BOUQUET = 1
 EDIT_ALTERNATIVES = 2
 
-def append_when_current_valid(current, menu, args, level = 0):
+def append_when_current_valid(current, menu, args, level = 0, key = ""):
        if current and current.valid() and level <= config.usage.setup_level.index:
-               menu.append(args)
+               menu.append(ChoiceEntryComponent(key, args))
 
 class ChannelContextMenu(Screen):
        def __init__(self, session, csel):
@@ -80,13 +82,15 @@ class ChannelContextMenu(Screen):
                self.csel = csel
                self.bsel = None
 
-               self["actions"] = ActionMap(["OkCancelActions"],
+               self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "NumberActions"],
                        {
                                "ok": self.okbuttonClick,
-                               "cancel": self.cancelClick
+                               "cancel": self.cancelClick,
+                               "blue": self.showServiceInPiP
                        })
                menu = [ ]
 
+               self.pipAvailable = False
                current = csel.getCurrentSelection()
                current_root = csel.getRoot()
                current_sel_path = current.getPath()
@@ -122,8 +126,11 @@ class ChannelContextMenu(Screen):
                                        append_when_current_valid(current, menu, (_("remove entry"), self.removeCurrentService), level = 0)
                                if current_root and current_root.getPath().find("flags == %d" %(FLAG_SERVICE_NEW_FOUND)) != -1:
                                        append_when_current_valid(current, menu, (_("remove new found flag"), self.removeNewFoundFlag), level = 0)
+                               if isPlayable and SystemInfo.get("NumVideoDecoders", 1) > 1:
+                                       append_when_current_valid(current, menu, (_("Activate Picture in Picture"), self.showServiceInPiP), level = 0, key = "blue")
+                                       self.pipAvailable = True
                        else:
-                                       menu.append((_("add bouquet"), self.showBouquetInputBox))
+                                       menu.append(ChoiceEntryComponent(text = (_("add bouquet"), self.showBouquetInputBox)))
                                        append_when_current_valid(current, menu, (_("remove entry"), self.removeBouquet), level = 0)
 
                if inBouquet: # current list is editable?
@@ -131,7 +138,7 @@ class ChannelContextMenu(Screen):
                                if not csel.movemode:
                                        append_when_current_valid(current, menu, (_("enable move mode"), self.toggleMoveMode), level = 1)
                                        if not inBouquetRootList and current_root and not (current_root.flags & eServiceReference.isGroup):
-                                               menu.append((_("add marker"), self.showMarkerInputBox))
+                                               menu.append(ChoiceEntryComponent(text = (_("add marker"), self.showMarkerInputBox)))
                                                if haveBouquets:
                                                        append_when_current_valid(current, menu, (_("enable bouquet edit"), self.bouquetMarkStart), level = 0)
                                                else:
@@ -156,11 +163,11 @@ class ChannelContextMenu(Screen):
                                                append_when_current_valid(current, menu, (_("end alternatives edit"), self.bouquetMarkEnd), level = 0)
                                                append_when_current_valid(current, menu, (_("abort alternatives edit"), self.bouquetMarkAbort), level = 0)
 
-               menu.append((_("back"), self.cancelClick))
-               self["menu"] = MenuList(menu)
+               menu.append(ChoiceEntryComponent(text = (_("back"), self.cancelClick)))
+               self["menu"] = ChoiceList(menu)
 
        def okbuttonClick(self):
-               self["menu"].getCurrent()[1]()
+               self["menu"].getCurrent()[0][1]()
 
        def cancelClick(self):
                self.close(False)
@@ -189,6 +196,23 @@ class ChannelContextMenu(Screen):
                        self.close()
                else:
                        self.session.openWithCallback(self.close, MessageBox, _("The pin code you entered is wrong."), MessageBox.TYPE_ERROR)
+                       
+       def showServiceInPiP(self):
+               if not self.pipAvailable:
+                       return
+               if self.session.pipshown:
+                       del self.session.pip
+               self.session.pip = self.session.instantiateDialog(PictureInPicture)
+               self.session.pip.show()
+               newservice = self.csel.servicelist.getCurrent()
+               if self.session.pip.playService(newservice):
+                       self.session.pipshown = True
+                       self.session.pip.servicePath = self.csel.getCurrentServicePath()
+                       self.close(True)
+               else:
+                       self.session.pipshown = False
+                       del self.session.pip
+                       self.session.openWithCallback(self.close, MessageBox, _("Could not open Picture in Picture"), MessageBox.TYPE_ERROR)
 
        def addServiceToBouquetSelected(self):
                bouquets = self.csel.getBouquetList()
@@ -425,7 +449,7 @@ class ChannelSelectionEdit:
                                if mutableAlternatives:
                                        mutableAlternatives.setListName(name)
                                        if mutableAlternatives.addService(cur_service.ref):
-                                               print "add", cur_service.toString(), "to new alternatives failed"
+                                               print "add", cur_service.ref.toString(), "to new alternatives failed"
                                        mutableAlternatives.flushChanges()
                                        self.servicelist.addService(new_ref.ref, True)
                                        self.servicelist.removeCurrent()
@@ -648,7 +672,11 @@ class ChannelSelectionEdit:
                        self.entry_marked = True
 
        def doContext(self):
-               self.session.open(ChannelContextMenu, self)
+               self.session.openWithCallback(self.exitContext, ChannelContextMenu, self)
+               
+       def exitContext(self, close = False):
+               if close:
+                       self.cancel()
 
 MODE_TV = 0
 MODE_RADIO = 1
@@ -684,6 +712,7 @@ class ChannelSelectionBase(Screen):
                self.servicePathTV = [ ]
                self.servicePathRadio = [ ]
                self.servicePath = [ ]
+               self.rootChanged = False
 
                self.mode = MODE_TV
 
@@ -790,6 +819,7 @@ class ChannelSelectionBase(Screen):
                else:
                        self.servicelist.setMode(ServiceList.MODE_NORMAL)
                self.servicelist.setRoot(root, justSet)
+               self.rootChanged = True
                self.buildTitleString()
 
        def removeModeStr(self, str):
@@ -1151,6 +1181,7 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect
                self.servicelist.setPlayableIgnoreService(eServiceReference())
 
        def setMode(self):
+               self.rootChanged = True
                self.restoreRoot()
                lastservice=eServiceReference(self.lastservice.value)
                if lastservice.valid():
@@ -1274,19 +1305,21 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect
                        self.lastroot.save()
 
        def restoreRoot(self):
-               self.clearPath()
-               re = compile('.+?;')
-               tmp = re.findall(self.lastroot.value)
-               cnt = 0
-               for i in tmp:
-                       self.servicePath.append(eServiceReference(i[:-1]))
-                       cnt += 1
-               if cnt:
-                       path = self.servicePath.pop()
-                       self.enterPath(path)
-               else:
-                       self.showFavourites()
-                       self.saveRoot()
+               tmp = [x for x in self.lastroot.value.split(';') if x != '']
+               current = [x.toString() for x in self.servicePath]
+               if tmp != current or self.rootChanged:
+                       self.clearPath()
+                       cnt = 0
+                       for i in tmp:
+                               self.servicePath.append(eServiceReference(i))
+                               cnt += 1
+                       if cnt:
+                               path = self.servicePath.pop()
+                               self.enterPath(path)
+                       else:
+                               self.showFavourites()
+                               self.saveRoot()
+                       self.rootChanged = False
 
        def preEnterPath(self, refstr):
                if self.servicePath and self.servicePath[0] != eServiceReference(refstr):
@@ -1434,19 +1467,20 @@ class ChannelSelectionRadio(ChannelSelectionBase, ChannelSelectionEdit, ChannelS
                        config.radio.lastroot.save()
 
        def restoreRoot(self):
-               self.clearPath()
-               re = compile('.+?;')
-               tmp = re.findall(config.radio.lastroot.value)
-               cnt = 0
-               for i in tmp:
-                       self.servicePathRadio.append(eServiceReference(i[:-1]))
-                       cnt += 1
-               if cnt:
-                       path = self.servicePathRadio.pop()
-                       self.enterPath(path)
-               else:
-                       self.showFavourites()
-                       self.saveRoot()
+               tmp = [x for x in config.radio.lastroot.value.split(';') if x != '']
+               current = [x.toString() for x in self.servicePath]
+               if tmp != current or self.rootChanged:
+                       cnt = 0
+                       for i in tmp:
+                               self.servicePathRadio.append(eServiceReference(i))
+                               cnt += 1
+                       if cnt:
+                               path = self.servicePathRadio.pop()
+                               self.enterPath(path)
+                       else:
+                               self.showFavourites()
+                               self.saveRoot()
+                       self.rootChanged = False
 
        def preEnterPath(self, refstr):
                if self.servicePathRadio and self.servicePathRadio[0] != eServiceReference(refstr):
index 3dde7e2..f8edba1 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 c1ffb58..cced3ce 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 59cc21d..5b06124 100644 (file)
@@ -12,7 +12,7 @@ profile("LOAD:InfoBarGenerics")
 from Screens.InfoBarGenerics import InfoBarShowHide, \
        InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarRdsDecoder, \
        InfoBarEPG, InfoBarSeek, InfoBarInstantRecord, \
-       InfoBarAudioSelection, InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish, \
+       InfoBarAudioSelection, InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish, InfoBarUnhandledKey, \
        InfoBarSubserviceSelection, InfoBarShowMovies, InfoBarTimeshift,  \
        InfoBarServiceNotifications, InfoBarPVRState, InfoBarCueSheetSupport, InfoBarSimpleEventView, \
        InfoBarSummarySupport, InfoBarMoviePlayerSummarySupport, InfoBarTimeshiftState, InfoBarTeletextPlugin, InfoBarExtensions, \
@@ -29,7 +29,7 @@ from Screens.HelpMenu import HelpableScreen
 class InfoBar(InfoBarBase, InfoBarShowHide,
        InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarEPG, InfoBarRdsDecoder,
        InfoBarInstantRecord, InfoBarAudioSelection, 
-       HelpableScreen, InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish,
+       HelpableScreen, InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish, InfoBarUnhandledKey,
        InfoBarSubserviceSelection, InfoBarTimeshift, InfoBarSeek,
        InfoBarSummarySupport, InfoBarTimeshiftState, InfoBarTeletextPlugin, InfoBarExtensions,
        InfoBarPiP, InfoBarPlugins, InfoBarSubtitleSupport, InfoBarServiceErrorPopupSupport, InfoBarJobman,
@@ -52,7 +52,7 @@ class InfoBar(InfoBarBase, InfoBarShowHide,
                for x in HelpableScreen, \
                                InfoBarBase, InfoBarShowHide, \
                                InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarEPG, InfoBarRdsDecoder, \
-                               InfoBarInstantRecord, InfoBarAudioSelection, \
+                               InfoBarInstantRecord, InfoBarAudioSelection, InfoBarUnhandledKey, \
                                InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish, InfoBarSubserviceSelection, \
                                InfoBarTimeshift, InfoBarSeek, InfoBarSummarySupport, InfoBarTimeshiftState, \
                                InfoBarTeletextPlugin, InfoBarExtensions, InfoBarPiP, InfoBarSubtitleSupport, InfoBarJobman, \
@@ -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 2cbfeb7..1c577ee 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
 
@@ -25,13 +26,14 @@ from Screens.PictureInPicture import PictureInPicture
 from Screens.SubtitleDisplay import SubtitleDisplay
 from Screens.RdsDisplay import RdsInfoDisplay, RassInteractive
 from Screens.TimeDateInput import TimeDateInput
+from Screens.UnhandledKey import UnhandledKey
 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
+       iPlayableService, eServiceReference, eEPGCache, eActionMap
 
 from time import time, localtime, strftime
 from os import stat as os_stat
@@ -46,6 +48,39 @@ class InfoBarDish:
        def __init__(self):
                self.dishDialog = self.session.instantiateDialog(Dish)
 
+class InfoBarUnhandledKey:
+       def __init__(self):
+               self.unhandledKeyDialog = self.session.instantiateDialog(UnhandledKey)
+               self.hideUnhandledKeySymbolTimer = eTimer()
+               self.hideUnhandledKeySymbolTimer.callback.append(self.unhandledKeyDialog.hide)
+               self.checkUnusedTimer = eTimer()
+               self.checkUnusedTimer.callback.append(self.checkUnused)
+               self.onLayoutFinish.append(self.unhandledKeyDialog.hide)
+               eActionMap.getInstance().bindAction('', -0x7FFFFFFF, self.actionA) #highest prio
+               eActionMap.getInstance().bindAction('', 0x7FFFFFFF, self.actionB) #lowest prio
+               self.flags = (1<<1);
+               self.uflags = 0;
+
+       #this function is called on every keypress!
+       def actionA(self, key, flag):
+               if flag != 4:
+                       if self.flags & (1<<1):
+                               self.flags = self.uflags = 0
+                       self.flags |= (1<<flag)
+                       if flag == 1: # break
+                               self.checkUnusedTimer.start(0, True)
+               return 0
+
+       #this function is only called when no other action has handled this key
+       def actionB(self, key, flag):
+               if flag != 4:
+                       self.uflags |= (1<<flag)
+
+       def checkUnused(self):
+               if self.flags == self.uflags:
+                       self.unhandledKeyDialog.show()
+                       self.hideUnhandledKeySymbolTimer.start(2000, True)
+
 class InfoBarShowHide:
        """ InfoBar show/hide control, accepts toggleShow and hide actions, might start
        fancy animations. """
@@ -452,7 +487,7 @@ class InfoBarEPG:
                self["EPGActions"] = HelpableActionMap(self, "InfobarEPGActions",
                        {
                                "showEventInfo": (self.openEventView, _("show EPG...")),
-                               "showEventInfoPlugin": (self.showEventInfoPlugins, _("show single service EPG...")),
+                               "showEventInfoPlugin": (self.showEventInfoPlugins, _("list of EPG views...")),
                                "showInfobarOrEpgWhenInfobarAlreadyVisible": self.showEventInfoWhenNotVisible,
                        })
 
@@ -563,6 +598,7 @@ class InfoBarEPG:
 
                if list:
                        list.append((_("show single service EPG..."), self.openSingleServiceEPG))
+                       list.append((_("Multi EPG"), self.openMultiServiceEPG))
                        self.session.openWithCallback(self.EventInfoPluginChosen, ChoiceBox, title=_("Please choose an extension..."), list = list, skin_name = "EPGExtensionsList")
                else:
                        self.openSingleServiceEPG()
@@ -690,8 +726,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 +774,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 +853,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 +907,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 +944,13 @@ 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
+                       return 0 # trade as unhandled action
                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 +980,13 @@ 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
+                       return 0 # trade as unhandled action
                seekstate = self.seekstate
                if seekstate == self.SEEK_STATE_PLAY:
                        self.setSeekState(self.makeStateBackward(int(config.seek.enter_backward.value)))
@@ -949,7 +994,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]:
@@ -1066,15 +1111,21 @@ class InfoBarPVRState:
                        self.pvrStateDialog.hide()
                else:
                        self._mayShow()
-                       
 
 class InfoBarTimeshiftState(InfoBarPVRState):
        def __init__(self):
                InfoBarPVRState.__init__(self, screen=TimeshiftState, force_show = True)
+               self.__hideTimer = eTimer()
+               self.__hideTimer.callback.append(self.__hideTimeshiftState)
 
        def _mayShow(self):
-               if self.execing and self.timeshift_enabled and self.seekstate != self.SEEK_STATE_PLAY:
+               if self.execing and self.timeshift_enabled:
                        self.pvrStateDialog.show()
+                       if self.seekstate == self.SEEK_STATE_PLAY and not self.shown:
+                               self.__hideTimer.start(5*1000, True)
+
+       def __hideTimeshiftState(self):
+               self.pvrStateDialog.hide()
 
 class InfoBarShowMovies:
 
@@ -1212,10 +1263,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 +1532,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 +1633,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 +1717,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
 
@@ -1944,8 +2021,10 @@ class InfoBarCueSheetSupport:
 
                        if last is not None:
                                self.resume_point = last
+                               
+                               l = last / 90000
                                if config.usage.on_movie_start.value == "ask":
-                                       Notifications.AddNotificationWithCallback(self.playLastCB, MessageBox, _("Do you want to resume this playback?"), timeout=10)
+                                       Notifications.AddNotificationWithCallback(self.playLastCB, MessageBox, _("Do you want to resume this playback?") + "\n" + (_("Resume position at %s") % ("%d:%02d:%02d" % (l/3600, l%3600/60, l%60))), timeout=10)
                                elif config.usage.on_movie_start.value == "resume":
 # TRANSLATORS: The string "Resuming playback" flashes for a moment
 # TRANSLATORS: at the start of a movie, when the user has selected
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 61d7105..29d94f5 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 44994b8..d96b491 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 UnhandledKey.py ServiceStopScreen.py
 
old mode 100644 (file)
new mode 100755 (executable)
index 5f2032f..2a8801c
@@ -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)
@@ -152,7 +160,7 @@ class Menu(Screen):
                        elif x.tag == 'setup':
                                id = x.get("id")
                                if item_text == "":
-                                       item_text = _(getSetupTitle(id)) + "..."
+                                       item_text = _(getSetupTitle(id))
                                else:
                                        item_text = _(item_text)
                                destList.append((item_text, boundFunction(self.openSetup, id), entryID, weight))
@@ -237,7 +245,7 @@ class Menu(Screen):
                # Calculate index
                number -= 1
 
-               if len(self["menu"].list) > number:
+               if len(self["menu"].list) > number:
                        self["menu"].setIndex(number)
                        self.okbuttonClick()
 
index 86bf07d..f3538b7 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 174a4f0..0468f8a 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 ec2bafe..c0037f8 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
 
@@ -63,6 +64,7 @@ class NetworkAdapterSelection(Screen,HelpableScreen):
                self["key_red"] = StaticText(_("Close"))
                self["key_green"] = StaticText(_("Select"))
                self["key_yellow"] = StaticText("")
+               self["key_blue"] = StaticText("")
                self["introduction"] = StaticText(self.edittext)
                
                self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()]
@@ -80,6 +82,7 @@ class NetworkAdapterSelection(Screen,HelpableScreen):
                        {
                        "red": (self.close, _("exit network interface list")),
                        "green": (self.okbuttonClick, _("select interface")),
+                       "blue": (self.openNetworkWizard, _("Use the Networkwizard to configure selected network adapter")),
                        })
                
                self["DefaultInterfaceAction"] = HelpableActionMap(self, "ColorActions",
@@ -131,7 +134,9 @@ class NetworkAdapterSelection(Screen,HelpableScreen):
                                else:
                                        active_int = False
                                self.list.append(InterfaceEntryComponent(index = x[1],name = _(x[0]),default=default_int,active=active_int ))
-
+               
+               if os_path.exists(resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml")):
+                       self["key_blue"].setText(_("NetworkWizard"))
                self["list"].l.setList(self.list)
 
        def setDefaultInterface(self):
@@ -201,6 +206,16 @@ class NetworkAdapterSelection(Screen,HelpableScreen):
                        self.updateList()
                        self.session.open(MessageBox, _("Finished configuring your network"), type = MessageBox.TYPE_INFO, timeout = 10, default = False)
 
+       def openNetworkWizard(self):
+               if os_path.exists(resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml")):
+                       try:
+                               from Plugins.SystemPlugins.NetworkWizard.NetworkWizard import NetworkWizard
+                       except ImportError:
+                               self.session.open(MessageBox, _("The NetworkWizard extension is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 )
+                       else:
+                               selection = self["list"].getCurrent()
+                               if selection is not None:
+                                       self.session.openWithCallback(self.AdapterSetupClosed, NetworkWizard, selection[0])
 
 
 class NameserverSetup(Screen, ConfigListScreen, HelpableScreen):
@@ -278,7 +293,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 +323,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 +364,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 +396,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 +433,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 +449,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 +524,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 +550,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 +605,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 +617,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 keyCancel(self):
+               self.hideInputHelp()
+               if self["config"].isChanged():
+                       self.session.openWithCallback(self.keyCancelConfirm, MessageBox, _("Really close without saving settings?"))
                else:
                        self.close('cancel')
 
-       def cancelCB(self,data):
+       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 +661,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 +679,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 +729,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:
@@ -786,7 +783,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                        self.session.openWithCallback(self.restartLan, MessageBox, (_("Are you sure you want to restart your network interfaces?\n\n") + self.oktext ) )
                if self["menulist"].getCurrent()[1] == 'openwizard':
                        from Plugins.SystemPlugins.NetworkWizard.NetworkWizard import NetworkWizard
-                       self.session.openWithCallback(self.AdapterSetupClosed, NetworkWizard)
+                       self.session.openWithCallback(self.AdapterSetupClosed, NetworkWizard, self.iface)
                if self["menulist"].getCurrent()[1][0] == 'extendedSetup':
                        self.extended = self["menulist"].getCurrent()[1][2]
                        self.extended(self.session, self.iface)
@@ -813,7 +810,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 +828,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 +861,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 +899,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 +915,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 +936,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 +956,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 +1410,4 @@ class NetworkAdapterTest(Screen):
                        pass
                else:
                        iStatus.stopWlanConsole()
-                       
+
old mode 100755 (executable)
new mode 100644 (file)
index a123d2d..eae12da
@@ -16,7 +16,7 @@ from operator import itemgetter
 class ProtectedScreen:
        def __init__(self):
                if self.isProtected():
-                       self.onFirstExecBegin.append(boundFunction(self.session.openWithCallback, self.pinEntered, PinInput, pinList = [self.protectedWithPin()], triesEntry = self.getTriesEntry(), title = self.getPinText(), windowTitle = _("Change pin code")))
+                       self.onFirstExecBegin.append(boundFunction(self.session.openWithCallback, self.pinEntered, PinInput, pinList = [self.protectedWithPin()], triesEntry = self.getTriesEntry(), title = self.getPinText(), windowTitle = _("Enter pin code")))
 
        def getTriesEntry(self):
                return config.ParentalControl.retries.setuppin
@@ -48,11 +48,11 @@ class ParentalControlSetup(Screen, ConfigListScreen, ProtectedScreen):
                self.list = []
                ConfigListScreen.__init__(self, self.list, session = self.session, on_change = self.changedEntry)
                self.createSetup()
-
+               
                self["actions"] = NumberActionMap(["SetupActions"],
                {
-                       "cancel": self.keyCancel,
-                       "save": self.keyCancel
+                 "cancel": self.keyCancel,
+                 "save": self.keyCancel
                }, -2)
                self["key_red"] = StaticText(_("Cancel"))
                self["key_green"] = StaticText(_("OK"))
@@ -63,15 +63,17 @@ class ParentalControlSetup(Screen, ConfigListScreen, ProtectedScreen):
 
        def isProtected(self):
                return config.ParentalControl.setuppinactive.value and config.ParentalControl.configured.value
-
+       
        def createSetup(self):
                self.editListEntry = None
                self.changePin = None
                self.changeSetupPin = None
-
+               
                self.list = []
                self.list.append(getConfigListEntry(_("Enable parental control"), config.ParentalControl.configured))
                print "config.ParentalControl.configured.value", config.ParentalControl.configured.value
+               self.editBouquetListEntry = -1
+               self.reloadLists = -1
                if config.ParentalControl.configured.value:
                        #self.list.append(getConfigListEntry(_("Configuration mode"), config.ParentalControl.mode))
                        self.list.append(getConfigListEntry(_("Protect setup"), config.ParentalControl.setuppinactive))
@@ -87,10 +89,19 @@ class ParentalControlSetup(Screen, ConfigListScreen, ProtectedScreen):
                                elif config.ParentalControl.mode.value == "simple":     
                                        self.changePin = getConfigListEntry(_("Change service pin"), NoSave(ConfigNothing()))
                                        self.list.append(self.changePin)
-                               #self.list.append(getConfigListEntry(_("Remember service pin"), config.ParentalControl.storeservicepin))        
+                               #Added Option to remember the service pin
+                               self.list.append(getConfigListEntry(_("Remember service pin"), config.ParentalControl.storeservicepin)) 
+                               #Added Option to remember the cancellation of service pin entry
+                               self.list.append(getConfigListEntry(_("Remember service pin cancel"), config.ParentalControl.storeservicepincancel))    
                                self.editListEntry = getConfigListEntry(_("Edit services list"), NoSave(ConfigNothing()))
                                self.list.append(self.editListEntry)
-
+                               #New funtion: Possibility to add Bouquets to whitelist / blacklist
+                               self.editBouquetListEntry = getConfigListEntry(_("Edit bouquets list"), NoSave(ConfigNothing()))
+                               self.list.append(self.editBouquetListEntry)
+                               #New option to reload service lists (for example if bouquets have changed)
+                               self.reloadLists = getConfigListEntry(_("Reload Black-/Whitelists"), NoSave(ConfigNothing()))
+                               self.list.append(self.reloadLists)
+                               
                self["config"].list = self.list
                self["config"].setList(self.list)
 
@@ -98,6 +109,8 @@ class ParentalControlSetup(Screen, ConfigListScreen, ProtectedScreen):
                print "self[\"config\"].l.getCurrentSelection()", self["config"].l.getCurrentSelection()
                if self["config"].l.getCurrentSelection() == self.editListEntry:
                        self.session.open(ParentalControlEditor)
+               elif self["config"].l.getCurrentSelection() == self.editBouquetListEntry:
+                       self.session.open(ParentalControlBouquetEditor)
                elif self["config"].l.getCurrentSelection() == self.changePin:
                        if config.ParentalControl.mode.value == "complex":
                                pass
@@ -105,6 +118,8 @@ class ParentalControlSetup(Screen, ConfigListScreen, ProtectedScreen):
                                self.session.open(ParentalControlChangePin, config.ParentalControl.servicepin[0], _("service pin"))
                elif self["config"].l.getCurrentSelection() == self.changeSetupPin:
                        self.session.open(ParentalControlChangePin, config.ParentalControl.setuppin, _("setup pin"))
+               elif self["config"].l.getCurrentSelection() == self.reloadLists:
+                       parentalControl.open()
                else:
                        ConfigListScreen.keyRight(self)
                        print "current selection:", self["config"].l.getCurrentSelection()
@@ -149,6 +164,7 @@ class ParentalControlSetup(Screen, ConfigListScreen, ProtectedScreen):
 
        def keyNumberGlobal(self, number):
                pass
+
        # for summary:
        def changedEntry(self):
                for x in self.onChangedEntry:
@@ -224,13 +240,13 @@ class ParentalControlEditor(Screen):
                                if not self.servicesList.has_key(key):
                                        self.servicesList[key] = []
                                self.servicesList[key].append(s)
-
+                       
        def chooseLetter(self):
                print "choose letter"
                mylist = []
                for x in self.servicesList.keys():
                        if x == chr(SPECIAL_CHAR):
-                               x = ("special characters", x)
+                               x = (_("special characters"), x)
                        else:
                                x = (x, x)
                        mylist.append(x)
@@ -242,12 +258,51 @@ class ParentalControlEditor(Screen):
                if result is not None:
                        print "result:", result
                        self.currentLetter = result[1]
-                       self.list = [ParentalControlEntryComponent(x[0], x[1], parentalControl.getProtectionLevel(x[0]) != -1) for x in self.servicesList[result[1]]]
+                       #Replace getProtectionLevel by new getProtectionType
+                       self.list = [ParentalControlEntryComponent(x[0], x[1], parentalControl.getProtectionType(x[0])) for x in self.servicesList[result[1]]]
                        self.servicelist.setList(self.list)
                else:
                        parentalControl.save()
                        self.close()
 
+class ParentalControlBouquetEditor(Screen):
+       #This new class allows adding complete bouquets to black- and whitelists
+       #The servicereference that is stored for bouquets is their refstr as listed in bouquets.tv
+       def __init__(self, session):
+               Screen.__init__(self, session)
+               self.skinName = "ParentalControlEditor"
+               self.list = []
+               self.bouquetslist = ParentalControlList(self.list)
+               self["servicelist"] = self.bouquetslist;
+               self.readBouquetList()
+               self.onLayoutFinish.append(self.selectBouquet)
+
+               self["actions"] = NumberActionMap(["DirectionActions", "ColorActions", "OkCancelActions"],
+               {
+                       "ok": self.select,
+                       "cancel": self.cancel
+               }, -1)
+
+       def cancel(self):
+               parentalControl.save()
+               self.close()
+
+       def select(self):
+               self.bouquetslist.toggleSelectedLock()
+
+       def readBouquetList(self):
+               serviceHandler = eServiceCenter.getInstance()
+               refstr = '1:134:1:0:0:0:0:0:0:0:FROM BOUQUET \"bouquets.tv\" ORDER BY bouquet'
+               bouquetroot = eServiceReference(refstr)
+               self.bouquetlist = {}
+               list = serviceHandler.list(bouquetroot)
+               if list is not None:
+                       self.bouquetlist = list.getContent("CN", True)
+       
+       def selectBouquet(self):
+               self.list = [ParentalControlEntryComponent(x[0], x[1], parentalControl.getProtectionType(x[0])) for x in self.bouquetlist]
+               self.bouquetslist.setList(self.list)
+
 class ParentalControlChangePin(Screen, ConfigListScreen, ProtectedScreen):
        def __init__(self, session, pin, pinname):
                Screen.__init__(self, session)
@@ -264,12 +319,12 @@ class ParentalControlChangePin(Screen, ConfigListScreen, ProtectedScreen):
                self.pin2.addEndNotifier(boundFunction(self.valueChanged, 2))
                self.list.append(getConfigListEntry(_("New pin"), NoSave(self.pin1)))
                self.list.append(getConfigListEntry(_("Reenter new pin"), NoSave(self.pin2)))
-               ConfigListScreen.__init__(self, self.list, session = self.session, on_change = self.changedEntry)
+               ConfigListScreen.__init__(self, self.list)
 #              print "old pin:", pin
                #if pin.value != "aaaa":
                        #self.onFirstExecBegin.append(boundFunction(self.session.openWithCallback, self.pinEntered, PinInput, pinList = [self.pin.value], title = _("please enter the old pin"), windowTitle = _("Change pin code")))
                ProtectedScreen.__init__(self)
-
+               
                self["actions"] = NumberActionMap(["DirectionActions", "ColorActions", "OkCancelActions"],
                {
                        "cancel": self.cancel,
index 3a7df9f..69bf80f 100755 (executable)
@@ -1,5 +1,5 @@
 from Screen import Screen
-
+from Components.Language import language
 from enigma import eConsoleAppContainer
 
 from Components.ActionMap import ActionMap
@@ -9,28 +9,41 @@ from Components.Label import Label
 from Screens.MessageBox import MessageBox
 from Screens.Console import Console
 from Plugins.Plugin import PluginDescriptor
-from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, fileExists, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
 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)
                
-               self["red"] = Label(_("Remove Plugins"))
-               self["green"] = Label(_("Download Plugins"))
+               self["red"] = Label()
+               self["green"] = Label()
                
                self.list = []
                self["list"] = PluginList(self.list)
                
-               self["actions"] = ActionMap(["WizardActions", "ColorActions"],
+               self["actions"] = ActionMap(["WizardActions"],
                {
                        "ok": self.save,
                        "back": self.close,
+               })
+               self["PluginDownloadActions"] = ActionMap(["ColorActions"],
+               {
                        "red": self.delete,
                        "green": self.download
                })
+               self["SoftwareActions"] = ActionMap(["ColorActions"],
+               {
+                       "red": self.openExtensionmanager
+               })
+               self["PluginDownloadActions"].setEnabled(False)
+               self["SoftwareActions"].setEnabled(False)
                self.onFirstExecBegin.append(self.checkWarnings)
                self.onShown.append(self.updateList)
        
@@ -43,7 +56,6 @@ class PluginBrowser(Screen):
                        self.session.open(MessageBox, text = text, type = MessageBox.TYPE_WARNING)
 
        def save(self):
-               #self.close()
                self.run()
        
        def run(self):
@@ -54,7 +66,17 @@ class PluginBrowser(Screen):
                self.pluginlist = plugins.getPlugins(PluginDescriptor.WHERE_PLUGINMENU)
                self.list = [PluginEntryComponent(plugin) for plugin in self.pluginlist]
                self["list"].l.setList(self.list)
-
+               if fileExists(resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/plugin.py")):
+                       self["red"].setText(_("Manage extensions"))
+                       self["green"].setText("")
+                       self["SoftwareActions"].setEnabled(True)
+                       self["PluginDownloadActions"].setEnabled(False)
+               else:
+                       self["red"].setText(_("Remove Plugins"))
+                       self["green"].setText(_("Download Plugins"))
+                       self["SoftwareActions"].setEnabled(False)
+                       self["PluginDownloadActions"].setEnabled(True)
+                       
        def delete(self):
                self.session.openWithCallback(self.PluginDownloadBrowserClosed, PluginDownloadBrowser, PluginDownloadBrowser.REMOVE)
        
@@ -65,6 +87,14 @@ class PluginBrowser(Screen):
                self.updateList()
                self.checkWarnings()
 
+       def openExtensionmanager(self):
+               if fileExists(resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/plugin.py")):
+                       try:
+                               from Plugins.SystemPlugins.SoftwareManager.plugin import PluginManager
+                       except ImportError:
+                               self.session.open(MessageBox, _("The Softwaremanagement extension is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 )
+                       else:
+                               self.session.openWithCallback(self.PluginDownloadBrowserClosed, PluginManager)
 
 class PluginDownloadBrowser(Screen):
        DOWNLOAD = 0
@@ -226,3 +256,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..22ca9fc
--- /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
+from Components.UsageConfig import preferredPath
+
+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,
+                               preferredPath(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"),
+                               preferredPath(self.timer_dirname.value)
+                       )
+               elif currentry == self.instantrec_entry:
+                       self.entrydirname = self.instantrec_dirname
+                       self.session.openWithCallback(
+                               self.dirnameSelected,
+                               MovieLocationBox,
+                               _("Location for instant recordings"),
+                               preferredPath(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 8b5089a..87d65e5 100644 (file)
@@ -5,14 +5,17 @@ from Components.ActionMap import ActionMap
 from Components.ConfigList import ConfigListScreen
 from Components.MenuList import MenuList
 from Components.NimManager import nimmanager
-from Components.config import getConfigListEntry, config, ConfigNothing, ConfigSelection, updateConfigElement
+from Components.config import getConfigListEntry, config, ConfigNothing, ConfigSelection, updateConfigElement,\
+       ConfigSatlist
 from Components.Sources.List import List
 from Screens.MessageBox import MessageBox
+from Screens.ChoiceBox import ChoiceBox
+from Screens.ServiceStopScreen import ServiceStopScreen
 
 from time import mktime, localtime
 from datetime import datetime
 
-class NimSetup(Screen, ConfigListScreen):
+class NimSetup(Screen, ConfigListScreen, ServiceStopScreen):
        def createSimpleSetup(self, list, mode):
                nim = self.nimConfig
                if mode == "single":
@@ -55,7 +58,7 @@ class NimSetup(Screen, ConfigListScreen):
                
        def createConfigMode(self):
                if self.nim.isCompatible("DVB-S"):
-                       choices = { "nothing": _("nothing connected"),
+                       choices = { "nothing": _("not configured"),
                                                "simple": _("simple"),
                                                "advanced": _("advanced")}
                        #if len(nimmanager.getNimListOfType(nimmanager.getNimType(self.slotid), exception = x)) > 0:
@@ -73,6 +76,7 @@ class NimSetup(Screen, ConfigListScreen):
                print "Creating setup"
                self.list = [ ]
 
+               self.multiType = None
                self.configMode = None
                self.diseqcModeEntry = None
                self.advancedSatsEntry = None
@@ -91,6 +95,11 @@ class NimSetup(Screen, ConfigListScreen):
                self.advancedType = None
                self.advancedManufacturer = None
                self.advancedSCR = None
+               
+               if self.nim.isMultiType():
+                       multiType = self.nimConfig.multiType
+                       self.multiType = getConfigListEntry(_("Tuner type"), multiType)
+                       self.list.append(self.multiType)
 
                if self.nim.isCompatible("DVB-S"):
                        self.configMode = getConfigListEntry(_("Configuration Mode"), self.nimConfig.configMode)
@@ -144,6 +153,8 @@ class NimSetup(Screen, ConfigListScreen):
                                        currSat = self.nimConfig.advanced.sat[cur_orb_pos]
                                        self.fillListWithAdvancedSatEntrys(currSat)
                                self.have_advanced = True
+                       if self.nim.description == "Alps BSBE2" and config.usage.setup_level.index >= 2: # expert
+                               self.list.append(getConfigListEntry(_("Tone Amplitude"), self.nimConfig.toneAmplitude))
                elif self.nim.isCompatible("DVB-C"):
                        self.configMode = getConfigListEntry(_("Configuration Mode"), self.nimConfig.configMode)
                        self.list.append(self.configMode)
@@ -195,10 +206,17 @@ class NimSetup(Screen, ConfigListScreen):
                        self.advancedLnbsEntry, self.advancedDiseqcMode, self.advancedUsalsEntry, \
                        self.advancedLof, self.advancedPowerMeasurement, self.turningSpeed, \
                        self.advancedType, self.advancedSCR, self.advancedManufacturer, self.advancedUnicable, \
-                       self.uncommittedDiseqcCommand, self.cableScanType)
+                       self.uncommittedDiseqcCommand, self.cableScanType, self.multiType)
+               if self["config"].getCurrent() == self.multiType:
+                       from Components.NimManager import InitNimManager
+                       InitNimManager(nimmanager)
+                       self.nim = nimmanager.nim_slots[self.slotid]
+                       self.nimConfig = self.nim.config
+                       
                for x in checkList:
                        if self["config"].getCurrent() == x:
                                self.createSetup()
+                               break
 
        def run(self):
                if self.have_advanced and self.nim.config_mode == "advanced":
@@ -342,10 +360,11 @@ 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.restoreService(_("Zap back to service before tuner setup?"))
+               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,21 +384,27 @@ 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 = [ ]
+               
+               ServiceStopScreen.__init__(self)
+               self.stopService()
 
                ConfigListScreen.__init__(self, self.list)
 
-               self["actions"] = ActionMap(["SetupActions"],
+               self["actions"] = ActionMap(["SetupActions", "SatlistShortcutAction"],
                {
                        "ok": self.keySave,
                        "cancel": self.keyCancel,
+                       "nothingconnected": self.nothingConnectedShortcut
                }, -2)
 
                self.slotid = slotid
@@ -396,6 +421,12 @@ class NimSetup(Screen, ConfigListScreen):
                ConfigListScreen.keyRight(self)
                self.newConfig()
                
+       def keyCancel(self):
+               if self["config"].isChanged():
+                       self.session.openWithCallback(self.cancelConfirm, MessageBox, _("Really close without saving settings?"))
+               else:
+                       self.restoreService(_("Zap back to service before tuner setup?"))
+               
        def saveAll(self):
                if self.nim.isCompatible("DVB-S"):
                        # reset connectedTo to all choices to properly store the default value
@@ -415,7 +446,12 @@ class NimSetup(Screen, ConfigListScreen):
                        x[1].cancel()
                # we need to call saveAll to reset the connectedTo choices
                self.saveAll()
-               self.close()
+               self.restoreService(_("Zap back to service before tuner setup?"))
+               
+       def nothingConnectedShortcut(self):
+               if type(self["config"].getCurrent()[1]) is ConfigSatlist:
+                       self["config"].getCurrent()[1].setValue("3601")
+                       self["config"].invalidateCurrent()
                        
 class NimSelection(Screen):
        def __init__(self, session):
@@ -459,20 +495,28 @@ class NimSelection(Screen):
                                                                 "satposdepends": _("second cable of motorized LNB") } [nimConfig.configMode.value]
                                                text += " " + _("Tuner") + " " + ["A", "B", "C", "D"][int(nimConfig.connectedTo.value)]
                                        elif nimConfig.configMode.value == "nothing":
-                                               text = _("nothing connected")
+                                               text = _("not configured")
                                        elif nimConfig.configMode.value == "simple":
                                                if nimConfig.diseqcMode.value in ("single", "toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"):
-                                                       text = _("Sats") + ": " 
+                                                       text = {"single": _("Single"), "toneburst_a_b": _("Toneburst A/B"), "diseqc_a_b": _("DiSEqC A/B"), "diseqc_a_b_c_d": _("DiSEqC A/B/C/D")}[nimConfig.diseqcMode.value] + "\n"
+                                                       text += _("Sats") + ": " 
+                                                       satnames = []
                                                        if nimConfig.diseqcA.orbital_position != 3601:
-                                                               text += nimmanager.getSatName(int(nimConfig.diseqcA.value))
+                                                               satnames.append(nimmanager.getSatName(int(nimConfig.diseqcA.value)))
                                                        if nimConfig.diseqcMode.value in ("toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"):
                                                                if nimConfig.diseqcB.orbital_position != 3601:
-                                                                       text += "," + nimmanager.getSatName(int(nimConfig.diseqcB.value))
+                                                                       satnames.append(nimmanager.getSatName(int(nimConfig.diseqcB.value)))
                                                        if nimConfig.diseqcMode.value == "diseqc_a_b_c_d":
                                                                if nimConfig.diseqcC.orbital_position != 3601:
-                                                                       text += "," + nimmanager.getSatName(int(nimConfig.diseqcC.value))
+                                                                       satnames.append(nimmanager.getSatName(int(nimConfig.diseqcC.value)))
                                                                if nimConfig.diseqcD.orbital_position != 3601:
-                                                                       text += "," + nimmanager.getSatName(int(nimConfig.diseqcD.value))
+                                                                       satnames.append(nimmanager.getSatName(int(nimConfig.diseqcD.value)))
+                                                       if len(satnames) <= 2:
+                                                               text += ", ".join(satnames)
+                                                       elif len(satnames) > 2:
+                                                               # we need a newline here, since multi content lists don't support automtic line wrapping
+                                                               text += ", ".join(satnames[:2]) + ",\n"
+                                                               text += "         " + ", ".join(satnames[2:])
                                                elif nimConfig.diseqcMode.value == "positioner":
                                                        text = _("Positioner") + ":"
                                                        if nimConfig.positionerMode.value == "usals":
@@ -488,6 +532,8 @@ class NimSelection(Screen):
                                                text = _("nothing connected")
                                        elif nimConfig.configMode.value == "enabled":
                                                text = _("enabled")
+                               if x.isMultiType():
+                                       text = _("Switchable tuner types:") + "(" + ','.join(x.getMultiTypeList().values()) + ")" + "\n" + text
                                        
                                self.list.append((slotid, x.friendly_full_description, text, x))
                self["nimlist"].setList(self.list)
index bea0872..960b7f1 100644 (file)
@@ -138,7 +138,8 @@ class CableTransponderSearchSupport:
                                        "QAM128" : parm.Modulation_QAM128,
                                        "QAM256" : parm.Modulation_QAM256 }
                                inv = { "INVERSION_OFF" : parm.Inversion_Off,
-                                       "INVERSION_ON" : parm.Inversion_On }
+                                       "INVERSION_ON" : parm.Inversion_On,
+                                       "INVERSION_AUTO" : parm.Inversion_Unknown }
                                fec = { "FEC_AUTO" : parm.FEC_Auto,
                                        "FEC_1_2" : parm.FEC_1_2,
                                        "FEC_2_3" : parm.FEC_2_3,
@@ -175,7 +176,11 @@ class CableTransponderSearchSupport:
                self.cable_search_container.appClosed.append(self.cableTransponderSearchClosed)
                self.cable_search_container.dataAvail.append(self.getCableTransponderData)
                cableConfig = config.Nims[nim_idx].cable
-               cmd = "tda1002x --init --scan --verbose --wakeup --inv 2 --bus "
+               tunername = nimmanager.getNimName(nim_idx)
+               if tunername == "CXD1981":
+                       cmd = "cxd1978 --init --scan --verbose --wakeup --inv 2 --bus "
+               else:
+                       cmd = "tda1002x --init --scan --verbose --wakeup --inv 2 --bus "
                #FIXMEEEEEE hardcoded i2c devices for dm7025 and dm8000
                if nim_idx < 2:
                        cmd += str(nim_idx)
@@ -524,6 +529,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 dc51144..00e7859 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 7ac7841..f0bf773 100644 (file)
@@ -15,6 +15,7 @@ class Screen(dict, GUISkin):
        global_screen = None
 
        def __init__(self, session, parent = None):
+               dict.__init__(self)
                self.skinName = self.__class__.__name__
                self.session = session
                self.parent = parent
diff --git a/lib/python/Screens/ServiceStopScreen.py b/lib/python/Screens/ServiceStopScreen.py
new file mode 100644 (file)
index 0000000..628a93a
--- /dev/null
@@ -0,0 +1,42 @@
+from Screens.MessageBox import MessageBox
+
+class ServiceStopScreen:
+       def __init__(self):
+               try:
+                       self.session
+               except:
+                       print "[ServiceStopScreen] ERROR: no self.session set"
+
+               self.oldref = None
+               self.onClose.append(self.__onClose)
+               
+       def pipAvailable(self):
+               # pip isn't available in every state of e2
+               try:
+                       self.session.pipshown
+                       pipavailable = True
+               except:
+                       pipavailable = False
+               return pipavailable
+               
+       def stopService(self):          
+               self.oldref = self.session.nav.getCurrentlyPlayingServiceReference()
+               self.session.nav.stopService()
+               if self.pipAvailable():
+                       if self.session.pipshown: # try to disable pip
+                               self.session.pipshown = False
+                               del self.session.pip
+               
+       def __onClose(self):
+               self.session.nav.playService(self.oldref)
+               
+       def restoreService(self, msg = _("Zap back to previously tuned service?")):
+               if self.oldref:
+                       self.session.openWithCallback(self.restartPrevService, MessageBox, msg, MessageBox.TYPE_YESNO)
+               else:
+                       self.restartPrevService(False)
+               
+       def restartPrevService(self, yesno):
+               if not yesno:
+                       self.oldref=None
+               self.close()
\ No newline at end of file
index ff061d8..e5e7af4 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 c598b54..406b87c 100644 (file)
@@ -15,8 +15,6 @@ class Standby(Screen):
                #restart last played service
                #unmute adc
                self.leaveMute()
-               #set brightness of lcd
-               config.lcd.bright.apply()
                #kill me
                self.close(True)
 
@@ -63,8 +61,6 @@ class Standby(Screen):
                        self.avswitch.setInput("SCART")
                else:
                        self.avswitch.setInput("AUX")
-               #set lcd brightness to standby value
-               config.lcd.standby.apply()
                self.onFirstExecBegin.append(self.__onFirstExecBegin)
                self.onClose.append(self.__onClose)
 
index 1453c05..9907e2f 100644 (file)
@@ -1,12 +1,13 @@
 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
 
 class JobView(InfoBarNotifications, Screen, ConfigListScreen):
-       def __init__(self, session, job, parent=None, cancelable = True, backgroundable = True, afterEvent = 0):
+       def __init__(self, session, job, parent=None, cancelable = True, backgroundable = True):
                from Components.Sources.StaticText import StaticText
                from Components.Sources.Progress import Progress
                from Components.Sources.Boolean import Boolean
@@ -42,15 +43,20 @@ class JobView(InfoBarNotifications, Screen, ConfigListScreen):
                    "ok": self.ok,
                }, -2)
 
-               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.job.afterEvent or "nothing")
+               self.job.afterEvent = self.settings.afterEvent.getValue()
                self.setupList()
                self.state_changed()
 
        def setupList(self):
                self["config"].setList( [ getConfigListEntry(_("After event"), self.settings.afterEvent) ])
-               
+               self.job.afterEvent = self.settings.afterEvent.getValue()
+
        def keyLeft(self):
                ConfigListScreen.keyLeft(self)
                self.setupList()
index caaf8c9..5435498 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 edd1968..64fa9f1 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.SystemInfo import SystemInfo
+from Components.UsageConfig import defaultMoviePath
 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)
@@ -101,12 +106,13 @@ class TimerEntry(Screen, ConfigListScreen):
                        self.timerentry_tagsset = ConfigSelection(choices = [not self.timerentry_tags and "None" or " ".join(self.timerentry_tags)])
 
                        self.timerentry_repeated = ConfigSelection(default = repeated, choices = [("daily", _("daily")), ("weekly", _("weekly")), ("weekdays", _("Mon-Fri")), ("user", _("user defined"))])
-
+                       
                        self.timerentry_date = ConfigDateTime(default = self.timer.begin, formatstring = _("%d.%B %Y"), increment = 86400)
                        self.timerentry_starttime = ConfigClock(default = self.timer.begin)
                        self.timerentry_endtime = ConfigClock(default = self.timer.end)
+                       self.timerentry_showendtime = ConfigSelection(default = ((self.timer.end - self.timer.begin) > 4), choices = [(True, _("yes")), (False, _("no"))])
 
-                       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)
@@ -167,11 +173,14 @@ class TimerEntry(Screen, ConfigListScreen):
                
                self.entryStartTime = getConfigListEntry(_("StartTime"), self.timerentry_starttime)
                self.list.append(self.entryStartTime)
-               if self.timerentry_justplay.value != "zap":
-                       self.entryEndTime = getConfigListEntry(_("EndTime"), self.timerentry_endtime)
+               
+               self.entryShowEndTime = getConfigListEntry(_("Set End Time"), self.timerentry_showendtime)
+               if self.timerentry_justplay.value == "zap":
+                       self.list.append(self.entryShowEndTime)
+               self.entryEndTime = getConfigListEntry(_("EndTime"), self.timerentry_endtime)
+               if self.timerentry_justplay.value != "zap" or self.timerentry_showendtime.value:
                        self.list.append(self.entryEndTime)
-               else:
-                       self.entryEndTime = None
+
                self.channelEntry = getConfigListEntry(_("Channel"), self.timerentry_service)
                self.list.append(self.channelEntry)
 
@@ -189,11 +198,7 @@ class TimerEntry(Screen, ConfigListScreen):
 
        def newConfig(self):
                print "newConfig", self["config"].getCurrent()
-               if self["config"].getCurrent() == self.timerTypeEntry:
-                       self.createSetup("config")
-               if self["config"].getCurrent() == self.timerJustplayEntry:
-                       self.createSetup("config")
-               if self["config"].getCurrent() == self.frequencyEntry:
+               if self["config"].getCurrent() in (self.timerTypeEntry, self.timerJustplayEntry, self.frequencyEntry, self.entryShowEndTime):
                        self.createSetup("config")
 
        def keyLeft(self):
@@ -263,6 +268,9 @@ class TimerEntry(Screen, ConfigListScreen):
                self.timer.name = self.timerentry_name.value
                self.timer.description = self.timerentry_description.value
                self.timer.justplay = self.timerentry_justplay.value == "zap"
+               if self.timerentry_justplay.value == "zap":
+                       if not self.timerentry_showendtime.value:
+                               self.timerentry_endtime.value = self.timerentry_starttime.value
                self.timer.resetRepeated()
                self.timer.afterEvent = {
                        "nothing": AFTEREVENT.NONE,
@@ -273,9 +281,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()
diff --git a/lib/python/Screens/UnhandledKey.py b/lib/python/Screens/UnhandledKey.py
new file mode 100644 (file)
index 0000000..63bfed5
--- /dev/null
@@ -0,0 +1,7 @@
+from Screen import Screen
+from Components.Pixmap import Pixmap
+
+class UnhandledKey(Screen):
+       def __init__(self, session):
+               Screen.__init__(self, session)
+               self["UnhandledKeyPixmap"] = Pixmap()
index 19500ed..7846e4b 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 74219eb..1bff028 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 681bc04..8ed2c8a 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 612a565..e72d291 100644 (file)
@@ -3,7 +3,7 @@ class HardwareInfo:
 
        def __init__(self):
                if HardwareInfo.device_name is not None:
-                       print "using cached result"
+#                      print "using cached result"
                        return
 
                HardwareInfo.device_name = "unknown"
index c477f11..2ba7cb4 100644 (file)
@@ -356,6 +356,8 @@ public:
                sTagCRC,
                sTagChannelMode,
 
+               sTransferBPS,
+
                sUser = 0x100
        };
        enum {
@@ -593,7 +595,8 @@ class iTimeshiftService: public iObject
 #endif
 public:
        virtual RESULT startTimeshift()=0;
-       virtual RESULT stopTimeshift()=0;
+       virtual RESULT stopTimeshift(bool swToLive=true)=0;
+       virtual RESULT setNextPlaybackFile(const char *fn)=0; // not needed by our internal timeshift.. but external plugin...
 
        virtual int isTimeshiftActive()=0;
                        /* this essentially seeks to the relative end of the timeshift buffer */
index 05aaf73..cc8c32b 100644 (file)
@@ -526,7 +526,12 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const
                ePtr<iStaticServiceInformation> service_info;
                m_service_center->info(*m_cursor, service_info);
                eServiceReference ref = *m_cursor;
-               bool isPlayable = !(ref.flags & eServiceReference::isDirectory || ref.flags & eServiceReference::isMarker);
+               bool isMarker = ref.flags & eServiceReference::isMarker;
+               bool isPlayable = !(ref.flags & eServiceReference::isDirectory || isMarker);
+               bool paintProgress = false;
+               ePtr<eServiceEvent> evt;
+
+               bool serviceAvail = true;
 
                if (!marked && isPlayable && service_info && m_is_playable_ignore.valid() && !service_info->isPlayable(*m_cursor, m_is_playable_ignore))
                {
@@ -534,12 +539,13 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const
                                painter.setForegroundColor(m_color[serviceNotAvail]);
                        else
                                painter.setForegroundColor(gRGB(0xbbbbbb));
+                       serviceAvail = false;
                }
 
                if (selected && local_style && local_style->m_selection)
                        painter.blit(local_style->m_selection, offset, eRect(), gPainter::BT_ALPHATEST);
 
-               int xoffset=0;  // used as offset when painting the folder/marker symbol
+               int xoffset=0;  // used as offset when painting the folder/marker symbol or the serviceevent progress
 
                for (int e = 0; e < celElements; ++e)
                {
@@ -583,13 +589,19 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const
                                }
                                case celServiceInfo:
                                {
-                                       ePtr<eServiceEvent> evt;
-                                       if ( isPlayable && service_info && !service_info->getEvent(*m_cursor, evt) )
+                                       if ( isPlayable && !service_info->getEvent(*m_cursor, evt) )
                                        {
                                                std::string name = evt->getEventName();
                                                if (!name.length())
                                                        continue;
                                                text = '(' + evt->getEventName() + ')';
+                                               if (serviceAvail)
+                                               {
+                                                       if (!selected && m_color_set[serviceDescriptionColor])
+                                                               painter.setForegroundColor(m_color[serviceDescriptionColor]);
+                                                       else if (selected && m_color_set[serviceDescriptionColorSelected])
+                                                               painter.setForegroundColor(m_color[serviceDescriptionColorSelected]);
+                                               }
                                        }
                                        else
                                                continue;
@@ -608,9 +620,9 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const
                                {
                                        eRect bbox = para->getBoundBox();
                                        int name_width = bbox.width()+8;
-                                       m_element_position[celServiceInfo].setLeft(area.left()+name_width);
+                                       m_element_position[celServiceInfo].setLeft(area.left()+name_width+xoffs);
                                        m_element_position[celServiceInfo].setTop(area.top());
-                                       m_element_position[celServiceInfo].setWidth(area.width()-name_width);
+                                       m_element_position[celServiceInfo].setWidth(area.width()-(name_width+xoffs));
                                        m_element_position[celServiceInfo].setHeight(area.height());
                                }
 
@@ -678,12 +690,62 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const
                                        painter.clippop();
                                }
                        }
+                       else if (e == celServiceEventProgressbar)
+                       {
+                               eRect area = m_element_position[celServiceEventProgressbar];
+                               if (area.width() > 0 && (isPlayable || isMarker))
+                               {
+                                       // we schedule it to paint it as last element.. so we dont need to reset fore/background color
+                                       paintProgress = isPlayable;
+                                       xoffset = area.width() + 10;
+                               }
+                       }
                }
-               
                if (selected && (!local_style || !local_style->m_selection))
                        style.drawFrame(painter, eRect(offset, m_itemsize), eWindowStyle::frameListboxEntry);
+               if (paintProgress && evt)
+               {
+                       eRect area = m_element_position[celServiceEventProgressbar];
+                       if (!selected && m_color_set[serviceEventProgressbarBorderColor])
+                               painter.setForegroundColor(m_color[serviceEventProgressbarBorderColor]);
+                       else if (selected && m_color_set[serviceEventProgressbarBorderColorSelected])
+                               painter.setForegroundColor(m_color[serviceEventProgressbarBorderColorSelected]);
+
+                       int border = 1;
+                       int progressH = 6;
+                       int progressX = area.left() + offset.x();
+                       int progressW = area.width() - 2 * border;
+                       int progressT = offset.y() + (m_itemsize.height() - progressH - 2*border) / 2;
+
+                       // paint progressbar frame
+                       painter.fill(eRect(progressX, progressT, area.width(), border));
+                       painter.fill(eRect(progressX, progressT + border, border, progressH));
+                       painter.fill(eRect(progressX, progressT + progressH + border, area.width(), border));
+                       painter.fill(eRect(progressX + area.width() - border, progressT + border, border, progressH));
+
+                       // calculate value
+                       time_t now = time(0);
+                       int value = progressW * (now - evt->getBeginTime()) / evt->getDuration();
+
+                       eRect tmp = eRect(progressX + border, progressT + border, value, progressH);
+                       ePtr<gPixmap> &pixmap = m_pixmaps[picServiceEventProgressbar];
+                       if (pixmap)
+                       {
+                               area.moveBy(offset);
+                               painter.clip(area);
+                               painter.blit(pixmap, ePoint(progressX + border, progressT + border), tmp, gPainter::BT_ALPHATEST);
+                               painter.clippop();
+                       }
+                       else
+                       {
+                               if (!selected && m_color_set[serviceEventProgressbarColor])
+                                       painter.setForegroundColor(m_color[serviceEventProgressbarColor]);
+                               else if (selected && m_color_set[serviceEventProgressbarColorSelected])
+                                       painter.setForegroundColor(m_color[serviceEventProgressbarColorSelected]);
+                               painter.fill(tmp);
+                       }
+               }
        }
-       
        painter.clippop();
 }
 
index 5228a2f..589afba 100644 (file)
@@ -49,6 +49,7 @@ public:
                celServiceNumber,
                celMarkerPixmap,
                celFolderPixmap,
+               celServiceEventProgressbar,
                celServiceName,
                celServiceTypePixmap,
                celServiceInfo, // "now" event
@@ -62,6 +63,7 @@ public:
                picServiceGroup,
                picFolder,
                picMarker,
+               picServiceEventProgressbar,
                picElements
        };
 
@@ -84,6 +86,12 @@ public:
                markedBackground,
                markedBackgroundSelected,
                serviceNotAvail,
+               serviceEventProgressbarColor,
+               serviceEventProgressbarColorSelected,
+               serviceEventProgressbarBorderColor,
+               serviceEventProgressbarBorderColorSelected,
+               serviceDescriptionColor,
+               serviceDescriptionColorSelected,
                colorElements
        };
        
index 1a28fbd..e498dd4 100644 (file)
@@ -910,14 +910,14 @@ RESULT eServiceFactoryDVB::lookupService(ePtr<eDVBService> &service, const eServ
        return 0;
 }
 
-eDVBServicePlay::eDVBServicePlay(const eServiceReference &ref, eDVBService *service): 
+eDVBServicePlay::eDVBServicePlay(const eServiceReference &ref, eDVBService *service):
        m_reference(ref), m_dvb_service(service), m_have_video_pid(0), m_is_paused(0)
 {
        m_is_primary = 1;
        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);
@@ -1021,14 +1021,18 @@ void eDVBServicePlay::serviceEvent(int event)
                        updateTimeshiftPids();
                if (!m_timeshift_active)
                        updateDecoder();
-               if (m_first_program_info && m_is_pvr)
+               if (m_first_program_info & 1 && m_is_pvr)
                {
-                       m_first_program_info = 0;
+                       m_first_program_info &= ~1;
                        seekTo(0);
                }
-               m_event((iPlayableService*)this, evUpdatedInfo);
+               if (!m_timeshift_active)
+                       m_event((iPlayableService*)this, evUpdatedInfo);
                break;
        }
+       case eDVBServicePMTHandler::eventPreStart:
+               loadCuesheet();
+               break;
        case eDVBServicePMTHandler::eventEOF:
                m_event((iPlayableService*)this, evEOF);
                break;
@@ -1043,17 +1047,85 @@ void eDVBServicePlay::serviceEventTimeshift(int event)
        switch (event)
        {
        case eDVBServicePMTHandler::eventNewProgramInfo:
+               eDebug("eventNewProgramInfo TS");
                if (m_timeshift_active)
+               {
                        updateDecoder();
+                       if (m_first_program_info & 2)
+                       {
+                               if (m_slowmotion)
+                               {
+                                       eDebug("re-apply slowmotion after timeshift file change");
+                                       m_decoder->setSlowMotion(m_slowmotion);
+                               }
+                               if (m_fastforward)
+                               {
+                                       eDebug("re-apply skip %d, ratio %d after timeshift file change", m_skipmode, m_fastforward);
+                                       if (m_skipmode)
+                                               m_cue->setSkipmode(m_skipmode * 90000); /* convert to 90000 per second */
+                                       if (m_fastforward != 1)
+                                               m_decoder->setFastForward(m_fastforward);
+                                       else
+                                               m_decoder->setTrickmode();
+                               }
+                               else
+                                       seekTo(0);
+                               m_first_program_info &= ~2;
+                       }
+                       m_event((iPlayableService*)this, evUpdatedInfo);
+               }
                break;
        case eDVBServicePMTHandler::eventSOF:
-               m_event((iPlayableService*)this, evSOF);
+#if 0
+               if (!m_timeshift_file_next.empty())
+               {
+                       eDebug("timeshift SOF, switch to next file");
+                       m_decoder->pause();
+
+                       m_first_program_info |= 2;
+
+                       eServiceReferenceDVB r = (eServiceReferenceDVB&)m_reference;
+                       r.path = m_timeshift_file_next;
+
+                       /* free the timeshift service handler, we need the resources */
+                       m_service_handler_timeshift.free();
+                       resetTimeshift(1);
+
+                       if (m_skipmode < 0)
+                               m_cue->seekTo(0, -1000);
+                       m_service_handler_timeshift.tune(r, 1, m_cue, 0, m_dvb_service); /* use the decoder demux for everything */
+
+                       m_event((iPlayableService*)this, evUser+1);
+               }
+               else
+#endif
+                       m_event((iPlayableService*)this, evSOF);
                break;
        case eDVBServicePMTHandler::eventEOF:
                if ((!m_is_paused) && (m_skipmode >= 0))
                {
-                       eDebug("timeshift EOF, so let's go live");
-                       switchToLive();
+                       if (m_timeshift_file_next.empty())
+                       {
+                               eDebug("timeshift EOF, so let's go live");
+                               switchToLive();
+                       }
+                       else
+                       {
+                               eDebug("timeshift EOF, switch to next file");
+
+                               m_first_program_info |= 2;
+
+                               eServiceReferenceDVB r = (eServiceReferenceDVB&)m_reference;
+                               r.path = m_timeshift_file_next;
+
+                               /* free the timeshift service handler, we need the resources */
+                               m_service_handler_timeshift.free();
+                               resetTimeshift(1);
+
+                               m_service_handler_timeshift.tune(r, 1, m_cue, 0, m_dvb_service); /* use the decoder demux for everything */
+
+                               m_event((iPlayableService*)this, evUser+1);
+                       }
                }
                break;
        }
@@ -1095,7 +1167,6 @@ RESULT eDVBServicePlay::start()
                        m_event_handler.inject(event, 0);
                        m_event_handler.inject(empty, 1);
                }
-               loadCuesheet();
                m_event(this, evStart);
        }
        return 0;
@@ -1126,11 +1197,7 @@ RESULT eDVBServicePlay::stop()
                        
                        if (length)
                        {
-                               int perc = play_position * 100LL / length;
-                       
-                                       /* only store last play position when between 1% and 99% */
-                               if ((1 < perc) && (perc < 99))
-                                       m_cue_entries.insert(cueEntry(play_position, 3)); /* last play position */
+                               m_cue_entries.insert(cueEntry(play_position, 3)); /* last play position */
                        }
                        m_cuesheet_changed = 1;
                }
@@ -1185,7 +1252,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 +1267,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 +1296,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 +1346,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 +1359,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 +1452,14 @@ RESULT eDVBServicePlay::setTrickmode(int trick)
 
 RESULT eDVBServicePlay::isCurrentlySeekable()
 {
-       return m_is_pvr || m_timeshift_active;
+       int ret = 0;
+       if (m_decoder)
+       {
+               ret = (m_is_pvr || m_timeshift_active) ? 3 : 0; // fast forward/backward possible and seeking possible
+               if (m_decoder->getVideoProgressive() == -1)
+                       ret &= ~2;
+       }
+       return ret;
 }
 
 RESULT eDVBServicePlay::frontendInfo(ePtr<iFrontendInformation> &ptr)
@@ -1728,6 +1817,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 +1840,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 +1851,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 */
@@ -2058,12 +2154,13 @@ RESULT eDVBServicePlay::startTimeshift()
        return 0;
 }
 
-RESULT eDVBServicePlay::stopTimeshift()
+RESULT eDVBServicePlay::stopTimeshift(bool swToLive)
 {
        if (!m_timeshift_enabled)
                return -1;
        
-       switchToLive();
+       if (swToLive)
+               switchToLive();
        
        m_timeshift_enabled = 0;
        
@@ -2212,33 +2309,51 @@ void eDVBServicePlay::updateTimeshiftPids()
        }
 }
 
+RESULT eDVBServicePlay::setNextPlaybackFile(const char *f)
+{
+       m_timeshift_file_next = f;
+       return 0;
+}
+
 void eDVBServicePlay::switchToLive()
 {
        if (!m_timeshift_active)
                return;
-       
+
        eDebug("SwitchToLive");
-       
+
+       resetTimeshift(0);
+
+       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();
+
+       updateDecoder(true);
+}
+
+void eDVBServicePlay::resetTimeshift(int start)
+{
        m_cue = 0;
-       m_decoder = 0;
        m_decode_demux = 0;
+       m_decoder = 0;
        m_teletext_parser = 0;
        m_rds_decoder = 0;
        m_subtitle_parser = 0;
-       m_new_dvb_subtitle_page_connection = 0;
        m_new_subtitle_page_connection = 0;
+       m_new_dvb_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 */
-
-               /* free the timeshift service handler, we need the resources */
-       m_service_handler_timeshift.free();
-       m_timeshift_active = 0;
        m_timeshift_changed = 1;
+       m_timeshift_file_next.clear();
 
-       m_event((iPlayableService*)this, evSeekableStatusChanged);
-
-       updateDecoder();
+       if (start)
+       {
+               m_cue = new eCueSheet();
+               m_timeshift_active = 1;
+       }
+       else
+               m_timeshift_active = 0;
 }
 
 void eDVBServicePlay::switchToTimeshift()
@@ -2246,35 +2361,23 @@ void eDVBServicePlay::switchToTimeshift()
        if (m_timeshift_active)
                return;
 
-       m_decode_demux = 0;
-       m_decoder = 0;
-       m_teletext_parser = 0;
-       m_rds_decoder = 0;
-       m_subtitle_parser = 0;
-       m_new_subtitle_page_connection = 0;
-       m_new_dvb_subtitle_page_connection = 0;
-       m_rds_decoder_event_connection = 0;
-       m_video_event_connection = 0;
-
-       m_timeshift_active = 1;
-       m_timeshift_changed = 1;
+       resetTimeshift(1);
 
        eServiceReferenceDVB r = (eServiceReferenceDVB&)m_reference;
        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);
+       updateDecoder(true); /* mainly to switch off PCR, and to set pause */
 }
 
-void eDVBServicePlay::updateDecoder()
+void eDVBServicePlay::updateDecoder(bool sendSeekableStateChanged)
 {
        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;
 
@@ -2325,8 +2428,6 @@ void eDVBServicePlay::updateDecoder()
        if (!m_decoder)
        {
                h.getDecodeDemux(m_decode_demux);
-               if (m_timeshift_changed)
-                       m_decoder = 0;
                if (m_decode_demux)
                {
                        m_decode_demux->getMPEGDecoder(m_decoder, m_is_primary);
@@ -2355,17 +2456,17 @@ 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;
 
        if (m_decoder)
        {
+               bool wasSeekable = m_decoder->getVideoProgressive() != -1;
                if (m_dvb_service)
                {
                        achannel = m_dvb_service->getCacheEntry(eDVBService::cACHANNEL);
@@ -2398,17 +2499,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 +2525,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 */
@@ -2445,8 +2541,13 @@ void eDVBServicePlay::updateDecoder()
                        m_dvb_service->setCacheEntry(eDVBService::cPCRPID, pcrpid);
                        m_dvb_service->setCacheEntry(eDVBService::cTPID, tpid);
                }
+               if (!sendSeekableStateChanged && (m_decoder->getVideoProgressive() != -1) != wasSeekable)
+                       sendSeekableStateChanged = true;
        }
        m_have_video_pid = (vpid > 0 && vpid < 0x2000);
+
+       if (sendSeekableStateChanged)
+               m_event((iPlayableService*)this, evSeekableStatusChanged);
 }
 
 void eDVBServicePlay::loadCuesheet()
@@ -2547,7 +2648,7 @@ void eDVBServicePlay::cutlistToCuesheet()
        {
                if (i == m_cue_entries.end())
                {
-                       if (!have_any_span)
+                       if (!have_any_span && !in)
                                break;
                        out = length;
                } else {
@@ -2577,6 +2678,7 @@ void eDVBServicePlay::cutlistToCuesheet()
                {
                        have_any_span = 1;
                        m_cue->addSourceSpan(in, out);
+                       in = out = 0;
                }
                
                in = length;
@@ -2932,16 +3034,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 b4d0f19..dafaf35 100644 (file)
@@ -159,9 +159,10 @@ public:
 
                // iTimeshiftService
        RESULT startTimeshift();
-       RESULT stopTimeshift();
+       RESULT stopTimeshift(bool swToLive=true);
        int isTimeshiftActive();
        RESULT activateTimeshift();
+       RESULT setNextPlaybackFile(const char *fn);
 
                // iCueSheet
        PyObject *getCutList();
@@ -213,14 +214,13 @@ private:
        int m_is_pvr, m_is_paused, m_timeshift_enabled, m_timeshift_active, m_timeshift_changed;
        int m_first_program_info;
        
-       std::string m_timeshift_file;
+       std::string m_timeshift_file, m_timeshift_file_next;
        int m_timeshift_fd;
-       
        ePtr<iDVBDemux> m_decode_demux;
 
        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;
@@ -228,11 +228,15 @@ private:
 
        void updateTimeshiftPids();
        void switchToLive();
+
+       void resetTimeshift(int start);
        void switchToTimeshift();
-       
-       void updateDecoder();
+
+       void updateDecoder(bool sendSeekableStateChanged=false);
        
        int m_skipmode;
+       int m_fastforward;
+       int m_slowmotion;
        
                /* cuesheet */
        
index 34d0936..0b2ac9d 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);
        }
 
@@ -186,7 +190,28 @@ int eStaticServiceMP3Info::getLength(const eServiceReference &ref)
        return -1;
 }
 
+int eStaticServiceMP3Info::getInfo(const eServiceReference &ref, int w)
+{
+       switch (w)
+       {
+       case iServiceInformation::sTimeCreate:
+       {
+               struct stat s;
+               if(stat(ref.path.c_str(), &s) == 0)
+               {
+                 return s.st_mtime;
+               }
+               return iServiceInformation::resNA;
+       }
+       default: break;
+       }
+       return iServiceInformation::resNA;
+}
+
 // eServiceMP3
+int eServiceMP3::ac3_delay,
+    eServiceMP3::pcm_delay;
 
 eServiceMP3::eServiceMP3(eServiceReference ref)
        :m_ref(ref), m_pump(eApp, 1)
@@ -278,11 +303,11 @@ eServiceMP3::eServiceMP3(eServiceReference ref)
                if ( ret == -1 ) // this is a "REAL" VCD
                        uri = g_strdup_printf ("vcd://");
                else
-                       uri = g_strdup_printf ("file://%s", filename);
+                       uri = g_filename_to_uri(filename, NULL, NULL);
        }
        else
 
-               uri = g_strdup_printf ("file://%s", filename);
+               uri = g_filename_to_uri(filename, NULL, NULL);
 
        eDebug("eServiceMP3::playbin2 uri=%s", uri);
 
@@ -316,9 +341,8 @@ eServiceMP3::eServiceMP3(eServiceReference ref)
                struct stat buffer;
                if (stat(srt_filename, &buffer) == 0)
                {
-                       std::string suburi = "file://" + (std::string)srt_filename;
-                       eDebug("eServiceMP3::subtitle uri: %s",suburi.c_str());
-                       g_object_set (G_OBJECT (m_gst_playbin), "suburi", suburi.c_str(), NULL);
+                       eDebug("eServiceMP3::subtitle uri: %s", g_filename_to_uri(srt_filename, NULL, NULL));
+                       g_object_set (G_OBJECT (m_gst_playbin), "suburi", g_filename_to_uri(srt_filename, NULL, NULL), NULL);
                        subtitleStream subs;
                        subs.type = stSRT;
                        subs.language_code = std::string("und");
@@ -635,7 +659,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 +707,6 @@ RESULT eServiceMP3::getName(std::string &name)
        return 0;
 }
 
-
 int eServiceMP3::getInfo(int w)
 {
        const gchar *tag = 0;
@@ -955,6 +1002,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 +1146,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 +1634,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 15ed0b0..56a068b 100644 (file)
@@ -41,6 +41,7 @@ class eStaticServiceMP3Info: public iStaticServiceInformation
 public:
        RESULT getName(const eServiceReference &ref, std::string &name);
        int getLength(const eServiceReference &ref);
+       int getInfo(const eServiceReference &ref, int w);
 };
 
 typedef struct _GstElement GstElement;
@@ -49,8 +50,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 +72,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 +125,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 +175,8 @@ public:
                }
        };
 private:
+       static int pcm_delay;
+       static int ac3_delay;
        int m_currentAudioStream;
        int m_currentSubtitleStream;
        int selectAudioStream(int i);
index 44e6a6e..6b9adfb 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 a37289a..4f26387 100644 (file)
@@ -27,7 +27,17 @@ entries: .svn/entries
 
 version.h: entries
        > version.h
-       if [ -d .svn ]; then echo "#define ENIGMA2_CHECKOUT_TAG \"D`svn info | grep 'Last Changed Date:' | sed -e 's/[^:]*: \(....\)-\(..\)-\(..\) \(..\):\(..\):\(..\).*+.*$$/\1.\2.\3.\4.\5.\6/'`\"" >> version.h; fi
+       @if [ -d .svn ]; then \
+               echo "#define ENIGMA2_LAST_CHANGE_DATE \"`LANG="en" svn info | grep 'Last Changed Date:' | cut -d' ' -f4`\"" >> version.h; \
+       elif [ -d ../.git ]; then \
+               if [ -f ../.git/last_commit_info ]; then \
+                       echo "#define ENIGMA2_LAST_CHANGE_DATE \"`cat ../.git/last_commit_info | grep 'Date:' | cut -d' ' -f4`\"" >> version.h; \
+                       echo "#define ENIGMA2_BRANCH \"`cat ../.git/branch`\"" >> version.h; \
+               else \
+                       echo "#define ENIGMA2_LAST_CHANGE_DATE \"`LANG="en" git log --max-count=1 --date=short | grep 'Date:' | cut -d' ' -f4`\"" >> version.h; \
+                       echo "#define ENIGMA2_BRANCH \"`LANG="en" git branch | grep '* ' | cut -d' ' -f2`\"" >> version.h; \
+               fi; \
+       fi;
 
 enigma2_LDADD_WHOLE = \
        $(top_builddir)/lib/actions/libenigma_actions.a \
index be9d9a5..3f420b4 100644 (file)
@@ -309,14 +309,21 @@ void quitMainloop(int exitCode)
 
 const char *getEnigmaVersionString()
 {
-       return 
-#ifdef ENIGMA2_CHECKOUT_TAG
-               ENIGMA2_CHECKOUT_TAG
+       std::string date =
+#ifdef ENIGMA2_LAST_CHANGE_DATE
+               ENIGMA2_LAST_CHANGE_DATE;
 #else
-               "HEAD"
+               __DATE__;
 #endif
-                       "-" __DATE__;
+       std::string branch =
+#ifdef ENIGMA2_BRANCH
+               ENIGMA2_BRANCH;
+#else
+               "HEAD";
+#endif
+       return std::string(date + '-' + branch).c_str();
 }
+
 #include <malloc.h>
 
 void dump_malloc_stats(void)
index e42c100..4b687e0 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...
@@ -363,9 +363,10 @@ class PowerKey:
        def powerlong(self):
                if Screens.Standby.inTryQuitMainloop or (self.session.current_dialog and not self.session.current_dialog.ALLOW_SUSPEND):
                        return
+               self.doAction(action = config.usage.on_long_powerpress.value)
 
+       def doAction(self, action):
                self.standbyblocked = 1
-               action = config.usage.on_long_powerpress.value
                if action == "shutdown":
                        self.shutdown()
                elif action == "show_menu":
@@ -380,14 +381,15 @@ class PowerKey:
                                                menu_screen = self.session.openWithCallback(self.MenuClosed, MainMenu, x)
                                                menu_screen.setTitle(_("Standby / Restart"))
                                                return
+               elif action == "standby":
+                       self.standby()
 
        def powerdown(self):
                self.standbyblocked = 0
 
        def powerup(self):
                if self.standbyblocked == 0:
-                       self.standbyblocked = 1
-                       self.standby()
+                       self.doAction(action = config.usage.on_short_powerpress.value)
 
        def standby(self):
                if not Screens.Standby.inStandby and self.session.current_dialog and self.session.current_dialog.ALLOW_SUSPEND and self.session.in_exec:
index 2319b7f..ba04440 100755 (executable)
@@ -9,11 +9,13 @@ LANGS := $(shell cat $(srcdir)/LINGUAS)
 LANGPO := $(foreach LANG, $(LANGS),$(LANG).po)
 LANGMO := $(foreach LANG, $(LANGS),$(LANG).mo)
 
-default: enigma2.pot $(LANGPO) merge $(LANGMO)
+default: enigma2.pot $(LANGMO)
        for lang in $(LANGS); do \
                mkdir -p $$lang/LC_MESSAGES; \
                cp $$lang.mo $$lang/LC_MESSAGES/enigma2.mo; \
        done
+       
+rebuild: clean cleanall enigma2.pot $(LANGPO) merge default
 
 merge:
        for lang in $(LANGS); do \
@@ -33,14 +35,10 @@ 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
        mv enigma2uniq.pot enigma2.pot
 
-.PHONY: enigma2.pot
-
-
 %.mo: %.po
        $(MSGFMT) -o $@ $<
 
@@ -49,6 +47,9 @@ enigma2.pot:
 
 CLEANFILES = $(foreach LANG, $(LANGS),$(LANG).mo)
 
+cleanall:
+       $(RM) enigma2.pot
+
 clean-local:
        $(RM) -r $(LANGS)
 
index af31414..abf2dfb 100755 (executable)
--- a/po/ar.po
+++ b/po/ar.po
@@ -1981,8 +1981,8 @@ msgstr ""
 msgid "Language selection"
 msgstr "إختيار اللغه"
 
-msgid "Language..."
-msgstr ""
+msgid "Language"
+msgstr "لغه"
 
 msgid "Last config"
 msgstr ""
@@ -5719,9 +5719,6 @@ msgstr ""
 #~ msgid "LCD Setup"
 #~ msgstr "ضبط شاشه الكريستال"
 
-#~ msgid "Language"
-#~ msgstr "لغه"
-
 #~ msgid "Movie Menu"
 #~ msgstr "قائمه الافلام"
 
index 9c864b1..f031cc1 100755 (executable)
--- a/po/ca.po
+++ b/po/ca.po
@@ -2032,8 +2032,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Selecció d'idioma"
 
-msgid "Language..."
-msgstr "Idioma..."
+msgid "Language"
+msgstr "Idioma"
 
 msgid "Last config"
 msgstr ""
index 52a5e67..14d56c3 100755 (executable)
--- a/po/cs.po
+++ b/po/cs.po
@@ -2029,8 +2029,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Výběr jazyka"
 
-msgid "Language..."
-msgstr "Jazyk..."
+msgid "Language"
+msgstr "Jazyk"
 
 msgid "Last config"
 msgstr ""
index 4364262..6e5bfa5 100755 (executable)
--- a/po/da.po
+++ b/po/da.po
@@ -2054,8 +2054,8 @@ msgstr "LOF/V"
 msgid "Language selection"
 msgstr "Valg af sprog"
 
-msgid "Language..."
-msgstr "Sprog..."
+msgid "Language"
+msgstr "Sprog"
 
 msgid "Last config"
 msgstr "Seneste opsætning"
index 39ec331..4de23c1 100755 (executable)
--- 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"
@@ -52,7 +52,7 @@ msgid ""
 "Manage extensions or plugins for your Dreambox"
 msgstr ""
 "\n"
-"Verwalten Sie die Erweiterungen und Plugins für Ihre Dreambox"
+"Verwalten Sie die Erweiterungen und Plugins Ihrer Dreambox"
 
 msgid ""
 "\n"
@@ -221,7 +221,7 @@ msgid "1"
 msgstr "1"
 
 msgid "1 wireless network found!"
-msgstr "1 Funk Netzwerk gefunden!"
+msgstr "1 Funk-Netzwerk gefunden!"
 
 msgid "1.0"
 msgstr "1.0"
@@ -380,7 +380,7 @@ msgid ""
 "\n"
 "Do you want to disable the second network interface?"
 msgstr ""
-"Eine zweite konfigurierte netzwerkverbindung wurde gefunden.\n"
+"Eine zweite konfigurierte Netzwerkverbindung wurde gefunden.\n"
 "\n"
 "Wollen Sie diese zweite Netzwerkverbindung deaktivieren?"
 
@@ -436,7 +436,7 @@ msgid "Accesspoint:"
 msgstr "Zugangspunkt:"
 
 msgid "Action on long powerbutton press"
-msgstr "Aktion beim langen Druck auf Power"
+msgstr "Aktion nach langem Drücken auf Power"
 
 msgid "Action:"
 msgstr "Aktion:"
@@ -472,7 +472,7 @@ msgid "Add timer"
 msgstr "Timer setzen"
 
 msgid "Add title"
-msgstr "Weiterer Titel"
+msgstr "Titel hinzufügen"
 
 msgid "Add to bouquet"
 msgstr "Zum Bouquet hinzufügen"
@@ -514,7 +514,7 @@ msgid "Advanced restore"
 msgstr "Erweiterte Wiederherstellung"
 
 msgid "After event"
-msgstr "Nach dem Ereignis"
+msgstr "Nach dem Event"
 
 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."
@@ -532,7 +532,7 @@ msgid "Alpha"
 msgstr "Transparenz"
 
 msgid "Alternative radio mode"
-msgstr "Alternativer Radio Modus"
+msgstr "Alternativer Radio-Modus"
 
 msgid "Alternative services tuner priority"
 msgstr "Tuner-Priorität bei Alternativen Services"
@@ -547,7 +547,7 @@ msgid "An unknown error occured!"
 msgstr "Es ist ein unbekannter Fehler aufgetreten!"
 
 msgid "Anonymize crashlog?"
-msgstr "Crashlogs anonymisieren ?"
+msgstr "Crashlogs anonymisieren?"
 
 msgid "Arabic"
 msgstr "Arabisch"
@@ -556,7 +556,7 @@ msgid ""
 "Are you sure you want to activate this network configuration?\n"
 "\n"
 msgstr ""
-"Sind Sie sicher, dass diese Netzwerkkonfiguration aktiviert werden soll?\n"
+"Sind Sie sicher, dass diese Netzwerk-Konfiguration aktiviert werden soll?\n"
 "\n"
 
 msgid ""
@@ -587,8 +587,8 @@ 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 !"
+"Wollen Sie wirklich ihr Enigma2 Backup wiederherstellen?\n"
+"Enigma2 wird danach neu gestartet!"
 
 msgid "Artist"
 msgstr "Künstler"
@@ -597,7 +597,7 @@ msgid "Ask before shutdown:"
 msgstr "Vor dem Ausschalten fragen:"
 
 msgid "Ask user"
-msgstr "Benutzer fragen"
+msgstr "Nutzer fragen"
 
 msgid "Aspect Ratio"
 msgstr "Seitenverhältnis"
@@ -609,7 +609,7 @@ msgid "Audio Options..."
 msgstr "Audio-Optionen..."
 
 msgid "Author: "
-msgstr "Autor:"
+msgstr "Author: "
 
 msgid "Authoring mode"
 msgstr "Ablaufmodus"
@@ -725,8 +725,8 @@ msgstr "Brenne DVD"
 msgid "Burn existing image to DVD"
 msgstr "Vorhandenes Image auf DVD brennen"
 
-msgid "Burn to DVD..."
-msgstr "Auf DVD brennen..."
+msgid "Burn to DVD"
+msgstr "Auf DVD brennen"
 
 msgid "Bus: "
 msgstr "Bus:"
@@ -759,10 +759,10 @@ msgid "Call monitoring"
 msgstr "Anrufmonitor"
 
 msgid "Cancel"
-msgstr "Abbruch"
+msgstr "Abbrechen"
 
 msgid "Cannot parse feed directory"
-msgstr "Konnte das Feed Verzeichnis nicht lesen."
+msgstr "Konnte das Feed-Verzeichnis nicht lesen."
 
 msgid "Capacity: "
 msgstr "Kapazität: "
@@ -828,7 +828,7 @@ msgid "Choose Tuner"
 msgstr "Tuner wählen"
 
 msgid "Choose a wireless network"
-msgstr "Wählen Sie ein Funk Netzwerk"
+msgstr "Wählen Sie ein Funk-Netzwerk"
 
 msgid "Choose backup files"
 msgstr "Wählen Sie die zu sichernden Dateien"
@@ -843,7 +843,7 @@ msgid "Choose source"
 msgstr "Quelle wählen"
 
 msgid "Choose target folder"
-msgstr "Zielverzeichnis wählen"
+msgstr "Wähle Zielverzeichnis"
 
 msgid "Choose upgrade source"
 msgstr "Wählen Sie die Upgrade-Quelle"
@@ -897,7 +897,7 @@ msgid "Collection name"
 msgstr "Zusammenstellungsname"
 
 msgid "Collection settings"
-msgstr "Zusammenstellungseinstellungen"
+msgstr "Zusammenstellungs-Einstellungen"
 
 msgid "Color Format"
 msgstr "Farbformat"
@@ -954,7 +954,7 @@ msgid "Configure your network again"
 msgstr "Netzwerk erneut konfigurieren"
 
 msgid "Configure your wireless LAN again"
-msgstr "Funknetzwerk erneut konfigurieren"
+msgstr "Funk-Netzwerk erneut konfigurieren"
 
 msgid "Configuring"
 msgstr "Konfiguriere"
@@ -966,7 +966,7 @@ msgid "Connect"
 msgstr "Verbinden"
 
 msgid "Connect to a Wireless Network"
-msgstr "Mit Funknetzwerk verbinden"
+msgstr "Mit Funk-Netzwerk verbinden"
 
 msgid "Connected to"
 msgstr "Verbunden mit"
@@ -1016,7 +1016,7 @@ msgstr "Bild in Bild konnte nicht geöffnet werden."
 
 #, python-format
 msgid "Couldn't record due to conflicting timer %s"
-msgstr "Aufnahme wegen in Konflikt stehenedem timer %s fehlgeschlagen"
+msgstr "Aufnahme wegen in Konflikt stehendem Timer %s fehlgeschlagen"
 
 msgid "Crashlog settings"
 msgstr "Crashlog Einstellungen"
@@ -1041,7 +1041,7 @@ msgid ""
 "Crashlogs found!\n"
 "Send them to Dream Multimedia?"
 msgstr ""
-"Crashlogs wurden gefunden!\n"
+"Crashlogs gefunden!\n"
 "Wollen Sie diese an Dream Multimedia übermitteln?"
 
 msgid "Create DVD-ISO"
@@ -1127,7 +1127,7 @@ msgid "Decide if you want to enable or disable the Cleanup Wizard."
 msgstr "Entscheiden Sie ob Sie den Aufräumassistenten aktivieren oder deaktivieren möchten."
 
 msgid "Decide what should be done when crashlogs are found."
-msgstr "Entscheiden Sie was passieren soll wenn Crashlogs gefundenen wurden."
+msgstr "Entscheiden Sie was passieren soll wenn Crashlogs gefunden wurden."
 
 msgid "Decide what should happen to the crashlogs after submission."
 msgstr "Entscheiden Sie was mit übermittelten Crashlogs passieren soll."
@@ -1145,7 +1145,7 @@ msgid "Default movie location"
 msgstr ""
 
 msgid "Default services lists"
-msgstr "Standard Kanallisten"
+msgstr "Standard-Kanallisten"
 
 msgid "Default settings"
 msgstr "Standard-Einstellungen"
@@ -1241,7 +1241,7 @@ msgid "Disable timer"
 msgstr "Timer deaktivieren"
 
 msgid "Disabled"
-msgstr "Ausgeschaltet"
+msgstr "Deaktiviert"
 
 msgid "Disconnect"
 msgstr "Trennen"
@@ -1289,7 +1289,7 @@ msgstr ""
 
 #, python-format
 msgid "Do you really want to delete %s?"
-msgstr "Wollen Sie \"%s\" wirklich löschen?"
+msgstr "%s wirklich löschen?"
 
 #, python-format
 msgid ""
@@ -1297,6 +1297,9 @@ msgid ""
 "the plugin \"%s\"?"
 msgstr "Wollen Sie das plugin \"%s\" wirklich herunterladen?"
 
+msgid "Do you really want to exit?"
+msgstr "Wollen Sie wirklich beenden?"
+
 msgid ""
 "Do you really want to initialize the harddisk?\n"
 "All data on the disk will be lost!"
@@ -1442,7 +1445,7 @@ msgid "East"
 msgstr "Ost"
 
 msgid "Edit"
-msgstr ""
+msgstr "Bearbeiten"
 
 msgid "Edit DNS"
 msgstr "Bearbeite DNS"
@@ -1496,7 +1499,7 @@ msgid "Enabled"
 msgstr "Eingeschaltet"
 
 msgid "Encrypted: "
-msgstr ""
+msgstr "Verschlüsselt:"
 
 msgid "Encryption"
 msgstr "Verschlüsselung"
@@ -1565,7 +1568,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 "Bitte geben Sie Ihre Email-Adresse ein, damit wir Sie bei bedarf kontaktieren können."
+msgstr "Bitte geben Sie Ihre Email-Adresse ein, damit wir Sie bei Bedarf kontaktieren können."
 
 msgid "Error"
 msgstr "Fehler"
@@ -1649,15 +1652,15 @@ msgstr "Fehlgeschlagen"
 
 #, python-format
 msgid "Fan %d"
-msgstr ""
+msgstr "Lüfter %d"
 
 #, python-format
 msgid "Fan %d PWM"
-msgstr ""
+msgstr "Lüfter %d PWM"
 
 #, python-format
 msgid "Fan %d Voltage"
-msgstr ""
+msgstr "Lüfter %d Spannung"
 
 msgid "Fast"
 msgstr "Schnell"
@@ -1783,7 +1786,7 @@ msgid "German"
 msgstr "Deutsch"
 
 msgid "Getting plugin information. Please wait..."
-msgstr "Hole Plugin-Informationen. Bitte warten..."
+msgstr "Lade Plugin-Informationen. Bitte warten..."
 
 msgid "Goto 0"
 msgstr "Gehe zu 0"
@@ -1816,7 +1819,7 @@ msgid "Harddisk standby after"
 msgstr "Festplatten-Standby nach"
 
 msgid "Hidden network SSID"
-msgstr "Verstecke Netzwerk SSID"
+msgstr "Versteckte Netzwerk SSID"
 
 msgid "Hidden networkname"
 msgstr "versteckte SSID"
@@ -1866,7 +1869,7 @@ msgid ""
 msgstr ""
 "Wenn Sie diese Meldung sehen, ist Ihr\n"
 "Scart-Kabel falsch angeschlossen. Bitte OK\n"
-"drücken, um zurückzuspringen."
+"drücken, um zurück zu gelangen."
 
 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"
@@ -1948,7 +1951,7 @@ msgid "Install or remove finished."
 msgstr "Installation oder Deinstallation beendet."
 
 msgid "Install settings, skins, software..."
-msgstr ""
+msgstr "Einstellungen, skins, Software... installieren"
 
 msgid "Installation finished."
 msgstr "Installation beendet."
@@ -1972,7 +1975,7 @@ msgid "Instant Record..."
 msgstr "Sofortaufnahme..."
 
 msgid "Instant record location"
-msgstr ""
+msgstr "Sofortaufnahme-Verzeichnis"
 
 msgid "Integrated Ethernet"
 msgstr "Eingebaute Netzwerkschnittstelle"
@@ -2014,7 +2017,8 @@ 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 ""
 
@@ -2048,8 +2052,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Sprachauswahl"
 
-msgid "Language..."
-msgstr "Sprache..."
+msgid "Language"
+msgstr "Sprache"
 
 msgid "Last config"
 msgstr "Letzte Konfiguration"
@@ -2069,7 +2073,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 ""
 
@@ -2113,10 +2118,10 @@ msgid "Local Network"
 msgstr "Int. Netzwerk"
 
 msgid "Location"
-msgstr "Ort"
+msgstr "Zielverzeichnis"
 
 msgid "Location for instant recordings"
-msgstr ""
+msgstr "Verzeichnis für Sofortaufnahmen"
 
 msgid "Lock:"
 msgstr "Signal:"
@@ -2188,7 +2193,7 @@ msgid "Medium is not empty!"
 msgstr "Das Medium ist nicht leer!"
 
 msgid "Menu"
-msgstr "Menü"
+msgstr "Menu"
 
 msgid "Message"
 msgstr "Nachricht"
@@ -2236,7 +2241,7 @@ msgid "Move west"
 msgstr "Drehen nach Westen"
 
 msgid "Movie location"
-msgstr "Film Lokation"
+msgstr "Film Verzeichnis"
 
 msgid "Movielist menu"
 msgstr "Aufnahmen-Menü"
@@ -2257,7 +2262,7 @@ msgid "Mute"
 msgstr "Stummschaltung"
 
 msgid "N/A"
-msgstr "Nicht verfügbar"
+msgstr "N/V"
 
 msgid "NEXT"
 msgstr "NÄCHSTE"
@@ -2389,7 +2394,7 @@ msgid "No event info found, recording indefinitely."
 msgstr "Keine EPG-Daten gefunden. Starte unbegrenzte Aufnahme."
 
 msgid "No fast winding possible yet.. but you can use the number buttons to skip forward/backward!"
-msgstr ""
+msgstr "Spulen nicht möglich, aber Sie können mit Hilfe der Zahlen-Tasten springen!"
 
 msgid "No free tuner!"
 msgstr "Kein freier Tuner"
@@ -2418,7 +2423,7 @@ msgid "No tags are set on these movies."
 msgstr ""
 
 msgid "No to all"
-msgstr ""
+msgstr "Nein zu allen"
 
 msgid "No tuner is configured for use with a diseqc positioner!"
 msgstr "Es wurde kein Tuner für die Benutzung eines DiSEqC-Rotors konfiguriert."
@@ -2452,7 +2457,7 @@ msgstr ""
 "Wenn Sie 'NEIN' wählen, bleibt der Einstellungen-Schutz deaktiviert!"
 
 msgid "No wireless networks found! Please refresh."
-msgstr "Keine Funknetzwerke gefunden! Bitte aktualisieren."
+msgstr "Keine Funk-Netzwerke gefunden! Bitte aktualisieren."
 
 msgid ""
 "No working local network adapter found.\n"
@@ -2494,9 +2499,10 @@ msgid "No, send them never"
 msgstr "Nein, niemals senden"
 
 msgid "None"
-msgstr "Keins"
+msgstr "Keine"
 
-#. 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"
 
@@ -2539,7 +2545,7 @@ msgid "OSD Settings"
 msgstr "OSD-Einstellungen"
 
 msgid "OSD visibility"
-msgstr "GUI Deckkraft"
+msgstr "GUI-Deckkraft"
 
 msgid "Off"
 msgstr "Aus"
@@ -2554,7 +2560,7 @@ msgid "Online-Upgrade"
 msgstr "Online-Aktualisierung"
 
 msgid "Only Free scan"
-msgstr ""
+msgstr "Nur frei empfangbare"
 
 msgid "Only extensions."
 msgstr "Nur Erweiterungen."
@@ -2563,7 +2569,7 @@ msgid "Optionally enter your name if you want to."
 msgstr "Optional können Sie hier Ihren Namen eingeben."
 
 msgid "Orbital Position"
-msgstr "Orbitposition"
+msgstr "Orbit Position"
 
 msgid "PAL"
 msgstr "PAL"
@@ -2589,7 +2595,8 @@ 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 ""
 
@@ -2623,7 +2630,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 ""
 
@@ -2654,6 +2662,9 @@ msgstr "Bitte neu starten"
 msgid "Please Select Medium to be Scanned"
 msgstr "Bitte Medium zum Scannen auswählen"
 
+msgid "Please add titles to the compilation"
+msgstr "Bitte fügen Sie Titel zur Ihrer Zusammenstellung hinzu"
+
 msgid "Please change recording endtime"
 msgstr "Bitte Aufnahmeendzeit ändern"
 
@@ -2778,7 +2789,7 @@ msgid ""
 "\n"
 "Please press OK to continue."
 msgstr ""
-"Bitte wählen Sie das Funknetzwerk zu dem Sie sich verbinden möchten.\n"
+"Bitte wählen Sie das Funk-Netzwerk zu dem Sie sich verbinden möchten.\n"
 "\n"
 "Drücken Sie OK zum Fortfahren."
 
@@ -2804,28 +2815,28 @@ msgid "Please use the UP and DOWN keys to select your language. Afterwards press
 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 Netzwerk-Konfiguration aktiviert wird..."
+msgstr "Bitte warten Sie, die Netzwerk-Konfiguration wird aktiviert."
 
 msgid "Please wait while removing selected package..."
-msgstr "Bitte warten Sie während die ausgewählten Erweiterungen deinstalliert werden..."
+msgstr "Bitte warten Sie, die ausgewählten Erweiterungen werden deinstalliert."
 
 msgid "Please wait while scanning is in progress..."
-msgstr "Bitte warten während des Suchvorgangs..."
+msgstr "Bitte warten Sie, der Suchvorgang läuft."
 
 msgid "Please wait while searching for removable packages..."
-msgstr "Bitte warten Sie während nach deinstallierbaren Erweiterungen gesucht wird..."
+msgstr "Bitte warten Sie, es wird nach deinstallierbaren Erweiterungen gesucht."
 
 msgid "Please wait while we configure your network..."
-msgstr "Bitte warten während das Netzwerk konfiguriert wird..."
+msgstr "Bitte warten Sie, dass Netzwerk wird konfiguriert."
 
 msgid "Please wait while we prepare your network interfaces..."
-msgstr "Bitte warten während das Netzwerk konfiguriert wird..."
+msgstr "Bitte warten Sie, dass Netzwerk wird konfiguriert."
 
 msgid "Please wait while we test your network..."
-msgstr "Bitte warten während das Netzwerk überprüft wird..."
+msgstr "Bitte warten Sie, dass Netzwerk wird überprüft."
 
 msgid "Please wait while your network is restarting..."
-msgstr "Bitte warten während das Netzwerk neu startet..."
+msgstr "Bitte warten Sie, dass Netzwerk wird neu gestartet."
 
 msgid "Please wait..."
 msgstr "Bitte warten..."
@@ -2903,7 +2914,7 @@ msgid "Press OK to activate the settings."
 msgstr "OK drücken zum Aktivieren."
 
 msgid "Press OK to edit the settings."
-msgstr "Drücken Sie OK, um die Einstellungen zu bearbeiten."
+msgstr "OK drücken zum Editieren."
 
 #, python-format
 msgid "Press OK to get further details for %s"
@@ -2994,7 +3005,7 @@ msgid "Random"
 msgstr "zufällig"
 
 msgid "Really close without saving settings?"
-msgstr "Änderungen gehen verloren. Wirklich schließen?"
+msgstr "Wirklich ohne Sichern beenden?"
 
 msgid "Really delete done timers?"
 msgstr "Vollendete Timer wirklich löschen?"
@@ -3028,7 +3039,7 @@ msgid "Recorded files..."
 msgstr "Aufgenommene Dateien..."
 
 msgid "Recording"
-msgstr "Aufnahmen"
+msgstr "Aufnahme"
 
 msgid "Recording paths..."
 msgstr "Aufnahmepfade"
@@ -3082,7 +3093,7 @@ msgid "Remove the broken .NFI file?"
 msgstr "entferne defekte .NFI Datei?"
 
 msgid "Remove the incomplete .NFI file?"
-msgstr "entferne inkomplette .NFI Datei?"
+msgstr "entferne unvollständige .NFI Datei?"
 
 msgid "Remove timer"
 msgstr "Entferne Timer"
@@ -3127,10 +3138,10 @@ msgid "Reset and renumerate title names"
 msgstr "Titelnamen zurücksetzen und neu nummerieren"
 
 msgid "Reset video enhancement settings to system defaults?"
-msgstr "Erweiterte A/V-Einstellungen auf Standardwerte zurücksetzten ?"
+msgstr "Erweiterte A/V-Einstellungen auf Standardwerte zurücksetzten?"
 
 msgid "Reset video enhancement settings to your last configuration?"
-msgstr "Erweiterte A/V-Einstellungen auf Ihre letzte Konfiguration zurücksetzten ?"
+msgstr "Erweiterte A/V-Einstellungen auf Ihre letzte Konfiguration zurücksetzen?"
 
 msgid "Resolution"
 msgstr "Auflösung"
@@ -3188,7 +3199,7 @@ msgid "Return to file browser"
 msgstr "Zurück zum Dateimanager"
 
 msgid "Return to movie list"
-msgstr "Zurück zur Filmliste"
+msgstr "Zurück zur Videoliste"
 
 msgid "Return to previous service"
 msgstr "Zurück zum letzten Service"
@@ -3338,7 +3349,7 @@ msgid "Scan your network for wireless Access Points and connect to them using yo
 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"
+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"
 msgstr ""
@@ -3416,13 +3427,13 @@ msgid "Select video input"
 msgstr "Wählen Sie den Video-Eingang"
 
 msgid "Select video input with up/down buttons"
-msgstr "Wählen Sie den Video-Eingang mit den Hoch/Runter Knöpfen"
+msgstr "Wählen Sie den Video-Eingang mit den Hoch/Runter-Tasten"
 
 msgid "Select video mode"
 msgstr "Wählen Sie den Video-Modus"
 
 msgid "Select wireless network"
-msgstr "Funknetzwerk auswählen"
+msgstr "Funk-Netzwerk auswählen"
 
 msgid "Selected source image"
 msgstr "Wählen Sie ein Quell-Image"
@@ -3551,7 +3562,7 @@ msgid "Shows the state of your wireless LAN connection.\n"
 msgstr "Zeigt den Status der WLAN-Verbinung an.\n"
 
 msgid "Shutdown"
-msgstr ""
+msgstr "Ausschalten"
 
 msgid "Shutdown Dreambox after"
 msgstr "Dreambox ausschalten nach"
@@ -3681,7 +3692,7 @@ msgstr "Sort. A-Z"
 
 #. TRANSLATORS: This must fit into the header button in the EPG-List
 msgid "Sort Time"
-msgstr "Sort. Zeit"
+msgstr "Sortiere nach Zeit"
 
 msgid "Sound"
 msgstr "Ton"
@@ -3696,7 +3707,7 @@ msgid "Spanish"
 msgstr "Spanisch"
 
 msgid "Split preview mode"
-msgstr ""
+msgstr "Splitscreen für Vorschau-Modus"
 
 msgid "Standby"
 msgstr "Standby"
@@ -3741,16 +3752,16 @@ msgid "Stop current event but not coming events"
 msgstr "Laufendes Ereignis abbrechen, aber kommende ausführen"
 
 msgid "Stop playing this movie?"
-msgstr "Das Abspielen dieses Films beenden?"
+msgstr "Wiedergabe beenden?"
 
 msgid "Stop test"
 msgstr "Test stoppen"
 
 msgid "Stop testing plane after # failed transponders"
-msgstr ""
+msgstr "Stoppe Test nach # fehlgeschlagenen Transpondern"
 
 msgid "Stop testing plane after # successful transponders"
-msgstr ""
+msgstr "Stoppe Test nach # erfolgreichen Transpondern"
 
 msgid "Store position"
 msgstr "Position speichern"
@@ -3797,7 +3808,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 ""
 
@@ -3817,10 +3829,10 @@ msgid "Tag 2"
 msgstr ""
 
 msgid "Tags"
-msgstr ""
+msgstr "Tags"
 
 msgid "Temperature and Fan control"
-msgstr ""
+msgstr "Temperatur- und Lüfter-Regelung"
 
 msgid "Terrestrial"
 msgstr "Terrestrisch"
@@ -3871,6 +3883,8 @@ msgid ""
 "The directory %s is not writable.\n"
 "Make sure you select a writable directory instead."
 msgstr ""
+"Das Verzeichnis %s ist nicht beschreibbar.\n"
+"Stellen Sie sicher, dass Sie ein beschreibbares Verzeichnis angegeben haben."
 
 #, python-format
 msgid ""
@@ -3944,7 +3958,7 @@ msgid ""
 "The wireless LAN plugin is not installed!\n"
 "Please install it and choose what you want to do next."
 msgstr ""
-"Das WirelessLan Plugin ist nicht instaliert!\n"
+"Das Wireless LAN Plugin ist nicht installiert!\n"
 "Bitte installieren Sie es und wählen Sie dann eine Option zum Fortfahren."
 
 msgid ""
@@ -4107,7 +4121,7 @@ msgid "Timer"
 msgstr "Timer"
 
 msgid "Timer Edit"
-msgstr "Zeitgesteuerte Aufname"
+msgstr "Zeitgesteuerte Aufnahme"
 
 msgid "Timer Editor"
 msgstr "Timer-Editor"
@@ -4129,7 +4143,7 @@ msgstr ""
 "Bitte überprüfen!"
 
 msgid "Timer record location"
-msgstr ""
+msgstr "Timer-Aufnahmeverzeichnis"
 
 msgid "Timer sanity error"
 msgstr "Fehler bei Timerprüfung"
@@ -4144,7 +4158,7 @@ msgid "Timeshift"
 msgstr "Timeshift"
 
 msgid "Timeshift location"
-msgstr ""
+msgstr "Timeshift-Verzeichnis"
 
 msgid "Timeshift not possible!"
 msgstr "Timeshift nicht möglich!"
@@ -4295,10 +4309,10 @@ msgid "Uncommitted DiSEqC command"
 msgstr "Uncommitted DiSEqC-Befehl"
 
 msgid "Undo install"
-msgstr "Installation zurücksetzten."
+msgstr "Installation zurücksetzen."
 
 msgid "Undo uninstall"
-msgstr "Deinstallation zurücksetzten."
+msgstr "Deinstallation zurücksetzen."
 
 msgid "Unicable"
 msgstr ""
@@ -4307,7 +4321,7 @@ msgid "Unicable LNB"
 msgstr ""
 
 msgid "Unicable Martix"
-msgstr ""
+msgstr "Unicable Matrix"
 
 msgid "Uninstall"
 msgstr "Deinstallieren"
@@ -4464,7 +4478,7 @@ msgid "View Photos..."
 msgstr "Photos ansehen"
 
 msgid "View Rass interactive..."
-msgstr "Rass Interaktiv anzeigen..."
+msgstr "RaSS Interaktiv anzeigen..."
 
 msgid "View Video CD..."
 msgstr "Video CD ansehen"
@@ -4476,13 +4490,13 @@ msgid "View list of available "
 msgstr "Eine Liste der Verfügbaren "
 
 msgid "View list of available CommonInterface extensions"
-msgstr "Eine Liste der verfügbaren Common Interface Erweiterungen anzeigen."
+msgstr "Eine Liste der verfügbaren Common Interface-Erweiterungen anzeigen."
 
 msgid "View list of available Display and Userinterface extensions."
 msgstr "Eine Liste der verfügbaren Display und Userinterface Erweiterungen anzeigen."
 
 msgid "View list of available EPG extensions."
-msgstr "Eine Liste der verfügbaren EPG Erweiterungen anzeigen."
+msgstr "Eine Liste der verfügbaren EPG-Erweiterungen anzeigen."
 
 msgid "View list of available Satteliteequipment extensions."
 msgstr "Eine Liste der verfügbaren Satelliten-Equipment Erweiterungen anzeigen."
@@ -4649,7 +4663,7 @@ msgid "Wireless LAN"
 msgstr "Funk-Netzwerk"
 
 msgid "Wireless Network"
-msgstr "Funk Netzwerk"
+msgstr "Funk-Netzwerk"
 
 msgid "Wireless Network State"
 msgstr "WLAN-Netzwerk Status"
@@ -4673,7 +4687,7 @@ msgid "Yes"
 msgstr "Ja"
 
 msgid "Yes to all"
-msgstr "ja zu allen"
+msgstr "Ja zu allen"
 
 msgid "Yes, and delete this movie"
 msgstr "Ja, diesen Film löschen"
@@ -4721,7 +4735,7 @@ msgid "You can install this plugin."
 msgstr "Sie können diese Erweiterung installieren."
 
 msgid "You can only burn Dreambox recordings!"
-msgstr "Sie können nur Dreambox Aufnahmen brennen!"
+msgstr "Nur Dreambox-Aufnahmen können gebrannt werden!"
 
 msgid "You can remove this plugin."
 msgstr "Sie können diese Erweiterung deinstallieren."
@@ -4736,7 +4750,7 @@ msgid "You chose not to install any default settings. You can however install th
 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."
+msgstr "Sie haben nichts zum Installieren ausgewählt. 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."
@@ -4824,6 +4838,9 @@ msgstr "Ihre Sicherung ist geglückt. Die Dreambox wird nun den weiteren Aktuali
 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 current collection will get lost!"
+msgstr "Ihre aktuelle Zusammenstellung geht dabei verloren!"
+
 msgid "Your dreambox is shutting down. Please stand by..."
 msgstr "Ihre Dreambox schaltet sich nun aus. Bitte warten Sie einen Moment..."
 
@@ -5009,7 +5026,7 @@ msgid "audio tracks"
 msgstr "Tonspuren"
 
 msgid "auto"
-msgstr ""
+msgstr "automatisch"
 
 msgid "available"
 msgstr "verfügbar"
@@ -5109,7 +5126,7 @@ msgid "delete..."
 msgstr "löschen..."
 
 msgid "disable"
-msgstr "aus"
+msgstr "ausgeschalten"
 
 msgid "disable move mode"
 msgstr "Verschiebemodus ausschalten"
@@ -5124,7 +5141,7 @@ msgid "do not change"
 msgstr "Nicht ändern"
 
 msgid "do nothing"
-msgstr "Nichts tun"
+msgstr "nichts"
 
 msgid "don't record"
 msgstr "Nicht aufnehmen"
@@ -5139,7 +5156,7 @@ msgid "empty"
 msgstr "leer"
 
 msgid "enable"
-msgstr "an"
+msgstr "einschalten"
 
 msgid "enable bouquet edit"
 msgstr "Bouqueteditieren anschalten"
@@ -5169,7 +5186,7 @@ msgid "enigma2 and network"
 msgstr "Enigma2 und Netzwerk"
 
 msgid "enter hidden network SSID"
-msgstr "Verstecke Netzwerk SSID eingeben"
+msgstr "Versteckte Netzwerk SSID eingeben"
 
 msgid "equal to"
 msgstr "Gleich wie"
@@ -5199,7 +5216,7 @@ msgid "exit network interface list"
 msgstr "Netzwerkadapterübersicht verlassen"
 
 msgid "exit networkadapter setup menu"
-msgstr "Netzwerkadaptermenu verlassen"
+msgstr "Netzwerkadaptermenü verlassen"
 
 msgid "failed"
 msgstr "fehlgeschlagen"
@@ -5223,10 +5240,10 @@ msgid "free diskspace"
 msgstr "freier Festplattenspeicher"
 
 msgid "go to deep standby"
-msgstr "Box abschalten"
+msgstr "in Deep Standby gehen"
 
 msgid "go to standby"
-msgstr "schalte in Standby"
+msgstr "in Standby gehen"
 
 msgid "grab this frame as bitmap"
 msgstr "Diesen Frame als Bitmap speichern"
@@ -5336,7 +5353,7 @@ msgid "menulist"
 msgstr "Menüliste"
 
 msgid "mins"
-msgstr "min"
+msgstr "Minuten"
 
 msgid "minute"
 msgstr "Minute"
@@ -5474,7 +5491,7 @@ msgid "previous channel in history"
 msgstr "Vorheriger Kanal im Verlauf"
 
 msgid "record"
-msgstr "Aufnehmen"
+msgstr "aufnehmen"
 
 msgid "recording..."
 msgstr "nimmt auf..."
@@ -5524,6 +5541,9 @@ msgstr "Wiederholung der Wiedergabeliste"
 msgid "repeated"
 msgstr "wiederholend"
 
+msgid "required medium type:"
+msgstr "Benötigte Rohlingsorte:"
+
 msgid "rewind to the previous chapter"
 msgstr "Zum vorherigen Kapitel zurück"
 
@@ -5625,7 +5645,7 @@ msgid "show single service EPG..."
 msgstr "Zeige einfaches Sender-EPG..."
 
 msgid "show tag menu"
-msgstr "Zeig tag-Menü"
+msgstr "Zeige tag-Menü"
 
 msgid "show transponder info"
 msgstr "Transponder-Info anzeigen"
@@ -5634,7 +5654,7 @@ msgid "shuffle playlist"
 msgstr "Wiedergabeliste mischen"
 
 msgid "shut down"
-msgstr ""
+msgstr "Ausschalten"
 
 msgid "shutdown"
 msgstr "Ausschalten"
@@ -5661,7 +5681,7 @@ msgid "sort by date"
 msgstr "Aufnahmen nach Datum sortieren"
 
 msgid "standard"
-msgstr "Standard"
+msgstr "standard"
 
 msgid "standby"
 msgstr "Standby"
@@ -5712,7 +5732,7 @@ msgid "switch to the next subtitle language"
 msgstr "Zur nächsten Untertitel-Sprache wechseln"
 
 msgid "template file"
-msgstr ""
+msgstr "template Datei"
 
 msgid "textcolor"
 msgstr "Textfarbe"
@@ -5790,7 +5810,7 @@ msgid "your dreambox might be unusable now. Please consult the manual for furthe
 msgstr "Ihre Dreambox könnte jetzt unbenutzbar sein. Bitte konsultieren Sie das Handbuch bevor Sie Ihre Dreambox rebooten."
 
 msgid "zap"
-msgstr "Umschalten"
+msgstr "umschalten"
 
 msgid "zapped"
 msgstr "umgeschaltet"
@@ -5801,34 +5821,39 @@ msgstr "umgeschaltet"
 #~ msgstr ""
 #~ "\n"
 #~ "Enigma2 wird nach der Wiederherstellung neu starten"
+
 #~ msgid ""
 #~ "\n"
 #~ "Scan for local packages and install them."
 #~ msgstr ""
 #~ "\n"
 #~ "Suche nach lokalen Paketen und installiere sie."
+
 #~ msgid ""
 #~ "\n"
 #~ "View, install and remove available or installed packages."
 #~ msgstr ""
 #~ "\n"
-#~ "Anzeigen, Installieren und Entfernen verfügbarer oder installierter "
-#~ "Pakete."
+#~ "Anzeigen, Installieren und Entfernen verfügbarer oder installierter Pakete."
+
 #~ msgid "AGC:"
 #~ msgstr "AGC:"
+
 #~ msgid "All..."
 #~ msgstr "Alle..."
+
 #~ msgid "An error occured!"
 #~ msgstr "Es ist ein Fehler aufgetreten!"
+
 #~ msgid ""
 #~ "Are you sure you want to enable WLAN support?\n"
 #~ "Connect your Wlan USB Stick to your Dreambox and press OK.\n"
 #~ "\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 ""
 #~ "Are you sure you want to reset \n"
 #~ "your network configuration to defaults?\n"
@@ -5837,136 +5862,161 @@ msgstr "umgeschaltet"
 #~ "Sind Sie sicher, dass Sie die Netzwerkkonfiguration\n"
 #~ "auf die Standardeinstellungen zurücksetzen wollen?\n"
 #~ "\n"
+
 #~ msgid "Backup running"
 #~ msgstr "Sicherung läuft"
+
 #~ msgid "Backup running..."
 #~ msgstr "Sicherung läuft..."
+
 #~ msgid "Confirm"
 #~ msgstr "Bestätigen"
+
 #~ msgid "Continue"
 #~ msgstr "Weiter"
+
 #~ msgid "Custom skip time for 1/3 keys"
 #~ msgstr "Benutzerspezifische Sprungzeit für 1/3 Tasten"
+
 #~ msgid "Default-Wizard"
 #~ msgstr "Standardeinstellungs-Assistent"
+
 #~ msgid "Device Setup..."
 #~ msgstr "Geräteeinstellungen..."
+
 #~ msgid ""
 #~ "Do you really want to REMOVE\n"
 #~ "the plugin \""
 #~ msgstr ""
 #~ "Möchten Sie das Plugin wirklich\n"
 #~ "entfernen \""
+
 #~ msgid ""
 #~ "Do you really want to download\n"
 #~ "the plugin \""
 #~ msgstr ""
 #~ "Wollen Sie das Plugin mit\n"
 #~ "dem Namen \" wirklich herunterladen?"
-#~ msgid "Do you really want to exit?"
-#~ msgstr "Wollen Sie wirklich beenden?"
+
 #~ msgid "Enable WLAN Support"
 #~ msgstr "Aktiviere WLAN Unterstützung"
+
 #~ msgid "Encrypted: %s"
 #~ msgstr "verschlüsselt: %s"
+
 #~ msgid "Enter WLAN networ kname/SSID:"
 #~ msgstr "WLAN Netzwerkname/SSID eingeben:"
+
 #~ msgid "Following tasks will be done after you press continue!"
-#~ msgstr ""
-#~ "Folgende Aktivitäten werden ausgeführt nachdem Sie Weiter gedrückt haben!"
+#~ msgstr "Folgende Aktivitäten werden ausgeführt nachdem Sie Weiter gedrückt haben!"
+
 #~ msgid "Font size"
 #~ msgstr "Schriftgröße"
+
 #~ msgid "Games / Plugins"
 #~ msgstr "Spiele / Erweiterungen"
+
 #~ msgid "General AC3 delay"
 #~ msgstr "Allgemeine AC3 Verzögerung"
+
 #~ msgid "General PCM delay"
 #~ msgstr "Allgemeine PCM Verzögerung"
+
 #~ msgid "Install local IPKG"
 #~ msgstr ".ipk Datei installieren"
+
 #~ msgid "Interface: %s"
 #~ msgstr "Adapter: %s"
+
 #~ msgid "Jump to video title 1 (play movie from start)"
 #~ msgstr "Springe zu Videotitel 1 (Film von Anfang abspielen)"
+
 #~ msgid "Movie Menu"
 #~ msgstr "Filmauswahl"
+
 #~ msgid "Nameserver Setup..."
 #~ msgstr "Nameserver-Einstellungen..."
+
 #~ 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."
+
 #~ msgid "Package details for: "
 #~ msgstr "Paketdetails für:"
+
 #~ msgid "Please select keyword to filter..."
 #~ msgstr "Bitte wählen Sie ein Schlüsselwort zum Filtern"
+
 #~ 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?"
+
 #~ msgid "Refresh"
 #~ msgstr "Aktualisieren"
+
 #~ msgid "Reset configuration"
 #~ msgstr "Konfig. zurücksetzen"
+
 #~ 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"
+
 #~ msgid "Restore running..."
 #~ msgstr "Sicherung läuft..."
+
 #~ msgid "Select files/folders to backup..."
 #~ msgstr "Dateien/Verzeichnisse zum Sichern auswählen..."
+
 #~ msgid "Show files from %s"
 #~ msgstr "Zeige Dateien von %s"
+
 #~ msgid "Startwizard"
 #~ msgstr "Startassistent"
+
 #~ 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 "There is nothing to be done."
 #~ msgstr "Es gibt nichts zu tun."
+
 #~ msgid ""
 #~ "Unable to initialize harddisk.\n"
 #~ "Please refer to the user manual.\n"
@@ -5975,10 +6025,13 @@ msgstr "umgeschaltet"
 #~ "Konnte Festplatte nicht initialisieren.\n"
 #~ "Bitte schauen Sie in das Handbuch.\n"
 #~ "Fehler: "
+
 #~ msgid "VCR Switch"
 #~ msgstr "Videorekorderumschaltung"
+
 #~ msgid "You have to wait for"
 #~ msgstr "Sie müssen warten"
+
 #~ msgid ""
 #~ "You need to define some keywords first!\n"
 #~ "Press the menu-key to define keywords.\n"
@@ -5987,66 +6040,88 @@ msgstr "umgeschaltet"
 #~ "Sie müssen zunächst Schlüsselwörter anlegen!\n"
 #~ "Drücken Sie zum Anlegen die OK-Taste.\n"
 #~ "Wollen Sie dies jetzt machen?"
+
 #~ msgid "color"
 #~ msgstr "Farbe"
+
 #~ msgid "equal to Socket A"
 #~ msgstr "Wie Tuner A"
+
 #~ msgid "font face"
 #~ msgstr "Schriftart"
+
 #~ msgid "full /etc directory"
 #~ msgstr "komplettes Verzeichnis /etc"
+
 #~ msgid "headline"
 #~ msgstr "Überschrift"
+
 #~ msgid "hidden..."
 #~ msgstr "hidden..."
+
 #~ msgid "highlighted button"
 #~ msgstr "hervorgehobener Knopf"
+
 #~ msgid "loopthrough to socket A"
 #~ msgstr "Verbunden mit Tuner A"
+
 #~ msgid "no Picture found"
 #~ msgstr "Kein Bild gefunden"
+
 #~ msgid "only /etc/enigma2 directory"
 #~ msgstr "nur Verzeichnis /etc/enigma2"
+
 #~ msgid "play next playlist entry"
 #~ msgstr "nächsten Wiedergabelisteneintrag abspielen"
+
 #~ msgid "play previous playlist entry"
 #~ msgstr "vorherigen Wiedergabelisteneintrag abspielen"
+
 #~ msgid "rebooting..."
 #~ msgstr "starte neu..."
+
 #~ msgid ""
 #~ "scan done!\n"
 #~ "%d services found!"
 #~ msgstr ""
 #~ "Suche beendet.\n"
 #~ "%d Kanäle gefunden."
+
 #~ msgid ""
 #~ "scan done!\n"
 #~ "No service found!"
 #~ msgstr ""
 #~ "Suche beendet.\n"
 #~ "Kein Kanal gefunden."
+
 #~ msgid ""
 #~ "scan done!\n"
 #~ "One service found!"
 #~ msgstr ""
 #~ "Suche beendet.\n"
 #~ "Ein Kanal gefunden."
+
 #~ msgid ""
 #~ "scan in progress - %d %% done!\n"
 #~ "%d services found!"
 #~ msgstr ""
 #~ "Suche läuft - %d %% erledigt!\n"
 #~ "%d Kanäle gefunden!"
+
 #~ msgid "show first tag"
 #~ msgstr "Zeige erstes tag"
+
 #~ msgid "show second tag"
 #~ msgstr "Zeige zweites tag"
+
 #~ msgid "skip backward (self defined)"
 #~ msgstr "Rückwärts springen (benutzerdefiniert)"
+
 #~ msgid "skip forward (self defined)"
 #~ msgstr "Vorwärts springen (benutzerdefiniert)"
+
 #~ msgid "spaces (top, between rows, left)"
 #~ msgstr "Abstände (oben, zwischen Reihen, links)"
+
 #~ msgid "text"
 #~ msgstr "Text"
-
index eed12f4..1333798 100755 (executable)
--- a/po/el.po
+++ b/po/el.po
@@ -2035,7 +2035,7 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Επιλογή γλώσσας"
 
-msgid "Language..."
+msgid "Language"
 msgstr "Γλώσσα "
 
 msgid "Last config"
index fb7023d..6d440e6 100755 (executable)
--- a/po/en.po
+++ b/po/en.po
@@ -1974,7 +1974,7 @@ msgstr ""
 msgid "Language selection"
 msgstr ""
 
-msgid "Language..."
+msgid "Language"
 msgstr ""
 
 msgid "Last config"
index c341d2a..903ad03 100755 (executable)
@@ -4824,7 +4824,7 @@ msgstr ""
 msgid "Keymap"
 msgstr ""
 
-msgid "Language..."
+msgid "Language"
 msgstr ""
 
 msgid "Limited character set for recording filenames"
diff --git a/po/enigma2_rel25.pot b/po/enigma2_rel25.pot
deleted file mode 100644 (file)
index f7f66eb..0000000
+++ /dev/null
@@ -1,6606 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#: ../lib/python/Screens/About.py:63
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:416
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:417
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:418
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:419
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:527
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:528
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-09 13:11+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ../lib/python/Components/NimManager.py:948
-#: ../lib/python/Components/NimManager.py:949
-#: ../lib/python/Components/NimManager.py:1043
-#: ../lib/python/Components/NimManager.py:1045
-msgid "%H:%M"
-msgstr ""
-
-#: ../lib/python/Screens/Standby.py:130
-#, python-format
-msgid "%d jobs are running in the background!"
-msgstr ""
-
-#: ../lib/python/Screens/EventView.py:149
-#, python-format
-msgid "%d min"
-msgstr ""
-
-#: ../lib/python/Components/ServiceScan.py:33
-#: ../lib/python/Components/ServiceScan.py:96
-#: ../lib/python/Components/ServiceScan.py:98
-#, python-format
-msgid "%d services found!"
-msgstr ""
-
-#: ../lib/python/Screens/TimeDateInput.py:40
-#: ../lib/python/Screens/TimerEntry.py:105
-#: ../lib/python/Screens/TimerEntry.py:115
-msgid "%d.%B %Y"
-msgstr ""
-
-#: ../lib/python/Screens/About.py:38
-#, python-format
-msgid ""
-"%s\n"
-"(%s, %d MB free)"
-msgstr ""
-
-#: ../lib/python/Screens/PluginBrowser.py:41
-#, python-format
-msgid "%s (%s)\n"
-msgstr ""
-
-#: ../lib/python/Components/TimerList.py:36
-#: ../lib/python/Components/TimerList.py:41
-msgid "(ZAP)"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:483
-msgid "(empty)"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:326
-msgid "(show optional DVD audio menu)"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:81
-msgid "* Only available if more than one interface is active."
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:315
-msgid "* Only available when entering hidden SSID or network key"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:416
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:419
-msgid ".NFI Download failed:"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:465
-msgid ""
-".NFI file passed md5sum signature check. You can safely flash this image!"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:107
-msgid "/usr/share/enigma2 directory"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:107
-msgid "/var directory"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:928
-msgid "1.0"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:928
-msgid "1.1"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:927
-#: ../lib/python/Components/NimManager.py:928
-msgid "1.2"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:924
-msgid "13 V"
-msgstr ""
-
-#: ../lib/python/Components/AVSwitch.py:89
-msgid "16:10"
-msgstr ""
-
-#: ../lib/python/Components/AVSwitch.py:81
-msgid "16:10 Letterbox"
-msgstr ""
-
-#: ../lib/python/Components/AVSwitch.py:82
-msgid "16:10 PanScan"
-msgstr ""
-
-#: ../lib/python/Components/AVSwitch.py:79
-#: ../lib/python/Components/AVSwitch.py:88
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:17
-msgid "16:9"
-msgstr ""
-
-#: ../lib/python/Components/AVSwitch.py:83
-msgid "16:9 Letterbox"
-msgstr ""
-
-#: ../lib/python/Components/AVSwitch.py:80
-msgid "16:9 always"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:924
-msgid "18 V"
-msgstr ""
-
-#: ../lib/python/Components/ParentalControl.py:13
-msgid "30 minutes"
-msgstr ""
-
-#: ../lib/python/Components/AVSwitch.py:87
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:17
-msgid "4:3"
-msgstr ""
-
-#: ../lib/python/Components/AVSwitch.py:77
-msgid "4:3 Letterbox"
-msgstr ""
-
-#: ../lib/python/Components/AVSwitch.py:78
-msgid "4:3 PanScan"
-msgstr ""
-
-#: ../lib/python/Components/ParentalControl.py:13
-msgid "5 minutes"
-msgstr ""
-
-#: ../lib/python/Components/ParentalControl.py:13
-msgid "60 minutes"
-msgstr ""
-
-#: ../lib/python/Components/TimerList.py:58
-msgid "<unknown>"
-msgstr ""
-
-#: ../lib/python/Screens/Menu.py:150 ../lib/python/Screens/Menu.py:153
-msgid "??"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:926 ../data/
-msgid "A"
-msgstr ""
-
-#: ../lib/python/Screens/Ipkg.py:104
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:313
-#, python-format
-msgid ""
-"A configuration file (%s) was modified since Installation.\n"
-"Do you want to keep your version?"
-msgstr ""
-
-#: ../RecordTimer.py:282
-msgid ""
-"A finished record timer wants to set your\n"
-"Dreambox to standby. Do that now?"
-msgstr ""
-
-#: ../RecordTimer.py:288
-msgid ""
-"A finished record timer wants to shut down\n"
-"your Dreambox. Shutdown now?"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py:96
-msgid "A graphical EPG for all services of an specific bouquet"
-msgstr ""
-
-#: ../RecordTimer.py:363
-#, python-format
-msgid ""
-"A record has been started:\n"
-"%s"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1522
-msgid ""
-"A recording is currently running.\n"
-"What do you want to do?"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:589
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"configure the positioner."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:264
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"start the satfinder."
-msgstr ""
-
-#: ../lib/python/Components/Task.py:381
-#, python-format
-msgid "A required tool (%s) was not found."
-msgstr ""
-
-#: ../lib/python/Screens/TaskView.py:118 ../SleepTimer.py:34
-msgid ""
-"A sleep timer wants to set your\n"
-"Dreambox to standby. Do that now?"
-msgstr ""
-
-#: ../lib/python/Screens/TaskView.py:115 ../SleepTimer.py:29
-msgid ""
-"A sleep timer wants to shut down\n"
-"your Dreambox. Shutdown now?"
-msgstr ""
-
-#: ../RecordTimer.py:232
-msgid ""
-"A timer failed to record!\n"
-"Disable TV and try again?\n"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:34
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:211 ../data/
-msgid "A/V Settings"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:902
-msgid "AA"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:902
-msgid "AB"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:95 ../data/
-msgid "AC3 default"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1595
-#: ../lib/python/Screens/InfoBarGenerics.py:1613
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:97 ../data/
-msgid "AC3 downmix"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/Modem/plugin.py:270
-msgid "Abort"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:86 ../data/
-msgid "About..."
-msgstr ""
-
-#: ../lib/python/Screens/SleepTimerEdit.py:73
-#: ../lib/python/Screens/SleepTimerEdit.py:75
-msgid "Action:"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1306
-msgid "Activate Picture in Picture"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:857
-msgid "Adapter settings"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:205
-#: ../lib/python/Screens/TimerEdit.py:43
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:138
-msgid "Add"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:199
-msgid "Add Bookmark"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:127
-msgid "Add WLAN configuration?"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:204
-msgid "Add a mark"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:43
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:141
-msgid "Add a new title"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:126
-msgid "Add network configuration?"
-msgstr ""
-
-#: ../lib/python/Screens/EpgSelection.py:74
-#: ../lib/python/Screens/EpgSelection.py:221
-#: ../lib/python/Screens/EpgSelection.py:256
-#: ../lib/python/Screens/EpgSelection.py:372
-#: ../lib/python/Screens/EventView.py:39 ../lib/python/Screens/EventView.py:70
-#: ../lib/python/Screens/EventView.py:106
-#: ../lib/python/Screens/EventView.py:166
-#: ../lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:576
-#: ../lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:611
-#: ../lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:662
-msgid "Add timer"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:43
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:61
-msgid "Add title"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1715
-msgid "Add to bouquet"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1717
-msgid "Add to favourites"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:180
-msgid ""
-"Adds enigma2 settings and dreambox model informations like SN, rev... if "
-"enabled."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:183
-msgid "Adds network configuration if enabled."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:186
-msgid "Adds wlan configuration if enabled."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/VideoTune/VideoFinetune.py:205
-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 ""
-
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:34
-msgid "Advanced"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:220
-msgid "Advanced Video Setup"
-msgstr ""
-
-#: ../lib/python/Screens/TaskView.py:52
-#: ../lib/python/Screens/TimerEntry.py:185
-msgid "After event"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:129
-msgid "Album"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:660
-#: ../lib/python/Screens/ChannelSelection.py:800
-#: ../lib/python/Screens/MovieSelection.py:202
-msgid "All"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:921
-#: ../lib/python/Components/NimManager.py:922
-msgid "All Satellites"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:19
-msgid "Always ask before sending"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:384
-msgid "An empty filename is illegal."
-msgstr ""
-
-#: ../lib/python/Components/Task.py:347
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:168
-#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:289
-msgid "An unknown error occured!"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:125
-msgid "Anonymize crashlog?"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:18
-msgid "Arabic"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:593
-msgid ""
-"Are you sure you want to activate this network configuration?\n"
-"\n"
-msgstr ""
-
-#: ../lib/python/Screens/Wizard.py:291
-msgid "Are you sure you want to exit this wizard?"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:788
-msgid ""
-"Are you sure you want to restart your network interfaces?\n"
-"\n"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:125
-msgid "Artist"
-msgstr ""
-
-#: ../lib/python/Screens/SleepTimerEdit.py:83
-#: ../lib/python/Screens/SleepTimerEdit.py:85
-msgid "Ask before shutdown:"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:37
-#: ../lib/python/Components/UsageConfig.py:39
-#: ../lib/python/Components/UsageConfig.py:41
-msgid "Ask user"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:83
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:77 ../data/
-msgid "Aspect Ratio"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1546
-msgid "Audio Options..."
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:140
-msgid "Authoring mode"
-msgstr ""
-
-#: ../lib/python/Screens/Ci.py:25 ../lib/python/Screens/ScanSetup.py:550
-#: ../lib/python/Screens/ScanSetup.py:558
-#: ../lib/python/Screens/ScanSetup.py:585
-#: ../lib/python/Screens/ScanSetup.py:592
-#: ../lib/python/Screens/ScanSetup.py:600
-#: ../lib/python/Screens/ScanSetup.py:615
-#: ../lib/python/Screens/ScanSetup.py:628
-#: ../lib/python/Screens/ScanSetup.py:635
-#: ../lib/python/Screens/ScanSetup.py:640
-#: ../lib/python/Screens/ScanSetup.py:644
-#: ../lib/python/Screens/ScanSetup.py:650
-#: ../lib/python/Screens/ScanSetup.py:656
-#: ../lib/python/Tools/Transponder.py:10 ../lib/python/Tools/Transponder.py:15
-#: ../lib/python/Tools/Transponder.py:26 ../lib/python/Tools/Transponder.py:44
-#: ../lib/python/Tools/Transponder.py:50 ../lib/python/Tools/Transponder.py:57
-#: ../lib/python/Tools/Transponder.py:62 ../lib/python/Tools/Transponder.py:72
-#: ../lib/python/Tools/Transponder.py:77 ../lib/python/Tools/Transponder.py:84
-#: ../lib/python/Tools/Transponder.py:91 ../lib/python/Tools/Transponder.py:96
-#: ../lib/python/Tools/Transponder.py:100
-#: ../lib/python/Tools/Transponder.py:106
-#: ../lib/python/Tools/Transponder.py:112
-msgid "Auto"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:89
-msgid "Auto chapter split every ? minutes (0=never)"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:92 ../data/
-msgid "Auto scart switching"
-msgstr ""
-
-#: ../lib/python/Components/AVSwitch.py:90
-msgid "Automatic"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:905 ../data/
-msgid "Automatic Scan"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:110
-msgid "Available format variables"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:926 ../data/
-msgid "B"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:902
-msgid "BA"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:902
-msgid "BB"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1221
-#: ../lib/python/Screens/NetworkSetup.py:1226
-#: ../lib/python/Screens/NetworkSetup.py:1231
-#: ../lib/python/Screens/NetworkSetup.py:1236
-#: ../lib/python/Screens/NetworkSetup.py:1241
-msgid "Back"
-msgstr ""
-
-#: ../lib/python/Screens/TaskView.py:31
-msgid "Background"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:73
-msgid "Backup"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:110
-msgid "Backup Location"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:109
-msgid "Backup Mode"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:925
-msgid "Band"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:390
-#: ../lib/python/Screens/ServiceInfo.py:142
-msgid "Bandwidth"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:47
-#: ../lib/python/Screens/Satconfig.py:270
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:110
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:90
-msgid "Begin time"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:71
-msgid "Bookmarks"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/VideoTune/VideoFinetune.py:85 ../data/
-msgid "Brightness"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:30
-#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:883
-#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:924
-#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:945
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:47
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:98
-msgid "Burn DVD"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:101
-msgid "Burn existing image to DVD"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/plugin.py:15
-#: ../lib/python/Plugins/Extensions/DVDBurn/plugin.py:16
-msgid "Burn to DVD..."
-msgstr ""
-
-#: ../lib/python/Screens/HarddiskSetup.py:49
-msgid "Bus: "
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:897
-msgid "C-Band"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:108
-msgid "CF Drive"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:73
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:173
-msgid "CI assignment"
-msgstr ""
-
-#: ../lib/python/Components/AVSwitch.py:69
-msgid "CVBS"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:916
-#: ../lib/python/Components/ServiceScan.py:69
-#: ../lib/python/Tools/Transponder.py:48
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:474
-msgid "Cable"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:172
-msgid "Cache Thumbnails"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/FritzCall/plugin.py:33
-msgid "Call monitoring"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:94
-#: ../lib/python/Screens/LocationBox.py:128 ../lib/python/Screens/Setup.py:88
-#: ../lib/python/Screens/TimeDateInput.py:14
-#: ../lib/python/Screens/TimerEntry.py:29
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:101
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:39
-#: ../lib/python/Plugins/Extensions/MediaPlayer/settings.py:30
-#: ../lib/python/Plugins/Extensions/MediaPlayer/settings.py:69
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:34
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:366
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:72
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:160
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:226
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:37 ../data/
-msgid "Cancel"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:354
-msgid "Cannot parse feed directory"
-msgstr ""
-
-#: ../lib/python/Screens/HarddiskSetup.py:48
-msgid "Capacity: "
-msgstr ""
-
-#: ../lib/python/Components/Harddisk.py:365
-msgid "Card"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:19
-msgid "Catalan"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:236
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:272
-msgid "Change dir."
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:184
-#: ../lib/python/Screens/ParentalControlSetup.py:18 ../data/
-msgid "Change pin code"
-msgstr ""
-
-#: ../lib/python/Screens/ParentalControlSetup.py:75
-msgid "Change service pin"
-msgstr ""
-
-#: ../lib/python/Screens/ParentalControlSetup.py:72
-msgid "Change service pins"
-msgstr ""
-
-#: ../lib/python/Screens/ParentalControlSetup.py:66
-msgid "Change setup pin"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:175
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:16
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:110
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:90 ../data/
-msgid "Channel"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEdit.py:334
-msgid "Channel not in services list"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:153
-msgid "Channel:"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:408
-msgid "Chap."
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:409
-msgid "Chapter"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:144
-msgid "Chapter:"
-msgstr ""
-
-#: ../lib/python/Screens/HarddiskSetup.py:55
-msgid "Check"
-msgstr ""
-
-#: ../lib/python/Screens/HarddiskSetup.py:29
-msgid "Checking Filesystem..."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:36
-msgid "Choose source"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:225
-msgid "Choose target folder"
-msgstr ""
-
-#: ../lib/python/Tools/Transponder.py:33
-msgid "Circular left"
-msgstr ""
-
-#: ../lib/python/Tools/Transponder.py:34
-msgid "Circular right"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEdit.py:165
-msgid "Cleanup"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:398
-#: ../lib/python/Screens/ScanSetup.py:896
-msgid "Clear before scan"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:389
-msgid "Clear log"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:60
-#: ../lib/python/Screens/NetworkSetup.py:207
-#: ../lib/python/Screens/NetworkSetup.py:350
-#: ../lib/python/Screens/NetworkSetup.py:697
-#: ../lib/python/Screens/NetworkSetup.py:1048
-#: ../lib/python/Screens/NetworkSetup.py:1308
-#: ../lib/python/Screens/TaskView.py:47
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:79
-msgid "Close"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:391
-msgid "Code rate high"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:392
-msgid "Code rate low"
-msgstr ""
-
-#: ../lib/python/Screens/ServiceInfo.py:149
-msgid "Coderate HP"
-msgstr ""
-
-#: ../lib/python/Screens/ServiceInfo.py:148
-msgid "Coderate LP"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:139
-msgid "Collection name"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:46
-msgid "Collection settings"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:88 ../data/
-msgid "Color Format"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:241
-#: ../lib/python/Screens/Satconfig.py:253
-msgid "Command order"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:237
-msgid "Committed DiSEqC command"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:633
-msgid "Common Interface Assignment"
-msgstr ""
-
-#: ../lib/python/Components/Harddisk.py:366
-msgid "Compact Flash"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:515
-#: ../lib/python/Screens/ScanSetup.py:516
-#: ../lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:581
-msgid "Complete"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:29
-msgid "Complex (allows mixing audio tracks and aspects)"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:35
-msgid "Config"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:92
-#: ../lib/python/Screens/Satconfig.py:144
-#: ../lib/python/Screens/Satconfig.py:178
-#: ../lib/python/Screens/Satconfig.py:289 ../data/
-msgid "Configuration Mode"
-msgstr ""
-
-#: ../lib/python/Screens/Ipkg.py:95
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:308
-msgid "Configuring"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEdit.py:330
-msgid "Conflicting timer"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/Modem/plugin.py:274
-msgid "Connect"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:128
-msgid "Connected to"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/FritzCall/plugin.py:99
-msgid "Connected to Fritz!Box!"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/Modem/plugin.py:163
-msgid "Connected!"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/FritzCall/plugin.py:96
-msgid "Connecting to Fritz!Box..."
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/FritzCall/plugin.py:109
-#, python-format
-msgid ""
-"Connection to Fritz!Box\n"
-"failed! (%s)\n"
-"retrying..."
-msgstr ""
-
-#: ../lib/python/Screens/ServiceInfo.py:150
-msgid "Constellation"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:283
-msgid "Content does not fit on DVD!"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:504
-msgid "Continue playing"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/VideoTune/VideoFinetune.py:145 ../data/
-msgid "Contrast"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:326
-msgid "Could not connect to Dreambox .NFI Image Feed Server:"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:282
-msgid "Could not load Medium! No disc inserted?"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1429
-#, python-format
-msgid "Couldn't record due to conflicting timer %s"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:398
-msgid "Crashlog settings"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:403
-msgid "CrashlogAutoSubmit"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:403
-msgid "CrashlogAutoSubmit settings"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:92
-msgid "CrashlogAutoSubmit settings..."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:342
-msgid ""
-"Crashlogs found!\n"
-"Send them to Dream Multimedia ?"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:30
-#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:889
-#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:930
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:100
-msgid "Create DVD-ISO"
-msgstr ""
-
-#: ../lib/python/Components/Harddisk.py:182
-msgid "Create movie folder failed"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:250
-#, python-format
-msgid "Creating directory %s failed."
-msgstr ""
-
-#: ../lib/python/Components/Harddisk.py:182
-msgid "Creating partition failed"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:20
-msgid "Croatian"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:937
-msgid "Current Transponder"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:335
-msgid "Current settings:"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/FrontprocessorUpgrade/plugin.py:35
-msgid "Current version:"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:81
-msgid "Cut"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:421
-msgid "Cutlist editor..."
-msgstr ""
-
-#: ../lib/python/Components/Language.py:21
-msgid "Czech"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1287
-msgid "DHCP"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:544
-msgid "DVB-S"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:545
-msgid "DVB-S2"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:694
-msgid "DVD Player"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:151
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:94
-msgid "DVD media toolbox"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:22
-msgid "Danish"
-msgstr ""
-
-#: ../lib/python/Screens/TimeDateInput.py:46
-#: ../lib/python/Screens/TimerEntry.py:164
-msgid "Date"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:163
-msgid "Decide what should be done when crashlogs are found."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:166
-msgid "Decide what should happen to the crashlogs after submission."
-msgstr ""
-
-#: ../lib/python/Screens/SleepTimerEdit.py:78 ../data/
-msgid "Deep Standby"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:206
-#: ../lib/python/Screens/TimerEdit.py:131
-msgid "Delete"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:21
-msgid "Delete crashlogs"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:386
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:492
-msgid "Delete entry"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:143
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:653
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:712
-msgid "Delete failed!"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:327
-#, python-format
-msgid ""
-"Delete no more configured satellite\n"
-"%s?"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:135
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:15
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:110
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:74
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:90
-msgid "Description"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:270
-msgid "Destination directory"
-msgstr ""
-
-#: ../lib/python/Screens/About.py:34
-msgid "Detected HDD:"
-msgstr ""
-
-#: ../lib/python/Screens/About.py:17
-msgid "Detected NIMs:"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:909
-msgid "DiSEqC A/B"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:909
-msgid "DiSEqC A/B/C/D"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:233
-msgid "DiSEqC mode"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:256
-msgid "DiSEqC repeats"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/Modem/plugin.py:189
-msgid "Dialing:"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:28
-msgid "Direct playback of linked titles without menu"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:382
-#, python-format
-msgid "Directory %s nonexistent."
-msgstr ""
-
-#: ../lib/python/Screens/TimerEdit.py:144
-#: ../lib/python/Screens/TimerEdit.py:417
-#: ../lib/python/Screens/TimerEdit.py:437
-msgid "Disable"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1304
-msgid "Disable Picture in Picture"
-msgstr ""
-
-#: ../lib/python/Screens/Subtitles.py:36
-msgid "Disable Subtitles"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:19
-msgid "Disable crashlog reporting"
-msgstr ""
-
-#: ../lib/python/Screens/SleepTimerEdit.py:75
-msgid "Disable timer"
-msgstr ""
-
-#: ../lib/python/Screens/SleepTimerEdit.py:29
-msgid "Disabled"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/Modem/plugin.py:268
-msgid "Disconnect"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/FritzCall/plugin.py:105
-#, python-format
-msgid ""
-"Disconnected from\n"
-"Fritz!Box! (%s)\n"
-"retrying..."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:83
-msgid "Display 16:9 content as"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:80
-msgid "Display 4:3 content as"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:81
-msgid "Display >16:9 content as"
-msgstr ""
-
-#: ../lib/python/Screens/PluginBrowser.py:123
-#, python-format
-msgid ""
-"Do you really want to REMOVE\n"
-"the plugin \"%s\"?"
-msgstr ""
-
-#: ../lib/python/Screens/HarddiskSetup.py:84
-msgid ""
-"Do you really want to check the filesystem?\n"
-"This could take lots of time!"
-msgstr ""
-
-#: ../lib/python/Screens/EpgSelection.py:235
-#: ../lib/python/Screens/EventView.py:85 ../lib/python/Screens/InfoBar.py:195
-#: ../lib/python/Screens/MovieSelection.py:126
-#: ../lib/python/Screens/TimerEdit.py:206
-#: ../lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:590
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:645
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:698
-#, python-format
-msgid "Do you really want to delete %s?"
-msgstr ""
-
-#: ../lib/python/Screens/PluginBrowser.py:121
-#, python-format
-msgid ""
-"Do you really want to download\n"
-"the plugin \"%s\"?"
-msgstr ""
-
-#: ../lib/python/Screens/HarddiskSetup.py:82
-msgid ""
-"Do you really want to initialize the harddisk?\n"
-"All data on the disk will be lost!"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:269
-#, python-format
-msgid "Do you really want to remove directory %s from the disk?"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:224
-#, python-format
-msgid "Do you really want to remove your bookmark of %s?"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:120
-msgid ""
-"Do you want to backup now?\n"
-"After pressing OK, please wait!"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:423
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:202
-msgid "Do you want to burn this collection to DVD medium?"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:587
-msgid "Do you want to play DVD in drive?"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:407
-msgid "Do you want to preview this DVD before burning?"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1864
-msgid "Do you want to resume this playback?"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:169
-msgid ""
-"Do you want to submit your email address and name so that we can contact you "
-"if needed?"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:37
-#: ../lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:136
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:53
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:222
-msgid ""
-"Do you want to update your Dreambox?\n"
-"After pressing OK, please wait!"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:19
-msgid "Don't ask, just send"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEdit.py:101
-msgid "Don't stop current event but disable coming events"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:328
-#, python-format
-msgid "Done - Installed or upgraded %d packages"
-msgstr ""
-
-#: ../lib/python/Screens/Ipkg.py:57
-#, python-format
-msgid "Done - Installed or upgraded %d packages with %d errors"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:234
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:365
-msgid "Download"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:726
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/plugin.py:16
-msgid "Download .NFI-Files for USB-Flasher"
-msgstr ""
-
-#: ../lib/python/Screens/PluginBrowser.py:22
-msgid "Download Plugins"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:505
-msgid "Download of USB flasher boot image failed: "
-msgstr ""
-
-#: ../lib/python/Screens/PluginBrowser.py:134
-msgid "Downloadable new plugins"
-msgstr ""
-
-#: ../lib/python/Screens/Ipkg.py:82
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:295
-msgid "Downloading"
-msgstr ""
-
-#: ../lib/python/Screens/PluginBrowser.py:92
-msgid "Downloading plugin information. Please wait..."
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:28
-msgid "Dreambox format data DVD (HDTV compatible)"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:23
-msgid "Dutch"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:924
-#: ../lib/python/Screens/Satconfig.py:325
-#: ../lib/python/Components/ServiceScan.py:51
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:482
-msgid "E"
-msgstr ""
-
-#: ../lib/python/Components/ServiceScan.py:101
-#, python-format
-msgid "ERROR - failed to scan (%s)!"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:916
-msgid "East"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEdit.py:425
-msgid "Edit"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:352
-msgid "Edit DNS"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:41
-msgid "Edit Title"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:102
-msgid "Edit chapters of current title"
-msgstr ""
-
-#: ../lib/python/Screens/ParentalControlSetup.py:78
-msgid "Edit services list"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1305
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:500
-msgid "Edit settings"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:824
-msgid "Edit the Nameserver configuration of your Dreambox.\n"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:820
-msgid "Edit the network configuration of your Dreambox.\n"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:137
-msgid "Edit title"
-msgstr ""
-
-#: ../lib/python/Screens/Subtitles.py:44
-#: ../lib/python/Screens/TimerEdit.py:136
-#: ../lib/python/Screens/TimerEdit.py:409
-#: ../lib/python/Screens/TimerEdit.py:429
-msgid "Enable"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:183
-msgid "Enable 5V for active antenna"
-msgstr ""
-
-#: ../lib/python/Screens/ParentalControlSetup.py:60
-msgid "Enable parental control"
-msgstr ""
-
-#: ../lib/python/Screens/SleepTimerEdit.py:73
-msgid "Enable timer"
-msgstr ""
-
-#: ../lib/python/Screens/SleepTimerEdit.py:27
-msgid "Enabled"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:501
-msgid "Encryption"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:509
-#: ../lib/python/Screens/NetworkSetup.py:512
-msgid "Encryption Key"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:508
-msgid "Encryption Keytype"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:505
-msgid "Encryption Type"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:48
-#: ../lib/python/Screens/Satconfig.py:271
-msgid "End time"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:171
-msgid "EndTime"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:16
-msgid "English"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:85
-msgid ""
-"Enigma2 Skinselector v0.5 BETA\n"
-"\n"
-"If you experience any problems please contact\n"
-"stephan@reichholf.net\n"
-"\n"
-"© 2006 - Stephan Reichholf"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:528
-msgid "Enter WLAN network name/SSID:"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:530
-msgid "Enter WLAN passphrase/key:"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:345
-msgid "Enter main menu..."
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:184
-msgid "Enter the service pin"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:172
-msgid "Enter your email address so that we can contact you if needed."
-msgstr ""
-
-#: ../lib/python/Components/Task.py:284
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:213
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:337
-msgid "Error"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/TuxboxPlugins/pluginrunner.py:34
-msgid "Error executing plugin"
-msgstr ""
-
-#: ../lib/python/Components/Task.py:282
-#, python-format
-msgid ""
-"Error: %s\n"
-"Retry?"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:24
-msgid "Estonian"
-msgstr ""
-
-#: ../lib/python/Components/Harddisk.py:182
-msgid "Everything is fine"
-msgstr ""
-
-#: ../lib/python/Screens/Console.py:44
-msgid "Execution Progress:"
-msgstr ""
-
-#: ../lib/python/Screens/Console.py:56
-msgid "Execution finished!!"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:61
-msgid "Exif"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:34
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:104
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:504
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:232
-msgid "Exit"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:206
-msgid "Exit editor"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:46
-msgid "Expert"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:881
-msgid "Extended Networksetup Plugin..."
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:877
-msgid "Extended Setup..."
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:356
-#: ../lib/python/Screens/ScanSetup.py:358
-#: ../lib/python/Screens/ScanSetup.py:385
-#: ../lib/python/Screens/ServiceInfo.py:147
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:447
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:449
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:85
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:87
-msgid "FEC"
-msgstr ""
-
-#: ../lib/python/Components/Task.py:41
-#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:447
-msgid "Failed"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:918
-msgid "Fast"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:238
-msgid "Fast DiSEqC"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:918
-msgid "Fast epoch"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:663
-msgid "Favourites"
-msgstr ""
-
-#: ../lib/python/Components/Harddisk.py:182
-msgid "Filesystem contains uncorrectable errors"
-msgstr ""
-
-#: ../lib/python/Components/Task.py:41
-msgid "Finished"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:195
-msgid "Finished configuring your network"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:949
-msgid "Finished restarting your network"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:25
-msgid "Finnish"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:484
-msgid ""
-"First we need to download the latest boot environment for the USB flasher."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:144
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:251
-msgid "Flash"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:247
-msgid "Flashing failed"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:123
-msgid "Format"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:174
-msgid "Frame size in full view"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:26
-msgid "French"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:351
-#: ../lib/python/Screens/ScanSetup.py:381
-#: ../lib/python/Screens/ScanSetup.py:388
-#: ../lib/python/Screens/ServiceInfo.py:140
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:442
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:80
-msgid "Frequency"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:1071
-msgid "Frequency bands"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:166
-msgid "Frequency scan step size(khz)"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:1071
-msgid "Frequency steps"
-msgstr ""
-
-#: ../lib/python/Screens/EpgSelection.py:325
-#: ../lib/python/Components/EpgList.py:38
-#: ../lib/python/Components/TimerList.py:24
-#: ../lib/python/Tools/FuzzyDate.py:13
-msgid "Fri"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:117
-#: ../lib/python/Screens/TimerEntry.py:160
-msgid "Friday"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:44
-msgid "Frisian"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/FritzCall/plugin.py:34
-msgid "Fritz!Box FON IP address"
-msgstr ""
-
-#: ../lib/python/Screens/About.py:23
-#, python-format
-msgid "Frontprocessor version: %d"
-msgstr ""
-
-#: ../lib/python/Components/Harddisk.py:182
-msgid "Fsck failed"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:62
-msgid "Function not yet implemented"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:107
-msgid ""
-"GUI needs a restart to apply a new skin\n"
-"Do you want to Restart the GUI now?"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:339
-#: ../lib/python/Screens/NetworkSetup.py:481 ../data/
-msgid "Gateway"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:133
-msgid "Genre"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:17
-msgid "German"
-msgstr ""
-
-#: ../lib/python/Screens/PluginBrowser.py:94
-msgid "Getting plugin information. Please wait..."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:195
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:253
-msgid "Goto 0"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:250
-msgid "Goto position"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py:95
-msgid "Graphical Multi EPG"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:27
-msgid "Greek"
-msgstr ""
-
-#: ../lib/python/Screens/ServiceInfo.py:152
-msgid "Guard Interval"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:395
-msgid "Guard interval mode"
-msgstr ""
-
-#: ../lib/python/Components/Harddisk.py:364
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:108
-#: ../data/
-msgid "Harddisk"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:496
-msgid "Hidden network SSID"
-msgstr ""
-
-#: ../lib/python/Screens/ServiceInfo.py:153
-msgid "Hierarchy Information"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:396
-msgid "Hierarchy mode"
-msgstr ""
-
-#: ../lib/python/Screens/Ci.py:335
-msgid "High bitrate support"
-msgstr ""
-
-#: ../lib/python/Tools/Transponder.py:31
-msgid "Horizontal"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1498
-msgid "How many minutes do you want to record?"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:120
-msgid "How to handle found crashlogs?"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:28
-msgid "Hungarian"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:337
-#: ../lib/python/Screens/NetworkSetup.py:476
-#: ../lib/python/Screens/NetworkSetup.py:1293 ../data/
-msgid "IP Address"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:288
-msgid "ISO file is too large for this filesystem!"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:143
-msgid "ISO path"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:31
-msgid "Icelandic"
-msgstr ""
-
-#: ../lib/python/Screens/Scart.py:25
-msgid ""
-"If you see this, something is wrong with\n"
-"your scart connection. Press OK to return."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/VideoTune/VideoFinetune.py:87
-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 you are happy with the result, press OK."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:52
-msgid "Image flash utility"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:32
-msgid "Image-Upgrade"
-msgstr ""
-
-#: ../lib/python/Components/Task.py:41
-msgid "In Progress"
-msgstr ""
-
-#: ../RecordTimer.py:235
-msgid ""
-"In order to record a timer, the TV was switched to the recording service!\n"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:122
-msgid "Include your email and name (optional) in the mail?"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:285
-msgid "Increased voltage"
-msgstr ""
-
-#: ../lib/python/Screens/Ci.py:322
-msgid "Init"
-msgstr ""
-
-#: ../lib/python/Screens/HarddiskSetup.py:53
-msgid "Initialize"
-msgstr ""
-
-#: ../lib/python/Screens/HarddiskSetup.py:26
-msgid "Initializing Harddisk..."
-msgstr ""
-
-#: ../lib/python/Screens/InputBox.py:11 ../data/
-msgid "Input"
-msgstr ""
-
-#: ../lib/python/Screens/Ipkg.py:91
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:304
-msgid "Installing"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1364
-msgid "Instant Record..."
-msgstr ""
-
-#: ../lib/python/Components/Network.py:313
-msgid "Integrated Ethernet"
-msgstr ""
-
-#: ../lib/python/Components/Network.py:315
-msgid "Integrated Wireless"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:45
-msgid "Intermediate"
-msgstr ""
-
-#: ../lib/python/Components/Harddisk.py:371
-msgid "Internal Flash"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:396
-msgid "Invalid Location"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:275
-#, python-format
-msgid "Invalid directory selected: %s"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:352
-#: ../lib/python/Screens/ScanSetup.py:382
-#: ../lib/python/Screens/ScanSetup.py:389
-#: ../lib/python/Screens/ServiceInfo.py:144
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:443
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:81
-msgid "Inversion"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:135
-msgid "Is this videomode ok?"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:32
-msgid "Italian"
-msgstr ""
-
-#. TRANSLATORS: (aspect ratio policy: display as fullscreen, even if this breaks the aspect)
-#: ../lib/python/Components/AVSwitch.py:98
-#: ../lib/python/Components/AVSwitch.py:108
-msgid "Just Scale"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1271
-msgid "LAN Adapter"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:229
-msgid "LNB"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:278
-msgid "LOF"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:282
-msgid "LOF/H"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:281
-msgid "LOF/L"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:98
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:150 ../data/
-msgid "Language selection"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:100
-msgid "Last speed"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:37
-#: ../lib/python/Screens/Satconfig.py:260 ../data/
-msgid "Latitude"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:30
-msgid "Latvian"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:511
-msgid "Leave DVD Player?"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1596
-#: ../lib/python/Screens/InfoBarGenerics.py:1601
-msgid "Left"
-msgstr ""
-
-#. TRANSLATORS: (aspect ratio policy: black bars on top/bottom) in doubt, keep english term.
-#: ../lib/python/Components/AVSwitch.py:94
-msgid "Letterbox"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:245
-msgid "Limit east"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:244
-msgid "Limit west"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:243
-msgid "Limits off"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:246
-msgid "Limits on"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:839
-msgid "Link:"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:28
-msgid "Linked titles with a DVD menu"
-msgstr ""
-
-#: ../lib/python/Components/FileList.py:173
-#: ../lib/python/Components/config.py:951
-msgid "List of Storage Devices"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:29
-msgid "Lithuanian"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:103
-msgid "Load"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1280
-msgid "Local Network"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:178
-msgid "Location"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:595
-msgid "Log results to harddisk"
-msgstr ""
-
-#: ../lib/python/Screens/HelpMenu.py:36
-msgid "Long Keypress"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:35
-#: ../lib/python/Screens/Satconfig.py:258 ../data/
-msgid "Longitude"
-msgstr ""
-
-#: ../lib/python/Components/Harddisk.py:367
-msgid "MMC Card"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:201
-msgid "Make this mark an 'in' point"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:202
-msgid "Make this mark an 'out' point"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:203
-msgid "Make this mark just a mark"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:469
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:140
-msgid "Manual transponder"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:949
-msgid "Media player"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:137
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:167
-#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:281
-msgid "Medium is not a writeable DVD!"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:286
-msgid "Medium is not empty!"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:145
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:147
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:148
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:149
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:150 ../data/
-msgid "Menu"
-msgstr ""
-
-#: ../lib/python/Components/Harddisk.py:182
-msgid "Mkfs failed"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:96
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:61
-msgid "Mode"
-msgstr ""
-
-#: ../lib/python/Screens/HarddiskSetup.py:47
-msgid "Model: "
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:359
-#: ../lib/python/Screens/ScanSetup.py:384
-#: ../lib/python/Screens/ScanSetup.py:393
-#: ../lib/python/Screens/ServiceInfo.py:138
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:450
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:88
-msgid "Modulation"
-msgstr ""
-
-#: ../lib/python/Screens/EpgSelection.py:325
-#: ../lib/python/Components/EpgList.py:38
-#: ../lib/python/Components/TimerList.py:24
-#: ../lib/python/Tools/FuzzyDate.py:13
-msgid "Mon"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:103
-msgid "Mon-Fri"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:117
-#: ../lib/python/Screens/TimerEntry.py:156
-msgid "Monday"
-msgstr ""
-
-#: ../lib/python/Components/Harddisk.py:182
-msgid "Mount failed"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1312
-msgid "Move Picture in Picture"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:236
-msgid "Move east"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:233
-msgid "Move west"
-msgstr ""
-
-#: ../lib/python/Screens/EventView.py:212
-msgid "Multi EPG"
-msgstr ""
-
-#: ../lib/python/Screens/Ci.py:333
-msgid "Multiple service support"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:514
-msgid "Multisat"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:362
-#: ../lib/python/Screens/NetworkSetup.py:366
-#: ../lib/python/Screens/NetworkSetup.py:369
-#: ../lib/python/Screens/NetworkSetup.py:373
-#: ../lib/python/Screens/NetworkSetup.py:376
-#: ../lib/python/Components/NimManager.py:605
-#: ../lib/python/Components/NimManager.py:610
-#: ../lib/python/Components/NimManager.py:729
-msgid "N/A"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:242
-msgid "NFI image flashing completed. Press Yellow to Reboot!"
-msgstr ""
-
-#: ../lib/python/Components/AVSwitch.py:110
-msgid "NTSC"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:134
-msgid "Name"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1299 ../data/
-msgid "Nameserver"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:244
-#, python-format
-msgid "Nameserver %d"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:858
-msgid "Nameserver settings"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:338
-#: ../lib/python/Screens/NetworkSetup.py:477 ../data/
-msgid "Netmask"
-msgstr ""
-
-#: ../lib/python/Components/Harddisk.py:368
-msgid "Network Mount"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:494
-#: ../lib/python/Screens/NetworkSetup.py:499
-msgid "Network SSID"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:397
-msgid "Network scan"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:859
-msgid "Network test"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:346
-#: ../lib/python/Screens/NetworkSetup.py:837
-msgid "Network:"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:886
-msgid "NetworkWizard"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:908
-msgid "New"
-msgstr ""
-
-#: ../lib/python/Screens/ParentalControlSetup.py:235
-msgid "New pin"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/FrontprocessorUpgrade/plugin.py:36
-msgid "New version:"
-msgstr ""
-
-#: ../lib/python/Screens/EpgSelection.py:60
-msgid "Next"
-msgstr ""
-
-#: ../lib/python/Screens/Ci.py:25 ../lib/python/Screens/Ci.py:27
-#: ../lib/python/Screens/InfoBar.py:167 ../data/
-#: ../lib/python/Plugins/SystemPlugins/Videomode/
-msgid "No"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:285
-msgid "No (supported) DVDROM found!"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1517
-msgid "No HDD found or HDD not initialized!"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:433
-msgid "No Networks found"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:2174
-msgid ""
-"No data on transponder!\n"
-"(Timeout reading PAT)"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:375
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:390
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:155
-msgid "No details for this image file"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1404
-msgid "No event info found, recording indefinitely."
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:2172
-msgid "No free tuner!"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:334
-msgid ""
-"No packages were upgraded yet. So you can check your network and try again."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:586
-msgid "No positioner capable frontend found."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:261
-msgid "No satellite frontend found!!"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:425
-msgid "No tags are set on these movies."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:601
-msgid "No tuner is configured for use with a diseqc positioner!"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:720
-msgid ""
-"No tuner is enabled!\n"
-"Please setup your tuner settings before you start a service scan."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:564
-msgid "No useable USB stick found"
-msgstr ""
-
-#: ../lib/python/Screens/ParentalControlSetup.py:131
-msgid ""
-"No valid service PIN found!\n"
-"Do you like to change the service PIN now?\n"
-"When you say 'No' here the service protection stay disabled!"
-msgstr ""
-
-#: ../lib/python/Screens/ParentalControlSetup.py:129
-msgid ""
-"No valid setup PIN found!\n"
-"Do you like to change the setup PIN now?\n"
-"When you say 'No' here the setup protection stay disabled!"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:54
-msgid ""
-"No working local network adapter found.\n"
-"Please verify that you have attached a network cable and your network is "
-"configured correctly."
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:53
-msgid ""
-"No working wireless network adapter found.\n"
-"Please verify that you have attached a compatible WLAN device and your "
-"network is configured correctly."
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:701
-msgid ""
-"No working wireless network interface found.\n"
-" Please verify that you have attached a compatible WLAN device or enable "
-"your local network interface."
-msgstr ""
-
-#: ../lib/python/Screens/InfoBar.py:169
-msgid "No, but restart from begin"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:281
-msgid "No, not now"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:282
-msgid "No, send them never"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:564
-#: ../lib/python/Screens/ScanSetup.py:607
-#: ../lib/python/Screens/ScanSetup.py:652
-#: ../lib/python/Components/NimManager.py:902
-#: ../lib/python/Components/NimManager.py:905
-#: ../lib/python/Components/NimManager.py:926
-#: ../lib/python/Components/NimManager.py:928
-#: ../lib/python/Components/NimManager.py:934
-#: ../lib/python/Tools/Transponder.py:14 ../lib/python/Tools/Transponder.py:61
-#: ../lib/python/Tools/Transponder.py:107
-msgid "None"
-msgstr ""
-
-#. TRANSLATORS: (aspect ratio policy: display as fullscreen, with stretching the left/right)
-#: ../lib/python/Components/AVSwitch.py:106
-msgid "Nonlinear"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:917
-msgid "North"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:33
-msgid "Norwegian"
-msgstr ""
-
-#: ../lib/python/Components/Task.py:368
-#, python-format
-msgid ""
-"Not enough diskspace. Please free up some diskspace and try again. (%d MB "
-"required, %d MB available)"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:835
-#: ../lib/python/Screens/ScanSetup.py:837
-#: ../lib/python/Screens/ScanSetup.py:981
-#: ../lib/python/Screens/ScanSetup.py:983
-#: ../lib/python/Plugins/SystemPlugins/DefaultServicesScanner/plugin.py:90
-msgid ""
-"Nothing to scan!\n"
-"Please setup your tuner settings before you start a service scan."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/VideoTune/VideoFinetune.py:147
-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 ""
-
-#: ../lib/python/Screens/LocationBox.py:91 ../lib/python/Screens/Setup.py:87
-#: ../lib/python/Screens/TimeDateInput.py:13
-#: ../lib/python/Screens/TimerEntry.py:28
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:102
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:210
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:40
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:71
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:36 ../data/
-msgid "OK"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:100
-msgid "OSD visibility"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1595
-#: ../lib/python/Screens/InfoBarGenerics.py:1613
-#: ../lib/python/Components/NimManager.py:925
-#: ../lib/python/Tools/Transponder.py:12 ../lib/python/Tools/Transponder.py:46
-#: ../lib/python/Tools/Transponder.py:59
-#: ../lib/python/Tools/Transponder.py:114
-msgid "Off"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1595
-#: ../lib/python/Screens/InfoBarGenerics.py:1613
-#: ../lib/python/Components/NimManager.py:925
-#: ../lib/python/Tools/Transponder.py:11 ../lib/python/Tools/Transponder.py:45
-#: ../lib/python/Tools/Transponder.py:58
-#: ../lib/python/Tools/Transponder.py:113
-msgid "On"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:934
-msgid "One"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:33
-msgid "Online-Upgrade"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:399
-msgid "Only Free scan"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:176
-msgid "Optionally enter your name if you want to."
-msgstr ""
-
-#: ../lib/python/Screens/ServiceInfo.py:139
-msgid "Orbital Position"
-msgstr ""
-
-#: ../lib/python/Components/AVSwitch.py:110
-msgid "PAL"
-msgstr ""
-
-#: ../lib/python/Screens/ServiceInfo.py:87
-msgid "PIDs"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:278
-msgid "Package list update"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:37
-msgid "Packet management"
-msgstr ""
-
-#: ../lib/python/Screens/Subtitles.py:52 ../lib/python/Screens/Subtitles.py:55
-#: ../lib/python/Screens/Subtitles.py:57
-msgid "Page"
-msgstr ""
-
-#. TRANSLATORS: (aspect ratio policy: cropped content on left/right) in doubt, keep english term
-#: ../lib/python/Components/AVSwitch.py:96
-#: ../lib/python/Components/AVSwitch.py:104
-msgid "Pan&Scan"
-msgstr ""
-
-#: ../lib/python/Components/FileList.py:175
-msgid "Parent Directory"
-msgstr ""
-
-#: ../lib/python/Components/ParentalControl.py:80 ../data/
-msgid "Parental control"
-msgstr ""
-
-#: ../lib/python/Screens/ParentalControlSetup.py:70
-msgid "Parental control type"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/Modem/plugin.py:113
-msgid "Password"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:41
-msgid "Pause movie at end"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/Modem/plugin.py:114
-msgid "Phone number"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:595
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:596
-msgid "PicturePlayer"
-msgstr ""
-
-#. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
-#: ../lib/python/Components/AVSwitch.py:102
-msgid "Pillarbox"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:362
-#: ../lib/python/Screens/ServiceInfo.py:145
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:453
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:91
-msgid "Pilot"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:98
-msgid "Play"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:480
-msgid "Play Audio-CD..."
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:510
-msgid "Play DVD"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBar.py:45
-msgid "Play recorded movies..."
-msgstr ""
-
-#: ../lib/python/Components/Harddisk.py:182
-msgid "Please Reboot"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaScanner/plugin.py:48
-msgid "Please Select Medium to be Scanned"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1483
-msgid "Please change recording endtime"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:326
-msgid "Please check your network settings!"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:266
-msgid "Please choose .NFI image file from feed server to download"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:498
-#: ../lib/python/Screens/InfoBarGenerics.py:1228
-msgid "Please choose an extension..."
-msgstr ""
-
-#: ../lib/python/Screens/DefaultWizard.py:95
-msgid "Please choose he package..."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:538
-msgid ""
-"Please disconnect all USB devices from your Dreambox and (re-)attach the "
-"target USB stick (minimum size is 64 MB) now!"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/plugin.py:56
-msgid "Please do not change any values unless you know what you are doing!"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:172
-msgid "Please enter a name for the new bouquet"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:229
-msgid "Please enter a name for the new marker"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:372
-msgid "Please enter a new filename"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:598
-msgid "Please enter filename (empty = use current date)"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:239
-msgid "Please enter name of the new directory"
-msgstr ""
-
-#: ../lib/python/Screens/ParentalControlSetup.py:24
-msgid "Please enter the correct pin code"
-msgstr ""
-
-#: ../lib/python/Screens/ParentalControlSetup.py:255
-msgid "Please enter the old pin code"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:104
-msgid "Please enter your email address here:"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:106
-msgid "Please enter your name here (optional):"
-msgstr ""
-
-#: ../RecordTimer.py:365
-msgid ""
-"Please note that the previously selected media could not be accessed and "
-"therefore the default directory is being used instead."
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:264
-msgid "Please press OK to continue."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:21
-msgid "Please press OK!"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:53
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:87
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:203
-msgid "Please select .NFI flash image file from medium"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:640
-msgid "Please select a playlist to delete..."
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:619
-msgid "Please select a playlist..."
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:325
-msgid "Please select a subservice to record..."
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1724
-#: ../lib/python/Screens/SubservicesQuickzap.py:106
-msgid "Please select a subservice..."
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:422
-msgid "Please select tag to filter..."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:256
-msgid "Please select target directory or medium"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:367
-msgid "Please select the movie path..."
-msgstr ""
-
-#: ../lib/python/Screens/PiPSetup.py:34
-msgid ""
-"Please use direction keys to move the PiP window.\n"
-"Press Bouquet +/- to resize the window.\n"
-"Press OK to go back to the TV mode or EXIT to cancel the moving."
-msgstr ""
-
-#: ../lib/python/Components/Language.py:97
-msgid ""
-"Please use the UP and DOWN keys to select your language. Afterwards press "
-"the OK button."
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:612
-msgid "Please wait for activation of your network configuration..."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:235
-msgid "Please wait while scanning is in progress..."
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:182
-msgid "Please wait while we configure your network..."
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:936
-msgid "Please wait while your network is restarting..."
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1150
-#: ../lib/python/Screens/NetworkSetup.py:1173
-#: ../lib/python/Screens/NetworkSetup.py:1180
-msgid "Please wait..."
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:180
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:67
-msgid "Please wait... Loading list..."
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:354
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:445
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:83
-msgid "Polarity"
-msgstr ""
-
-#: ../lib/python/Screens/ServiceInfo.py:143
-#: ../lib/python/Components/NimManager.py:924
-msgid "Polarization"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:34
-msgid "Polish"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:22
-msgid "Port A"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:25
-msgid "Port B"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:27
-msgid "Port C"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:28
-msgid "Port D"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:35
-msgid "Portuguese"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:436
-#: ../lib/python/Components/NimManager.py:910
-msgid "Positioner"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:192
-msgid "Positioner fine movement"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:191
-msgid "Positioner movement"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:605
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:611
-msgid "Positioner setup"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:194
-msgid "Positioner storage"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:43
-#: ../lib/python/Screens/Satconfig.py:266
-msgid "Power threshold in mA"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:470
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:140
-msgid "Predefined transponder"
-msgstr ""
-
-#: ../lib/python/Screens/Ipkg.py:21
-msgid "Preparing... Please wait"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:55
-#: ../lib/python/Screens/NetworkSetup.py:296
-#: ../lib/python/Screens/NetworkSetup.py:699
-msgid "Press OK on your remote control to continue."
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:208
-#: ../lib/python/Screens/NetworkSetup.py:348
-msgid "Press OK to activate the settings."
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:61
-msgid "Press OK to edit the settings."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:559
-#, python-format
-msgid "Press OK to get further details for %s"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:906
-msgid "Press OK to scan"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:300
-msgid "Press OK to start the scan"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:391
-msgid "Press OK to view full changelog"
-msgstr ""
-
-#: ../lib/python/Screens/EpgSelection.py:59
-msgid "Prev"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:95
-msgid "Preview menu"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:330
-msgid "Primary DNS"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:44
-msgid "Properties of current title"
-msgstr ""
-
-#: ../lib/python/Screens/ParentalControlSetup.py:68
-msgid "Protect services"
-msgstr ""
-
-#: ../lib/python/Screens/ParentalControlSetup.py:64
-msgid "Protect setup"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:662
-#: ../lib/python/Screens/ChannelSelection.py:796
-#: ../lib/python/Components/NimManager.py:1073
-msgid "Provider"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:150
-msgid "Provider to scan"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:906
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:468
-msgid "Providers"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:581
-msgid "Quick"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1715
-#: ../lib/python/Screens/InfoBarGenerics.py:1717
-#: ../lib/python/Screens/InfoBarGenerics.py:1720
-msgid "Quickzap"
-msgstr ""
-
-#: ../lib/python/Components/AVSwitch.py:69
-msgid "RGB"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/SimpleRSS/plugin.py:45
-msgid "RSS Feed URI"
-msgstr ""
-
-#: ../lib/python/Components/Harddisk.py:369
-msgid "Ram Disk"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:581
-msgid "Random"
-msgstr ""
-
-#: ../lib/python/Components/ConfigList.py:196
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:225
-msgid "Really close without saving settings?"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEdit.py:193
-msgid "Really delete done timers?"
-msgstr ""
-
-#: ../lib/python/Screens/SubservicesQuickzap.py:117
-msgid "Really exit the subservices quickzap?"
-msgstr ""
-
-#: ../lib/python/Screens/Standby.py:135
-msgid "Really reboot now?"
-msgstr ""
-
-#: ../lib/python/Screens/Standby.py:139
-msgid "Really restart now?"
-msgstr ""
-
-#: ../lib/python/Screens/Standby.py:133
-msgid "Really shutdown now?"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:243
-msgid "Reboot"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:110 ../data/
-msgid "Record"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1427
-#, python-format
-msgid "Record time limited due to conflicting timer %s"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:351
-msgid "Recorded files..."
-msgstr ""
-
-#: ../lib/python/Screens/EventView.py:116
-msgid "Recording"
-msgstr ""
-
-#: ../lib/python/Screens/Standby.py:124
-msgid "Recording(s) are in progress or coming up in few seconds!"
-msgstr ""
-
-#: ../lib/python/Screens/ParentalControlSetup.py:236
-msgid "Reenter new pin"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:65
-msgid "Refresh Rate"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:93
-#: ../lib/python/Screens/LocationBox.py:206
-msgid "Remove Bookmark"
-msgstr ""
-
-#: ../lib/python/Screens/PluginBrowser.py:21
-msgid "Remove Plugins"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:205
-msgid "Remove a mark"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:45
-msgid "Remove currently selected title"
-msgstr ""
-
-#: ../lib/python/Screens/PluginBrowser.py:136
-msgid "Remove plugins"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:468
-msgid "Remove the broken .NFI file?"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:416
-msgid "Remove the incomplete .NFI file?"
-msgstr ""
-
-#: ../lib/python/Screens/EpgSelection.py:253
-#: ../lib/python/Screens/EpgSelection.py:369
-#: ../lib/python/Screens/EventView.py:103
-#: ../lib/python/Screens/EventView.py:163
-#: ../lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:608
-#: ../lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:659
-msgid "Remove timer"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:45
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:241
-msgid "Remove title"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:285
-#, python-format
-msgid "Removing directory %s failed. (Maybe not empty.)"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:92
-msgid "Rename"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:21
-msgid "Rename crashlogs"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:138
-msgid "Repeat Type"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEdit.py:102
-msgid "Repeating event currently recording... What do you want to do?"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:144
-msgid "Repeats"
-msgstr ""
-
-#: ../lib/python/Screens/Ci.py:321
-msgid "Reset"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:103
-msgid "Reset and renumerate title names"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:63
-msgid "Resolution"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:108
-msgid "Restart GUI now?"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:860
-msgid "Restart network"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1250
-#: ../lib/python/Screens/NetworkSetup.py:1379
-msgid "Restart test"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:830
-msgid "Restart your network connection and interfaces.\n"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:74
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:161
-msgid "Restore"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:37
-msgid "Resume from last position"
-msgstr ""
-
-#. TRANSLATORS: The string "Resuming playback" flashes for a moment
-#. TRANSLATORS: at the start of a movie, when the user has selected
-#. TRANSLATORS: "Resume from last position" as start behavior.
-#. TRANSLATORS: The purpose is to notify the user that the movie starts
-#. TRANSLATORS: in the middle somewhere and not from the beginning.
-#. TRANSLATORS: (Some translators seem to have interpreted it as a
-#. TRANSLATORS: question or a choice, but it is a statement.)
-#: ../lib/python/Screens/InfoBarGenerics.py:1873
-msgid "Resuming playback"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:506
-msgid "Return to file browser"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:39
-#: ../lib/python/Components/UsageConfig.py:41
-msgid "Return to movie list"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:39
-#: ../lib/python/Components/UsageConfig.py:41
-msgid "Return to previous service"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1596
-#: ../lib/python/Screens/InfoBarGenerics.py:1601
-msgid "Right"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:361
-#: ../lib/python/Screens/ServiceInfo.py:146
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:452
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:90
-msgid "Rolloff"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:44
-#: ../lib/python/Screens/Satconfig.py:267
-msgid "Rotor turning speed"
-msgstr ""
-
-#: ../lib/python/Screens/Subtitles.py:42
-msgid "Running"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:36
-msgid "Russian"
-msgstr ""
-
-#: ../lib/python/Components/AVSwitch.py:69
-msgid "S-Video"
-msgstr ""
-
-#: ../lib/python/Screens/EpgSelection.py:325
-#: ../lib/python/Components/EpgList.py:38
-#: ../lib/python/Components/TimerList.py:24
-#: ../lib/python/Tools/FuzzyDate.py:13
-msgid "Sat"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:19
-#: ../lib/python/Screens/Satconfig.py:133
-#: ../lib/python/Screens/Satconfig.py:291
-#: ../lib/python/Screens/ScanSetup.py:350
-#: ../lib/python/Screens/ScanSetup.py:366
-#: ../lib/python/Components/ServiceScan.py:40
-#: ../lib/python/Tools/Transponder.py:8
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:430
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:67
-msgid "Satellite"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/plugin.py:68
-#: ../lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/plugin.py:74
-msgid "Satellite Equipment Setup"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:661
-#: ../lib/python/Screens/ChannelSelection.py:798
-msgid "Satellites"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:273
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:279 ../data/
-msgid "Satfinder"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:424
-msgid "Sats"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:117
-#: ../lib/python/Screens/TimerEntry.py:161
-msgid "Saturday"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:105
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:210
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:213
-#: ../lib/python/Plugins/Extensions/MediaPlayer/settings.py:70
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:367
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:80
-msgid "Save"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:598
-msgid "Save Playlist"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:171
-msgid "Scaling Mode"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:902
-msgid "Scan "
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:170
-msgid "Scan QAM128"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:167
-msgid "Scan QAM16"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:171
-msgid "Scan QAM256"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:168
-msgid "Scan QAM32"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:169
-msgid "Scan QAM64"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:173
-msgid "Scan SR6875"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:172
-msgid "Scan SR6900"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:870
-msgid "Scan Wireless Networks"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:174
-#: ../lib/python/Screens/Satconfig.py:175
-msgid "Scan additional SR"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:159
-msgid "Scan band EU HYPER"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:154
-msgid "Scan band EU MID"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:158
-msgid "Scan band EU SUPER"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:156
-msgid "Scan band EU UHF IV"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:157
-msgid "Scan band EU UHF V"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:153
-msgid "Scan band EU VHF I"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:155
-msgid "Scan band EU VHF III"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:162
-msgid "Scan band US HIGH"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:164
-msgid "Scan band US HYPER"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:160
-msgid "Scan band US LOW"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:161
-msgid "Scan band US MID"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:163
-msgid "Scan band US SUPER"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:826
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"WLAN USB Stick\n"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/DefaultServicesScanner/plugin.py:137
-msgid ""
-"Scans default lamedbs sorted by satellite with a connected dish positioner"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:235
-msgid "Search east"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:234
-msgid "Search west"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:331
-msgid "Secondary DNS"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:51
-msgid "Select Location"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1628
-msgid "Select audio mode"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1604
-msgid "Select audio track"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:219
-msgid "Select channel to record from"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:238
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:262
-msgid "Select image"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:426
-msgid "Select provider to add..."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:532
-msgid "Select service to add..."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:260
-msgid "Selected source image"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:20
-msgid "Send DiSEqC"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:31
-msgid "Send DiSEqC only on satellite change"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:28
-msgid "Seperate titles with a main menu"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:239
-msgid "Sequence repeat"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:37
-msgid "Serbian"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1748
-msgid "Service has been added to the favourites."
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1754
-msgid "Service has been added to the selected bouquet."
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:2176
-msgid ""
-"Service invalid!\n"
-"(Timeout reading PMT)"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:2175
-msgid ""
-"Service not found!\n"
-"(SID not found in PAT)"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:2181
-msgid ""
-"Service unavailable!\n"
-"Check tuner configuration!"
-msgstr ""
-
-#: ../lib/python/Screens/ServiceInfo.py:86 ../data/
-msgid "Serviceinfo"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:910
-msgid "Services"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:30
-msgid "Set Voltage and 22KHz"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:58
-msgid "Set as default Interface"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:81
-msgid "Set interface as default Interface"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:193
-msgid "Set limits"
-msgstr ""
-
-#: ../lib/python/Screens/SleepTimerEdit.py:86
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:46
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:63
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:38
-msgid "Settings"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:62 ../data/
-msgid "Setup"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1274
-#: ../lib/python/Screens/NetworkSetup.py:1284
-#: ../lib/python/Screens/NetworkSetup.py:1290
-#: ../lib/python/Screens/NetworkSetup.py:1296
-#: ../lib/python/Screens/NetworkSetup.py:1302
-msgid "Show Info"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:872
-msgid "Show WLAN Status"
-msgstr ""
-
-#: ../lib/python/Screens/ParentalControlSetup.py:212
-msgid "Show services beginning with"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBar.py:46
-msgid "Show the radio player..."
-msgstr ""
-
-#: ../lib/python/Screens/InfoBar.py:47
-msgid "Show the tv player..."
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:828
-msgid "Shows the state of your wireless LAN connection.\n"
-msgstr ""
-
-#: ../lib/python/Screens/SleepTimerEdit.py:41
-msgid "Shutdown Dreambox after"
-msgstr ""
-
-#: ../lib/python/Screens/EventView.py:191
-msgid "Similar"
-msgstr ""
-
-#: ../lib/python/Screens/EventView.py:185
-msgid "Similar broadcasts:"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:44
-msgid "Simple"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:29
-msgid "Simple titleset (compatibility for legacy players)"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:908
-msgid "Single"
-msgstr ""
-
-#: ../lib/python/Screens/EventView.py:211
-msgid "Single EPG"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:514
-msgid "Single satellite"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:514
-#: ../lib/python/Screens/ScanSetup.py:515
-#: ../lib/python/Screens/ScanSetup.py:516
-msgid "Single transponder"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:99
-msgid "Singlestep (GOP)"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:134
-msgid "Skin..."
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1282 ../data/
-msgid "Sleep Timer"
-msgstr ""
-
-#: ../lib/python/Screens/SleepTimerEdit.py:78
-#: ../lib/python/Screens/SleepTimerEdit.py:80
-msgid "Sleep timer action:"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:170
-msgid "Slideshow Interval (sec.)"
-msgstr ""
-
-#: ../lib/python/Screens/Ci.py:300 ../lib/python/Screens/Ci.py:304
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:57
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:59
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:61
-#, python-format
-msgid "Slot %d"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:38
-msgid "Slovakian"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:39
-msgid "Slovenian"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:918
-msgid "Slow"
-msgstr ""
-
-#: ../lib/python/Screens/PluginBrowser.py:39
-msgid "Some plugins are not available:\n"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:143
-msgid ""
-"Sorry your Backup destination does not exist\n"
-"\n"
-"Please choose an other one."
-msgstr ""
-
-#. TRANSLATORS: This must fit into the header button in the EPG-List
-#: ../lib/python/Screens/EpgSelection.py:212
-msgid "Sort A-Z"
-msgstr ""
-
-#. TRANSLATORS: This must fit into the header button in the EPG-List
-#: ../lib/python/Screens/EpgSelection.py:209
-msgid "Sort Time"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:917
-msgid "South"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:40
-msgid "Spanish"
-msgstr ""
-
-#: ../lib/python/Screens/SleepTimerEdit.py:80 ../data/
-msgid "Standby"
-msgstr ""
-
-#: ../mytest.py:363 ../data/
-msgid "Standby / Restart"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:37
-msgid "Start from the beginning"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1533
-msgid "Start recording?"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1311
-msgid "Start test"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:168
-msgid "StartTime"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:146
-msgid "Starting on"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:240
-msgid "Step east"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:239
-msgid "Step west"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1596
-#: ../lib/python/Screens/InfoBarGenerics.py:1601
-msgid "Stereo"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:228
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:229
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:230
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:231
-msgid "Stop"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1099
-msgid "Stop Timeshift?"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEdit.py:100
-msgid "Stop current event and disable coming events"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEdit.py:99
-msgid "Stop current event but not coming events"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBar.py:172
-msgid "Stop playing this movie?"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1314
-msgid "Stop test"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:586
-msgid "Stop testing plane after # failed transponders"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:590
-msgid "Stop testing plane after # successful transponders"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:249
-msgid "Store position"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:226
-msgid "Stored position"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1646
-msgid "Subservice list..."
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:173 ../data/
-msgid "Subtitle selection"
-msgstr ""
-
-#: ../lib/python/Screens/Subtitles.py:61 ../lib/python/Screens/Subtitles.py:64
-#: ../lib/python/Screens/Subtitles.py:66
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:148 ../data/
-msgid "Subtitles"
-msgstr ""
-
-#: ../lib/python/Screens/EpgSelection.py:325
-#: ../lib/python/Components/EpgList.py:38
-#: ../lib/python/Components/TimerList.py:24
-#: ../lib/python/Tools/FuzzyDate.py:13
-msgid "Sun"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:117
-#: ../lib/python/Screens/TimerEntry.py:162
-msgid "Sunday"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1309
-msgid "Swap Services"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:41
-msgid "Swedish"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1651
-msgid "Switch to next subservice"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1652
-msgid "Switch to previous subservice"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:353
-#: ../lib/python/Screens/ScanSetup.py:383
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:444
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:82
-msgid "Symbol Rate"
-msgstr ""
-
-#: ../lib/python/Screens/ServiceInfo.py:141
-msgid "Symbolrate"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:345
-#: ../lib/python/Screens/ServiceInfo.py:137
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:437
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:75 ../data/
-msgid "System"
-msgstr ""
-
-#. TRANSLATORS: Add here whatever should be shown in the "translator" about screen, up to 6 lines (use \n for newline)
-#: ../lib/python/Screens/About.py:58
-msgid "TRANSLATOR_INFO"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:287
-msgid "TS file is too large for ISO9660 level 1!"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:188
-msgid "Table of content for collection"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:316
-msgid "Tag 1"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:321
-msgid "Tag 2"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:328
-#: ../lib/python/Screens/TimerEntry.py:179
-msgid "Tags"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:918
-#: ../lib/python/Components/ServiceScan.py:81
-#: ../lib/python/Tools/Transponder.py:70
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:476
-msgid "Terrestrial"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:182
-msgid "Terrestrial provider"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:656
-msgid "Test DiSEqC settings"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:582
-msgid "Test Type"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:822
-msgid "Test the network configuration of your Dreambox.\n"
-msgstr ""
-
-#: ../lib/python/Plugins/DemoPlugins/TestPlugin/plugin.py:47
-msgid "Test-Messagebox?"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:289
-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 ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:653
-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 ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:566
-#, python-format
-msgid ""
-"The following device was found:\n"
-"\n"
-"%s\n"
-"\n"
-"Do you want to write the USB flasher to this stick?"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:264
-msgid "The installation of the default services lists is finished."
-msgstr ""
-
-#: ../lib/python/Screens/DefaultWizard.py:40
-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 ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:197
-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 ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:468
-msgid ""
-"The md5sum validation failed, the file may be downloaded incompletely or be "
-"corrupted!"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:258
-#, python-format
-msgid "The path %s already exists."
-msgstr ""
-
-#: ../lib/python/Screens/ParentalControlSetup.py:274
-msgid "The pin code has been changed successfully."
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:191
-#: ../lib/python/Screens/ParentalControlSetup.py:36
-#: ../lib/python/Components/ParentalControl.py:141
-msgid "The pin code you entered is wrong."
-msgstr ""
-
-#: ../lib/python/Screens/ParentalControlSetup.py:276
-msgid "The pin codes you entered are different."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:527
-#, python-format
-msgid "The results have been written to %s."
-msgstr ""
-
-#: ../lib/python/Screens/SleepTimerEdit.py:98
-msgid "The sleep timer has been activated."
-msgstr ""
-
-#: ../lib/python/Screens/SleepTimerEdit.py:101
-msgid "The sleep timer has been disabled."
-msgstr ""
-
-#: ../RecordTimer.py:483
-msgid "The timer file (timers.xml) is corrupt and could not be loaded."
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:744
-#: ../lib/python/Screens/NetworkSetup.py:764
-#: ../lib/python/Screens/NetworkSetup.py:778
-#: ../lib/python/Screens/NetworkSetup.py:897
-msgid ""
-"The wireless LAN plugin is not installed!\n"
-"Please install it."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:676 ../data/
-msgid ""
-"The wizard can backup your current settings. Do you want to do a backup now?"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:359
-msgid ""
-"There might not be enough Space on the selected Partition.\n"
-"Do you really want to continue?"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:188
-#, python-format
-msgid "This .NFI file does not contain a valid %s image!"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:186
-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 ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:195
-msgid ""
-"This .NFI file has a valid md5 signature. Continue programming this image to "
-"flash memory?"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:166
-msgid ""
-"This DVD RW medium is already formatted - reformatting will erase all "
-"content on the disc."
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:276
-#, python-format
-msgid "This Dreambox can't decode %s video streams!"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1238
-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"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1223
-msgid ""
-"This test checks whether a network cable is connected to your LAN-Adapter.\n"
-"If you get a \"disconnected\" message:\n"
-"- verify that a network cable is attached\n"
-"- verify that the cable is not broken"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1233
-msgid ""
-"This test checks whether a valid IP Address is found for your LAN Adapter.\n"
-"If you get a \"unconfirmed\" message:\n"
-"- no valid IP Address was found\n"
-"- please check your DHCP, cabling and adapter setup"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1228
-msgid ""
-"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"
-"If you get an \"enabeld\" message:\n"
-"-verify that you have a configured and working DHCP Server in your network."
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1218
-msgid "This test detects your configured LAN-Adapter."
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:934
-msgid "Three"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:283
-msgid "Threshold"
-msgstr ""
-
-#: ../lib/python/Screens/EpgSelection.py:325
-#: ../lib/python/Components/EpgList.py:38
-#: ../lib/python/Components/TimerList.py:24
-#: ../lib/python/Tools/FuzzyDate.py:13
-msgid "Thu"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:59
-msgid "Thumbnails"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:117
-#: ../lib/python/Screens/TimerEntry.py:159
-msgid "Thursday"
-msgstr ""
-
-#: ../lib/python/Screens/TimeDateInput.py:47
-msgid "Time"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:136
-msgid "Timer Type"
-msgstr ""
-
-#: ../RecordTimer.py:505
-msgid ""
-"Timer overlap in timers.xml detected!\n"
-"Please recheck it!"
-msgstr ""
-
-#: ../lib/python/Screens/SleepTimerEdit.py:27
-#: ../lib/python/Screens/SleepTimerEdit.py:29
-msgid "Timer status:"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1069
-msgid "Timeshift not possible!"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:14
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:110
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:147
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:73
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:90
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:410
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:127
-msgid "Title"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:44
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:242
-msgid "Title properties"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:160
-msgid "Titleset mode"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:698
-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"
-"3) Wait for bootup and follow instructions of the wizard."
-msgstr ""
-
-#: ../lib/python/Screens/EpgSelection.py:335
-#: ../lib/python/Tools/FuzzyDate.py:10
-msgid "Today"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:220
-msgid "Tone mode"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:236
-msgid "Toneburst"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:908
-msgid "Toneburst A/B"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:110
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:72
-msgid "Track"
-msgstr ""
-
-#: ../lib/python/Screens/ServiceInfo.py:151
-msgid "Transmission Mode"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:394
-msgid "Transmission mode"
-msgstr ""
-
-#: ../lib/python/Screens/ServiceInfo.py:88
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:455
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:93
-msgid "Transponder"
-msgstr ""
-
-#: ../lib/python/Screens/ServiceInfo.py:136
-msgid "Transponder Type"
-msgstr ""
-
-#: ../lib/python/Screens/InputBox.py:175
-msgid "Tries left:"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:156
-msgid "Try to find used Transponders in cable network.. please wait..."
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:243
-msgid "Try to find used transponders in cable network.. please wait..."
-msgstr ""
-
-#: ../lib/python/Screens/EpgSelection.py:325
-#: ../lib/python/Components/EpgList.py:38
-#: ../lib/python/Components/TimerList.py:24
-#: ../lib/python/Tools/FuzzyDate.py:13
-msgid "Tue"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:117
-#: ../lib/python/Screens/TimerEntry.py:157
-msgid "Tuesday"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:190
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:222
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:428
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:65
-msgid "Tune"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:2173
-msgid "Tune failed!"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:110
-#: ../lib/python/Screens/Satconfig.py:119
-#: ../lib/python/Screens/Satconfig.py:419
-#: ../lib/python/Screens/ScanSetup.py:320
-#: ../lib/python/Components/ServiceScan.py:137
-msgid "Tuner"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:453
-msgid "Tuner "
-msgstr ""
-
-#: ../lib/python/Screens/ServiceInfo.py:89
-msgid "Tuner status"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:42
-msgid "Turkish"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:934
-msgid "Two"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:331
-#: ../lib/python/Screens/ScanSetup.py:334
-#: ../lib/python/Screens/ScanSetup.py:337
-msgid "Type of scan"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:438
-#: ../lib/python/Components/NimManager.py:912
-msgid "USALS"
-msgstr ""
-
-#: ../lib/python/Components/Harddisk.py:370
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:108
-msgid "USB Stick"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:239
-msgid "USB stick wizard"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:43
-msgid "Ukrainian"
-msgstr ""
-
-#: ../lib/python/Screens/HarddiskSetup.py:75
-msgid ""
-"Unable to complete filesystem check.\n"
-"Error: "
-msgstr ""
-
-#: ../lib/python/Screens/HarddiskSetup.py:73
-msgid ""
-"Unable to initialize harddisk.\n"
-"Error: "
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:254
-msgid "Uncommitted DiSEqC command"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:896
-msgid "Universal LNB"
-msgstr ""
-
-#: ../lib/python/Components/Harddisk.py:182
-msgid "Unmount failed"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:35
-msgid "Update"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:360
-msgid "Updates your receiver's software"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:46
-#: ../lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:145
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:231
-msgid "Updating finished. Here is the result:"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:52
-#: ../lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:151
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:237
-msgid "Updating... Please wait... This can take some minutes..."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:69
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:347
-msgid "Upgrade finished. Do you want to reboot your Dreambox?"
-msgstr ""
-
-#: ../lib/python/Screens/Ipkg.py:87
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:300
-msgid "Upgrading"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:261
-msgid "Upgrading Dreambox... Please wait"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/settings.py:31
-msgid "Use"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:473 ../data/
-msgid "Use DHCP"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:469
-msgid "Use Interface"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:40
-#: ../lib/python/Screens/Satconfig.py:263
-msgid "Use Power Measurement"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:478
-msgid "Use a gateway"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:832
-msgid "Use the Networkwizard to configure your Network\n"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:223
-msgid "Use usals for this sat"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:147
-msgid "Used service scan type"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:898
-msgid "User defined"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/Modem/plugin.py:112
-msgid "Username"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:162
-msgid "VMGM (intro trailer)"
-msgstr ""
-
-#: ../lib/python/Tools/Transponder.py:32
-msgid "Vertical"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/VideoTune/plugin.py:33
-#: ../lib/python/Plugins/SystemPlugins/VideoTune/plugin.py:37
-msgid "Video Fine-Tuning"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/VideoTune/plugin.py:38
-msgid "Video Fine-Tuning Wizard"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:56
-msgid "Video Output"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:220
-msgid "Video Setup"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:223
-msgid "Video Wizard"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:1378
-msgid "View Rass interactive..."
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:2086
-msgid "View teletext..."
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:219
-msgid "Voltage mode"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:922
-#: ../lib/python/Screens/Satconfig.py:323
-#: ../lib/python/Components/ServiceScan.py:49
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:480
-msgid "W"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:408
-msgid "WEP"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:409
-msgid "WPA"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:411
-msgid "WPA or WPA2"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:410
-msgid "WPA2"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:90 ../data/
-msgid "WSS on 4:3"
-msgstr ""
-
-#: ../lib/python/Components/Task.py:41
-msgid "Waiting"
-msgstr ""
-
-#: ../lib/python/Screens/EpgSelection.py:325
-#: ../lib/python/Components/EpgList.py:38
-#: ../lib/python/Components/TimerList.py:24
-#: ../lib/python/Tools/FuzzyDate.py:13
-msgid "Wed"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:117
-#: ../lib/python/Screens/TimerEntry.py:158
-msgid "Wednesday"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:153
-msgid "Weekday"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:229
-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"
-"\n"
-"Then seek to the end, press OK, select 'end cut'. That's it."
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:916
-msgid "West"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:121
-msgid "What to do with submitted crashlogs?"
-msgstr ""
-
-#: ../lib/python/Screens/FactoryReset.py:5
-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"
-"\n"
-"Really do a factory reset?"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:516
-msgid "Where to save temporary timeshift recordings?"
-msgstr ""
-
-#: ../lib/python/Components/Network.py:314
-msgid "Wireless"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1278
-msgid "Wireless Network"
-msgstr ""
-
-#: ../RecordTimer.py:358
-msgid "Write error while recording. Disk full?\n"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:284
-msgid "Write failed!"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:241
-msgid "Writing NFI image file to flash completed"
-msgstr ""
-
-#: ../lib/python/Components/AVSwitch.py:73
-msgid "YPbPr"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:110
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:131
-msgid "Year"
-msgstr ""
-
-#: ../lib/python/Screens/Ci.py:25 ../lib/python/Screens/Ci.py:27
-#: ../lib/python/Screens/InfoBar.py:162
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:279
-#: ../data/ ../lib/python/Plugins/SystemPlugins/Videomode/
-msgid "Yes"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBar.py:166
-msgid "Yes, and delete this movie"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:280
-msgid "Yes, and don't ask again"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBar.py:164
-msgid "Yes, returning to movie list"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBar.py:202
-#: ../lib/python/Screens/MovieSelection.py:128
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:700
-msgid "You cannot delete this!"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:483
-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 ""
-
-#: ../lib/python/Screens/InputBox.py:104
-#, python-format
-msgid "You have to wait %s!"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:700
-msgid "Your Dreambox will restart after pressing OK on your remote control."
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:263
-msgid ""
-"Your collection exceeds the size of a single layer medium, you will need a "
-"blank dual layer DVD!"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:336
-msgid ""
-"Your dreambox isn't connected to the internet properly. Please check it and "
-"try again."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:123
-msgid "Your email address:"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/FrontprocessorUpgrade/plugin.py:34
-msgid ""
-"Your frontprocessor firmware must be upgraded.\n"
-"Press OK to start upgrade."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:124
-msgid "Your name (optional):"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:631
-#: ../lib/python/Screens/NetworkSetup.py:633
-msgid "Your network configuration has been activated."
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:628
-msgid ""
-"Your network configuration has been activated.\n"
-"A second configured interface has been found.\n"
-"\n"
-"Do you want to disable the second network interface?"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:158
-msgid "Zap back to service before positioner setup?"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:217
-msgid "Zap back to service before satfinder?"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:521
-msgid "[alternative edit]"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:525
-msgid "[bouquet edit]"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:527
-msgid "[favourite edit]"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:619
-msgid "[move mode]"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:644
-msgid "a gui to assign services/providers to common interface modules"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:640
-msgid "a gui to assign services/providers/caids to common interface modules"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:157
-msgid "abort alternatives edit"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:151
-msgid "abort bouquet edit"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:154
-msgid "abort favourites edit"
-msgstr ""
-
-#: ../lib/python/Components/TimerList.py:49
-msgid "about to start"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:214
-msgid "activate current configuration"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:131
-msgid "add Provider"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:130
-msgid "add Service"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:220
-msgid "add a nameserver entry"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:144
-msgid "add alternatives"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:403
-msgid "add bookmark"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:126
-msgid "add bouquet"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:483
-msgid "add directory to playlist"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:154
-msgid "add file to playlist"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:485
-msgid "add files to playlist"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:134
-msgid "add marker"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1524
-#: ../lib/python/Screens/InfoBarGenerics.py:1535
-msgid "add recording (enter recording duration)"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1525
-#: ../lib/python/Screens/InfoBarGenerics.py:1536
-msgid "add recording (enter recording endtime)"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1526
-#: ../lib/python/Screens/InfoBarGenerics.py:1537
-msgid "add recording (indefinitely)"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1523
-#: ../lib/python/Screens/InfoBarGenerics.py:1534
-msgid "add recording (stop after current event)"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:110
-msgid "add service to bouquet"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:112
-msgid "add service to favourites"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:106
-msgid "add to parental protection"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:60
-#: ../lib/python/Screens/Satconfig.py:444
-#: ../lib/python/Components/NimManager.py:1047
-msgid "advanced"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:75
-msgid "alphabetic sort"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:202
-msgid ""
-"are you sure you want to restore\n"
-"following backup:\n"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:133
-msgid "assigned CAIds"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:134
-msgid "assigned Services/Provider"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:80
-#, python-format
-msgid "audio track (%s) format"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:81
-#, python-format
-msgid "audio track (%s) language"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:110
-msgid "audio tracks"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:96
-msgid "auto"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:159
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:53
-msgid "back"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:149
-msgid "background image"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:176
-msgid "backgroundcolor"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:24
-msgid "better"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:30
-msgid "black"
-msgstr ""
-
-#: ../lib/python/Components/ParentalControl.py:16
-msgid "blacklist"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:30
-msgid "blue"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:78
-#, python-format
-msgid "burn audio track (%s)"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1527
-msgid "change recording (duration)"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1528
-msgid "change recording (endtime)"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:110
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:94
-msgid "chapters"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:257
-msgid "choose destination directory"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:555
-msgid "circular left"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:556
-msgid "circular right"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:171
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:491
-msgid "clear playlist"
-msgstr ""
-
-#: ../lib/python/Components/ParentalControl.py:12
-msgid "complex"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1352
-#: ../lib/python/Screens/NetworkSetup.py:1366
-msgid "confirmed"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1341
-#: ../lib/python/Screens/NetworkSetup.py:1398
-msgid "connected"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:650
-msgid "continue"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:118
-msgid "copy to bouquets"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:405
-msgid "create directory"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:103
-msgid "daily"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:110
-msgid "day"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:129
-msgid "delete"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:66
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:68
-msgid "delete cut"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:488
-msgid "delete file"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:170
-msgid "delete playlist entry"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:499
-msgid "delete saved playlist"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:67
-msgid "delete..."
-msgstr ""
-
-#: ../lib/python/Components/config.py:322
-msgid "disable"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:146
-msgid "disable move mode"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1164
-#: ../lib/python/Components/NimManager.py:1113
-#: ../lib/python/Components/TimerList.py:63
-msgid "disabled"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1326
-#: ../lib/python/Screens/NetworkSetup.py:1345
-#: ../lib/python/Screens/NetworkSetup.py:1393
-msgid "disconnected"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:27
-msgid "do not change"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1530
-#: ../lib/python/Screens/TaskView.py:47 ../lib/python/Screens/TimerEntry.py:96
-msgid "do nothing"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1538
-msgid "don't record"
-msgstr ""
-
-#: ../lib/python/Components/TimerList.py:56
-#: ../lib/python/Components/TimerList.py:60
-msgid "done!"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:140
-msgid "edit alternatives"
-msgstr ""
-
-#: ../lib/python/Components/NimManager.py:474
-msgid "empty"
-msgstr ""
-
-#: ../lib/python/Components/config.py:322
-msgid "enable"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:136
-msgid "enable bouquet edit"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:138
-msgid "enable favourite edit"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:132
-msgid "enable move mode"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1160
-#: ../lib/python/Screens/Satconfig.py:449
-#: ../lib/python/Components/NimManager.py:1061
-#: ../lib/python/Components/NimManager.py:1101
-msgid "enabled"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:156
-msgid "end alternatives edit"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:150
-msgid "end bouquet edit"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:61
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:63
-msgid "end cut here"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:153
-msgid "end favourites edit"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:107
-msgid "enigma2 and network"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:65
-#: ../lib/python/Screens/Satconfig.py:417
-#: ../lib/python/Components/NimManager.py:1049
-msgid "equal to"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:254
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:257
-msgid "exceeds dual layer medium!"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:325
-msgid "exit DVD player or return to file browser"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:155
-msgid "exit mediaplayer"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:232
-msgid "exit movielist"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:213
-#: ../lib/python/Screens/NetworkSetup.py:219
-msgid "exit nameserver configuration"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:309
-msgid "exit network adapter configuration"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:303
-msgid "exit network adapter setup menu"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:70
-#: ../lib/python/Screens/NetworkSetup.py:76
-msgid "exit network interface list"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:713
-#: ../lib/python/Screens/NetworkSetup.py:719
-msgid "exit networkadapter setup menu"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:604
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:628
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:644
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:656
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:246
-msgid "failed"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:595
-msgid "fileformats (BMP, PNG, JPG, GIF)"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:110
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:206
-msgid "filename"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/VideoTune/plugin.py:37
-msgid "fine-tune your display"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:321
-msgid "forward to the next chapter"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:254
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:260
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:266
-msgid "free"
-msgstr ""
-
-#: ../lib/python/Components/DiskInfo.py:30
-msgid "free diskspace"
-msgstr ""
-
-#: ../lib/python/Screens/TaskView.py:47 ../lib/python/Screens/TimerEntry.py:96
-msgid "go to deep standby"
-msgstr ""
-
-#: ../lib/python/Screens/TaskView.py:47 ../lib/python/Screens/TimerEntry.py:96
-msgid "go to standby"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:30
-msgid "green"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBar.py:61
-msgid "hear radio..."
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:442
-msgid "hidden network"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:83
-msgid "hide extended description"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:495
-msgid "hide player"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:553
-msgid "horizontal"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:24
-msgid "hour"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:24
-#: ../lib/python/Components/UsageConfig.py:25
-msgid "hours"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:50
-msgid "immediate shutdown"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/FritzCall/plugin.py:77
-#, python-format
-msgid ""
-"incoming call!\n"
-"%s calls on %s!"
-msgstr ""
-
-#: ../lib/python/Screens/Ci.py:327 ../lib/python/Screens/Ci.py:351
-msgid "init module"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:59
-msgid "init modules"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:76
-msgid "insert mark here"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:324
-msgid "jump back to the previous title"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:323
-msgid "jump forward to the next title"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:166
-msgid "jump to listbegin"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:167
-msgid "jump to listend"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1837
-msgid "jump to next marked position"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1836
-msgid "jump to previous marked position"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBar.py:139
-msgid "leave movie player..."
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1627
-msgid "left"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:110
-msgid "length"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:79
-msgid "list style compact"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:78
-msgid "list style compact with description"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:77
-msgid "list style default"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:80
-msgid "list style single line"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:496
-msgid "load playlist"
-msgstr ""
-
-#: ../lib/python/Components/TunerInfo.py:77
-msgid "locked"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:69
-#: ../lib/python/Screens/Satconfig.py:416
-#: ../lib/python/Components/NimManager.py:1052
-msgid "loopthrough to"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:440
-#: ../lib/python/Components/NimManager.py:912
-msgid "manual"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:147
-#: ../lib/python/Screens/MovieSelection.py:218
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:207
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:52
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:165
-msgid "menu"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:834
-msgid "menulist"
-msgstr ""
-
-#: ../lib/python/Components/TimerList.py:38
-#: ../lib/python/Components/TimerList.py:43
-msgid "mins"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:22
-msgid "minute"
-msgstr ""
-
-#: ../lib/python/Screens/InputBox.py:104
-#: ../lib/python/Screens/SleepTimerEdit.py:42
-#: ../lib/python/Components/UsageConfig.py:22
-#: ../lib/python/Components/UsageConfig.py:23
-#: ../lib/python/Components/UsageConfig.py:24
-msgid "minutes"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:110
-msgid "month"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:31
-msgid "move PiP to main picture"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:708
-msgid "move down to last entry"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:706
-msgid "move down to next entry"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:707
-msgid "move up to first entry"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:705
-msgid "move up to previous entry"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1004
-#: ../lib/python/Screens/InfoBarGenerics.py:1005
-#: ../lib/python/Screens/InfoBarGenerics.py:1006
-msgid "movie list"
-msgstr ""
-
-#: ../lib/python/Components/AVSwitch.py:110
-msgid "multinorm"
-msgstr ""
-
-#: ../lib/python/Components/ParentalControl.py:13
-msgid "never"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:265
-msgid "next channel"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:267
-msgid "next channel in history"
-msgstr ""
-
-#: ../lib/python/Screens/MessageBox.py:42
-#: ../lib/python/Screens/MessageBox.py:44
-#: ../lib/python/Screens/ScanSetup.py:517
-#: ../lib/python/Screens/ScanSetup.py:895
-#: ../lib/python/Screens/SleepTimerEdit.py:85
-#: ../lib/python/Components/config.py:314
-msgid "no"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:158
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:231
-msgid "no CAId selected"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:64
-msgid "no CI slots found"
-msgstr ""
-
-#: ../lib/python/Screens/HarddiskSetup.py:100
-msgid "no HDD found"
-msgstr ""
-
-#: ../lib/python/Screens/Ci.py:325 ../lib/python/Screens/Ci.py:349
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:57
-msgid "no module found"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:21
-msgid "no standby"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:14
-msgid "no timeout"
-msgstr ""
-
-#: ../lib/python/Screens/About.py:40
-msgid "none"
-msgstr ""
-
-#: ../lib/python/Components/TunerInfo.py:79
-msgid "not locked"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:58
-#: ../lib/python/Screens/Satconfig.py:421
-#: ../lib/python/Screens/Satconfig.py:447
-#: ../lib/python/Components/NimManager.py:914
-#: ../lib/python/Components/NimManager.py:1046
-#: ../lib/python/Components/NimManager.py:1062
-#: ../lib/python/Components/NimManager.py:1102
-msgid "nothing connected"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:128
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:260
-msgid "of a DUAL layer medium used."
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:131
-#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:266
-msgid "of a SINGLE layer medium used."
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:548
-#: ../lib/python/Screens/ScanSetup.py:583
-#: ../lib/python/Screens/ScanSetup.py:590
-#: ../lib/python/Screens/ScanSetup.py:613
-#: ../lib/python/Components/UsageConfig.py:27
-#: ../lib/python/Components/config.py:318
-msgid "off"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:549
-#: ../lib/python/Screens/ScanSetup.py:584
-#: ../lib/python/Screens/ScanSetup.py:591
-#: ../lib/python/Screens/ScanSetup.py:614
-#: ../lib/python/Components/UsageConfig.py:27
-#: ../lib/python/Components/config.py:318
-msgid "on"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:134
-msgid "on READ ONLY medium."
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:97
-msgid "once"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:310
-msgid "open nameserver configuration"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:268
-msgid "open servicelist"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:263
-msgid "open servicelist(down)"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:262
-msgid "open servicelist(up)"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:315
-msgid "open virtual keyboard input help"
-msgstr ""
-
-#: ../lib/python/Components/ServiceScan.py:137
-msgid "pass"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:649
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:161
-msgid "pause"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:160
-msgid "play entry"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:164
-msgid "play from next mark or playlist entry"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:163
-msgid "play from previous mark or playlist entry"
-msgstr ""
-
-#: ../lib/python/Screens/Ci.py:93
-msgid "please press OK when ready"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:451
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:440
-msgid "please wait, loading picture..."
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:264
-msgid "previous channel"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:266
-msgid "previous channel in history"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:95
-msgid "record"
-msgstr ""
-
-#: ../lib/python/Components/TimerList.py:54
-msgid "recording..."
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:30
-msgid "red"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:221
-msgid "remove a nameserver entry"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:71
-msgid "remove after this position"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:142
-msgid "remove all alternatives"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:120
-msgid "remove all new found flags"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:70
-msgid "remove before this position"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:409
-msgid "remove bookmark"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:406
-msgid "remove directory"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:122
-#: ../lib/python/Screens/ChannelSelection.py:127
-msgid "remove entry"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:108
-msgid "remove from parental protection"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:124
-msgid "remove new found flag"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:115
-msgid "remove selected satellite"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:78
-msgid "remove this mark"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/settings.py:89
-msgid "repeat playlist"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:97
-msgid "repeated"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:322
-msgid "rewind to the previous chapter"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1627
-msgid "right"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/settings.py:91
-msgid "save last directory on exit"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:498
-msgid "save playlist"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/settings.py:90
-msgid "save playlist on exit"
-msgstr ""
-
-#: ../lib/python/Components/ServiceScan.py:96
-#: ../lib/python/Components/ServiceScan.py:98
-msgid "scan done!"
-msgstr ""
-
-#: ../lib/python/Components/ServiceScan.py:33
-#, python-format
-msgid "scan in progress - %d%% done!"
-msgstr ""
-
-#: ../lib/python/Screens/ServiceScan.py:48
-msgid "scan state"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:14
-msgid "second"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:67
-#: ../lib/python/Screens/Satconfig.py:418
-#: ../lib/python/Components/NimManager.py:1050
-msgid "second cable of motorized LNB"
-msgstr ""
-
-#: ../lib/python/Screens/InputBox.py:104
-#: ../lib/python/Components/UsageConfig.py:14
-#: ../lib/python/Components/UsageConfig.py:15
-#: ../lib/python/Components/UsageConfig.py:16
-#: ../lib/python/Components/UsageConfig.py:21
-msgid "seconds"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:127
-msgid "select"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:88
-msgid "select .NFI flash file"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:132
-msgid "select CAId"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:379
-msgid "select CAId's"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:267
-msgid "select image from server"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:71
-msgid "select interface"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:304
-#: ../lib/python/Screens/NetworkSetup.py:714
-msgid "select menu entry"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:233
-msgid "select movie"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:212
-msgid "select the movie path"
-msgstr ""
-
-#: ../lib/python/Screens/ParentalControlSetup.py:92
-#: ../lib/python/Screens/ParentalControlSetup.py:119
-msgid "service pin"
-msgstr ""
-
-#: ../lib/python/Screens/ParentalControlSetup.py:94
-#: ../lib/python/Screens/ParentalControlSetup.py:112
-msgid "setup pin"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:319
-msgid "show DVD main menu"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:406
-msgid "show EPG..."
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:173
-msgid "show Infoline"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:224
-msgid "show all"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:141
-msgid "show alternatives"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:368
-#: ../lib/python/Screens/MovieSelection.py:219
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:178
-msgid "show event details"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:85
-msgid "show extended description"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:225
-msgid "show first selected tag"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:226
-msgid "show second selected tag"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:49
-msgid "show shutdown menu"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:407
-#: ../lib/python/Screens/InfoBarGenerics.py:497
-msgid "show single service EPG..."
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:227
-msgid "show tag menu"
-msgstr ""
-
-#: ../lib/python/Screens/ChannelSelection.py:99
-msgid "show transponder info"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:172
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:494
-msgid "shuffle playlist"
-msgstr ""
-
-#: ../SleepTimer.py:14
-msgid "shutdown"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:59
-#: ../lib/python/Screens/Satconfig.py:442
-#: ../lib/python/Components/NimManager.py:1047
-#: ../lib/python/Components/ParentalControl.py:12
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:24
-msgid "simple"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:654
-msgid "skip backward"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:655
-msgid "skip backward (enter time)"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:652
-msgid "skip forward"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:653
-msgid "skip forward (enter time)"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:175
-msgid "slide picture in loop"
-msgstr ""
-
-#: ../lib/python/Screens/MovieSelection.py:73
-msgid "sort by date"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:30
-msgid "standard"
-msgstr ""
-
-#: ../SleepTimer.py:14
-msgid "standby"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:56
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:58
-msgid "start cut here"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/settings.py:93
-msgid "start directory"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1041
-msgid "start timeshift"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1627
-msgid "stereo"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:31
-msgid "stop PiP"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:162
-msgid "stop entry"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1529
-msgid "stop recording"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1042
-msgid "stop timeshift"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:30
-msgid "swap PiP and main picture"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:141
-#: ../lib/python/Screens/LocationBox.py:402
-msgid "switch to bookmarks"
-msgstr ""
-
-#: ../lib/python/Screens/LocationBox.py:142
-#: ../lib/python/Screens/LocationBox.py:408
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:169
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:490
-msgid "switch to filelist"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:168
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:486
-msgid "switch to playlist"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:329
-msgid "switch to the next angle"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:327
-msgid "switch to the next audio track"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:328
-msgid "switch to the next subtitle language"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:145
-msgid "template file"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:177
-msgid "textcolor"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBar.py:191
-#: ../lib/python/Screens/MovieSelection.py:119
-msgid "this recording"
-msgstr ""
-
-#: ../lib/python/Components/ParentalControl.py:80
-msgid "this service is protected by a parental control pin"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1838
-msgid "toggle a cut mark at the current position"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:320
-msgid "toggle time, chapter, audio, subtitle info"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:1356
-#: ../lib/python/Screens/NetworkSetup.py:1370
-msgid "unconfirmed"
-msgstr ""
-
-#: ../lib/python/Screens/EventView.py:122
-msgid "unknown service"
-msgstr ""
-
-#: ../lib/python/Components/ParentalControl.py:13
-msgid "until restart"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:103
-msgid "user defined"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:554
-msgid "vertical"
-msgstr ""
-
-#: ../lib/python/Screens/InfoBarGenerics.py:1176
-msgid "view extensions..."
-msgstr ""
-
-#: ../lib/python/Screens/InfoBar.py:60
-msgid "view recordings..."
-msgstr ""
-
-#: ../lib/python/Screens/Ci.py:32
-msgid "wait for ci..."
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/SocketMMI/SocketMMI.py:21
-#: ../lib/python/Plugins/Extensions/SocketMMI/SocketMMI.py:28
-msgid "wait for mmi..."
-msgstr ""
-
-#: ../lib/python/Components/TimerList.py:47
-msgid "waiting"
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:103
-msgid "weekly"
-msgstr ""
-
-#: ../lib/python/Components/ParentalControl.py:16
-msgid "whitelist"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:260
-msgid "working"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:30
-msgid "yellow"
-msgstr ""
-
-#: ../lib/python/Screens/MessageBox.py:42
-#: ../lib/python/Screens/MessageBox.py:44
-#: ../lib/python/Screens/ScanSetup.py:517
-#: ../lib/python/Screens/ScanSetup.py:895
-#: ../lib/python/Screens/SleepTimerEdit.py:83
-#: ../lib/python/Components/config.py:314
-msgid "yes"
-msgstr ""
-
-#: ../lib/python/Screens/ScanSetup.py:517
-#: ../lib/python/Screens/ScanSetup.py:895
-msgid "yes (keep feeds)"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:332
-msgid ""
-"your dreambox might be unusable now. Please consult the manual for further "
-"assistance before rebooting your dreambox."
-msgstr ""
-
-#: ../lib/python/Screens/TimerEntry.py:95
-msgid "zap"
-msgstr ""
-
-#: ../lib/python/Components/TimerList.py:52
-msgid "zapped"
-msgstr ""
-
-#: ../data/
-msgid " "
-msgstr ""
-
-#: ../data/
-msgid "#000000"
-msgstr ""
-
-#: ../data/
-msgid "#0064c7"
-msgstr ""
-
-#: ../data/
-msgid "#25062748"
-msgstr ""
-
-#: ../data/
-msgid "#389416"
-msgstr ""
-
-#: ../data/
-msgid "#80000000"
-msgstr ""
-
-#: ../data/
-msgid "#80ffffff"
-msgstr ""
-
-#: ../data/
-msgid "#bab329"
-msgstr ""
-
-#: ../data/
-msgid "#f23d21"
-msgstr ""
-
-#: ../data/
-msgid "#ffffff"
-msgstr ""
-
-#: ../data/
-msgid "#ffffffff"
-msgstr ""
-
-#: ../data/
-msgid "0"
-msgstr ""
-
-#: ../data/
-msgid "1"
-msgstr ""
-
-#: ../data/
-msgid "12V output"
-msgstr ""
-
-#: ../data/
-msgid "2"
-msgstr ""
-
-#: ../data/
-msgid "3"
-msgstr ""
-
-#: ../data/
-msgid "4"
-msgstr ""
-
-#: ../data/
-msgid "5"
-msgstr ""
-
-#: ../data/
-msgid "6"
-msgstr ""
-
-#: ../data/
-msgid "7"
-msgstr ""
-
-#: ../data/
-msgid "8"
-msgstr ""
-
-#: ../data/
-msgid "9"
-msgstr ""
-
-#: ../data/
-msgid "About"
-msgstr ""
-
-#: ../data/
-msgid "Action on long powerbutton press"
-msgstr ""
-
-#: ../data/
-msgid "Activate network settings"
-msgstr ""
-
-#: ../data/
-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 ""
-
-#: ../data/
-msgid "Alpha"
-msgstr ""
-
-#: ../data/
-msgid "Alternative radio mode"
-msgstr ""
-
-#: ../data/
-msgid "Alternative services tuner priority"
-msgstr ""
-
-#: ../data/
-msgid "Audio"
-msgstr ""
-
-#: ../data/
-msgid "BER"
-msgstr ""
-
-#: ../data/
-msgid "BER:"
-msgstr ""
-
-#: ../data/
-msgid "Backup is done. Please press OK to see the result."
-msgstr ""
-
-#: ../data/
-msgid "Behavior of 'pause' when paused"
-msgstr ""
-
-#: ../data/
-msgid "Behavior of 0 key in PiP-mode"
-msgstr ""
-
-#: ../data/
-msgid "Behavior when a movie is started"
-msgstr ""
-
-#: ../data/
-msgid "Behavior when a movie is stopped"
-msgstr ""
-
-#: ../data/
-msgid "Behavior when a movie reaches the end"
-msgstr ""
-
-#: ../data/
-msgid ""
-"By pressing the OK Button on your remote control, the info bar is being "
-"displayed."
-msgstr ""
-
-#: ../data/
-msgid "C"
-msgstr ""
-
-#: ../data/
-msgid "Change bouquets in quickzap"
-msgstr ""
-
-#: ../data/
-msgid "Channel Selection"
-msgstr ""
-
-#: ../data/
-msgid "Channellist menu"
-msgstr ""
-
-#: ../data/
-msgid "Choose Tuner"
-msgstr ""
-
-#: ../data/
-msgid "Choose bouquet"
-msgstr ""
-
-#: ../data/
-msgid "Choose your Skin"
-msgstr ""
-
-#: ../data/
-msgid "Command execution..."
-msgstr ""
-
-#: ../data/
-msgid "Common Interface"
-msgstr ""
-
-#: ../data/
-msgid "Compact flash card"
-msgstr ""
-
-#: ../data/
-msgid "Continue in background"
-msgstr ""
-
-#: ../data/
-msgid "Custom skip time for '1'/'3'-keys"
-msgstr ""
-
-#: ../data/
-msgid "Custom skip time for '4'/'6'-keys"
-msgstr ""
-
-#: ../data/
-msgid "Custom skip time for '7'/'9'-keys"
-msgstr ""
-
-#: ../data/
-msgid "Customize"
-msgstr ""
-
-#: ../data/
-msgid "D"
-msgstr ""
-
-#: ../data/
-msgid "Default services lists"
-msgstr ""
-
-#: ../data/
-msgid "Default settings"
-msgstr ""
-
-#: ../data/
-msgid "Delay"
-msgstr ""
-
-#: ../data/
-msgid "DiSEqC"
-msgstr ""
-
-#: ../data/
-msgid "Dish"
-msgstr ""
-
-#: ../data/
-msgid "Display Setup"
-msgstr ""
-
-#: ../data/
-msgid "Do you want to do a service scan?"
-msgstr ""
-
-#: ../data/
-msgid "Do you want to do another manual service scan?"
-msgstr ""
-
-#: ../data/
-msgid "Do you want to enable the parental control feature on your dreambox?"
-msgstr ""
-
-#: ../data/
-msgid "Do you want to install default sat lists?"
-msgstr ""
-
-#: ../data/
-msgid "Do you want to restore your settings?"
-msgstr ""
-
-#: ../data/
-msgid "Do you want to view a tutorial?"
-msgstr ""
-
-#: ../data/
-msgid "Downloadable plugins"
-msgstr ""
-
-#: ../data/
-msgid "EPG Selection"
-msgstr ""
-
-#: ../data/
-msgid "Electronic Program Guide"
-msgstr ""
-
-#: ../data/
-msgid "Enable multiple bouquets"
-msgstr ""
-
-#: ../data/
-msgid "Enter Fast Forward at speed"
-msgstr ""
-
-#: ../data/
-msgid "Enter Rewind at speed"
-msgstr ""
-
-#: ../data/
-msgid "Eventview"
-msgstr ""
-
-#: ../data/
-msgid "Exit the wizard"
-msgstr ""
-
-#: ../data/
-msgid "Exit wizard"
-msgstr ""
-
-#: ../data/
-msgid "Extensions"
-msgstr ""
-
-#: ../data/
-msgid "Factory reset"
-msgstr ""
-
-#: ../data/
-msgid "Fast Forward speeds"
-msgstr ""
-
-#: ../data/
-msgid "Filesystem Check..."
-msgstr ""
-
-#: ../data/
-msgid "Finetune"
-msgstr ""
-
-#: ../data/
-msgid "Frame repeat count during non-smooth winding"
-msgstr ""
-
-#: ../data/
-msgid "Harddisk setup"
-msgstr ""
-
-#: ../data/
-msgid "Harddisk standby after"
-msgstr ""
-
-#: ../data/
-msgid "Index"
-msgstr ""
-
-#: ../data/
-msgid "InfoBar"
-msgstr ""
-
-#: ../data/
-msgid "Infobar timeout"
-msgstr ""
-
-#: ../data/
-msgid "Information"
-msgstr ""
-
-#: ../data/
-msgid "Initialization..."
-msgstr ""
-
-#: ../data/
-msgid "Installing Software..."
-msgstr ""
-
-#: ../data/
-msgid "Installing default sat lists... Please wait..."
-msgstr ""
-
-#: ../data/
-msgid "Installing defaults... Please wait..."
-msgstr ""
-
-#: ../data/
-msgid "Installing package content... Please wait..."
-msgstr ""
-
-#: ../data/
-msgid "Invert display"
-msgstr ""
-
-#: ../data/
-msgid "Job View"
-msgstr ""
-
-#: ../data/
-msgid "Keyboard"
-msgstr ""
-
-#: ../data/
-msgid "Keyboard Map"
-msgstr ""
-
-#: ../data/
-msgid "Keyboard Setup"
-msgstr ""
-
-#: ../data/
-msgid "Keymap"
-msgstr ""
-
-#: ../data/
-msgid "Language..."
-msgstr ""
-
-#: ../data/
-msgid "Load Length of Movies in Movielist"
-msgstr ""
-
-#: ../data/
-msgid "Lock:"
-msgstr ""
-
-#: ../data/
-msgid "MORE"
-msgstr ""
-
-#: ../data/
-msgid "Main menu"
-msgstr ""
-
-#: ../data/
-msgid "Mainmenu"
-msgstr ""
-
-#: ../data/
-msgid "Manual Scan"
-msgstr ""
-
-#: ../data/
-msgid "Margin after record"
-msgstr ""
-
-#: ../data/
-msgid "Margin before record (minutes)"
-msgstr ""
-
-#: ../data/
-msgid "MediaPlayer"
-msgstr ""
-
-#: ../data/
-msgid "Message"
-msgstr ""
-
-#: ../data/
-msgid "Message..."
-msgstr ""
-
-#: ../data/
-msgid "Modulator"
-msgstr ""
-
-#: ../data/
-msgid "Movielist menu"
-msgstr ""
-
-#: ../data/
-msgid "Mute"
-msgstr ""
-
-#: ../data/
-msgid "NEXT"
-msgstr ""
-
-#: ../data/
-msgid "NOW"
-msgstr ""
-
-#: ../data/
-msgid "Nameserver Setup"
-msgstr ""
-
-#: ../data/
-msgid "Network Configuration..."
-msgstr ""
-
-#: ../data/
-msgid "Network Setup"
-msgstr ""
-
-#: ../data/
-msgid "Network setup"
-msgstr ""
-
-#: ../data/
-msgid "Network test..."
-msgstr ""
-
-#: ../data/
-msgid "Network..."
-msgstr ""
-
-#: ../data/
-msgid "No backup needed"
-msgstr ""
-
-#: ../data/
-msgid "No, do nothing."
-msgstr ""
-
-#: ../data/
-msgid "No, just start my dreambox"
-msgstr ""
-
-#: ../data/
-msgid "No, scan later manually"
-msgstr ""
-
-#: ../data/
-msgid "Now Playing"
-msgstr ""
-
-#: ../data/
-msgid "OK, guide me through the upgrade process"
-msgstr ""
-
-#: ../data/
-msgid "OSD Settings"
-msgstr ""
-
-#: ../data/
-msgid "Parental control services Editor"
-msgstr ""
-
-#: ../data/
-msgid "Parental control setup"
-msgstr ""
-
-#: ../data/
-msgid "PiPSetup"
-msgstr ""
-
-#: ../data/
-msgid "Pin code needed"
-msgstr ""
-
-#: ../data/
-msgid "Please choose the default services lists you want to install."
-msgstr ""
-
-#: ../data/
-msgid "Please set up tuner B"
-msgstr ""
-
-#: ../data/
-msgid "Please set up tuner C"
-msgstr ""
-
-#: ../data/
-msgid "Please set up tuner D"
-msgstr ""
-
-#: ../data/
-msgid "Plugin browser"
-msgstr ""
-
-#: ../data/
-msgid "Plugins"
-msgstr ""
-
-#: ../data/
-msgid "RC Menu"
-msgstr ""
-
-#: ../data/
-msgid "RF output"
-msgstr ""
-
-#: ../data/
-msgid "Radio"
-msgstr ""
-
-#: ../data/
-msgid "Reception Settings"
-msgstr ""
-
-#: ../data/
-msgid "Recordings always have priority"
-msgstr ""
-
-#: ../data/
-msgid "Repeat"
-msgstr ""
-
-#: ../data/
-msgid "Restart"
-msgstr ""
-
-#: ../data/
-msgid "Restart GUI"
-msgstr ""
-
-#: ../data/
-msgid ""
-"Restoring the settings is done. Please press OK to activate the restored "
-"settings now."
-msgstr ""
-
-#: ../data/
-msgid "Rewind speeds"
-msgstr ""
-
-#: ../data/
-msgid "SNR"
-msgstr ""
-
-#: ../data/
-msgid "SNR:"
-msgstr ""
-
-#: ../data/
-msgid "Sat / Dish Setup"
-msgstr ""
-
-#: ../data/
-msgid "Seek"
-msgstr ""
-
-#: ../data/
-msgid "Select HDD"
-msgstr ""
-
-#: ../data/
-msgid "Select Network Adapter"
-msgstr ""
-
-#: ../data/
-msgid "Select a movie"
-msgstr ""
-
-#: ../data/
-msgid "Service"
-msgstr ""
-
-#: ../data/
-msgid "Service Scan"
-msgstr ""
-
-#: ../data/
-msgid "Service Searching"
-msgstr ""
-
-#: ../data/
-msgid "Service scan"
-msgstr ""
-
-#: ../data/
-msgid "Setup Mode"
-msgstr ""
-
-#: ../data/
-msgid "Show blinking clock in display during recording"
-msgstr ""
-
-#: ../data/
-msgid "Show infobar on channel change"
-msgstr ""
-
-#: ../data/
-msgid "Show infobar on event change"
-msgstr ""
-
-#: ../data/
-msgid "Show infobar on skip forward/backward"
-msgstr ""
-
-#: ../data/
-msgid "Show positioner movement"
-msgstr ""
-
-#: ../data/
-msgid "Slow Motion speeds"
-msgstr ""
-
-#: ../data/
-msgid "Somewhere else"
-msgstr ""
-
-#: ../data/
-msgid "Sound"
-msgstr ""
-
-#: ../data/
-msgid "Soundcarrier"
-msgstr ""
-
-#: ../data/
-msgid "Subservices"
-msgstr ""
-
-#: ../data/
-msgid "TV System"
-msgstr ""
-
-#: ../data/
-msgid "Test mode"
-msgstr ""
-
-#: ../data/
-msgid ""
-"Thank you for using the wizard. Your box is now ready to use.\n"
-"Please press OK to start using your Dreambox."
-msgstr ""
-
-#: ../data/
-msgid "The backup failed. Please choose a different backup location."
-msgstr ""
-
-#: ../data/
-msgid "The package doesn't contain anything."
-msgstr ""
-
-#: ../data/
-msgid "The wizard is finished now."
-msgstr ""
-
-#: ../data/
-msgid "There are no default services lists in your image."
-msgstr ""
-
-#: ../data/
-msgid "There are no default settings in your image."
-msgstr ""
-
-#: ../data/
-msgid "This is step number 2."
-msgstr ""
-
-#: ../data/
-msgid "This is unsupported at the moment."
-msgstr ""
-
-#: ../data/
-msgid "Time/Date Input"
-msgstr ""
-
-#: ../data/
-msgid "Timer"
-msgstr ""
-
-#: ../data/
-msgid "Timer Edit"
-msgstr ""
-
-#: ../data/
-msgid "Timer Editor"
-msgstr ""
-
-#: ../data/
-msgid "Timer entry"
-msgstr ""
-
-#: ../data/
-msgid "Timer log"
-msgstr ""
-
-#: ../data/
-msgid "Timer sanity error"
-msgstr ""
-
-#: ../data/
-msgid "Timer selection"
-msgstr ""
-
-#: ../data/
-msgid "Timeshift"
-msgstr ""
-
-#: ../data/
-msgid "Timeshift path..."
-msgstr ""
-
-#: ../data/
-msgid "Timezone"
-msgstr ""
-
-#: ../data/
-msgid "Translation"
-msgstr ""
-
-#: ../data/
-msgid "Translation:"
-msgstr ""
-
-#: ../data/
-msgid "Tuner Slot"
-msgstr ""
-
-#: ../data/
-msgid "Tuner configuration"
-msgstr ""
-
-#: ../data/
-msgid "USB"
-msgstr ""
-
-#: ../data/
-msgid "Use non-smooth winding at speeds above"
-msgstr ""
-
-#: ../data/
-msgid "Use power measurement"
-msgstr ""
-
-#: ../data/
-msgid ""
-"Use the left and right buttons to change an option.\n"
-"\n"
-"Please set up tuner A"
-msgstr ""
-
-#: ../data/
-msgid ""
-"Use the up/down keys on your remote control to select an option. After that, "
-"press OK."
-msgstr ""
-
-#: ../data/
-msgid "Use wizard to set up basic features"
-msgstr ""
-
-#: ../data/
-msgid "VCR scart"
-msgstr ""
-
-#: ../data/
-msgid "Virtual KeyBoard"
-msgstr ""
-
-#: ../data/
-msgid "Volume"
-msgstr ""
-
-#: ../data/
-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 ""
-
-#: ../data/
-msgid "Welcome..."
-msgstr ""
-
-#: ../data/
-msgid ""
-"Welcome.\n"
-"\n"
-"This start wizard will guide you through the basic setup of your Dreambox.\n"
-"Press the OK button on your remote control to move to the next step."
-msgstr ""
-
-#: ../data/
-msgid "What do you want to scan?"
-msgstr ""
-
-#: ../data/
-msgid "Where do you want to backup your settings?"
-msgstr ""
-
-#: ../data/
-msgid "Yes, backup my settings!"
-msgstr ""
-
-#: ../data/
-msgid "Yes, do a manual scan now"
-msgstr ""
-
-#: ../data/
-msgid "Yes, do an automatic scan now"
-msgstr ""
-
-#: ../data/
-msgid "Yes, do another manual scan now"
-msgstr ""
-
-#: ../data/
-msgid "Yes, perform a shutdown now."
-msgstr ""
-
-#: ../data/
-msgid "Yes, restore the settings now"
-msgstr ""
-
-#: ../data/
-msgid "Yes, view the tutorial"
-msgstr ""
-
-#: ../data/
-msgid ""
-"You can choose some default settings now. Please select the settings you "
-"want to be installed."
-msgstr ""
-
-#: ../data/
-msgid "You can choose, what you want to install..."
-msgstr ""
-
-#: ../data/
-msgid "You chose not to install any default services lists."
-msgstr ""
-
-#: ../data/
-msgid ""
-"You chose not to install any default settings. You can however install the "
-"default settings later in the settings menu."
-msgstr ""
-
-#: ../data/
-msgid ""
-"You chose not to install anything. Please press OK finish the install wizard."
-msgstr ""
-
-#: ../data/
-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 ""
-
-#: ../data/
-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"
-"Please press OK to start the backup now."
-msgstr ""
-
-#: ../data/
-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 ""
-
-#: ../data/
-msgid ""
-"You have chosen to backup to your harddisk. Please press OK to start the "
-"backup now."
-msgstr ""
-
-#: ../data/
-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 ""
-
-#: ../data/
-msgid ""
-"You need to set a pin code and hide it from your children.\n"
-"\n"
-"Do you want to set the pin now?"
-msgstr ""
-
-#: ../data/
-msgid ""
-"Your backup succeeded. We will now continue to explain the further upgrade "
-"process."
-msgstr ""
-
-#: ../data/
-msgid "Your dreambox is shutting down. Please stand by..."
-msgstr ""
-
-#: ../data/
-msgid "config menu"
-msgstr ""
-
-#: ../data/
-msgid "help..."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/
-msgid "50 Hz"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/
-msgid "If you can see this page, please press OK."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/
-msgid "No 50 Hz, sorry. :("
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/
-msgid "No picture on TV? Press EXIT and retry."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/
-msgid "Please follow the instructions on the TV"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/
-msgid "Refresh rate selection."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/
-msgid "Select refresh rate"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/
-msgid "Select video input"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/
-msgid "Select video mode"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/
-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?"
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/
-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"
-"\n"
-"The next input port will be automatically probed in 10 seconds."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/
-msgid "Video mode selection."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/
-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"
-"Please press OK to begin."
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/Videomode/
-msgid "Your TV works with 50 Hz. Good!"
-msgstr ""
index 7916978..f0fb7ff 100755 (executable)
--- a/po/es.po
+++ b/po/es.po
@@ -2056,8 +2056,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Selección de idioma"
 
-msgid "Language..."
-msgstr "Idioma..."
+msgid "Language"
+msgstr "Idioma"
 
 msgid "Last config"
 msgstr "Última config:"
index fc5d16d..643fb71 100755 (executable)
--- a/po/et.po
+++ b/po/et.po
@@ -2055,7 +2055,7 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Keele valik"
 
-msgid "Language..."
+msgid "Language"
 msgstr "Keel"
 
 msgid "Last config"
index 03c35dd..dc2d749 100755 (executable)
--- a/po/fi.po
+++ b/po/fi.po
@@ -2102,8 +2102,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Kielivalinta"
 
-msgid "Language..."
-msgstr "Kielivalinta..."
+msgid "Language"
+msgstr "Kielivalinta"
 
 msgid "Last config"
 msgstr "Aikais.arvot"
index 3c9e4eb..a5dd681 100755 (executable)
--- a/po/fr.po
+++ b/po/fr.po
@@ -2080,8 +2080,8 @@ msgstr ""
 msgid "Language selection"
 msgstr "Sélection de la langue"
 
-msgid "Language..."
-msgstr "Langage..."
+msgid "Language"
+msgstr "Langage"
 
 msgid "Last config"
 msgstr ""
index 8f41e82..b330a51 100755 (executable)
--- a/po/fy.po
+++ b/po/fy.po
@@ -2047,8 +2047,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Taal Kieze"
 
-msgid "Language..."
-msgstr "Taal..."
+msgid "Language"
+msgstr "Taal"
 
 msgid "Last config"
 msgstr ""
index 520655b..09082b5 100755 (executable)
--- a/po/hr.po
+++ b/po/hr.po
@@ -2020,8 +2020,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Odaberite Jezik"
 
-msgid "Language..."
-msgstr "Jezik..."
+msgid "Language"
+msgstr "Jezik"
 
 msgid "Last config"
 msgstr ""
@@ -5921,9 +5921,6 @@ msgstr "prebačen"
 #~ msgid "LCD Setup"
 #~ msgstr "Postavke Displaya"
 
-#~ msgid "Language"
-#~ msgstr "Jezici "
-
 #~ msgid "Loopthrough to Socket A"
 #~ msgstr "PoveA3i s Utorom A"
 
index 3203d73..7139e6d 100755 (executable)
--- a/po/hu.po
+++ b/po/hu.po
@@ -2052,8 +2052,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Válasszon nyelvet"
 
-msgid "Language..."
-msgstr "Nyelvezet..."
+msgid "Language"
+msgstr "Nyelvezet"
 
 msgid "Last config"
 msgstr ""
index 69fbfd9..692f08c 100755 (executable)
--- a/po/is.po
+++ b/po/is.po
@@ -1,6 +1,6 @@
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
+# 
 msgid ""
 msgstr ""
 "Project-Id-Version: Icelandic translation v.1.44\n"
@@ -13,8 +13,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Poedit-Language: Icelandic\n"
-"X-Poedit-Country: ICELAND\n"
 "X-Poedit-SourceCharset: utf-8\n"
+"X-Poedit-Country: ICELAND\n"
 
 msgid ""
 "\n"
@@ -118,7 +118,7 @@ msgid " updates available."
 msgstr " uppfærslur tiltækar."
 
 msgid " wireless networks found!"
-msgstr ""
+msgstr "fann þráðlaust net!"
 
 msgid "#000000"
 msgstr "#000000"
@@ -198,10 +198,8 @@ msgstr "* Bara virkt þegar slegið er inn falið SSID eða aðgangslykil"
 msgid ".NFI Download failed:"
 msgstr ".NFI Niðurhal tókst ekki:"
 
-msgid ""
-".NFI file passed md5sum signature check. You can safely flash this image!"
-msgstr ""
-".NFI skráin stóðst md5sum undirskrifta próf. Þú getur notað þetta stýrikerfi!"
+msgid ".NFI file passed md5sum signature check. You can safely flash this image!"
+msgstr ".NFI skráin stóðst md5sum undirskrifta próf. Þú getur notað þetta stýrikerfi!"
 
 msgid "/usr/share/enigma2 directory"
 msgstr "/usr/share/enigma2 mappa"
@@ -216,7 +214,7 @@ msgid "1"
 msgstr "1"
 
 msgid "1 wireless network found!"
-msgstr ""
+msgstr "fann 1 þráðlaust net!"
 
 msgid "1.0"
 msgstr "1.0"
@@ -357,19 +355,11 @@ msgstr ""
 "Upptaka er nú í gangi.\n"
 "Hvað viltu núna gera?"
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"configure the positioner."
-msgstr ""
-"Upptaka er nú í gangi. Stoppið vinsamlega upptökuna áður en að þú reynir að "
-"stilla staðsetjara."
+msgid "A recording is currently running. Please stop the recording before trying to configure the positioner."
+msgstr "Upptaka er nú í gangi. Stoppið vinsamlega upptökuna áður en að þú reynir að stilla staðsetjara."
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"start the satfinder."
-msgstr ""
-"Upptaka er í gangi núna. Stoppaðu upptökuna áður en að þú byrjar "
-"gervihnattaleit."
+msgid "A recording is currently running. Please stop the recording before trying to start the satfinder."
+msgstr "Upptaka er í gangi núna. Stoppaðu upptökuna áður en að þú byrjar gervihnattaleit."
 
 #, python-format
 msgid "A required tool (%s) was not found."
@@ -399,7 +389,7 @@ msgstr ""
 "Viltu gera það núna?"
 
 msgid "A small overview of the available icon states and actions."
-msgstr ""
+msgstr "Einfalt yfirlit yfir stöðu smámynda og aðgerða."
 
 msgid ""
 "A timer failed to record!\n"
@@ -433,7 +423,7 @@ msgid "About..."
 msgstr "Um....."
 
 msgid "Accesspoint:"
-msgstr ""
+msgstr "Aðgangspunktur:"
 
 msgid "Action on long powerbutton press"
 msgstr "Hvað skal gera ef ýtt er lengi á power takka"
@@ -480,12 +470,8 @@ msgstr "Bæta við rásavönd"
 msgid "Add to favourites"
 msgstr "Bæta við uppáhaldsrásir"
 
-msgid ""
-"Adds enigma2 settings and dreambox model informations like SN, rev... if "
-"enabled."
-msgstr ""
-"Bætir við enigma2 stillingum og dreambox gerðar upplýsingum eins og SN, "
-"útgáfa... ef virkt."
+msgid "Adds enigma2 settings and dreambox model informations like SN, rev... if enabled."
+msgstr "Bætir við enigma2 stillingum og dreambox gerðar upplýsingum eins og SN, útgáfa... ef virkt."
 
 msgid "Adds network configuration if enabled."
 msgstr "Bætir við net stillingum ef virkt."
@@ -493,15 +479,8 @@ msgstr "Bætir við net stillingum ef virkt."
 msgid "Adds wlan configuration if enabled."
 msgstr "Bætir við wlan stillingum ef virkt."
 
-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 ""
-"Stilltu lita stillingar þannig að öll litablæbrigði séu aðgreinanleg og eru "
-"eins björt og hægt er. Ef þú ert ánægður með árangurinn, ýttu þá á OK til að "
-"loka stillinga skjánum eða ýttu á númeralykil til að velja aðra prufumynd."
+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 "Stilltu lita stillingar þannig að öll litablæbrigði séu aðgreinanleg og eru eins björt og hægt er. Ef þú ert ánægður með árangurinn, ýttu þá á OK til að loka stillinga skjánum eða ýttu á númeralykil til að velja aðra prufumynd."
 
 msgid "Advanced"
 msgstr "Sérfræði"
@@ -516,7 +495,7 @@ msgid "Advanced Software Plugin"
 msgstr ""
 
 msgid "Advanced Video Enhancement Setup"
-msgstr ""
+msgstr "Myndstillingar fyrir lengra komna"
 
 msgid "Advanced Video Setup"
 msgstr "Sérfræði myndstillingar"
@@ -527,12 +506,8 @@ msgstr "Sérfræði innsetning afrita"
 msgid "After event"
 msgstr "Eftir atriði"
 
-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 ""
-"Eftir að álfurinn er búinn þá þarft þú að læsa sumum rásum. Skoðaðu "
-"leiðbeiningarnar til að sjá hvernig á að gera það."
+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 "Eftir að álfurinn er búinn þá þarft þú að læsa sumum rásum. Skoðaðu leiðbeiningarnar til að sjá hvernig á að gera það."
 
 msgid "Album"
 msgstr "Album"
@@ -582,7 +557,7 @@ msgstr ""
 "eftirfarandi afriti:\n"
 
 msgid "Are you sure you want to exit this wizard?"
-msgstr ""
+msgstr "Ertu viss um að þú viljir hætta?"
 
 msgid ""
 "Are you sure you want to restart your network interfaces?\n"
@@ -636,7 +611,7 @@ msgid "Auto chapter split every ? minutes (0=never)"
 msgstr "Skipta í kafla hverja ? mínútu (0=aldrei)"
 
 msgid "Auto flesh"
-msgstr ""
+msgstr "Sjálfvirkt skinn"
 
 msgid "Auto scart switching"
 msgstr "Sjálfvirk skipting á scarti"
@@ -690,7 +665,7 @@ msgid "Backup is done. Please press OK to see the result."
 msgstr "Búið að taka afrit. Ýtið á OK til að sjá útkomuna."
 
 msgid "Backup is running..."
-msgstr ""
+msgstr "Afritun í vinnslu..."
 
 msgid "Backup system settings"
 msgstr "Afrita kerfis stillingar"
@@ -720,13 +695,13 @@ msgid "Behavior when a movie reaches the end"
 msgstr "Aðgerð þegar mynd er búin"
 
 msgid "Bitrate:"
-msgstr ""
+msgstr "Bitahraði:"
 
 msgid "Block noise reduction"
-msgstr ""
+msgstr "Suð deyfing"
 
 msgid "Blue boost"
-msgstr ""
+msgstr "Auka bláan"
 
 msgid "Bookmarks"
 msgstr "Bókamerki"
@@ -746,12 +721,8 @@ msgstr "Brenna á DVD"
 msgid "Bus: "
 msgstr "Rás:"
 
-msgid ""
-"By pressing the OK Button on your remote control, the info bar is being "
-"displayed."
-msgstr ""
-"Með því að ýta á OK takkann á fjárstýringunni þá sjást upplýsingarnar á "
-"skjánum."
+msgid "By pressing the OK Button on your remote control, the info bar is being displayed."
+msgstr "Með því að ýta á OK takkann á fjárstýringunni þá sjást upplýsingarnar á skjánum."
 
 msgid "C"
 msgstr "C"
@@ -811,7 +782,7 @@ msgid "Change setup pin"
 msgstr "Breyta valmynda kóða"
 
 msgid "Change step size"
-msgstr ""
+msgstr "Breyta skrefa stærð"
 
 msgid "Channel"
 msgstr "Rás"
@@ -847,7 +818,7 @@ msgid "Choose Tuner"
 msgstr "Veldu móttakara"
 
 msgid "Choose a wireless network"
-msgstr ""
+msgstr "Velja þráðlaust net"
 
 msgid "Choose backup files"
 msgstr "Veldu afrits skrár"
@@ -883,10 +854,10 @@ msgid "Cleanup Wizard"
 msgstr "Hreinsi álfur"
 
 msgid "Cleanup Wizard settings"
-msgstr ""
+msgstr "Stillingar tiltektar álfs"
 
 msgid "CleanupWizard"
-msgstr ""
+msgstr "Tiltektar álfur"
 
 msgid "Clear before scan"
 msgstr "Eyða fyrir leit"
@@ -898,7 +869,7 @@ msgid "Close"
 msgstr "Loka"
 
 msgid "Close title selection"
-msgstr ""
+msgstr "Loka titils vali"
 
 msgid "Code rate high"
 msgstr "Gagna hraði, hár"
@@ -961,19 +932,19 @@ msgid "Configuration Mode"
 msgstr "Stillingar"
 
 msgid "Configure interface"
-msgstr ""
+msgstr "Stilla viðmót"
 
 msgid "Configure nameservers"
-msgstr ""
+msgstr "Stilla nafnaþjón"
 
 msgid "Configure your internal LAN"
-msgstr ""
+msgstr "Stilla innbyggt netkort"
 
 msgid "Configure your network again"
-msgstr ""
+msgstr "Stilla netkortið þitt aftur"
 
 msgid "Configure your wireless LAN again"
-msgstr ""
+msgstr "Stilla þráðlausa netkortið þitt aftur"
 
 msgid "Configuring"
 msgstr "Stilli"
@@ -985,7 +956,7 @@ msgid "Connect"
 msgstr "Tengi"
 
 msgid "Connect to a Wireless Network"
-msgstr ""
+msgstr "Tegnjast við þráðlaust net"
 
 msgid "Connected to"
 msgstr "Tengd við"
@@ -1060,6 +1031,8 @@ msgid ""
 "Crashlogs found!\n"
 "Send them to Dream Multimedia?"
 msgstr ""
+"Hrunskýrsla fannst!\n"
+"Senda hana til Dream Multimedia?"
 
 msgid "Create DVD-ISO"
 msgstr "Búa til DVD-ISO"
@@ -1084,7 +1057,7 @@ msgid "Current settings:"
 msgstr "Núverandi stilling:"
 
 msgid "Current value: "
-msgstr ""
+msgstr "Núvarandi val:"
 
 msgid "Current version:"
 msgstr "Núverandi útgáfa:"
@@ -1123,13 +1096,13 @@ msgid "DVB-S2"
 msgstr "DVB-S2"
 
 msgid "DVD File Browser"
-msgstr ""
+msgstr "DVD skráar val"
 
 msgid "DVD Player"
 msgstr "DVD spilari"
 
 msgid "DVD Titlelist"
-msgstr ""
+msgstr "DVD titlaskrá"
 
 msgid "DVD media toolbox"
 msgstr "DVD miðla tól"
@@ -1141,7 +1114,7 @@ msgid "Date"
 msgstr "Dags"
 
 msgid "Decide if you want to enable or disable the Cleanup Wizard."
-msgstr ""
+msgstr "Velja hvort að eigi að nota skráar hreinsi álf."
 
 msgid "Decide what should be done when crashlogs are found."
 msgstr "Ákveða hvað skal gera þegar hrunskýrsla finnst."
@@ -1224,13 +1197,13 @@ msgid "DiSEqC repeats"
 msgstr "DiSEqC endurtekning"
 
 msgid "DiSEqC-Tester settings"
-msgstr ""
+msgstr "DiSEqC prufu stillingar"
 
 msgid "Dialing:"
 msgstr "Hringi:"
 
 msgid "Digital contour removal"
-msgstr ""
+msgstr "Fjarlægja stafrænt contour"
 
 msgid "Direct playback of linked titles without menu"
 msgstr "Spila beint tengda titla án valmyndar"
@@ -1240,7 +1213,7 @@ msgid "Directory %s nonexistent."
 msgstr "Mappa %s ekki til."
 
 msgid "Directory browser"
-msgstr ""
+msgstr "Möppu vafri"
 
 msgid "Disable"
 msgstr "Gera óvirkt"
@@ -1376,11 +1349,8 @@ msgstr "Viltu setja inn stillingarnar þínar aftur?"
 msgid "Do you want to resume this playback?"
 msgstr "Viltu halda áfram að spila þetta?"
 
-msgid ""
-"Do you want to submit your email address and name so that we can contact you "
-"if needed?"
-msgstr ""
-"Viltu senda með netfang og nafn svo að við getum haft samband ef að þarf?"
+msgid "Do you want to submit your email address and name so that we can contact you if needed?"
+msgstr "Viltu senda með netfang og nafn svo að við getum haft samband ef að þarf?"
 
 msgid "Do you want to update your Dreambox?"
 msgstr "Viltu uppfæra Dreamboxið þitt?"
@@ -1450,7 +1420,7 @@ msgid "Dutch"
 msgstr "Hollenska"
 
 msgid "Dynamic contrast"
-msgstr ""
+msgstr "Dínamísk skerpa"
 
 msgid "E"
 msgstr "E"
@@ -1493,7 +1463,7 @@ msgid "Edit title"
 msgstr "Breyta titili"
 
 msgid "Edit upgrade source url."
-msgstr ""
+msgstr "Breyta uppfærslu slóð."
 
 msgid "Electronic Program Guide"
 msgstr "Rafrænn dagskrárstjóri (EPG)"
@@ -1505,7 +1475,7 @@ msgid "Enable 5V for active antenna"
 msgstr "Kveikja á 5V fyrir loftnet með magnara"
 
 msgid "Enable Cleanup Wizard?"
-msgstr ""
+msgstr "Virkja hreinsi álfi?"
 
 msgid "Enable multiple bouquets"
 msgstr "Virkja marga rásavendi"
@@ -1535,7 +1505,7 @@ msgid "Encryption Type"
 msgstr "Gerð kóðunar"
 
 msgid "Encryption:"
-msgstr ""
+msgstr "Ruglunarkerfi:"
 
 msgid "End time"
 msgstr "Loka tími"
@@ -1554,6 +1524,12 @@ msgid ""
 "\n"
 "© 2006 - Stephan Reichholf"
 msgstr ""
+"Enigma2 Skinnval\n"
+"\n"
+"Ef þú verður var við vandamál hafðu þá samband\n"
+"stephan@reichholf.net\n"
+"\n"
+"© 2006 - Stephan Reichholf"
 
 msgid ""
 "Enigma2 Skinselector v0.5 BETA\n"
@@ -1606,7 +1582,7 @@ msgstr ""
 "Reyna aftur?"
 
 msgid "Estonian"
-msgstr ""
+msgstr "Eistneska"
 
 msgid "Eventview"
 msgstr "Skoða atriði"
@@ -1630,7 +1606,7 @@ msgid "Exit editor"
 msgstr "Hætta í breytingum"
 
 msgid "Exit network wizard"
-msgstr ""
+msgstr "Hætta í netkerfis álfi"
 
 msgid "Exit the cleanup wizard"
 msgstr "Hætta ú hreinsi álfi"
@@ -1719,11 +1695,8 @@ msgstr "Búið að endurræsa netkerfið"
 msgid "Finnish"
 msgstr "Finnska"
 
-msgid ""
-"First we need to download the latest boot environment for the USB flasher."
-msgstr ""
-"Fyrst þarf að hala niður nýjustu uppfærslum til að búa til keyranlegan USB "
-"Staut. "
+msgid "First we need to download the latest boot environment for the USB flasher."
+msgstr "Fyrst þarf að hala niður nýjustu uppfærslum til að búa til keyranlegan USB Staut. "
 
 msgid "Flash"
 msgstr "Forritun"
@@ -1824,7 +1797,7 @@ msgid "Greek"
 msgstr "Gríska"
 
 msgid "Green boost"
-msgstr ""
+msgstr "Auka grænan"
 
 msgid "Guard Interval"
 msgstr "Guard Interval"
@@ -1845,7 +1818,7 @@ msgid "Hidden network SSID"
 msgstr "Falið netkerfis SSID"
 
 msgid "Hidden networkname"
-msgstr ""
+msgstr "Fela net á neti"
 
 msgid "Hierarchy Information"
 msgstr "Stigskipta upplýsingar"
@@ -1866,7 +1839,7 @@ msgid "How to handle found crashlogs?"
 msgstr "Hvað skal gera við hrunskýrslur?"
 
 msgid "Hue"
-msgstr ""
+msgstr "Litatónn"
 
 msgid "Hungarian"
 msgstr "Ungverska"
@@ -1894,21 +1867,12 @@ msgstr ""
 "tengingunni.Ýttu á OK til að fara til baka."
 
 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 ""
-"Ef sjónvarpið þitt hefur skerpu aukningu (contrast enhancement), slökktu þá "
-"á því. Ef það er með eitthvað kallað \"dynamic\", settu það þá á Standard "
-"eða Normal. Stilltu birtu baklýsingar eins og þér finnst best. Minnkaðu "
-"skerpu (contrast) stillingu sjónvarpsins eins mikið og hægt er en vertu samt "
-"viss um að rétt sjá dekkstu tvo grátónana.\n"
+"Ef sjónvarpið þitt hefur skerpu aukningu (contrast enhancement), slökktu þá á því. Ef það er með eitthvað kallað \"dynamic\", settu það þá á Standard eða Normal. Stilltu birtu baklýsingar eins og þér finnst best. Minnkaðu skerpu (contrast) stillingu sjónvarpsins eins mikið og hægt er en vertu samt viss um að rétt sjá dekkstu tvo grátónana.\n"
 "Ekki hafa áhyggjur af björtum svæðum núna. Þeir verða stilltir næst.\n"
 "Ef stillingin er orðin eins og þér finnst best ýttu þá á OK."
 
@@ -1921,10 +1885,8 @@ msgstr "Uppfærsla stýrikerfi"
 msgid "In Progress"
 msgstr "Í vinnslu"
 
-msgid ""
-"In order to record a timer, the TV was switched to the recording service!\n"
-msgstr ""
-"Til að taka upp á tíma stillingu þá var sjónvarpið stillt á upptökurás!\n"
+msgid "In order to record a timer, the TV was switched to the recording service!\n"
+msgstr "Til að taka upp á tíma stillingu þá var sjónvarpið stillt á upptökurás!\n"
 
 msgid "Include your email and name (optional) in the mail?"
 msgstr "Senda með netfang þinn og nafn (aukalega) í póstinum?"
@@ -1936,7 +1898,7 @@ msgid "Index"
 msgstr "Yfirlit"
 
 msgid "Info"
-msgstr ""
+msgstr "Upplýsingar"
 
 msgid "InfoBar"
 msgstr "Upplýsingar"
@@ -1975,10 +1937,10 @@ msgid "Install a new image with your web browser"
 msgstr "Setja inn nýtt stýrikerfi með vafra"
 
 msgid "Install extensions."
-msgstr ""
+msgstr "Setja inn innskot."
 
 msgid "Install local extension"
-msgstr ""
+msgstr "Setja inn innskot af boxi"
 
 msgid "Install or remove finished."
 msgstr "Innsetning eða fjarlæging tókst."
@@ -2050,7 +2012,8 @@ msgstr "Ítalska"
 msgid "Job View"
 msgstr "Skoða vinnslu"
 
-#. 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 full mynd"
 
@@ -2084,11 +2047,11 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Val tungumáls"
 
-msgid "Language..."
-msgstr "Tungumál..."
+msgid "Language"
+msgstr "Tungumál"
 
 msgid "Last config"
-msgstr ""
+msgstr "Síðasta stilling"
 
 msgid "Last speed"
 msgstr "Síðasti hraði"
@@ -2105,7 +2068,8 @@ msgstr "Hætta í DVD spilara?"
 msgid "Left"
 msgstr "Vinstri"
 
-#. 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"
 
@@ -2125,7 +2089,7 @@ msgid "Limits on"
 msgstr "Mörk á"
 
 msgid "Link Quality:"
-msgstr ""
+msgstr "Gæði tengingar:"
 
 msgid "Link:"
 msgstr "Hnappur:"
@@ -2257,7 +2221,7 @@ msgid "Monday"
 msgstr "Mánudagur"
 
 msgid "Mosquito noise reduction"
-msgstr ""
+msgstr "Mosquito suð deyfing"
 
 msgid "Mount failed"
 msgstr "Tenging tókst ekki"
@@ -2345,7 +2309,7 @@ msgid "Network Setup"
 msgstr "Stilla netkerfi"
 
 msgid "Network Wizard"
-msgstr ""
+msgstr "Netkerfis álfur"
 
 msgid "Network scan"
 msgstr "Leita netkerfið allt"
@@ -2390,7 +2354,7 @@ msgid "No 50 Hz, sorry. :("
 msgstr "Ekki 50 Hz, því miður. :("
 
 msgid "No Connection"
-msgstr ""
+msgstr "Engin tenging"
 
 msgid "No HDD found or HDD not initialized!"
 msgstr "Fann ekki harðan disk eða hann ekki formaður!"
@@ -2420,9 +2384,7 @@ msgstr "Engar skrár fundust á þessu tæki!"
 msgid "No event info found, recording indefinitely."
 msgstr "Engar upplýsingar um atriði fundust, tek upp endalaust."
 
-msgid ""
-"No fast winding possible yet.. but you can use the number buttons to skip "
-"forward/backward!"
+msgid "No fast winding possible yet.. but you can use the number buttons to skip forward/backward!"
 msgstr ""
 
 msgid "No free tuner!"
@@ -2432,12 +2394,10 @@ msgid "No network connection available."
 msgstr ""
 
 msgid "No networks found"
-msgstr ""
+msgstr "Ekkert netkerfi fannst"
 
-msgid ""
-"No packages were upgraded yet. So you can check your network and try again."
-msgstr ""
-"Enginn hugbúnaðar pakki uppfærður enn. Athugðu netkerfi og reyndu aftur."
+msgid "No packages were upgraded yet. So you can check your network and try again."
+msgstr "Enginn hugbúnaðar pakki uppfærður enn. Athugðu netkerfi og reyndu aftur."
 
 msgid "No picture on TV? Press EXIT and retry."
 msgstr "Engin mynd á skjánum? Ýttu á EXIT og prófaðu aftur."
@@ -2486,33 +2446,28 @@ msgstr ""
 "Ef þú svarar \"Nei\" þá er engin læsing virk."
 
 msgid "No wireless networks found! Please refresh."
-msgstr ""
+msgstr "Það fannst ekkert þráðlaust net! Reyndu aftur."
 
 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 ""
 "Ekkert virkt netkort fannst.\n"
 "Athugaðu hvort að það sé tengdur netkapallinn og netið sé rétt stillt."
 
 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 ""
 "Ekkert virkt þráðlaust netkort fannst.\n"
-"Athugaðu hvort að það sé tengt samhæft þráðlaust netkort og að það sé rétt "
-"stillt."
+"Athugaðu hvort að það sé tengt samhæft þráðlaust netkort og að það sé rétt stillt."
 
 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 ""
 "Ekkert virkt þráðlaust netkort fannst.\n"
-" Athugaðu hvort að það sé tengt samhæft þráðlaust netkort eða athugaðu með "
-"stillingar á því."
+" Athugaðu hvort að það sé tengt samhæft þráðlaust netkort eða athugaðu með stillingar á því."
 
 msgid "No, but restart from begin"
 msgstr "Nei, en byrja frá byrjun"
@@ -2535,7 +2490,8 @@ msgstr "Nei, aldrei senda þær"
 msgid "None"
 msgstr "Enginn"
 
-#. 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 "Teygð mynd"
 
@@ -2546,12 +2502,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 ""
-"Ekki nóg diskpláss. Taktu til á diskinum og reyndu aftur. (%d MB þarf, %d MB "
-"tiltæk)"
+msgid "Not enough diskspace. Please free up some diskspace and try again. (%d MB required, %d MB available)"
+msgstr "Ekki nóg diskpláss. Taktu til á diskinum og reyndu aftur. (%d MB þarf, %d MB tiltæk)"
 
 msgid ""
 "Nothing to scan!\n"
@@ -2563,14 +2515,8 @@ msgstr ""
 msgid "Now Playing"
 msgstr "Spila núna"
 
-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 ""
-"Notaðu núna skerpu (contrast) stillingar til að auka birtu bakgrunns eins "
-"mikið og hægt er en vertu samt viss um að sjá mun á björtustu tveim hlutum "
-"myndarinnar. Þegar þú hefur gert það ýttu þá á 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 "Notaðu núna skerpu (contrast) stillingar til að auka birtu bakgrunns eins mikið og hægt er en vertu samt viss um að sjá mun á björtustu tveim hlutum myndarinnar. Þegar þú hefur gert það ýttu þá á OK."
 
 msgid "OK"
 msgstr "OK"
@@ -2638,7 +2584,8 @@ msgstr "Hugbúnaðarpakka stjóri"
 msgid "Page"
 msgstr "Blaðsíða"
 
-#. 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"
 
@@ -2672,7 +2619,8 @@ msgstr "Uppsetning Mynd í Mynd"
 msgid "PicturePlayer"
 msgstr "Mynd spilari"
 
-#. 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"
 
@@ -2722,23 +2670,21 @@ msgid "Please choose the default services lists you want to install."
 msgstr "Vinsamlega veldu sjálfgefinn rásalista sem að þú vilt nota."
 
 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 ""
+"Ýttu á stilla eða að athugaðu Nafnaþjóns stillingar.\n"
+"Ýttu á OK þegar þú ert búinn."
 
 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 ""
+"Til að stilla nettengingu filltu þá út viðeigandi gildi.\n"
+"Ýttu þá á OK til að halda áfram."
 
-msgid ""
-"Please disconnect all USB devices from your Dreambox and (re-)attach the "
-"target USB stick (minimum size is 64 MB) now!"
-msgstr ""
-"Vinsamlegast aftengið all frá USB tengjum á Dreamboxinu þínu og tengið USB "
-"stautinn sem að þú ætlar að nota (minnst 64 MB) núna!"
+msgid "Please disconnect all USB devices from your Dreambox and (re-)attach the target USB stick (minimum size is 64 MB) now!"
+msgstr "Vinsamlegast aftengið all frá USB tengjum á Dreamboxinu þínu og tengið USB stautinn sem að þú ætlar að nota (minnst 64 MB) núna!"
 
 msgid "Please do not change any values unless you know what you are doing!"
 msgstr "Ekki breyta gildum ef þú veist ekki hvað þú ert að gera!"
@@ -2773,12 +2719,8 @@ msgstr "Sláðu inn nafn þitt hér (aukalega):"
 msgid "Please follow the instructions on the TV"
 msgstr "Fylgdu leiðbeiningum á skjá."
 
-msgid ""
-"Please note that the previously selected media could not be accessed and "
-"therefore the default directory is being used instead."
-msgstr ""
-"Vinsamlega athugið að áður valinn diskur er ekki tiltækur núna og þá verður "
-"notuð sjálfgefin mappa í staðinn."
+msgid "Please note that the previously selected media could not be accessed and therefore the default directory is being used instead."
+msgstr "Vinsamlega athugið að áður valinn diskur er ekki tiltækur núna og þá verður notuð sjálfgefin mappa í staðinn."
 
 msgid "Please press OK to continue."
 msgstr "Ýttu á OK til að halda áfram."
@@ -2820,17 +2762,22 @@ msgid "Please select the movie path..."
 msgstr "Veldu slóð að mynd..."
 
 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 ""
+"Veldu það netkort sem að þú vilt nota fyrir veraldarvefs tengingu.\n"
+"\n"
+"Ýttu á OK til að halda áfram."
 
 msgid ""
 "Please select the wireless network that you want to connect to.\n"
 "\n"
 "Please press OK to continue."
 msgstr ""
+"Vinsamlegast veldu það þráðlausa net sem að þú vilt tengjast.\n"
+"\n"
+"Ýttu á OK til að halda áfram."
 
 msgid "Please set up tuner B"
 msgstr "Vinsamlega settu upp móttakara B"
@@ -2850,12 +2797,8 @@ msgstr ""
 "Ýttu á Bouquet +/- til að breyta stærð á glugga.\n"
 "Ýttu á OK til að fara aftur í venjulega stillingu eða EXIT til að hætta við."
 
-msgid ""
-"Please use the UP and DOWN keys to select your language. Afterwards press "
-"the OK button."
-msgstr ""
-"Vinsamlega notið UP og NIÐUR takka til að velja tungumál. Ýttu svo á OK til "
-"að nota."
+msgid "Please use the UP and DOWN keys to select your language. Afterwards press the OK button."
+msgstr "Vinsamlega notið UP og NIÐUR takka til að velja tungumál. Ýttu svo á OK til að nota."
 
 msgid "Please wait for activation of your network configuration..."
 msgstr "Vinsamlega bíðið eftir virkjun á netkerfis stillingum..."
@@ -2873,10 +2816,10 @@ msgid "Please wait while we configure your network..."
 msgstr "Vinsamlega bíðið á meðan stilling fer fram á netkerfinu..."
 
 msgid "Please wait while we prepare your network interfaces..."
-msgstr ""
+msgstr "Vinsamlegast bíðið á meðan við stillum netkort..."
 
 msgid "Please wait while we test your network..."
-msgstr ""
+msgstr "Vinsamlega bíðið á meðan við prufum net tengingu..."
 
 msgid "Please wait while your network is restarting..."
 msgstr "Vinsamlega bíðið á meðan netkerfið er endurræst..."
@@ -2891,10 +2834,10 @@ msgid "Plugin browser"
 msgstr "Innskots leit"
 
 msgid "Plugin manager activity information"
-msgstr ""
+msgstr "Innskots stjóra aðgerða upplýsingar"
 
 msgid "Plugin manager help"
-msgstr ""
+msgstr "Innskots stjóra hjálp"
 
 msgid "Plugins"
 msgstr "Innskot"
@@ -2951,7 +2894,7 @@ msgid "Press OK on your remote control to continue."
 msgstr "Ýttu á OK á fjarstýringunni til að halda áfram."
 
 msgid "Press OK to activate the selected skin."
-msgstr ""
+msgstr "Ýttu á OK til að velja valið skinn."
 
 msgid "Press OK to activate the settings."
 msgstr "Ýtið á OK til að virkja stillingar."
@@ -2967,22 +2910,22 @@ msgid "Press OK to scan"
 msgstr "Ýtið á OK til að leita"
 
 msgid "Press OK to select a Provider."
-msgstr ""
+msgstr "Ýttu á OK til að velja sendanda."
 
 msgid "Press OK to select/deselect a CAId."
-msgstr ""
+msgstr "Ýttu á OK til að velja eða ekki velja CAId."
 
 msgid "Press OK to start the scan"
 msgstr "Ýtið á OK til að byrja að leita"
 
 msgid "Press OK to toggle the selection."
-msgstr ""
+msgstr "Ýttu á OK til að velja á milli."
 
 msgid "Press OK to view full changelog"
 msgstr "Ýttu á OK til að skoða breytingaskýrslu"
 
 msgid "Press yellow to set this interface as default interface."
-msgstr ""
+msgstr "Ýttu á gula til að hafa þetta netkort sem sjálfvalið."
 
 msgid "Prev"
 msgstr "Fyrri"
@@ -3179,10 +3122,10 @@ msgid "Reset and renumerate title names"
 msgstr "Endursetja og endurnúmera nöfn titla"
 
 msgid "Reset video enhancement settings to system defaults?"
-msgstr ""
+msgstr "Endursetja mynd stillingar á sjálfvaldar kerfis stillingar?"
 
 msgid "Reset video enhancement settings to your last configuration?"
-msgstr ""
+msgstr "Endursetja mynd bóta stillingar á síðast valdar stillingar?"
 
 msgid "Resolution"
 msgstr "Upplausn"
@@ -3209,10 +3152,10 @@ msgid "Restore"
 msgstr "Setja inn"
 
 msgid "Restore backups"
-msgstr ""
+msgstr "Setja inn afrit"
 
 msgid "Restore is running..."
-msgstr ""
+msgstr "Set inn afrit..."
 
 msgid "Restore running"
 msgstr "Innsetning afrita í gangi"
@@ -3220,11 +3163,8 @@ msgstr "Innsetning afrita í gangi"
 msgid "Restore system settings"
 msgstr "Setja inn kerfis stillingar"
 
-msgid ""
-"Restoring the settings is done. Please press OK to activate the restored "
-"settings now."
-msgstr ""
-"Innsetning stillinga er lokið. Ýtið á OK til að virkja innsettar stillingar."
+msgid "Restoring the settings is done. Please press OK to activate the restored settings now."
+msgstr "Innsetning stillinga er lokið. Ýtið á OK til að virkja innsettar stillingar."
 
 msgid "Resume from last position"
 msgstr "Halda áfram frá sama stað og síðast"
@@ -3276,7 +3216,7 @@ msgid "SNR:"
 msgstr "SNR:"
 
 msgid "SSID:"
-msgstr ""
+msgstr "SSID:"
 
 msgid "Sat"
 msgstr "Lau"
@@ -3303,7 +3243,7 @@ msgid "Satteliteequipment"
 msgstr "Gervihnattabúnaður"
 
 msgid "Saturation"
-msgstr ""
+msgstr "Lita mettun"
 
 msgid "Saturday"
 msgstr "Laugardagur"
@@ -3315,7 +3255,7 @@ msgid "Save Playlist"
 msgstr "Vista spilunarlista"
 
 msgid "Scaler sharpness"
-msgstr ""
+msgstr "Skölunar skerpa"
 
 msgid "Scaling Mode"
 msgstr "Kvörðunar aðferð"
@@ -3389,19 +3329,13 @@ msgstr "Leita á bandi US MID"
 msgid "Scan band US SUPER"
 msgstr "Leita á bandi US SUPER"
 
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"WLAN USB Stick\n"
-msgstr ""
-"Leita að þráðlausum netkerfum og tengjast þeim með þráðlausa USB netkortinu\n"
+msgid "Scan your network for wireless Access Points and connect to them using your WLAN USB Stick\n"
+msgstr "Leita að þráðlausum netkerfum og tengjast þeim með þráðlausa USB netkortinu\n"
 
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"selected wireless device.\n"
-msgstr ""
+msgid "Scan your network for wireless Access Points and connect to them using your selected wireless device.\n"
+msgstr "Leita að þráðlausu neti og tengja svo með völdu þráðlausu netkorti.\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 "Leita sjálfgefna gervihnetti, raðað eftir hnöttum með tengdum mótor"
 
 msgid "Search east"
@@ -3450,13 +3384,13 @@ msgid "Select files for backup. Currently selected:\n"
 msgstr "Veldu skrár fyrir afrit. Núþegar valið:\n"
 
 msgid "Select files/folders to backup"
-msgstr ""
+msgstr "Veldu skrár/möppur til afritunar"
 
 msgid "Select image"
 msgstr "Veldu stýrikerfi"
 
 msgid "Select interface"
-msgstr ""
+msgstr "Veldu netkort"
 
 msgid "Select package"
 msgstr "Veldu pakka"
@@ -3471,7 +3405,7 @@ msgid "Select service to add..."
 msgstr "Veldur rás til að bæta við..."
 
 msgid "Select upgrade source to edit."
-msgstr ""
+msgstr "Veldu upphafs slóð til að breyta."
 
 msgid "Select video input"
 msgstr "Veldu mynd inngang"
@@ -3483,7 +3417,7 @@ msgid "Select video mode"
 msgstr "Veldu mynd stillingu"
 
 msgid "Select wireless network"
-msgstr ""
+msgstr "Veldu þráðlaust net"
 
 msgid "Selected source image"
 msgstr "Veldu grunn stýrikerfi"
@@ -3555,7 +3489,7 @@ msgid "Set as default Interface"
 msgstr "Gera að sjálfgefnu netkorti"
 
 msgid "Set available internal memory threshold for the warning."
-msgstr ""
+msgstr "Stilla laus minnis mörk áður en viðvörun er gefin."
 
 msgid "Set interface as default Interface"
 msgstr "Gera að sjálfgefnu korti"
@@ -3573,7 +3507,7 @@ msgid "Setup Mode"
 msgstr "Uppsetninga hamur"
 
 msgid "Sharpness"
-msgstr ""
+msgstr "Skerpa"
 
 msgid "Show Info"
 msgstr "Sýna upplýsingar"
@@ -3618,10 +3552,10 @@ msgid "Shutdown Dreambox after"
 msgstr "Slökkva á móttakara eftir"
 
 msgid "Signal Strength:"
-msgstr ""
+msgstr "Styrkur merkis:"
 
 msgid "Signal: "
-msgstr ""
+msgstr "Merki:"
 
 msgid "Similar"
 msgstr "Svipað"
@@ -3651,7 +3585,7 @@ msgid "Singlestep (GOP)"
 msgstr "Eitt skref (GOP)"
 
 msgid "Skin"
-msgstr ""
+msgstr "Skinn"
 
 msgid "Skin..."
 msgstr "Skinn..."
@@ -3757,7 +3691,7 @@ msgid "Spanish"
 msgstr "Spænska"
 
 msgid "Split preview mode"
-msgstr ""
+msgstr "Skipta forsýn"
 
 msgid "Standby"
 msgstr "Biðstaða"
@@ -3858,7 +3792,8 @@ msgstr "Gagnahraði"
 msgid "System"
 msgstr "Kerfi"
 
-#. 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 ""
 "Dreifingaraðili á Íslandi:\n"
@@ -3914,6 +3849,8 @@ msgid ""
 "Thank you for using the wizard.\n"
 "Please press OK to continue."
 msgstr ""
+"Takk fyrir að nota álfinn.\n"
+"Ýttu á OK til að halda áfram."
 
 msgid ""
 "Thank you for using the wizard. Your box is now ready to use.\n"
@@ -3922,20 +3859,11 @@ msgstr ""
 "Takk fyrir að nota álfinn. Núna er móttakarinn tilbúinn til notkunar.\n"
 "Ýttu á OK til að byrja að nota móttakarann,"
 
-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 staðallinn er ekki með möguleika á H.264 (HDTV). Viltu búa til Dreambox "
-"gagna disk (sem ekki er hægt að venjulegum DVD spilara) í staðinn."
+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 staðallinn er ekki með möguleika á H.264 (HDTV). Viltu búa til Dreambox gagna disk (sem ekki er hægt að venjulegum DVD spilara) í staðinn."
 
-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 stauturinn er ræsanlegur núna. Viltu hlaða niður nýjasta stýrikerfninu "
-"frá vefþjóninum og vista það á stautinn?"
+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 stauturinn er ræsanlegur núna. Viltu hlaða niður nýjasta stýrikerfninu frá vefþjóninum og vista það á stautinn?"
 
 msgid "The backup failed. Please choose a different backup location."
 msgstr "Afritun mistókst. Veldu annan stað fyrir afritið."
@@ -3965,8 +3893,7 @@ msgstr "Eftirfarandi skrár fundust..."
 
 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 ""
 "Stilla þarf inngang núna.\n"
 "Þú getur stillt skjáinn með því að nota prufumyndir. Viltu gera það núna?"
@@ -3974,28 +3901,14 @@ msgstr ""
 msgid "The installation of the default services lists is finished."
 msgstr "Innsetning sjálfgefins rásalista er lokið."
 
-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 ""
-"Innsetning sjálfgefins rásalista er lokið. Þú getur nú haldið áfram að "
-"stilla Dreamboxið með því að ýta á OK takkann á fjarstýringunni."
+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 "Innsetning sjálfgefins rásalista er lokið. Þú getur nú haldið áfram að stilla Dreamboxið með því að ýta á OK takkann á fjarstýringunni."
 
-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 ""
-"Staðfesting md5sum tókst ekki, skráin gæti verið skemmd! Ertu viss um að þú "
-"viljir setja þetta stýrikerfi inn í minni? Það er ekki mælt með því að gera "
-"það!"
+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 "Staðfesting md5sum tókst ekki, skráin gæti verið skemmd! Ertu viss um að þú viljir setja þetta stýrikerfi inn í minni? Það er ekki mælt með því að gera það!"
 
-msgid ""
-"The md5sum validation failed, the file may be downloaded incompletely or be "
-"corrupted!"
-msgstr ""
-"Staðfesting md5sum tókst ekki, það gæti vantað hluta á skrána eða þá að hún "
-"sé skemmd!"
+msgid "The md5sum validation failed, the file may be downloaded incompletely or be corrupted!"
+msgstr "Staðfesting md5sum tókst ekki, það gæti vantað hluta á skrána eða þá að hún sé skemmd!"
 
 msgid "The package doesn't contain anything."
 msgstr "Þessi pakki inniheldur ekkert."
@@ -4033,6 +3946,8 @@ msgid ""
 "The wireless LAN plugin is not installed!\n"
 "Please install it and choose what you want to do next."
 msgstr ""
+"Forrit fyrir þráðlausa net ekki uppsett!\n"
+"Settu það inn og veldu hvað þú vilt gera næst."
 
 msgid ""
 "The wireless LAN plugin is not installed!\n"
@@ -4041,8 +3956,7 @@ msgstr ""
 "Þráðlausa netkortið er ekki tengt!\n"
 "Vinsamlega tengið það."
 
-msgid ""
-"The wizard can backup your current settings. Do you want to do a backup now?"
+msgid "The wizard can backup your current settings. Do you want to do a backup now?"
 msgstr "Álfurinn getur tekið afrit af stillingum þínum. Viltu taka afrit núna?"
 
 msgid "The wizard is finished now."
@@ -4083,26 +3997,14 @@ msgstr "Það varð villa. Pakkinn:"
 msgid "This .NFI file does not contain a valid %s image!"
 msgstr "Þessi .NFI skrá inniheldur ekki %s stýrikerfi í lagi!"
 
-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 ""
-"Þessi .NFI skrá er ekki með md5sum undirskrift og er ekki hægt að tryggja að "
-"hún virki. Viltu örugglega forrita hana inn í minni?"
+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 "Þessi .NFI skrá er ekki með md5sum undirskrift og er ekki hægt að tryggja að hún virki. Viltu örugglega forrita hana inn í minni?"
 
-msgid ""
-"This .NFI file has a valid md5 signature. Continue programming this image to "
-"flash memory?"
-msgstr ""
-"Þessi .NFI skrá er með gilda md5 undirskrift. Viltu halda áfram að forrita "
-"minni móttakarans með henni?"
+msgid "This .NFI file has a valid md5 signature. Continue programming this image to flash memory?"
+msgstr "Þessi .NFI skrá er með gilda md5 undirskrift. Viltu halda áfram að forrita minni móttakarans með henni?"
 
-msgid ""
-"This DVD RW medium is already formatted - reformatting will erase all "
-"content on the disc."
-msgstr ""
-"Þessi DVD RW diskur er þegar formaður - endurformun mun eyða öllum gögnum af "
-"honum."
+msgid "This DVD RW medium is already formatted - reformatting will erase all content on the disc."
+msgstr "Þessi DVD RW diskur er þegar formaður - endurformun mun eyða öllum gögnum af honum."
 
 #, python-format
 msgid "This Dreambox can't decode %s streams!"
@@ -4134,14 +4036,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 ""
 "Þessi prufun athugar stillingar nafnaþjóns.\n"
 "Ef þú færð \"óstaðfest\" skilaboð:\n"
 "- athugaðu DHCP þjónustu, tengingar og uppsetningu\n"
-"- ef að þú hefur sett upp nafnaþjón handvirkt athugaðu þá þínar nafnaþjóns "
-"stillingar."
+"- ef að þú hefur sett upp nafnaþjón handvirkt athugaðu þá þínar nafnaþjóns stillingar."
 
 msgid ""
 "This test checks whether a network cable is connected to your LAN-Adapter.\n"
@@ -4166,21 +4066,17 @@ msgstr ""
 "- athugaðu DHCP uppsetningu, tengingar eða uppsetningu nets"
 
 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 ""
-"Þessi prufun athugar hvort að netkortið þitt sé sett upp fyrir sjálfvirka "
-"úthlutun á IP tölu með DHCP þjón.\n"
+"Þessi prufun athugar hvort að netkortið þitt sé sett upp fyrir sjálfvirka úthlutun á IP tölu með DHCP þjón.\n"
 "Ef þú færð skilaboðiin \"óvirkt\":\n"
 "- þá er netkortið stillt fyrir handvirka IP uppsetningu\n"
-"- athugaðu hvort að þú hafir sett inn réttar IP uppsetngingar í stillingum "
-"netkorts\n"
+"- athugaðu hvort að þú hafir sett inn réttar IP uppsetngingar í stillingum netkorts\n"
 "Ef þú færð skilaboðin \"virkt\":\n"
 "- athugaðu hvort að það sé DHCP þjónn sem úthlutar IP tölum á innra neti þínu"
 
@@ -4271,17 +4167,13 @@ msgstr "Titla stillingar"
 
 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 ""
 "Til að uppfæra stýrikerfi Dreamboxins, fylgdu þá þessum leiðbeiningum:\n"
-"1) Slökktu á móttakaranum með rofanum aftaná og settu inn startanlega USB "
-"stautinn í USB tengið.\n"
-"2) Kveiktu á rofanum aftaná móttakaranum og haldu inni NIÐUR takkanum á "
-"framhlið móttakarans í 10 sekúndur eftir það.\n"
+"1) Slökktu á móttakaranum með rofanum aftaná og settu inn startanlega USB stautinn í USB tengið.\n"
+"2) Kveiktu á rofanum aftaná móttakaranum og haldu inni NIÐUR takkanum á framhlið móttakarans í 10 sekúndur eftir það.\n"
 "3) Bíðið eftir ræsingu og fylgdu leiðbeiningunum á skjánum."
 
 msgid "Today"
@@ -4428,7 +4320,7 @@ msgid "Unmount failed"
 msgstr "Aftenging tókst ekki"
 
 msgid "Unsupported"
-msgstr ""
+msgstr "Ekki stutt"
 
 msgid "Update"
 msgstr "Uppfæra"
@@ -4490,16 +4382,14 @@ msgstr ""
 "\n"
 "Vinsamlega settu upp móttakara A"
 
-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 "Ýttu á up/niður takka á fjarstýringu til að velja. Ýttu svo á OK."
 
 msgid "Use this video enhancement settings?"
-msgstr ""
+msgstr "Nota mynd endurbóta stillingar?"
 
 msgid "Use time of currently running service"
-msgstr ""
+msgstr "Nota tíma nú keyrandi þjónustu"
 
 msgid "Use usals for this sat"
 msgstr "Nota usals fyrir þennan hnött"
@@ -4541,19 +4431,18 @@ msgid "Video Wizard"
 msgstr "Mynd álfur"
 
 msgid "Video enhancement preview"
-msgstr ""
+msgstr "Mynd endurbóta forsýn"
 
 msgid "Video enhancement settings"
-msgstr ""
+msgstr "Mynd endurbóta stillingar"
 
 msgid "Video enhancement setup"
-msgstr ""
+msgstr "Mynd endurbóta uppsetnging"
 
 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 ""
@@ -4567,7 +4456,7 @@ msgid "Video mode selection."
 msgstr "Mynd hams stilling."
 
 msgid "Videoenhancement Setup"
-msgstr ""
+msgstr "Mynd endurbóta uppsetning"
 
 msgid "View Movies..."
 msgstr "Skoða bíómyndir..."
@@ -4657,16 +4546,13 @@ msgid "Waiting"
 msgstr "Bíð"
 
 msgid "Warn if free space drops below (kB):"
-msgstr ""
+msgstr "Vara við ef að laust minni fer niður fyrir (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ð munum nú prufa hvort að sjónvarpið þitt getur einnig sýnt þessa upplaust "
-"með 50 Hz. Ef að skjárinn verður svartur, hinkraðu við í 20 sekúndur og þá "
-"breytist hann aftur.\n"
+"Við munum nú prufa hvort að sjónvarpið þitt getur einnig sýnt þessa upplaust með 50 Hz. Ef að skjárinn verður svartur, hinkraðu við í 20 sekúndur og þá breytist hann aftur.\n"
 "Ýttu á OK til að byrja."
 
 msgid "Wed"
@@ -4681,45 +4567,44 @@ msgstr "Vikudagur"
 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 ""
 "Velkominn í klippinga stjórann.\n"
 "\n"
-"Farðu að byrjun á því sem að þú ætlar að klippa. Ýttu á OK og veldu 'byrja "
-"klippingu'.\n"
+"Farðu að byrjun á því sem að þú ætlar að klippa. Ýttu á OK og veldu 'byrja klippingu'.\n"
 "\n"
-"Farðu þá að enda þess og ýttu á OK, veldu 'enda klippingu'. Það er allt og "
-"sumt."
+"Farðu þá að enda þess og ýttu á OK, veldu 'enda klippingu'. Það er allt og sumt."
 
-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 ""
-"Velkominn til stýrikerfis uppfærslu álfinn. Álfurinn aðstoðar þig við að "
-"uppfæra stýrikerfi Dreamboxins með því að sjá um afritun af þínum stillingum "
-"og sýnir svo hverning uppfærslan fer fram."
+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 "Velkominn til stýrikerfis uppfærslu álfinn. Álfurinn aðstoðar þig við að uppfæra stýrikerfi Dreamboxins með því að sjá um afritun af þínum stillingum og sýnir svo hverning uppfærslan fer fram."
 
 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 ""
+"Velkomin í hreinsunar álfinn.\n"
+"\n"
+"Tekið var eftir að laust minni er komið niður fyrir 2MB.\n"
+"Til að tryggja stoðuga notkun á Drauma boxinu þá þarf að taka til í minninu.\n"
+"Þú getur notað álfinn til að taka út auka forrit.\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 ""
+"Velkomin (n).\n"
+"\n"
+"Ef þú vilt tengja Draumaboxið við veraldarvefinn þá getur þessi álfur hjálpað þér að setja upp grunnstillingar til þess.\n"
+"\n"
+"Ýttu á OK til að byrja stillingar á netkortinu"
 
 msgid ""
 "Welcome.\n"
@@ -4747,15 +4632,13 @@ msgstr "Hvað skal gera við innsendar hrunskýrslur?"
 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 ""
 "Þegar þú velur verksmiðju stillingu þá missir þú út ALLAR stillingar\n"
 "(þar með talið rásavendi, rásir, gervihnattaupplýsingar...)\n"
-"Eftir að búið er að setja inn verksmiðju stillingar þá mun móttakarinn "
-"endurræsa sig.\n"
+"Eftir að búið er að setja inn verksmiðju stillingar þá mun móttakarinn endurræsa sig.\n"
 "Ertu viss um að þú viljir setja inn verksmiðju stillingar?"
 
 msgid "Where do you want to backup your settings?"
@@ -4768,13 +4651,13 @@ msgid "Wireless"
 msgstr "Þráðlaust"
 
 msgid "Wireless LAN"
-msgstr ""
+msgstr "­Þráðlaust net"
 
 msgid "Wireless Network"
 msgstr "Þráðlaust netkerfi"
 
 msgid "Wireless Network State"
-msgstr ""
+msgstr "Staða þráðlausa nets"
 
 msgid "Write error while recording. Disk full?\n"
 msgstr "Villla við upptöku. Diskur fullur?\n"
@@ -4833,12 +4716,8 @@ msgstr "Þú getur hætt við uppsetninguna."
 msgid "You can cancel the removal."
 msgstr "Þú getur hætt við að fjarlægja."
 
-msgid ""
-"You can choose some default settings now. Please select the settings you "
-"want to be installed."
-msgstr ""
-"Þú getur valið sjálfgefnar stillingar núna. Vinsamlega veldu stillignar sem "
-"að þú vilt setja inn."
+msgid "You can choose some default settings now. Please select the settings you want to be installed."
+msgstr "Þú getur valið sjálfgefnar stillingar núna. Vinsamlega veldu stillignar sem að þú vilt setja inn."
 
 msgid "You can choose, what you want to install..."
 msgstr "Þú getur valið það sem að þú vilt setja inn..."
@@ -4858,88 +4737,51 @@ msgstr "Þú getur ekki eytt þessu!"
 msgid "You chose not to install any default services lists."
 msgstr "Þú valdir að setja ekki inn neinar sjálfgefnar stillingar."
 
-msgid ""
-"You chose not to install any default settings. You can however install the "
-"default settings later in the settings menu."
-msgstr ""
-"Þú valdir ekki að setja inn neinar sjálfgefnar stillingar. Þú getur "
-"hinsvegar valið að setja inn seinna þessar stillingar."
+msgid "You chose not to install any default settings. You can however install the default settings later in the settings menu."
+msgstr "Þú valdir ekki að setja inn neinar sjálfgefnar stillingar. Þú getur hinsvegar valið að setja inn seinna þessar stillingar."
 
-msgid ""
-"You chose not to install anything. Please press OK finish the install wizard."
-msgstr ""
-"Þú valdir ekki að setja in neitt. Vinsamlega ýttu á OK til að ljúka álfi."
+msgid "You chose not to install anything. Please press OK finish the install wizard."
+msgstr "Þú valdir ekki að setja in neitt. Vinsamlega ýttu á OK til að ljúka álfi."
 
-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 ""
-"Þú ert ekki með harðan disk í boxinu svo að afritun á harðan disk er ekki "
-"möguleg fyrir þig."
+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 "Þú ert ekki með harðan disk í boxinu svo að afritun á harðan disk er ekki möguleg fyrir þig."
 
 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 ""
-"Þú hefur kosið að senda afritið á compact flash kort. Kortið verður að vera "
-"í raufinni. Við skoðum ekki hvort að það sé notað núna. Betra er að senda "
-"afritið á harða diskinn!\n"
+"Þú hefur kosið að senda afritið á compact flash kort. Kortið verður að vera í raufinni. Við skoðum ekki hvort að það sé notað núna. Betra er að senda afritið á harða diskinn!\n"
 "Ýttu á OK til að byrja afritunina núna."
 
 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 ""
-"Þú hefur valið að taka afrit á USB staut. Það er betra að taka afrit á harða "
-"diskinn!\n"
+"Þú hefur valið að taka afrit á USB staut. Það er betra að taka afrit á harða diskinn!\n"
 "Ýttu á OK til að byrja afritun núna."
 
-msgid ""
-"You have chosen to backup to your harddisk. Please press OK to start the "
-"backup now."
-msgstr ""
-"Þú hefur valið að senda afritið á harða diskinn. Ýttu á OK til að byrja "
-"afritunina núna."
+msgid "You have chosen to backup to your harddisk. Please press OK to start the backup now."
+msgstr "Þú hefur valið að senda afritið á harða diskinn. Ýttu á OK til að byrja afritunina núna."
 
-msgid ""
-"You have chosen to backup your settings. Please press OK to start the backup "
-"now."
-msgstr ""
-"Þú hefur valið að taka afrit af stillingum þínum. Ýttu á OK til að byrja að "
-"taka afrit núna."
+msgid "You have chosen to backup your settings. Please press OK to start the backup now."
+msgstr "Þú hefur valið að taka afrit af stillingum þínum. Ýttu á OK til að byrja að taka afrit núna."
 
-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 ""
-"Þú hefur valið að búa til nýjan keyranlegan .NFI USB staut. Þetta veldur því "
-"að öllum gögnum af USB stautum verður eytt."
+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 "Þú hefur valið að búa til nýjan keyranlegan .NFI USB staut. Þetta veldur því að öllum gögnum af USB stautum verður eytt."
 
-msgid ""
-"You have chosen to restore your settings. Enigma2 will restart after "
-"restore. Please press OK to start the restore now."
-msgstr ""
-"Þú hefur valið að setja inn eldra afrit. Enigma2 mun endurræsa eftir "
-"innsetningu. Ýttu á OK til að byrja að setja inn afritið núna."
+msgid "You have chosen to restore your settings. Enigma2 will restart after restore. Please press OK to start the restore now."
+msgstr "Þú hefur valið að setja inn eldra afrit. Enigma2 mun endurræsa eftir innsetningu. Ýttu á OK til að byrja að setja inn afritið núna."
 
 #, python-format
 msgid "You have to wait %s!"
 msgstr "Þú þarf að bíða %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."
-msgstr ""
-"Þú þarft að hafa tölvu tengda við dreamboxið. Ef þú þarft nánari upplýsingar "
-"þá skoðaðu síðuna http://www.dm7025.de.\n"
-"Dreamboxið verður núna stoppað. Eftir að þú hefur uppfært samkvæmt "
-"leiðbeinungunum á síðunni þá mun nýja stýrikerfið biðja þig um að setja "
-"aftur inn afritið."
+"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 ""
+"Þú þarft að hafa tölvu tengda við dreamboxið. Ef þú þarft nánari upplýsingar þá skoðaðu síðuna http://www.dm7025.de.\n"
+"Dreamboxið verður núna stoppað. Eftir að þú hefur uppfært samkvæmt leiðbeinungunum á síðunni þá mun nýja stýrikerfið biðja þig um að setja aftur inn afritið."
 
 msgid ""
 "You need to set a pin code and hide it from your children.\n"
@@ -4964,32 +4806,28 @@ msgid ""
 "\n"
 "Please press OK to continue."
 msgstr ""
+"Dreamboxið þitt er tilbúið til notkunar.\n"
+"\n"
+"Veraldarvefs tengingu er komið á.\n"
+"\n"
+"Ýttu á OK til að halda áfram."
 
 msgid "Your Dreambox will restart after pressing OK on your remote control."
-msgstr ""
-"Dreamboxið þitt mun endurræsa sig eftir að þú ýtir á OK á fjarstýringunni."
+msgstr "Dreamboxið þitt mun endurræsa sig eftir að þú ýtir á OK á fjarstýringunni."
 
 msgid "Your TV works with 50 Hz. Good!"
 msgstr "Sjónvarpið þitt virkar á 50 Hz. Gott mál!"
 
-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 "Það tókst að taka afrit. Nú höldum við áfram með uppfærsluna."
 
-msgid ""
-"Your collection exceeds the size of a single layer medium, you will need a "
-"blank dual layer DVD!"
-msgstr ""
-"Safn þitt er of stórt fyrir disk með einfalt lag. Þú þarft tóman disk með "
-"tveim lögum."
+msgid "Your collection exceeds the size of a single layer medium, you will need a blank dual layer DVD!"
+msgstr "Safn þitt er of stórt fyrir disk með einfalt lag. Þú þarft tóman disk með tveim lögum."
 
 msgid "Your dreambox is shutting down. Please stand by..."
 msgstr "Dreamboxið er að slökkva á sér. Vinsamlega bíðið..."
 
-msgid ""
-"Your dreambox isn't connected to the internet properly. Please check it and "
-"try again."
+msgid "Your dreambox isn't connected to the internet properly. Please check it and try again."
 msgstr "Dreamboxið er ekki tengt við internetið. Athugaðu það og reyndu aftur."
 
 msgid "Your email address:"
@@ -5006,6 +4844,8 @@ msgid ""
 "Your internet connection is not working!\n"
 "Please choose what you want to do next."
 msgstr ""
+"Veraldarvefs tenging virkar ekki!\n"
+"Vinsamlega veldu hvað þú vilt gera næst."
 
 msgid "Your name (optional):"
 msgstr "Nafn þitt (aukalega):"
@@ -5030,6 +4870,10 @@ msgid ""
 "\n"
 "Please choose what you want to do next."
 msgstr ""
+"Það tókst ekki að ræsa þráðlausu net tenginguna þína!\n"
+"Ertu búinn að tengja þráðlausa USB stautinn?\n"
+"\n"
+"Vinsamlega veldu hvað þú vilt gera næst."
 
 msgid "Zap back to service before positioner setup?"
 msgstr "Fara aftur á rás fyrir stillingu á mótorstýringu?"
@@ -5050,13 +4894,10 @@ msgid "[move mode]"
 msgstr "[færslu staða]"
 
 msgid "a gui to assign services/providers to common interface modules"
-msgstr ""
-"viðmót til að tengja rásir/sendendur við afruglara í tengi fyrir afruglara"
+msgstr "viðmót til að tengja rásir/sendendur við afruglara í tengi fyrir afruglara"
 
 msgid "a gui to assign services/providers/caids to common interface modules"
-msgstr ""
-"viðmót til að tengja rásir/sendendur/caid við afruglara í tengi fyrir "
-"afruglara"
+msgstr "viðmót til að tengja rásir/sendendur/caid við afruglara í tengi fyrir afruglara"
 
 msgid "abort alternatives edit"
 msgstr "hætta við að breyta valkostum"
@@ -5144,13 +4985,13 @@ msgid "assigned CAIds"
 msgstr "tengja við CAIds"
 
 msgid "assigned CAIds:"
-msgstr ""
+msgstr "úthlutað CAIds:"
 
 msgid "assigned Services/Provider"
 msgstr "tengja við rásir/sendanda"
 
 msgid "assigned Services/Provider:"
-msgstr ""
+msgstr "úthlutaðar rásir/sendendur:"
 
 #, python-format
 msgid "audio track (%s) format"
@@ -5324,7 +5165,7 @@ msgid "enigma2 and network"
 msgstr "enigma2 og netkerfi"
 
 msgid "enter hidden network SSID"
-msgstr ""
+msgstr "sláðu inn SSID falins netkerfis"
 
 msgid "equal to"
 msgstr "jafnt og"
@@ -5545,7 +5386,7 @@ msgid "no HDD found"
 msgstr "fann ekki harða disk"
 
 msgid "no Services/Providers selected"
-msgstr ""
+msgstr "engar rásir/sendar valdir"
 
 msgid "no module found"
 msgstr "fann ekki einingu"
@@ -5885,7 +5726,7 @@ msgid "toggle time, chapter, audio, subtitle info"
 msgstr "skipta á milli tíma, kafla, undirtexta upplýsingar"
 
 msgid "unavailable"
-msgstr ""
+msgstr "ekki tiltækt"
 
 msgid "unconfirmed"
 msgstr "óstaðfest"
@@ -5941,12 +5782,8 @@ msgstr "já"
 msgid "yes (keep feeds)"
 msgstr "já (halda fæðirásum)"
 
-msgid ""
-"your dreambox might be unusable now. Please consult the manual for further "
-"assistance before rebooting your dreambox."
-msgstr ""
-"Dreamboxið þitt gæti verið óstöðugt núna.  Athugaðu leiðbeiningar um aðstoð "
-"með að endurræsa Dreamboxið."
+msgid "your dreambox might be unusable now. Please consult the manual for further assistance before rebooting your dreambox."
+msgstr "Dreamboxið þitt gæti verið óstöðugt núna.  Athugaðu leiðbeiningar um aðstoð með að endurræsa Dreamboxið."
 
 msgid "zap"
 msgstr "stökk"
@@ -6226,9 +6063,6 @@ msgstr "stokkið"
 #~ msgid "LCD Setup"
 #~ msgstr "LCD uppsetning"
 
-#~ msgid "Language"
-#~ msgstr "Tungumál"
-
 #~ msgid "Lets you view/edit files in your Dreambox"
 #~ msgstr "Leyfir skoðun/breytingu á skrám Dreaboxins þíns"
 
@@ -6249,30 +6083,24 @@ msgstr "stokkið"
 
 #~ 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 ""
 #~ "Engin nothæf nettenging fannst.\n"
-#~ "Vinsamlega athugið hvort að netsnúra sé tengd og að stillingar netkerfis "
-#~ "séu réttar."
+#~ "Vinsamlega athugið hvort að netsnúra sé tengd og að stillingar netkerfis séu réttar."
 
 #~ 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 ""
 #~ "Engin nothæf þráðlaus nettenging fannst.\n"
-#~ "Vinsamlega athugið hvort að það sé tengt þráðlaust netkort eða athugaðu "
-#~ "stillingar þínar."
+#~ "Vinsamlega athugið hvort að það sé tengt þráðlaust netkort eða athugaðu stillingar þínar."
 
 #~ 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 ""
 #~ "Engin nothæf þráðlaus nettenging fannst.\n"
-#~ "Vinsamlega athugið hvort að það sé tengt þráðlaust USB netkort eða "
-#~ "athugaðu stillingar þínar."
+#~ "Vinsamlega athugið hvort að það sé tengt þráðlaust USB netkort eða athugaðu stillingar þínar."
 
 #~ msgid "No, send them never."
 #~ msgstr "Nei, aldrei senda þær."
@@ -6280,14 +6108,8 @@ msgstr "stokkið"
 #~ msgid "Nothing connected"
 #~ msgstr "Ekkert tengt"
 
-#~ 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 ""
-#~ "Tengdu núna USB stautinn (minnsta stærð er 64 MB) sem að þú vilt nota "
-#~ "fyrir keyranlegar USB stýrikerfi. Ýttu á OK þegar þú ert búinn að setja "
-#~ "hann í samband."
+#~ 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 "Tengdu núna USB stautinn (minnsta stærð er 64 MB) sem að þú vilt nota fyrir keyranlegar USB stýrikerfi. Ýttu á OK þegar þú ert búinn að setja hann í samband."
 
 #~ msgid "Other..."
 #~ msgstr "Annað..."
@@ -6331,41 +6153,23 @@ msgstr "stokkið"
 #~ msgid "Record Splitsize"
 #~ msgstr "Stærð upptökuhluta"
 
-#~ 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 "Upptaka byrjar eftir smástund... viltu virkilega endurræsa núna?"
 
-#~ 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 "Upptaka byrjar eftir smástund... viltu virkilega endurræsa núna?"
 
-#~ 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 "Upptaka byrjar eftir smástund... viltu virkilega slökkva núna?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or comming up in few seconds... really "
-#~ "reboot now?"
-#~ msgstr ""
-#~ "Upptaka er í gangi eða fljótlega fyrirhuguð... viltu virkilega endurræsa "
-#~ "núna?"
+#~ msgid "Recording(s) are in progress or comming up in few seconds... really reboot now?"
+#~ msgstr "Upptaka er í gangi eða fljótlega fyrirhuguð... viltu virkilega endurræsa núna?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or comming up in few seconds... really "
-#~ "restart now?"
-#~ msgstr ""
-#~ "Upptaka er í gangi eða fljótlega fyrirhuguð... viltu virkilega endurræsa "
-#~ "núna?"
+#~ msgid "Recording(s) are in progress or comming up in few seconds... really restart now?"
+#~ msgstr "Upptaka er í gangi eða fljótlega fyrirhuguð... viltu virkilega endurræsa núna?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or comming up in few seconds... really "
-#~ "shutdown now?"
-#~ msgstr ""
-#~ "Upptaka er í gangi eða fljótlega fyrirhuguð... viltu virkilega slökkva "
-#~ "núna?"
+#~ msgid "Recording(s) are in progress or comming up in few seconds... really shutdown now?"
+#~ msgstr "Upptaka er í gangi eða fljótlega fyrirhuguð... viltu virkilega slökkva núna?"
 
 #~ msgid "Remember service pin"
 #~ msgstr "Muna kóða fyrir rásir"
@@ -6448,16 +6252,8 @@ msgstr "stokkið"
 #~ msgid "Swap services"
 #~ msgstr "Skipta á milli rása"
 
-#~ 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 stýrikerfis stautur er nú tilbúinn til notkunar. Nú getur þú hlaðið "
-#~ "niður .NFI stýrikerfi frá strauma vefþjón og vistað það á stautnum. Þá "
-#~ "getur þú endurræst og með því að halda niður 'Niður' takka framaná "
-#~ "móttakaranum þá getur þú valið stýrikerfi frá stautnum!"
+#~ 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 stýrikerfis stautur er nú tilbúinn til notkunar. Nú getur þú hlaðið niður .NFI stýrikerfi frá strauma vefþjón og vistað það á stautnum. Þá getur þú endurræst og með því að halda niður 'Niður' takka framaná móttakaranum þá getur þú valið stýrikerfi frá stautnum!"
 
 #~ msgid "The sleep timer has been acitvated."
 #~ msgstr "Tímastilling fyrir biðstöðu er virkur."
@@ -6468,14 +6264,8 @@ msgstr "stokkið"
 #~ msgid "Title:"
 #~ msgstr "Titill:"
 
-#~ 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 ""
-#~ "Til að vera viss um að þú viljir gera þetta þá átt þú að taka USB "
-#~ "stautinn úr sambandi og tengja hann aftur þegar þú ert beðinn um það. "
-#~ "Ýttu á OK þegar þú er búinn að taka hann úr sambandi."
+#~ 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 "Til að vera viss um að þú viljir gera þetta þá átt þú að taka USB stautinn úr sambandi og tengja hann aftur þegar þú ert beðinn um það. Ýttu á OK þegar þú er búinn að taka hann úr sambandi."
 
 #~ msgid "Transpondertype"
 #~ msgstr "Gerð sendis"
index f005604..57250b9 100755 (executable)
--- a/po/it.po
+++ b/po/it.po
@@ -2056,8 +2056,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Selezione lingua"
 
-msgid "Language..."
-msgstr "Lingua..."
+msgid "Language"
+msgstr "Lingua"
 
 msgid "Last config"
 msgstr "Ult. config."
index e9e6578..6e984b2 100755 (executable)
--- a/po/lt.po
+++ b/po/lt.po
@@ -2053,8 +2053,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Kalbos pasirinkimas"
 
-msgid "Language..."
-msgstr "Kalba..."
+msgid "Language"
+msgstr "Kalba"
 
 msgid "Last config"
 msgstr "Paskutinis config"
@@ -6309,9 +6309,6 @@ msgstr "įjungta"
 #~ msgid "Jump to video title 1 (play movie from start)"
 #~ msgstr "Šuolis į vaizdo pavadinimą 1 (rodo kino filmą nuo pradžios)"
 
-#~ msgid "Language"
-#~ msgstr "Kalba"
-
 #~ msgid "Language Selection"
 #~ msgstr "Kalbos pasirinkimas"
 
index 1d7f82d..4ff1880 100755 (executable)
--- a/po/lv.po
+++ b/po/lv.po
@@ -2096,8 +2096,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Valodas izvēle"
 
-msgid "Language..."
-msgstr "Valoda..."
+msgid "Language"
+msgstr "Valoda"
 
 msgid "Last config"
 msgstr ""
index 4c7b0b8..e27caa5 100755 (executable)
--- a/po/nl.po
+++ b/po/nl.po
@@ -2054,8 +2054,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Taalkeuze"
 
-msgid "Language..."
-msgstr "Taal..."
+msgid "Language"
+msgstr "Taal"
 
 msgid "Last config"
 msgstr "Laatste config"
index 688538d..b1996d6 100755 (executable)
--- a/po/no.po
+++ b/po/no.po
@@ -2034,8 +2034,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Språkvalg"
 
-msgid "Language..."
-msgstr "Språk..."
+msgid "Language"
+msgstr "Språk"
 
 msgid "Last config"
 msgstr ""
@@ -6000,9 +6000,6 @@ msgstr "zapped"
 #~ msgid "LCD Setup"
 #~ msgstr "LCD Instillinger"
 
-#~ msgid "Language"
-#~ msgstr "Språk"
-
 #~ msgid "Loopthrough to Socket A"
 #~ msgstr "Koblet med Tuner A"
 
index 06ebe1a..f90c496 100755 (executable)
--- a/po/pl.po
+++ b/po/pl.po
@@ -2089,8 +2089,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Wybór języka"
 
-msgid "Language..."
-msgstr "Język..."
+msgid "Language"
+msgstr "Język"
 
 msgid "Last config"
 msgstr "Ostatnie ust"
index fb71455..a357ed1 100755 (executable)
--- a/po/pt.po
+++ b/po/pt.po
@@ -2035,7 +2035,7 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Selecção do Idioma"
 
-msgid "Language..."
+msgid "Language"
 msgstr "Idioma"
 
 msgid "Last config"
index 26c1442..c2d81fd 100755 (executable)
--- a/po/ru.po
+++ b/po/ru.po
@@ -2072,8 +2072,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Выбор языка"
 
-msgid "Language..."
-msgstr "Язык..."
+msgid "Language"
+msgstr "Язык"
 
 msgid "Last config"
 msgstr ""
index b60ce74..06a8edd 100755 (executable)
--- a/po/sk.po
+++ b/po/sk.po
@@ -2096,8 +2096,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Voľba jazyka"
 
-msgid "Language..."
-msgstr "Jazyk..."
+msgid "Language"
+msgstr "Jazyk"
 
 msgid "Last config"
 msgstr "Posledný config"
index 08ccfdd..7abb6f6 100755 (executable)
--- a/po/sl.po
+++ b/po/sl.po
@@ -2048,8 +2048,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Izberite jezik"
 
-msgid "Language..."
-msgstr "Jezik..."
+msgid "Language"
+msgstr "Jezik"
 
 msgid "Last config"
 msgstr ""
@@ -6096,9 +6096,6 @@ msgstr "prenesen"
 #~ msgid "LCD Setup"
 #~ msgstr "Postavke Displaya"
 
-#~ msgid "Language"
-#~ msgstr "Jezici "
-
 #~ msgid "Loopthrough to Socket A"
 #~ msgstr "PoveA3i s Utorom A"
 
index 9959fc4..ad0b876 100755 (executable)
--- a/po/sr.po
+++ b/po/sr.po
@@ -46,6 +46,8 @@ msgid ""
 "\n"
 "Manage extensions or plugins for your Dreambox"
 msgstr ""
+"\n"
+"Izvrši proširenja i dodatke za vaš drimboks"
 
 msgid ""
 "\n"
@@ -86,6 +88,8 @@ msgid ""
 "\n"
 "Scan for local extensions and install them."
 msgstr ""
+"\n"
+"Traži lokalna proširenja i instaliraj ih. "
 
 msgid ""
 "\n"
@@ -116,7 +120,7 @@ msgid " updates available."
 msgstr "ažuriranja dostupna."
 
 msgid " wireless networks found!"
-msgstr "Bežične mreža pronađene!"
+msgstr "Bežična mreža pronađena!"
 
 msgid "#000000"
 msgstr "#000000"
@@ -196,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"
@@ -214,7 +216,7 @@ msgid "1"
 msgstr "1"
 
 msgid "1 wireless network found!"
-msgstr "Jedna bežična mreža nađena!"
+msgstr "1 bežična mreža pronađena!"
 
 msgid "1.0"
 msgstr "1.0"
@@ -298,13 +300,13 @@ msgid "9"
 msgstr "9"
 
 msgid "<Current movielist location>"
-msgstr ""
+msgstr "<Trenutna lokacija liste filmova>"
 
 msgid "<Default movie location>"
-msgstr ""
+msgstr "<Standardna lokacija filmova>"
 
 msgid "<Last timer location>"
-msgstr ""
+msgstr "<Zadnja lokacija tajmera> "
 
 msgid "<unknown>"
 msgstr "<nepoznato>"
@@ -355,32 +357,27 @@ 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."
 msgstr "Potrebni alat (%s) nije pronađen."
 
 msgid "A search for available updates is currently in progress."
-msgstr ""
+msgstr "Traženje za moguća ažuriranja je trenutno u toku."
 
 msgid ""
 "A second configured interface has been found.\n"
 "\n"
 "Do you want to disable the second network interface?"
 msgstr ""
+"Drugi konfigurisani interfejs je pronađen.\n"
+"\n"
+"Da li želite da onemogućite drugi mrežni interfejs?"
 
 msgid ""
 "A sleep timer wants to set your\n"
@@ -478,12 +475,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."
@@ -491,16 +484,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"
@@ -509,10 +494,10 @@ msgid "Advanced Options"
 msgstr "Napredne opcije"
 
 msgid "Advanced Software"
-msgstr ""
+msgstr "Napredni softver"
 
 msgid "Advanced Software Plugin"
-msgstr ""
+msgstr "Napredni softver dodatak"
 
 msgid "Advanced Video Enhancement Setup"
 msgstr "Napredne postavke video poboljšavanja "
@@ -526,12 +511,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"
@@ -686,8 +667,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..."
@@ -746,11 +726,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"
@@ -969,7 +946,7 @@ msgid "Configure your internal LAN"
 msgstr "Konfiguriši svoj interni LAN"
 
 msgid "Configure your network again"
-msgstr "Konfiguriši svoju mrežu ponovo"
+msgstr "Konfigurišite vašu mrežu ponovo"
 
 msgid "Configure your wireless LAN again"
 msgstr "Konfiguriši svoj bežični LAN ponovo"
@@ -984,7 +961,7 @@ msgid "Connect"
 msgstr "Spojiti"
 
 msgid "Connect to a Wireless Network"
-msgstr "Spoji se na bežičnu mrežu"
+msgstr "Spojite se na bežičnu mrežu"
 
 msgid "Connected to"
 msgstr "Povezan sa"
@@ -1030,7 +1007,7 @@ msgid "Could not load Medium! No disc inserted?"
 msgstr "Ne može se ubaciti medij.Disk nije ubačen?"
 
 msgid "Could not open Picture in Picture"
-msgstr ""
+msgstr "Ne mogu otvoriti sliku u slici"
 
 #, python-format
 msgid "Couldn't record due to conflicting timer %s"
@@ -1160,7 +1137,7 @@ msgid "Default Settings"
 msgstr "Standardne postavke"
 
 msgid "Default movie location"
-msgstr ""
+msgstr "Standardna lokacija filmova"
 
 msgid "Default services lists"
 msgstr "Standardna lista kanala"
@@ -1201,7 +1178,7 @@ msgid "Destination directory"
 msgstr "Ciljni direktorijum"
 
 msgid "Details for extension: "
-msgstr ""
+msgstr "Detalji za proširenje:"
 
 msgid "Detected HDD:"
 msgstr "Primećeni hard disk:"
@@ -1225,7 +1202,7 @@ msgid "DiSEqC repeats"
 msgstr "DiSEqC ponavljanja"
 
 msgid "DiSEqC-Tester settings"
-msgstr "Postavke DISEqC testera"
+msgstr "podešavanje DISEqC testera"
 
 msgid "Dialing:"
 msgstr "Zovem:"
@@ -1377,12 +1354,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?"
@@ -1522,7 +1495,7 @@ msgid "Enabled"
 msgstr "Omogućeno"
 
 msgid "Encrypted: "
-msgstr ""
+msgstr "Kodirano:"
 
 msgid "Encryption"
 msgstr "Šifrovanje"
@@ -1597,8 +1570,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"
@@ -1639,7 +1611,7 @@ msgid "Exit editor"
 msgstr "Izađi iz editora"
 
 msgid "Exit network wizard"
-msgstr "Izađi iz mrež. čarob."
+msgstr "Napusti mrežnog čarobnjaka"
 
 msgid "Exit the cleanup wizard"
 msgstr "Izađite iz čarobnjaka za čišćenje"
@@ -1660,16 +1632,16 @@ msgid "Extended Setup..."
 msgstr "Proširene postavke..."
 
 msgid "Extended Software"
-msgstr ""
+msgstr "Prošireni softver"
 
 msgid "Extended Software Plugin"
-msgstr ""
+msgstr "Prošireni softver dodatak "
 
 msgid "Extensions"
 msgstr "Proširenja"
 
 msgid "Extensions management"
-msgstr ""
+msgstr "Rukovanje proširenjima"
 
 msgid "FEC"
 msgstr "FEC"
@@ -1682,15 +1654,15 @@ msgstr "Neuspeh"
 
 #, python-format
 msgid "Fan %d"
-msgstr ""
+msgstr "Vent. %d "
 
 #, python-format
 msgid "Fan %d PWM"
-msgstr ""
+msgstr "Ventil. %d PWM"
 
 #, python-format
 msgid "Fan %d Voltage"
-msgstr ""
+msgstr "Ventil. %d Napona"
 
 msgid "Fast"
 msgstr "Brzo"
@@ -1728,8 +1700,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"
@@ -1739,7 +1710,7 @@ msgid "Flashing failed"
 msgstr "Fleš nije uspeo"
 
 msgid "Following tasks will be done after you press OK!"
-msgstr ""
+msgstr "Sledeći zadaci će biti urađeni kad pritisnete OK!"
 
 msgid "Format"
 msgstr "Formatiranje"
@@ -1801,13 +1772,13 @@ msgid "General AC3 Delay"
 msgstr "Opšte AC3 kašnjenje"
 
 msgid "General AC3 delay (ms)"
-msgstr ""
+msgstr "Opšte AC3 kašnjenje (ms) "
 
 msgid "General PCM Delay"
 msgstr "Opšte PCM kašnjenje"
 
 msgid "General PCM delay (ms)"
-msgstr ""
+msgstr "Opšte PCM kašnjenje (ms)"
 
 msgid "Genre"
 msgstr "Žanrovi"
@@ -1901,22 +1872,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."
 
@@ -1929,10 +1891,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?"
@@ -1959,7 +1919,7 @@ msgid "Init"
 msgstr "Init"
 
 msgid "Initial location in new timers"
-msgstr ""
+msgstr "Početna lokacija u novim tajmerima."
 
 msgid "Initialization..."
 msgstr "Inicijalizacija..."
@@ -2016,7 +1976,7 @@ msgid "Instant Record..."
 msgstr "Trenutno snimanje..."
 
 msgid "Instant record location"
-msgstr ""
+msgstr "Lokacija instant snimanja"
 
 msgid "Integrated Ethernet"
 msgstr "Integrisana mreža"
@@ -2025,7 +1985,7 @@ msgid "Integrated Wireless"
 msgstr "Integrisana bežična veza"
 
 msgid "Interface: "
-msgstr ""
+msgstr "Iinterfejs:"
 
 msgid "Intermediate"
 msgstr "Srednje"
@@ -2058,7 +2018,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"
 
@@ -2092,8 +2053,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Izbor jezika"
 
-msgid "Language..."
-msgstr "Jezik..."
+msgid "Language"
+msgstr "Jezici "
 
 msgid "Last config"
 msgstr "Zadnji konfig"
@@ -2113,7 +2074,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"
 
@@ -2160,7 +2122,7 @@ msgid "Location"
 msgstr "Lokacija"
 
 msgid "Location for instant recordings"
-msgstr ""
+msgstr "Lokacija za instant snimanja"
 
 msgid "Lock:"
 msgstr "Zaključaj:"
@@ -2196,7 +2158,7 @@ msgid "Make this mark just a mark"
 msgstr "Napravi ovu oznaku samo kao oznaku"
 
 msgid "Manage extensions"
-msgstr ""
+msgstr "Rukuj proširenjima"
 
 msgid "Manage your receiver's software"
 msgstr "Upravljanje softverom vašeg prijemnika"
@@ -2217,7 +2179,7 @@ msgid "Margin before record (minutes)"
 msgstr "Margina pre snimanja (minuti)"
 
 msgid "Max. Bitrate: "
-msgstr ""
+msgstr "Maks. Bit rata:"
 
 msgid "Media player"
 msgstr "Medija plejer"
@@ -2280,7 +2242,7 @@ msgid "Move west"
 msgstr "Pokreći na zapad"
 
 msgid "Movie location"
-msgstr ""
+msgstr "Lokacija filmova"
 
 msgid "Movielist menu"
 msgstr "Meni liste filmova"
@@ -2307,7 +2269,7 @@ msgid "NEXT"
 msgstr "SLEDEĆE"
 
 msgid "NFI Image Flashing"
-msgstr ""
+msgstr "NFI imidž flešovanje"
 
 msgid "NFI image flashing completed. Press Yellow to Reboot!"
 msgstr "Flešovanje NFI imidža završeno.Pritisni žuto za novo podizanje"
@@ -2398,7 +2360,7 @@ msgid "No 50 Hz, sorry. :("
 msgstr "Nema 50 Hz,žao mi je, :("
 
 msgid "No Connection"
-msgstr "Nema konekcije"
+msgstr "Nema veze"
 
 msgid "No HDD found or HDD not initialized!"
 msgstr "Disk nije pronađen ili nije inicijaliziran!"
@@ -2428,25 +2390,20 @@ msgstr "Nisu pronađene vidljive datoteke na ovom mediju!"
 msgid "No event info found, recording indefinitely."
 msgstr "Informacije o događaju nisu pronađene, snimanje beskrajno."
 
-msgid ""
-"No fast winding possible yet.. but you can use the number buttons to skip "
-"forward/backward!"
-msgstr ""
+msgid "No fast winding possible yet.. but you can use the number buttons to skip forward/backward!"
+msgstr "Još uvek nije moguće brzo premotavanje.. ali možeš koristiti num. tipke za skok napred/nazad!"
 
 msgid "No free tuner!"
 msgstr "Nema slobodnog tjunera!"
 
 msgid "No network connection available."
-msgstr ""
+msgstr "Nijedna mrežna veza nije dostupna."
 
 msgid "No networks found"
-msgstr "Nijedna mreža nije pronađena"
+msgstr "Nijedna mreža nije nađ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."
@@ -2461,7 +2418,7 @@ msgid "No tags are set on these movies."
 msgstr "Nema postavljenih oznaka na ovim filmovima."
 
 msgid "No to all"
-msgstr ""
+msgstr "Ne za sve"
 
 msgid "No tuner is configured for use with a diseqc positioner!"
 msgstr "Niedan tjuner nije konfigurisan za rad s DiSEqC pozicionerom!"
@@ -2495,34 +2452,28 @@ msgstr ""
 "Ukoliko kažete 'Ne' ovde, postavke uređaja ostaju nezaštićene!"
 
 msgid "No wireless networks found! Please refresh."
-msgstr "Nijedna bežična mreža nije nađena! Molim osveži."
+msgstr "Nisu pronađene bežične mreže! 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"
@@ -2545,7 +2496,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"
 
@@ -2556,12 +2508,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"
@@ -2573,14 +2521,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"
@@ -2616,7 +2558,7 @@ msgid "Only Free scan"
 msgstr "Samo slobodno traženje"
 
 msgid "Only extensions."
-msgstr ""
+msgstr "Samo proširenja:"
 
 msgid "Optionally enter your name if you want to."
 msgstr "Opciono unesite vaše ime ako želite."
@@ -2648,7 +2590,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"
 
@@ -2682,7 +2625,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"
 
@@ -2720,8 +2664,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..."
@@ -2733,28 +2676,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š. "
+"Molim konfiguriši ili verifikuj svoje nejmservere popunjavajući tražene vrednosti.\n"
+"Kad 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š. "
+"Kad 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!"
@@ -2789,12 +2725,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"
@@ -2836,13 +2768,11 @@ 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"
+"Molim izaberi mrežni interfejs koji želiš da koristiš za svoju internet vezu.\n"
 "\n"
 "Molim pritisni OK da nastaviš."
 
@@ -2873,12 +2803,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..."
@@ -2896,10 +2822,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 "Molim sačekajte dok pripremim vaše mrežne interfejse..."
+msgstr "Molim sačekajte dok pripremimo vaše mrežne interfejse..."
 
 msgid "Please wait while we test your network..."
-msgstr "Molim sačekajte doktestiram vašu mrežu..."
+msgstr "Molim sačekajte dok testiramo vašu mrežu..."
 
 msgid "Please wait while your network is restarting..."
 msgstr "Molim sačekajte dok se vaša mreža ponovo startuje"
@@ -3117,7 +3043,7 @@ msgid "Recordings"
 msgstr "Snimanja"
 
 msgid "Recordings always have priority"
-msgstr "Snimanje uvijek ima prioritet"
+msgstr "Snimanje uvek ima prioritet"
 
 msgid "Reenter new pin"
 msgstr "Ponovite novi pin"
@@ -3243,12 +3169,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"
@@ -3413,25 +3335,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"
@@ -3440,7 +3351,7 @@ msgid "Search west"
 msgstr "Pretraži zapad"
 
 msgid "Searching for available updates. Please wait..."
-msgstr ""
+msgstr "Traženje dostupnih ažuriranja.Molim sačekajte..."
 
 msgid "Searching for new installed or removed packages. Please wait..."
 msgstr "Traženje novih instaliranih ili uklonjenih paketa.Molim sačekajte..."
@@ -3485,7 +3396,7 @@ msgid "Select image"
 msgstr "Izaberi imidž"
 
 msgid "Select interface"
-msgstr "Izaberi interfejs"
+msgstr "Izaberite interfejs "
 
 msgid "Select package"
 msgstr "Izaberi paket"
@@ -3641,7 +3552,7 @@ msgid "Shows the state of your wireless LAN connection.\n"
 msgstr "Prikaži stanje vaše bežične LAN veze.\n"
 
 msgid "Shutdown"
-msgstr ""
+msgstr "Isključivanje"
 
 msgid "Shutdown Dreambox after"
 msgstr "Isključi drimbox posle"
@@ -3650,7 +3561,7 @@ msgid "Signal Strength:"
 msgstr "Jačina signala:"
 
 msgid "Signal: "
-msgstr "Signal:"
+msgstr "Signal: "
 
 msgid "Similar"
 msgstr "Slično"
@@ -3717,7 +3628,7 @@ msgid "Software"
 msgstr "Softver"
 
 msgid "Software management"
-msgstr ""
+msgstr "Upravljač softvera "
 
 msgid "Software restore"
 msgstr "Vraćanje softvera"
@@ -3887,7 +3798,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"
 
@@ -3910,7 +3822,7 @@ msgid "Tags"
 msgstr "Oznake"
 
 msgid "Temperature and Fan control"
-msgstr ""
+msgstr "Kontrola temperature i ventilatora"
 
 msgid "Terrestrial"
 msgstr "Zemaljski"
@@ -3937,32 +3849,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š."
+"Hvala vam na korišćenju čarobnjaka.\n"
+"Molim pritisnite OK da nastavite."
 
 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."
@@ -3972,6 +3873,8 @@ msgid ""
 "The directory %s is not writable.\n"
 "Make sure you select a writable directory instead."
 msgstr ""
+"Direktorium %s nije za pisanje.\n"
+"Budi siguran da si umesto toga izabrao moguć direktorium."
 
 #, python-format
 msgid ""
@@ -3992,38 +3895,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."
@@ -4062,7 +3949,7 @@ msgid ""
 "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."
+"Molimo instalirajte ga i izaberite šta sledeće da činite."
 
 msgid ""
 "The wireless LAN plugin is not installed!\n"
@@ -4071,11 +3958,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."
@@ -4084,7 +3968,7 @@ msgid "There are at least "
 msgstr "Postoji najmanje"
 
 msgid "There are currently no outstanding actions."
-msgstr ""
+msgstr "Trenutno nema izrazitih dešavanja."
 
 msgid "There are no default services lists in your image."
 msgstr "Nema osnovne liste kanala u vašem imidžu."
@@ -4093,7 +3977,7 @@ msgid "There are no default settings in your image."
 msgstr "Nema osnovnih postavki u vašem imidžu."
 
 msgid "There are no updates available."
-msgstr ""
+msgstr "Nema dostupnih ažuriranja."
 
 msgid "There are now "
 msgstr "Postoji sada"
@@ -4115,26 +3999,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!"
@@ -4166,14 +4038,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"
@@ -4198,21 +4068,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."
 
@@ -4266,7 +4132,7 @@ msgstr ""
 "Molimo ponovo proverite!"
 
 msgid "Timer record location"
-msgstr ""
+msgstr "Lokacija snimanja po tajmeru"
 
 msgid "Timer sanity error"
 msgstr "Greška nerazumnog tajmera"
@@ -4281,7 +4147,7 @@ msgid "Timeshift"
 msgstr "Vrem. pomak"
 
 msgid "Timeshift location"
-msgstr ""
+msgstr "Lokacija vrem. pomaka"
 
 msgid "Timeshift not possible!"
 msgstr "Vrem.i pomak nije moguć!"
@@ -4303,23 +4169,20 @@ 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"
 msgstr "Danas"
 
 msgid "Tone Amplitude"
-msgstr ""
+msgstr "Ton amplituda"
 
 msgid "Tone mode"
 msgstr "Ton mod"
@@ -4355,14 +4218,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..."
@@ -4439,10 +4298,10 @@ msgid "Uncommitted DiSEqC command"
 msgstr "Nedodeljena DiSEqC komanda"
 
 msgid "Undo install"
-msgstr ""
+msgstr "Poništi instaliranje"
 
 msgid "Undo uninstall"
-msgstr ""
+msgstr "Poništi deinstalaciju"
 
 msgid "Unicable"
 msgstr "Unikabl"
@@ -4454,7 +4313,7 @@ msgid "Unicable Martix"
 msgstr "Unikabl Matrix"
 
 msgid "Uninstall"
-msgstr ""
+msgstr "Deinstaliraj"
 
 msgid "Universal LNB"
 msgstr "Univerzalni LNB"
@@ -4463,7 +4322,7 @@ msgid "Unmount failed"
 msgstr "Demauntiranje nije uspelo"
 
 msgid "Unsupported"
-msgstr "Nije podržano"
+msgstr "Nepodržano"
 
 msgid "Update"
 msgstr "Ažuriranje"
@@ -4475,7 +4334,7 @@ msgid "Updating finished. Here is the result:"
 msgstr "Ažuriranje završeno. Evo rezultata:"
 
 msgid "Updating software catalog"
-msgstr ""
+msgstr "Ažuriranje kataloga softvera"
 
 msgid "Updating... Please wait... This can take some minutes..."
 msgstr "Ažuriram... Molim čekajte... To može potrajati nekoliko minuta..."
@@ -4525,18 +4384,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 "Koristi vreme trenutnog kanala u radu"
+msgstr "Koristi vreme trenutnog kanala"
 
 msgid "Use usals for this sat"
 msgstr "Koristi USALS za ovaj satelit"
@@ -4589,15 +4444,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"
 
@@ -4698,12 +4551,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"
@@ -4718,49 +4569,37 @@ 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"
+"Ako želite da spojite vaš drimboks sa internetom,ovaj čarobnjak će vas voditi kroz osnovne mrežne postavke vašeg drimboxa.\n"
 "\n"
 "Pritisnite OK da počnete konfigurisanje vaše mreže"
 
@@ -4773,8 +4612,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..."
@@ -4791,13 +4629,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"
@@ -4819,7 +4655,7 @@ msgid "Wireless Network"
 msgstr "Bežična mreža"
 
 msgid "Wireless Network State"
-msgstr "Stanje bežične mreže"
+msgstr "Status bežične mreže"
 
 msgid "Write error while recording. Disk full?\n"
 msgstr "Greška tokom snimanja. Disk Pun?\n"
@@ -4840,7 +4676,7 @@ msgid "Yes"
 msgstr "Da"
 
 msgid "Yes to all"
-msgstr ""
+msgstr "Da za sve"
 
 msgid "Yes, and delete this movie"
 msgstr "Da i izbrišite ovaj film"
@@ -4878,12 +4714,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..."
@@ -4892,7 +4724,7 @@ msgid "You can install this plugin."
 msgstr "Možete instalirati ovaj dodatak."
 
 msgid "You can only burn Dreambox recordings!"
-msgstr ""
+msgstr "Možeš pržiti samo drimboks snimke!"
 
 msgid "You can remove this plugin."
 msgstr "Možete ukloniti ovaj dodatak."
@@ -4903,89 +4735,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"
@@ -5002,6 +4796,10 @@ msgid ""
 "Your internet connection is working now.\n"
 "\n"
 msgstr ""
+"Vaš drimboks je sada spreman za upotrebu.\n"
+"\n"
+"Vaša internet veza sada radi.\n"
+"\n"
 
 msgid ""
 "Your Dreambox is now ready to use.\n"
@@ -5010,43 +4808,29 @@ msgid ""
 "\n"
 "Please press OK to continue."
 msgstr ""
-"Vaš drimboks je sad spreman za upotrebu.\n"
+"Vaš drimboks je sada spreman za upotrebu.\n"
 "\n"
 "Vaša internet veza sada radi.\n"
 "\n"
-"Molim pritisni OK da nastaviš."
+"Molim pritisnite OK da nastavite."
 
 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:"
@@ -5063,7 +4847,7 @@ msgid ""
 "Please choose what you want to do next."
 msgstr ""
 "Vaša internet veza ne radi!\n"
-"Molim izaberi šta želiš sledeće učiniti."
+"Molim izaberite šta želite sledeće učiniti."
 
 msgid "Your name (optional):"
 msgstr "Vaše  ime (opciono):"
@@ -5088,6 +4872,10 @@ msgid ""
 "\n"
 "Please choose what you want to do next."
 msgstr ""
+"Vaša bežična LAN internet veza ne može biti pokrenuta!\n"
+"Da li ste spojili vaš USB WLAN stik?\n"
+"\n"
+"Molim izaberite šta želite sledeće da učinite."
 
 msgid "Zap back to service before positioner setup?"
 msgstr "Prebaciti na zadnji kanal pre podešavanja motora?"
@@ -5129,7 +4917,7 @@ msgid "activate current configuration"
 msgstr "Aktivirajte aktuelnu konfiguraciju"
 
 msgid "activate network adapter configuration"
-msgstr ""
+msgstr "Aktivirajte konfiguraciju mrežnog adaptera"
 
 msgid "add Provider"
 msgstr "Dodaj provajdera"
@@ -5844,7 +5632,7 @@ msgid "shuffle playlist"
 msgstr "sam biraj iz plejliste"
 
 msgid "shut down"
-msgstr ""
+msgstr "isključi "
 
 msgid "shutdown"
 msgstr "isključi"
@@ -5996,12 +5784,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"
@@ -6202,9 +5986,6 @@ msgstr "prebačen"
 #~ msgid "LCD Setup"
 #~ msgstr "Postavke Displaya"
 
-#~ msgid "Language"
-#~ msgstr "Jezici "
-
 #~ msgid "Lets you view/edit files in your Dreambox"
 #~ msgstr "Omogućava vam videti/urediti datoteke vašeg drimboxa"
 
@@ -6259,47 +6040,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 "Refresh"
 #~ msgstr "Osveži"
index d7736f1..53c4942 100755 (executable)
--- a/po/sv.po
+++ b/po/sv.po
@@ -2058,8 +2058,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Välj språk"
 
-msgid "Language..."
-msgstr "Språk..."
+msgid "Language"
+msgstr "Språk"
 
 msgid "Last config"
 msgstr "Senaste konfiguration"
index 5e3a829..229dfe1 100755 (executable)
--- a/po/tr.po
+++ b/po/tr.po
@@ -1,3 +1,4 @@
+# 
 msgid ""
 msgstr ""
 "Project-Id-Version: enigma2 Turkish Locale\n"
@@ -9,8 +10,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Country: TURKEY\n"
 "X-Poedit-SourceCharset: utf-8\n"
+"X-Poedit-Country: TURKEY\n"
 
 msgid ""
 "\n"
@@ -44,6 +45,8 @@ msgid ""
 "\n"
 "Manage extensions or plugins for your Dreambox"
 msgstr ""
+"\n"
+"Dreambox eklentilerinizi yönetin"
 
 msgid ""
 "\n"
@@ -84,6 +87,8 @@ msgid ""
 "\n"
 "Scan for local extensions and install them."
 msgstr ""
+"\n"
+"Yereldeki eklentileri arayın ve kurun"
 
 msgid ""
 "\n"
@@ -98,6 +103,8 @@ msgid ""
 "\n"
 "System will restart after the restore!"
 msgstr ""
+"\n"
+"Dreambox geri yüklemeden sonra yeniden başlatılacak!"
 
 msgid " "
 msgstr " "
@@ -112,7 +119,7 @@ msgid " updates available."
 msgstr " güncelleme mevcut."
 
 msgid " wireless networks found!"
-msgstr ""
+msgstr " kablosuz ağlar bulundu!"
 
 msgid "#000000"
 msgstr "#000000"
@@ -192,11 +199,8 @@ msgstr "* Yalnızca gizlenmiş SSID veya ağ anahtarı girildiğinde kullanılab
 msgid ".NFI Download failed:"
 msgstr ".NFI dosyası indirilirken hata oluştu:"
 
-msgid ""
-".NFI file passed md5sum signature check. You can safely flash this image!"
-msgstr ""
-".NFI dosyası için yapılan md5sum imza doğrulaması onaylandı. Bu bellenimi "
-"güvenle kullanabilirsiniz!"
+msgid ".NFI file passed md5sum signature check. You can safely flash this image!"
+msgstr ".NFI dosyası için yapılan md5sum imza doğrulaması onaylandı. Bu bellenimi güvenle kullanabilirsiniz!"
 
 msgid "/usr/share/enigma2 directory"
 msgstr "/usr/share/enigma2 klasörü"
@@ -211,7 +215,7 @@ msgid "1"
 msgstr "1"
 
 msgid "1 wireless network found!"
-msgstr ""
+msgstr "1 kablosuz ağ bulundu!"
 
 msgid "1.0"
 msgstr "1.0"
@@ -295,20 +299,19 @@ msgid "9"
 msgstr "9"
 
 msgid "<Current movielist location>"
-msgstr ""
+msgstr "<Mevcut film listesi konumu>"
 
 msgid "<Default movie location>"
-msgstr ""
+msgstr "<Varsayılan film konumu>"
 
 msgid "<Last timer location>"
-msgstr ""
+msgstr "<Son zamanlayıcı konumu>"
 
 msgid "<unknown>"
 msgstr "<bilinmiyor>"
 
 msgid "??"
-msgstr ""
-"Güncelleme tamamlandı. Dreambox'ın yeniden başlatılmasını istiyor musunuz?"
+msgstr "Güncelleme tamamlandı. Dreambox'ın yeniden başlatılmasını istiyor musunuz?"
 
 msgid "A"
 msgstr "A"
@@ -353,18 +356,11 @@ msgstr ""
 "Kayıt devam ediyor.\n"
 "Ne yapmak istiyorsunuz?"
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"configure the positioner."
-msgstr ""
-"Kayıt devam ediyor. Lütfen pozisyoner yapılandırmasını denemeden önce kaydı "
-"durdurun."
+msgid "A recording is currently running. Please stop the recording before trying to configure the positioner."
+msgstr "Kayıt devam ediyor. Lütfen pozisyoner yapılandırmasını denemeden önce kaydı durdurun."
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"start the satfinder."
-msgstr ""
-"Kayıt devam ediyor. Lütfen uydu arayıcıyı başlatmadan önce kaydı durdurun."
+msgid "A recording is currently running. Please stop the recording before trying to start the satfinder."
+msgstr "Kayıt devam ediyor. Lütfen uydu arayıcıyı başlatmadan önce kaydı durdurun."
 
 #, python-format
 msgid "A required tool (%s) was not found."
@@ -378,6 +374,9 @@ msgid ""
 "\n"
 "Do you want to disable the second network interface?"
 msgstr ""
+"Yapılandırılmış ikinci bir arayüz bulundu.\n"
+"\n"
+"İkinci ağ arayüzünü devre dışı bırakmak istiyor musunuz?"
 
 msgid ""
 "A sleep timer wants to set your\n"
@@ -475,12 +474,8 @@ msgstr "Buket ekle"
 msgid "Add to favourites"
 msgstr "Favorilere ekle"
 
-msgid ""
-"Adds enigma2 settings and dreambox model informations like SN, rev... if "
-"enabled."
-msgstr ""
-"Evet derseniz, enigma2 ayarlarınız ve dreambox model bilgisi (SN, "
-"revizyon..) gönderilecektir."
+msgid "Adds enigma2 settings and dreambox model informations like SN, rev... if enabled."
+msgstr "Evet derseniz, enigma2 ayarlarınız ve dreambox model bilgisi (SN, revizyon..) gönderilecektir."
 
 msgid "Adds network configuration if enabled."
 msgstr "Evet derseniz, ağ ayarlarınızda gönderilecektir."
@@ -488,16 +483,8 @@ msgstr "Evet derseniz, ağ ayarlarınızda gönderilecektir."
 msgid "Adds wlan configuration if enabled."
 msgstr "Evet derseniz kablosuz ağ ayarlarınız da gönderilecektir."
 
-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 ""
-"Renk ayarlarınızı yaparken, renk geçişlerini mümkün olduğunca dolgun ve "
-"ayırt edilebilir şekilde ayarlayın. Sonuçtan memnunsanız, görüntü ince "
-"ayarını kapatmak için OK tuşuna basın yada test ekranında belirtilen "
-"numaraları kumandanızdan tuşlayarak diğer test ekranlarını görün."
+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 "Renk ayarlarınızı yaparken, renk geçişlerini mümkün olduğunca dolgun ve ayırt edilebilir şekilde ayarlayın. Sonuçtan memnunsanız, görüntü ince ayarını kapatmak için OK tuşuna basın yada test ekranında belirtilen numaraları kumandanızdan tuşlayarak diğer test ekranlarını görün."
 
 msgid "Advanced"
 msgstr "Gelişmiş"
@@ -521,15 +508,10 @@ msgid "Advanced restore"
 msgstr "Gelişmiş geri yükleme"
 
 msgid "After event"
-msgstr "Program bittikten sonra"
+msgstr "Eylem bittikten sonra"
 
-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 ""
-"Sihirbaz tamamlandıktan sonra, kanal korumasına ihtiyacınız olacak. Nasıl "
-"yapılacağını öğrenmek istiyorsanız Dreambox'ınızın kullanım kılavuzuna "
-"başvurun."
+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 "Sihirbaz tamamlandıktan sonra, kanal korumasına ihtiyacınız olacak. Nasıl yapılacağını öğrenmek istiyorsanız Dreambox'ınızın kullanım kılavuzuna başvurun."
 
 msgid "Album"
 msgstr "Albüm"
@@ -621,7 +603,7 @@ msgid "Audio Options..."
 msgstr "Ses Ayarları..."
 
 msgid "Author: "
-msgstr "Yazar: "
+msgstr "Gönderen: "
 
 msgid "Authoring mode"
 msgstr "Yayınlama kipi"
@@ -743,9 +725,7 @@ msgstr "DVD'ye yaz..."
 msgid "Bus: "
 msgstr "Yol:"
 
-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 "OK tuşuna basıldığı zaman bilgi çubuğu gösterilsin mi?"
 
 msgid "C"
@@ -842,7 +822,7 @@ msgid "Choose Tuner"
 msgstr "Tuner Seç"
 
 msgid "Choose a wireless network"
-msgstr ""
+msgstr "Kablosuz ağ seç"
 
 msgid "Choose backup files"
 msgstr "Yedeklenecek dosyaları seç"
@@ -857,7 +837,7 @@ msgid "Choose source"
 msgstr "Kaynak seç"
 
 msgid "Choose target folder"
-msgstr "Hedef klasörü seç"
+msgstr "Hedef klasörü seçin"
 
 msgid "Choose upgrade source"
 msgstr "Güncelleme sunucusu ayarları"
@@ -1026,7 +1006,7 @@ msgid "Could not load Medium! No disc inserted?"
 msgstr "DVD medyası yüklenemedi. DVD diski takılı değil mi?"
 
 msgid "Could not open Picture in Picture"
-msgstr ""
+msgstr "Resim içinde resim açılamıyor"
 
 #, python-format
 msgid "Couldn't record due to conflicting timer %s"
@@ -1136,16 +1116,13 @@ msgid "Date"
 msgstr "Tarih"
 
 msgid "Decide if you want to enable or disable the Cleanup Wizard."
-msgstr ""
-"Temizlik sihirbazını buradan etkinleştirebilir veya devre dışı "
-"bırakabilirsiniz"
+msgstr "Temizlik sihirbazını buradan etkinleştirebilir veya devre dışı bırakabilirsiniz"
 
 msgid "Decide what should be done when crashlogs are found."
 msgstr "Hata günlüğü bulunduğunda, yapılmasını istediğiniz eylemi seçiniz."
 
 msgid "Decide what should happen to the crashlogs after submission."
-msgstr ""
-"Hata günlüğü gönderildikten sonra, yapılmasını istediğiniz eylemi seçiniz."
+msgstr "Hata günlüğü gönderildikten sonra, yapılmasını istediğiniz eylemi seçiniz."
 
 msgid "Deep Standby"
 msgstr "Kapat"
@@ -1157,7 +1134,7 @@ msgid "Default Settings"
 msgstr "Varsayılan ayarlar"
 
 msgid "Default movie location"
-msgstr ""
+msgstr "Varsayılan film konumu"
 
 msgid "Default services lists"
 msgstr "Varsayılan kanal listesi"
@@ -1198,7 +1175,7 @@ msgid "Destination directory"
 msgstr "Hedef Klasör"
 
 msgid "Details for extension: "
-msgstr ""
+msgstr "Eklenti detayları: "
 
 msgid "Detected HDD:"
 msgstr "Tanınan HDD:"
@@ -1222,7 +1199,7 @@ msgid "DiSEqC repeats"
 msgstr "DiSEqC tekrarı"
 
 msgid "DiSEqC-Tester settings"
-msgstr ""
+msgstr "DiSEqC-Testçi ayarları"
 
 msgid "Dialing:"
 msgstr "Aranıyor:"
@@ -1238,7 +1215,7 @@ msgid "Directory %s nonexistent."
 msgstr "%s klasörü oluşturulmamış."
 
 msgid "Directory browser"
-msgstr ""
+msgstr "Klasör görüntüleyici"
 
 msgid "Disable"
 msgstr "Kapat"
@@ -1287,7 +1264,7 @@ msgid "Display Setup"
 msgstr "OLED ekran ayarları"
 
 msgid "Display and Userinterface"
-msgstr "Görünüm ve kullanıcı arayüzü"
+msgstr "Görüntü yönetimi"
 
 #, python-format
 msgid ""
@@ -1306,7 +1283,7 @@ msgstr ""
 
 #, python-format
 msgid "Do you really want to delete %s?"
-msgstr "%s silmek istiyor musunuz?"
+msgstr "%s 'i silmek istediğinizden emin misiniz?"
 
 #, python-format
 msgid ""
@@ -1374,12 +1351,8 @@ msgstr "Ayarlarınızı geri yüklemek istiyor musunuz?"
 msgid "Do you want to resume this playback?"
 msgstr "Oynatmaya kaldığınız yerden devam etmek istiyor musunuz?"
 
-msgid ""
-"Do you want to submit your email address and name so that we can contact you "
-"if needed?"
-msgstr ""
-"İhtiyaç duyduğumuzda size ulaşabilmemizi istiyorsanız, eposta adresinizi ve "
-"adınızı giriniz."
+msgid "Do you want to submit your email address and name so that we can contact you if needed?"
+msgstr "İhtiyaç duyduğumuzda size ulaşabilmemizi istiyorsanız, eposta adresinizi ve adınızı giriniz."
 
 msgid "Do you want to update your Dreambox?"
 msgstr "Dreambox'ı güncellemek istiyor musunuz?"
@@ -1413,9 +1386,7 @@ msgstr "Tamamlandı - %d paket yüklendi veya güncellendi %d pakette hata oluş
 
 #, python-format
 msgid "Done - Installed, upgraded or removed %d packages with %d errors"
-msgstr ""
-"Tamamlandı - %d paket yüklendi, güncellendi veya kaldırıldı. %d pakette hata "
-"oluştu"
+msgstr "Tamamlandı - %d paket yüklendi, güncellendi veya kaldırıldı. %d pakette hata oluştu"
 
 msgid "Download"
 msgstr "İndir"
@@ -1427,8 +1398,7 @@ msgid "Download Plugins"
 msgstr "Eklenti İndir"
 
 msgid "Download of USB flasher boot image failed: "
-msgstr ""
-"Önyükleme yapabilir USB flaşlayıcı bellenim dosyası indirilirken hata oluştu:"
+msgstr "Önyükleme yapabilir USB flaşlayıcı bellenim dosyası indirilirken hata oluştu:"
 
 msgid "Downloadable new plugins"
 msgstr "İndirilebilir eklentiler"
@@ -1446,7 +1416,7 @@ msgid "Dreambox format data DVD (HDTV compatible)"
 msgstr "Dreambox DVD biçimi (HDTV uyumlu)"
 
 msgid "Dreambox software because updates are available."
-msgstr ""
+msgstr "Dreambox güncellemelerini yükleyin"
 
 msgid "Dutch"
 msgstr "Flemenkçe"
@@ -1522,7 +1492,7 @@ msgid "Enabled"
 msgstr "Etkin"
 
 msgid "Encrypted: "
-msgstr ""
+msgstr "Şifrelenmiş: "
 
 msgid "Encryption"
 msgstr "Şifreleme"
@@ -1537,7 +1507,7 @@ msgid "Encryption Type"
 msgstr "Şifreleme Tipi"
 
 msgid "Encryption:"
-msgstr ""
+msgstr "Şifreleme:"
 
 msgid "End time"
 msgstr "Bitiş zamanı"
@@ -1597,9 +1567,7 @@ msgid "Enter the service pin"
 msgstr "Kanal şifresini girin"
 
 msgid "Enter your email address so that we can contact you if needed."
-msgstr ""
-"İhtiyaç duyduğumuzda size ulaşabilmemizi istiyorsanız, eposta adresinizi "
-"giriniz."
+msgstr "İhtiyaç duyduğumuzda size ulaşabilmemizi istiyorsanız, eposta adresinizi giriniz."
 
 msgid "Error"
 msgstr "Hata"
@@ -1670,7 +1638,7 @@ msgid "Extensions"
 msgstr "Eklentiler"
 
 msgid "Extensions management"
-msgstr ""
+msgstr "Eklenti yöneticisi"
 
 msgid "FEC"
 msgstr "FEC"
@@ -1683,15 +1651,15 @@ msgstr "Başarısız"
 
 #, python-format
 msgid "Fan %d"
-msgstr ""
+msgstr "Fan %d"
 
 #, python-format
 msgid "Fan %d PWM"
-msgstr ""
+msgstr "Fan %d PWM"
 
 #, python-format
 msgid "Fan %d Voltage"
-msgstr ""
+msgstr "Fan %d V"
 
 msgid "Fast"
 msgstr "Hızlı"
@@ -1729,11 +1697,8 @@ msgstr "Ağ yeniden başlatıldı"
 msgid "Finnish"
 msgstr "Fince"
 
-msgid ""
-"First we need to download the latest boot environment for the USB flasher."
-msgstr ""
-"Öncelikle en güncel önyükleme yapabilir USB flaşlayıcı ortamının indirilmesi "
-"gerekiyor."
+msgid "First we need to download the latest boot environment for the USB flasher."
+msgstr "Öncelikle en güncel önyükleme yapabilir USB flaşlayıcı ortamının indirilmesi gerekiyor."
 
 msgid "Flash"
 msgstr "Flaş"
@@ -1742,7 +1707,7 @@ msgid "Flashing failed"
 msgstr "Flaşa yazma başarısız"
 
 msgid "Following tasks will be done after you press OK!"
-msgstr ""
+msgstr "Belirtilen görevler OK'a basmanızın ardından işleme alınacak!"
 
 msgid "Format"
 msgstr "Biçimlendir"
@@ -1804,13 +1769,13 @@ msgid "General AC3 Delay"
 msgstr "Genel AC3 gecikmesi"
 
 msgid "General AC3 delay (ms)"
-msgstr ""
+msgstr "Genel AC3 gecikmesi (ms)"
 
 msgid "General PCM Delay"
 msgstr "Genel PCM gecikmesi"
 
 msgid "General PCM delay (ms)"
-msgstr ""
+msgstr "Genel PCM gecikmesi (ms)"
 
 msgid "Genre"
 msgstr "Tür"
@@ -1904,25 +1869,14 @@ msgstr ""
 "ilgili bazı hatalar var. Geri dönmek için OK tuşuna basın."
 
 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 ""
-"Eğer TV'nizde parlaklık ve kontrast geliştirme özelliğini kullanıyorsanız, "
-"devre dışı bırakın. TV ayarlarınızda \"dinamik\" ismiyle adlandırılan ayar "
-"aktifse, standart'a getirin. Zemin ışıklandırma (backlight) seviyesini "
-"ayarlayın.\n"
-"Kontrast oranını olabildiğince düşürün. Parlaklık seviyesini mümkün "
-"olduğunca düşürün, en alttaki iki gri tonuda ayırt edebilecek şekilde "
-"ayarlarınızı yapın.\n"
-"Parlak tonları şuan için dert etmeyin. Onları bir sonraki adımda "
-"ayarlayabilirsiniz.\n"
+"Eğer TV'nizde parlaklık ve kontrast geliştirme özelliğini kullanıyorsanız, devre dışı bırakın. TV ayarlarınızda \"dinamik\" ismiyle adlandırılan ayar aktifse, standart'a getirin. Zemin ışıklandırma (backlight) seviyesini ayarlayın.\n"
+"Kontrast oranını olabildiğince düşürün. Parlaklık seviyesini mümkün olduğunca düşürün, en alttaki iki gri tonuda ayırt edebilecek şekilde ayarlarınızı yapın.\n"
+"Parlak tonları şuan için dert etmeyin. Onları bir sonraki adımda ayarlayabilirsiniz.\n"
 "Sonuçtan memnunsanız, OK tuşuna basın."
 
 msgid "Image flash utility"
@@ -1934,11 +1888,8 @@ msgstr "Bellenim Güncelle"
 msgid "In Progress"
 msgstr "İlerliyor"
 
-msgid ""
-"In order to record a timer, the TV was switched to the recording service!\n"
-msgstr ""
-"Zamanlanmış kayıt görevi başlatıldı, TV fonksiyonundan kayıt fonksiyonuna "
-"geçildi!\n"
+msgid "In order to record a timer, the TV was switched to the recording service!\n"
+msgstr "Zamanlanmış kayıt görevi başlatıldı, TV fonksiyonundan kayıt fonksiyonuna geçildi!\n"
 
 msgid "Include your email and name (optional) in the mail?"
 msgstr "İletide ad (ops.) ve eposta bilginiz gönderilsin mi?"
@@ -1989,7 +1940,7 @@ msgid "Install a new image with your web browser"
 msgstr "Yeni bellenimi internet gezgin (ie,firefox vb.) programıyla yükle"
 
 msgid "Install extensions."
-msgstr ""
+msgstr "Eklentileri yükle."
 
 msgid "Install local extension"
 msgstr "Çevrimdışı eklenti yükle"
@@ -2022,7 +1973,7 @@ msgid "Instant Record..."
 msgstr "Anlık Kayıt..."
 
 msgid "Instant record location"
-msgstr ""
+msgstr "Anlık kayıt konumu"
 
 msgid "Integrated Ethernet"
 msgstr "Entegre Ağ Donanımı"
@@ -2031,7 +1982,7 @@ msgid "Integrated Wireless"
 msgstr "Entegre Kablosuz Ağ Donanımı"
 
 msgid "Interface: "
-msgstr ""
+msgstr "Arayüz: "
 
 msgid "Intermediate"
 msgstr "Orta"
@@ -2064,7 +2015,8 @@ msgstr "İtalyanca"
 msgid "Job View"
 msgstr "Görev Göster"
 
-#. 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 "Just Scale"
 
@@ -2098,7 +2050,7 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Dil seçimi"
 
-msgid "Language..."
+msgid "Language"
 msgstr "Dil ayarları"
 
 msgid "Last config"
@@ -2119,7 +2071,8 @@ msgstr "DVD Oynatıcıyı Kapat?"
 msgid "Left"
 msgstr "Sol"
 
-#. 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"
 
@@ -2166,7 +2119,7 @@ msgid "Location"
 msgstr "Konum"
 
 msgid "Location for instant recordings"
-msgstr ""
+msgstr "Anlık kayıt konumu"
 
 msgid "Lock:"
 msgstr "Kilitli:"
@@ -2202,7 +2155,7 @@ msgid "Make this mark just a mark"
 msgstr "Bu işareti sadece bir işaret olarak kullan"
 
 msgid "Manage extensions"
-msgstr ""
+msgstr "Eklentileri yönet"
 
 msgid "Manage your receiver's software"
 msgstr "Uydu alıcınızın sistem yazılımı yönetin"
@@ -2223,7 +2176,7 @@ msgid "Margin before record (minutes)"
 msgstr "Kayıt başına marj süresi ekle (dk.)"
 
 msgid "Max. Bitrate: "
-msgstr ""
+msgstr "Maks. Hız: "
 
 msgid "Media player"
 msgstr "Ortam oynatıcı"
@@ -2286,7 +2239,7 @@ msgid "Move west"
 msgstr "Batıya taşı"
 
 msgid "Movie location"
-msgstr ""
+msgstr "Film konumu"
 
 msgid "Movielist menu"
 msgstr "Film Listesi Menüsü"
@@ -2316,8 +2269,7 @@ msgid "NFI Image Flashing"
 msgstr ""
 
 msgid "NFI image flashing completed. Press Yellow to Reboot!"
-msgstr ""
-"NFI bellenim flaşlaması tamamlandı. Sarı tuşa basarak yeniden başlatın!"
+msgstr "NFI bellenim flaşlaması tamamlandı. Sarı tuşa basarak yeniden başlatın!"
 
 msgid "NOW"
 msgstr "ŞİMDİ"
@@ -2405,7 +2357,7 @@ msgid "No 50 Hz, sorry. :("
 msgstr "50 Hz desteklemiyor, üzgünüm. :("
 
 msgid "No Connection"
-msgstr ""
+msgstr "Bağlantı yok"
 
 msgid "No HDD found or HDD not initialized!"
 msgstr "HDD bulunamadı veya HDD ilişkilendirilemedi!"
@@ -2435,25 +2387,20 @@ msgstr "Bu medyada gösterilecek dosya bulunamadı!"
 msgid "No event info found, recording indefinitely."
 msgstr "EPG bilgisi bulunamadı, süresiz kaydediliyor."
 
-msgid ""
-"No fast winding possible yet.. but you can use the number buttons to skip "
-"forward/backward!"
-msgstr ""
+msgid "No fast winding possible yet.. but you can use the number buttons to skip forward/backward!"
+msgstr "İleri/geri hızlı sardırmayı kullanabilmek için rakam tuşlarını kullanınız."
 
 msgid "No free tuner!"
 msgstr "Boş tuner yok!"
 
 msgid "No network connection available."
-msgstr ""
+msgstr "Uygun ağ bağlantısı yok."
 
 msgid "No networks found"
-msgstr ""
+msgstr "Kablosuz Ağ bulunamadı"
 
-msgid ""
-"No packages were upgraded yet. So you can check your network and try again."
-msgstr ""
-"Hiçbir paket güncellenemedi. Ağ ayarlarınızı kontrol ettikten sonra tekrar "
-"deneyin."
+msgid "No packages were upgraded yet. So you can check your network and try again."
+msgstr "Hiçbir paket güncellenemedi. Ağ ayarlarınızı kontrol ettikten sonra tekrar deneyin."
 
 msgid "No picture on TV? Press EXIT and retry."
 msgstr "TV'nizde resim yoksa EXIT'e basın ve tekrar deneyin."
@@ -2468,7 +2415,7 @@ msgid "No tags are set on these movies."
 msgstr "Bu filmler için etiket tanımlanmamış"
 
 msgid "No to all"
-msgstr ""
+msgstr "Tümüne hayır"
 
 msgid "No tuner is configured for use with a diseqc positioner!"
 msgstr "DiSEqC pozisyoner kullanımı için tuner ayarı yapılmamış!"
@@ -2502,34 +2449,28 @@ msgstr ""
 "'Hayır' derseniz kurulum koruması devredışı kalacaktır."
 
 msgid "No wireless networks found! Please refresh."
-msgstr ""
+msgstr "Kablosuz ağ bulunamadı! Kontrollerinizi yaptıktan sonra Lütfen yenile tuşuna basın."
 
 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 ""
 "Çalışan yerel ağ donanımı bulunamadı.\n"
-"Lütfen ağ kablonuzun bağlı olduğundan ve ağ ayarlarınızın doğru "
-"yapılandırıldığından emin olun."
+"Lütfen ağ kablonuzun bağlı olduğundan ve ağ ayarlarınızın doğru yapılandırıldığından emin olun."
 
 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 ""
 "Çalışan kablosuz ağ donanımı bulunamadı.\n"
-"Uyumlu WLAN USB donanımının takılı olduğundan emin olun ve ağ "
-"yapılandırmanızı doğru yaptığınızdan emin olun."
+"Uyumlu WLAN USB donanımının takılı olduğundan emin olun ve ağ yapılandırmanızı doğru yaptığınızdan emin olun."
 
 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 ""
 "Çalışan kablosuz ağ arayüzü bulunamadı.\n"
-" Uyumlu WLAN USB donanımının takılı olduğundan emin olun veya yerel ağ "
-"arayüzünü etkinleştirin."
+" Uyumlu WLAN USB donanımının takılı olduğundan emin olun veya yerel ağ arayüzünü etkinleştirin."
 
 msgid "No, but restart from begin"
 msgstr "Hayır, ama en başından başlat"
@@ -2552,7 +2493,8 @@ msgstr "Hayır, asla gönderme"
 msgid "None"
 msgstr "Yok"
 
-#. 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 "Doğrusal olmayan"
 
@@ -2563,12 +2505,8 @@ msgid "Norwegian"
 msgstr "Norveççe"
 
 #, python-format
-msgid ""
-"Not enough diskspace. Please free up some diskspace and try again. (%d MB "
-"required, %d MB available)"
-msgstr ""
-"Yeterli disk alanı yok. Lütfen gerekli disk alanını açın ve tekrar deneyin. "
-"(gereken: %d MB, kullanılabilen: %d MB)"
+msgid "Not enough diskspace. Please free up some diskspace and try again. (%d MB required, %d MB available)"
+msgstr "Yeterli disk alanı yok. Lütfen gerekli disk alanını açın ve tekrar deneyin. (gereken: %d MB, kullanılabilen: %d MB)"
 
 msgid ""
 "Nothing to scan!\n"
@@ -2580,14 +2518,8 @@ msgstr ""
 msgid "Now Playing"
 msgstr "Oynatılıyor"
 
-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 ""
-"Şimdi, kontrast ayarlarını kullanarak arkazemin üzerinde, ekrandaki iki "
-"parlaklık tonunu ayırt edebilecek şekilde ve mümkün olduğunca parlaklık "
-"seviyesini arttırın. İşlemi tamamladıktan sonra OK tuşuna basın."
+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 "Şimdi, kontrast ayarlarını kullanarak arkazemin üzerinde, ekrandaki iki parlaklık tonunu ayırt edebilecek şekilde ve mümkün olduğunca parlaklık seviyesini arttırın. İşlemi tamamladıktan sonra OK tuşuna basın."
 
 msgid "OK"
 msgstr "Tamam"
@@ -2623,7 +2555,7 @@ msgid "Only Free scan"
 msgstr "Yalnızca şifresiz"
 
 msgid "Only extensions."
-msgstr ""
+msgstr "Yalnızca eklentiler"
 
 msgid "Optionally enter your name if you want to."
 msgstr "Adınızı göndermek istiyorsanız adınızı giriniz."
@@ -2655,7 +2587,8 @@ msgstr "Paket yönetimi"
 msgid "Page"
 msgstr "Sayfa"
 
-#. 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"
 
@@ -2689,7 +2622,8 @@ msgstr "PiP Kurulumu"
 msgid "PicturePlayer"
 msgstr "Resim Oynatıcı"
 
-#. 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"
 
@@ -2739,26 +2673,21 @@ msgid "Please choose the default services lists you want to install."
 msgstr "Lütfen yüklemek istediğiniz varsayılan kanal listesini seçin."
 
 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 ""
-"Lütfen isim sunucu ayarlarınızı, gerekli alanları doldurarak yapılandırın "
-"veya mevcut bilgileri doğrulayın.\n"
+"Lütfen isim sunucu ayarlarınızı, gerekli alanları doldurarak yapılandırın veya mevcut bilgileri doğrulayın.\n"
 "Devam etmek için hazır olduğunuzda, OK tuşuna basın."
 
 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 ""
+"Lütfen internet bağlantı ayarlarınızı, gerekli alanları doldurarak yapılandırın.\n"
+"Devam etmek için hazır olduğunuzda, OK tuşuna basın."
 
-msgid ""
-"Please disconnect all USB devices from your Dreambox and (re-)attach the "
-"target USB stick (minimum size is 64 MB) now!"
-msgstr ""
-"Lütfen tüm USB aygıtlarını Dreambox'ınızdan çıkarın ve işlem yapmak "
-"istediğiniz USB belleği (min. 64MB kapasiteli) tekrar takın!"
+msgid "Please disconnect all USB devices from your Dreambox and (re-)attach the target USB stick (minimum size is 64 MB) now!"
+msgstr "Lütfen tüm USB aygıtlarını Dreambox'ınızdan çıkarın ve işlem yapmak istediğiniz USB belleği (min. 64MB kapasiteli) tekrar takın!"
 
 msgid "Please do not change any values unless you know what you are doing!"
 msgstr "Lütfen ne yaptığınızı bilmiyorsanız hiçbir değeri değiştirmeyin!"
@@ -2793,9 +2722,7 @@ msgstr "Adınızı (opsiyonel) buraya giriniz:"
 msgid "Please follow the instructions on the TV"
 msgstr "Lütfen Televizyonunuzdaki yönlendirmeleri takip edin."
 
-msgid ""
-"Please note that the previously selected media could not be accessed and "
-"therefore the default directory is being used instead."
+msgid "Please note that the previously selected media could not be accessed and therefore the default directory is being used instead."
 msgstr "Seçtiğiniz medyaya erişilemedi, yerine varsayılan klasör kullanılıyor."
 
 msgid "Please press OK to continue."
@@ -2838,8 +2765,7 @@ msgid "Please select the movie path..."
 msgstr "Lütfen film yol adını seçin..."
 
 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 ""
@@ -2852,6 +2778,9 @@ msgid ""
 "\n"
 "Please press OK to continue."
 msgstr ""
+"Bağlanmak istediğiniz kablosuz ağı seçin.\n"
+"\n"
+"Devam etmek için lütfen OK'a basın."
 
 msgid "Please set up tuner B"
 msgstr "Lütfen tuner B'yi yapılandırın"
@@ -2871,12 +2800,8 @@ msgstr ""
 "PiP penceresini boyutlandırmak için Buket +/- tuşlarını kullanın.\n"
 "TV kipine dönmek için OK'a veya taşımayı iptal etmek için EXIT tuşuna basın."
 
-msgid ""
-"Please use the UP and DOWN keys to select your language. Afterwards press "
-"the OK button."
-msgstr ""
-"Dil seçiminizi, yapmak için YUKARI ve AŞAĞI tuşlarını, onaylamak için OK "
-"tuşunu kullanın."
+msgid "Please use the UP and DOWN keys to select your language. Afterwards press the OK button."
+msgstr "Dil seçiminizi, yapmak için YUKARI ve AŞAĞI tuşlarını, onaylamak için OK tuşunu kullanın."
 
 msgid "Please wait for activation of your network configuration..."
 msgstr "Ağ yapılandırmanızın etkinleştirilmesi için lütfen bekleyin..."
@@ -2900,7 +2825,7 @@ msgid "Please wait while we test your network..."
 msgstr "Lütfen biz ağ yapılandırmanızı test ederken bekleyin..."
 
 msgid "Please wait while your network is restarting..."
-msgstr "Lütfen ağ yeniden başlatılırken bekleyin..."
+msgstr "Ağ diski yeniden başlatılırken lütfen bekleyin..."
 
 msgid "Please wait..."
 msgstr "Lütfen bekleyin..."
@@ -2975,10 +2900,10 @@ msgid "Press OK to activate the selected skin."
 msgstr "Arayüzü etkinleştirmek için OK'a basın."
 
 msgid "Press OK to activate the settings."
-msgstr "Ayarlarınızı etkinleştirmek için OK'a basın."
+msgstr "Onaylamak için OK tuşuna basın."
 
 msgid "Press OK to edit the settings."
-msgstr "Yapılandırma ayarlarınızı düzenlemek için OK tuşuna basın."
+msgstr "Düzenlemek için OK tuşuna basın."
 
 #, python-format
 msgid "Press OK to get further details for %s"
@@ -3069,7 +2994,7 @@ msgid "Random"
 msgstr "Rastgele"
 
 msgid "Really close without saving settings?"
-msgstr "Ayarları kaydetmeden çıkmak istiyor musunuz?"
+msgstr "Ayarlarınızı kaydetmeden çıkmak istediğinizden emin misiniz?"
 
 msgid "Really delete done timers?"
 msgstr "Tamamlanan zamanlayıcıları silmek istiyor musunuz?"
@@ -3106,7 +3031,7 @@ msgid "Recording"
 msgstr "Kaydediliyor"
 
 msgid "Recording paths..."
-msgstr ""
+msgstr "Kayıt konumları..."
 
 msgid "Recording(s) are in progress or coming up in few seconds!"
 msgstr "Kayıt işlemi devam ediyor veya birkaç saniye içinde başlayacak!"
@@ -3188,8 +3113,7 @@ msgid "Repeat Type"
 msgstr "Tekrarla"
 
 msgid "Repeating event currently recording... What do you want to do?"
-msgstr ""
-"Tekrarlama görevi verilmiş kayıt işlemi yapılıyor. Ne yapmak istersiniz?"
+msgstr "Tekrarlama görevi verilmiş kayıt işlemi yapılıyor. Ne yapmak istersiniz?"
 
 msgid "Repeats"
 msgstr "Tekrarlama sıklığı"
@@ -3204,8 +3128,7 @@ msgid "Reset video enhancement settings to system defaults?"
 msgstr "Görüntü iyileştirme ayarınız, sistem varsayılanına döndürülsün mü?"
 
 msgid "Reset video enhancement settings to your last configuration?"
-msgstr ""
-"Görüntü iyileştirme ayarlarınız, en son yapılandırmanıza döndürülsün mü?"
+msgstr "Görüntü iyileştirme ayarlarınız, en son yapılandırmanıza döndürülsün mü?"
 
 msgid "Resolution"
 msgstr "Çözünürlük"
@@ -3243,12 +3166,8 @@ msgstr "Geri yükleme çalışıyor"
 msgid "Restore system settings"
 msgstr "Sistem ayarlarını geri yükle"
 
-msgid ""
-"Restoring the settings is done. Please press OK to activate the restored "
-"settings now."
-msgstr ""
-"Ayarların geri yüklemesi tamamlandı. Geri yüklenen ayarların "
-"etkinleştirilmesi için OK tuşuna basın."
+msgid "Restoring the settings is done. Please press OK to activate the restored settings now."
+msgstr "Ayarların geri yüklemesi tamamlandı. Geri yüklenen ayarların etkinleştirilmesi için OK tuşuna basın."
 
 msgid "Resume from last position"
 msgstr "Kaldığı yerden devam et"
@@ -3267,7 +3186,7 @@ msgid "Return to file browser"
 msgstr "Dosya yöneticisine geri dön"
 
 msgid "Return to movie list"
-msgstr "Film listesine dön"
+msgstr "Film listesine geri dön"
 
 msgid "Return to previous service"
 msgstr "Önceki kanala dön"
@@ -3413,24 +3332,14 @@ msgstr "US MID bantını ara"
 msgid "Scan band US SUPER"
 msgstr "US SUPER bantını ara"
 
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"WLAN USB Stick\n"
-msgstr ""
-"Kablosuz ağ erişim noktalarını arayın ve WLAN USB donanımınızla bağlanın.\n"
+msgid "Scan your network for wireless Access Points and connect to them using your WLAN USB Stick\n"
+msgstr "Kablosuz ağ erişim noktalarını arayın ve WLAN USB donanımınızla bağlanın.\n"
 
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"selected wireless device.\n"
-msgstr ""
-"Ağınızdaki kablosuz erişim noktalarını arayın ve tercih ettiğiniz kablosuz "
-"erişim aygıtına bağlanın.\n"
+msgid "Scan your network for wireless Access Points and connect to them using your selected wireless device.\n"
+msgstr "Ağınızdaki kablosuz erişim noktalarını arayın ve tercih ettiğiniz kablosuz erişim aygıtına bağlanın.\n"
 
-msgid ""
-"Scans default lamedbs sorted by satellite with a connected dish positioner"
-msgstr ""
-"Bağlı pozisyoner üzerinden varsayılan lamedb dosyasıyla uydu sıralı arama "
-"yapar"
+msgid "Scans default lamedbs sorted by satellite with a connected dish positioner"
+msgstr "Bağlı pozisyoner üzerinden varsayılan lamedb dosyasıyla uydu sıralı arama yapar"
 
 msgid "Search east"
 msgstr "Doğu'yu ara"
@@ -3439,7 +3348,7 @@ msgid "Search west"
 msgstr "Batı'yı ara"
 
 msgid "Searching for available updates. Please wait..."
-msgstr ""
+msgstr "Güncellemeler kontrol ediliyor. Lütfen bekleyin..."
 
 msgid "Searching for new installed or removed packages. Please wait..."
 msgstr "Yeni yüklenen veya kaldırılan paketler aranıyor. Lütfen bekleyin..."
@@ -3583,9 +3492,7 @@ msgid "Set as default Interface"
 msgstr "Varsayılan arayüz olarak ata"
 
 msgid "Set available internal memory threshold for the warning."
-msgstr ""
-"Dahili belleğin belirtilen değere düşmesi halinde uyarı verilecek alt limiti "
-"giriniz."
+msgstr "Dahili belleğin belirtilen değere düşmesi halinde uyarı verilecek alt limiti giriniz."
 
 msgid "Set interface as default Interface"
 msgstr "Arayüzü varsayılan arayüz olarak ata"
@@ -3642,7 +3549,7 @@ msgid "Shows the state of your wireless LAN connection.\n"
 msgstr "Kablosuz ağ bağlantısı durumunu gösterir.\n"
 
 msgid "Shutdown"
-msgstr ""
+msgstr "Kapat"
 
 msgid "Shutdown Dreambox after"
 msgstr "Zamanlayıcı süresi: "
@@ -3687,7 +3594,7 @@ msgid "Skin..."
 msgstr "Arayüz"
 
 msgid "Skins"
-msgstr "Arayüzler"
+msgstr "Görsel Arayüzler"
 
 msgid "Sleep Timer"
 msgstr "Uyku zamanlayıcı"
@@ -3718,7 +3625,7 @@ msgid "Software"
 msgstr "Yazılım"
 
 msgid "Software management"
-msgstr ""
+msgstr "Yazılım yönetimi"
 
 msgid "Software restore"
 msgstr "Yedekle -> Bellenim güncelle"
@@ -3832,7 +3739,7 @@ msgid "Stop current event but not coming events"
 msgstr "Geçerli eylemi durdur ama gelecek eylemlere dokunma"
 
 msgid "Stop playing this movie?"
-msgstr "Filmi durdurmak istiyor musunuz?"
+msgstr "Film durdurulsun mu?"
 
 msgid "Stop test"
 msgstr "Testi durdur"
@@ -3888,7 +3795,8 @@ msgstr "Sembol oranı"
 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 "ÇEVİRMEN HAKKINDA"
 
@@ -3911,7 +3819,7 @@ msgid "Tags"
 msgstr "Etiketler"
 
 msgid "Temperature and Fan control"
-msgstr ""
+msgstr "Sıcaklık ve fan kontrolü"
 
 msgid "Terrestrial"
 msgstr "Karasal"
@@ -3938,30 +3846,21 @@ msgid ""
 "Thank you for using the wizard.\n"
 "Please press OK to continue."
 msgstr ""
+"Sihirbazı kullandığınız için teşekkür ederiz.\n"
+"Devam etmek için lütfen OK tuşuna basın."
 
 msgid ""
 "Thank you for using the wizard. Your box is now ready to use.\n"
 "Please press OK to start using your Dreambox."
 msgstr ""
-"Sihirbazı kullandığınız için teşekkür ederiz. Dreambox'ınız kullanıma "
-"hazır.\n"
+"Sihirbazı kullandığınız için teşekkür ederiz. Dreambox'ınız kullanıma hazır.\n"
 "Dreambox'ınızı kullanmaya başlamak için OK tuşuna basın."
 
-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 ""
-"Standart DVD biçimi H.264 (HDTV) video biçimini desteklemez. Bunun yerine "
-"Dreambox'ın DVD biçiminde (standart DVD oynatıcılarda oynatamazsınız) "
-"oluşturmak ister misiniz?"
+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 "Standart DVD biçimi H.264 (HDTV) video biçimini desteklemez. Bunun yerine Dreambox'ın DVD biçiminde (standart DVD oynatıcılarda oynatamazsınız) oluşturmak ister misiniz?"
 
-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 bellek artık önyükleme yapabilir. Yayınlanan son bellenimi sunucudan "
-"indirmek ve usb belleğe kaydetmek istiyor musunuz?"
+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 bellek artık önyükleme yapabilir. Yayınlanan son bellenimi sunucudan indirmek ve usb belleğe kaydetmek istiyor musunuz?"
 
 msgid "The backup failed. Please choose a different backup location."
 msgstr "Yedek alınamadı. Lütfen başka bir yedekleme konumu seçin."
@@ -3971,6 +3870,8 @@ msgid ""
 "The directory %s is not writable.\n"
 "Make sure you select a writable directory instead."
 msgstr ""
+"%s klasörüne yazma hakkı yok.\n"
+"Seçtiğiniz klasörün yazılabilir olduğuna emin olunuz."
 
 #, python-format
 msgid ""
@@ -3991,37 +3892,22 @@ msgstr "Aşağıdaki dosyalar bulundu..."
 
 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 ""
 "Görüntü girişi ayarı tamamlandı.\n"
-"Şimdi ekranınızı, size gösterilecek bazı test resimleri ile "
-"ayarlayabilirsiniz. Bunu şimdi yapmak istiyor musunuz?"
+"Şimdi ekranınızı, size gösterilecek bazı test resimleri ile ayarlayabilirsiniz. Bunu şimdi yapmak istiyor musunuz?"
 
 msgid "The installation of the default services lists is finished."
 msgstr "Varsayılan kanal listesi kurulumu tamamlandı."
 
-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 ""
-"Varsayılan kanal listesi kurulumu tamamlandı. OK tuşuna bastıktan sonra "
-"Dreambox'ınızı yapılandırmaya devam edebilirsiniz."
+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 "Varsayılan kanal listesi kurulumu tamamlandı. OK tuşuna bastıktan sonra Dreambox'ınızı yapılandırmaya devam edebilirsiniz."
 
-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 imza doğrulama başarısız, dosya bozuk olabilir! Bu bellenimi flaş "
-"belleğe yazmak istediğinizden emin misiniz? Onaylamanız halinde risk size "
-"aittir!"
+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 imza doğrulama başarısız, dosya bozuk olabilir! Bu bellenimi flaş belleğe yazmak istediğinizden emin misiniz? Onaylamanız halinde risk size aittir!"
 
-msgid ""
-"The md5sum validation failed, the file may be downloaded incompletely or be "
-"corrupted!"
-msgstr ""
-"md5sum imza doğrulama başarısız, dosya tam indirilememiş veya bozuk olabilir!"
+msgid "The md5sum validation failed, the file may be downloaded incompletely or be corrupted!"
+msgstr "md5sum imza doğrulama başarısız, dosya tam indirilememiş veya bozuk olabilir!"
 
 msgid "The package doesn't contain anything."
 msgstr "Bu paket herhangi birşey içermiyor."
@@ -4069,11 +3955,8 @@ msgstr ""
 "Kablosuz ağ (WLAN) eklentisi yüklenmemiş!\n"
 "Lütfen yükleyin."
 
-msgid ""
-"The wizard can backup your current settings. Do you want to do a backup now?"
-msgstr ""
-"Bu sihirbaz geçerli ayarlarınızın yedeğini alacaktır. Yedeği şimdi almak "
-"istiyor musunuz?"
+msgid "The wizard can backup your current settings. Do you want to do a backup now?"
+msgstr "Bu sihirbaz geçerli ayarlarınızın yedeğini alacaktır. Yedeği şimdi almak istiyor musunuz?"
 
 msgid "The wizard is finished now."
 msgstr "Sihirbaz tamamlandı."
@@ -4082,7 +3965,7 @@ msgid "There are at least "
 msgstr "En az "
 
 msgid "There are currently no outstanding actions."
-msgstr ""
+msgstr "Seçilmiş bir görev yok."
 
 msgid "There are no default services lists in your image."
 msgstr "Kurulu bellenimde kayıtlı, varsayılan kanal listesi yok."
@@ -4091,7 +3974,7 @@ msgid "There are no default settings in your image."
 msgstr "Kurulu bellenimde kayıtlı varsayılan ayar yok."
 
 msgid "There are no updates available."
-msgstr ""
+msgstr "Yeni güncelleme yok."
 
 msgid "There are now "
 msgstr "Cihazın belleğinde "
@@ -4113,26 +3996,14 @@ msgstr "Hata oluştu. Seçilen:"
 msgid "This .NFI file does not contain a valid %s image!"
 msgstr ".NFI dosyası geçerli bir %s bellenimi içermiyor!"
 
-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 ""
-".NFI dosyası md5sum imzasına sahip değil ve çalışacağı garanti edilemiyor. "
-"Bu bellenimi flaş belleğe yazmak istediğinizden emin misiniz?"
+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 ".NFI dosyası md5sum imzasına sahip değil ve çalışacağı garanti edilemiyor. Bu bellenimi flaş belleğe yazmak istediğinizden emin misiniz?"
 
-msgid ""
-"This .NFI file has a valid md5 signature. Continue programming this image to "
-"flash memory?"
-msgstr ""
-".NFI dosyası md5sum imzası doğrulandı. Bu bellenimi, flaş belleğe "
-"programlamaya devam etmek istiyor musunuz?"
+msgid "This .NFI file has a valid md5 signature. Continue programming this image to flash memory?"
+msgstr ".NFI dosyası md5sum imzası doğrulandı. Bu bellenimi, flaş belleğe programlamaya devam etmek istiyor musunuz?"
 
-msgid ""
-"This DVD RW medium is already formatted - reformatting will erase all "
-"content on the disc."
-msgstr ""
-"DVD-RW medyası zaten biçimlendirilmiş - yeniden biçimlendirme tüm disk "
-"içeriğini silecektir."
+msgid "This DVD RW medium is already formatted - reformatting will erase all content on the disc."
+msgstr "DVD-RW medyası zaten biçimlendirilmiş - yeniden biçimlendirme tüm disk içeriğini silecektir."
 
 #, python-format
 msgid "This Dreambox can't decode %s streams!"
@@ -4164,15 +4035,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 ""
 "Bu işlem yapılandırdığınız isim sunucularını (DNS) test eder.\n"
 "\"doğrulanamadı\" mesajı alırsanız:\n"
-"- DHCP servisini sağlayan donanımınızı, kabloyu ve ağ donanımınızı kontrol "
-"edin\n"
-"- İsim sunucuyu (DNS) elle ayarladıysanız \"İsim sunucu (DNS)\" "
-"yapılandırmanızı gözden geçirin"
+"- DHCP servisini sağlayan donanımınızı, kabloyu ve ağ donanımınızı kontrol edin\n"
+"- İsim sunucuyu (DNS) elle ayarladıysanız \"İsim sunucu (DNS)\" yapılandırmanızı gözden geçirin"
 
 msgid ""
 "This test checks whether a network cable is connected to your LAN-Adapter.\n"
@@ -4194,25 +4062,20 @@ msgstr ""
 "Bu işlem yerel ağ donanımınızın IP adresinin geçerliliğini test edecektir.\n"
 "\"doğrulanamadı\" mesajı alırsanız:\n"
 "- IP adresi hatalı/geçersizdir\n"
-"- DHCP servisini sağlayan donanımınızı, kabloyu ve ağ donanımınızın "
-"yapılandırmasını kontrol edin"
+"- DHCP servisini sağlayan donanımınızı, kabloyu ve ağ donanımınızın yapılandırmasını kontrol edin"
 
 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 ""
-"Bu işlem ağ donanımınızın, IP adresini DHCP servisinden alıp almadığını test "
-"eder.\n"
+"Bu işlem ağ donanımınızın, IP adresini DHCP servisinden alıp almadığını test eder.\n"
 "Eğer \"devre dışı\" mesajı alıyorsanız:\n"
 "- Yerel ağ donanım yapılandırmanızda IP adresini elle girmiş olabilirsiniz.\n"
-"- Ağ donanımıAdaptör yapılandırmasında kullandığınız IP bilgisini "
-"doğrulayın.\n"
+"- Ağ donanımıAdaptör yapılandırmasında kullandığınız IP bilgisini doğrulayın.\n"
 "Eğer \"açık\" mesajı alıyorsanız:\n"
 "- Sağlıklı çalışan bir DHCP sunucusu kullandığınızdan emin olun."
 
@@ -4266,7 +4129,7 @@ msgstr ""
 "Lütfen tekrar kontrol edin!"
 
 msgid "Timer record location"
-msgstr ""
+msgstr "Zamanlayıcı kaydı konumu"
 
 msgid "Timer sanity error"
 msgstr "Zamanlayıcı hatası"
@@ -4281,7 +4144,7 @@ msgid "Timeshift"
 msgstr "Zamanı bük"
 
 msgid "Timeshift location"
-msgstr ""
+msgstr "Zaman bükücü kayıt konumu"
 
 msgid "Timeshift not possible!"
 msgstr "Zaman bükücü kullanılamaz!"
@@ -4303,20 +4166,14 @@ msgstr "Başlıkseti kipi"
 
 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 ""
-"Lütfen Dreambox bellenimini güncellemek için, aşağıdaki adımları takip "
-"edin:\n"
-"1) Dreambox'ınızı, arkasındaki kapama anahtarından kapayın ve önyükleme "
-"yapabilir USB belleği takın.\n"
-"2) Ön panelde yer alan AŞAĞI tuşuna basın ve cihazı tekrar açın. 10 saniye "
-"boyunca AŞAĞI tuşunu bırakmayın.\n"
-"3) Önyüklemenin yapılmasını bekleyin ve sihirbazın yapacağı yönlendirmeleri "
-"takip edin."
+"Lütfen Dreambox bellenimini güncellemek için, aşağıdaki adımları takip edin:\n"
+"1) Dreambox'ınızı, arkasındaki kapama anahtarından kapayın ve önyükleme yapabilir USB belleği takın.\n"
+"2) Ön panelde yer alan AŞAĞI tuşuna basın ve cihazı tekrar açın. 10 saniye boyunca AŞAĞI tuşunu bırakmayın.\n"
+"3) Önyüklemenin yapılmasını bekleyin ve sihirbazın yapacağı yönlendirmeleri takip edin."
 
 msgid "Today"
 msgstr "Bugün"
@@ -4358,12 +4215,10 @@ msgid "Tries left:"
 msgstr "Denendi:"
 
 msgid "Try to find used Transponders in cable network.. please wait..."
-msgstr ""
-"Kullanılan Transponderlar kablolu yayın ağında aranıyor.. lütfen bekleyin..."
+msgstr "Kullanılan Transponderlar kablolu yayın ağında aranıyor.. lütfen bekleyin..."
 
 msgid "Try to find used transponders in cable network.. please wait..."
-msgstr ""
-"Kullanılan transponderlar kablolu yayın ağında aranıyor.. lütfen bekleyin..."
+msgstr "Kullanılan transponderlar kablolu yayın ağında aranıyor.. lütfen bekleyin..."
 
 msgid "Trying to download a new packetlist. Please wait..."
 msgstr "Paket listesi indiriliyor. Lütfen bekleyin..."
@@ -4438,10 +4293,10 @@ msgid "Uncommitted DiSEqC command"
 msgstr "Bağımsız DiSEqC tekrarı"
 
 msgid "Undo install"
-msgstr ""
+msgstr "Yükle(me)"
 
 msgid "Undo uninstall"
-msgstr ""
+msgstr "Kaldır(ma)"
 
 msgid "Unicable"
 msgstr "Unicable"
@@ -4453,7 +4308,7 @@ msgid "Unicable Martix"
 msgstr "Unicable Matris"
 
 msgid "Uninstall"
-msgstr ""
+msgstr "Kaldır"
 
 msgid "Universal LNB"
 msgstr "Üniversal LNB"
@@ -4474,21 +4329,19 @@ msgid "Updating finished. Here is the result:"
 msgstr "Güncelleme tamamlandı. Sonucu burada görebilirsiniz:"
 
 msgid "Updating software catalog"
-msgstr ""
+msgstr "Yazılım kataloğu güncelleniyor"
 
 msgid "Updating... Please wait... This can take some minutes..."
-msgstr ""
-"Güncelleniyor... Lütfen bekleyin... Bu işlem birkaç dakika sürebilir..."
+msgstr "Güncelleniyor... Lütfen bekleyin... Bu işlem birkaç dakika sürebilir..."
 
 msgid "Upgrade finished."
 msgstr "Güncelleme tamamlandı."
 
 msgid "Upgrade finished. Do you want to reboot your Dreambox?"
-msgstr ""
-"Güncelleme tamamlandı. Dreambox'ınızı yeniden başlatmak istiyor musunuz?"
+msgstr "Güncelleme tamamlandı. Dreambox'ınızı yeniden başlatmak istiyor musunuz?"
 
 msgid "Upgrading"
-msgstr "Güncelleniyor"
+msgstr "Yazılımı güncelle"
 
 msgid "Upgrading Dreambox... Please wait"
 msgstr "Dreambox güncelleniyor... Lütfen bekleyin"
@@ -4526,12 +4379,8 @@ msgstr ""
 "\n"
 "Lütfen tuner A'yi yapılandırın"
 
-msgid ""
-"Use the up/down keys on your remote control to select an option. After that, "
-"press OK."
-msgstr ""
-"Seçiminizi yapmak için kumandanızın yukarı/aşağı tuşlarını, onaylamak için "
-"OK tuşunu kullanın."
+msgid "Use the up/down keys on your remote control to select an option. After that, press OK."
+msgstr "Seçiminizi yapmak için kumandanızın yukarı/aşağı tuşlarını, onaylamak için OK tuşunu kullanın."
 
 msgid "Use this video enhancement settings?"
 msgstr "Düzenlediğiniz görüntü iyileştirme ayarları kullanılsın mı?"
@@ -4590,15 +4439,13 @@ msgstr "Görüntü iyileştirme kurulumu"
 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 ""
 "Görüntü kaynak seçimi\n"
 "\n"
-"Lütfen bu sayfayı TV'nizde görebiliyorsanız OK tuşuna basın (yada farklı bir "
-"giriş seçin).\n"
+"Lütfen bu sayfayı TV'nizde görebiliyorsanız OK tuşuna basın (yada farklı bir giriş seçin).\n"
 "\n"
 "Sonraki giriş 10 saniye sonra otomatik olarak test edilecektir."
 
@@ -4630,10 +4477,10 @@ msgid "View list of available CommonInterface extensions"
 msgstr "Ortak arayüz eklentileri"
 
 msgid "View list of available Display and Userinterface extensions."
-msgstr "Görünüm ve kullanıcı arayüzü eklentileri"
+msgstr "Görüntü ve kullanıcı arayüz yönetim eklentilerini buradan yönetebilirsiniz"
 
 msgid "View list of available EPG extensions."
-msgstr "EPG eklentileri"
+msgstr "EPG eklentilerini buradan yönetebilirsiniz"
 
 msgid "View list of available Satteliteequipment extensions."
 msgstr "Uydu ekipmanı eklentileri"
@@ -4648,19 +4495,19 @@ msgid "View list of available multimedia extensions."
 msgstr "Çoklu ortam eklentileri"
 
 msgid "View list of available networking extensions"
-msgstr "Ağ eklentileri"
+msgstr "Ağ eklentilerini buradan yönetebilirsiniz"
 
 msgid "View list of available recording extensions"
-msgstr "Kaydetme eklentileri"
+msgstr "Film, DVD kaydetme eklentilerini buradan yönetebilirsiniz"
 
 msgid "View list of available skins"
-msgstr "Arayüzler"
+msgstr "Görsel arayüz eklentilerini buradan yönetebilirsiniz"
 
 msgid "View list of available software extensions"
 msgstr "Yazılım eklentileri"
 
 msgid "View list of available system extensions"
-msgstr "Sistem eklentileri"
+msgstr "Sistem yönetimini kolaylaştıran eklentileri buradan yönetebilirsiniz"
 
 msgid "View teletext..."
 msgstr "Teleteksi aç..."
@@ -4699,13 +4546,10 @@ msgid "Warn if free space drops below (kB):"
 msgstr "Boş alan belirtilen eşiğin altına inince uyar (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 ""
-"Şimdi, Televizyonunuzun bu çözünürlükte 50Hz 'deki davranışını test "
-"edeceğiz. Eğer ekranınız siyah olarak kalırsa, 60Hz'e geçebilmek için 20 "
-"saniye bekleyin.\n"
+"Şimdi, Televizyonunuzun bu çözünürlükte 50Hz 'deki davranışını test edeceğiz. Eğer ekranınız siyah olarak kalırsa, 60Hz'e geçebilmek için 20 saniye bekleyin.\n"
 "Başlamak için lütfen OK tuşuna basın."
 
 msgid "Wed"
@@ -4715,55 +4559,47 @@ msgid "Wednesday"
 msgstr "Çarşamba"
 
 msgid "Weekday"
-msgstr "Gün"
+msgstr "Haftaiçi"
 
 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 ""
 "Kesim listesi düzenleyiciye hoşgeldiniz.\n"
 "\n"
-"Kesmek istediğiniz bölümün başına konumlanın. OK tuşuna basın ve 'buradan "
-"kes' deyin.\n"
+"Kesmek istediğiniz bölümün başına konumlanın. OK tuşuna basın ve 'buradan kes' deyin.\n"
 "\n"
-"Sonrasında kesmek istediğiniz bölümün sonuna konumlanın. Tekrar OK tuşuna "
-"basın ve 'kesimi burada bitir' deyin."
+"Sonrasında kesmek istediğiniz bölümün sonuna konumlanın. Tekrar OK tuşuna basın ve 'kesimi burada bitir' deyin."
 
-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 ""
-"Bellenim güncelleme sihirbazına hoş geldiniz. Bu sihirbaz, Dreambox bellenim "
-"güncellemesi esnasında, geçerli ayarlarınızın yedeğini almanıza imkan "
-"sağlayacak ve kısa açıklamalarla bellenimi nasıl güncelleyeceğinizi "
-"anlatacaktır."
+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 "Bellenim güncelleme sihirbazına hoş geldiniz. Bu sihirbaz, Dreambox bellenim güncellemesi esnasında, geçerli ayarlarınızın yedeğini almanıza imkan sağlayacak ve kısa açıklamalarla bellenimi nasıl güncelleyeceğinizi anlatacaktır."
 
 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 ""
+"Temizlik sihirbazına hoşgeldiniz.\n"
+"\n"
+"Cihazınızın kullanılabilir dahili belleği 2MB'ın altına düşmüş durumda.\n"
+"Dreambox'ınızın sağlıklı çalışabilmesi için, kullanılabilir dahili bellek alanının artırılması gerekmektedir.\n"
+"Bu sihirbazı kullanarak ihtiyaç duymadığınız eklentileri kaldırabilirsiniz.\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 ""
 "Hoşgeldiniz.\n"
 "\n"
-"Dreambox'ınızı internete bağlamak istiyorsanız, bu sihirbaz size ağ "
-"yapılandırmanızı yapabilmeniz için rehberlik yapacaktır.\n"
+"Dreambox'ınızı internete bağlamak istiyorsanız, bu sihirbaz size ağ yapılandırmanızı yapabilmeniz için rehberlik yapacaktır.\n"
 "\n"
 "Ağ yapılandırmasına başlamak için OK tuşuna basın"
 
@@ -4793,16 +4629,13 @@ msgstr "Gönderilen günlükler ne yapılsı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 ""
-"Fabrika ayarlarına geri döndüğünüzde, yapılandırma dosyalarınızın tamamını "
-"KAYBEDEBİLİRSİNİZ\n"
+"Fabrika ayarlarına geri döndüğünüzde, yapılandırma dosyalarınızın tamamını KAYBEDEBİLİRSİNİZ\n"
 "(buketler, kanallar, uydu verileri ve özel ayar dosyalarınız ...)\n"
-"Fabrika ayarlarına geri dönüldükten sonra, uydu alıcınız otomatik olarak "
-"yeniden başlatılacaktır!\n"
+"Fabrika ayarlarına geri dönüldükten sonra, uydu alıcınız otomatik olarak yeniden başlatılacaktır!\n"
 "\n"
 "Fabrika ayarlarına geri dönmek istediğinizden emin misiniz?"
 
@@ -4822,7 +4655,7 @@ msgid "Wireless Network"
 msgstr "Kablosuz Ağ"
 
 msgid "Wireless Network State"
-msgstr ""
+msgstr "Kablosuz ağ durumu"
 
 msgid "Write error while recording. Disk full?\n"
 msgstr "Kaydederken hata oluştu. Disk dolu mu?\n"
@@ -4843,7 +4676,7 @@ msgid "Yes"
 msgstr "Evet"
 
 msgid "Yes to all"
-msgstr ""
+msgstr "Tümüne evet"
 
 msgid "Yes, and delete this movie"
 msgstr "Evet, ve bu filmi sil"
@@ -4881,12 +4714,8 @@ msgstr "Eklenti yüklemeyi iptal edebilirsiniz."
 msgid "You can cancel the removal."
 msgstr "Eklenti kaldırmayı iptal edebilirsiniz."
 
-msgid ""
-"You can choose some default settings now. Please select the settings you "
-"want to be installed."
-msgstr ""
-"Şimdi varsayılan ayarlarlardan bazılarını seçebililirsiniz. Lütfen yüklemek "
-"istediğiniz ayarları seçin."
+msgid "You can choose some default settings now. Please select the settings you want to be installed."
+msgstr "Şimdi varsayılan ayarlarlardan bazılarını seçebililirsiniz. Lütfen yüklemek istediğiniz ayarları seçin."
 
 msgid "You can choose, what you want to install..."
 msgstr "Yüklemek istediğinizi seçebilirsiniz..."
@@ -4895,7 +4724,7 @@ msgid "You can install this plugin."
 msgstr "Bu eklentiyi yükleyebilirsiniz."
 
 msgid "You can only burn Dreambox recordings!"
-msgstr ""
+msgstr "Yalnızca Dreambox'ta kaydettiğiniz videoları yazabilirsiniz!"
 
 msgid "You can remove this plugin."
 msgstr "Bu eklentiyi kaldırabilirsiniz."
@@ -4906,92 +4735,51 @@ msgstr "Bunu silemezsiniz!"
 msgid "You chose not to install any default services lists."
 msgstr "Varsayılan kanal listesi seçmediniz."
 
-msgid ""
-"You chose not to install any default settings. You can however install the "
-"default settings later in the settings menu."
-msgstr ""
-"Yüklenmek üzere herhangi bir varsayılan ayar seçmediniz. Daha sonra yüklemek "
-"isterseniz 'Kurulum' menüsünde yer alan  'Varsayılan ayarlar' seçeneğini "
-"kullanabilirsiniz."
+msgid "You chose not to install any default settings. You can however install the default settings later in the settings menu."
+msgstr "Yüklenmek üzere herhangi bir varsayılan ayar seçmediniz. Daha sonra yüklemek isterseniz 'Kurulum' menüsünde yer alan  'Varsayılan ayarlar' seçeneğini kullanabilirsiniz."
 
-msgid ""
-"You chose not to install anything. Please press OK finish the install wizard."
-msgstr ""
-"Yüklemek üzere hiçbirşey seçmediniz. Sihirbazı sonlandırmak için OK tuşuna "
-"basın."
+msgid "You chose not to install anything. Please press OK finish the install wizard."
+msgstr "Yüklemek üzere hiçbirşey seçmediniz. Sihirbazı sonlandırmak için OK tuşuna basın."
 
-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 ""
-"Dreambox'a bağlı bir sabit disk görünmüyor. Bu işlem için sabit diski "
-"kullanma opsiyonunuz bulunmamaktadır."
+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 "Dreambox'a bağlı bir sabit disk görünmüyor. Bu işlem için sabit diski kullanma opsiyonunuz bulunmamaktadır."
 
 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 ""
-"Ayarlarınızın yedeğini CF (compact flash) karta almayı seçtiniz. Kart, "
-"yuvasına takılmış olmalıdır. Sabit diske yedek almak daha güvenlidir!\n"
+"Ayarlarınızın yedeğini CF (compact flash) karta almayı seçtiniz. Kart, yuvasına takılmış olmalıdır. Sabit diske yedek almak daha güvenlidir!\n"
 "Yedeklemeyi başlatmak için OK tuşuna basın."
 
 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 ""
-"Ayarlarınızın yedeğini USB sürücüye almayı seçtiniz. Sabit diske yedek almak "
-"daha güvenlidir!\n"
+"Ayarlarınızın yedeğini USB sürücüye almayı seçtiniz. Sabit diske yedek almak daha güvenlidir!\n"
 "Yedeklemeyi başlatmak için OK tuşuna basın."
 
-msgid ""
-"You have chosen to backup to your harddisk. Please press OK to start the "
-"backup now."
-msgstr ""
-"Ayarlarınızın yedeğini sabit diske almayı seçtiniz. Yedeklemeyi başlatmak "
-"için lüften OK tuşuna basın."
+msgid "You have chosen to backup to your harddisk. Please press OK to start the backup now."
+msgstr "Ayarlarınızın yedeğini sabit diske almayı seçtiniz. Yedeklemeyi başlatmak için lüften OK tuşuna basın."
 
-msgid ""
-"You have chosen to backup your settings. Please press OK to start the backup "
-"now."
-msgstr ""
-"Ayarlarınızı yedeklemeyi seçtiniz. Yedeklemeyi başlatmak için OK tuşuna "
-"basın..."
+msgid "You have chosen to backup your settings. Please press OK to start the backup now."
+msgstr "Ayarlarınızı yedeklemeyi seçtiniz. Yedeklemeyi başlatmak için OK tuşuna basın..."
 
-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 ""
-"Önyükleme yapabilir .NFI flaşlayıcı USB bellek oluşturmayı seçtiniz. Bu "
-"işlem USB belleğin yeniden bölümlendirmesini gerektirdiğinden içeriğindeki "
-"tüm veriler silinecektir."
+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 "Önyükleme yapabilir .NFI flaşlayıcı USB bellek oluşturmayı seçtiniz. Bu işlem USB belleğin yeniden bölümlendirmesini gerektirdiğinden içeriğindeki tüm veriler silinecektir."
 
-msgid ""
-"You have chosen to restore your settings. Enigma2 will restart after "
-"restore. Please press OK to start the restore now."
-msgstr ""
-"Ayarlarınızı geri yüklemeyi seçtiniz. Geri yükleme işleminin ardından "
-"Enigma2 yeniden başlayacaktır. Geri yüklemeyi başlatmak için OK tuşuna "
-"basın..."
+msgid "You have chosen to restore your settings. Enigma2 will restart after restore. Please press OK to start the restore now."
+msgstr "Ayarlarınızı geri yüklemeyi seçtiniz. Geri yükleme işleminin ardından Enigma2 yeniden başlayacaktır. Geri yüklemeyi başlatmak için OK tuşuna basın..."
 
 #, python-format
 msgid "You have to wait %s!"
 msgstr "Bekleme süresi : %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 ""
-"Dreambox'ınızın PC bağlantısına ihtiyacı var. Daha fazla açıklamaya "
-"ihtiyacınız varsa, lütfen http://www.dream-multimedia-tv.de adresini ziyaret "
-"edin.\n"
-"Dreambox'ınız şimdi kapatılıyor. Web sitesinde belirtilen güncelleme "
-"talimatlarını yerine getirdikten sonra yeni bellenim, ayarlarınızı geri "
-"yüklemek isteyip istemediğiniz sorusunu soracaktır."
+"Dreambox'ınızın PC bağlantısına ihtiyacı var. Daha fazla açıklamaya ihtiyacınız varsa, lütfen http://www.dream-multimedia-tv.de adresini ziyaret edin.\n"
+"Dreambox'ınız şimdi kapatılıyor. Web sitesinde belirtilen güncelleme talimatlarını yerine getirdikten sonra yeni bellenim, ayarlarınızı geri yüklemek isteyip istemediğiniz sorusunu soracaktır."
 
 msgid ""
 "You need to set a pin code and hide it from your children.\n"
@@ -5008,6 +4796,10 @@ msgid ""
 "Your internet connection is working now.\n"
 "\n"
 msgstr ""
+"Drambox'ınız kullanımınız için hazır.\n"
+"\n"
+"Internet bağlantınız çalışıyor.\n"
+"\n"
 
 msgid ""
 "Your Dreambox is now ready to use.\n"
@@ -5016,34 +4808,29 @@ msgid ""
 "\n"
 "Please press OK to continue."
 msgstr ""
+"Drambox'ınız kullanımınız için hazır.\n"
+"\n"
+"Internet bağlantınız çalışıyor.\n"
+"\n"
+"Devam etmek için lütfen OK tuşuna basın."
 
 msgid "Your Dreambox will restart after pressing OK on your remote control."
-msgstr ""
-"Kumandanızda OK tuşuna bastıktan sonra Dreambox'ınız yeniden başlatılacak."
+msgstr "Kumandanızda OK tuşuna bastıktan sonra Dreambox'ınız yeniden başlatılacak."
 
 msgid "Your TV works with 50 Hz. Good!"
 msgstr "Televizyonunuz 50Hz destekliyor. Güzel!"
 
-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 "Yedek başarıyla alındı. Şimdi güncelleme işlemine devam edeceğiz."
 
-msgid ""
-"Your collection exceeds the size of a single layer medium, you will need a "
-"blank dual layer DVD!"
-msgstr ""
-"Koleksiyonunuz tek katman DVD'ye sığmıyor, çift katman DVD kullanmanız "
-"gerekiyor!"
+msgid "Your collection exceeds the size of a single layer medium, you will need a blank dual layer DVD!"
+msgstr "Koleksiyonunuz tek katman DVD'ye sığmıyor, çift katman DVD kullanmanız gerekiyor!"
 
 msgid "Your dreambox is shutting down. Please stand by..."
 msgstr "Dreambox'ınız kapatılıyor. Lütfen bekleyin..."
 
-msgid ""
-"Your dreambox isn't connected to the internet properly. Please check it and "
-"try again."
-msgstr ""
-"Dreambox'ınız internete bağlı değil. Kontrol ettikten sonra tekrar deneyin."
+msgid "Your dreambox isn't connected to the internet properly. Please check it and try again."
+msgstr "Dreambox'ınız internete bağlı değil. Kontrol ettikten sonra tekrar deneyin."
 
 msgid "Your email address:"
 msgstr "Eposta adresiniz:"
@@ -5059,6 +4846,8 @@ msgid ""
 "Your internet connection is not working!\n"
 "Please choose what you want to do next."
 msgstr ""
+"İnternet bağlantınız çalışmıyor!\n"
+"Sonraki aşamada yapmak istediğiniz işlemi seçiniz."
 
 msgid "Your name (optional):"
 msgstr "Adınız (opsiyonel):"
@@ -5089,13 +4878,10 @@ msgstr ""
 "Lütfen sonraki adımda yapmak istediğiniz işlemi seçin."
 
 msgid "Zap back to service before positioner setup?"
-msgstr ""
-"Pozisyoner kurulumundan çıktıktan sonra seyrettiğiniz kanala dönmek istiyor "
-"musunuz?"
+msgstr "Pozisyoner kurulumundan çıktıktan sonra seyrettiğiniz kanala dönmek istiyor musunuz?"
 
 msgid "Zap back to service before satfinder?"
-msgstr ""
-"Uydu arayıcıdan çıktıktan sonra seyrettiğiniz kanala dönmek istiyor musunuz?"
+msgstr "Uydu arayıcıdan çıktıktan sonra seyrettiğiniz kanala dönmek istiyor musunuz?"
 
 msgid "[alternative edit]"
 msgstr "[alternatif düzenle]"
@@ -5131,7 +4917,7 @@ msgid "activate current configuration"
 msgstr "geçerli yapılandırmayı etkinleştir"
 
 msgid "activate network adapter configuration"
-msgstr ""
+msgstr "ağ adaptör ayarlarını etkinleştir"
 
 msgid "add Provider"
 msgstr "Yayıncı ekle"
@@ -5321,7 +5107,7 @@ msgid "delete..."
 msgstr "sil..."
 
 msgid "disable"
-msgstr "devre dışı"
+msgstr "kapat"
 
 msgid "disable move mode"
 msgstr "taşıma kipini kapat"
@@ -5435,10 +5221,10 @@ msgid "free diskspace"
 msgstr "boş disk alanı"
 
 msgid "go to deep standby"
-msgstr "kapat"
+msgstr "derin uyku kipine geç"
 
 msgid "go to standby"
-msgstr "hazırda beklet"
+msgstr "uyku kipine geç"
 
 msgid "grab this frame as bitmap"
 msgstr "bu çerçeveyi bitmap olarak yakala"
@@ -5548,7 +5334,7 @@ msgid "menulist"
 msgstr "menü listesi"
 
 msgid "mins"
-msgstr "dk."
+msgstr "dakika"
 
 msgid "minute"
 msgstr "dakika"
@@ -5686,7 +5472,7 @@ msgid "previous channel in history"
 msgstr "Hafızadaki önceki kanal"
 
 msgid "record"
-msgstr "kayıt"
+msgstr "kaydet"
 
 msgid "recording..."
 msgstr "kaydediliyor..."
@@ -5846,7 +5632,7 @@ msgid "shuffle playlist"
 msgstr "oynatma listesini karıştır"
 
 msgid "shut down"
-msgstr ""
+msgstr "kapat"
 
 msgid "shutdown"
 msgstr "kapat"
@@ -5998,12 +5784,8 @@ msgstr "evet"
 msgid "yes (keep feeds)"
 msgstr "evet (beslemeleri tut)"
 
-msgid ""
-"your dreambox might be unusable now. Please consult the manual for further "
-"assistance before rebooting your dreambox."
-msgstr ""
-"Dreambox'ınız şu an kullanılamaz durumda. Lütfen Dreambox'ınızı yeniden "
-"açmadan önce kullanım kılavuzundan yardım alın."
+msgid "your dreambox might be unusable now. Please consult the manual for further assistance before rebooting your dreambox."
+msgstr "Dreambox'ınız şu an kullanılamaz durumda. Lütfen Dreambox'ınızı yeniden açmadan önce kullanım kılavuzundan yardım alın."
 
 msgid "zap"
 msgstr "değiştir"
@@ -6036,8 +5818,7 @@ msgstr "kanal değiştirildi"
 #~ msgstr "\"?"
 
 #~ msgid ".NFI Flasher bootable USB stick successfully created."
-#~ msgstr ""
-#~ "USB bellek için önyükleme yapabilir .NFI Flaşlayıcı başarıyla oluşturuldu."
+#~ msgstr "USB bellek için önyükleme yapabilir .NFI Flaşlayıcı başarıyla oluşturuldu."
 
 #~ msgid "AGC"
 #~ msgstr "AGC"
@@ -6128,8 +5909,7 @@ msgstr "kanal değiştirildi"
 #~ msgstr "DVD yukarı"
 
 #~ msgid "Decompressing USB stick flasher boot image..."
-#~ msgstr ""
-#~ "Sıkıştırılmış önyükleme yapabilir USB bellek flaşlayıcı çıkartılıyor..."
+#~ msgstr "Sıkıştırılmış önyükleme yapabilir USB bellek flaşlayıcı çıkartılıyor..."
 
 #~ msgid "Details"
 #~ msgstr "Detaylar"
@@ -6233,60 +6013,44 @@ msgstr "kanal değiştirildi"
 
 #~ 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 ""
 #~ "Çalışan yerel ağ donanımı bulunamadı.\n"
-#~ "Lütfen ağ kablonuzun bağlı olduğundan ve ağ ayarlarınızın doğru "
-#~ "yapılandırıldığından emin olun."
+#~ "Lütfen ağ kablonuzun bağlı olduğundan ve ağ ayarlarınızın doğru yapılandırıldığından emin olun."
 
 #~ msgid ""
 #~ "No working wireless interface found.\n"
-#~ " Please verify that you have attached a compatible WLAN USB Stick or "
-#~ "enable you local network interface."
+#~ " Please verify that you have attached a compatible WLAN USB Stick or enable you local network interface."
 #~ msgstr ""
 #~ "Çalışan kablosuz ağ arayüzü bulunamadı.\n"
-#~ " Uyumlu WLAN USB donanımının takılı olduğundan emin olun veya yeral ağ "
-#~ "arayüzünü kullanın."
+#~ " Uyumlu WLAN USB donanımının takılı olduğundan emin olun veya yeral ağ arayüzünü kullanın."
 
 #~ 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 ""
 #~ "Çalışan kablosuz ağ arayüzü bulunamadı.\n"
-#~ " Uyumlu WLAN USB donanımının takılı olduğundan emin olun veya yerel ağ "
-#~ "arayüzünü kullanın."
+#~ " Uyumlu WLAN USB donanımının takılı olduğundan emin olun veya yerel ağ arayüzünü kullanın."
 
 #~ 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 ""
 #~ "Çalışan kablosuz ağ arayüzü bulunamadı.\n"
-#~ " Uyumlu WLAN USB donanımının takılı olduğundan emin olun veya yerel ağ "
-#~ "arayüzünü kullanın."
+#~ " Uyumlu WLAN USB donanımının takılı olduğundan emin olun veya yerel ağ arayüzünü kullanın."
 
 #~ 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 ""
 #~ "Çalışan kablosuz ağ donanımı bulunamadı.\n"
-#~ " Uyumlu WLAN USB donanımının takılı olduğundan emin olun ve ağ "
-#~ "ayarlarınızın doğru yapılandırıldığından emin olun."
+#~ " Uyumlu WLAN USB donanımının takılı olduğundan emin olun ve ağ ayarlarınızın doğru yapılandırıldığından emin olun."
 
 #~ msgid "No, let me choose default lists"
 #~ msgstr "Hayır, öntanımlı listeleri seçmeme izin ver"
 
-#~ 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 ""
-#~ "Lütfen şimdi .NFI imajını yazmak üzere biçimlendirilmesi gereken USB "
-#~ "bellek takın (en az 64MB kapasiteli). Hazırsanız kumandanızdan OK tuşuna "
-#~ "basın."
+#~ 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 "Lütfen şimdi .NFI imajını yazmak üzere biçimlendirilmesi gereken USB bellek takın (en az 64MB kapasiteli). Hazırsanız kumandanızdan OK tuşuna basın."
 
 #~ msgid "Other..."
 #~ msgstr "Diğer..."
@@ -6300,26 +6064,18 @@ msgstr "kanal değiştirildi"
 #~ msgid "Partitioning USB stick..."
 #~ msgstr "USB bellek bölümlendiriliyor..."
 
-#~ 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 ""
-#~ "Lütfen dahili kablosuz ağ desteğini etkinleştirmek için, Zydas ZD1211B "
-#~ "çipset uyumlu WLAN USB donanımını Dreambox'ınıza takın ve kumandanızdan "
-#~ "OK tuşuna basın..."
+#~ 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 "Lütfen dahili kablosuz ağ desteğini etkinleştirmek için, Zydas ZD1211B çipset uyumlu WLAN USB donanımını Dreambox'ınıza takın ve kumandanızdan OK tuşuna basın..."
 
 #~ 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 ""
 #~ "Lütfen ihtiyaç duyulan boş alanlara yerel ağ (LAN) ayarlarınızı girin.\n"
 #~ "Hazır olduğunuzda devam etmek için OK tuşuna basın."
 
 #~ 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 ""
 #~ "Kablosuz ağ bağlantınızı yapılandırmak için gerekli boşlukları doldurun.\n"
@@ -6342,39 +6098,25 @@ msgstr "kanal değiştirildi"
 
 #~ 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 ""
-#~ "Dreambox'ınızda kablosuz ağ desteğini aktif hale getirmek için OK'a "
-#~ "basın.\n"
-#~ "WLAN USB donanımlarında, Zydas ZD1211B ve RAlink RT73 çipsetleri "
-#~ "desteklenmektedir.\n"
+#~ "Dreambox'ınızda kablosuz ağ desteğini aktif hale getirmek için OK'a basın.\n"
+#~ "WLAN USB donanımlarında, Zydas ZD1211B ve RAlink RT73 çipsetleri desteklenmektedir.\n"
 #~ "OK'a basmadan önce WLAN USB donanımınızı Dreambox'ınıza takın.\n"
 
 #~ msgid "Really delete this timer?"
 #~ msgstr "Bu zamanlayıcıyı silmek istediğinizden emin misiniz?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really reboot "
-#~ "now?"
-#~ msgstr ""
-#~ "KAYIT işlemi devam ediyor. Cihazı yeniden açmak istediğinizden emin "
-#~ "misiniz?"
+#~ msgid "Recording(s) are in progress or coming up in few seconds... really reboot now?"
+#~ msgstr "KAYIT işlemi devam ediyor. Cihazı yeniden açmak istediğinizden emin misiniz?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really "
-#~ "restart now?"
-#~ msgstr ""
-#~ "KAYIT işlemi devam ediyor. Cihazı yeniden başlatmak istediğinizden emin "
-#~ "misiniz?"
+#~ msgid "Recording(s) are in progress or coming up in few seconds... really restart now?"
+#~ msgstr "KAYIT işlemi devam ediyor. Cihazı yeniden başlatmak istediğinizden emin misiniz?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really "
-#~ "shutdown now?"
-#~ msgstr ""
-#~ "KAYIT işlemi devam ediyor. Cihazı kapatmak istediğinizden emin misiniz?"
+#~ msgid "Recording(s) are in progress or coming up in few seconds... really shutdown now?"
+#~ msgstr "KAYIT işlemi devam ediyor. Cihazı kapatmak istediğinizden emin misiniz?"
 
 #~ msgid "Remounting stick partition..."
 #~ msgstr "USB bellek bölümlendirmesi (partition) yeniden yapılandırılıyor..."
@@ -6425,8 +6167,7 @@ msgstr "kanal değiştirildi"
 #~ "\n"
 #~ "Please press OK to continue."
 #~ msgstr ""
-#~ "Sihirbazı kullandığınız için teşekkür ederiz. Dreambox'ınız kullanıma "
-#~ "hazır.\n"
+#~ "Sihirbazı kullandığınız için teşekkür ederiz. Dreambox'ınız kullanıma hazır.\n"
 #~ "\n"
 #~ "Yerel ağ bağlantınız çalışıyor.\n"
 #~ "\n"
@@ -6439,8 +6180,7 @@ msgstr "kanal değiştirildi"
 #~ "\n"
 #~ "Please press OK to continue."
 #~ msgstr ""
-#~ "Sihirbazı kullandığınız için teşekkür ederiz. Dreambox'ınız kullanıma "
-#~ "hazır.\n"
+#~ "Sihirbazı kullandığınız için teşekkür ederiz. Dreambox'ınız kullanıma hazır.\n"
 #~ "\n"
 #~ "Kablosuz ağ bağlantınız çalışıyor.\n"
 #~ "\n"
@@ -6450,40 +6190,24 @@ msgstr "kanal değiştirildi"
 #~ "Thank you for using the wizard. Your Dreambox is now ready to use.\n"
 #~ "Please press OK to start using your Dreambox."
 #~ msgstr ""
-#~ "Sihirbazı kullandığınız için teşekkür ederiz. Dreambox'ınız kullanıma "
-#~ "hazır.\n"
+#~ "Sihirbazı kullandığınız için teşekkür ederiz. Dreambox'ınız kullanıma hazır.\n"
 #~ "Dreambox'ınızı kullanmak için hazırsanız OK tuşuna basın."
 
 #~ msgid ""
 #~ "Thank you for using the wizard. Your box is now ready to use.\n"
 #~ "Please press OK to start using you Dreambox."
 #~ msgstr ""
-#~ "Sihirbazı kullandığınız için teşekkür ederiz. Dreambox'ınız kullanıma "
-#~ "hazır.\n"
+#~ "Sihirbazı kullandığınız için teşekkür ederiz. Dreambox'ınız kullanıma hazır.\n"
 #~ "Dreambox'ınızı kullanmak için OK tuşuna basın."
 
-#~ 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 İmaj flaşlayıcı USB bellek kullanıma hazır. Lütfen .NFI imaj "
-#~ "dosyasını sunucudan çekin ve belleğe kaydedin. Ardından önyüklemenin USB "
-#~ "bellekten yapılabilmesi için cihazı yeniden açarken, ön panelde bulunan "
-#~ "'Down' tuşuna basılı tutun!"
+#~ 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 İmaj flaşlayıcı USB bellek kullanıma hazır. Lütfen .NFI imaj dosyasını sunucudan çekin ve belleğe kaydedin. Ardından önyüklemenin USB bellekten yapılabilmesi için cihazı yeniden açarken, ön panelde bulunan 'Down' tuşuna basılı tutun!"
 
 #~ msgid "Title:"
 #~ msgstr "Başlık:"
 
-#~ 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 ""
-#~ "Bunu yapmak istediğinizden eminseniz, lütfen hedef USB çubuğu yerinden "
-#~ "çıkarın ve istenildiğinde tekrar takın. USB çubuğu çıkardıysanız lütfen "
-#~ "OK tuşuna basın."
+#~ 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 "Bunu yapmak istediğinizden eminseniz, lütfen hedef USB çubuğu yerinden çıkarın ve istenildiğinde tekrar takın. USB çubuğu çıkardıysanız lütfen OK tuşuna basın."
 
 #~ msgid ""
 #~ "Undo\n"
@@ -6514,15 +6238,13 @@ msgstr "kanal değiştirildi"
 #~ 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 ""
 #~ "Hoşgeldiniz.\n"
 #~ "\n"
-#~ "Bu sihirbaz Dreambox'ınızın ağ ayarlarını yapabilmeniz için yardımcı "
-#~ "olacaktır.\n"
+#~ "Bu sihirbaz Dreambox'ınızın ağ ayarlarını yapabilmeniz için yardımcı olacaktır.\n"
 #~ "\n"
 #~ "Kumandanızın OK tuşuna basarak sonraki adıma geçebilirsiniz."
 
@@ -6560,16 +6282,14 @@ msgstr "kanal değiştirildi"
 #~ "Do you want to reboot your Dreambox to apply the new configuration?\n"
 #~ msgstr ""
 #~ "Kablolu Ağ donanımınız başlatılamadı.\n"
-#~ "Yeni ayarların geçerli olabilmesi için Dreambox'u yeniden başlatmak ister "
-#~ "misiniz?\n"
+#~ "Yeni ayarların geçerli olabilmesi için Dreambox'u yeniden başlatmak ister misiniz?\n"
 
 #~ msgid ""
 #~ "Your wireless LAN Adapter could not be started.\n"
 #~ "Do you want to reboot your Dreambox to apply the new configuration?\n"
 #~ msgstr ""
 #~ "Kablosuz Ağ donanımınız başlatılamadı.\n"
-#~ "Yeni ayarların geçerli olabilmesi için Dreambox'u yeniden başlatmak ister "
-#~ "misiniz?\n"
+#~ "Yeni ayarların geçerli olabilmesi için Dreambox'u yeniden başlatmak ister misiniz?\n"
 
 #~ msgid ""
 #~ "Your wireless internet connection is not working!\n"
index 1aa724b..7821c53 100755 (executable)
--- a/po/uk.po
+++ b/po/uk.po
@@ -2086,8 +2086,8 @@ msgstr "LOF/L"
 msgid "Language selection"
 msgstr "Вибір мови"
 
-msgid "Language..."
-msgstr "Мова..."
+msgid "Language"
+msgstr "Мова"
 
 msgid "Last config"
 msgstr ""
index c517517..cfbeaf4 100755 (executable)
@@ -57,7 +57,7 @@ for arg in sys.argv[1:]:
                if c:
                        for l in c.split('\n'):
                                print "#. ", l
-               if str(k) != "":
+               if str(k).strip() != "":
                        print 'msgid "' + str(k) + '"'
                        print 'msgstr ""'
 
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":
index 82e7961..f7dc5b9 100755 (executable)
@@ -24,7 +24,7 @@ for file in sys.argv[2:]:
        assert info
        
        for i in info[:]:
-               if i.tag not in ["name", "packagename", "shortdescription"]:
+               if i.tag not in ["name", "packagename", "packagetype", "shortdescription"]:
                        info.remove(i)
 
        for i in info[:]: