Merge remote branch 'origin/pootle-import' into experimental
authoracid-burn <acid-burn@opendreambox.org>
Thu, 21 Apr 2011 14:53:27 +0000 (16:53 +0200)
committeracid-burn <acid-burn@opendreambox.org>
Thu, 21 Apr 2011 14:53:27 +0000 (16:53 +0200)
260 files changed:
.gitignore
COPYING [new file with mode: 0644]
Makefile.am
README
RecordTimer.py
acinclude.m4 [deleted file]
autogen.sh
config.h.in [deleted file]
configure.ac [changed mode: 0755->0644]
data/Makefile.am
data/defaults/Dream/Makefile.am
data/defaults/Dream/dm500hd.info
data/defaults/Dream/dm7020hd.info [new file with mode: 0644]
data/defaults/Dream/dm7025.info
data/defaults/Dream/dm800.info
data/defaults/Dream/dm8000.info
data/defaults/Dream/dm800se.info
data/defaults/Dream/settings.7020hd [new file with mode: 0644]
data/defaults/Dream/settings.c [new file with mode: 0644]
data/defaults/Dream/settings.t [new file with mode: 0644]
data/defaultsatlists.xml
data/encoding.conf [changed mode: 0644->0755]
data/fonts/Makefile.am
data/fonts/tuxtxt.ttf [new file with mode: 0644]
data/keymap.xml
data/keymaps/Makefile.am [new file with mode: 0644]
data/keymaps/dream-de.info [new file with mode: 0644]
data/keymaps/dream-de.kmap [new file with mode: 0644]
data/keymaps/eng.info [new file with mode: 0644]
data/keymaps/eng.kmap [new file with mode: 0644]
data/setup.xml
data/skin.xml
data/skin_default.xml
data/skin_default/icons/Makefile.am
debug [deleted file]
debug.gdb [deleted file]
enigma2.bb [new file with mode: 0644]
enigma2.pc.in
include/Makefile.am
lib/actions/.gitignore [new file with mode: 0644]
lib/actions/Makefile.am
lib/actions/action.h
lib/actions/parseactions.py
lib/base/.gitignore [new file with mode: 0644]
lib/base/Makefile.am
lib/base/console.cpp
lib/base/console.h
lib/base/eenv.cpp.in [new file with mode: 0644]
lib/base/eenv.h [new file with mode: 0644]
lib/base/encoding.cpp
lib/base/filepush.cpp
lib/base/filepush.h
lib/base/itssource.h [new file with mode: 0644]
lib/base/rawfile.cpp
lib/base/rawfile.h
lib/base/thread.cpp
lib/components/Makefile.am
lib/driver/Makefile.am
lib/driver/rcconsole.cpp
lib/driver/rcconsole.h
lib/driver/rcsdl.cpp [new file with mode: 0644]
lib/driver/rcsdl.h [new file with mode: 0644]
lib/dvb/Makefile.am
lib/dvb/db.cpp
lib/dvb/decoder.cpp
lib/dvb/decoder.h
lib/dvb/demux.cpp
lib/dvb/demux.h
lib/dvb/dvb.cpp
lib/dvb/dvb.h
lib/dvb/epgcache.cpp
lib/dvb/epgcache.h
lib/dvb/esection.h
lib/dvb/frontend.cpp
lib/dvb/frontend.h
lib/dvb/idvb.h
lib/dvb/lowlevel/Makefile.am
lib/dvb/pmt.cpp
lib/dvb/pmt.h
lib/dvb/pvrparse.cpp
lib/dvb/scan.cpp
lib/dvb/sec.cpp
lib/dvb/tstools.cpp
lib/dvb/tstools.h
lib/dvb_ci/Makefile.am
lib/dvb_ci/dvbci.cpp
lib/gdi/Makefile.am
lib/gdi/accel.cpp
lib/gdi/bcm.cpp
lib/gdi/epng.cpp
lib/gdi/fb.cpp
lib/gdi/fb.h
lib/gdi/font.cpp
lib/gdi/font.h
lib/gdi/gfbdc.cpp
lib/gdi/gfbdc.h
lib/gdi/glcddc.cpp
lib/gdi/glcddc.h
lib/gdi/gmaindc.cpp [new file with mode: 0644]
lib/gdi/gmaindc.h [new file with mode: 0644]
lib/gdi/grc.cpp
lib/gdi/grc.h
lib/gdi/lcd.cpp
lib/gdi/picexif.cpp
lib/gdi/picload.cpp
lib/gdi/sdl.cpp
lib/gdi/sdl.h
lib/gui/Makefile.am
lib/gui/elistboxcontent.cpp
lib/gui/epositiongauge.cpp
lib/gui/esubtitle.h
lib/gui/ewidgetdesktop.cpp
lib/gui/ewindowstyle.cpp
lib/mmi/Makefile.am
lib/nav/Makefile.am
lib/python/.gitignore [new file with mode: 0644]
lib/python/Components/Converter/Makefile.am
lib/python/Components/Converter/ValueToPixmap.py [new file with mode: 0644]
lib/python/Components/DreamInfoHandler.py
lib/python/Components/FileList.py
lib/python/Components/Harddisk.py [changed mode: 0755->0644]
lib/python/Components/Ipkg.py
lib/python/Components/Keyboard.py
lib/python/Components/Network.py
lib/python/Components/NimManager.py
lib/python/Components/ParentalControlList.py
lib/python/Components/PluginComponent.py
lib/python/Components/Renderer/Picon.py
lib/python/Components/Renderer/Pixmap.py
lib/python/Components/Scanner.py
lib/python/Components/Sources/ServiceEvent.py
lib/python/Components/Task.py
lib/python/Components/TimerSanityCheck.py
lib/python/Components/UsageConfig.py
lib/python/Components/config.py
lib/python/Makefile.am
lib/python/Plugins/DemoPlugins/TPMDemo/Makefile.am
lib/python/Plugins/DemoPlugins/TPMDemo/plugin.py
lib/python/Plugins/DemoPlugins/TestPlugin/plugin.py
lib/python/Plugins/Extensions/CutListEditor/plugin.py
lib/python/Plugins/Extensions/DVDBurn/DVDProject.py
lib/python/Plugins/Extensions/DVDBurn/DreamboxDVD.ddvdp.xml
lib/python/Plugins/Extensions/DVDBurn/Process.py
lib/python/Plugins/Extensions/DVDBurn/Text_menu_boat.ddvdm.xml
lib/python/Plugins/Extensions/DVDBurn/Thumbs_menu_clouds.ddvdm.xml
lib/python/Plugins/Extensions/DVDBurn/plugin.py
lib/python/Plugins/Extensions/DVDPlayer/Makefile.am
lib/python/Plugins/Extensions/DVDPlayer/keymap.xml
lib/python/Plugins/Extensions/DVDPlayer/plugin.py [changed mode: 0755->0644]
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/plugin.py
lib/python/Plugins/Extensions/Makefile.am
lib/python/Plugins/Extensions/MediaPlayer/plugin.py [changed mode: 0755->0644]
lib/python/Plugins/Extensions/MediaScanner/plugin.py [changed mode: 0755->0644]
lib/python/Plugins/Extensions/Modem/plugin.py
lib/python/Plugins/Extensions/PicturePlayer/plugin.py [changed mode: 0755->0644]
lib/python/Plugins/Extensions/SocketMMI/plugin.py
lib/python/Plugins/Extensions/SocketMMI/src/Makefile.am
lib/python/Plugins/Extensions/SocketMMI/src/socket_mmi.cpp
lib/python/Plugins/Extensions/TuxboxPlugins/plugin.py
lib/python/Plugins/Plugin.py
lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py
lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py [changed mode: 0755->0644]
lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py [changed mode: 0755->0644]
lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py [changed mode: 0755->0644]
lib/python/Plugins/SystemPlugins/DefaultServicesScanner/plugin.py
lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py [changed mode: 0755->0644]
lib/python/Plugins/SystemPlugins/FrontprocessorUpgrade/plugin.py
lib/python/Plugins/SystemPlugins/Hotplug/plugin.py
lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py
lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py
lib/python/Plugins/SystemPlugins/NFIFlash/plugin.py [changed mode: 0755->0644]
lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py
lib/python/Plugins/SystemPlugins/NetworkWizard/networkwizard.xml
lib/python/Plugins/SystemPlugins/NetworkWizard/plugin.py [changed mode: 0755->0644]
lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py
lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py
lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/plugin.py
lib/python/Plugins/SystemPlugins/Satfinder/plugin.py
lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py [changed mode: 0755->0644]
lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py
lib/python/Plugins/SystemPlugins/SoftwareManager/ImageWizard.py
lib/python/Plugins/SystemPlugins/SoftwareManager/SoftwareTools.py
lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py [changed mode: 0755->0644]
lib/python/Plugins/SystemPlugins/TempFanControl/Makefile.am
lib/python/Plugins/SystemPlugins/TempFanControl/meta/plugin_tempfancontrol.xml
lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py [changed mode: 0755->0644]
lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/plugin_videoenhancement.xml
lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py [changed mode: 0755->0644]
lib/python/Plugins/SystemPlugins/VideoTune/plugin.py
lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py
lib/python/Plugins/SystemPlugins/Videomode/VideoWizard.py
lib/python/Plugins/SystemPlugins/Videomode/plugin.py [changed mode: 0755->0644]
lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py
lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py [changed mode: 0755->0644]
lib/python/Plugins/newplugin.py [changed mode: 0644->0755]
lib/python/Screens/AudioSelection.py
lib/python/Screens/ChannelSelection.py
lib/python/Screens/DefaultWizard.py
lib/python/Screens/InfoBar.py
lib/python/Screens/InfoBarGenerics.py
lib/python/Screens/InputBox.py
lib/python/Screens/NetworkSetup.py
lib/python/Screens/ParentalControlSetup.py
lib/python/Screens/PluginBrowser.py
lib/python/Screens/ScanSetup.py
lib/python/Screens/Screen.py
lib/python/Screens/ServiceInfo.py
lib/python/Screens/Setup.py
lib/python/Screens/SleepTimerEdit.py
lib/python/Screens/Standby.py
lib/python/Screens/TaskView.py
lib/python/Screens/TimerEdit.py
lib/python/Screens/VirtualKeyBoard.py
lib/python/Screens/Wizard.py
lib/python/Tools/Directories.py
lib/python/Tools/NumericalTextInput.py
lib/python/Tools/Transponder.py
lib/python/connections.h
lib/python/enigma_python.i
lib/python/python.h
lib/service/Makefile.am
lib/service/iservice.h
lib/service/service.cpp
lib/service/service.h
lib/service/servicedvb.cpp
lib/service/servicedvb.h
lib/service/servicedvbrecord.cpp
lib/service/servicem2ts.cpp [new file with mode: 0644]
lib/service/servicem2ts.h [new file with mode: 0644]
lib/service/servicemp3.cpp
lib/service/servicemp3.h
m4/.gitignore [new file with mode: 0644]
m4/ax_pkg_swig.m4 [new file with mode: 0644]
m4/ax_pthread.m4 [new file with mode: 0644]
m4/ax_python_devel.m4 [new file with mode: 0644]
m4/ax_swig_enable_cxx.m4 [new file with mode: 0644]
m4/ax_swig_python.m4 [new file with mode: 0644]
m4/tuxbox.m4 [new file with mode: 0644]
main/.gitignore
main/Makefile.am
main/bsod.cpp [changed mode: 0755->0644]
main/enigma-gdi.cpp
main/enigma-gui.cpp
main/enigma.cpp
main/version_info.cpp [new file with mode: 0644]
main/version_info.h [new file with mode: 0644]
main/xmlgenerator.cpp [new file with mode: 0644]
main/xmlgenerator.h [new file with mode: 0644]
mytest.py
po/.gitignore [new file with mode: 0644]
po/LINGUAS [deleted file]
po/Makefile.am [changed mode: 0755->0644]
po/enigma2.pot [deleted file]
skin.py
tools/.gitignore [new file with mode: 0644]
tools/Makefile.am
tools/enigma2.sh.in [new file with mode: 0755]

index 274231a..da59fcf 100644 (file)
@@ -2,16 +2,8 @@
 # Lines that start with '#' are comments.
 # For a project mostly in C, the following would be a good set of
 # exclude patterns (uncomment them if you want to use them):
-*.[oa]
 *~
-Makefile.in
-Makefile
-*.so
-*.so.0.0
-*.cxx
-.deps
-COPYING
-INSTALL
+*.a
 aclocal.m4
 autom4te.cache/
 config.guess
@@ -20,22 +12,24 @@ config.status
 config.sub
 configure
 depcomp
+.deps/
+enigma2_config.h
+enigma2_config.h.in
 enigma2.pc
+index-enigma2.xml
+INSTALL
 install-sh
-lib/actions/actionids.h
-lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.d
-lib/python/enigma.py
-missing
-py-compile
-po/
-main/enigma2
-version.h
-*.d
 *.la
-*.lo
 .libs/
-*.tar.gz
-config.h
 libtool
+*.lo
 ltmain.sh
+Makefile
+Makefile.in
+missing
+moc_*.cpp
+*.o
+py-compile
 stamp-h1
+*.tar.bz2
+*.tar.gz
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..322cb19
--- /dev/null
+++ b/COPYING
@@ -0,0 +1 @@
+See LICENSE.
index bc1770b..ff252e6 100755 (executable)
@@ -1,14 +1,21 @@
 SUBDIRS = include lib main data po tools
 
-installdir = $(pkglibdir)/python
+ACLOCAL_AMFLAGS = -I m4
 
+installdir = $(pkglibdir)/python
 install_PYTHON = \
        Navigation.py NavigationInstance.py RecordTimer.py SleepTimer.py ServiceReference.py \
        keyids.py keymapparser.py mytest.py skin.py timer.py tools.py GlobalActions.py \
        e2reactor.py
 
-install-exec-hook:
-               $(PYTHON) $(srcdir)/tools/genmetaindex.py $(DESTDIR)$(datadir)/meta/plugin_*.xml > $(DESTDIR)$(datadir)/meta/index-enigma2.xml
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = enigma2.pc
+
+metadir = $(datadir)/meta
+meta_DATA = index-enigma2.xml
+CLEANFILES = index-enigma2.xml
+
+EXTRA_DIST = lamedb
 
-uninstall-hook:
-       $(RM) $(DESTDIR)$(datadir)/meta/index-enigma2.xml
+index-enigma2.xml: $(top_srcdir)/tools/genmetaindex.py $(top_srcdir)/lib/python/Plugins/*/*/meta/plugin_*.xml
+       $(AM_V_GEN)$(PYTHON) $^ > $@
diff --git a/README b/README
index e69de29..0018e58 100644 (file)
--- a/README
+++ b/README
@@ -0,0 +1,68 @@
+To build enigma2 on Ubuntu 10.04, follow these steps:
+
+0.) Consider using OE to build it for a Dreambox instead.
+
+    To build this version for a Dreambox, you will need
+    a recent OE (branch "opendreambox-1.6" will do, but "3.0" won't)
+    or at least a backported BitBake recipe from there.
+
+    See http://opendreambox.org/.
+
+    Stop reading here. It's not very useful for most people
+    to build enigma2 for a PC.
+
+1.) Install these packages:
+
+autoconf
+automake
+build-essential
+gettext
+libdvdnav-dev
+libfreetype6-dev
+libfribidi-dev
+libgif-dev
+libgstreamer0.10-dev
+libgstreamer-plugins-base0.10-dev
+libjpeg62-dev
+libpng12-dev
+libsdl1.2-dev
+libsigc++-1.2-dev
+libtool
+libxml2-dev
+libxslt1-dev
+python-dev
+swig
+
+2.) Build and install libdvbsi++:
+
+git clone git://git.opendreambox.org/git/obi/libdvbsi++.git
+cd libdvbsi++
+dpkg-buildpackage -uc -us
+cd ..
+sudo dpkg -i libdvbsi++*.deb
+
+3.) Build and install libxmlccwrap:
+
+git clone git://git.opendreambox.org/git/obi/libxmlccwrap.git
+cd libxmlccwrap
+dpkg-buildpackage -uc -us
+cd ..
+sudo dpkg -i libxmlccwrap*.deb
+
+4.) Build and install libdreamdvd:
+
+git clone git://schwerkraft.elitedvb.net/libdreamdvd/libdreamdvd.git
+cd libdreamdvd
+dpkg-buildpackage -uc -us
+cd ..
+sudo dpkg -i libdreamdvd*.deb
+
+5.) Build and install enigma2:
+
+git clone git://git.opendreambox.org/git/enigma2.git
+cd enigma2
+autoreconf -i
+./configure --prefix=$HOME/enigma2 --with-libsdl
+make
+make install
+
index 4ece9c5..d8bed8f 100755 (executable)
@@ -319,16 +319,14 @@ class RecordTimerEntry(timer.TimerEntry, object):
                timersanitycheck = TimerSanityCheck(NavigationInstance.instance.RecordTimer.timer_list, dummyentry)
                if not timersanitycheck.check():
                        simulTimerList = timersanitycheck.getSimulTimerList()
-                       new_end = simulTimerList[1].begin
-                       del simulTimerList
-                       new_end -= 30                           # 30 Sekunden Prepare-Zeit lassen
-               del dummyentry
+                       if simulTimerList is not None and len(simulTimerList) > 1:
+                               new_end = simulTimerList[1].begin
+                               new_end -= 30                           # 30 Sekunden Prepare-Zeit lassen
                if new_end <= time():
                        return False
                self.end = new_end
                return True
-       
-       
+
        def sendStandbyNotification(self, answer):
                if answer:
                        Notifications.AddNotification(Screens.Standby.Standby)
@@ -517,7 +515,7 @@ class RecordTimer(timer.Timer):
                checkit = True
                for timer in root.findall("timer"):
                        newTimer = createTimer(timer)
-                       if (self.record(newTimer, True, True) is not None) and (checkit == True):
+                       if (self.record(newTimer, True, dosave=False) is not None) and (checkit == True):
                                from Tools.Notifications import AddPopup
                                from Screens.MessageBox import MessageBox
                                AddPopup(_("Timer overlap in timers.xml detected!\nPlease recheck it!"), type = MessageBox.TYPE_ERROR, timeout = 0, id = "TimerLoadFailed")
diff --git a/acinclude.m4 b/acinclude.m4
deleted file mode 100644 (file)
index 6f1cb0a..0000000
+++ /dev/null
@@ -1,445 +0,0 @@
-AC_DEFUN([TUXBOX_APPS],[
-
-INSTALL="$INSTALL -p"
-
-AC_GNU_SOURCE
-AC_SYS_LARGEFILE
-
-AC_ARG_WITH(target,
-       [  --with-target=TARGET    target for compilation [[native,cdk]]],
-       [TARGET="$withval"],[TARGET="native"])
-
-AC_ARG_WITH(targetprefix,
-       [  --with-targetprefix=PATH  prefix relative to target root (only applicable in cdk mode)],
-       [targetprefix="$withval"],[targetprefix="NONE"])
-
-AC_ARG_WITH(debug,
-       [  --without-debug         disable debugging code],
-       [DEBUG="$withval"],[DEBUG="yes"])
-
-if test "$DEBUG" = "yes"; then
-       DEBUG_CFLAGS="-g3 -ggdb"
-       AC_DEFINE(DEBUG,1,[Enable debug messages])
-fi
-
-AC_MSG_CHECKING(target)
-
-if test "$TARGET" = "native"; then
-       AC_MSG_RESULT(native)
-
-       if test "$CFLAGS" = "" -a "$CXXFLAGS" = ""; then
-               CFLAGS="-Wall -O2 -pipe $DEBUG_CFLAGS"
-               CXXFLAGS="-Wall -O2 -pipe $DEBUG_CFLAGS"
-       fi
-       if test "$prefix" = "NONE"; then
-               prefix=/usr/local
-       fi
-       targetprefix=$prefix
-elif test "$TARGET" = "cdk"; then
-       AC_MSG_RESULT(cdk)
-
-       if test "$CC" = "" -a "$CXX" = ""; then
-               CC=powerpc-tuxbox-linux-gnu-gcc CXX=powerpc-tuxbox-linux-gnu-g++
-       fi
-       if test "$CFLAGS" = "" -a "$CXXFLAGS" = ""; then
-               CFLAGS="-Wall -Os -mcpu=823 -pipe $DEBUG_CFLAGS"
-               CXXFLAGS="-Wall -Os -mcpu=823 -pipe $DEBUG_CFLAGS"
-       fi
-       if test "$prefix" = "NONE"; then
-               AC_MSG_ERROR(invalid prefix, you need to specify one in cdk mode)
-       fi
-       if test "$targetprefix" = "NONE"; then
-               targetprefix=""
-       fi
-       if test "$host_alias" = ""; then
-               cross_compiling=yes
-               host_alias=powerpc-tuxbox-linux-gnu
-       fi
-else
-       AC_MSG_RESULT(none)
-       AC_MSG_ERROR([invalid target $TARGET, choose on from native,cdk]);
-fi
-
-AC_CANONICAL_BUILD
-AC_CANONICAL_HOST
-
-check_path () {
-       return $(perl -e "if(\"$1\"=~m#^/usr/(local/)?bin#){print \"0\"}else{print \"1\";}")
-}
-
-])
-
-AC_DEFUN([TUXBOX_APPS_DIRECTORY_ONE],[
-AC_ARG_WITH($1,[  $6$7 [[PREFIX$4$5]]],[
-       _$2=$withval
-       if test "$TARGET" = "cdk"; then
-               $2=`eval echo "${targetprefix}$withval"`
-       else
-               $2=$withval
-       fi
-],[
-       $2="\${$3}$5"
-       if test "$TARGET" = "cdk"; then
-               _$2=`eval echo "${target$3}$5"`
-       else
-               _$2=`eval echo "${$3}$5"`
-       fi
-])
-
-dnl automake <= 1.6 don't support this
-dnl AC_SUBST($2)
-AC_DEFINE_UNQUOTED($2,"$_$2",$7)
-])
-
-AC_DEFUN([TUXBOX_APPS_DIRECTORY],[
-AC_REQUIRE([TUXBOX_APPS])
-
-if test "$TARGET" = "cdk"; then
-       datadir="\${prefix}/share"
-       tuxboxdatadir="\${prefix}/share/tuxbox"
-       zoneinfodir="\${datadir}/zoneinfo"
-       sysconfdir="\${prefix}/etc"
-       localstatedir="\${prefix}/var"
-       localedir="\${prefix}/var"
-       libdir="\${prefix}/lib"
-       targetdatadir="\${targetprefix}/share"
-       targetsysconfdir="\${targetprefix}/etc"
-       targetlocalstatedir="\${targetprefix}/var"
-       targetlibdir="\${targetprefix}/lib"
-fi
-
-TUXBOX_APPS_DIRECTORY_ONE(configdir,CONFIGDIR,sysconfdir,/etc,,
-       [--with-configdir=PATH   ],[where to find the config files])
-
-TUXBOX_APPS_DIRECTORY_ONE(datadir,DATADIR,datadir,/share,,
-       [--with-datadir=PATH     ],[where to find data])
-
-TUXBOX_APPS_DIRECTORY_ONE(fontdir,FONTDIR,datadir,/share,/fonts,
-       [--with-fontdir=PATH     ],[where to find the fonts])
-
-TUXBOX_APPS_DIRECTORY_ONE(libdir,LIBDIR,libdir,/lib,,
-       [--with-libdir=PATH      ],[where to find the internal libs])
-])
-
-dnl automake <= 1.6 needs this specifications
-AC_SUBST(CONFIGDIR)
-AC_SUBST(DATADIR)
-AC_SUBST(FONTDIR)
-AC_SUBST(LIBDIR)
-dnl end workaround
-
-AC_DEFUN([TUXBOX_APPS_DVB],[
-AC_ARG_WITH(dvbincludes,
-       [  --with-dvbincludes=PATH  path for dvb includes [[NONE]]],
-       [DVBINCLUDES="$withval"],[DVBINCLUDES=""])
-
-if test "$DVBINCLUDES"; then
-       CPPFLAGS="$CPPFLAGS -I$DVBINCLUDES"
-fi
-
-AC_CHECK_HEADERS(ost/dmx.h,[
-       DVB_API_VERSION=1
-       AC_MSG_NOTICE([found dvb version 1])
-])
-
-if test -z "$DVB_API_VERSION"; then
-AC_CHECK_HEADERS(linux/dvb/version.h,[
-       AC_LANG_PREPROC_REQUIRE()
-       AC_REQUIRE([AC_PROG_EGREP])
-       AC_LANG_CONFTEST([AC_LANG_SOURCE([[
-#include <linux/dvb/version.h>
-version DVB_API_VERSION
-       ]])])
-       DVB_API_VERSION=`(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | $EGREP "^version" | sed "s,version\ ,,"`
-       rm -f conftest*
-
-       AC_MSG_NOTICE([found dvb version $DVB_API_VERSION])
-])
-fi
-
-if test "$DVB_API_VERSION"; then
-       AC_DEFINE(HAVE_DVB,1,[Define to 1 if you have the dvb includes])
-       AC_DEFINE_UNQUOTED(HAVE_DVB_API_VERSION,$DVB_API_VERSION,[Define to the version of the dvb api])
-else
-       AC_MSG_ERROR([can't find dvb headers])
-fi
-])
-
-AC_DEFUN([_TUXBOX_APPS_LIB_CONFIG],[
-AC_PATH_PROG($1_CONFIG,$2,no)
-if test "$$1_CONFIG" != "no"; then
-       if test "$TARGET" = "cdk" && check_path "$$1_CONFIG"; then
-               AC_MSG_$3([could not find a suitable version of $2]);
-       else
-               $1_CFLAGS=$($$1_CONFIG --cflags)
-               $1_LIBS=$($$1_CONFIG --libs)
-       fi
-fi
-
-AC_SUBST($1_CFLAGS)
-AC_SUBST($1_LIBS)
-])
-
-AC_DEFUN([TUXBOX_APPS_LIB_CONFIG],[
-_TUXBOX_APPS_LIB_CONFIG($1,$2,ERROR)
-if test "$$1_CONFIG" = "no"; then
-       AC_MSG_ERROR([could not find $2]);
-fi
-])
-
-AC_DEFUN([TUXBOX_APPS_LIB_CONFIG_CHECK],[
-_TUXBOX_APPS_LIB_CONFIG($1,$2,WARN)
-])
-
-AC_DEFUN([TUXBOX_APPS_PKGCONFIG],[
-AC_PATH_PROG(PKG_CONFIG, pkg-config,no)
-if test "$PKG_CONFIG" = "no" ; then
-       AC_MSG_ERROR([could not find pkg-config]);
-fi
-])
-
-AC_DEFUN([_TUXBOX_APPS_LIB_PKGCONFIG],[
-PKG_CHECK_MODULES($1,$2)
-AC_SUBST($1_CFLAGS)
-AC_SUBST($1_LIBS)
-])
-
-AC_DEFUN([_TUXBOX_APPS_LIB_PKGCONFIG_OPTIONAL],[
-PKG_CHECK_MODULES($1,$2,$3="yes",$3="no")
-if test "$$3" = "yes"; then
-       AC_DEFINE($3, 1, [$2 available])
-else
-       $1_CFLAGS=""
-       $1_LIBS=""
-fi
-AC_SUBST($1_CFLAGS)
-AC_SUBST($1_LIBS)
-])
-
-AC_DEFUN([TUXBOX_APPS_LIB_PKGCONFIG],[
-_TUXBOX_APPS_LIB_PKGCONFIG($1,$2)
-if test -z "$$1_CFLAGS" ; then
-       AC_MSG_ERROR([could not find package $2]);
-fi
-])
-
-AC_DEFUN([TUXBOX_APPS_LIB_PKGCONFIG_CHECK],[
-_TUXBOX_APPS_LIB_PKGCONFIG($1,$2)
-])
-
-AC_DEFUN([_TUXBOX_APPS_LIB_SYMBOL],[
-AC_CHECK_LIB($2,$3,HAVE_$1="yes",HAVE_$1="no")
-if test "$HAVE_$1" = "yes"; then
-       $1_LIBS=-l$2
-fi
-
-AC_SUBST($1_LIBS)
-])
-
-AC_DEFUN([TUXBOX_APPS_LIB_SYMBOL],[
-_TUXBOX_APPS_LIB_SYMBOL($1,$2,$3,ERROR)
-if test "$HAVE_$1" = "no"; then
-       AC_MSG_ERROR([could not find $2]);
-fi
-])
-
-AC_DEFUN([TUXBOX_APPS_LIB_CONFIG_SYMBOL],[
-_TUXBOX_APPS_LIB_SYMBOL($1,$2,$3,WARN)
-])
-
-AC_DEFUN([TUXBOX_APPS_GETTEXT],[
-AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
-       [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
-       (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
-       :)
-AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
-
-AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
-       [$ac_dir/$ac_word --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 &&
-       (if $ac_dir/$ac_word --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
-       :)
-
-AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,[$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1],:)
-
-AC_MSG_CHECKING([whether NLS is requested])
-AC_ARG_ENABLE(nls,
-       [  --disable-nls           do not use Native Language Support],
-       USE_NLS=$enableval, USE_NLS=yes)
-AC_MSG_RESULT($USE_NLS)
-AC_SUBST(USE_NLS)
-
-if test "$USE_NLS" = "yes"; then
-       AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,[
-               AC_TRY_LINK([
-                       #include <libintl.h>
-                       #ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-                       #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-                       #endif
-                       extern int _nl_msg_cat_cntr;
-                       extern int *_nl_domain_bindings;
-                       ],[
-                       bindtextdomain ("", "");
-                       return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings;
-                       ], gt_cv_func_gnugettext_libc=yes, gt_cv_func_gnugettext_libc=no
-               )]
-       )
-
-       if test "$gt_cv_func_gnugettext_libc" = "yes"; then
-               AC_DEFINE(ENABLE_NLS, 1, [Define to 1 if translation of program messages to the user's native language is requested.])
-               gt_use_preinstalled_gnugettext=yes
-       else
-               USE_NLS=no
-       fi
-fi
-
-if test -f "$srcdir/po/LINGUAS"; then
-       ALL_LINGUAS=$(sed -e "/^#/d" "$srcdir/po/LINGUAS")
-fi
-
-POFILES=
-GMOFILES=
-UPDATEPOFILES=
-DUMMYPOFILES=
-for lang in $ALL_LINGUAS; do
-       POFILES="$POFILES $srcdirpre$lang.po"
-       GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
-       UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
-       DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
-done
-INST_LINGUAS=
-if test -n "$ALL_LINGUAS"; then
-       for presentlang in $ALL_LINGUAS; do
-               useit=no
-               if test -n "$LINGUAS"; then
-                       desiredlanguages="$LINGUAS"
-               else
-                       desiredlanguages="$ALL_LINGUAS"
-               fi
-               for desiredlang in $desiredlanguages; do
-                       case "$desiredlang" in
-                               "$presentlang"*) useit=yes;;
-                       esac
-               done
-               if test $useit = yes; then
-                       INST_LINGUAS="$INST_LINGUAS $presentlang"
-               fi
-       done
-fi
-CATALOGS=
-if test -n "$INST_LINGUAS"; then
-       for lang in $INST_LINGUAS; do
-               CATALOGS="$CATALOGS $lang.gmo"
-       done
-fi
-AC_SUBST(POFILES)
-AC_SUBST(GMOFILES)
-AC_SUBST(UPDATEPOFILES)
-AC_SUBST(DUMMYPOFILES)
-AC_SUBST(CATALOGS)
-])
-
-dnl backward compatiblity
-AC_DEFUN([AC_GNU_SOURCE],
-[AH_VERBATIM([_GNU_SOURCE],
-[/* Enable GNU extensions on systems that have them.  */
-#ifndef _GNU_SOURCE
-# undef _GNU_SOURCE
-#endif])dnl
-AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl
-AC_BEFORE([$0], [AC_RUN_IFELSE])dnl
-AC_DEFINE([_GNU_SOURCE])
-])
-
-AC_DEFUN([AC_PROG_EGREP],
-[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
-   [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
-    then ac_cv_prog_egrep='grep -E'
-    else ac_cv_prog_egrep='egrep'
-    fi])
- EGREP=$ac_cv_prog_egrep
- AC_SUBST([EGREP])
-])
-
-AC_DEFUN([AC_PYTHON_DEVEL],[
-       #
-       # should allow for checking of python version here...
-       #
-       if test $cross_compiling = "yes"; then
-               # Check for Python include path
-               AC_MSG_CHECKING([for Python include path])
-               
-               # FIXME: yes, this is wrong. sorry about that. (tmbinc)
-               cross_PYTHON_VERSION=$PYTHON_VERSION
-               python_path=
-               for i in $CPPFLAGS ; do
-                       p=`echo $i | sed "s,^-I,,"`
-                       p=`echo $p | sed "s,^-isystem,,"`
-                       if test -f "$p/python$cross_PYTHON_VERSION/Python.h"; then
-                               python_path="$p/python$cross_PYTHON_VERSION"
-                               break
-                       fi
-               done
-               AC_MSG_RESULT([$python_path])
-               if test -z "$python_path" ; then
-                                               AC_MSG_ERROR([cannot find Python include path])
-               fi
-               AC_SUBST([PYTHON_CPPFLAGS],[-I$python_path])
-
-               # Check for Python library path
-               AC_MSG_CHECKING([for Python library path])
-               python_path=
-               for i in $LDFLAGS; do
-                       l=`echo $i | sed "s,^-L,,"`
-                       python_path=`find $l -type f -name libpython$cross_PYTHON_VERSION.* -print | sed "1q"`
-                       if test -n "$python_path" ; then
-                               break
-                       fi
-               done
-               python_path=`echo $python_path | sed "s,/libpython.*$,,"`
-               AC_MSG_RESULT([$python_path])
-               if test -z "$python_path" ; then
-                                               AC_MSG_ERROR([cannot find Python library path])
-               fi
-               AC_SUBST([PYTHON_LDFLAGS],["-L$python_path -lpython$cross_PYTHON_VERSION"])
-               #
-               python_site=`echo $python_path | sed "s/config/site-packages/"`
-               AC_SUBST([PYTHON_SITE_PKG],[$python_site])
-       else
-               AC_REQUIRE([AM_PATH_PYTHON])
-
-               # Check for Python include path
-               AC_MSG_CHECKING([for Python include path])
-               python_path=`echo $PYTHON | sed "s,/bin.*$,,"`
-               for i in "$python_path/include/python$PYTHON_VERSION/" "$python_path/include/python/" "$python_path/" ; do
-                       python_path=`find $i -type f -name Python.h -print | sed "1q"`
-                       if test -n "$python_path" ; then
-                               break
-                       fi
-               done
-               python_path=`echo $python_path | sed "s,/Python.h$,,"`
-               AC_MSG_RESULT([$python_path])
-               if test -z "$python_path" ; then
-                       AC_MSG_ERROR([cannot find Python include path])
-               fi
-               AC_SUBST([PYTHON_CPPFLAGS],[-I$python_path])
-
-               # Check for Python library path
-               AC_MSG_CHECKING([for Python library path])
-               python_path=`echo $PYTHON | sed "s,/bin.*$,,"`
-               for i in "$python_path/lib/python$PYTHON_VERSION/config/" "$python_path/lib/python$PYTHON_VERSION/" "$python_path/lib/python/config/" "$python_path/lib/python/" "$python_path/" ; do
-                       python_path=`find $i -type f -name libpython$PYTHON_VERSION.* -print | sed "1q"`
-                       if test -n "$python_path" ; then
-                               break
-                       fi
-               done
-               python_path=`echo $python_path | sed "s,/libpython.*$,,"`
-               AC_MSG_RESULT([$python_path])
-               if test -z "$python_path" ; then
-                       AC_MSG_ERROR([cannot find Python library path])
-               fi
-               AC_SUBST([PYTHON_LDFLAGS],["-L$python_path -lpython$PYTHON_VERSION"])
-               #
-               python_site=`echo $python_path | sed "s/config/site-packages/"`
-               AC_SUBST([PYTHON_SITE_PKG],[$python_site])
-       fi
-])
index 584a74e..68f4a17 100755 (executable)
@@ -1,60 +1,2 @@
 #!/bin/sh
-
-package="enigma2"
-
-srcdir=`dirname $0`
-test -z "$srcdir" && srcdir=.
-
-cd "$srcdir"
-DIE=0
-
-(autoconf --version) < /dev/null > /dev/null 2>&1 || {
-       echo
-       echo "You must have autoconf installed to compile $package."
-       echo "Download the appropriate package for your system,"
-       echo "or get the source from one of the GNU ftp sites"
-       echo "listed in http://www.gnu.org/order/ftp.html"
-       DIE=1
-}
-
-(automake --version) < /dev/null > /dev/null 2>&1 || {
-       echo
-       echo "You must have automake installed to compile $package."
-       echo "Download the appropriate package for your system,"
-       echo "or get the source from one of the GNU ftp sites"
-       echo "listed in http://www.gnu.org/order/ftp.html"
-       DIE=1
-}
-
-(libtool --version) < /dev/null > /dev/null 2>&1 || {
-       echo
-       echo "You must have libtool installed to compile $package."
-       echo "Download the appropriate package for your system,"
-       echo "or get the source from one of the GNU ftp sites"
-       echo "listed in http://www.gnu.org/order/ftp.html"
-       DIE=1
-}
-
-if test "$DIE" -eq 1; then
-       exit 1
-fi
-
-if [ ! -e acinclude.m4 ]; then
-       for i in .. ../.. ../../..; do
-               if [ -e `pwd`/$i/acinclude.m4 ]; then
-                       ln -s `pwd`/$i/acinclude.m4 .
-               fi
-       done
-fi
-
-echo "Generating configuration files for $package, please wait...."
-
-echo "  aclocal"
-aclocal
-echo "  libtoolize --automake"
-libtoolize --automake
-echo "  autoconf"
-autoconf
-echo "  automake --add-missing"
-automake --add-missing 
-
+autoreconf -i
diff --git a/config.h.in b/config.h.in
deleted file mode 100644 (file)
index 3564836..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/* config.h.in.  Generated from configure.ac by autoheader.  */
-
-/* where to find the config files */
-#undef CONFIGDIR
-
-/* where to find data */
-#undef DATADIR
-
-/* Enable debug messages */
-#undef DEBUG
-
-/* Define to 1 if translation of program messages to the user's native
-   language is requested. */
-#undef ENABLE_NLS
-
-/* where to find the fonts */
-#undef FONTDIR
-
-/* where games data is stored */
-#undef GAMESDIR
-
-/* Define to 1 if you have the dvb includes */
-#undef HAVE_DVB
-
-/* Define to the version of the dvb api */
-#undef HAVE_DVB_API_VERSION
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the <linux/dvb/version.h> header file. */
-#undef HAVE_LINUX_DVB_VERSION_H
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if you have the <ost/dmx.h> header file. */
-#undef HAVE_OST_DMX_H
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* where to find the internal libs */
-#undef LIBDIR
-
-/* where to find locales */
-#undef LOCALEDIR
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* where to find the plugins */
-#undef PLUGINDIR
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* where to find tuxbox data */
-#undef TUXBOXDATADIR
-
-/* Version number of package */
-#undef VERSION
-
-/* With SDL */
-#undef WITH_SDL
-
-/* where to find zoneinfo db */
-#undef ZONEINFODIR
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-#undef _FILE_OFFSET_BITS
-
-/* Enable GNU extensions on systems that have them.  */
-#ifndef _GNU_SOURCE
-# undef _GNU_SOURCE
-#endif
-
-/* Define for large files, on AIX-style hosts. */
-#undef _LARGE_FILES
old mode 100755 (executable)
new mode 100644 (file)
index 35fad77..0c54f5b
-AC_INIT(enigma2,2.4)
-AM_INIT_AUTOMAKE(enigma2,2.4)
+AC_INIT([enigma2],[3.0.0],[enigma2-devel@lists.elitedvb.net])
+AM_INIT_AUTOMAKE([dist-bzip2 no-define tar-pax -Wno-portability])
+AC_CONFIG_HEADERS([enigma2_config.h])
 
-TUXBOX_APPS
-TUXBOX_APPS_DIRECTORY
+# Silent rules are available since 1.11, but older versions
+# are still in use. So don't use them unconditionally.
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+AC_USE_SYSTEM_EXTENSIONS
+AC_SYS_LARGEFILE
 
 AC_PROG_CC
 AC_PROG_CXX
-AC_PROG_RANLIB
+m4_ifdef([LT_INIT], [LT_INIT], [AC_PROG_LIBTOOL])
+AC_CONFIG_MACRO_DIR([m4])
+
+AC_CHECK_HEADERS([dbox/fp.h dbox/lcd-ks0713.h])
+
+AC_PATH_PROG(MSGFMT, msgfmt, AC_MSG_ERROR(Could not find msgfmt))
+
+AM_PATH_PYTHON
+AX_PYTHON_DEVEL
+AX_PKG_SWIG
+AX_SWIG_ENABLE_CXX
+AX_SWIG_PYTHON
+AX_PTHREAD
+
+TUXBOX_APPS_DVB
+
+AM_CONDITIONAL(HAVE_GIT_DIR, test -d "$srcdir/.git")
+AM_CONDITIONAL(HAVE_FAKE_GIT_DIR, test -f "$srcdir/.git/last_commit_info")
+
+PKG_CHECK_MODULES(BASE, [freetype2 fribidi gstreamer-0.10 gstreamer-pbutils-0.10 libdvbsi++ libpng libxml-2.0 sigc++-1.2])
+PKG_CHECK_MODULES(LIBDDVD, libdreamdvd, HAVE_LIBDDVD="yes", HAVE_LIBDDVD="no")
+AM_CONDITIONAL(HAVE_LIBDDVD, test "$HAVE_LIBDDVD" = "yes")
+
+AC_CHECK_LIB([dl], [dlopen], [LIBDL_LIBS="-ldl"], [AC_MSG_ERROR([Could not find libdl])])
+AC_SUBST(LIBDL_LIBS)
+AC_CHECK_LIB([jpeg], [jpeg_set_defaults], [LIBJPEG_LIBS="-ljpeg"], [AC_MSG_ERROR([Could not find libjpeg])])
+AC_SUBST(LIBJPEG_LIBS)
+AC_CHECK_LIB([ungif], [DGifOpen], [LIBGIF_LIBS="-lungif"], [AC_CHECK_LIB([gif], [DGifOpen], [LIBGIF_LIBS="-lgif"], [AC_MSG_ERROR([Could not find libgif or libungif])])])
+AC_SUBST(LIBGIF_LIBS)
+
+AC_LANG_PUSH([C++])
+AC_CHECK_LIB([xmlccwrap], [exit], [LIBXMLCCWRAP_LIBS="-lxmlccwrap"], [AC_MSG_ERROR([Could not find libxmlccwrap])])
+AC_SUBST(LIBXMLCCWRAP_LIBS)
+AC_LANG_POP
 
 AC_ARG_WITH(libsdl,
-       AC_HELP_STRING([--with-libsdl], [use sdl, yes or no]),
-       [[withsdl=$withval]],
-       [[withsdl=yes]]
-)
-
-AC_CHECK_HEADER(dreamdvd/ddvdlib.h,have_ddvdlib="yes",have_ddvdlib="no")
-if test x"${have_ddvdlib}" = xyes ; then
-       AC_DEFINE(HAVE_DDVDLIB, 1,[Define if ddvdlib is available])
-else
-       AC_MSG_NOTICE([ddvdlib not found... dont build dvd plugin])
+       AS_HELP_STRING([--with-libsdl],[use libsdl, yes or no]),
+       [with_libsdl=$withval],[with_libsdl=no])
+if test "$with_libsdl" = "yes"; then
+       PKG_CHECK_MODULES(LIBSDL, sdl)
 fi
-AM_CONDITIONAL(HAVE_DDVDLIB, test "$have_ddvdlib" = "yes")
+AM_CONDITIONAL(HAVE_LIBSDL, test "$with_libsdl" = "yes")
 
-AM_PATH_PYTHON()
-AC_PYTHON_DEVEL
-#AM_PATH_XINE(1.1.0,, AC_MSG_ERROR([*** Please install xine-lib (devel) first ***]))
+AC_ARG_WITH(libxine,
+       AS_HELP_STRING([--with-libxine],[use libxine, yes or no]),
+       [with_libxine=$withval],[with_libxine=no])
+if test "$with_libxine" = "yes"; then
+       PKG_CHECK_MODULES(LIBXINE, libxine)
+       AC_DEFINE([WITH_XINE],[1],[Define to 1 if you have libxine])
+fi
+AM_CONDITIONAL(HAVE_LIBXINE, test "$with_libxine" = "yes")
 
-TUXBOX_APPS_DVB
+AC_ARG_WITH(debug,
+       AS_HELP_STRING([--without-debug],[disable debugging code]),
+       [with_debug="$withval"],[with_debug="yes"])
+if test "$with_debug" = "yes"; then
+       DEBUG_CFLAGS="-ggdb3"
+       AC_DEFINE([DEBUG],[1],[Define to 1 to enable debugging code])
+fi
 
-_TUXBOX_APPS_LIB_PKGCONFIG_OPTIONAL(FREETYPE, freetype2, HAVE_FREETYPE2)
-if test "$HAVE_FREETYPE2" = "no" ; then
-       TUXBOX_APPS_LIB_CONFIG(FREETYPE, freetype-config)
+AC_ARG_WITH(memcheck,
+       AS_HELP_STRING([--with-memcheck],[enable memory leak checks]),
+       [with_memcheck="$withval"],[with_memcheck="no"])
+if test "$with_memcheck" = "yes"; then
+       AC_DEFINE([MEMLEAK_CHECK],[1],[Define to 1 to enable memory leak checks])
 fi
-TUXBOX_APPS_LIB_PKGCONFIG(FRIBIDI,fribidi)
-TUXBOX_APPS_LIB_PKGCONFIG(ID3TAG,id3tag)
-TUXBOX_APPS_LIB_PKGCONFIG(MAD,mad)
-#TUXBOX_APPS_LIB_PKGCONFIG(PLUGINS,tuxbox-plugins)
-TUXBOX_APPS_LIB_PKGCONFIG(PNG,libpng)
-TUXBOX_APPS_LIB_PKGCONFIG(SIGC,sigc++-1.2)
-TUXBOX_APPS_LIB_PKGCONFIG(DVBSI,libdvbsi++)
-_TUXBOX_APPS_LIB_PKGCONFIG_OPTIONAL(GSTREAMER,gstreamer,HAVE_GSTREAMER)
-_TUXBOX_APPS_LIB_PKGCONFIG_OPTIONAL(GSTREAMERPBUTILS,gstreamer-pbutils,HAVE_GSTSTREAMERPBUTILS)
-_TUXBOX_APPS_LIB_PKGCONFIG_OPTIONAL(LIBXINE,libxine,HAVE_LIBXINE)
-AC_CHECK_LIB(jpeg, jpeg_set_defaults, HAVE_JPEG="yes", HAVE_JPEG="no")
-JPEG_LIBS="-ljpeg"
-AC_SUBST(JPEG_LIBS)
-
-AC_SUBST(LIBUNGIF_LIBS,"")
-AC_CHECK_HEADERS(gif_lib.h,
-       AC_CHECK_LIB(ungif,DGifOpen,
-       [AC_DEFINE(HAVE_LIBUNGIF,1,[Define if you have libgif/libungif including devel headers])
-               LIBUNGIF_LIBS="-lungif"],
-               [AC_CHECK_LIB(gif,DGifOpen,
-                       [AC_DEFINE(HAVE_LIUNBGIF,1)
-                       LIBUNGIF_LIBS="-lgif"])]))
-
-TUXBOX_APPS_LIB_PKGCONFIG(XML2,libxml-2.0)
-
-# ok, we are in trouble: XMLCCWRAP only defines C++ symbols. So let's just check if linking works,
-# and assume everything will be ok. Then just check for the "exit" symbol, which should be always there.
-AC_LANG_SAVE
-AC_LANG_CPLUSPLUS
-TUXBOX_APPS_LIB_SYMBOL(XMLCCWRAP, xmlccwrap, exit)
-AC_LANG_RESTORE
-
-if test "$withsdl" = "yes" ; then
-       _TUXBOX_APPS_LIB_PKGCONFIG_OPTIONAL(SDL,sdl,WITH_SDL)
-       if test "$WITH_SDL" = "no" ; then
-               TUXBOX_APPS_LIB_CONFIG(SDL,sdl-config)
-               AC_DEFINE_UNQUOTED([WITH_SDL],[$withsdl],[With SDL])
+
+AC_ARG_WITH(po,
+       AS_HELP_STRING([--with-po],[enable updating of po files]),
+       [with_po="$withval"],[with_po="no"])
+if test "$with_po" = "yes"; then
+       AC_PATH_PROG(MSGINIT, msginit)
+       AC_PATH_PROG(MSGMERGE, msgmerge)
+       AC_PATH_PROG(MSGUNIQ, msguniq)
+       AC_PATH_PROG(XGETTEXT, xgettext)
+       if test -z "$MSGINIT" -o -z "$MSGMERGE" -o -z "$MSGUNIQ" -o -z "$XGETTEXT"; then
+               AC_MSG_ERROR([Could not find required gettext tools])
        fi
 fi
-# allow 'if WITH_SDL' conditionals in Makefile.am
-AM_CONDITIONAL(WITH_SDL, test "$WITH_SDL" = "yes")
+AM_CONDITIONAL(UPDATE_PO, test "$with_po" = "yes")
 
-CPPFLAGS="$CPPFLAGS "'-I$(top_srcdir)'
-CPPFLAGS="$CPPFLAGS -D_REENTRANT $PYTHON_CPPFLAGS $MD5SUM_CFLAGS $FREETYPE_CFLAGS $FRIBIDI_CFLAGS $ID3TAG_CFLAGS $MAD_CFLAGS $PLUGINS_CFLAGS $PNG_CFLAGS $SDL_CFLAGS $SIGC_CFLAGS $XMLTREE_CFLAGS $DVBSI_CFLAGS $GSTREAMER_CFLAGS $GSTREAMERPBUTILS_CFLAGS $LIBXINE_CFLAGS $LIBUNGIF_CFLAGS"
-#CPPFLAGS="$CPPFLAGS -DMEMLEAK_CHECK"
-CXXFLAGS="$CXXFLAGS -fno-rtti -fno-exceptions -Wall"
-LDFLAGS="$LDFLAGS -pthread $PYTHON_LDFLAGS $SDL_LDFLAGS $GSTREAMER_LDFLAGS $GSTREAMERPBUTILS_LDFLAGS $LIBXINE_LDFLAGS $LIBUNGIF_LDFLAGS"
-#LDFLAGS="-rdynamic $LDFLAGS"
+ENIGMA2_CFLAGS="-fno-rtti -fno-exceptions"
+AC_SUBST(ENIGMA2_CFLAGS)
 
-TUXBOX_APPS_GETTEXT
+CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS"
+CFLAGS="$CFLAGS $DEBUG_CFLAGS -Wall"
+CXXFLAGS="$CXXFLAGS $DEBUG_CFLAGS -Wall $BASE_CFLAGS $ENIGMA2_CFLAGS $PTHREAD_CFLAGS"
 
-AC_OUTPUT([
+AC_CONFIG_FILES([
 Makefile
 data/Makefile
 data/fonts/Makefile
@@ -93,6 +109,7 @@ data/defaults/Dream/Makefile
 data/defaults/Dream/hdbouquets/Makefile
 data/defaults/Dream/sdbouquets/Makefile
 data/extensions/Makefile
+data/keymaps/Makefile
 data/skin_default/Makefile
 data/skin_default/menu/Makefile
 data/skin_default/icons/Makefile
@@ -102,6 +119,7 @@ include/Makefile
 lib/Makefile
 lib/actions/Makefile
 lib/base/Makefile
+lib/base/eenv.cpp
 lib/driver/Makefile
 lib/dvb/Makefile
 lib/dvb/lowlevel/Makefile
@@ -188,8 +206,7 @@ lib/components/Makefile
 po/Makefile
 main/Makefile
 tools/Makefile
+tools/enigma2.sh
 enigma2.pc
 ])
-
-#lib/python/Plugins/Extensions/SimpleRSS/Makefile
-#lib/python/Plugins/Extensions/FileManager/Makefile
+AC_OUTPUT
index 1ed9444..0eaa082 100644 (file)
@@ -1,4 +1,4 @@
-SUBDIRS = countries fonts defaults extensions skin_default
+SUBDIRS = countries fonts defaults extensions keymaps skin_default
 
 dist_pkgdata_DATA = \
        defaultsatlists.xml \
index cda5583..ee66c93 100644 (file)
@@ -6,11 +6,15 @@ dist_install_DATA = \
        bouquets.tv \
        dm800se.info \
        dm500hd.info \
+       dm7020hd.info \
        dm7025.info \
        dm8000.info \
        dm800.info \
        settings.800se \
        settings.500hd \
+       settings.7020hd \
        settings.7025 \
        settings.800 \
-       settings.8000
+       settings.8000 \
+       settings.c \
+       settings.t
index b1b4d53..29d14b6 100644 (file)
                                <satellite type="192" />
                        </prerequisites>
                </file-->
-               <file type="favourites" directory="" name="bouquets.tv" />              
-               <file type="favourites" directory="hdbouquets/" name="userbouquet.favourites.tv" />
+               <file type="favourites" directory="" name="bouquets.tv">
+                       <prerequisites>
+                               <bcastsystem type="DVB-S" />
+                               <!--satellite type="192" /-->
+                       </prerequisites>
+               </file>
+               <file type="favourites" directory="hdbouquets/" name="userbouquet.favourites.tv">
+                       <prerequisites>
+                               <bcastsystem type="DVB-S" />
+                               <!--satellite type="192" /-->
+                       </prerequisites>
+               </file>
+               <file type="config" name="settings.c">
+                       <prerequisites>
+                               <bcastsystem type="DVB-C" />
+                       </prerequisites>
+               </file>
+               <file type="config" name="settings.t">
+                       <prerequisites>
+                               <bcastsystem type="DVB-T" />
+                       </prerequisites>
+               </file>
                <!--file type="package" directory="packages/" name="small-test_1.0_mipsel.ipk" /-->
        </files>
 </default>
diff --git a/data/defaults/Dream/dm7020hd.info b/data/defaults/Dream/dm7020hd.info
new file mode 100644 (file)
index 0000000..e0a1fbb
--- /dev/null
@@ -0,0 +1,46 @@
+<default>
+       <prerequisites>
+               <!-- hardware can occur more than once -->
+               <hardware type="dm7020hd" />
+       </prerequisites>
+       
+       <info>
+               <author>Dream Multimedia GmbH</author>
+               <name>Dream Multimedia Default</name>
+       </info>
+
+               <!-- available types: "directories" -->
+       <files type="directories">
+               <!--file type="skin" directory="test_skin/" flag="default" name="Default Skin" /-->
+               <file type="config" name="settings.7020hd" />
+               <!--file type="services" name="lamedb.192">
+                       <prerequisites>
+                               <bcastsystem type="DVB-S" />
+                               <satellite type="192" />
+                       </prerequisites>
+               </file-->
+               <file type="favourites" directory="" name="bouquets.tv">
+                       <prerequisites>
+                               <bcastsystem type="DVB-S" />
+                               <!--satellite type="192" /-->
+                       </prerequisites>
+               </file>
+               <file type="favourites" directory="hdbouquets/" name="userbouquet.favourites.tv">
+                       <prerequisites>
+                               <bcastsystem type="DVB-S" />
+                               <!--satellite type="192" /-->
+                       </prerequisites>
+               </file>
+               <file type="config" name="settings.c">
+                       <prerequisites>
+                               <bcastsystem type="DVB-C" />
+                       </prerequisites>
+               </file>
+               <file type="config" name="settings.t">
+                       <prerequisites>
+                               <bcastsystem type="DVB-T" />
+                       </prerequisites>
+               </file>
+               <!--file type="package" directory="packages/" name="small-test_1.0_mipsel.ipk" /-->
+       </files>
+</default>
index a1585cf..0211199 100644 (file)
                                <satellite type="192" />
                        </prerequisites>
                </file-->
-               <file type="favourites" directory="" name="bouquets.tv" />              
-               <file type="favourites" directory="sdbouquets/" name="userbouquet.favourites.tv" />
+               <file type="favourites" directory="" name="bouquets.tv">
+                       <prerequisites>
+                               <bcastsystem type="DVB-S" />
+                               <!--satellite type="192" /-->
+                       </prerequisites>
+               </file>
+               <file type="favourites" directory="sdbouquets/" name="userbouquet.favourites.tv">
+                       <prerequisites>
+                               <bcastsystem type="DVB-S" />
+                               <!--satellite type="192" /-->
+                       </prerequisites>
+               </file>
+               <file type="config" name="settings.c">
+                       <prerequisites>
+                               <bcastsystem type="DVB-C" />
+                       </prerequisites>
+               </file>
+               <file type="config" name="settings.t">
+                       <prerequisites>
+                               <bcastsystem type="DVB-T" />
+                       </prerequisites>
+               </file>
                <!--file type="package" directory="packages/" name="small-test_1.0_mipsel.ipk" /-->
        </files>
 </default>
index 4793bd8..39b0cb0 100644 (file)
                                <satellite type="192" />
                        </prerequisites>
                </file-->
-               <file type="favourites" directory="" name="bouquets.tv" />              
-               <file type="favourites" directory="hdbouquets/" name="userbouquet.favourites.tv" />
+               <file type="favourites" directory="" name="bouquets.tv">
+                       <prerequisites>
+                               <bcastsystem type="DVB-S" />
+                               <!--satellite type="192" /-->
+                       </prerequisites>
+               </file>
+               <file type="favourites" directory="hdbouquets/" name="userbouquet.favourites.tv">
+                       <prerequisites>
+                               <bcastsystem type="DVB-S" />
+                               <!--satellite type="192" /-->
+                       </prerequisites>
+               </file>
+               <file type="config" name="settings.c">
+                       <prerequisites>
+                               <bcastsystem type="DVB-C" />
+                       </prerequisites>
+               </file>
+               <file type="config" name="settings.t">
+                       <prerequisites>
+                               <bcastsystem type="DVB-T" />
+                       </prerequisites>
+               </file>
                <!--file type="package" directory="packages/" name="small-test_1.0_mipsel.ipk" /-->
        </files>
 </default>
index 2ef2013..f052226 100644 (file)
                                <satellite type="192" />
                        </prerequisites>
                </file-->
-               <file type="favourites" directory="" name="bouquets.tv" />              
-               <file type="favourites" directory="hdbouquets/" name="userbouquet.favourites.tv" />
+               <file type="favourites" directory="" name="bouquets.tv">
+                       <prerequisites>
+                               <bcastsystem type="DVB-S" />
+                               <!--satellite type="192" /-->
+                       </prerequisites>
+               </file>
+               <file type="favourites" directory="hdbouquets/" name="userbouquet.favourites.tv">
+                       <prerequisites>
+                               <bcastsystem type="DVB-S" />
+                               <!--satellite type="192" /-->
+                       </prerequisites>
+               </file>
+               <file type="config" name="settings.c">
+                       <prerequisites>
+                               <bcastsystem type="DVB-C" />
+                       </prerequisites>
+               </file>
+               <file type="config" name="settings.t">
+                       <prerequisites>
+                               <bcastsystem type="DVB-T" />
+                       </prerequisites>
+               </file>
                <!--file type="package" directory="packages/" name="small-test_1.0_mipsel.ipk" /-->
        </files>
 </default>
index 6974b12..1685ede 100644 (file)
                                <satellite type="192" />
                        </prerequisites>
                </file-->
-               <file type="favourites" directory="" name="bouquets.tv" />              
-               <file type="favourites" directory="hdbouquets/" name="userbouquet.favourites.tv" />
+               <file type="favourites" directory="" name="bouquets.tv">
+                       <prerequisites>
+                               <bcastsystem type="DVB-S" />
+                               <!--satellite type="192" /-->
+                       </prerequisites>
+               </file>
+               <file type="favourites" directory="hdbouquets/" name="userbouquet.favourites.tv">
+                       <prerequisites>
+                               <bcastsystem type="DVB-S" />
+                               <!--satellite type="192" /-->
+                       </prerequisites>
+               </file>
+               <file type="config" name="settings.c">
+                       <prerequisites>
+                               <bcastsystem type="DVB-C" />
+                       </prerequisites>
+               </file>
+               <file type="config" name="settings.t">
+                       <prerequisites>
+                               <bcastsystem type="DVB-T" />
+                       </prerequisites>
+               </file>
                <!--file type="package" directory="packages/" name="small-test_1.0_mipsel.ipk" /-->
        </files>
 </default>
diff --git a/data/defaults/Dream/settings.7020hd b/data/defaults/Dream/settings.7020hd
new file mode 100644 (file)
index 0000000..ae2963b
--- /dev/null
@@ -0,0 +1 @@
+config.misc.rcused=1
\ No newline at end of file
diff --git a/data/defaults/Dream/settings.c b/data/defaults/Dream/settings.c
new file mode 100644 (file)
index 0000000..72ab938
--- /dev/null
@@ -0,0 +1 @@
+config.tv.lastroot=1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 22) || (type == 25) || (type == 134) || (type == 195) ORDER BY name;
diff --git a/data/defaults/Dream/settings.t b/data/defaults/Dream/settings.t
new file mode 100644 (file)
index 0000000..72ab938
--- /dev/null
@@ -0,0 +1 @@
+config.tv.lastroot=1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 22) || (type == 25) || (type == 134) || (type == 195) ORDER BY name;
index 132b427..ff0ae8b 100644 (file)
@@ -12,11 +12,14 @@ self.condition = self.runWizard
 self.disableKeys = True
                </code>
        </step>
-       <step id="nopackages" nextstep="finisheddefaultsatlists">
+
+       <!--step id="nopackages" nextstep="finisheddefaultsatlists"-->
+       <step id="nopackages" nextstep="scanquestion">
                <text value="There are no default services lists in your image." />
        </step>
        
-       <step id="nothingtoinstall" nextstep="finisheddefaultsatlists">
+       <!--step id="nothingtoinstall" nextstep="finisheddefaultsatlists"-->
+       <step id="nothingtoinstall" nextstep="scanquestion">
                <condition>
 if self.runWizard:
        self.condition = True
old mode 100644 (file)
new mode 100755 (executable)
index a3cefe6..36f619d
@@ -6,6 +6,7 @@ gre ISO8859-7
 pol ISO8859-2
 rus ISO8859-5
 bul ISO8859-5
+tha ISO8859-11
 cze ISO6397
 ces ISO6397
 slo ISO6397
@@ -31,25 +32,32 @@ slk ISO6397
 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
+200 318 #Hotbird Eutelsat (Eurosport)
+300 318 #Hotbird Eutelsat (Eurosport, Animal Pl.HD)
 400 318 #Hotbird 13.0 Cyfra+
 1000 318 #Hotbird 13.0 Grupa ITI
 1500 318 #Hotbird 13.0 Cyfra+
 1600 318 #Hotbird 13.0 Cyfra+
+2800 318 #Hotbird 13.0 MTV Networks (Comedy Central)
 7400 113 #Hotbird 13.0 Cyfrowy Polsat
 7800 113 #Hotbird 13.0 Cyfrowy Polsat
 7900 113 #Hotbird 13.0 Cyfrowy Polsat
 8100 113 #Hotbird 13.0 Universal (Cyfra+)
+8100 318 #Hotbird 13.0 Eutelsat (Universal)
 11000 318 #Hotbird 13.0 Cyfra+
 11400 318 #Hotbird 13.0 Cyfra+
+11600 318 #Hotbird 13.0 BBC HD, ITI
+11700 318 #Hotbird 13.0 Eurosport2
 11900 318 #Hotbird 13.0 Cyfra+
 12200 318 #Hotbird 13.0 Disney Channel Polska and other
 12800 318 #Hotbird 13.0 Viacom ... MTV / VH1 Polska
 13000 318 #Hotbird 13.0 BBC Polska and other
+13100 318 #Hotbird 13.0 Crime and Investigation
 13200 113 #Hotbird 13.0 Cyfrowy Polsat
 #Fallback encoding table for single transponders
 #ISO6397 also enables two byte char encoding
 #TSID ONID ISO8859-X
-12800 318 ISO6397 #Viacom ... MTV / VH1 Polska
+#12800 318 ISO6397 #Viacom ... MTV / VH1 Polska
 21100 126 ISO8859-9 # Digital Platform 7°E 10.928 H 30.000 2/3 8PSK
 41200 126 ISO8859-9 # Digital Platform 7°E 11.451 V 25.066 2/3
 50100 126 ISO8859-9 # Digital Platform 7°E 11.471 H 30.000 3/4
index f743b8c..2f7e7c7 100644 (file)
@@ -1,7 +1,8 @@
-installdir = $(FONTDIR)
+installdir = $(datadir)/fonts
 
 dist_install_DATA = \
        ae_AlMateen.ttf \
        lcd.ttf \
        md_khmurabi_10.ttf \
-       nmsbd.ttf
+       nmsbd.ttf \
+       tuxtxt.ttf
diff --git a/data/fonts/tuxtxt.ttf b/data/fonts/tuxtxt.ttf
new file mode 100644 (file)
index 0000000..9be6547
Binary files /dev/null and b/data/fonts/tuxtxt.ttf differ
index 9461d50..f167024 100755 (executable)
                <device name="Console">
                        <key id="KEY_ASCII" mapto="gotAsciiCode" flags="mr" />
                </device>
+               <device name="SDL">
+                       <key id="KEY_ASCII" mapto="gotAsciiCode" flags="mr" />
+               </device>
        </map>
 
        <map context="InputBoxActions">
        
        <map context="InfobarMenuActions">
                <key id="KEY_MENU" mapto="mainMenu" flags="mr" />
+               <key id="KEY_SPACE" mapto="mainMenu" flags="mr" />
        </map>
        
        <map context="MenuActions">
                <key id="KEY_MENU" mapto="menu" flags="mr" />
+               <key id="KEY_SPACE" mapto="menu" flags="mr" />
        </map>
        
        <map context="InfobarShowHideActions">
 
        <map context="MovieSelectionActions">
                <key id="KEY_MENU" mapto="contextMenu" flags="m" />
+               <key id="KEY_SPACE" mapto="contextMenu" flags="m" />
                <key id="KEY_INFO" mapto="showEventInfo" flags="m" />
        </map>
 
 
        <map context="ChannelSelectEditActions">
                <key id="KEY_MENU" mapto="contextMenu" flags="m" />
+               <key id="KEY_SPACE" mapto="contextMenu" flags="m" />
        </map>
 
        <map context="TvRadioActions">
                </device>
                
                <key id="KEY_MENU" mapto="menu" flags="m" />
+               <key id="KEY_SPACE" mapto="menu" flags="m" />
 
                <key id="KEY_2" mapto="skipListbegin" flags="m" />
                <key id="KEY_8" mapto="skipListend" flags="m" />
diff --git a/data/keymaps/Makefile.am b/data/keymaps/Makefile.am
new file mode 100644 (file)
index 0000000..8499d99
--- /dev/null
@@ -0,0 +1,6 @@
+keymapsdir = $(datadir)/keymaps
+keymaps_DATA = \
+       dream-de.info \
+       dream-de.kmap \
+       eng.info \
+       eng.kmap
diff --git a/data/keymaps/dream-de.info b/data/keymaps/dream-de.info
new file mode 100644 (file)
index 0000000..d7f5b07
--- /dev/null
@@ -0,0 +1,2 @@
+kmap=dream-de.kmap
+name=Dreambox Keyboard Deutsch
diff --git a/data/keymaps/dream-de.kmap b/data/keymaps/dream-de.kmap
new file mode 100644 (file)
index 0000000..693317a
Binary files /dev/null and b/data/keymaps/dream-de.kmap differ
diff --git a/data/keymaps/eng.info b/data/keymaps/eng.info
new file mode 100644 (file)
index 0000000..d73372c
--- /dev/null
@@ -0,0 +1,2 @@
+kmap=eng.kmap
+name=Keyboard English
diff --git a/data/keymaps/eng.kmap b/data/keymaps/eng.kmap
new file mode 100644 (file)
index 0000000..15a722f
Binary files /dev/null and b/data/keymaps/eng.kmap differ
index f5dea73..8620709 100755 (executable)
                        <item level="2" text="Load Length of Movies in Movielist">config.usage.load_length_of_movies_in_moviellist</item>
                        <item level="1" text="Show positioner movement">config.usage.showdish</item>
                        <item level="1" text="Enable multiple bouquets">config.usage.multibouquet</item>
+                       <item level="1" text="Multi-EPG bouquet selection">config.usage.multiepg_ask_bouquet</item>
                        <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="1" text="Position of finished Timers in Timerlist">config.usage.timerlist_finished_timer_position</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="Fast Forward speeds">config.seek.speeds_forward</item>
                        <item level="2" text="Rewind speeds">config.seek.speeds_backward</item>
                        <item level="2" text="Slow Motion speeds">config.seek.speeds_slowmotion</item>
-<!-- TRANSLATORS: Note that "Enter" in the two strings below should *not*
-     be interpreted as "Give speed as input". The intended meaning is
-     instead "Initial speed when starting winding", i.e. the speed at
-     which "winding mode" is entered when first pressing "rewind" or
-     "fast forward". -->  
-                       <item level="2" text="Enter Fast Forward at speed">config.seek.enter_forward</item>
-                       <item level="2" text="Enter Rewind at speed">config.seek.enter_backward</item>
-<!-- TRANSLATORS: The effect of "Non-smooth winding" is that rather
-     than using ordinary "continuous" or "smooth" winding, a fast
-     sequence of stills is shown when winding at high speeds. This
-     makes it much easier too follow when almost each frame comes from
-     a new scene. The effect is achieved by repeating each shown frame
-     a couple of times. The settings control both at which speed this
-     winding mode sets in, and how many times each frame should be
-     repeated. This was previously called "Discontinuous playback"
-     which was incomprehensible. "Non-smooth winding" may be a better
-     term, but note that there is nothing irregular about it. Synonyms
-     better suited for translation to other languages may be "stepwise
-     winding/playback", or "winding/playback using stills". -->
-                       <item level="2" text="Use non-smooth winding at speeds above">config.seek.stepwise_minspeed</item>
-                       <item level="2" text="Frame repeat count during non-smooth winding">config.seek.stepwise_repeat</item>
+<!-- TRANSLATORS: The following is the speed you get on the first press on fast-forward.
+     It was previously called "enter fast forward at speed" which was easily misunderstood. -->  
+                       <item level="2" text="Initial Fast Forward speed">config.seek.enter_forward</item>
+                       <item level="2" text="Initial Rewind speed">config.seek.enter_backward</item>
                        <item level="2" text="Behavior of 'pause' when paused">config.seek.on_pause</item>
                        <item level="2" text="Behavior of 0 key in PiP-mode">config.usage.pip_zero_button</item>
                        <item level="2" text="Alternative services tuner priority">config.usage.alternatives_priority</item>
index 868fbc4..b4b6cbc 100755 (executable)
                        <pixmap pos="bpBottomRight" filename="skin_default/b_br.png" />
                </borderset>
        </windowstyle>
-       <!-- Main screen colors (id=1 LCD) -->
-       <windowstyle type="skinned" id="1">
-               <color name="Background" color="#000000" />
-               <color name="LabelForeground" color="#ffffff" />
-               <color name="ListboxBackground" color="#000000" />
-               <color name="ListboxForeground" color="#ffffff" />
-               <color name="ListboxSelectedBackground" color="#000000" />
-               <color name="ListboxSelectedForeground" color="#ffffff" />
-               <color name="ListboxMarkedBackground" color="#000000" />
-               <color name="ListboxMarkedForeground" color="#ffffff" />
-               <color name="ListboxMarkedAndSelectedBackground" color="#000000" />
-               <color name="ListboxMarkedAndSelectedForeground" color="#ffffff" />
-               <color name="WindowTitleForeground" color="#ffffff" />
-               <color name="WindowTitleBackground" color="#000000" />
-       </windowstyle>
-       <windowstyle type="skinned" id="2">
-               <color name="Background" color="#000000" />
-               <color name="LabelForeground" color="#ffffff" />
-               <color name="ListboxBackground" color="#000000" />
-               <color name="ListboxForeground" color="#ffffff" />
-               <color name="ListboxSelectedBackground" color="#000000" />
-               <color name="ListboxSelectedForeground" color="#ffffff" />
-               <color name="ListboxMarkedBackground" color="#000000" />
-               <color name="ListboxMarkedForeground" color="#ffffff" />
-               <color name="ListboxMarkedAndSelectedBackground" color="#000000" />
-               <color name="ListboxMarkedAndSelectedForeground" color="#ffffff" />
-               <color name="WindowTitleForeground" color="#ffffff" />
-               <color name="WindowTitleBackground" color="#000000" />
-       </windowstyle>
        <!-- Fonts -->
        <fonts>
                <!-- <font filename="md_khmurabi_10.ttf" name="Regular" scale="90" /> -->
index e5b3132..2dee1db 100755 (executable)
@@ -1,4 +1,37 @@
 <skin>
+       <!-- Main screen colors (id=1 LCD) -->
+       <windowstyle type="skinned" id="1">
+               <color name="Background" color="#000000" />
+               <color name="LabelForeground" color="#ffffff" />
+               <color name="ListboxBackground" color="#000000" />
+               <color name="ListboxForeground" color="#ffffff" />
+               <color name="ListboxSelectedBackground" color="#000000" />
+               <color name="ListboxSelectedForeground" color="#ffffff" />
+               <color name="ListboxMarkedBackground" color="#000000" />
+               <color name="ListboxMarkedForeground" color="#ffffff" />
+               <color name="ListboxMarkedAndSelectedBackground" color="#000000" />
+               <color name="ListboxMarkedAndSelectedForeground" color="#ffffff" />
+               <color name="WindowTitleForeground" color="#ffffff" />
+               <color name="WindowTitleBackground" color="#000000" />
+       </windowstyle>
+       <!-- Main screen colors (id=2 Color OLED (dm800se)) -->
+       <windowstyle type="skinned" id="2">
+               <color name="Background" color="#000000" />
+               <color name="LabelForeground" color="#ffffff" />
+               <color name="ListboxBackground" color="#000000" />
+               <color name="ListboxForeground" color="#ffffff" />
+               <color name="ListboxSelectedBackground" color="#000000" />
+               <color name="ListboxSelectedForeground" color="#ffffff" />
+               <color name="ListboxMarkedBackground" color="#000000" />
+               <color name="ListboxMarkedForeground" color="#ffffff" />
+               <color name="ListboxMarkedAndSelectedBackground" color="#000000" />
+               <color name="ListboxMarkedAndSelectedForeground" color="#ffffff" />
+               <color name="WindowTitleForeground" color="#ffffff" />
+               <color name="WindowTitleBackground" color="#000000" />
+       </windowstyle>
+       <fonts>
+               <font filename="nmsbd.ttf" name="Display" scale="90"/>
+       </fonts>
        <!-- Screwed Stone II skin (skin_default.xml) /Nemesis -->
        <!-- About screen -->
        <screen name="About" position="center,center" size="420,350" title="About">
@@ -695,18 +728,18 @@ self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
        <!-- Numerical help dialog -->
        <screen name="NumericalTextInputHelpDialog" position="190,400" zPosition="2" size="394,124" backgroundColor="#202020" flags="wfNoBorder">
                <eLabel position="0,0" size="392,122" backgroundColor="#c0c0c0" zPosition="-1" />
-               <widget name="key1" position="2,2" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="key2" position="132,2" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="key3" position="262,2" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="key4" position="2,32" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="key5" position="132,32" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="key6" position="262,32" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="key7" position="2,62" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="key8" position="132,62" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="key9" position="262,62" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="help1" position="2,92" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="key0" position="132,92" size="130,30" font="Console;12" halign="center" valign="center" />
-               <widget name="help2" position="262,92" size="130,30" font="Console;16" halign="center" valign="center" />
+               <widget name="key1" position="2,2" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="key2" position="132,2" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="key3" position="262,2" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="key4" position="2,32" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="key5" position="132,32" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="key6" position="262,32" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="key7" position="2,62" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="key8" position="132,62" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="key9" position="262,62" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="help1" position="2,92" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="key0" position="132,92" size="130,30" font="Regular;14" halign="center" valign="center" />
+               <widget name="help2" position="262,92" size="130,30" font="Regular;18" halign="center" valign="center" />
        </screen>
        <!-- Parental control - editor -->
        <screen name="ParentalControlEditor" position="center,center" size="520,400" title="Parental control services Editor">
@@ -1118,10 +1151,13 @@ self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
        </screen>
        <!-- VirtualKeyBoard -->
        <screen name="VirtualKeyBoard" position="center,center" size="560,350" zPosition="99" title="Virtual KeyBoard">
-               <ePixmap pixmap="skin_default/vkey_text.png" position="9,35" zPosition="-4" size="542,52" alphatest="on" />
-               <widget name="header" position="10,10" size="500,20" font="Regular;20" transparent="1" noWrap="1" />
-               <widget name="text" position="12,35" size="536,46" font="Regular;46" transparent="1" noWrap="1" halign="right" />
-               <widget name="list" position="10,100" size="540,225" selectionDisabled="1" transparent="1" />
+               <ePixmap pixmap="skin_default/vkey_text.png" position="9,45" zPosition="-4" size="542,52" alphatest="on" />
+               <widget source="country" render="Pixmap" position="490,0" size="60,40" alphatest="on" borderWidth="2" borderColor="yellow" >
+                       <convert type="ValueToPixmap">LanguageCode</convert>
+               </widget>
+               <widget name="header" position="10,20" size="500,20" font="Regular;20" transparent="1" noWrap="1" />
+               <widget name="text" position="12,45" size="536,46" font="Regular;46" transparent="1" noWrap="1" halign="right" />
+               <widget name="list" position="10,110" size="540,225" selectionDisabled="1" transparent="1" />
        </screen>
        <!-- FileBrowser -->
        <screen name="FileBrowser" position="center,center" size="520,430" title="DVD File Browser" >
@@ -1136,75 +1172,75 @@ self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
 
        <!-- LCD screen (channelselection) -->
        <screen name="ChannelSelection_summary" position="0,0" size="132,64" id="1">
-               <widget source="parent.ServiceEvent" render="Label" position="6,0" size="120,25" font="Regular;14" halign="center" valign="center" >
+               <widget source="parent.ServiceEvent" render="Label" position="6,0" size="120,25" font="Display;14" halign="center" valign="center" >
                        <convert type="ServiceName">Name</convert>
                </widget>
                <widget source="parent.ServiceEvent" render="Progress" position="16,27" size="100,5" borderWidth="1">
                        <convert type="EventTime">Progress</convert>
                </widget>
-               <widget source="global.CurrentTime" render="Label" position="6,32" size="90,32" font="Regular;32" halign="right" valign="top">
+               <widget source="global.CurrentTime" render="Label" position="6,32" size="90,32" font="Display;32" halign="right" valign="top">
                        <convert type="ClockToText">Format:%H:%M</convert>
                </widget>
-               <widget source="global.CurrentTime" render="Label" position="100,34" zPosition="1" size="26,30" font="Regular;16" valign="top">
+               <widget source="global.CurrentTime" render="Label" position="100,34" zPosition="1" size="26,30" font="Display;16" valign="top">
                        <convert type="ClockToText">Format:%S</convert>
                </widget>
        </screen> 
        <!-- Color OLED screen (ChannelSelection) -->
        <screen name="ChannelSelection_summary" position="0,0" size="96,64" id="2">
-               <widget source="parent.ServiceEvent" render="Label" position="0,0" size="96,28" font="Regular;16" halign="center" valign="center" >
+               <widget source="parent.ServiceEvent" render="Label" position="0,0" size="96,28" font="Display;16" halign="center" valign="center" >
                        <convert type="ServiceName">Name</convert>
                </widget>
                <widget source="session.Event_Now" render="Progress" position="0,30" size="96,8" borderWidth="1" backgroundColor="dark">
                        <convert type="EventTime">Progress</convert>
                </widget>
-               <widget source="global.CurrentTime" render="Label" position="0,38" size="96,26" font="Regular;32" halign="center" valign="center" foregroundColor="#FFFFFF" backgroundColor="#000000" >
+               <widget source="global.CurrentTime" render="Label" position="0,38" size="96,26" font="Display;32" halign="center" valign="center" foregroundColor="#FFFFFF" backgroundColor="#000000" >
                        <convert type="ClockToText">Format:%H:%M</convert>
                </widget>
        </screen>
        <!-- LCD screen (main) -->
        <screen name="InfoBarSummary" position="0,0" size="132,64" id="1">
-               <widget source="session.CurrentService" render="Label" position="6,0" size="120,25" font="Regular;14" halign="center" valign="center" >
+               <widget source="session.CurrentService" render="Label" position="6,0" size="120,25" font="Display;14" halign="center" valign="center" >
                        <convert type="ServiceName">Name</convert>
                </widget>
                <widget source="session.Event_Now" render="Progress" position="16,27" size="100,5" borderWidth="1">
                        <convert type="EventTime">Progress</convert>
                </widget>
-               <widget source="global.CurrentTime" render="Label" position="6,32" size="90,32" font="Regular;32" halign="right" valign="top">
+               <widget source="global.CurrentTime" render="Label" position="6,32" size="90,32" font="Display;32" halign="right" valign="top">
                        <convert type="ClockToText">Format:%H:%M</convert>
                </widget>
-               <widget source="global.CurrentTime" render="Label" position="100,34" zPosition="1" size="26,30" font="Regular;16" valign="top">
+               <widget source="global.CurrentTime" render="Label" position="100,34" zPosition="1" size="26,30" font="Display;16" valign="top">
                        <convert type="ClockToText">Format:%S</convert>
                </widget>
-               <widget source="session.RecordState" render="FixedLabel" text=" " position="6,30" zPosition="1" size="120,34">
+               <widget source="session.RecordState" render="FixedLabel" text=" " position="6,32" zPosition="1" size="126,32">
                        <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
                        <convert type="ConditionalShowHide">Blink</convert>
                </widget>
        </screen>
        <!-- Color OLED screen (main) -->
        <screen name="InfoBarSummary" position="0,0" size="96,64" id="2">
-               <widget source="session.CurrentService" render="Label" position="0,0" size="96,28" font="Regular;16" halign="center" valign="center" >
+               <widget source="session.CurrentService" render="Label" position="0,0" size="96,28" font="Display;16" halign="center" valign="center" >
                        <convert type="ServiceName">Name</convert>
                </widget>
                <widget source="session.Event_Now" render="Progress" position="0,30" size="96,8" borderWidth="1" backgroundColor="dark">
                        <convert type="EventTime">Progress</convert>
                </widget>
-               <widget source="global.CurrentTime" render="Label" position="0,38" size="96,26" font="Regular;32" halign="center" valign="center" foregroundColor="#FFFFFF" backgroundColor="#000000" >
+               <widget source="global.CurrentTime" render="Label" position="0,38" size="96,26" font="Display;32" halign="center" valign="center" foregroundColor="#FFFFFF" backgroundColor="#000000" >
                        <convert type="ClockToText">Format:%H:%M</convert>
                </widget>
-               <widget source="session.RecordState" render="FixedLabel" text=" " position="0,38" zPosition="1" size="96,30">
+               <widget source="session.RecordState" render="FixedLabel" text=" " position="0,38" zPosition="1" size="96,26">
                        <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
                        <convert type="ConditionalShowHide">Blink</convert>
                </widget>
        </screen>
        <!-- LCD screen (movieplayer) -->
        <screen name="InfoBarMoviePlayerSummary" position="0,0" size="132,64" id="1">
-               <widget source="session.CurrentService" render="Label" position="6,0" size="120,25" font="Regular;14" halign="center" valign="center" >
+               <widget source="session.CurrentService" render="Label" position="6,0" size="120,25" font="Display;14" halign="center" valign="center" >
                        <convert type="ServiceName">Name</convert>
                </widget>
                <widget source="session.CurrentService" render="Progress" position="16,27" size="100,5" borderWidth="1">
                        <convert type="ServicePosition">Position</convert>
                </widget>
-               <widget source="global.CurrentTime" render="Label" position="6,32" size="120,32" font="Regular;32" halign="center" valign="center">
+               <widget source="global.CurrentTime" render="Label" position="6,32" size="120,32" font="Display;32" halign="center" valign="center">
                        <convert type="ClockToText">Format:%H:%M</convert>
                </widget>
                <widget source="session.RecordState" render="FixedLabel" text=" " position="6,32" zPosition="1" size="120,32">
@@ -1214,87 +1250,87 @@ self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
        </screen>
        <!-- Color OLED screen (movieplayer) -->
        <screen name="InfoBarMoviePlayerSummary" position="0,0" size="96,64" id="2">
-               <widget source="session.CurrentService" render="Label" position="0,0" size="96,28" font="Regular;16" halign="center" valign="center" >
+               <widget source="session.CurrentService" render="Label" position="0,0" size="96,28" font="Display;16" halign="center" valign="center" >
                        <convert type="ServiceName">Name</convert>
                </widget>
                <widget source="session.Event_Now" render="Progress" position="0,30" size="96,8" borderWidth="1" backgroundColor="dark">
                        <convert type="EventTime">Progress</convert>
                </widget>
-               <widget source="global.CurrentTime" render="Label" position="0,38" size="96,26" font="Regular;32" halign="center" valign="center" foregroundColor="#FFFFFF" backgroundColor="#000000" >
+               <widget source="global.CurrentTime" render="Label" position="0,38" size="96,26" font="Display;32" halign="center" valign="center" foregroundColor="#FFFFFF" backgroundColor="#000000" >
                        <convert type="ClockToText">Format:%H:%M</convert>
                </widget>
-               <widget source="session.RecordState" render="FixedLabel" text=" " position="0,38" zPosition="1" size="96,30">
+               <widget source="session.RecordState" render="FixedLabel" text=" " position="0,38" zPosition="1" size="96,26">
                        <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
                        <convert type="ConditionalShowHide">Blink</convert>
                </widget>
        </screen>
        <!-- LCD screen (ChoiceBox) -->
        <screen name="ChoiceBox_summary" position="0,0" size="132,64" id="1">
-               <widget source="parent.summary_list" render="Label" position="6,0" size="126,64" font="Regular;11" />
+               <widget source="parent.summary_list" render="Label" position="6,0" size="126,64" font="Display;11" />
        </screen>
        <!-- Color OLED screen (ChoiceBox) -->
        <screen name="ChoiceBox_summary" position="0,0" size="96,64" id="2">
-               <widget source="parent.summary_list" render="Label" position="0,0" size="96,64" font="Regular;10" />
+               <widget source="parent.summary_list" render="Label" position="0,0" size="96,64" font="Display;10" />
        </screen>       
        <!-- LCD screen (MessageBox) -->
        <screen name="MessageBox_summary" position="0,0" size="132,64" id="1">
-               <widget source="parent.Text" render="Label" position="0,0" size="132,52" font="Regular;11" halign="center" valign="center" />
-               <widget source="parent.selectedChoice" render="Label" position="6,50" size="120,14" font="Regular;14" halign="center" valign="center" />
+               <widget source="parent.Text" render="Label" position="0,0" size="132,52" font="Display;11" halign="center" valign="center" />
+               <widget source="parent.selectedChoice" render="Label" position="6,50" size="120,14" font="Display;14" halign="center" valign="center" />
        </screen>
        <!-- Color OLED screen (MessageBox) -->
        <screen name="MessageBox_summary" position="0,0" size="96,64" id="2">
-               <widget source="parent.Text" render="Label" position="0,0" size="96,52" font="Regular;10" halign="center" valign="center" />
-               <widget source="parent.selectedChoice" render="Label" position="0,50" size="96,14" font="Regular;12" halign="center" valign="center" />
+               <widget source="parent.Text" render="Label" position="0,0" size="96,52" font="Display;10" halign="center" valign="center" />
+               <widget source="parent.selectedChoice" render="Label" position="0,50" size="96,14" font="Display;12" halign="center" valign="center" />
        </screen>
        <!-- LCD screen (menus) -->
        <screen name="MenuSummary" position="0,0" size="132,64" id="1">
-               <widget source="parent.title" render="Label" position="6,0" size="120,32" font="Regular;14" halign="center" valign="center"/>
-               <widget source="parent.menu" render="Label" position="6,32" size="120,32" font="Regular;16" halign="center" valign="center">
+               <widget source="parent.title" render="Label" position="6,0" size="120,32" font="Display;14" halign="center" valign="center"/>
+               <widget source="parent.menu" render="Label" position="6,32" size="120,32" font="Display;16" halign="center" valign="center">
                        <convert type="StringListSelection" />
                </widget>
        </screen> 
        <!-- Color OLED screen (menus) -->
        <screen name="MenuSummary" position="0,0" size="96,64" id="2">
-               <widget source="parent.title" render="Label" position="0,0" size="96,32" font="Regular;15" halign="center" valign="center"/>
-               <widget source="parent.menu" render="Label" position="0,32" size="96,32" font="Regular;16" halign="center" valign="top">
+               <widget source="parent.title" render="Label" position="0,0" size="96,32" font="Display;15" halign="center" valign="center"/>
+               <widget source="parent.menu" render="Label" position="0,32" size="96,32" font="Display;16" halign="center" valign="top">
                        <convert type="StringListSelection" />
                </widget>
        </screen>       
        <!-- LCD screen (ServiceScan) -->
        <screen name="ServiceScanSummary" position="0,0" size="132,64" id="1">
-               <widget name="Title" position="6,4" size="120,42" font="Regular;16" transparent="1" />
-               <widget name="Service" position="6,22" size="120,26" font="Regular;12" transparent="1" />
+               <widget name="Title" position="6,4" size="120,42" font="Display;16" transparent="1" />
+               <widget name="Service" position="6,22" size="120,26" font="Display;12" transparent="1" />
                <widget name="scan_progress" position="6,50" zPosition="1" borderWidth="1" size="56,12" backgroundColor="dark" />
        </screen>
        <!-- Color OLED screen (ServiceScan) -->
        <screen name="ServiceScanSummary" position="0,0" size="96,64" id="2">
-               <widget name="Title" position="0,0" size="96,30" font="Regular;14" transparent="1" />
-               <widget name="Service" position="0,30" size="96,20" font="Regular;10" transparent="1" />
+               <widget name="Title" position="0,0" size="96,30" font="Display;14" transparent="1" />
+               <widget name="Service" position="0,30" size="96,20" font="Display;10" transparent="1" />
                <widget name="scan_progress" position="0,50" zPosition="1" borderWidth="1" size="96,12" backgroundColor="dark" />
        </screen>
        <!-- LCD screen (setup) -->
        <screen name="SetupSummary" position="0,0" size="132,64" id="1">
-               <widget source="SetupTitle" render="Label" position="6,0" size="120,16" font="Regular;12" />
-               <widget source="SetupEntry" render="Label" position="6,16" size="120,32" font="Regular;12" />
-               <widget source="SetupValue" render="Label" position="6,48" size="120,16" font="Regular;12" />
+               <widget source="SetupTitle" render="Label" position="6,0" size="120,24" halign="left" font="Display;12" />
+               <widget source="SetupEntry" render="Label" position="6,24" size="120,24" halign="center" font="Display;12" />
+               <widget source="SetupValue" render="Label" position="6,48" size="120,16" halign="right" font="Display;12" />
        </screen>
        <!-- Color OLED screen (setup) -->
        <screen name="SetupSummary" position="0,0" size="96,64" id="2">
-               <widget source="SetupTitle" render="Label" position="0,0" size="96,16" font="Regular;10" />
-               <widget source="SetupEntry" render="Label" position="0,16" size="96,32" font="Regular;10" />
-               <widget source="SetupValue" render="Label" position="0,48" size="96,16" font="Regular;10" />
+               <widget source="SetupTitle" render="Label" position="0,0" size="96,24" halign="left" font="Display;10" />
+               <widget source="SetupEntry" render="Label" position="0,24" size="96,24" halign="center" font="Display;10" />
+               <widget source="SetupValue" render="Label" position="0,48" size="96,16" halign="right" font="Display;10" />
        </screen>
        <!-- LCD screen (misc) -->
        <screen name="SimpleSummary" position="0,0" size="132,64" id="1">
-               <widget source="parent.Title" render="Label" position="6,0" size="120,64" font="Regular;16" halign="center" valign="center" />
+               <widget source="parent.Title" render="Label" position="6,0" size="120,64" font="Display;16" halign="center" valign="center" />
        </screen>
        <!-- Color OLED screen (misc) -->
        <screen name="SimpleSummary" position="0,0" size="96,64" id="2">
-               <widget source="parent.Title" render="Label" position="0,0" size="96,64" font="Regular;14" halign="center" valign="center" />
+               <widget source="parent.Title" render="Label" position="0,0" size="96,64" font="Display;14" halign="center" valign="center" />
        </screen>
        <!-- LCD screen (standby) -->
        <screen name="StandbySummary" position="0,0" size="132,64" id="1">
-               <widget source="global.CurrentTime" render="Label" position="6,0" size="120,64" font="Regular;40" halign="center" valign="center">
+               <widget source="global.CurrentTime" render="Label" position="6,0" size="120,64" font="Display;40" halign="center" valign="center">
                        <convert type="ClockToText">Format:%H:%M</convert>
                </widget>
                <widget source="session.RecordState" render="FixedLabel" position="6,0" zPosition="1" size="120,64" text=" ">
@@ -1304,7 +1340,7 @@ self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
        </screen>
        <!-- Color OLED screen (standby) -->
        <screen name="StandbySummary" position="0,0" size="96,64" id="2">
-               <widget source="global.CurrentTime" render="Label" position="0,0" size="96,64" font="Regular;38" halign="center" valign="center">
+               <widget source="global.CurrentTime" render="Label" position="0,0" size="96,64" font="Display;38" halign="center" valign="center">
                        <convert type="ClockToText">Format:%H:%M</convert>
                </widget>
                <widget source="session.RecordState" render="FixedLabel" position="0,0" zPosition="1" size="96,64" text=" ">
@@ -1314,33 +1350,33 @@ self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
        </screen>
        <!-- LCD screen (JobView) -->
        <screen name="JobView_summary" position="0,0" size="132,64" id="1">
-               <widget source="parent.summary_job_name" render="Label" position="6,4" size="120,42" font="Regular;16" />
-               <widget source="parent.summary_job_task" render="Label" position="6,22" size="120,26" font="Regular;12" />
+               <widget source="parent.summary_job_name" render="Label" position="6,4" size="120,42" font="Display;16" />
+               <widget source="parent.summary_job_task" render="Label" position="6,22" size="120,26" font="Display;12" />
                <widget source="parent.summary_job_progress" render="Progress" position="6,50" size="60,12" borderWidth="1" zPosition="1" />
-               <widget source="parent.summary_job_progress" render="Label" position="66,50" size="50,12" font="Regular;12" zPosition="2" halign="center" transparent="1"  >
+               <widget source="parent.summary_job_progress" render="Label" position="66,50" size="50,12" font="Display;12" zPosition="2" halign="center" transparent="1"  >
                        <convert type="ProgressToText" />
                </widget>
        </screen>
        <!-- Color OLED screen (JobView) -->
        <screen name="JobView_summary" position="0,0" size="96,64" id="2">
-               <widget source="parent.summary_job_name" render="Label" position="0,4" size="96,42" font="Regular;14" />
-               <widget source="parent.summary_job_task" render="Label" position="0,22" size="96,26" font="Regular;10" />
+               <widget source="parent.summary_job_name" render="Label" position="0,4" size="96,42" font="Display;14" />
+               <widget source="parent.summary_job_task" render="Label" position="0,22" size="96,26" font="Display;10" />
                <widget source="parent.summary_job_progress" render="Progress" position="0,50" size="60,12" borderWidth="1" zPosition="1" />
-               <widget source="parent.summary_job_progress" render="Label" position="60,50" size="36,12" font="Regular;10" zPosition="2" halign="center" transparent="1"  >
+               <widget source="parent.summary_job_progress" render="Label" position="60,50" size="36,12" font="Display;10" zPosition="2" halign="center" transparent="1"  >
                        <convert type="ProgressToText" />
                </widget>
        </screen>
        <!-- LCD screen (Wizard) -->
        <screen name="WizardSummary" position="0,0" size="132,64" id="1">
-               <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">
+               <widget source="text" render="Label" position="6,0" size="120,16" font="Display;16" transparent="1" />
+               <widget source="parent.list" render="Label" position="6,18" size="120,46" font="Display;12">
                        <convert type="StringListSelection" />
                </widget>
        </screen>
        <!-- Color OLED screen (Wizard) -->
        <screen name="WizardSummary" position="0,0" size="96,64" id="2">
-               <widget source="text" render="Label" position="0,0" size="96,16" font="Regular;14" transparent="1" />
-               <widget source="parent.list" render="Label" position="0,18" size="96,46" font="Regular;12">
+               <widget source="text" render="Label" position="0,0" size="96,16" font="Display;14" transparent="1" />
+               <widget source="parent.list" render="Label" position="0,18" size="96,46" font="Display;12">
                        <convert type="StringListSelection" />
                </widget>
        </screen>
index b453aa7..7a709b0 100755 (executable)
@@ -45,10 +45,10 @@ dist_install_DATA = \
        mp_buttons.png \
        network_wired.png \
        network_wired-active.png \
-       network_wired-inactive.png \    
+       network_wired-inactive.png \
        network_wireless.png \
        network_wireless-active.png \
-       network_wireless-inactive.png \ 
+       network_wireless-inactive.png \
        plugin.png \
        rass_logo.png \
        rass_page1.png \
diff --git a/debug b/debug
deleted file mode 100755 (executable)
index d247b3e..0000000
--- a/debug
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-/home/dump/tmb/oe-mono/build/tmp/work/gdb-cross-6.3-r0/install/gdb-cross/usr/local/mipsel/oe/bin/mipsel-linux-gdb main/enigma2 -x debug.gdb
-
diff --git a/debug.gdb b/debug.gdb
deleted file mode 100644 (file)
index 69cf5d0..0000000
--- a/debug.gdb
+++ /dev/null
@@ -1,3 +0,0 @@
-set solib-absolute-prefix /home/tmbinc/mips/target
-target remote 10.0.0.203:1234
-continue
diff --git a/enigma2.bb b/enigma2.bb
new file mode 100644 (file)
index 0000000..2da423c
--- /dev/null
@@ -0,0 +1,75 @@
+DESCRIPTION = "Enigma2 is an experimental, but useful framebuffer-based frontend for DVB functions"
+DESCRIPTION_append_enigma2-plugin-extensions-cutlisteditor = "enables you to cut your movies."
+DESCRIPTION_append_enigma2-plugin-extensions-graphmultiepg = "shows a graphical timeline EPG."
+DESCRIPTION_append_enigma2-plugin-extensions-pictureplayer = "displays photos on the TV."
+DESCRIPTION_append_enigma2-plugin-systemplugins-frontprocessorupdate = "keeps your frontprocessor up to date."
+DESCRIPTION_append_enigma2-plugin-systemplugins-positionersetup = "helps you installing a motorized dish."
+DESCRIPTION_append_enigma2-plugin-systemplugins-satelliteequipmentcontrol = "allows you to fine-tune DiSEqC-settings."
+DESCRIPTION_append_enigma2-plugin-systemplugins-satfinder = "helps you to align your dish."
+DESCRIPTION_append_enigma2-plugin-systemplugins-skinselector = "shows a menu with selectable skins."
+DESCRIPTION_append_enigma2-plugin-systemplugins-videomode = "selects advanced video modes"
+DESCRIPTION_append_enigma2-plugin-systemplugins-crashlogautosubmit = "automatically send crashlogs to Dream Multimedia"
+DESCRIPTION_append_enigma2-plugin-systemplugins-cleanupwizard = "informs you on low internal memory on system startup."
+DESCRIPTION_append_enigma2-plugin-extenstions-modem = "opens a menu to connect to internet via builtin modem."
+DESCRIPTION_append_enigma2-plugin-systemplugins-wirelesslan = "helps you configuring your wireless lan"
+DESCRIPTION_append_enigma2-plugin-systemplugins-networkwizard = "provides easy step by step network configuration"
+
+DEPENDS = "jpeg libungif libpng libsigc++-1.2 gettext-native \
+        dreambox-dvbincludes freetype libdvbsi++ python swig-native \
+        libfribidi libxmlccwrap libdreamdvd gstreamer gst-plugin-dvbmediasink \
+        gst-plugins-bad gst-plugins-good gst-plugins-ugly python-wifi"
+
+RDEPENDS = "python-codecs python-core python-lang python-re python-threading \
+        python-xml python-fcntl gst-plugin-decodebin gst-plugin-decodebin2 python-stringold \
+        python-pickle gst-plugin-app \
+        gst-plugin-id3demux gst-plugin-mad gst-plugin-ogg gst-plugin-playbin \
+        gst-plugin-typefindfunctions gst-plugin-audioconvert gst-plugin-audioresample \
+        gst-plugin-wavparse python-netclient gst-plugin-mpegstream gst-plugin-selector \
+        gst-plugin-flac gst-plugin-dvbmediasink gst-plugin-mpegdemux \
+        gst-plugin-souphttpsrc gst-plugin-mpegaudioparse gst-plugin-subparse \
+        gst-plugin-apetag gst-plugin-icydemux gst-plugin-autodetect \
+        glibc-gconv-iso8859-15 ethtool"
+
+GST_ALSA_RDEPENDS = "gst-plugin-alsa alsa-conf"
+GST_DVD_RDEPENDS = "gst-plugin-cdxaparse gst-plugin-cdio gst-plugin-vcdsrc"
+GST_MISC_RDEPENDS = "gst-plugin-matroska gst-plugin-qtdemux gst-plugin-vorbis gst-plugin-audioparsersbad"
+GST_RTSP_RDEPENDS = "gst-plugin-udp gst-plugin-rtsp gst-plugin-rtp gst-plugin-rtpmanager"
+GST_BASE_RDEPENDS = "${GST_ALSA_RDEPENDS} ${GST_MISC_RDEPENDS} ${GST_RTSP_RDEPENDS}"
+
+RDEPENDS_append_dm800 = " ${GST_BASE_RDEPENDS} gst-plugin-ivorbisdec"
+RDEPENDS_append_dm8000 = " ${GST_BASE_RDEPENDS} ${GST_DVD_RDEPENDS} gst-plugin-avi"
+RDEPENDS_append_dm500hd = " ${GST_BASE_RDEPENDS} ${GST_DVD_RDEPENDS} gst-plugin-avi"
+RDEPENDS_append_dm800se = " ${GST_BASE_RDEPENDS} ${GST_DVD_RDEPENDS} gst-plugin-avi"
+
+RDEPENDS_enigma2-plugin-extensions-cutlisteditor = "aio-grab"
+RDEPENDS_enigma2-plugin-extensions-dvdplayer = "libdreamdvd0"
+RDEPENDS_enigma2-plugin-systemplugins-nfiflash = "python-twisted-web"
+RDEPENDS_enigma2-plugin-systemplugins-softwaremanager = "python-twisted-web"
+RDEPENDS_enigma2-plugin-systemplugins-crashlogautosubmit = "twisted-mail twisted-names python-compression python-mime python-email"
+RDEPENDS_enigma2-plugin-extensions-modem = "dreambox-modem-ppp-scripts ppp"
+RDEPENDS_enigma2-plugin-systemplugins-wirelesslan = "wpa-supplicant wireless-tools python-wifi"
+
+RCONFLICTS_enigma2-plugin-systemplugins-softwaremanager = "enigma2-plugin-systemplugins-configurationbackup enigma2-plugin-systemplugins-softwareupdate"
+RREPLACES_enigma2-plugin-systemplugins-softwaremanager = "enigma2-plugin-systemplugins-configurationbackup enigma2-plugin-systemplugins-softwareupdate"
+
+PV = "${GITVER}"
+
+inherit srctree autotools gitver pkgconfig
+
+EXTRA_OECONF = " \
+        BUILD_SYS=${BUILD_SYS} \
+        HOST_SYS=${HOST_SYS} \
+        STAGING_INCDIR=${STAGING_INCDIR} \
+        STAGING_LIBDIR=${STAGING_LIBDIR} \
+"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+PACKAGES += "${PN}-meta"
+
+FILES_${PN} += "${datadir}/fonts"
+FILES_${PN}-meta = "${datadir}/meta"
+
+python populate_packages_prepend () {
+        enigma2_plugindir = bb.data.expand('${libdir}/enigma2/python/Plugins', d)
+        do_split_packages(d, enigma2_plugindir, '(.*?/.*?)/.*', 'enigma2-plugin-%s', '%s ', recursive=True, match_path=True, prepend=True)
+}
index 01ba434..f34d904 100644 (file)
@@ -6,5 +6,5 @@ includedir=@includedir@
 Name: enigma2
 Description: Enigma2
 Version: @VERSION@
-Libs: 
-Cflags: -I${includedir}/enigma2
+Cflags: -I${includedir}/enigma2 @ENIGMA2_CFLAGS@
+Requires.private: sigc++-1.2
index d0c682f..ada16ca 100644 (file)
@@ -1,3 +1,3 @@
-EXTRA_DIST = \
+pkginclude_HEADERS = \
        connection.h \
        libsig_comp.h
diff --git a/lib/actions/.gitignore b/lib/actions/.gitignore
new file mode 100644 (file)
index 0000000..460e43d
--- /dev/null
@@ -0,0 +1 @@
+actionids.h
index 8da583f..eb8327d 100644 (file)
@@ -1,15 +1,27 @@
-INCLUDES = \
-       -I$(top_srcdir)/include
+AM_CPPFLAGS = \
+       -I$(top_builddir) \
+       -I$(top_srcdir) \
+       -I$(top_srcdir)/include \
+       -include Python.h \
+       -include $(top_builddir)/enigma2_config.h
+
+EXTRA_DIST = parseactions.py
 
 noinst_LIBRARIES = libenigma_actions.a
 
 libenigma_actions_a_SOURCES = \
-       action.cpp 
+       action.cpp
 
-CLEANFILES = actionids.h
+actionsincludedir = $(pkgincludedir)/lib/actions
+actionsinclude_HEADERS = \
+       action.h
 
-action.cpp: actionids.h
+nodist_actionsinclude_HEADERS = \
+       actionids.h
+
+BUILT_SOURCES = actionids.h
+CLEANFILES = actionids.h
 
-actionids.h:
-        python ./parseactions.py include ../gui/*.h > actionids.h
-        python ./parseactions.py parse ../gui/*.h >> actionids.h
+actionids.h: $(srcdir)/parseactions.py $(top_srcdir)/lib/gui/*.h
+       $(AM_V_GEN)$(PYTHON) $(srcdir)/parseactions.py include $(top_srcdir)/lib/gui/*.h > $@
+       $(AM_V_at)$(PYTHON) $(srcdir)/parseactions.py parse $(top_srcdir)/lib/gui/*.h >> $@
index cbf5370..edcfac6 100644 (file)
@@ -3,10 +3,6 @@
 
 #include <lib/base/object.h>
 
-               /* avoid warnigs :) */
-#include <features.h>
-#undef _POSIX_C_SOURCE
-#define _POSIX_C_SOURCE 200112L
 #include <lib/python/python.h>
 #include <string>
 #include <map>
index 2462a75..cad432a 100644 (file)
@@ -89,7 +89,7 @@ def do_file(f, mode):
 
                                                if mode == "include":
                                                        # hack hack hack!!
-                                                       print "#include <lib" + f[2:] + ">"
+                                                       print "#include <lib/" + '/'.join(f.split('/')[-2:]) + ">"
                                                else:
                                                        print "\t// " + f
 
diff --git a/lib/base/.gitignore b/lib/base/.gitignore
new file mode 100644 (file)
index 0000000..aa9ae18
--- /dev/null
@@ -0,0 +1 @@
+eenv.cpp
index 0508563..d76dfc9 100644 (file)
@@ -1,12 +1,56 @@
-INCLUDES = \
-       -I$(top_srcdir)/include
+AM_CPPFLAGS = \
+       -I$(top_srcdir) \
+       -I$(top_srcdir)/include \
+       -include Python.h \
+       -include $(top_builddir)/enigma2_config.h
 
 noinst_LIBRARIES = libenigma_base.a
 
 libenigma_base_a_SOURCES = \
-       buffer.cpp ebase.cpp eerror.cpp elock.cpp \
-       init.cpp message.cpp thread.cpp \
-       smartptr.cpp estring.cpp connection.cpp \
-       filepush.cpp encoding.cpp console.cpp rawfile.cpp \
-       nconfig.cpp ioprio.cpp etpm.cpp
+       buffer.cpp \
+       connection.cpp \
+       console.cpp \
+       ebase.cpp \
+       eenv.cpp \
+       eerror.cpp \
+       elock.cpp \
+       encoding.cpp \
+       estring.cpp \
+       etpm.cpp \
+       filepush.cpp \
+       init.cpp \
+       ioprio.cpp \
+       message.cpp \
+       nconfig.cpp \
+       rawfile.cpp \
+       smartptr.cpp \
+       thread.cpp
 
+EXTRA_DIST = \
+       eenv.cpp.in
+
+baseincludedir = $(pkgincludedir)/lib/base
+baseinclude_HEADERS = \
+       buffer.h \
+       console.h \
+       ebase.h \
+       eenv.h \
+       eerror.h \
+       elock.h \
+       encoding.h \
+       eptrlist.h \
+       estring.h \
+       etpm.h \
+       filepush.h \
+       i18n.h \
+       itssource.h \
+       init.h \
+       init_num.h \
+       ioprio.h \
+       message.h \
+       nconfig.h \
+       object.h \
+       rawfile.h \
+       ringbuffer.h \
+       smartptr.h \
+       thread.h
index 43f9f61..0018768 100644 (file)
@@ -519,7 +519,7 @@ eConsolePy_write(eConsolePy* self, PyObject *args)
        int ret = -1;
        Py_ssize_t argc = PyTuple_Size(args);
        if (argc > 1)
-               ret = PyArg_ParseTuple(args, "si", &data, &len);
+               ret = !PyArg_ParseTuple(args, "si", &data, &len);
        else if (argc == 1)
        {
                PyObject *ob;
index e730b40..60540da 100644 (file)
@@ -1,7 +1,6 @@
 #ifndef __LIB_BASE_CONSOLE_H__
 #define __LIB_BASE_CONSOLE_H__
 
-#include "Python.h"
 #include <string>
 #include <lib/base/ebase.h>
 #include <lib/python/connections.h>
diff --git a/lib/base/eenv.cpp.in b/lib/base/eenv.cpp.in
new file mode 100644 (file)
index 0000000..52c4214
--- /dev/null
@@ -0,0 +1,117 @@
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <wordexp.h>
+#include <lib/base/eenv.h>
+#include <lib/base/eerror.h>
+
+bool eEnv::initialized = false;
+
+void eEnv::initialize()
+{
+       static const struct {
+               std::string name;
+               std::string value;
+       } cfgenv[] = {
+               { "prefix", "@prefix@" },
+               { "exec_prefix", "@exec_prefix@" },
+               { "bindir", "@bindir@" },
+               { "sbindir", "@sbindir@" },
+               { "libexecdir", "@libexecdir@" },
+               { "datarootdir", "@datarootdir@" },
+               { "datadir", "@datadir@" },
+               { "sysconfdir", "@sysconfdir@" },
+               { "sharedstatedir", "@sharedstatedir@" },
+               { "localstatedir", "@localstatedir@" },
+               { "libdir", "@libdir@" },
+               { "localedir", "@localedir@" },
+       };
+       size_t i;
+
+       // 1st pass, as generated by configure.
+       // Variables set by the user will not be overwritten.
+       for (i = 0; i < (sizeof(cfgenv) / sizeof(*cfgenv)); i++) {
+               eDebug("setenv('%s', '%s', 0)", cfgenv[i].name.c_str(), cfgenv[i].value.c_str());
+               setenv(cfgenv[i].name.c_str(), cfgenv[i].value.c_str(), 0);
+       }
+
+       // 2nd pass: Resolve directories.
+       for (i = 0; i < (sizeof(cfgenv) / sizeof(*cfgenv)); i++) {
+               std::string dest;
+               eEnv::resolveVar(dest, "${" + cfgenv[i].name + "}");
+               eDebug("setenv('%s', '%s', 1)", cfgenv[i].name.c_str(), dest.c_str());
+               setenv(cfgenv[i].name.c_str(), dest.c_str(), 1);
+       }
+}
+
+int eEnv::resolveVar(std::string &dest, const char *src)
+{
+       size_t i = 0;
+       int ret;
+       wordexp_t p;
+
+       ret = wordexp(src, &p, WRDE_NOCMD | WRDE_UNDEF);
+       if (ret != 0) {
+               switch (ret) {
+               case WRDE_BADCHAR:
+                       eDebug("%s: bad character", __func__);
+                       break;
+               case WRDE_BADVAL:
+                       eDebug("%s: bad value", __func__);
+                       break;
+               case WRDE_CMDSUB:
+                       eDebug("%s: invalid command substitution", __func__);
+                       break;
+               case WRDE_NOSPACE:
+                       eDebug("%s: out of memory", __func__);
+                       break;
+               case WRDE_SYNTAX:
+                       eDebug("%s: syntax error", __func__);
+                       break;
+               default:
+                       eDebug("%s: unknown error", __func__);
+                       break;
+               }
+
+               return -1;
+       }
+
+       while (i < p.we_wordc) {
+               if (strchr(p.we_wordv[i], '$')) {
+                       ret = eEnv::resolveVar(dest, p.we_wordv[i]);
+                       if (ret < 0)
+                               break;
+               } else {
+                       dest.append(p.we_wordv[i]);
+               }
+
+               if (++i < p.we_wordc)
+                       dest.append(" ");
+       }
+
+       wordfree(&p);
+       return ret;
+}
+
+int eEnv::resolveVar(std::string &dest, const std::string &src)
+{
+       return eEnv::resolveVar(dest, src.c_str());
+}
+
+std::string eEnv::resolve(const std::string &src)
+{
+       std::string dest;
+
+       if (!initialized) {
+               eEnv::initialize();
+               initialized = true;
+       }
+
+       eDebug("%s: resolve %s", __func__, src.c_str());
+
+       eEnv::resolveVar(dest, src);
+
+       eDebug("%s: -> %s", __func__, dest.c_str());
+
+       return dest;
+}
diff --git a/lib/base/eenv.h b/lib/base/eenv.h
new file mode 100644 (file)
index 0000000..3d149f5
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef __lib_base_paths_h
+#define __lib_base_paths_h
+
+#include <string>
+
+class eEnv {
+private:
+       static bool initialized;
+       static void initialize();
+       static int resolveVar(std::string &dest, const char *src);
+       static int resolveVar(std::string &dest, const std::string &src);
+public:
+       static std::string resolve(const std::string &path);
+};
+
+#endif
index 8b4b592..361acce 100644 (file)
@@ -2,6 +2,7 @@
 #include <cstdlib>
 #include <lib/base/encoding.h>
 #include <lib/base/eerror.h>
+#include <lib/base/eenv.h>
 
 eDVBTextEncodingHandler encodingHandler;  // the one and only instance
 
@@ -17,8 +18,8 @@ inline char toupper(char c)
 
 eDVBTextEncodingHandler::eDVBTextEncodingHandler()
 {
-       const char * file=DATADIR "/enigma2/encoding.conf";
-       FILE *f = fopen(file, "rt");
+       std::string file = eEnv::resolve("${datadir}/enigma2/encoding.conf");
+       FILE *f = fopen(file.c_str(), "rt");
        if (f)
        {
                char *line = (char*) malloc(256);
@@ -61,7 +62,7 @@ eDVBTextEncodingHandler::eDVBTextEncodingHandler()
                free(line);
        }
        else
-               eDebug("[eDVBTextEncodingHandler] couldn't open %s !", file);
+               eDebug("[eDVBTextEncodingHandler] couldn't open %s !", file.c_str());
 }
 
 void eDVBTextEncodingHandler::getTransponderDefaultMapping(int tsidonid, int &table)
index 91f24ba..e3e2a13 100644 (file)
@@ -29,7 +29,7 @@ void eFilePushThread::thread()
 {
        setIoPrio(prio_class, prio);
 
-       off_t dest_pos = 0, source_pos = 0;
+       off_t dest_pos = 0;
        size_t bytes_read = 0;
        
        off_t current_span_offset = 0;
@@ -46,9 +46,7 @@ void eFilePushThread::thread()
        sigaction(SIGUSR1, &act, 0);
        
        hasStarted();
-       
-       source_pos = m_raw_source.lseek(0, SEEK_CUR);
-       
+
                /* m_stop must be evaluated after each syscall. */
        while (!m_stop)
        {
@@ -137,14 +135,12 @@ void eFilePushThread::thread()
                        
                if (m_sg && !current_span_remaining)
                {
-                       m_sg->getNextSourceSpan(source_pos, bytes_read, current_span_offset, current_span_remaining);
+                       m_sg->getNextSourceSpan(m_current_position, bytes_read, current_span_offset, current_span_remaining);
                        ASSERT(!(current_span_remaining % m_blocksize));
-
-                       if (source_pos != current_span_offset)
-                               source_pos = m_raw_source.lseek(current_span_offset, SEEK_SET);
+                       m_current_position = current_span_offset;
                        bytes_read = 0;
                }
-               
+
                size_t maxread = sizeof(m_buffer);
                
                        /* if we have a source span, don't read past the end */
@@ -157,9 +153,9 @@ void eFilePushThread::thread()
                m_buf_start = 0;
                m_filter_end = 0;
                m_buf_end = 0;
-               
+
                if (maxread)
-                       m_buf_end = m_raw_source.read(m_buffer, maxread);
+                       m_buf_end = m_source->read(m_current_position, m_buffer, maxread);
 
                if (m_buf_end < 0)
                {
@@ -177,10 +173,7 @@ void eFilePushThread::thread()
                        /* a read might be mis-aligned in case of a short read. */
                int d = m_buf_end % m_blocksize;
                if (d)
-               {
-                       m_raw_source.lseek(-d, SEEK_CUR);
                        m_buf_end -= d;
-               }
 
                if (m_buf_end == 0)
                {
@@ -216,18 +209,10 @@ void eFilePushThread::thread()
                                sleep(1);
                                continue;
                        }
-#if 0
-                       eDebug("FILEPUSH: end-of-file! (currently unhandled)");
-                       if (!m_raw_source.lseek(0, SEEK_SET))
-                       {
-                               eDebug("(looping)");
-                               continue;
-                       }
-#endif
                        break;
                } else
                {
-                       source_pos += m_buf_end;
+                       m_current_position += m_buf_end;
                        bytes_read += m_buf_end;
                        if (m_sg)
                                current_span_remaining -= m_buf_end;
@@ -239,20 +224,30 @@ void eFilePushThread::thread()
        eDebug("FILEPUSH THREAD STOP");
 }
 
-void eFilePushThread::start(int fd_source, int fd_dest)
+void eFilePushThread::start(int fd, int fd_dest)
 {
-       m_raw_source.setfd(fd_source);
-       m_fd_dest = fd_dest;
-       resume();
+       eRawFile *f = new eRawFile();
+       ePtr<iTsSource> source = f;
+       f->setfd(fd);
+       start(source, fd_dest);
 }
 
-int eFilePushThread::start(const char *filename, int fd_dest)
+int eFilePushThread::start(const char *file, int fd_dest)
 {
-       if (m_raw_source.open(filename) < 0)
+       eRawFile *f = new eRawFile();
+       ePtr<iTsSource> source = f;
+       if (f->open(file) < 0)
                return -1;
+       start(source, fd_dest);
+       return 0;
+}
+
+void eFilePushThread::start(ePtr<iTsSource> &source, int fd_dest)
+{
+       m_source = source;
        m_fd_dest = fd_dest;
+       m_current_position = 0;
        resume();
-       return 0;
 }
 
 void eFilePushThread::stop()
@@ -273,11 +268,6 @@ void eFilePushThread::pause()
        stop();
 }
 
-void eFilePushThread::seek(int whence, off_t where)
-{
-       m_raw_source.lseek(where, whence);
-}
-
 void eFilePushThread::resume()
 {
        m_stop = 0;
index 71ee997..a4457f6 100644 (file)
@@ -24,9 +24,10 @@ public:
        void stop();
        void start(int sourcefd, int destfd);
        int start(const char *filename, int destfd);
-       
+
+       void start(ePtr<iTsSource> &source, int destfd);
+
        void pause();
-       void seek(int whence, off_t where);
        void resume();
        
                /* flushes the internal readbuffer */ 
@@ -57,11 +58,12 @@ private:
        int m_send_pvr_commit;
        int m_stream_mode;
        int m_blocksize;
+       off_t m_current_position;
+
+       ePtr<iTsSource> m_source;
 
-       eRawFile m_raw_source;
-       
        eFixedMessagePump<int> m_messagepump;
-       
+
        void recvEvent(const int &evt);
 };
 
diff --git a/lib/base/itssource.h b/lib/base/itssource.h
new file mode 100644 (file)
index 0000000..91167ff
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef __lib_base_idatasource_h
+#define __lib_base_idatasource_h
+
+#include <lib/base/object.h>
+
+class iTsSource: public iObject
+{
+public:
+        /* NOTE: should only be used to get current position or filelength */
+       virtual off_t lseek(off_t offset, int whence)=0;
+       
+       /* NOTE: you must be able to handle short reads! */
+       virtual ssize_t read(off_t offset, void *buf, size_t count)=0; /* NOTE: this is what you in normal case have to use!! */
+
+       virtual off_t length()=0;
+       virtual int valid()=0;
+};
+
+#endif
index c7e11fe..3a09e07 100644 (file)
@@ -4,7 +4,10 @@
 #include <lib/base/rawfile.h>
 #include <lib/base/eerror.h>
 
+DEFINE_REF(eRawFile);
+
 eRawFile::eRawFile()
+       :m_lock(false)
 {
        m_fd = -1;
        m_file = 0;
@@ -53,6 +56,13 @@ void eRawFile::setfd(int fd)
 
 off_t eRawFile::lseek(off_t offset, int whence)
 {
+       eSingleLocker l(m_lock);
+       m_current_offset = lseek_internal(offset, whence);
+       return m_current_offset;
+}
+
+off_t eRawFile::lseek_internal(off_t offset, int whence)
+{
 //     eDebug("lseek: %lld, %d", offset, whence);
                /* if there is only one file, use the native lseek - the file could be growing! */
        if (m_nrfiles < 2)
@@ -61,7 +71,8 @@ off_t eRawFile::lseek(off_t offset, int whence)
                        return ::lseek(m_fd, offset, whence);
                else
                {
-                       ::fseeko(m_file, offset, whence);
+                       if (::fseeko(m_file, offset, whence) < 0)
+                               perror("fseeko");
                        return ::ftello(m_file);
                }
        }
@@ -100,11 +111,19 @@ int eRawFile::close()
        }
 }
 
-ssize_t eRawFile::read(void *buf, size_t count)
+ssize_t eRawFile::read(off_t offset, void *buf, size_t count)
 {
-//     eDebug("read: %p, %d", buf, count);
+       eSingleLocker l(m_lock);
+
+       if (offset != m_current_offset)
+       {
+               m_current_offset = lseek_internal(offset, SEEK_SET);
+               if (m_current_offset < 0)
+                       return m_current_offset;
+       }
+
        switchOffset(m_current_offset);
-       
+
        if (m_nrfiles >= 2)
        {
                if (m_current_offset + count > m_totallength)
index a1c73d6..7b736a3 100644 (file)
@@ -2,24 +2,27 @@
 #define __lib_base_rawfile_h
 
 #include <string>
+#include <lib/base/itssource.h>
 
-class eRawFile
+class eRawFile: public iTsSource
 {
+       DECLARE_REF(eRawFile);
+       eSingleLock m_lock;
 public:
        eRawFile();
        ~eRawFile();
-       
        int open(const char *filename, int cached = 0);
        void setfd(int fd);
-       off_t lseek(off_t offset, int whence);
        int close();
-       ssize_t read(void *buf, size_t count); /* NOTE: you must be able to handle short reads! */
+
+       // iTsSource
+       off_t lseek(off_t offset, int whence);
+       ssize_t read(off_t offset, void *buf, size_t count);
        off_t length();
        int valid();
 private:
        int m_fd;     /* for uncached */
        FILE *m_file; /* for cached */
-       
        int m_cached;
        std::string m_basename;
        off_t m_splitsize, m_totallength, m_current_offset, m_base_offset, m_last_offset;
@@ -27,6 +30,8 @@ private:
        void scan();
        int m_current_file;
        int switchOffset(off_t off);
+
+       off_t lseek_internal(off_t offset, int whence);
        FILE *openFileCached(int nr);
        int openFileUncached(int nr);
 };
index fa923de..1fda6a4 100644 (file)
@@ -58,7 +58,12 @@ int eThread::runAsync(int prio, int policy)
                pthread_attr_setschedpolicy(&attr, policy);
                pthread_attr_setschedparam(&attr, &p);
        }
-       
+
+       if (the_thread) {
+               eDebug("old thread joined %d", pthread_join(the_thread, 0));
+               the_thread = 0;
+       }
+
        if (pthread_create(&the_thread, &attr, wrapper, this))
        {
                pthread_attr_destroy(&attr);
@@ -69,7 +74,7 @@ int eThread::runAsync(int prio, int policy)
        
        pthread_attr_destroy(&attr);
        return 0;
-}                     
+}
 
 int eThread::run(int prio, int policy)
 {
index e377ab8..364c694 100644 (file)
@@ -1,6 +1,16 @@
-INCLUDES = \
-       -I$(top_srcdir)/include
+AM_CPPFLAGS = \
+       -I$(top_srcdir) \
+       -I$(top_srcdir)/include \
+       -include Python.h \
+       -include $(top_builddir)/enigma2_config.h
 
 noinst_LIBRARIES = libenigma_components.a
 
-libenigma_components_a_SOURCES = scan.cpp file_eraser.cpp
+libenigma_components_a_SOURCES = \
+       file_eraser.cpp \
+       scan.cpp
+
+componentsincludedir = $(pkgincludedir)/lib/components
+componentsinclude_HEADERS = \
+       file_eraser.h \
+       scan.h
index de1271b..b498a6c 100644 (file)
@@ -1,7 +1,38 @@
-INCLUDES = \
-       -I$(top_srcdir)/include
+AM_CPPFLAGS = \
+       -I$(top_srcdir) \
+       -I$(top_srcdir)/include \
+       -include Python.h \
+       -include $(top_builddir)/enigma2_config.h
+
+AM_CXXFLAGS = \
+       $(LIBSDL_CFLAGS)
 
 noinst_LIBRARIES = libenigma_driver.a
 
 libenigma_driver_a_SOURCES = \
-       rc.cpp rcinput.cpp rcconsole.cpp avswitch.cpp rfmod.cpp etimezone.cpp misc_options.cpp
+       avswitch.cpp \
+       etimezone.cpp \
+       misc_options.cpp \
+       rc.cpp \
+       rcconsole.cpp \
+       rcinput.cpp \
+       rfmod.cpp
+
+driverincludedir = $(pkgincludedir)/lib/driver
+driverinclude_HEADERS = \
+       avswitch.h \
+       etimezone.h \
+       input_fake.h \
+       misc_options.h \
+       rc.h \
+       rcconsole.h \
+       rcdbox.h \
+       rcdreambox2.h \
+       rcinput.h \
+       rfmod.h
+
+if HAVE_LIBSDL
+libenigma_driver_a_SOURCES += \
+       rcsdl.cpp \
+       rcsdl.h
+endif
index eb5aee3..77f4322 100644 (file)
@@ -5,7 +5,7 @@
 #include <stdio.h>
 #include <fcntl.h>
 
-eRCConsoleDriver::eRCConsoleDriver(const char *filename): eRCDriver(eRCInput::getInstance())
+eRCConsoleDriver::eRCConsoleDriver(const char *filename): eRCDriver(eRCInput::getInstance()), m_escape(false)
 {
        handle=open(filename, O_RDONLY|O_NONBLOCK);
        if (handle<0)
@@ -38,7 +38,7 @@ void eRCConsoleDriver::keyPressed(int)
        unsigned char data[16];
        unsigned char *d = data;
        int num = read(handle, data, 16);
-       int code=-1;
+       unsigned char code;
        
        int km = input->getKeyboardMode();
 
@@ -47,42 +47,29 @@ void eRCConsoleDriver::keyPressed(int)
 
        while (num--)
        {
-//             eDebug("console code %08x\n", *d);
-               if (km == eRCInput::kmAll)
-                       code = *d++;
-               else
-               {
-                       if (*d == 27) // escape code
-                       {
-                               while (num)
-                               {
-                                       num--;
-                                       if (*++d != '[')
-                                               break;
-                               }
-                               code = -1;
-                       } else
-                               code = *d;
-                       ++d;
-
-                       if (code < 32)                  /* control characters */
-                               code = -1;
-                       else switch(code)
-                       {
-                       case 0x7E:  // mute, einfg, entf
-                       case 0x7F:  // backspace
-                       code = -1;
-                       default:
-                               break;
+               code = *d++;
+//             eDebug("console code %02x\n", code);
+               if (km == eRCInput::kmAscii) {
+                       if (m_escape) {
+                               if (code != '[')
+                                       m_escape = false;
+                               continue;
                        }
+
+                       if (code == 27) // escape code
+                               m_escape = true;
+
+                       if ((code < 32) ||      // control characters
+                           (code == 0x7e) ||   // mute, einfg, entf
+                           (code == 0x7f))     // backspace
+                               continue;
                }
 
-               if (code != -1)
-                       for (std::list<eRCDevice*>::iterator i(listeners.begin()); i!=listeners.end(); ++i)
-                       {
-//                             eDebug("ascii %08x", code);
-                               (*i)->handleCode(code);
-                       }
+               for (std::list<eRCDevice*>::iterator i(listeners.begin()); i!=listeners.end(); ++i)
+               {
+//                     eDebug("ascii %02x", code);
+                       (*i)->handleCode(code);
+               }
        }
 }
 
@@ -116,7 +103,7 @@ class eRCConsoleInit
        eRCConsoleDriver driver;
        eRCConsole device;
 public:
-       eRCConsoleInit(): driver("/dev/vc/0"), device(&driver)
+       eRCConsoleInit(): driver("/dev/tty0"), device(&driver)
        {
        }
 };
index 85234d5..8a24612 100644 (file)
@@ -10,6 +10,7 @@ class eRCConsoleDriver: public eRCDriver
 protected:
        int handle;
        ePtr<eSocketNotifier> sn;
+       bool m_escape;
        void keyPressed(int);
 public:
        eRCConsoleDriver(const char *filename);
diff --git a/lib/driver/rcsdl.cpp b/lib/driver/rcsdl.cpp
new file mode 100644 (file)
index 0000000..0705cb0
--- /dev/null
@@ -0,0 +1,392 @@
+#include <lib/base/etrace.h>
+#include <lib/driver/rcsdl.h>
+//#include <lib/actions/action.h>
+#include <lib/base/init.h>
+#include <lib/base/init_num.h>
+#include <lib/driver/input_fake.h>
+
+/*
+ * eSDLInputDevice
+ */
+
+eSDLInputDevice::eSDLInputDevice(eRCDriver *driver) : eRCDevice("SDL", driver), m_escape(false), m_unicode(0)
+{
+}
+
+eSDLInputDevice::~eSDLInputDevice()
+{
+}
+
+void eSDLInputDevice::handleCode(long arg)
+{
+       D_ENTER();
+
+       const SDL_KeyboardEvent *event = (const SDL_KeyboardEvent *)arg;
+       const SDL_keysym *key = &event->keysym;
+       int km = input->getKeyboardMode();
+       int code, flags;
+
+       if (event->type == SDL_KEYDOWN) {
+               m_unicode = key->unicode;
+               flags = eRCKey::flagMake;
+       } else {
+               flags = eRCKey::flagBreak;
+       }
+
+       if (km == eRCInput::kmNone) {
+               code = translateKey(key->sym);
+               D_PRINT("translated code: %d", code);
+       } else {
+               code = m_unicode;
+               D_PRINT("native virtual code: %d / sym: %d", code, key->sym);
+               if ((code == 0) && (key->sym < 128)) {
+                       code = key->sym;
+                       D_PRINT("ASCII code: %u", code);
+               }
+
+               if ((km == eRCInput::kmAscii) &&
+                   ((code < SDLK_SPACE) ||
+                    (code == 0x7e) ||
+                    (code == SDLK_DELETE) ||
+                    (code > 255))) {
+                       code = translateKey(key->sym);
+               } else {
+                       // ASCII keys should only generate key press events
+                       if (flags == eRCKey::flagBreak)
+                               D_RETURN();
+
+                       if (km == eRCInput::kmAscii) {
+                               // skip ESC c or ESC '[' c
+                               if (m_escape) {
+                                       if (code != '[')
+                                               m_escape = false;
+                                       D_RETURN();
+                               }
+                               if (code == SDLK_ESCAPE)
+                                       m_escape = true;
+                       }
+                       flags |= eRCKey::flagAscii;
+               }
+       }
+
+       D_PRINT("code=%d (%#x) flags=%d (%#x)", code, code, flags, flags);
+       input->keyPressed(eRCKey(this, code, flags));
+       D_RETURN();
+}
+
+const char *eSDLInputDevice::getDescription() const
+{
+       return "SDL";
+}
+
+int eSDLInputDevice::translateKey(SDLKey key)
+{
+       #define P(a)    case SDLK_##a: return KEY_##a
+       #define P2(a,b) case SDLK_##a: return KEY_##b
+
+       switch (key) {
+       P(BACKSPACE);
+       P(TAB);
+       P(CLEAR);
+       P2(RETURN,ENTER);
+       P(PAUSE);
+       P2(ESCAPE,ESC);
+       P(SPACE);
+#if 0
+       P(EXCLAIM);
+       P(QUOTEDBL);
+       P(HASH);
+#endif
+       P(DOLLAR);
+#if 0
+       P(AMPERSAND);
+#endif
+       P2(QUOTE,APOSTROPHE);
+#if 0
+       P(LEFTPAREN);
+       P(RIGHTPAREN);
+       P(ASTERISK);
+       P(PLUS);
+#endif
+       P(COMMA);
+       P(MINUS);
+       P2(PERIOD,DOT);
+       P(SLASH);
+       P(0);
+       P(1);
+       P(2);
+       P(3);
+       P(4);
+       P(5);
+       P(6);
+       P(7);
+       P(8);
+       P(9);
+#if 0
+       P(COLON);
+#endif
+       P(SEMICOLON);
+#if 0
+       P(LESS);
+#endif
+       P2(EQUALS,EQUAL);
+#if 0
+       P(GREATER);
+#endif
+       P(QUESTION);
+#if 0
+       P(AT);
+#endif
+       P2(LEFTBRACKET,LEFTBRACE);
+       P(BACKSLASH);
+       P2(RIGHTBRACKET,RIGHTBRACE);
+       P2(CARET,GRAVE);
+#if 0
+       P(UNDERSCORE);
+       P(BACKQUOTE);
+#endif
+       P2(a,A);
+       P2(b,B);
+       P2(c,C);
+       P2(d,D);
+       P2(e,E);
+       P2(f,F);
+       P2(g,G);
+       P2(h,H);
+       P2(i,I);
+       P2(j,J);
+       P2(k,K);
+       P2(l,L);
+       P2(m,M);
+       P2(n,N);
+       P2(o,O);
+       P2(p,P);
+       P2(q,Q);
+       P2(r,R);
+       P2(s,S);
+       P2(t,T);
+       P2(u,U);
+       P2(v,V);
+       P2(w,W);
+       P2(x,X);
+       P2(y,Y);
+       P2(z,Z);
+       P(DELETE);
+#if 0
+       P(WORLD_0);
+       P(WORLD_1);
+       P(WORLD_2);
+       P(WORLD_3);
+       P(WORLD_4);
+       P(WORLD_5);
+       P(WORLD_6);
+       P(WORLD_7);
+       P(WORLD_8);
+       P(WORLD_9);
+       P(WORLD_10);
+       P(WORLD_11);
+       P(WORLD_12);
+       P(WORLD_13);
+       P(WORLD_14);
+       P(WORLD_15);
+       P(WORLD_16);
+       P(WORLD_17);
+       P(WORLD_18);
+       P(WORLD_19);
+       P(WORLD_20);
+       P(WORLD_21);
+       P(WORLD_22);
+       P(WORLD_23);
+       P(WORLD_24);
+       P(WORLD_25);
+       P(WORLD_26);
+       P(WORLD_27);
+       P(WORLD_28);
+       P(WORLD_29);
+       P(WORLD_30);
+       P(WORLD_31);
+       P(WORLD_32);
+       P(WORLD_33);
+       P(WORLD_34);
+       P(WORLD_35);
+       P(WORLD_36);
+       P(WORLD_37);
+       P(WORLD_38);
+       P(WORLD_39);
+       P(WORLD_40);
+       P(WORLD_41);
+       P(WORLD_42);
+       P(WORLD_43);
+       P(WORLD_44);
+       P(WORLD_45);
+       P(WORLD_46);
+       P(WORLD_47);
+       P(WORLD_48);
+       P(WORLD_49);
+       P(WORLD_50);
+       P(WORLD_51);
+       P(WORLD_52);
+       P(WORLD_53);
+       P(WORLD_54);
+       P(WORLD_55);
+       P(WORLD_56);
+       P(WORLD_57);
+       P(WORLD_58);
+       P(WORLD_59);
+       P(WORLD_60);
+       P(WORLD_61);
+       P(WORLD_62);
+       P(WORLD_63);
+       P(WORLD_64);
+       P(WORLD_65);
+       P(WORLD_66);
+       P(WORLD_67);
+       P(WORLD_68);
+       P(WORLD_69);
+       P(WORLD_70);
+       P(WORLD_71);
+       P(WORLD_72);
+       P(WORLD_73);
+       P(WORLD_74);
+       P(WORLD_75);
+       P(WORLD_76);
+       P(WORLD_77);
+       P(WORLD_78);
+       P(WORLD_79);
+       P(WORLD_80);
+       P(WORLD_81);
+       P(WORLD_82);
+       P(WORLD_83);
+       P(WORLD_84);
+       P(WORLD_85);
+       P(WORLD_86);
+       P(WORLD_87);
+       P(WORLD_88);
+       P(WORLD_89);
+       P(WORLD_90);
+       P(WORLD_91);
+       P(WORLD_92);
+       P(WORLD_93);
+       P(WORLD_94);
+       P(WORLD_95);
+#endif
+       P(KP0);
+       P(KP1);
+       P(KP2);
+       P(KP3);
+       P(KP4);
+       P(KP5);
+       P(KP6);
+       P(KP7);
+       P(KP8);
+       P(KP9);
+       P2(KP_PERIOD,KPDOT);
+       P2(KP_DIVIDE,KPSLASH);
+       P2(KP_MULTIPLY,KPASTERISK);
+       P2(KP_MINUS,KPMINUS);
+       P2(KP_PLUS,KPPLUS);
+       P2(KP_ENTER,KPENTER);
+       P2(KP_EQUALS,KPEQUAL);
+       P(UP);
+       P(DOWN);
+       P(RIGHT);
+       P(LEFT);
+       P(INSERT);
+       P(HOME);
+       P(END);
+       P(PAGEUP);
+       P(PAGEDOWN);
+       P(F1);
+       P(F2);
+       P(F3);
+       P(F4);
+       P(F5);
+       P(F6);
+       P(F7);
+       P(F8);
+       P(F9);
+       P(F10);
+       P(F11);
+       P(F12);
+       P(F13);
+       P(F14);
+       P(F15);
+       P(NUMLOCK);
+       P(CAPSLOCK);
+       P2(SCROLLOCK,SCROLLLOCK);
+       P2(RSHIFT,RIGHTSHIFT);
+       P2(LSHIFT,LEFTSHIFT);
+       P2(RCTRL,RIGHTCTRL);
+       P2(LCTRL,LEFTCTRL);
+       P2(RALT,RIGHTALT);
+       P2(LALT,LEFTALT);
+       P2(RMETA,RIGHTMETA);
+       P2(LMETA,LEFTMETA);
+#if 0
+       P(LSUPER);
+       P(RSUPER);
+#endif
+       P(MODE);
+       P(COMPOSE);
+       P(HELP);
+       P(PRINT);
+       P2(SYSREQ,SYSRQ);
+       P(BREAK);
+       P(MENU);
+       P(POWER);
+       P(EURO);
+       P(UNDO);
+       default:
+               eDebug("unhandled SDL keycode: %d", key);
+               return KEY_RESERVED;
+       }
+
+       #undef P2
+       #undef P
+}
+
+/*
+ * eSDLInputDriver
+ */
+
+eSDLInputDriver *eSDLInputDriver::instance;
+
+eSDLInputDriver::eSDLInputDriver() : eRCDriver(eRCInput::getInstance())
+{
+       ASSERT(instance == 0);
+       instance = this;
+}
+
+eSDLInputDriver::~eSDLInputDriver()
+{
+       instance = 0;
+}
+
+void eSDLInputDriver::keyPressed(const SDL_KeyboardEvent *key)
+{
+       eDebug("km=%d enabled=%d locked=%d",
+               input->getKeyboardMode(), enabled, input->islocked());
+
+       if (!enabled || input->islocked())
+               return;
+
+       std::list<eRCDevice*>::iterator i(listeners.begin());
+       while (i != listeners.end()) {
+               (*i)->handleCode((long)key);
+               ++i;
+       }
+}
+
+class eRCSDLInit
+{
+private:
+       eSDLInputDriver driver;
+       eSDLInputDevice device;
+
+public:
+       eRCSDLInit(): driver(), device(&driver)
+       {
+       }
+};
+
+eAutoInitP0<eRCSDLInit> init_rcSDL(eAutoInitNumbers::rc+1, "SDL RC Driver");
diff --git a/lib/driver/rcsdl.h b/lib/driver/rcsdl.h
new file mode 100644 (file)
index 0000000..9732f5e
--- /dev/null
@@ -0,0 +1,37 @@
+#ifndef __lib_driver_rcsdl_h
+#define __lib_driver_rcsdl_h
+
+#include <lib/driver/rc.h>
+
+#include <SDL.h>
+
+class eSDLInputDevice : public eRCDevice
+{
+private:
+       bool m_escape;
+       unsigned int m_unicode;
+       int translateKey(SDLKey key);
+
+public:
+       eSDLInputDevice(eRCDriver *driver);
+       ~eSDLInputDevice();
+
+       virtual void handleCode(long arg);
+       virtual const char *getDescription() const;
+};
+
+class eSDLInputDriver : public eRCDriver
+{
+private:
+       static eSDLInputDriver *instance;
+
+public:
+       eSDLInputDriver();
+       ~eSDLInputDriver();
+
+       static eSDLInputDriver *getInstance() { return instance; }
+
+       void keyPressed(const SDL_KeyboardEvent *key);
+};
+
+#endif
index b47ffed..9b33755 100644 (file)
@@ -1,12 +1,64 @@
 SUBDIRS = lowlevel
 
-INCLUDES = \
-       -I$(top_srcdir)/include
+AM_CPPFLAGS = \
+       -I$(top_srcdir) \
+       -I$(top_srcdir)/include \
+       -include Python.h \
+       -include $(top_builddir)/enigma2_config.h
 
 noinst_LIBRARIES = libenigma_dvb.a
 
-libenigma_dvb_a_SOURCES = dvb.cpp demux.cpp frontend.cpp esection.cpp db.cpp \
-       sec.cpp scan.cpp crc32.cpp pmt.cpp decoder.cpp eit.cpp rotor_calc.cpp \
-       epgcache.cpp dvbtime.cpp metaparser.cpp volume.cpp tstools.cpp pvrparse.cpp \
-       pesparse.cpp teletext.cpp radiotext.cpp subtitle.cpp
+libenigma_dvb_a_SOURCES = \
+       crc32.cpp \
+       db.cpp \
+       decoder.cpp \
+       demux.cpp \
+       dvb.cpp \
+       dvbtime.cpp \
+       eit.cpp \
+       epgcache.cpp \
+       esection.cpp \
+       frontend.cpp \
+       metaparser.cpp \
+       pesparse.cpp \
+       pmt.cpp \
+       pvrparse.cpp \
+       radiotext.cpp \
+       rotor_calc.cpp \
+       scan.cpp \
+       sec.cpp \
+       subtitle.cpp \
+       teletext.cpp \
+       tstools.cpp \
+       volume.cpp
 
+dvbincludedir = $(pkgincludedir)/lib/dvb
+dvbinclude_HEADERS = \
+       crc32.h \
+       db.h \
+       decoder.h \
+       demux.h \
+       dvb.h \
+       dvbtime.h \
+       eit.h \
+       epgcache.h \
+       esection.h \
+       frontend.h \
+       frontendparms.h \
+       idemux.h \
+       idvb.h \
+       isection.h \
+       list.h \
+       metaparser.h \
+       pesparse.h \
+       pmt.h \
+       pvrparse.h \
+       radiotext.h \
+       rotor_calc.h \
+       scan.h \
+       sec.h \
+       specs.h \
+       subtitle.h \
+       teletext.h \
+       tstools.h \
+       volume.h
index 38be635..0547407 100644 (file)
@@ -3,6 +3,7 @@
 #include <lib/dvb/dvb.h>
 #include <lib/dvb/frontend.h>
 #include <lib/dvb/epgcache.h>
+#include <lib/base/eenv.h>
 #include <lib/base/eerror.h>
 #include <lib/base/estring.h>
 #include <xmlccwrap/xmlccwrap.h>
@@ -73,7 +74,7 @@ RESULT eBouquet::moveService(const eServiceReference &ref, unsigned int pos)
 
 RESULT eBouquet::flushChanges()
 {
-       FILE *f=fopen((CONFIGDIR"/enigma2/"+m_filename).c_str(), "w");
+       FILE *f=fopen(eEnv::resolve("${sysconfdir}/enigma2/" + m_filename).c_str(), "w");
        if (!f)
                return -1;
        if ( fprintf(f, "#NAME %s\r\n", m_bouquet_name.c_str()) < 0 )
@@ -280,7 +281,7 @@ DEFINE_REF(eDVBDB);
 
 void eDVBDB::reloadServicelist()
 {
-       loadServicelist(CONFIGDIR"/enigma2/lamedb");
+       loadServicelist(eEnv::resolve("${sysconfdir}/enigma2/lamedb").c_str());
 }
 
 void eDVBDB::parseServiceData(ePtr<eDVBService> s, std::string str)
@@ -324,19 +325,11 @@ void eDVBDB::loadServicelist(const char *file)
 {
        eDebug("---- opening lame channel db");
        FILE *f=fopen(file, "rt");
-       if (!f && strcmp(file, CONFIGDIR"/enigma2/lamedb") == 0)
-       {
-               struct stat s;
-               if ( !stat("lamedb", &s) )
-               {
-                       if ( !stat(CONFIGDIR"/enigma2", &s) )
-                       {
-                               rename("lamedb", CONFIGDIR"/enigma2/lamedb" );
-                               reloadServicelist();
-                       }
-               }
+       if (!f) {
+               eDebug("can't open %s: %m", file);
                return;
        }
+
        char line[256];
        int version=3;
        if ((!fgets(line, 256, f)) || sscanf(line, "eDVB services /%d/", &version) != 1)
@@ -594,7 +587,7 @@ void eDVBDB::saveServicelist(const char *file)
 
 void eDVBDB::saveServicelist()
 {
-       saveServicelist(CONFIGDIR"/enigma2/lamedb");
+       saveServicelist(eEnv::resolve("${sysconfdir}/enigma2/lamedb").c_str());
 }
 
 void eDVBDB::loadBouquet(const char *path)
@@ -618,28 +611,20 @@ void eDVBDB::loadBouquet(const char *path)
        std::list<eServiceReference> &list = bouquet.m_services;
        list.clear();
 
-       std::string p = CONFIGDIR"/enigma2/";
+       std::string p = eEnv::resolve("${sysconfdir}/enigma2/");
        p+=path;
        eDebug("loading bouquet... %s", p.c_str());
        FILE *fp=fopen(p.c_str(), "rt");
-       int entries=0;
        if (!fp)
        {
-               struct stat s;
-               if ( !stat(path, &s) )
-               {
-                       rename(path, p.c_str() );
-                       loadBouquet(path);
-                       return;
-               }
-               eDebug("failed to open.");
-               if ( strstr(path, "bouquets.tv") )
+               eDebug("can't open %s: %m", p.c_str());
+               if (!strcmp(path, "bouquets.tv"))
                {
                        eDebug("recreate bouquets.tv");
                        bouquet.m_bouquet_name="Bouquets (TV)";
                        bouquet.flushChanges();
                }
-               else if ( strstr(path, "bouquets.radio") )
+               else if (!strcmp(path, "bouquets.radio"))
                {
                        eDebug("recreate bouquets.radio");
                        bouquet.m_bouquet_name="Bouquets (Radio)";
@@ -647,6 +632,7 @@ void eDVBDB::loadBouquet(const char *path)
                }
                return;
        }
+       int entries=0;
        char line[256];
        bool read_descr=false;
        eServiceReference *e = NULL;
index 88cd3ee..a89f72b 100644 (file)
@@ -203,6 +203,9 @@ int eDVBAudio::startPid(int pid, int type)
        case aLPCM:
                bypass = 6;
                break;
+       case aDTSHD:
+               bypass = 0x10;
+               break;
        }
 
        eDebugNoNewLine("AUDIO_SET_BYPASS(%d) - ", bypass);
@@ -1299,9 +1302,10 @@ RESULT eTSMPEGDecoder::showSinglePic(const char *filename)
                if (f >= 0)
                {
                        struct stat s;
+                       size_t written=0;
                        fstat(f, &s);
                        if (m_video_clip_fd == -1)
-                               m_video_clip_fd = open("/dev/dvb/adapter0/video0", O_WRONLY|O_NONBLOCK);
+                               m_video_clip_fd = open("/dev/dvb/adapter0/video0", O_WRONLY);
                        if (m_video_clip_fd >= 0)
                        {
                                bool seq_end_avail = false;
index 3a0fbac..7610b65 100644 (file)
@@ -13,7 +13,7 @@ private:
        ePtr<eDVBDemux> m_demux;
        int m_fd, m_fd_demux, m_dev, m_is_freezed;
 public:
-       enum { aMPEG, aAC3, aDTS, aAAC, aAACHE, aLPCM };
+       enum { aMPEG, aAC3, aDTS, aAAC, aAACHE, aLPCM, aDTSHD };
        eDVBAudio(eDVBDemux *demux, int dev);
        enum { aMonoLeft, aStereo, aMonoRight };
        void setChannel(int channel);
index 081059b..f4d8618 100644 (file)
@@ -85,6 +85,13 @@ int eDVBDemux::openDemux(void)
        return ::open(filename, O_RDWR);
 }
 
+int eDVBDemux::openDVR(int flags)
+{
+       char filename[128];
+       snprintf(filename, 128, "/dev/dvb/adapter%d/dvr%d", adapter, demux);
+       return ::open(filename, flags);
+}
+
 DEFINE_REF(eDVBDemux)
 
 RESULT eDVBDemux::setSourceFrontend(int fenum)
@@ -648,18 +655,36 @@ RESULT eDVBTSRecorder::setBoundary(off_t max)
 
 RESULT eDVBTSRecorder::stop()
 {
+       int state=3;
+
        for (std::map<int,int>::iterator i(m_pids.begin()); i != m_pids.end(); ++i)
                stopPID(i->first);
 
        if (!m_running)
                return -1;
+
+#if HAVE_DVB_API_VERSION >= 5
+       /* workaround for record thread stop */
+       if (::ioctl(m_source_fd, DMX_STOP) < 0)
+               perror("DMX_STOP");
+       else
+               state &= ~1;
+
+       if (::close(m_source_fd) < 0)
+               perror("close");
+       else
+               state &= ~2;
+#endif
+
        m_thread->stop();
-       
-       close(m_source_fd);
+
+       if (state & 3)
+               ::close(m_source_fd);
+
+       m_running = 0;
        m_source_fd = -1;
-       
+
        m_thread->stopSaveMetaInformation();
-       
        return 0;
 }
 
index d43c41b..e73982e 100644 (file)
@@ -26,7 +26,8 @@ public:
        RESULT getCADemuxID(uint8_t &id) { id = demux; return 0; }
        RESULT flush();
        RESULT connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &conn);
-       
+       int openDVR(int flags);
+
        int getRefCount() { return ref; }
 private:
        int adapter, demux, source;
index 5162945..0b1bdc2 100644 (file)
@@ -98,6 +98,8 @@ eDVBResourceManager::eDVBResourceManager()
                m_boxtype = DM500HD;
        else if (!strncmp(tmp, "dm800se\n", rd))
                m_boxtype = DM800SE;
+       else if (!strncmp(tmp, "dm7020hd\n", rd))
+               m_boxtype = DM7020HD;
        else {
                eDebug("boxtype detection via /proc/stb/info not possible... use fallback via demux count!\n");
                if (m_demux.size() == 3)
@@ -108,7 +110,7 @@ eDVBResourceManager::eDVBResourceManager()
                        m_boxtype = DM8000;
        }
 
-       eDebug("found %d adapter, %d frontends(%d sim) and %d demux, boxtype %d",
+       eDebug("found %zd adapter, %zd frontends(%zd sim) and %zd demux, boxtype %d",
                m_adapter.size(), m_frontend.size(), m_simulate_frontend.size(), m_demux.size(), m_boxtype);
 
        eDVBCAService::registerChannelCallback(this);
@@ -143,19 +145,20 @@ eDVBAdapterLinux::eDVBAdapterLinux(int nr): m_nr(nr)
 #endif
                if (stat(filename, &s))
                        break;
-               ePtr<eDVBFrontend> fe;
+               eDVBFrontend *fe;
 
                {
                        int ok = 0;
-                       fe = new eDVBFrontend(m_nr, num_fe, ok);
+                       fe = new eDVBFrontend(m_nr, num_fe, ok, true);
                        if (ok)
-                               m_frontend.push_back(fe);
+                               m_simulate_frontend.push_back(ePtr<eDVBFrontend>(fe));
                }
+
                {
                        int ok = 0;
-                       fe = new eDVBFrontend(m_nr, num_fe, ok, true);
+                       fe = new eDVBFrontend(m_nr, num_fe, ok, false, fe);
                        if (ok)
-                               m_simulate_frontend.push_back(fe);
+                               m_frontend.push_back(ePtr<eDVBFrontend>(fe));
                }
                ++num_fe;
        }
@@ -334,7 +337,7 @@ PyObject *eDVBResourceManager::setFrontendSlotInformations(ePyObject list)
        }
        if (assigned != m_frontend.size()) {
                char blasel[256];
-               sprintf(blasel, "eDVBResourceManager::setFrontendSlotInformations .. assigned %d socket informations, but %d registered frontends!",
+               sprintf(blasel, "eDVBResourceManager::setFrontendSlotInformations .. assigned %zd socket informations, but %d registered frontends!",
                        m_frontend.size(), assigned);
                PyErr_SetString(PyExc_StandardError, blasel);
                return NULL;
@@ -464,7 +467,7 @@ RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBA
 
        ePtr<eDVBRegisteredDemux> unused;
 
-       if (m_boxtype == DM800 || m_boxtype == DM500HD || m_boxtype == DM800SE) // dm800 / 500hd
+       if (m_boxtype == DM800) // dm800
        {
                cap |= capHoldDecodeReference; // this is checked in eDVBChannel::getDemux
                for (; i != m_demux.end(); ++i, ++n)
@@ -520,7 +523,7 @@ RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBA
                        }
                }
        }
-       else if (m_boxtype == DM8000)
+       else if (m_boxtype == DM8000 || m_boxtype == DM500HD || m_boxtype == DM800SE || m_boxtype == DM7020HD)
        {
                cap |= capHoldDecodeReference; // this is checked in eDVBChannel::getDemux
                for (; i != m_demux.end(); ++i, ++n)
@@ -1488,7 +1491,7 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off
                                size = max;
                        else
                                size = aligned_end - current_offset;
-                       eDebug("HIT, %lld < %lld < %lld, size: %d", i->first, current_offset, i->second, size);
+                       eDebug("HIT, %lld < %lld < %lld, size: %zd", i->first, current_offset, i->second, size);
                        return;
                }
                if (current_offset < aligned_start)
@@ -1529,10 +1532,10 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off
                                        len = aligned_end - aligned_start;
 
                                start = aligned_end - len;
-                               eDebug("skipping to %llx, %d", start, len);
+                               eDebug("skipping to %llx, %zd", start, len);
                        }
 
-                       eDebug("result: %llx, %x (%llx %llx)", start, size, aligned_start, aligned_end);
+                       eDebug("result: %llx, %zx (%llx %llx)", start, size, aligned_start, aligned_end);
                        return;
                }
        }
@@ -1548,7 +1551,7 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off
        {
                start = current_offset;
                size = max;
-               eDebug("NO CUESHEET. (%08llx, %d)", start, size);
+               eDebug("NO CUESHEET. (%08llx, %zd)", start, size);
        } else
        {
                start = current_offset;
@@ -1752,6 +1755,20 @@ RESULT eDVBChannel::getCurrentFrontendParameters(ePtr<iDVBFrontendParameters> &p
 
 RESULT eDVBChannel::playFile(const char *file)
 {
+       eRawFile *f = new eRawFile();
+       ePtr<iTsSource> source = f;
+
+       if (f->open(file) < 0)
+       {
+               eDebug("can't open PVR file %s (%m)", file);
+               return -ENOENT;
+       }
+
+       return playSource(source, file);
+}
+
+RESULT eDVBChannel::playSource(ePtr<iTsSource> &source, const char *streaminfo_file)
+{
        ASSERT(!m_frontend);
        if (m_pvr_thread)
        {
@@ -1760,7 +1777,13 @@ RESULT eDVBChannel::playFile(const char *file)
                m_pvr_thread = 0;
        }
 
-       m_tstools.openFile(file);
+       if (!source->valid())
+       {
+               eDebug("PVR source is not valid!");
+               return -ENOENT;
+       }
+
+       m_tstools.setSource(source, streaminfo_file);
 
                /* DON'T EVEN THINK ABOUT FIXING THIS. FIX THE ATI SOURCES FIRST,
                   THEN DO A REAL FIX HERE! */
@@ -1770,14 +1793,28 @@ RESULT eDVBChannel::playFile(const char *file)
                /* (this codepath needs to be improved anyway.) */
 #if HAVE_DVB_API_VERSION < 3
                m_pvr_fd_dst = open("/dev/pvr", O_WRONLY);
-#else
-               m_pvr_fd_dst = open("/dev/misc/pvr", O_WRONLY);
-#endif
                if (m_pvr_fd_dst < 0)
                {
-                       eDebug("can't open /dev/misc/pvr - you need to buy the new(!) $$$ box! (%m)"); // or wait for the driver to be improved.
+                       eDebug("can't open /dev/pvr - you need to buy the new(!) $$$ box! (%m)"); // or wait for the driver to be improved.
+                       return -ENODEV;
+               }
+#else
+               ePtr<eDVBAllocatedDemux> &demux = m_demux ? m_demux : m_decoder_demux;
+               if (demux)
+               {
+                       m_pvr_fd_dst = demux->get().openDVR(O_WRONLY);
+                       if (m_pvr_fd_dst < 0)
+                       {
+                               eDebug("can't open /dev/dvb/adapterX/dvrX - you need to buy the new(!) $$$ box! (%m)"); // or wait for the driver to be improved.
+                               return -ENODEV;
+                       }
+               }
+               else
+               {
+                       eDebug("no demux allocated yet.. so its not possible to open the dvr device!!");
                        return -ENODEV;
                }
+#endif
        }
 
        m_pvr_thread = new eDVBChannelFilePush();
@@ -1787,15 +1824,7 @@ RESULT eDVBChannel::playFile(const char *file)
 
        m_event(this, evtPreStart);
 
-       if (m_pvr_thread->start(file, m_pvr_fd_dst))
-       {
-               delete m_pvr_thread;
-               m_pvr_thread = 0;
-               ::close(m_pvr_fd_dst);
-               m_pvr_fd_dst = -1;
-               eDebug("can't open PVR file %s (%m)", file);
-               return -ENOENT;
-       }
+       m_pvr_thread->start(source, m_pvr_fd_dst);
        CONNECT(m_pvr_thread->m_event, eDVBChannel::pvrEvent);
 
        m_state = state_ok;
@@ -1804,7 +1833,7 @@ RESULT eDVBChannel::playFile(const char *file)
        return 0;
 }
 
-void eDVBChannel::stopFile()
+void eDVBChannel::stopSource()
 {
        if (m_pvr_thread)
        {
@@ -1814,6 +1843,13 @@ void eDVBChannel::stopFile()
        }
        if (m_pvr_fd_dst >= 0)
                ::close(m_pvr_fd_dst);
+       ePtr<iTsSource> d;
+       m_tstools.setSource(d);
+}
+
+void eDVBChannel::stopFile()
+{
+       stopSource();
 }
 
 void eDVBChannel::setCueSheet(eCueSheet *cuesheet)
index fb92580..3349014 100644 (file)
@@ -135,7 +135,7 @@ class eDVBResourceManager: public iObject, public Object
        DECLARE_REF(eDVBResourceManager);
        int avail, busy;
 
-       enum { DM7025, DM800, DM500HD, DM800SE, DM8000 };
+       enum { DM7025, DM800, DM500HD, DM800SE, DM8000, DM7020HD };
 
        int m_boxtype;
 
@@ -259,7 +259,10 @@ public:
                /* iDVBPVRChannel */
        RESULT playFile(const char *file);
        void stopFile();
-       
+
+       RESULT playSource(ePtr<iTsSource>& source, const char *priv=NULL);
+       void stopSource();
+
        void setCueSheet(eCueSheet *cuesheet);
        
        RESULT getLength(pts_t &len);
@@ -301,7 +304,7 @@ private:
        std::list<std::pair<off_t, off_t> > m_source_span;
        void getNextSourceSpan(off_t current_offset, size_t bytes_read, off_t &start, size_t &size);
        void flushPVR(iDVBDemux *decoding_demux=0);
-       
+
        eSingleLock m_cuesheet_lock;
 
        friend class eUsePtr<eDVBChannel>;
index 119223a..4d32474 100644 (file)
@@ -213,9 +213,9 @@ pthread_mutex_t eEPGCache::channel_map_lock=
 DEFINE_REF(eEPGCache)
 
 eEPGCache::eEPGCache()
-       :messages(this,1), cleanTimer(eTimer::create(this))//, paused(0)
+       :messages(this,1), cleanTimer(eTimer::create(this)), m_running(0)//, paused(0)
 {
-       eDebug("[EPGC] Initialized EPGCache");
+       eDebug("[EPGC] Initialized EPGCache (wait for setCacheFile call now)");
 
        CONNECT(messages.recv_msg, eEPGCache::gotMessage);
        CONNECT(eDVBLocalTimeHandler::getInstance()->m_timeUpdated, eEPGCache::timeUpdated);
@@ -226,22 +226,46 @@ eEPGCache::eEPGCache()
        if (!res_mgr)
                eDebug("[eEPGCache] no resource manager !!!!!!!");
        else
-       {
                res_mgr->connectChannelAdded(slot(*this,&eEPGCache::DVBChannelAdded), m_chanAddedConn);
+
+       instance=this;
+       memset(m_filename, 0, sizeof(m_filename));
+}
+
+void eEPGCache::setCacheFile(const char *path)
+{
+       bool inited = !!strlen(m_filename);
+       strncpy(m_filename, path, 1024);
+       if (!inited)
+       {
+               eDebug("[EPGC] setCacheFile read/write epg data from/to '%s'", m_filename);
                if (eDVBLocalTimeHandler::getInstance()->ready())
                        timeUpdated();
        }
-       instance=this;
 }
 
 void eEPGCache::timeUpdated()
 {
-       if (!sync())
+       if (strlen(m_filename))
        {
-               eDebug("[EPGC] time updated.. start EPG Mainloop");
-               run();
-       } else
-               messages.send(Message(Message::timeChanged));
+               if (!sync())
+               {
+                       eDebug("[EPGC] time updated.. start EPG Mainloop");
+                       run();
+                       singleLock s(channel_map_lock);
+                       channelMapIterator it = m_knownChannels.begin();
+                       for (; it != m_knownChannels.end(); ++it)
+                       {
+                               if (it->second->state == -1) {
+                                       it->second->state=0;
+                                       messages.send(Message(Message::startChannel, it->first));
+                               }
+                       }
+               } else
+                       messages.send(Message(Message::timeChanged));
+       }
+       else
+               eDebug("[EPGC] time updated.. but cache file not set yet.. dont start epg!!");
 }
 
 void eEPGCache::DVBChannelAdded(eDVBChannel *chan)
@@ -337,8 +361,13 @@ void eEPGCache::DVBChannelRunning(iDVBChannel *chan)
                                        return;
                                }
 #endif
-                               messages.send(Message(Message::startChannel, chan));
-                               // -> gotMessage -> changedService
+                               if (m_running) {
+                                       data.state=0;
+                                       messages.send(Message(Message::startChannel, chan));
+                                       // -> gotMessage -> changedService
+                               }
+                               else
+                                       data.state=-1;
                        }
                }
        }
@@ -365,7 +394,8 @@ void eEPGCache::DVBChannelStateChanged(iDVBChannel *chan)
                                case iDVBChannel::state_release:
                                {
                                        eDebug("[eEPGCache] remove channel %p", chan);
-                                       messages.send(Message(Message::leaveChannel, chan));
+                                       if (it->second->state >= 0)
+                                               messages.send(Message(Message::leaveChannel, chan));
                                        pthread_mutex_lock(&it->second->channel_active);
                                        singleLock s(channel_map_lock);
                                        m_knownChannels.erase(it);
@@ -953,39 +983,24 @@ void eEPGCache::gotMessage( const Message &msg )
 void eEPGCache::thread()
 {
        hasStarted();
+       m_running=1;
        nice(4);
        load();
        cleanLoop();
        runLoop();
        save();
+       m_running=0;
 }
 
 void eEPGCache::load()
 {
-       FILE *f = fopen("/hdd/epg.dat", "r");
+       FILE *f = fopen(m_filename, "r");
        if (f)
        {
-               unlink("/hdd/epg.dat");
+               unlink(m_filename);
                int size=0;
                int cnt=0;
-#if 0
-               unsigned char md5_saved[16];
-               unsigned char md5[16];
-               bool md5ok=false;
 
-               if (!md5_file("/hdd/epg.dat", 1, md5))
-               {
-                       FILE *f = fopen("/hdd/epg.dat.md5", "r");
-                       if (f)
-                       {
-                               fread( md5_saved, 16, 1, f);
-                               fclose(f);
-                               if ( !memcmp(md5_saved, md5, 16) )
-                                       md5ok=true;
-                       }
-               }
-               if ( md5ok )
-#endif
                {
                        unsigned int magic=0;
                        fread( &magic, sizeof(int), 1, f);
@@ -1027,7 +1042,7 @@ void eEPGCache::load()
                                        eventDB[key]=std::pair<eventMap,timeMap>(evMap,tmMap);
                                }
                                eventData::load(f);
-                               eDebug("[EPGC] %d events read from /hdd/epg.dat", cnt);
+                               eDebug("[EPGC] %d events read from %s", cnt, m_filename);
 #ifdef ENABLE_PRIVATE_EPG
                                char text2[11];
                                fread( text2, 11, 1, f);
@@ -1075,103 +1090,106 @@ void eEPGCache::load()
 
 void eEPGCache::save()
 {
-       struct statfs s;
-       off64_t tmp;
-       if (statfs("/hdd", &s)<0)
-               tmp=0;
-       else
+       /* create empty file */
+       FILE *f = fopen(m_filename, "w");
+
+       if (!f)
        {
-               tmp=s.f_blocks;
-               tmp*=s.f_bsize;
+               eDebug("[EPGC] couldn't save epg data to '%s'(%m)", m_filename);
+               return;
        }
 
-       // prevent writes to builtin flash
-       if ( tmp < 1024*1024*50 ) // storage size < 50MB
+       char *buf = realpath(m_filename, NULL);
+       if (!buf)
+       {
+               eDebug("[EPGC] realpath to '%s' failed in save (%m)", m_filename);
+               fclose(f);
                return;
+       }
+
+       eDebug("[EPGC] store epg to realpath '%s'", buf);
+
+       struct statfs s;
+       off64_t tmp;
+       if (statfs(buf, &s) < 0) {
+               eDebug("[EPGC] statfs '%s' failed in save (%m)", buf);
+               fclose(f);
+               return;
+       }
+
+       free(buf);
 
        // check for enough free space on storage
        tmp=s.f_bfree;
        tmp*=s.f_bsize;
        if ( tmp < (eventData::CacheSize*12)/10 ) // 20% overhead
+       {
+               eDebug("[EPGC] not enough free space at path '%s' %lld bytes availd but %d needed", buf, tmp, (eventData::CacheSize*12)/10);
+               fclose(f);
                return;
+       }
 
-       FILE *f = fopen("/hdd/epg.dat", "w");
        int cnt=0;
-       if ( f )
-       {
-               unsigned int magic = 0x98765432;
-               fwrite( &magic, sizeof(int), 1, f);
-               const char *text = "UNFINISHED_V7";
-               fwrite( text, 13, 1, f );
-               int size = eventDB.size();
-               fwrite( &size, sizeof(int), 1, f );
-               for (eventCache::iterator service_it(eventDB.begin()); service_it != eventDB.end(); ++service_it)
-               {
-                       timeMap &timemap = service_it->second.second;
-                       fwrite( &service_it->first, sizeof(uniqueEPGKey), 1, f);
-                       size = timemap.size();
-                       fwrite( &size, sizeof(int), 1, f);
-                       for (timeMap::iterator time_it(timemap.begin()); time_it != timemap.end(); ++time_it)
-                       {
-                               __u8 len = time_it->second->ByteSize;
-                               fwrite( &time_it->second->type, sizeof(__u8), 1, f );
-                               fwrite( &len, sizeof(__u8), 1, f);
-                               fwrite( time_it->second->EITdata, len, 1, f);
-                               ++cnt;
-                       }
+       unsigned int magic = 0x98765432;
+       fwrite( &magic, sizeof(int), 1, f);
+       const char *text = "UNFINISHED_V7";
+       fwrite( text, 13, 1, f );
+       int size = eventDB.size();
+       fwrite( &size, sizeof(int), 1, f );
+       for (eventCache::iterator service_it(eventDB.begin()); service_it != eventDB.end(); ++service_it)
+       {
+               timeMap &timemap = service_it->second.second;
+               fwrite( &service_it->first, sizeof(uniqueEPGKey), 1, f);
+               size = timemap.size();
+               fwrite( &size, sizeof(int), 1, f);
+               for (timeMap::iterator time_it(timemap.begin()); time_it != timemap.end(); ++time_it)
+               {
+                       __u8 len = time_it->second->ByteSize;
+                       fwrite( &time_it->second->type, sizeof(__u8), 1, f );
+                       fwrite( &len, sizeof(__u8), 1, f);
+                       fwrite( time_it->second->EITdata, len, 1, f);
+                       ++cnt;
                }
-               eDebug("[EPGC] %d events written to /hdd/epg.dat", cnt);
-               eventData::save(f);
+       }
+       eDebug("[EPGC] %d events written to %s", cnt, m_filename);
+       eventData::save(f);
 #ifdef ENABLE_PRIVATE_EPG
-               const char* text3 = "PRIVATE_EPG";
-               fwrite( text3, 11, 1, f );
-               size = content_time_tables.size();
+       const char* text3 = "PRIVATE_EPG";
+       fwrite( text3, 11, 1, f );
+       size = content_time_tables.size();
+       fwrite( &size, sizeof(int), 1, f);
+       for (contentMaps::iterator a = content_time_tables.begin(); a != content_time_tables.end(); ++a)
+       {
+               contentMap &content_time_table = a->second;
+               fwrite( &a->first, sizeof(uniqueEPGKey), 1, f);
+               int size = content_time_table.size();
                fwrite( &size, sizeof(int), 1, f);
-               for (contentMaps::iterator a = content_time_tables.begin(); a != content_time_tables.end(); ++a)
+               for (contentMap::iterator i = content_time_table.begin(); i != content_time_table.end(); ++i )
                {
-                       contentMap &content_time_table = a->second;
-                       fwrite( &a->first, sizeof(uniqueEPGKey), 1, f);
-                       int size = content_time_table.size();
+                       int size = i->second.size();
+                       fwrite( &i->first, sizeof(int), 1, f);
                        fwrite( &size, sizeof(int), 1, f);
-                       for (contentMap::iterator i = content_time_table.begin(); i != content_time_table.end(); ++i )
-                       {
-                               int size = i->second.size();
-                               fwrite( &i->first, sizeof(int), 1, f);
-                               fwrite( &size, sizeof(int), 1, f);
-                               for ( contentTimeMap::iterator it(i->second.begin());
-                                       it != i->second.end(); ++it )
-                               {
-                                       fwrite( &it->first, sizeof(time_t), 1, f);
-                                       fwrite( &it->second.first, sizeof(time_t), 1, f);
-                                       fwrite( &it->second.second, sizeof(__u16), 1, f);
-                               }
-                       }
-               }
-#endif
-               // write version string after binary data
-               // has been written to disk.
-               fsync(fileno(f));
-               fseek(f, sizeof(int), SEEK_SET);
-               fwrite("ENIGMA_EPG_V7", 13, 1, f);
-               fclose(f);
-#if 0
-               unsigned char md5[16];
-               if (!md5_file("/hdd/epg.dat", 1, md5))
-               {
-                       FILE *f = fopen("/hdd/epg.dat.md5", "w");
-                       if (f)
+                       for ( contentTimeMap::iterator it(i->second.begin());
+                               it != i->second.end(); ++it )
                        {
-                               fwrite( md5, 16, 1, f);
-                               fclose(f);
+                               fwrite( &it->first, sizeof(time_t), 1, f);
+                               fwrite( &it->second.first, sizeof(time_t), 1, f);
+                               fwrite( &it->second.second, sizeof(__u16), 1, f);
                        }
                }
-#endif
        }
+#endif
+       // write version string after binary data
+       // has been written to disk.
+       fsync(fileno(f));
+       fseek(f, sizeof(int), SEEK_SET);
+       fwrite("ENIGMA_EPG_V7", 13, 1, f);
+       fclose(f);
 }
 
 eEPGCache::channel_data::channel_data(eEPGCache *ml)
        :cache(ml)
-       ,abortTimer(eTimer::create(ml)), zapTimer(eTimer::create(ml)), state(0)
+       ,abortTimer(eTimer::create(ml)), zapTimer(eTimer::create(ml)), state(-2)
        ,isRunning(0), haveData(0)
 #ifdef ENABLE_PRIVATE_EPG
        ,startPrivateTimer(eTimer::create(ml))
index 4d45d87..90aff6c 100644 (file)
@@ -177,7 +177,8 @@ class eEPGCache: public eMainloop, private eThread, public Object
                eEPGCache *cache;
                ePtr<eTimer> abortTimer, zapTimer;
                int prevChannelState;
-               __u8 state, isRunning, haveData;
+               int state;
+               __u8 isRunning, haveData;
                ePtr<eDVBChannel> channel;
                ePtr<eConnection> m_stateChangedConn, m_NowNextConn, m_ScheduleConn, m_ScheduleOtherConn, m_ViasatConn;
                ePtr<iDVBSectionReader> m_NowNextReader, m_ScheduleReader, m_ScheduleOtherReader, m_ViasatReader;
@@ -290,6 +291,8 @@ private:
        void thread();  // thread function
 
 // called from epgcache thread
+       int m_running;
+       char m_filename[1024];
        void save();
        void load();
 #ifdef ENABLE_PRIVATE_EPG
@@ -325,6 +328,9 @@ public:
 #endif
 
 #endif
+       // must be called once!
+       void setCacheFile(const char *filename);
+
        // called from main thread
        inline void Lock();
        inline void Unlock();
index 2bb17a9..3e097cc 100644 (file)
@@ -63,7 +63,7 @@ protected:
                        else
                                TABLE_eDebugNoNewLine("-");
                                
-               TABLE_eDebug(" %d/%d TID %02x", avail.size(), max, data[0]);
+               TABLE_eDebug(" %zd/%d TID %02x", avail.size(), max, data[0]);
 
                if (avail.size() == max)
                {
@@ -100,6 +100,10 @@ class eAUTable: public eAUGTable
        int first;
        ePtr<iDVBDemux> m_demux;
        eMainloop *ml;
+
+       /* needed to detect broken table version handling (seen on some m2ts files) */
+       struct timespec m_prev_table_update;
+       int m_table_cnt;
 public:
 
        eAUTable()
@@ -119,6 +123,7 @@ public:
        
        int begin(eMainloop *m, const eDVBTableSpec &spec, ePtr<iDVBDemux> demux)
        {
+               m_table_cnt = 0;
                ml = m;
                m_demux = demux;
                first= 1;
@@ -197,6 +202,24 @@ public:
 
                if (current && (!current->getSpec(spec)))
                {
+                       /* detect broken table version handling (seen on some m2ts files) */
+                       if (m_table_cnt)
+                       {
+                               if (abs(timeout_usec(m_prev_table_update)) > 500000)
+                                       m_table_cnt = -1;
+                               else if (m_table_cnt > 1) // two pmt update within one second
+                               {
+                                       eDebug("Seen two consecutive table version changes within 500ms. "
+                                           "This seems broken, so auto update for pid %04x, table %02x is now disabled!!",
+                                           spec.pid, spec.tid);
+                                       m_table_cnt = 0;
+                                       return;
+                               }
+                       }
+
+                       ++m_table_cnt;
+                       clock_gettime(CLOCK_MONOTONIC, &m_prev_table_update);
+
                        next = new Table();
                        CONNECT(next->tableReady, eAUTable::slotTableReady);
                        spec.flags &= ~(eDVBTableSpec::tfAnyVersion|eDVBTableSpec::tfThisVersion|eDVBTableSpec::tfHaveTimeout);
index ebdad8a..5718896 100644 (file)
@@ -453,8 +453,8 @@ DEFINE_REF(eDVBFrontend);
 
 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)
+eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok, bool simulate, eDVBFrontend *simulate_fe)
+       :m_simulate(simulate), m_enabled(false), m_type(-1), m_simulate_fe(simulate_fe), m_dvbid(fe), m_slotid(fe)
        ,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
@@ -503,10 +503,10 @@ int eDVBFrontend::openFrontend()
 #else
        dvb_frontend_info fe_info;
 #endif
-       eDebugNoSimulate("opening frontend %d", m_dvbid);
-       if (m_fd < 0)
+       if (!m_simulate)
        {
-               if (!m_simulate || m_type == -1)
+               eDebug("opening frontend %d", m_dvbid);
+               if (m_fd < 0)
                {
                        m_fd = ::open(m_filename, O_RDWR|O_NONBLOCK);
                        if (m_fd < 0)
@@ -515,70 +515,69 @@ int eDVBFrontend::openFrontend()
                                return -1;
                        }
                }
-       }
-       else
-               eWarning("frontend %d already opened", m_dvbid);
-       if (m_type == -1)
-       {
-               if (::ioctl(m_fd, FE_GET_INFO, &fe_info) < 0)
+               else
+                       eWarning("frontend %d already opened", m_dvbid);
+               if (m_type == -1)
                {
-                       eWarning("ioctl FE_GET_INFO failed");
-                       ::close(m_fd);
-                       m_fd = -1;
-                       return -1;
-               }
+                       if (::ioctl(m_fd, FE_GET_INFO, &fe_info) < 0)
+                       {
+                               eWarning("ioctl FE_GET_INFO failed");
+                               ::close(m_fd);
+                               m_fd = -1;
+                               return -1;
+                       }
 
-               switch (fe_info.type)
-               {
-               case FE_QPSK:
-                       m_type = iDVBFrontend::feSatellite;
-                       break;
-               case FE_QAM:
-                       m_type = iDVBFrontend::feCable;
-                       break;
-               case FE_OFDM:
-                       m_type = iDVBFrontend::feTerrestrial;
-                       break;
-               default:
-                       eWarning("unknown frontend type.");
-                       ::close(m_fd);
-                       m_fd = -1;
-                       return -1;
+                       switch (fe_info.type)
+                       {
+                       case FE_QPSK:
+                               m_type = iDVBFrontend::feSatellite;
+                               break;
+                       case FE_QAM:
+                               m_type = iDVBFrontend::feCable;
+                               break;
+                       case FE_OFDM:
+                               m_type = iDVBFrontend::feTerrestrial;
+                               break;
+                       default:
+                               eWarning("unknown frontend type.");
+                               ::close(m_fd);
+                               m_fd = -1;
+                               return -1;
+                       }
+                       if (m_simulate_fe)
+                               m_simulate_fe->m_type = m_type;
+                       eDebugNoSimulate("detected %s frontend", "satellite\0cable\0    terrestrial"+fe_info.type*10);
                }
-               eDebugNoSimulate("detected %s frontend", "satellite\0cable\0    terrestrial"+fe_info.type*10);
-       }
 
 #if HAVE_DVB_API_VERSION < 3
-       if (m_type == iDVBFrontend::feSatellite)
-       {
-                       if (m_secfd < 0)
-                       {
-                               if (!m_simulate)
+               if (m_type == iDVBFrontend::feSatellite)
+               {
+                               if (m_secfd < 0)
                                {
-                                       m_secfd = ::open(m_sec_filename, O_RDWR);
-                                       if (m_secfd < 0)
+                                       if (!m_simulate)
                                        {
-                                               eWarning("failed! (%s) %m", m_sec_filename);
-                                               ::close(m_fd);
-                                               m_fd=-1;
-                                               return -1;
+                                               m_secfd = ::open(m_sec_filename, O_RDWR);
+                                               if (m_secfd < 0)
+                                               {
+                                                       eWarning("failed! (%s) %m", m_sec_filename);
+                                                       ::close(m_fd);
+                                                       m_fd=-1;
+                                                       return -1;
+                                               }
                                        }
                                }
-                       }
-                       else
-                               eWarning("sec %d already opened", m_dvbid);
-       }
+                               else
+                                       eWarning("sec %d already opened", m_dvbid);
+               }
 #endif
 
-       setTone(iDVBFrontend::toneOff);
-       setVoltage(iDVBFrontend::voltageOff);
-
-       if (!m_simulate)
-       {
                m_sn = eSocketNotifier::create(eApp, m_fd, eSocketNotifier::Read, false);
                CONNECT(m_sn->activated, eDVBFrontend::feEvent);
        }
 
+       setTone(iDVBFrontend::toneOff);
+       setVoltage(iDVBFrontend::voltageOff);
+
        return 0;
 }
 
@@ -1860,11 +1859,11 @@ int eDVBFrontend::tuneLoopInt()  // called by m_tuneTimer
                                                int slotid = sec_fe->m_slotid;
                                                // FIXMEEEEEE hardcoded i2c devices for dm7025 and dm8000
                                                if (slotid < 2)
-                                                       sprintf(dev, "/dev/i2c/%d", slotid);
+                                                       sprintf(dev, "/dev/i2c-%d", slotid);
                                                else if (slotid == 2)
-                                                       sprintf(dev, "/dev/i2c/2"); // first nim socket on DM8000 use /dev/i2c/2
+                                                       sprintf(dev, "/dev/i2c-2"); // first nim socket on DM8000 use /dev/i2c-2
                                                else if (slotid == 3)
-                                                       sprintf(dev, "/dev/i2c/4"); // second nim socket on DM8000 use /dev/i2c/4
+                                                       sprintf(dev, "/dev/i2c-4"); // second nim socket on DM8000 use /dev/i2c-4
                                                int fd = ::open(dev, O_RDWR);
 
                                                unsigned char data[2];
@@ -2111,8 +2110,8 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm,
                                        return -EINVAL;
                        }
 #if HAVE_DVB_API_VERSION < 5
-                       parm_inversion |= (feparm.rolloff << 2); // Hack.. we use bit 2..3 of inversion param for rolloff
-                       parm_inversion |= (feparm.pilot << 4); // Hack.. we use bit 4..5 of inversion param for pilot
+                       parm_inversion = (fe_spectral_inversion_t)((feparm.rolloff << 2) | parm_inversion); // Hack.. we use bit 2..3 of inversion param for rolloff
+                       parm_inversion = (fe_spectral_inversion_t)((feparm.pilot << 4) | parm_inversion); // Hack.. we use bit 4..5 of inversion param for pilot
                        if (feparm.modulation == eDVBFrontendParametersSatellite::Modulation_8PSK) 
                        {
                                parm_u_qpsk_fec_inner = (fe_code_rate_t)((int)parm_u_qpsk_fec_inner+9);
index bef4a18..5887f40 100644 (file)
@@ -72,6 +72,7 @@ private:
        bool m_simulate;
        bool m_enabled;
        int m_type;
+       eDVBFrontend *m_simulate_fe; // only used to set frontend type in dvb.cpp
        int m_dvbid;
        int m_slotid;
        int m_fd;
@@ -115,7 +116,7 @@ private:
        bool setSecSequencePos(int steps);
        static int PriorityOrder;
 public:
-       eDVBFrontend(int adap, int fe, int &ok, bool simulate=false);
+       eDVBFrontend(int adap, int fe, int &ok, bool simulate=false, eDVBFrontend *simulate_fe=NULL);
        virtual ~eDVBFrontend();
 
        int readInputpower();
index f1217a6..86936f8 100644 (file)
@@ -15,6 +15,7 @@
 #include <lib/base/object.h>
 #include <lib/base/ebase.h>
 #include <lib/base/elock.h>
+#include <lib/base/itssource.h>
 #include <lib/service/service.h>
 #include <libsig_comp.h>
 #include <connection.h>
@@ -605,6 +606,10 @@ public:
        virtual RESULT playFile(const char *file) = 0;
        virtual void stopFile() = 0;
        
+       /* new interface */
+       virtual RESULT playSource(ePtr<iTsSource> &source, const char *priv=NULL) = 0;
+       virtual void stopSource() = 0;
+       
        virtual void setCueSheet(eCueSheet *cuesheet) = 0;
        
        virtual RESULT getLength(pts_t &pts) = 0;
@@ -631,6 +636,7 @@ public:
        virtual RESULT getSTC(pts_t &pts, int num=0)=0;
        virtual RESULT getCADemuxID(uint8_t &id)=0;
        virtual RESULT flush()=0;
+       virtual int openDVR(int flags)=0;
 };
 
 #if HAVE_DVB_API_VERSION < 3 && !defined(VIDEO_EVENT_SIZE_CHANGED)
@@ -645,7 +651,7 @@ public:
                /** Set Displayed Video PID and type */
        virtual RESULT setVideoPID(int vpid, int type)=0;
 
-       enum { af_MPEG, af_AC3, af_DTS, af_AAC };
+       enum { af_MPEG, af_AC3, af_DTS, af_AAC, af_DTSHD };
                /** Set Displayed Audio PID and type */
        virtual RESULT setAudioPID(int apid, int type)=0;
 
index 98e89f9..1108097 100644 (file)
@@ -1,3 +1,4 @@
-EXTRA_DIST = \
+lowlevelincludedir = $(pkgincludedir)/lib/dvb/lowlevel
+lowlevelinclude_HEADERS = \
        eit.h \
        mhw.h
index ea4b96c..e5e6331 100644 (file)
 #include <dvbsi++/registration_descriptor.h>
 
 eDVBServicePMTHandler::eDVBServicePMTHandler()
-       :m_ca_servicePtr(0), m_dvb_scan(0), m_decode_demux_num(0xFF)
+       :m_ca_servicePtr(0), m_dvb_scan(0), m_decode_demux_num(0xFF), m_no_pat_entry_delay(eTimer::create())
 {
        m_use_decode_demux = 0;
        m_pmt_pid = -1;
        eDVBResourceManager::getInstance(m_resourceManager);
        CONNECT(m_PMT.tableReady, eDVBServicePMTHandler::PMTready);
        CONNECT(m_PAT.tableReady, eDVBServicePMTHandler::PATready);
+       CONNECT(m_no_pat_entry_delay->timeout, eDVBServicePMTHandler::sendEventNoPatEntry);
 }
 
 eDVBServicePMTHandler::~eDVBServicePMTHandler()
@@ -43,8 +44,15 @@ void eDVBServicePMTHandler::channelStateChanged(iDVBChannel *channel)
                && (state == iDVBChannel::state_ok) && (!m_demux))
        {
                if (m_channel)
-                       if (m_channel->getDemux(m_demux, (!m_use_decode_demux) ? 0 : iDVBChannel::capDecode))
+               {
+                       if (m_pvr_demux_tmp)
+                       {
+                               m_demux = m_pvr_demux_tmp;
+                               m_pvr_demux_tmp = NULL;
+                       }
+                       else if (m_channel->getDemux(m_demux, (!m_use_decode_demux) ? 0 : iDVBChannel::capDecode))
                                eDebug("Allocating %s-decoding a demux for now tuned-in channel failed.", m_use_decode_demux ? "" : "non-");
+               }
                
                serviceEvent(eventTuned);
                
@@ -126,30 +134,60 @@ void eDVBServicePMTHandler::PMTready(int error)
        }
 }
 
+void eDVBServicePMTHandler::sendEventNoPatEntry()
+{
+       serviceEvent(eventNoPATEntry);
+}
+
 void eDVBServicePMTHandler::PATready(int)
 {
+       eDebug("PATready");
        ePtr<eTable<ProgramAssociationSection> > ptr;
        if (!m_PAT.getCurrent(ptr))
        {
+               int service_id_single = -1;
+               int pmtpid_single = -1;
                int pmtpid = -1;
+               int cnt=0;
                std::vector<ProgramAssociationSection*>::const_iterator i;
                for (i = ptr->getSections().begin(); pmtpid == -1 && i != ptr->getSections().end(); ++i)
                {
                        const ProgramAssociationSection &pat = **i;
                        ProgramAssociationConstIterator program;
                        for (program = pat.getPrograms()->begin(); pmtpid == -1 && program != pat.getPrograms()->end(); ++program)
+                       {
+                               ++cnt;
                                if (eServiceID((*program)->getProgramNumber()) == m_reference.getServiceID())
                                        pmtpid = (*program)->getProgramMapPid();
+                               if (++cnt == 1 && pmtpid_single == -1 && pmtpid == -1)
+                               {
+                                       pmtpid_single = (*program)->getProgramMapPid();
+                                       service_id_single = (*program)->getProgramNumber();
+                               }
+                               else
+                                       pmtpid_single = service_id_single = -1;
+                       }
                }
-               if (pmtpid == -1)
-                       serviceEvent(eventNoPATEntry);
-               else
+               if (pmtpid_single != -1) // only one PAT entry .. and not valid pmtpid found
+               {
+                       eDebug("use single pat entry!");
+                       m_reference.setServiceID(eServiceID(service_id_single));
+                       pmtpid = pmtpid_single;
+               }
+               if (pmtpid == -1) {
+                       eDebug("no PAT entry found.. start delay");
+                       m_no_pat_entry_delay->start(1000, true);
+               }
+               else {
+                       eDebug("use pmtpid %04x for service_id %04x", pmtpid, m_reference.getServiceID().get());
+                       m_no_pat_entry_delay->stop();
                        m_PMT.begin(eApp, eDVBPMTSpec(pmtpid, m_reference.getServiceID().get()), m_demux);
+               }
        } else
                serviceEvent(eventNoPAT);
 }
 
-PyObject *eDVBServicePMTHandler::getCaIds()
+PyObject *eDVBServicePMTHandler::getCaIds(bool pair)
 {
        ePyObject ret;
 
@@ -157,20 +195,37 @@ PyObject *eDVBServicePMTHandler::getCaIds()
 
        if ( !getProgramInfo(prog) )
        {
-               int cnt=prog.caids.size();
-               if (cnt)
+               if (pair)
+               {
+                       int cnt=prog.caids.size();
+                       if (cnt)
+                       {
+                               ret=PyList_New(cnt);
+                               std::list<program::capid_pair>::iterator it(prog.caids.begin());
+                               while(cnt--)
+                               {
+                                       ePyObject tuple = PyTuple_New(2);
+                                       PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong(it->caid));
+                                       PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong((it++)->capid));
+                                       PyList_SET_ITEM(ret, cnt, tuple);
+                               }
+                       }
+               }
+               else
                {
+                       std::set<program::capid_pair> set(prog.caids.begin(), prog.caids.end());
+                       std::set<program::capid_pair>::iterator it(set.begin());
+                       int cnt=set.size();
                        ret=PyList_New(cnt);
-                       std::set<uint16_t>::iterator it(prog.caids.begin());
                        while(cnt--)
-                               PyList_SET_ITEM(ret, cnt, PyInt_FromLong(*it++));
+                               PyList_SET_ITEM(ret, cnt, PyInt_FromLong((it++)->caid));
                }
        }
 
        return ret ? (PyObject*)ret : (PyObject*)PyList_New(0);
 }
 
-int eDVBServicePMTHandler::getProgramInfo(struct program &program)
+int eDVBServicePMTHandler::getProgramInfo(program &program)
 {
        ePtr<eTable<ProgramMapSection> > ptr;
        int cached_apid_ac3 = -1;
@@ -213,8 +268,29 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                        for (i = ptr->getSections().begin(); i != ptr->getSections().end(); ++i)
                        {
                                const ProgramMapSection &pmt = **i;
+                               int is_hdmv = 0;
+
                                program.pcrPid = pmt.getPcrPid();
 
+                               for (DescriptorConstIterator desc = pmt.getDescriptors()->begin();
+                                       desc != pmt.getDescriptors()->end(); ++desc)
+                               {
+                                       if ((*desc)->getTag() == CA_DESCRIPTOR)
+                                       {
+                                               CaDescriptor *descr = (CaDescriptor*)(*desc);
+                                               program::capid_pair pair;
+                                               pair.caid = descr->getCaSystemId();
+                                               pair.capid = descr->getCaPid();
+                                               program.caids.push_back(pair);
+                                       }
+                                       else if ((*desc)->getTag() == REGISTRATION_DESCRIPTOR)
+                                       {
+                                               RegistrationDescriptor *d = (RegistrationDescriptor*)(*desc);
+                                               if (d->getFormatIdentifier() == 0x48444d56) // HDMV
+                                                       is_hdmv = 1;
+                                       }
+                               }
+
                                ElementaryStreamInfoConstIterator es;
                                for (es = pmt.getEsInfo()->begin(); es != pmt.getEsInfo()->end(); ++es)
                                {
@@ -270,25 +346,34 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                                                        audio.type = audioStream::atAACHE;
                                                        forced_audio = 1;
                                                }
-                                       case 0x80: // user private ... but blueray LPCM
-                                               if (!isvideo && !isaudio)
+                                       case 0x80: // user private ... but bluray LPCM
+                                       case 0xA0: // bluray secondary LPCM
+                                               if (!isvideo && !isaudio && is_hdmv)
                                                {
                                                        isaudio = 1;
                                                        audio.type = audioStream::atLPCM;
                                                }
-                                       case 0x81: // user private ... but blueray AC3
-                                               if (!isvideo && !isaudio)
+                                       case 0x81: // user private ... but bluray AC3
+                                       case 0xA1: // bluray secondary AC3
+                                               if (!isvideo && !isaudio && is_hdmv)
                                                {
                                                        isaudio = 1;
                                                        audio.type = audioStream::atAC3;
                                                }
-                                       case 0x82: // Blueray DTS (dvb user private...)
-                                       case 0xA2: // Blueray secondary DTS
-                                               if (!isvideo && !isaudio)
+                                       case 0x82: // bluray DTS (dvb user private...)
+                                       case 0xA2: // bluray secondary DTS
+                                               if (!isvideo && !isaudio && is_hdmv)
                                                {
                                                        isaudio = 1;
                                                        audio.type = audioStream::atDTS;
                                                }
+                                       case 0x86: // bluray DTS-HD (dvb user private...)
+                                       case 0xA6: // bluray secondary DTS-HD
+                                               if (!isvideo && !isaudio && is_hdmv)
+                                               {
+                                                       isaudio = 1;
+                                                       audio.type = audioStream::atDTSHD;
+                                               }
                                        case 0x06: // PES Private
                                        case 0xEA: // TS_PSI_ST_SMPTE_VC1
                                        {
@@ -460,7 +545,10 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                                                        case CA_DESCRIPTOR:
                                                        {
                                                                CaDescriptor *descr = (CaDescriptor*)(*desc);
-                                                               program.caids.insert(descr->getCaSystemId());
+                                                               program::capid_pair pair;
+                                                               pair.caid = descr->getCaSystemId();
+                                                               pair.capid = descr->getCaPid();
+                                                               program.caids.push_back(pair);
                                                                break;
                                                        }
                                                        default:
@@ -477,9 +565,9 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                                        default:
                                                break;
                                        }
-                                       if (isteletext && (isaudio || isvideo)) 
+                                       if (isteletext && (isaudio || isvideo))
                                        {
-                                               eDebug("ambiguous streamtype for PID %04x detected.. forced as teletext!", (*es)->getPid());                                    
+                                               eDebug("ambiguous streamtype for PID %04x detected.. forced as teletext!", (*es)->getPid());
                                                continue; // continue with next PID
                                        }
                                        else if (issubtitle && (isaudio || isvideo))
@@ -517,15 +605,6 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                                        else
                                                continue;
                                }
-                               for (DescriptorConstIterator desc = pmt.getDescriptors()->begin();
-                                       desc != pmt.getDescriptors()->end(); ++desc)
-                               {
-                                       if ((*desc)->getTag() == CA_DESCRIPTOR)
-                                       {
-                                               CaDescriptor *descr = (CaDescriptor*)(*desc);
-                                               program.caids.insert(descr->getCaSystemId());
-                                       }
-                               }
                        }
                        ret = 0;
 
@@ -589,8 +668,12 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                        program.textPid = cached_tpid;
                }
                CAID_LIST &caids = m_service->m_ca;
-               for (CAID_LIST::iterator it(caids.begin()); it != caids.end(); ++it)
-                       program.caids.insert(*it);
+               for (CAID_LIST::iterator it(caids.begin()); it != caids.end(); ++it) {
+                       program::capid_pair pair;
+                       pair.caid = *it;
+                       pair.capid = -1; // not known yet
+                       program.caids.push_back(pair);
+               }
                if ( cnt )
                        ret = 0;
        }
@@ -675,10 +758,16 @@ void eDVBServicePMTHandler::SDTScanEvent(int event)
 
 int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux, eCueSheet *cue, bool simulate, eDVBService *service)
 {
+       ePtr<iTsSource> s;
+       return tuneExt(ref, use_decode_demux, s, NULL, cue, simulate, service);
+}
+
+int eDVBServicePMTHandler::tuneExt(eServiceReferenceDVB &ref, int use_decode_demux, ePtr<iTsSource> &source, const char *streaminfo_file, eCueSheet *cue, bool simulate, eDVBService *service)
+{
        RESULT res=0;
        m_reference = ref;
-       
        m_use_decode_demux = use_decode_demux;
+       m_no_pat_entry_delay->stop();
 
                /* use given service as backup. This is used for timeshift where we want to clone the live stream using the cache, but in fact have a PVR channel */
        m_service = service;
@@ -702,11 +791,12 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux,
        {
                if (!ref.getServiceID().get() /* incorrect sid in meta file or recordings.epl*/ )
                {
-                       eWarning("no .meta file found, trying to find PMT pid");
                        eDVBTSTools tstools;
-                       if (tstools.openFile(ref.path.c_str()))
-                               eWarning("failed to open file");
-                       else
+                       bool b = source || !tstools.openFile(ref.path.c_str(), 1);
+                       eWarning("no .meta file found, trying to find PMT pid");
+                       if (source)
+                               tstools.setSource(source, NULL);
+                       if (b)
                        {
                                int service_id, pmt_pid;
                                if (!tstools.findPMT(pmt_pid, service_id))
@@ -716,6 +806,8 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux,
                                        m_pmt_pid = pmt_pid;
                                }
                        }
+                       else
+                               eWarning("no valid source to find PMT pid!");
                }
                eDebug("alloc PVR");
                        /* allocate PVR */
@@ -757,7 +849,13 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux,
                if (m_pvr_channel)
                {
                        m_pvr_channel->setCueSheet(cue);
-                       m_pvr_channel->playFile(ref.path.c_str());
+
+                       if (m_pvr_channel->getDemux(m_pvr_demux_tmp, (!m_use_decode_demux) ? 0 : iDVBChannel::capDecode))
+                               eDebug("Allocating %s-decoding a demux for PVR channel failed.", m_use_decode_demux ? "" : "non-");
+                       else if (source)
+                               m_pvr_channel->playSource(source, streaminfo_file);
+                       else
+                               m_pvr_channel->playFile(ref.path.c_str());
                }
        }
 
index 483c06b..0c44f35 100644 (file)
@@ -86,8 +86,8 @@ class eDVBServicePMTHandler: public Object
        eUsePtr<iDVBChannel> m_channel;
        eUsePtr<iDVBPVRChannel> m_pvr_channel;
        ePtr<eDVBResourceManager> m_resourceManager;
-       ePtr<iDVBDemux> m_demux;
-       
+       ePtr<iDVBDemux> m_demux, m_pvr_demux_tmp;
+
        void channelStateChanged(iDVBChannel *);
        ePtr<eConnection> m_channelStateChanged_connection;
        void channelEvent(iDVBChannel *, int event);
@@ -102,6 +102,7 @@ class eDVBServicePMTHandler: public Object
        
        int m_use_decode_demux;
        uint8_t m_decode_demux_num;
+       ePtr<eTimer> m_no_pat_entry_delay;
 public:
        eDVBServicePMTHandler();
        ~eDVBServicePMTHandler();
@@ -144,7 +145,7 @@ public:
        {
                int pid,
                    rdsPid; // hack for some radio services which transmit radiotext on different pid (i.e. harmony fm, HIT RADIO FFH, ...)
-               enum { atMPEG, atAC3, atDTS, atAAC, atAACHE, atLPCM };
+               enum { atMPEG, atAC3, atDTS, atAAC, atAACHE, atLPCM, atDTSHD };
                int type; // mpeg2, ac3, dts, ...
                
                int component_tag;
@@ -181,11 +182,17 @@ public:
 
        struct program
        {
+               struct capid_pair
+               {
+                       uint16_t caid;
+                       int capid;
+                       bool operator< (const struct capid_pair &t) const { return t.caid < caid; }
+               };
                std::vector<videoStream> videoStreams;
                std::vector<audioStream> audioStreams;
                int defaultAudioStream;
                std::vector<subtitleStream> subtitleStreams;
-               std::set<uint16_t> caids;
+               std::list<capid_pair> caids;
                int pcrPid;
                int pmtPid;
                int textPid;
@@ -193,10 +200,10 @@ public:
                PyObject *createPythonObject();
        };
 
-       int getProgramInfo(struct program &program);
+       int getProgramInfo(program &program);
        int getDataDemux(ePtr<iDVBDemux> &demux);
        int getDecodeDemux(ePtr<iDVBDemux> &demux);
-       PyObject *getCaIds();
+       PyObject *getCaIds(bool pair=false); // caid / ecmpid pair
        
        int getPVRChannel(ePtr<iDVBPVRChannel> &pvr_channel);
        int getServiceReference(eServiceReferenceDVB &service) { service = m_reference; return 0; }
@@ -204,8 +211,14 @@ public:
        int getPMT(ePtr<eTable<ProgramMapSection> > &ptr) { return m_PMT.getCurrent(ptr); }
        int getChannel(eUsePtr<iDVBChannel> &channel);
        void resetCachedProgram() { m_have_cached_program = false; }
+       void sendEventNoPatEntry();
 
+       /* deprecated interface */
        int tune(eServiceReferenceDVB &ref, int use_decode_demux, eCueSheet *sg=0, bool simulate=false, eDVBService *service = 0);
+
+       /* new interface */
+       int tuneExt(eServiceReferenceDVB &ref, int use_decode_demux, ePtr<iTsSource> &, const char *streaminfo_file, eCueSheet *sg=0, bool simulate=false, eDVBService *service = 0);
+
        void free();
 private:
        bool m_have_cached_program;
index 5cdecbd..e19dd1e 100644 (file)
@@ -123,7 +123,7 @@ void eMPEGStreamInformation::fixupDiscontinuties()
                pts_t current = i->second - currentDelta;
                pts_t diff = current - lastpts_t;
                
-               if (llabs(diff) > (90000*5)) // 5sec diff
+               if (llabs(diff) > (90000*10)) // 10sec diff
                {
 //                     eDebug("%llx < %llx, have discont. new timestamp is %llx (diff is %llx)!", current, lastpts_t, i->second, diff);
                        currentDelta = i->second - lastpts_t; /* FIXME: should be the extrapolated new timestamp, based on the current rate */
index b37aa71..fb6f204 100644 (file)
@@ -10,6 +10,7 @@
 #include <lib/dvb/esection.h>
 #include <lib/dvb/scan.h>
 #include <lib/dvb/frontend.h>
+#include <lib/base/eenv.h>
 #include <lib/base/eerror.h>
 #include <lib/base/estring.h>
 #include <lib/python/python.h>
@@ -29,7 +30,8 @@ eDVBScan::eDVBScan(iDVBChannel *channel, bool usePAT, bool debug)
        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");
+       std::string filename = eEnv::resolve("${sysconfdir}/scan_tp_valid_check.py");
+       FILE *f = fopen(filename.c_str(), "r");
        if (f)
        {
                char code[16384];
@@ -37,7 +39,7 @@ eDVBScan::eDVBScan(iDVBChannel *channel, bool usePAT, bool debug)
                if (rd)
                {
                        code[rd]=0;
-                       m_additional_tsid_onid_check_func = Py_CompileString(code, "/etc/enigma2/scan_tp_valid_check.py", Py_file_input);
+                       m_additional_tsid_onid_check_func = Py_CompileString(code, filename.c_str(), Py_file_input);
                }
                fclose(f);
        }
@@ -191,9 +193,9 @@ RESULT eDVBScan::nextChannel()
        if (m_ch_toScan.empty())
        {
                SCAN_eDebug("no channels left to scan.");
-               SCAN_eDebug("%d channels scanned, %d were unavailable.", 
+               SCAN_eDebug("%zd channels scanned, %zd were unavailable.",
                                m_ch_scanned.size(), m_ch_unavailable.size());
-               SCAN_eDebug("%d channels in database.", m_new_channels.size());
+               SCAN_eDebug("%zd channels in database.", m_new_channels.size());
                m_event(evtFinish);
                return -ENOENT;
        }
index d48d44e..851e9b1 100644 (file)
@@ -212,7 +212,7 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite
 
                                eSecDebugNoSimulate("ret5 %d", ret);
 
-                               if (ret && lnb_param.SatCR_idx == -1)
+                               if (ret && !is_unicable)
                                {
                                        int lof = sat.frequency > lnb_param.m_lof_threshold ?
                                                lnb_param.m_lof_hi : lnb_param.m_lof_lo;
@@ -300,11 +300,6 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                if ( sit != lnb_param.m_satellites.end())
                {
                        eSecCommandList sec_sequence;
-
-                       lnb_param.guard_offset = 0; //HACK
-
-                       frontend.setData(eDVBFrontend::SATCR, lnb_param.SatCR_idx);
-                       
                        eDVBSatelliteSwitchParameters &sw_param = sit->second;
                        bool doSetFrontend = true;
                        bool doSetVoltageToneFrontend = true;
@@ -327,6 +322,15 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                        eDVBSatelliteDiseqcParameters::t_diseqc_mode diseqc_mode = di_param.m_diseqc_mode;
                        eDVBSatelliteSwitchParameters::t_voltage_mode voltage_mode = sw_param.m_voltage_mode;
                        bool diseqc13V = voltage_mode == eDVBSatelliteSwitchParameters::HV_13;
+                       bool is_unicable = lnb_param.SatCR_idx != -1;
+
+                       bool useGotoXX = false;
+                       int RotorCmd=-1;
+                       int send_mask = 0;
+
+                       lnb_param.guard_offset = 0; //HACK
+
+                       frontend.setData(eDVBFrontend::SATCR, lnb_param.SatCR_idx);
 
                        if (diseqc13V)
                                voltage_mode = eDVBSatelliteSwitchParameters::HV;
@@ -371,13 +375,10 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
 
                        int lof = (band&1)?lnb_param.m_lof_hi:lnb_param.m_lof_lo;
 
-                       int local=0;
-
-
-                       if(lnb_param.SatCR_idx == -1)
+                       if(!is_unicable)
                        {
-                       // calc Frequency
-                               local = abs(sat.frequency 
+                               // calc Frequency
+                               int local= abs(sat.frequency
                                        - lof);
                                parm.FREQUENCY = ((((local * 2) / 125) + 1) / 2) * 125;
                                frontend.setData(eDVBFrontend::FREQ_OFFSET, sat.frequency - parm.FREQUENCY);
@@ -399,7 +400,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                        }
                        else
                        {
-                               int tmp1 = abs(sat.frequency 
+                               int tmp1 = abs(sat.frequency
                                                -lof)
                                                + lnb_param.SatCRvco
                                                - 1400000
@@ -414,6 +415,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                                eDebug("[prepare] UnicableTuningWord %#04x",lnb_param.UnicableTuningWord);
                                                eDebug("[prepare] guard_offset %d",lnb_param.guard_offset);
                                frontend.setData(eDVBFrontend::FREQ_OFFSET, (lnb_param.UnicableTuningWord & 0x3FF) *4000 + 1400000 + lof - (2 * (lnb_param.SatCRvco - (tmp1-tmp2))) );
+                               voltage = VOLTAGE(13);
                        }
 
                        if (diseqc_mode >= eDVBSatelliteDiseqcParameters::V1_0)
@@ -436,7 +438,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                        (di_param.m_toneburst_param != eDVBSatelliteDiseqcParameters::NO);
                                bool changed_burst = send_burst && (forceChanged || toneburst != lastToneburst);
 
-                               int send_mask = 0; /*
+                               /* send_mask
                                        1 must send csw
                                        2 must send ucsw
                                        4 send toneburst first
@@ -462,7 +464,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                        if (di_param.m_command_order==4 && send_burst)
                                                send_mask |= 8;
                                }
-                               if (changed_csw) 
+                               if (changed_csw)
                                {
                                        if ( di_param.m_use_fast
                                                && di_param.m_committed_cmd < eDVBSatelliteDiseqcParameters::SENDNO
@@ -488,387 +490,201 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                                eDebugNoNewLine("0");
                                eDebug("");
 #endif
-                               if (doSetVoltageToneFrontend)
+                               if ( diseqc_mode == eDVBSatelliteDiseqcParameters::V1_2
+                                       && !sat.no_rotor_command_on_tune )
                                {
-                                       int RotorCmd=-1;
-                                       bool useGotoXX = false;
-                                       if ( diseqc_mode == eDVBSatelliteDiseqcParameters::V1_2
-                                               && !sat.no_rotor_command_on_tune )
+                                       if (sw_param.m_rotorPosNum) // we have stored rotor pos?
+                                               RotorCmd=sw_param.m_rotorPosNum;
+                                       else  // we must calc gotoxx cmd
                                        {
-                                               if (sw_param.m_rotorPosNum) // we have stored rotor pos?
-                                                       RotorCmd=sw_param.m_rotorPosNum;
-                                               else  // we must calc gotoxx cmd
-                                               {
-                                                       eDebugNoSimulate("Entry for %d,%d? not in Rotor Table found... i try gotoXX?", sat.orbital_position / 10, sat.orbital_position % 10 );
-                                                       useGotoXX = true;
-       
-                                                       double  SatLon = abs(sat.orbital_position)/10.00,
-                                                                       SiteLat = rotor_param.m_gotoxx_parameters.m_latitude,
-                                                                       SiteLon = rotor_param.m_gotoxx_parameters.m_longitude;
-       
-                                                       if ( rotor_param.m_gotoxx_parameters.m_la_direction == eDVBSatelliteRotorParameters::SOUTH )
-                                                               SiteLat = -SiteLat;
-       
-                                                       if ( rotor_param.m_gotoxx_parameters.m_lo_direction == eDVBSatelliteRotorParameters::WEST )
-                                                               SiteLon = 360 - SiteLon;
-       
-                                                       eDebugNoSimulate("siteLatitude = %lf, siteLongitude = %lf, %lf degrees", SiteLat, SiteLon, SatLon );
-                                                       double satHourAngle =
-                                                               calcSatHourangle( SatLon, SiteLat, SiteLon );
-                                                       eDebugNoSimulate("PolarmountHourAngle=%lf", satHourAngle );
-       
-                                                       static int gotoXTable[10] =
-                                                               { 0x00, 0x02, 0x03, 0x05, 0x06, 0x08, 0x0A, 0x0B, 0x0D, 0x0E };
-       
-                                                       if (SiteLat >= 0) // Northern Hemisphere
-                                                       {
-                                                               int tmp=(int)round( fabs( 180 - satHourAngle ) * 10.0 );
-                                                               RotorCmd = (tmp/10)*0x10 + gotoXTable[ tmp % 10 ];
-       
-                                                               if (satHourAngle < 180) // the east
-                                                                       RotorCmd |= 0xE000;
-                                                               else                                    // west
-                                                                       RotorCmd |= 0xD000;
-                                                       }
-                                                       else // Southern Hemisphere
-                                                       {
-                                                               if (satHourAngle < 180) // the east
-                                                               {
-                                                                       int tmp=(int)round( fabs( satHourAngle ) * 10.0 );
-                                                                       RotorCmd = (tmp/10)*0x10 + gotoXTable[ tmp % 10 ];
-                                                                       RotorCmd |= 0xD000;
-                                                               }
-                                                               else // west
-                                                               {
-                                                                       int tmp=(int)round( fabs( 360 - satHourAngle ) * 10.0 );
-                                                                       RotorCmd = (tmp/10)*0x10 + gotoXTable[ tmp % 10 ];
-                                                                       RotorCmd |= 0xE000;
-                                                               }
-                                                       }
-                                                       eDebugNoSimulate("RotorCmd = %04x", RotorCmd);
-                                               }
-                                       }
+                                               eDebugNoSimulate("Entry for %d,%d? not in Rotor Table found... i try gotoXX?", sat.orbital_position / 10, sat.orbital_position % 10 );
+                                               useGotoXX = true;
 
-                                       if ( send_mask )
-                                       {
-                                               int vlt = iDVBFrontend::voltageOff;
-                                               eSecCommand::pair compare;
-                                               compare.steps = +3;
-                                               compare.tone = iDVBFrontend::toneOff;
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) );
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) );
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_CONT_TONE_DISABLE_BEFORE_DISEQC]) );
-
-                                               if (diseqc13V)
-                                                       vlt = iDVBFrontend::voltage13;
-                                               else if ( RotorCmd != -1 && RotorCmd != lastRotorCmd )
-                                               {
-                                                       if (rotor_param.m_inputpower_parameters.m_use)
-                                                               vlt = VOLTAGE(18);  // in input power mode set 18V for measure input power
-                                                       else
-                                                               vlt = VOLTAGE(13);  // in normal mode start turning with 13V
-                                               }
-                                               else
-                                                       vlt = voltage;
+                                               double  SatLon = abs(sat.orbital_position)/10.00,
+                                                               SiteLat = rotor_param.m_gotoxx_parameters.m_latitude,
+                                                               SiteLon = rotor_param.m_gotoxx_parameters.m_longitude;
 
-                                               // check if voltage is already correct..
-                                               compare.voltage = vlt;
-                                               compare.steps = +7;
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
+                                               if ( rotor_param.m_gotoxx_parameters.m_la_direction == eDVBSatelliteRotorParameters::SOUTH )
+                                                       SiteLat = -SiteLat;
 
-                                               // check if voltage is disabled
-                                               compare.voltage = iDVBFrontend::voltageOff;
-                                               compare.steps = +4;
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
+                                               if ( rotor_param.m_gotoxx_parameters.m_lo_direction == eDVBSatelliteRotorParameters::WEST )
+                                                       SiteLon = 360 - SiteLon;
 
-                                               // voltage is changed... use DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_SWITCH_CMDS
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, vlt) );
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_SWITCH_CMDS]) );
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, +3) );
+                                               eDebugNoSimulate("siteLatitude = %lf, siteLongitude = %lf, %lf degrees", SiteLat, SiteLon, SatLon );
+                                               double satHourAngle =
+                                                       calcSatHourangle( SatLon, SiteLat, SiteLon );
+                                               eDebugNoSimulate("PolarmountHourAngle=%lf", satHourAngle );
 
-                                               // voltage was disabled.. use DELAY_AFTER_ENABLE_VOLTAGE_BEFORE_SWITCH_CMDS
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, vlt) );
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_ENABLE_VOLTAGE_BEFORE_SWITCH_CMDS]) );
+                                               static int gotoXTable[10] =
+                                                       { 0x00, 0x02, 0x03, 0x05, 0x06, 0x08, 0x0A, 0x0B, 0x0D, 0x0E };
 
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_SWITCHPARMS) );
-                                               if (needDiSEqCReset)
+                                               if (SiteLat >= 0) // Northern Hemisphere
                                                {
-                                                       eDVBDiseqcCommand diseqc;
-                                                       memset(diseqc.data, 0, MAX_DISEQC_LENGTH);
-                                                       diseqc.len = 3;
-                                                       diseqc.data[0] = 0xE0;
-                                                       diseqc.data[1] = 0;
-                                                       diseqc.data[2] = 0;
-                                                       // diseqc reset
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_DISEQC_RESET_CMD]) );
-                                                       diseqc.data[2] = 3;
-                                                       // diseqc peripherial powersupply on
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_DISEQC_PERIPHERIAL_POWERON_CMD]) );
-                                               }
+                                                       int tmp=(int)round( fabs( 180 - satHourAngle ) * 10.0 );
+                                                       RotorCmd = (tmp/10)*0x10 + gotoXTable[ tmp % 10 ];
 
-                                               for (int seq_repeat = 0; seq_repeat < (di_param.m_seq_repeat?2:1); ++seq_repeat)
+                                                       if (satHourAngle < 180) // the east
+                                                               RotorCmd |= 0xE000;
+                                                       else                                    // west
+                                                               RotorCmd |= 0xD000;
+                                               }
+                                               else // Southern Hemisphere
                                                {
-                                                       if ( send_mask & 4 )
+                                                       if (satHourAngle < 180) // the east
                                                        {
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SEND_TONEBURST, di_param.m_toneburst_param) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_TONEBURST]) );
-                                                       }
-
-                                                       int loops=0;
-
-                                                       if ( send_mask & 1 )
-                                                               ++loops;
-                                                       if ( send_mask & 2 )
-                                                               ++loops;
-
-                                                       loops <<= di_param.m_repeats;
-
-                                                       for ( int i = 0; i < loops;)  // fill commands...
-                                                       {
-                                                               eDVBDiseqcCommand diseqc;
-                                                               memset(diseqc.data, 0, MAX_DISEQC_LENGTH);
-                                                               diseqc.len = 4;
-                                                               diseqc.data[0] = i ? 0xE1 : 0xE0;
-                                                               diseqc.data[1] = 0x10;
-                                                               if ( (send_mask & 2) && (di_param.m_command_order & 4) )
-                                                               {
-                                                                       diseqc.data[2] = 0x39;
-                                                                       diseqc.data[3] = ucsw;
-                                                               }
-                                                               else if ( send_mask & 1 )
-                                                               {
-                                                                       diseqc.data[2] = 0x38;
-                                                                       diseqc.data[3] = csw;
-                                                               }
-                                                               else  // no committed command confed.. so send uncommitted..
-                                                               {
-                                                                       diseqc.data[2] = 0x39;
-                                                                       diseqc.data[3] = ucsw;
-                                                               }
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
-
-                                                               i++;
-                                                               if ( i < loops )
-                                                               {
-                                                                       int cmd=0;
-                                                                       if (diseqc.data[2] == 0x38 && (send_mask & 2))
-                                                                               cmd=0x39;
-                                                                       else if (diseqc.data[2] == 0x39 && (send_mask & 1))
-                                                                               cmd=0x38;
-                                                                       int tmp = m_params[DELAY_BETWEEN_DISEQC_REPEATS];
-                                                                       if (cmd)
-                                                                       {
-                                                                               int delay = di_param.m_repeats ? (tmp - 54) / 2 : tmp;  // standard says 100msek between two repeated commands
-                                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, delay) );
-                                                                               diseqc.data[2]=cmd;
-                                                                               diseqc.data[3]=(cmd==0x38) ? csw : ucsw;
-                                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
-                                                                               ++i;
-                                                                               if ( i < loops )
-                                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, delay ) );
-                                                                               else
-                                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_LAST_DISEQC_CMD]) );
-                                                                       }
-                                                                       else  // delay 120msek when no command is in repeat gap
-                                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, tmp) );
-                                                               }
-                                                               else
-                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_LAST_DISEQC_CMD]) );
+                                                               int tmp=(int)round( fabs( satHourAngle ) * 10.0 );
+                                                               RotorCmd = (tmp/10)*0x10 + gotoXTable[ tmp % 10 ];
+                                                               RotorCmd |= 0xD000;
                                                        }
-
-                                                       if ( send_mask & 8 )  // toneburst at end of sequence
+                                                       else // west
                                                        {
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SEND_TONEBURST, di_param.m_toneburst_param) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_TONEBURST]) );
+                                                               int tmp=(int)round( fabs( 360 - satHourAngle ) * 10.0 );
+                                                               RotorCmd = (tmp/10)*0x10 + gotoXTable[ tmp % 10 ];
+                                                               RotorCmd |= 0xE000;
                                                        }
-
-                                                       if (di_param.m_seq_repeat && seq_repeat == 0)
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_BEFORE_SEQUENCE_REPEAT]) );
                                                }
+                                               eDebugNoSimulate("RotorCmd = %04x", RotorCmd);
                                        }
+                               }
 
-                                       eDebugNoSimulate("RotorCmd %02x, lastRotorCmd %02lx", RotorCmd, lastRotorCmd);
-                                       if ( RotorCmd != -1 && RotorCmd != lastRotorCmd )
+                               if ( send_mask )
+                               {
+                                       int diseqc_repeats = diseqc_mode > eDVBSatelliteDiseqcParameters::V1_0 ? di_param.m_repeats : 0;
+                                       int vlt = iDVBFrontend::voltageOff;
+                                       eSecCommand::pair compare;
+                                       compare.steps = +3;
+                                       compare.tone = iDVBFrontend::toneOff;
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_CONT_TONE_DISABLE_BEFORE_DISEQC]) );
+
+                                       if (diseqc13V)
+                                               vlt = iDVBFrontend::voltage13;
+                                       else if ( RotorCmd != -1 && RotorCmd != lastRotorCmd )
                                        {
-                                               eSecCommand::pair compare;
-                                               if (!send_mask && lnb_param.SatCR_idx == -1)
-                                               {
-                                                       compare.steps = +3;
-                                                       compare.tone = iDVBFrontend::toneOff;
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_CONT_TONE_DISABLE_BEFORE_DISEQC]) );
-
-                                                       compare.voltage = iDVBFrontend::voltageOff;
-                                                       compare.steps = +4;
-                                                       // the next is a check if voltage is switched off.. then we first set a voltage :)
-                                                       // else we set voltage after all diseqc stuff..
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_NOT_VOLTAGE_GOTO, compare) );
-
-                                                       if (rotor_param.m_inputpower_parameters.m_use)
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) ); // set 18V for measure input power
-                                                       else
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) ); // in normal mode start turning with 13V
-
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_ENABLE_VOLTAGE_BEFORE_MOTOR_CMD]) ); // wait 750ms when voltage was disabled
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, +9) );  // no need to send stop rotor cmd and recheck voltage
-                                               }
+                                               if (rotor_param.m_inputpower_parameters.m_use && !is_unicable)
+                                                       vlt = VOLTAGE(18);  // in input power mode set 18V for measure input power
                                                else
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_BETWEEN_SWITCH_AND_MOTOR_CMD]) ); // wait 700ms when diseqc changed
+                                                       vlt = VOLTAGE(13);  // in normal mode start turning with 13V
+                                       }
+                                       else
+                                               vlt = voltage;
 
+                                       // check if voltage is already correct..
+                                       compare.voltage = vlt;
+                                       compare.steps = +7;
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
+
+                                       // check if voltage is disabled
+                                       compare.voltage = iDVBFrontend::voltageOff;
+                                       compare.steps = +4;
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
+
+                                       // voltage is changed... use DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_SWITCH_CMDS
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, vlt) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_SWITCH_CMDS]) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, +3) );
+
+                                       // voltage was disabled.. use DELAY_AFTER_ENABLE_VOLTAGE_BEFORE_SWITCH_CMDS
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, vlt) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_ENABLE_VOLTAGE_BEFORE_SWITCH_CMDS]) );
+
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_SWITCHPARMS) );
+                                       if (needDiSEqCReset)
+                                       {
                                                eDVBDiseqcCommand diseqc;
                                                memset(diseqc.data, 0, MAX_DISEQC_LENGTH);
                                                diseqc.len = 3;
                                                diseqc.data[0] = 0xE0;
-                                               diseqc.data[1] = 0x31;  // positioner
-                                               diseqc.data[2] = 0x60;  // stop
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_ROTORPOS_VALID_GOTO, +5) );
+                                               diseqc.data[1] = 0;
+                                               diseqc.data[2] = 0;
+                                               // diseqc reset
                                                sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_DISEQC_RESET_CMD]) );
+                                               diseqc.data[2] = 3;
+                                               // diseqc peripherial powersupply on
                                                sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
-                                               // wait 150msec after send rotor stop cmd
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_MOTOR_STOP_CMD]) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_DISEQC_PERIPHERIAL_POWERON_CMD]) );
+                                       }
 
-                                               diseqc.data[0] = 0xE0;
-                                               diseqc.data[1] = 0x31;          // positioner
-                                               if ( useGotoXX )
+                                       for (int seq_repeat = 0; seq_repeat < (di_param.m_seq_repeat?2:1); ++seq_repeat)
+                                       {
+                                               if ( send_mask & 4 )
                                                {
-                                                       diseqc.len = 5;
-                                                       diseqc.data[2] = 0x6E;  // drive to angular position
-                                                       diseqc.data[3] = ((RotorCmd & 0xFF00) / 0x100);
-                                                       diseqc.data[4] = RotorCmd & 0xFF;
+                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SEND_TONEBURST, di_param.m_toneburst_param) );
+                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_TONEBURST]) );
                                                }
-                                               else
+
+                                               int loops=0;
+
+                                               if ( send_mask & 1 )
+                                                       ++loops;
+                                               if ( send_mask & 2 )
+                                                       ++loops;
+
+                                               loops <<= diseqc_repeats;
+
+                                               for ( int i = 0; i < loops;)  // fill commands...
                                                {
+                                                       eDVBDiseqcCommand diseqc;
+                                                       memset(diseqc.data, 0, MAX_DISEQC_LENGTH);
                                                        diseqc.len = 4;
-                                                       diseqc.data[2] = 0x6B;  // goto stored sat position
-                                                       diseqc.data[3] = RotorCmd;
-                                                       diseqc.data[4] = 0x00;
-                                               }
-//                                             if(lnb_param.SatCR_idx == -1)
-                                               {
-                                                       int mrt = m_params[MOTOR_RUNNING_TIMEOUT]; // in seconds!
-                                                       if ( rotor_param.m_inputpower_parameters.m_use || lnb_param.SatCR_idx == -1)
-                                                       { // use measure rotor input power to detect rotor state
-                                                               bool turn_fast = need_turn_fast(rotor_param.m_inputpower_parameters.m_turning_speed);
-                                                               eSecCommand::rotor cmd;
-                                                               eSecCommand::pair compare;
-                                                               if (turn_fast)
-                                                                       compare.voltage = VOLTAGE(18);
-                                                               else
-                                                                       compare.voltage = VOLTAGE(13);
-                                                               compare.steps = +3;
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) );
-       // measure idle power values
-                                                               compare.steps = -2;
-                                                               if (turn_fast) {
-                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) );  // wait 150msec after voltage change
-                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 1) );
-                                                                       compare.val = 1;
-                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) );
-                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) );
-                                                               }
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) );  // wait 150msec before measure
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 0) );
-                                                               compare.val = 0;
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) );
-       ////////////////////////////
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_DISEQC_RETRYS, m_params[MOTOR_COMMAND_RETRIES]) );  // 2 retries
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_ROTORPARMS) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, 40) );  // 2 seconds rotor start timout
-       // rotor start loop
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );  // 50msec delay
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_RUNNING_INPUTPOWER) );
-                                                               cmd.direction=1;  // check for running rotor
-                                                               cmd.deltaA=rotor_param.m_inputpower_parameters.m_delta;
-                                                               cmd.steps=+5;
-                                                               cmd.okcount=0;
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) );  // check if rotor has started
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +2 ) );  // timeout .. we assume now the rotor is already at the correct position
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) );  // goto loop start
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_NO_MORE_ROTOR_DISEQC_RETRYS_GOTO, turn_fast ? 10 : 9 ) );  // timeout .. we assume now the rotor is already at the correct position 
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -8) );  // goto loop start
-       ////////////////////
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_MOVING) );
-                                                               if (turn_fast)
-                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, mrt*20) );  // mrt is in seconds... our SLEEP time is 50ms.. so * 20
-       // rotor running loop
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );  // wait 50msec
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_RUNNING_INPUTPOWER) );
-                                                               cmd.direction=0;  // check for stopped rotor
-                                                               cmd.steps=+3;
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +2 ) );  // timeout ? this should never happen
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) );  // running loop start
-       /////////////////////
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_ROTORPARAMS) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_STOPPED) );
+                                                       diseqc.data[0] = i ? 0xE1 : 0xE0;
+                                                       diseqc.data[1] = 0x10;
+                                                       if ( (send_mask & 2) && (di_param.m_command_order & 4) )
+                                                       {
+                                                               diseqc.data[2] = 0x39;
+                                                               diseqc.data[3] = ucsw;
                                                        }
-                                                       else
-                                                       {  // use normal turning mode
-                                                               if (curRotorPos != -1)
-                                                               {               
-                                                                       mrt = abs(curRotorPos - sat.orbital_position);
-                                                                       if (mrt > 1800)
-                                                                               mrt = 3600 - mrt;
-                                                                       if (mrt % 10)
-                                                                               mrt += 10; // round a little bit
-                                                                       mrt *= 2000;  // (we assume a very slow rotor with just 0.5 degree per second here)
-                                                                       mrt /= 10000;
-                                                                       mrt += 3; // a little bit overhead
+                                                       else if ( send_mask & 1 )
+                                                       {
+                                                               diseqc.data[2] = 0x38;
+                                                               diseqc.data[3] = csw;
+                                                       }
+                                                       else  // no committed command confed.. so send uncommitted..
+                                                       {
+                                                               diseqc.data[2] = 0x39;
+                                                               diseqc.data[3] = ucsw;
+                                                       }
+                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
+
+                                                       i++;
+                                                       if ( i < loops )
+                                                       {
+                                                               int cmd=0;
+                                                               if (diseqc.data[2] == 0x38 && (send_mask & 2))
+                                                                       cmd=0x39;
+                                                               else if (diseqc.data[2] == 0x39 && (send_mask & 1))
+                                                                       cmd=0x38;
+                                                               int tmp = m_params[DELAY_BETWEEN_DISEQC_REPEATS];
+                                                               if (cmd)
+                                                               {
+                                                                       int delay = diseqc_repeats ? (tmp - 54) / 2 : tmp;  // standard says 100msek between two repeated commands
+                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, delay) );
+                                                                       diseqc.data[2]=cmd;
+                                                                       diseqc.data[3]=(cmd==0x38) ? csw : ucsw;
+                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
+                                                                       ++i;
+                                                                       if ( i < loops )
+                                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, delay ) );
+                                                                       else
+                                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_LAST_DISEQC_CMD]) );
                                                                }
-                                                               doSetVoltageToneFrontend=false;
-                                                               doSetFrontend=false;
-                                                               eSecCommand::rotor cmd;
-                                                               eSecCommand::pair compare;
-                                                               compare.voltage = VOLTAGE(13);
-                                                               compare.steps = +3;
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MOTOR_CMD]) );  // wait 150msec after voltage change
-       
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_ROTORPARMS) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_MOVING) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 1000) ); // sleep one second before change voltage or tone
-
-                                                               compare.voltage = voltage;
-                                                               compare.steps = +3;
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) ); // correct final voltage?
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 2000) );  // wait 2 second before set high voltage
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, voltage) );
-
-                                                               compare.tone = tone;
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, tone) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_FINAL_CONT_TONE_CHANGE]) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND, 0) );
-       
-                                                               cmd.direction=1;  // check for running rotor
-                                                               cmd.deltaA=0;
-                                                               cmd.steps = +3;
-                                                               cmd.okcount=0;
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, mrt*4) );  // mrt is in seconds... our SLEEP time is 250ms.. so * 4
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 250) );  // 250msec delay
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TUNER_LOCKED_GOTO, cmd ) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +5 ) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -3) );  // goto loop start
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_ROTORPARAMS) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_STOPPED) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, +4) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::START_TUNE_TIMEOUT, tunetimeout) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND, 1) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -5) );
+                                                               else  // delay 120msek when no command is in repeat gap
+                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, tmp) );
                                                        }
-                                                       eDebug("set rotor timeout to %d seconds", mrt);
-                                                       sec_fe->setData(eDVBFrontend::NEW_ROTOR_CMD, RotorCmd);
-                                                       sec_fe->setData(eDVBFrontend::NEW_ROTOR_POS, sat.orbital_position);
+                                                       else
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_LAST_DISEQC_CMD]) );
                                                }
+
+                                               if ( send_mask & 8 )  // toneburst at end of sequence
+                                               {
+                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SEND_TONEBURST, di_param.m_toneburst_param) );
+                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_TONEBURST]) );
+                                               }
+
+                                               if (di_param.m_seq_repeat && seq_repeat == 0)
+                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_BEFORE_SEQUENCE_REPEAT]) );
                                        }
                                }
                        }
@@ -882,33 +698,17 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                        sec_fe->setData(eDVBFrontend::NEW_UCSW, ucsw);
                        sec_fe->setData(eDVBFrontend::NEW_TONEBURST, di_param.m_toneburst_param);
 
-                       if ((doSetVoltageToneFrontend) && (lnb_param.SatCR_idx == -1))
-                       {
-                               eSecCommand::pair compare;
-                               compare.voltage = voltage;
-                               compare.steps = +3;
-                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) ); // voltage already correct ?
-                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, voltage) );
-                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_FINAL_VOLTAGE_CHANGE]) );
-                               compare.tone = tone;
-                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) );
-                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, tone) );
-                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_FINAL_CONT_TONE_CHANGE]) );
-                       }
-
-                       sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_SWITCHPARMS) );
-
-                       if(lnb_param.SatCR_idx != -1)
+                       if(is_unicable)
                        {
                                // check if voltage is disabled
                                eSecCommand::pair compare;
                                compare.steps = +3;
                                compare.voltage = iDVBFrontend::voltageOff;
                                sec_sequence.push_back( eSecCommand(eSecCommand::IF_NOT_VOLTAGE_GOTO, compare) );
-                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage13) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) );
                                sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_ENABLE_VOLTAGE_BEFORE_SWITCH_CMDS] ) );
 
-                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage18_5) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) );
                                sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) );
                                sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_SWITCH_CMDS]) );  // wait 20 ms after voltage change
        
@@ -923,9 +723,209 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
 
                                sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
                                sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_LAST_DISEQC_CMD]) );
-                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage13) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) );
+                               if ( RotorCmd != -1 && RotorCmd != lastRotorCmd && !rotor_param.m_inputpower_parameters.m_use)
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MOTOR_CMD]) );  // wait 150msec after voltage change
+                       }
+
+                       eDebugNoSimulate("RotorCmd %02x, lastRotorCmd %02lx", RotorCmd, lastRotorCmd);
+                       if ( RotorCmd != -1 && RotorCmd != lastRotorCmd )
+                       {
+                               int mrt = m_params[MOTOR_RUNNING_TIMEOUT]; // in seconds!
+                               eSecCommand::pair compare;
+                               if (!send_mask && !is_unicable)
+                               {
+                                       compare.steps = +3;
+                                       compare.tone = iDVBFrontend::toneOff;
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_CONT_TONE_DISABLE_BEFORE_DISEQC]) );
+
+                                       compare.voltage = iDVBFrontend::voltageOff;
+                                       compare.steps = +4;
+                                       // the next is a check if voltage is switched off.. then we first set a voltage :)
+                                       // else we set voltage after all diseqc stuff..
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_NOT_VOLTAGE_GOTO, compare) );
+
+                                       if (rotor_param.m_inputpower_parameters.m_use)
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) ); // set 18V for measure input power
+                                       else
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) ); // in normal mode start turning with 13V
+
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_ENABLE_VOLTAGE_BEFORE_MOTOR_CMD]) ); // wait 750ms when voltage was disabled
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, +9) );  // no need to send stop rotor cmd and recheck voltage
+                               }
+                               else
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_BETWEEN_SWITCH_AND_MOTOR_CMD]) ); // wait 700ms when diseqc changed
+
+                               eDVBDiseqcCommand diseqc;
+                               memset(diseqc.data, 0, MAX_DISEQC_LENGTH);
+                               diseqc.len = 3;
+                               diseqc.data[0] = 0xE0;
+                               diseqc.data[1] = 0x31;  // positioner
+                               diseqc.data[2] = 0x60;  // stop
+                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_ROTORPOS_VALID_GOTO, +5) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
+                               // wait 150msec after send rotor stop cmd
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_MOTOR_STOP_CMD]) );
+
+                               diseqc.data[0] = 0xE0;
+                               diseqc.data[1] = 0x31;          // positioner
+                               if ( useGotoXX )
+                               {
+                                       diseqc.len = 5;
+                                       diseqc.data[2] = 0x6E;  // drive to angular position
+                                       diseqc.data[3] = ((RotorCmd & 0xFF00) / 0x100);
+                                       diseqc.data[4] = RotorCmd & 0xFF;
+                               }
+                               else
+                               {
+                                       diseqc.len = 4;
+                                       diseqc.data[2] = 0x6B;  // goto stored sat position
+                                       diseqc.data[3] = RotorCmd;
+                                       diseqc.data[4] = 0x00;
+                               }
+
+                       // use measure rotor input power to detect motor state
+                               if ( rotor_param.m_inputpower_parameters.m_use)
+                               {
+                                       bool turn_fast = need_turn_fast(rotor_param.m_inputpower_parameters.m_turning_speed) && !is_unicable;
+                                       eSecCommand::rotor cmd;
+                                       eSecCommand::pair compare;
+                                       if (turn_fast)
+                                               compare.voltage = VOLTAGE(18);
+                                       else
+                                               compare.voltage = VOLTAGE(13);
+                                       compare.steps = +3;
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) );
+                       // measure idle power values
+                                       compare.steps = -2;
+                                       if (turn_fast) {
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) );  // wait 150msec after voltage change
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 1) );
+                                               compare.val = 1;
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) );
+                                       }
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) );  // wait 150msec before measure
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 0) );
+                                       compare.val = 0;
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) );
+                       ////////////////////////////
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_DISEQC_RETRYS, m_params[MOTOR_COMMAND_RETRIES]) );  // 2 retries
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_ROTORPARMS) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, 40) );  // 2 seconds rotor start timout
+                       // rotor start loop
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );  // 50msec delay
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_RUNNING_INPUTPOWER) );
+                                       cmd.direction=1;  // check for running rotor
+                                       cmd.deltaA=rotor_param.m_inputpower_parameters.m_delta;
+                                       cmd.steps=+5;
+                                       cmd.okcount=0;
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) );  // check if rotor has started
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +2 ) );  // timeout .. we assume now the rotor is already at the correct position
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) );  // goto loop start
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_NO_MORE_ROTOR_DISEQC_RETRYS_GOTO, turn_fast ? 10 : 9 ) );  // timeout .. we assume now the rotor is already at the correct position 
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -8) );  // goto loop start
+                       ////////////////////
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_MOVING) );
+                                       if (turn_fast)
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, mrt*20) );  // mrt is in seconds... our SLEEP time is 50ms.. so * 20
+                       // rotor running loop
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );  // wait 50msec
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_RUNNING_INPUTPOWER) );
+                                       cmd.direction=0;  // check for stopped rotor
+                                       cmd.steps=+3;
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +2 ) );  // timeout ? this should never happen
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) );  // running loop start
+                       /////////////////////
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_ROTORPARAMS) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_STOPPED) );
+                               }
+                       // use normal motor turning mode
+                               else
+                               {
+                                       if (curRotorPos != -1)
+                                       {
+                                               mrt = abs(curRotorPos - sat.orbital_position);
+                                               if (mrt > 1800)
+                                                       mrt = 3600 - mrt;
+                                               if (mrt % 10)
+                                                       mrt += 10; // round a little bit
+                                               mrt *= 2000;  // (we assume a very slow rotor with just 0.5 degree per second here)
+                                               mrt /= 10000;
+                                               mrt += 3; // a little bit overhead
+                                       }
+                                       doSetVoltageToneFrontend=false;
+                                       doSetFrontend=false;
+                                       eSecCommand::rotor cmd;
+                                       eSecCommand::pair compare;
+                                       compare.voltage = VOLTAGE(13);
+                                       compare.steps = +3;
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MOTOR_CMD]) );  // wait 150msec after voltage change
+
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_ROTORPARMS) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_MOVING) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 1000) ); // sleep one second before change voltage or tone
+
+                                       compare.voltage = voltage;
+                                       compare.steps = +3;
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) ); // correct final voltage?
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 2000) );  // wait 2 second before set high voltage
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, voltage) );
+
+                                       compare.tone = tone;
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, tone) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_FINAL_CONT_TONE_CHANGE]) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND, 0) );
+
+                                       cmd.direction=1;  // check for running rotor
+                                       cmd.deltaA=0;
+                                       cmd.steps = +3;
+                                       cmd.okcount=0;
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, mrt*4) );  // mrt is in seconds... our SLEEP time is 250ms.. so * 4
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 250) );  // 250msec delay
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_TUNER_LOCKED_GOTO, cmd ) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +5 ) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -3) );  // goto loop start
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_ROTORPARAMS) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_STOPPED) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, +4) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::START_TUNE_TIMEOUT, tunetimeout) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND, 1) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -5) );
+                                       eDebug("set rotor timeout to %d seconds", mrt);
+                               }
+                               sec_fe->setData(eDVBFrontend::NEW_ROTOR_CMD, RotorCmd);
+                               sec_fe->setData(eDVBFrontend::NEW_ROTOR_POS, sat.orbital_position);
+                       }
+
+                       if (doSetVoltageToneFrontend && !is_unicable)
+                       {
+                               eSecCommand::pair compare;
+                               compare.voltage = voltage;
+                               compare.steps = +3;
+                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) ); // voltage already correct ?
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, voltage) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_FINAL_VOLTAGE_CHANGE]) );
+                               compare.tone = tone;
+                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, tone) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_FINAL_CONT_TONE_CHANGE]) );
                        }
 
+                       sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_SWITCHPARMS) );
+
                        if (doSetFrontend)
                        {
                                sec_sequence.push_back( eSecCommand(eSecCommand::START_TUNE_TIMEOUT, tunetimeout) );
index d5ad249..6cd855c 100644 (file)
@@ -7,7 +7,6 @@
 #include <stdio.h>
 
 eDVBTSTools::eDVBTSTools()
-       :m_file_lock(true)
 {
        m_pid = -1;
        m_maxrange = 256*1024;
@@ -23,19 +22,39 @@ eDVBTSTools::eDVBTSTools()
        m_futile = 0;
 }
 
+void eDVBTSTools::closeSource()
+{
+       m_source = NULL;
+}
+
 eDVBTSTools::~eDVBTSTools()
 {
-       closeFile();
+       closeSource();
 }
 
 int eDVBTSTools::openFile(const char *filename, int nostreaminfo)
 {
+       eRawFile *f = new eRawFile();
+       ePtr<iTsSource> src = f;
+
+       if (f->open(filename, 1) < 0)
+               return -1;
+
+       setSource(src, nostreaminfo ? NULL : filename);
+
+       return 0;
+}
+
+void eDVBTSTools::setSource(ePtr<iTsSource> &source, const char *stream_info_filename)
+{
        closeFile();
-       
-       if (!nostreaminfo)
+
+       m_source = source;
+
+       if (stream_info_filename)
        {
-               eDebug("loading streaminfo for %s", filename);
-               m_streaminfo.load(filename);
+               eDebug("loading streaminfo for %s", stream_info_filename);
+               m_streaminfo.load(stream_info_filename);
        }
        
        if (!m_streaminfo.empty())
@@ -45,19 +64,14 @@ int eDVBTSTools::openFile(const char *filename, int nostreaminfo)
 //             eDebug("no recorded stream information available");
                m_use_streaminfo = 0;
        }
-       
-       m_samples_taken = 0;
 
-       eSingleLocker l(m_file_lock);
-       if (m_file.open(filename, 1) < 0)
-               return -1;
-       return 0;
+       m_samples_taken = 0;
 }
 
 void eDVBTSTools::closeFile()
 {
-       eSingleLocker l(m_file_lock);
-       m_file.close();
+       if (m_source)
+               closeSource();
 }
 
 void eDVBTSTools::setSyncPID(int pid)
@@ -77,31 +91,24 @@ int eDVBTSTools::getPTS(off_t &offset, pts_t &pts, int fixed)
                if (!m_streaminfo.getPTS(offset, pts))
                        return 0;
        
-       if (!m_file.valid())
+       if (!m_source || !m_source->valid())
                return -1;
 
        offset -= offset % 188;
 
-       eSingleLocker l(m_file_lock);
-       if (m_file.lseek(offset, SEEK_SET) < 0)
-       {
-               eDebug("lseek failed");
-               return -1;
-       }
-       
        int left = m_maxrange;
        
        while (left >= 188)
        {
                unsigned char packet[188];
-               if (m_file.read(packet, 188) != 188)
+               if (m_source->read(offset, packet, 188) != 188)
                {
                        eDebug("read error");
                        break;
                }
                left -= 188;
                offset += 188;
-               
+
                if (packet[0] != 0x47)
                {
                        eDebug("resync");
@@ -111,8 +118,8 @@ int eDVBTSTools::getPTS(off_t &offset, pts_t &pts, int fixed)
                                if (packet[i] == 0x47)
                                        break;
                                ++i;
+                               --offset;
                        }
-                       offset = m_file.lseek(i - 188, SEEK_CUR);
                        continue;
                }
                
@@ -205,6 +212,8 @@ int eDVBTSTools::getPTS(off_t &offset, pts_t &pts, int fixed)
                                                        break;
                                                case 0x71: // AC3 / DTS
                                                        break;
+                                               case 0x72: // DTS - HD
+                                                       break;
                                                default:
                                                        eDebug("skip unknwn stream_id_extension %02x\n", payload[9+offs]);
                                                        continue;
@@ -404,7 +413,7 @@ int eDVBTSTools::getNextAccessPoint(pts_t &ts, const pts_t &start, int direction
 
 void eDVBTSTools::calcBegin()
 {
-       if (!m_file.valid())
+       if (!m_source || !m_source->valid())
                return;
 
        if (!(m_begin_valid || m_futile))
@@ -419,11 +428,10 @@ void eDVBTSTools::calcBegin()
 
 void eDVBTSTools::calcEnd()
 {
-       if (!m_file.valid())
+       if (!m_source || !m_source->valid())
                return;
 
-       eSingleLocker l(m_file_lock);
-       off_t end = m_file.lseek(0, SEEK_END);
+       off_t end = m_source->lseek(0, SEEK_END);
        
        if (llabs(end - m_last_filelength) > 1*1024*1024)
        {
@@ -573,31 +581,28 @@ int eDVBTSTools::takeSample(off_t off, pts_t &p)
 int eDVBTSTools::findPMT(int &pmt_pid, int &service_id)
 {
                /* FIXME: this will be factored out soon! */
-       if (!m_file.valid())
+       if (!m_source || !m_source->valid())
        {
                eDebug(" file not valid");
                return -1;
        }
 
-       eSingleLocker l(m_file_lock);
-       if (m_file.lseek(0, SEEK_SET) < 0)
-       {
-               eDebug("seek failed");
-               return -1;
-       }
+       off_t position=0;
 
        int left = 5*1024*1024;
        
        while (left >= 188)
        {
                unsigned char packet[188];
-               if (m_file.read(packet, 188) != 188)
+               int ret = m_source->read(position, packet, 188);
+               if (ret != 188)
                {
                        eDebug("read error");
                        break;
                }
                left -= 188;
-               
+               position += 188;
+
                if (packet[0] != 0x47)
                {
                        int i = 0;
@@ -605,12 +610,11 @@ int eDVBTSTools::findPMT(int &pmt_pid, int &service_id)
                        {
                                if (packet[i] == 0x47)
                                        break;
+                               --position;
                                ++i;
                        }
-                       m_file.lseek(i - 188, SEEK_CUR);
                        continue;
                }
-               
                int pid = ((packet[1] << 8) | packet[2]) & 0x1FFF;
                
                int pusi = !!(packet[1] & 0x40);
@@ -698,9 +702,26 @@ int eDVBTSTools::findFrame(off_t &_offset, size_t &len, int &direction, int fram
                else if (direction == +1)
                        direction = 0;
        }
-                       /* let's find the next frame after the given offset */
        off_t start = offset;
 
+#if 0
+                       /* backtrack to find the previous sequence start, in case of MPEG2 */
+       if ((data & 0xFF) == 0x00) {
+               do {
+                       --start;
+                       if (m_streaminfo.getStructureEntry(start, data, 0))
+                       {
+                               eDebug("get previous failed");
+                               return -1;
+                       }
+               } while (((data & 0xFF) != 9) && ((data & 0xFF) != 0x00) && ((data & 0xFF) != 0xB3)); /* sequence start or previous frame */
+               if ((data & 0xFF) != 0xB3)
+                       start = offset;  /* Failed to find corresponding sequence start, so never mind */
+       }
+
+#endif
+
+                       /* let's find the next frame after the given offset */
        do {
                if (m_streaminfo.getStructureEntry(offset, data, 1))
                {
@@ -715,9 +736,11 @@ int eDVBTSTools::findFrame(off_t &_offset, size_t &len, int &direction, int fram
 //             eDebug("%08llx@%llx (next)", data, offset);
        } while (((data & 0xFF) != 9) && ((data & 0xFF) != 0x00)); /* next frame */
 
+#if 0
                        /* align to TS pkt start */
-//     start = start - (start % 188);
-//     offset = offset - (offset % 188);
+       start = start - (start % 188);
+       offset = offset - (offset % 188);
+#endif
 
        len = offset - start;
        _offset = start;
index ed8b924..9982792 100644 (file)
@@ -19,9 +19,12 @@ public:
        eDVBTSTools();
        ~eDVBTSTools();
 
+       void setSource(ePtr<iTsSource> &source, const char *streaminfo_filename=NULL);
+       void closeSource();
+
        int openFile(const char *filename, int nostreaminfo = 0);
        void closeFile();
-       
+
        void setSyncPID(int pid);
        void setSearchRange(int maxrange);
        
@@ -77,8 +80,7 @@ private:
        int m_pid;
        int m_maxrange;
 
-       eSingleLock m_file_lock;
-       eRawFile m_file;
+       ePtr<iTsSource> m_source;
 
        int m_begin_valid, m_end_valid;
        pts_t m_pts_begin, m_pts_end;
index fc7f762..9ef7249 100644 (file)
@@ -1,10 +1,28 @@
-INCLUDES = \
-       -I$(top_srcdir)/include
+AM_CPPFLAGS = \
+       -I$(top_srcdir) \
+       -I$(top_srcdir)/include \
+       -include Python.h \
+       -include $(top_builddir)/enigma2_config.h
 
 noinst_LIBRARIES = libenigma_dvb_ci.a
 
-libenigma_dvb_ci_a_SOURCES = dvbci.cpp dvbci_session.cpp dvbci_resmgr.cpp \
-                                                                                                                dvbci_appmgr.cpp dvbci_camgr.cpp \
-                                                                                                                dvbci_datetimemgr.cpp dvbci_mmi.cpp \
-                                                                                                                dvbci_ui.cpp
+libenigma_dvb_ci_a_SOURCES = \
+       dvbci.cpp \
+       dvbci_appmgr.cpp \
+       dvbci_camgr.cpp \
+       dvbci_datetimemgr.cpp \
+       dvbci_mmi.cpp \
+       dvbci_resmgr.cpp \
+       dvbci_session.cpp \
+       dvbci_ui.cpp
 
+dvbciincludedir = $(pkgincludedir)/lib/dvb_ci
+dvbciinclude_HEADERS = \
+       dvbci.h \
+       dvbci_appmgr.h \
+       dvbci_camgr.h \
+       dvbci_datetimemgr.h \
+       dvbci_mmi.h \
+       dvbci_resmgr.h \
+       dvbci_session.h \
+       dvbci_ui.h
index 883fb5a..374672a 100644 (file)
@@ -297,8 +297,9 @@ void eDVBCIInterfaces::recheckPMTHandlers()
                if (!pmthandler->getProgramInfo(p))
                {
                        int cnt=0;
-                       for (caidSet::reverse_iterator x(p.caids.rbegin()); x != p.caids.rend(); ++x, ++cnt)
-                               caids.push_front(*x);
+                       std::set<eDVBServicePMTHandler::program::capid_pair> set(p.caids.begin(), p.caids.end());
+                       for (std::set<eDVBServicePMTHandler::program::capid_pair>::reverse_iterator x(set.rbegin()); x != set.rend(); ++x, ++cnt)
+                               caids.push_front(x->caid);
                        if (service && cnt)
                                service->m_ca = caids;
                }
@@ -738,7 +739,7 @@ PyObject *eDVBCIInterfaces::getDescrambleRules(int slotid)
        if (!slot)
        {
                char tmp[255];
-               snprintf(tmp, 255, "eDVBCIInterfaces::getDescrambleRules try to get rules for CI Slot %d... but just %d slots are available", slotid, m_slots.size());
+               snprintf(tmp, 255, "eDVBCIInterfaces::getDescrambleRules try to get rules for CI Slot %d... but just %zd slots are available", slotid, m_slots.size());
                PyErr_SetString(PyExc_StandardError, tmp);
                return 0;
        }
@@ -790,7 +791,7 @@ RESULT eDVBCIInterfaces::setDescrambleRules(int slotid, SWIG_PYOBJECT(ePyObject)
        if (!slot)
        {
                char tmp[255];
-               snprintf(tmp, 255, "eDVBCIInterfaces::setDescrambleRules try to set rules for CI Slot %d... but just %d slots are available", slotid, m_slots.size());
+               snprintf(tmp, 255, "eDVBCIInterfaces::setDescrambleRules try to set rules for CI Slot %d... but just %zd slots are available", slotid, m_slots.size());
                PyErr_SetString(PyExc_StandardError, tmp);
                return -1;
        }
@@ -861,7 +862,7 @@ RESULT eDVBCIInterfaces::setDescrambleRules(int slotid, SWIG_PYOBJECT(ePyObject)
                if (PyTuple_Size(tuple) != 2)
                {
                        char buf[255];
-                       snprintf(buf, 255, "eDVBCIInterfaces::setDescrambleRules provider tuple has %d instead of 2 entries!!", PyTuple_Size(tuple));
+                       snprintf(buf, 255, "eDVBCIInterfaces::setDescrambleRules provider tuple has %zd instead of 2 entries!!", PyTuple_Size(tuple));
                        PyErr_SetString(PyExc_StandardError, buf);
                        return -1;
                }
@@ -913,7 +914,7 @@ PyObject *eDVBCIInterfaces::readCICaIds(int slotid)
        if (!slot)
        {
                char tmp[255];
-               snprintf(tmp, 255, "eDVBCIInterfaces::readCICaIds try to get CAIds for CI Slot %d... but just %d slots are available", slotid, m_slots.size());
+               snprintf(tmp, 255, "eDVBCIInterfaces::readCICaIds try to get CAIds for CI Slot %d... but just %zd slots are available", slotid, m_slots.size());
                PyErr_SetString(PyExc_StandardError, tmp);
        }
        else
index 1280556..20321f5 100644 (file)
@@ -1,15 +1,58 @@
-INCLUDES = \
-       -I$(top_srcdir)/include -I$(top_srcdir)/lib/gdi/ati
+AM_CPPFLAGS = \
+       -I$(top_srcdir) \
+       -I$(top_srcdir)/include \
+       -include Python.h \
+       -include $(top_builddir)/enigma2_config.h
+
+AM_CXXFLAGS = \
+       $(LIBSDL_CFLAGS)
 
 noinst_LIBRARIES = libenigma_gdi.a
 
 libenigma_gdi_a_SOURCES = \
-       region.cpp grc.cpp epng.cpp erect.cpp fb.cpp font.cpp font_arabic.cpp gfbdc.cpp  \
-       glcddc.cpp gpixmap.cpp lcd.cpp gfont.cpp accel.cpp picload.cpp picexif.cpp \
-       compositing.cpp bcm.cpp
+       accel.cpp \
+       bcm.cpp \
+       compositing.cpp \
+       epng.cpp \
+       erect.cpp \
+       fb.cpp \
+       font.cpp \
+       font_arabic.cpp \
+       gfont.cpp \
+       glcddc.cpp \
+       gmaindc.cpp \
+       gpixmap.cpp \
+       grc.cpp \
+       lcd.cpp \
+       picexif.cpp \
+       picload.cpp \
+       region.cpp
 
-if WITH_SDL
-libenigma_gdi_a_SOURCES += sdl.cpp
-endif
+gdiincludedir = $(pkgincludedir)/lib/gdi
+gdiinclude_HEADERS = \
+       accel.h \
+       compositing.h \
+       epng.h \
+       epoint.h \
+       erect.h \
+       esize.h \
+       fb.h \
+       font.h \
+       gfont.h \
+       glcddc.h \
+       gpixmap.h \
+       grc.h \
+       lcd.h \
+       picexif.h \
+       picload.h \
+       region.h
 
-#      ati/2dablt.cpp ati/2dcore.cpp ati/ati_core.cpp ati/test.cpp ati/2dutil.cpp
+if HAVE_LIBSDL
+libenigma_gdi_a_SOURCES += \
+       sdl.cpp \
+       sdl.h
+else
+libenigma_gdi_a_SOURCES += \
+       gfbdc.cpp \
+       gfbdc.h
+endif
index 9450ecc..bd1439f 100644 (file)
@@ -112,7 +112,7 @@ int gAccel::blit(gSurface *dst, const gSurface *src, const eRect &p, const eRect
                        pal_addr = src->stride * src->y;
                        unsigned long *pal = (unsigned long*)(((unsigned char*)src->data) + pal_addr);
                        pal_addr += src->data_phys;
-                       for (i = 0; i < 256; ++i)
+                       for (i = 0; i < src->clut.colors; ++i)
                                *pal++ = src->clut.data[i].argb() ^ 0xFF000000;
                } else
                        return -1; /* unsupported source format */
@@ -138,12 +138,14 @@ int gAccel::fill(gSurface *dst, const eRect &area, unsigned long col)
                col);
        return 0;
 #endif
-#if 0 // def BCM_ACCEL
-       bcm_accel_fill(
-               dst->data_phys, dst->x, dst->y, dst->stride, 
-               area.left(), area.top(), area.width(), area.height(),
-               col);
-       return 0;
+#ifdef BCM_ACCEL
+       if (!m_bcm_accel_state) {
+               bcm_accel_fill(
+                       dst->data_phys, dst->x, dst->y, dst->stride,
+                       area.left(), area.top(), area.width(), area.height(),
+                       col);
+               return 0;
+       }
 #endif
        return -1;
 }
index 12b5f22..b215b10 100644 (file)
@@ -23,10 +23,10 @@ static int exec_list(void);
 
 int bcm_accel_init(void)
 {
-       fb_fd = open("/dev/fb/0", O_RDWR);
+       fb_fd = open("/dev/fb0", O_RDWR);
        if (fb_fd < 0)
        {
-               perror("/dev/fb/0");
+               perror("/dev/fb0");
                return 1;
        }
        if (exec_list())
@@ -123,6 +123,51 @@ void bcm_accel_fill(
                int x, int y, int width, int height,
                unsigned long color)
 {
-//     printf("unimplemented bcm_accel_fill\n");
+       C(0x43); // reset source
+       C(0x53); // reset dest
+       C(0x5b); // reset pattern
+       C(0x67); // reset blend
+       C(0x75); // reset output
+
+       // clear dest surface
+       P(0x0, 0);
+       P(0x1, 0);
+       P(0x2, 0);
+       P(0x3, 0);
+       P(0x4, 0);
+       C(0x45);
+
+       // clear src surface
+       P(0x0, 0);
+       P(0x1, 0);
+       P(0x2, 0);
+       P(0x3, 0);
+       P(0x4, 0);
+       C(0x5);
+
+       P(0x2d, color);
+
+       P(0x2e, x); // prepare output rect
+       P(0x2f, y);
+       P(0x30, width);
+       P(0x31, height);
+       C(0x6e); // set this rect as output rect
+
+       P(0x0, dst_addr); // prepare output surface
+       P(0x1, dst_stride);
+       P(0x2, dst_width);
+       P(0x3, dst_height);
+       P(0x4, 0x7e48888);
+       C(0x69); // set output surface
+
+       P(0x6f, 0);
+       P(0x70, 0);
+       P(0x71, 2);
+       P(0x72, 2);
+       C(0x73); // select color keying
+
+       C(0x77);  // do it
+
+       exec_list();
 }
 
index 972a89d..fd33298 100644 (file)
@@ -1,3 +1,4 @@
+#define PNG_SKIP_SETJMP_CHECK
 #include <png.h>
 #include <stdio.h>
 #include <lib/gdi/epng.h>
index cde3e35..7ee555c 100644 (file)
@@ -83,12 +83,12 @@ nolfb:
 
 int fbClass::showConsole(int state)
 {
-       int fd=open("/dev/vc/0", O_RDWR);
+       int fd=open("/dev/tty0", O_RDWR);
        if(fd>=0)
        {
                if(ioctl(fd, KDSETMODE, state?KD_TEXT:KD_GRAPHICS)<0)
                {
-                       eDebug("setting /dev/vc/0 status failed.");
+                       eDebug("setting /dev/tty0 status failed.");
                }
                close(fd);
        }
index 5447380..fcb5ff2 100644 (file)
@@ -19,7 +19,7 @@ class fbClass
        int m_number_of_pages;
        int m_phys_mem;
 #ifdef SWIG
-       fbClass(const char *fb="/dev/fb/0");
+       fbClass(const char *fb="/dev/fb0");
        ~fbClass();
 public:
 #else
@@ -41,7 +41,7 @@ public:
        unsigned int Stride() { return stride; }
        fb_cmap *CMAP() { return &cmap; }
 
-       fbClass(const char *fb="/dev/fb/0");
+       fbClass(const char *fb="/dev/fb0");
        ~fbClass();
        
                        // low level gfx stuff
index a5db43a..9e17547 100644 (file)
 // use this for init Freetype...
 #include <ft2build.h>
 #include FT_FREETYPE_H
-#ifdef HAVE_FREETYPE2
 #define FTC_Image_Cache_New(a,b)       FTC_ImageCache_New(a,b)
 #define FTC_Image_Cache_Lookup(a,b,c,d)        FTC_ImageCache_Lookup(a,b,c,d,NULL)
 #define FTC_SBit_Cache_New(a,b)                FTC_SBitCache_New(a,b)
 #define FTC_SBit_Cache_Lookup(a,b,c,d) FTC_SBitCache_Lookup(a,b,c,d,NULL)
-#endif
 
 #include <lib/base/eerror.h>
 #include <lib/gdi/lcd.h>
 #include <lib/base/init.h>
 #include <lib/base/init_num.h>
 
-#define HAVE_FRIBIDI
-// until we have it in the cdk
-
-#ifdef HAVE_FRIBIDI
 #include <fribidi/fribidi.h>
-#endif
 
 #include <map>
 
@@ -42,10 +35,6 @@ fontRenderClass *fontRenderClass::instance;
 
 static pthread_mutex_t ftlock=PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP;
 
-#ifndef HAVE_FREETYPE2
-static FTC_Font cache_current_font=0;
-#endif
-
 struct fntColorCacheKey
 {
        gRGB start, end;
@@ -210,12 +199,8 @@ float fontRenderClass::getLineHeight(const gFont& font)
                return 0;
        singleLock s(ftlock);
        FT_Face current_face;
-#ifdef HAVE_FREETYPE2
        if ((FTC_Manager_LookupFace(cacheManager, fnt->scaler.face_id, &current_face) < 0) ||
            (FTC_Manager_LookupSize(cacheManager, &fnt->scaler, &fnt->size) < 0))
-#else
-       if (FTC_Manager_Lookup_Size(cacheManager, &fnt->font.font, &current_face, &fnt->size)<0)
-#endif
        {
                eDebug("FTC_Manager_Lookup_Size failed!");
                return 0;
@@ -263,7 +248,6 @@ DEFINE_REF(Font);
 Font::Font(fontRenderClass *render, FTC_FaceID faceid, int isize, int tw): tabwidth(tw)
 {
        renderer=render;
-#ifdef HAVE_FREETYPE2
        font.face_id = faceid;
        font.width = isize;
        font.height = isize;
@@ -272,12 +256,6 @@ Font::Font(fontRenderClass *render, FTC_FaceID faceid, int isize, int tw): tabwi
        scaler.width = isize;
        scaler.height = isize;
        scaler.pixel = 1;
-#else
-       font.font.face_id=faceid;
-       font.font.pix_width     = isize;
-       font.font.pix_height = isize;
-       font.image_type = ftc_image_grays;
-#endif
        height=isize;
        if (tabwidth==-1)
                tabwidth=8*isize;
@@ -474,18 +452,12 @@ void eTextPara::setFont(Font *fnt, Font *replacement)
                        // we ask for replacment_font first becauseof the cache
        if (replacement_font)
        {
-#ifdef HAVE_FREETYPE2
                if ((FTC_Manager_LookupFace(fontRenderClass::instance->cacheManager,
                                            replacement_font->scaler.face_id,
                                            &replacement_face) < 0) ||
                    (FTC_Manager_LookupSize(fontRenderClass::instance->cacheManager,
                                            &replacement_font->scaler,
                                            &replacement_font->size) < 0))
-#else
-               if (FTC_Manager_Lookup_Size(fontRenderClass::instance->cacheManager, 
-                               &replacement_font->font.font, &replacement_face, 
-                               &replacement_font->size)<0)
-#endif
                {
                        eDebug("FTC_Manager_Lookup_Size failed!");
                        return;
@@ -493,24 +465,17 @@ void eTextPara::setFont(Font *fnt, Font *replacement)
        }
        if (current_font)
        {
-#ifdef HAVE_FREETYPE2
                if ((FTC_Manager_LookupFace(fontRenderClass::instance->cacheManager,
                                            current_font->scaler.face_id,
                                            &current_face) < 0) ||
                    (FTC_Manager_LookupSize(fontRenderClass::instance->cacheManager,
                                            &current_font->scaler,
                                            &current_font->size) < 0))
-#else
-               if (FTC_Manager_Lookup_Size(fontRenderClass::instance->cacheManager, &current_font->font.font, &current_face, &current_font->size)<0)
-#endif
                {
                        eDebug("FTC_Manager_Lookup_Size failed!");
                        return;
                }
        }
-#ifndef HAVE_FREETYPE2
-       cache_current_font=&current_font->font.font;
-#endif
        previous=0;
        use_kerning=FT_HAS_KERNING(current_face);
 }
@@ -525,7 +490,6 @@ int eTextPara::renderString(const char *string, int rflags)
        if (!current_font)
                return -1;
 
-#ifdef HAVE_FREETYPE2
        if ((FTC_Manager_LookupFace(fontRenderClass::instance->cacheManager,
                                    current_font->scaler.face_id,
                                    &current_face) < 0) ||
@@ -536,17 +500,6 @@ int eTextPara::renderString(const char *string, int rflags)
                eDebug("FTC_Manager_Lookup_Size failed!");
                return -1;
        }
-#else
-       if (&current_font->font.font != cache_current_font)
-       {
-               if (FTC_Manager_Lookup_Size(fontRenderClass::instance->cacheManager, &current_font->font.font, &current_face, &current_font->size)<0)
-               {
-                       eDebug("FTC_Manager_Lookup_Size failed!");
-                       return -1;
-               }
-               cache_current_font=&current_font->font.font;
-       }
-#endif
 
        if (!current_face)
                eFatal("eTextPara::renderString: no current_face");
@@ -610,7 +563,6 @@ int eTextPara::renderString(const char *string, int rflags)
        
                // now do the usual logical->visual reordering
        int size=uc_shape.size();
-#ifdef HAVE_FRIBIDI
        FriBidiCharType dir=FRIBIDI_TYPE_ON;
        uc_visual.resize(size);
        // gaaanz lahm, aber anders geht das leider nicht, sorry.
@@ -618,9 +570,6 @@ int eTextPara::renderString(const char *string, int rflags)
        std::copy(uc_shape.begin(), uc_shape.end(), array);
        fribidi_log2vis(array, size, &dir, target, 0, 0, 0);
        uc_visual.assign(target, target+size);
-#else
-       uc_visual=uc_shape;
-#endif
 
        glyphs.reserve(size);
        
@@ -714,13 +663,11 @@ nprint:   isprintable=0;
        }
        bboxValid=false;
        calc_bbox();
-#ifdef HAVE_FRIBIDI
        if (dir & FRIBIDI_MASK_RTL)
        {
                realign(dirRight);
                doTopBottomReordering=true;
        }
-#endif
 
        if (charCount)
        {
@@ -739,7 +686,6 @@ void eTextPara::blit(gDC &dc, const ePoint &offset, const gRGB &background, cons
        if (!current_font)
                return;
 
-#ifdef HAVE_FREETYPE2
        if ((FTC_Manager_LookupFace(fontRenderClass::instance->cacheManager,
                                    current_font->scaler.face_id,
                                    &current_face) < 0) ||
@@ -750,17 +696,6 @@ void eTextPara::blit(gDC &dc, const ePoint &offset, const gRGB &background, cons
                eDebug("FTC_Manager_Lookup_Size failed!");
                return;
        }
-#else
-       if (&current_font->font.font != cache_current_font)
-       {
-               if (FTC_Manager_Lookup_Size(fontRenderClass::instance->cacheManager, &current_font->font.font, &current_face, &current_font->size)<0)
-               {
-                       eDebug("FTC_Manager_Lookup_Size failed!");
-                       return;
-               }
-               cache_current_font=&current_font->font.font;
-       }
-#endif
 
        ePtr<gPixmap> target;
        dc.getPixmap(target);
index 7dd9f89..6b82183 100644 (file)
@@ -8,11 +8,9 @@
 #include FT_CACHE_H
 #include FT_CACHE_IMAGE_H
 #include FT_CACHE_SMALL_BITMAPS_H
-#ifdef HAVE_FREETYPE2
 typedef FTC_ImageCache FTC_Image_Cache;
 typedef FTC_ImageTypeRec FTC_Image_Desc;
 typedef FTC_SBitCache FTC_SBit_Cache;
-#endif
 #include <vector>
 #include <list>
 
@@ -191,9 +189,7 @@ class Font: public iObject
 {
        DECLARE_REF(Font);
 public:
-#ifdef HAVE_FREETYPE2
        FTC_ScalerRec scaler;
-#endif
        FTC_Image_Desc font;
        fontRenderClass *renderer;
        FT_Error getGlyphBitmap(FT_ULong glyph_index, FTC_SBit *sbit);
index 80dd247..a4f65eb 100644 (file)
@@ -7,18 +7,8 @@
 
 #include <time.h>
 
-gFBDC *gFBDC::instance;
-
-ePtr<gFBDC> NewgFBDCPtr(void)
-{
-       ePtr<gFBDC> ptr;
-       gFBDC::getInstance(ptr);
-       return ptr;
-}
-
 gFBDC::gFBDC()
 {
-       instance=this;
        fb=new fbClass;
 
        if (!fb->Available())
@@ -34,7 +24,6 @@ gFBDC::~gFBDC()
 {
        delete fb;
        delete[] surface.clut.data;
-       instance=0;
 }
 
 void gFBDC::calcRamp()
@@ -91,7 +80,7 @@ void gFBDC::setPalette()
        fb->PutCMAP();
 }
 
-void gFBDC::exec(gOpcode *o)
+void gFBDC::exec(const gOpcode *o)
 {
        switch (o->opcode)
        {
@@ -242,7 +231,4 @@ void gFBDC::reloadSettings()
        setPalette();
 }
 
-// eAutoInitPtr<gFBDC> init_gFBDC(eAutoInitNumbers::graphic-1, "GFBDC");
-#ifndef WITH_SDL
 eAutoInitPtr<gFBDC> init_gFBDC(eAutoInitNumbers::graphic-1, "GFBDC");
-#endif
index 23051c4..7f76d0c 100644 (file)
@@ -3,17 +3,12 @@
 
 #include "fb.h"
 #include "gpixmap.h"
-#include "grc.h"
+#include "gmaindc.h"
 
-class gFBDC;
-
-SWIG_IGNORE(gFBDC);
-class gFBDC: public gDC
+class gFBDC: public gMainDC
 {
-#ifndef SWIG
        fbClass *fb;
-       static gFBDC *instance;
-       void exec(gOpcode *opcode);
+       void exec(const gOpcode *opcode);
        unsigned char ramp[256], rampalpha[256]; // RGB ramp 0..255
        int brightness, gamma, alpha;
        void calcRamp();
@@ -21,13 +16,8 @@ class gFBDC: public gDC
        gSurface surface, surface_back;
        int m_enable_double_buffering;
        int m_xres, m_yres;
-#else
-       gFBDC();
-       virtual ~gFBDC();
-#endif
 public:
        void setResolution(int xres, int yres);
-#ifndef SWIG
        void reloadSettings();
        void setAlpha(int alpha);
        void setBrightness(int brightness);
@@ -43,17 +33,7 @@ public:
 
        gFBDC();
        virtual ~gFBDC();
-       static int getInstance(ePtr<gFBDC> &ptr) { if (!instance) return -1; ptr = instance; return 0; }
        int islocked() { return fb->islocked(); }
-#endif
 };
-SWIG_TEMPLATE_TYPEDEF(ePtr<gFBDC>, gFBDC);
-SWIG_EXTEND(ePtr<gFBDC>,
-       static ePtr<gFBDC> getInstance()
-       {
-               extern ePtr<gFBDC> NewgFBDCPtr(void);
-               return NewgFBDCPtr();
-       }
-);
 
 #endif
index a593cfa..bade53b 100644 (file)
@@ -30,7 +30,7 @@ gLCDDC::~gLCDDC()
        instance=0;
 }
 
-void gLCDDC::exec(gOpcode *o)
+void gLCDDC::exec(const gOpcode *o)
 {
        switch (o->opcode)
        {
index 6d5f383..a2b3c7f 100644 (file)
@@ -9,7 +9,7 @@ class gLCDDC: public gDC
        eLCD *lcd;
        static gLCDDC *instance;
        int update;
-       void exec(gOpcode *opcode);
+       void exec(const gOpcode *opcode);
        gSurface surface;
 public:
        gLCDDC();
diff --git a/lib/gdi/gmaindc.cpp b/lib/gdi/gmaindc.cpp
new file mode 100644 (file)
index 0000000..4890027
--- /dev/null
@@ -0,0 +1,28 @@
+#include <lib/gdi/gmaindc.h>
+
+gMainDC *gMainDC::m_instance;
+
+ePtr<gMainDC> NewgMainDCPtr(void)
+{
+       ePtr<gMainDC> ptr;
+       gMainDC::getInstance(ptr);
+       return ptr;
+}
+
+gMainDC::gMainDC()
+{
+       ASSERT(m_instance == 0);
+       m_instance = this;
+}
+
+gMainDC::gMainDC(gPixmap *pixmap) : gDC(pixmap)
+{
+       ASSERT(m_instance == 0);
+       m_instance = this;
+}
+
+gMainDC::~gMainDC()
+{
+       m_instance = 0;
+}
+
diff --git a/lib/gdi/gmaindc.h b/lib/gdi/gmaindc.h
new file mode 100644 (file)
index 0000000..780be2e
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef __lib_gdi_gmaindc_h
+#define __lib_gdi_gmaindc_h
+
+#include "grc.h"
+
+class gMainDC;
+
+SWIG_IGNORE(gMainDC);
+class gMainDC: public gDC
+{
+protected:
+       static gMainDC *m_instance;
+
+       gMainDC();
+       gMainDC(gPixmap *pixmap);
+       virtual ~gMainDC();
+public:
+       virtual void setResolution(int xres, int yres) = 0;
+#ifndef SWIG
+       static int getInstance(ePtr<gMainDC> &ptr) { if (!m_instance) return -1; ptr = m_instance; return 0; }
+#endif
+};
+
+SWIG_TEMPLATE_TYPEDEF(ePtr<gMainDC>, gMainDC);
+SWIG_EXTEND(ePtr<gMainDC>,
+       static ePtr<gMainDC> getInstance()
+       {
+               extern ePtr<gMainDC> NewgMainDCPtr(void);
+               return NewgMainDCPtr();
+       }
+);
+
+#endif
index dff6b05..a45b3b1 100644 (file)
@@ -609,7 +609,7 @@ gDC::~gDC()
        delete[] m_spinner_pic;
 }
 
-void gDC::exec(gOpcode *o)
+void gDC::exec(const gOpcode *o)
 {
        switch (o->opcode)
        {
index 3b8201a..38caa10 100644 (file)
@@ -286,7 +286,7 @@ protected:
        eRect m_spinner_pos;
        int m_spinner_num, m_spinner_i;
 public:
-       virtual void exec(gOpcode *opcode);
+       virtual void exec(const gOpcode *opcode);
        gDC(gPixmap *pixmap);
        gDC();
        virtual ~gDC();
@@ -296,10 +296,10 @@ public:
        virtual eSize size() { return m_pixmap->size(); }
        virtual int islocked() { return 0; }
        
-       void enableSpinner();
-       void disableSpinner();
-       void incrementSpinner();
-       void setSpinner(eRect pos, ePtr<gPixmap> *pic, int len);
+       virtual void enableSpinner();
+       virtual void disableSpinner();
+       virtual void incrementSpinner();
+       virtual void setSpinner(eRect pos, ePtr<gPixmap> *pic, int len);
 };
 
 #endif
index a7dc22d..518ee1b 100644 (file)
@@ -4,8 +4,12 @@
 #include <fcntl.h>
 #include <sys/ioctl.h>
 
+#if defined(HAVE_DBOX_FP_H) && defined(HAVE_DBOX_LCD_KS0713_H)
 #include <dbox/fp.h>
 #include <dbox/lcd-ks0713.h>
+#else
+#define NO_LCD 1
+#endif
 
 #include <lib/gdi/esize.h>
 #include <lib/base/init.h>
@@ -70,10 +74,6 @@ eDBoxLCD::eDBoxLCD()
                eDebug("found OLED display!");
                is_oled = 1;
        }
-#else
-       lcdfd = -1;
-#endif
-       instance=this;
 
        if (lcdfd<0)
                eDebug("couldn't open LCD - load lcd.o!");
@@ -106,6 +106,9 @@ eDBoxLCD::eDBoxLCD()
                        is_oled = 3;
                }
        }
+#endif
+       instance=this;
+
        setSize(xres, yres, bpp);
 }
 
@@ -117,6 +120,7 @@ void eDBoxLCD::setInverted(unsigned char inv)
 
 int eDBoxLCD::setLCDContrast(int contrast)
 {
+#ifndef NO_LCD
        int fp;
        if((fp=open("/dev/dbox/fp0", O_RDWR))<=0)
        {
@@ -129,11 +133,13 @@ int eDBoxLCD::setLCDContrast(int contrast)
                eDebug("[LCD] can't set lcd contrast");
        }
        close(fp);
+#endif
        return(0);
 }
 
 int eDBoxLCD::setLCDBrightness(int brightness)
 {
+#ifndef NO_LCD
        eDebug("setLCDBrightness %d", brightness);
        FILE *f=fopen("/proc/stb/lcd/oled_brightness", "w");
        if (!f)
@@ -157,6 +163,7 @@ int eDBoxLCD::setLCDBrightness(int brightness)
                        eDebug("[LCD] can't set lcd brightness (%m)");
                close(fp);
        }
+#endif
        return(0);
 }
 
index f9e8055..1eacc29 100644 (file)
@@ -90,9 +90,9 @@ void Cexif::ClearExif()
 
 bool Cexif::DecodeExif(const char *filename, int Thumb)
 {
+       bool ret = false;
        FILE * hFile = fopen(filename, "r");
-       if(!hFile) return false;
-
+       if(!hFile) return ret;
 
        m_exifinfo = new EXIFINFO;
        memset(m_exifinfo,0,sizeof(EXIFINFO));
@@ -107,7 +107,8 @@ bool Cexif::DecodeExif(const char *filename, int Thumb)
        int a = fgetc(hFile);
        strcpy(m_szLastError,"EXIF-Data not found");
 
-       if (a != 0xff || fgetc(hFile) != M_SOI) return false;
+       if (a != 0xff || fgetc(hFile) != M_SOI)
+               goto decode_exif_out_false;
 
        for(;;)
        {
@@ -117,7 +118,8 @@ bool Cexif::DecodeExif(const char *filename, int Thumb)
 
                if (SectionsRead >= MAX_SECTIONS)
                {
-                       strcpy(m_szLastError,"Too many sections in jpg file"); return false;
+                       strcpy(m_szLastError,"Too many sections in jpg file");
+                       goto decode_exif_out_false;
                }
 
                for (a=0;a<7;a++)
@@ -127,13 +129,15 @@ bool Cexif::DecodeExif(const char *filename, int Thumb)
 
                        if (a >= 6)
                        {
-                               strcpy(m_szLastError,"too many padding unsigned chars\n"); return false;
+                               strcpy(m_szLastError,"too many padding unsigned chars\n");
+                               goto decode_exif_out_false;
                        }
                }
 
                if (marker == 0xff)
                {
-                       strcpy(m_szLastError,"too many padding unsigned chars!"); return false;
+                       strcpy(m_szLastError,"too many padding unsigned chars!");
+                       goto decode_exif_out_false;
                }
 
                Sections[SectionsRead].Type = marker;
@@ -145,14 +149,16 @@ bool Cexif::DecodeExif(const char *filename, int Thumb)
 
                if (itemlen < 2)
                {
-                       strcpy(m_szLastError,"invalid marker"); return false;
+                       strcpy(m_szLastError,"invalid marker");
+                       goto decode_exif_out_false;
                }
                Sections[SectionsRead].Size = itemlen;
 
                Data = (unsigned char *)malloc(itemlen);
                if (Data == NULL)
                {
-                       strcpy(m_szLastError,"Could not allocate memory"); return false;
+                       strcpy(m_szLastError,"Could not allocate memory");
+                       goto decode_exif_out_false;
                }
                Sections[SectionsRead].Data = Data;
 
@@ -163,17 +169,18 @@ bool Cexif::DecodeExif(const char *filename, int Thumb)
                got = fread(Data+2, 1, itemlen-2,hFile);
                if (got != itemlen-2)
                {
-                       strcpy(m_szLastError,"Premature end of file?"); return false;
+                       strcpy(m_szLastError,"Premature end of file?");
+                       goto decode_exif_out_false;
                }
                SectionsRead += 1;
 
                switch(marker)
                {
                case M_SOS:
-                       return true;
+                       goto decode_exif_out_true;
                case M_EOI:
                        printf("No image in jpeg!\n");
-                       return false;
+                       goto decode_exif_out_false;
                case M_COM:
                        if (HaveCom)
                        {
@@ -221,8 +228,12 @@ bool Cexif::DecodeExif(const char *filename, int Thumb)
                }
        }
 
+decode_exif_out_true:
+       ret = true;
+
+decode_exif_out_false:
        fclose(hFile);
-       return true;
+       return ret;
 }
 
 bool Cexif::process_EXIF(unsigned char * CharBuf, unsigned int length)
@@ -428,7 +439,7 @@ bool Cexif::ProcessExifDir(unsigned char * DirStart, unsigned char * OffsetBase,
                        case 6:         strcpy(m_exifinfo->Orientation,"Right-Top"); break;
                        case 7:         strcpy(m_exifinfo->Orientation,"Right-Bottom"); break;
                        case 8:         strcpy(m_exifinfo->Orientation,"Left-Bottom"); break;
-                       default:        strcpy(m_exifinfo->Orientation,"Undefined rotation value");
+                       default:        strcpy(m_exifinfo->Orientation,"Undefined"); break;
                        }
                        break;
                case TAG_EXIF_IMAGELENGTH:
index c162f89..0ce10c0 100644 (file)
@@ -1,4 +1,5 @@
-#include <png.h>       // must be included before Python.h because of setjmp
+#define PNG_SKIP_SETJMP_CHECK
+#include <png.h>
 #include <fcntl.h>
 
 #include <lib/gdi/picload.h>
index 6dbdb67..eb4e2ae 100644 (file)
@@ -1,80 +1,83 @@
-#ifdef WITH_SDL
 #include <lib/gdi/sdl.h>
-
+#include <lib/actions/action.h>
 #include <lib/base/init.h>
 #include <lib/base/init_num.h>
+#include <lib/driver/input_fake.h>
+#include <lib/driver/rcsdl.h>
 
 #include <SDL.h>
 
-gSDLDC *gSDLDC::m_instance;
-
-gSDLDC::gSDLDC()
+gSDLDC::gSDLDC() : m_pump(eApp, 1)
 {
-       if (SDL_Init(SDL_INIT_VIDEO) < 0)
-       {
+       if (SDL_Init(SDL_INIT_VIDEO) < 0) {
                eWarning("Could not initialize SDL: %s", SDL_GetError());
                return;
        }
-       
-       m_screen = SDL_SetVideoMode(720, 576, 32, SDL_HWSURFACE);
-       if (!m_screen)
-       {
-               eWarning("Could not create SDL surface: %s", SDL_GetError());
-               return;
-       }
 
-       m_instance=this;
-       
+       setResolution(720, 576);
+
+       CONNECT(m_pump.recv_msg, gSDLDC::pumpEvent);
+
        m_surface.type = 0;
-       m_surface.x = m_screen->w;
-       m_surface.y = m_screen->h;
-       m_surface.bpp = m_screen->format->BitsPerPixel;
-       m_surface.bypp = m_screen->format->BytesPerPixel;
-       m_surface.stride = m_screen->pitch;
-       m_surface.data = m_screen->pixels;
-       m_surface.clut.colors=256;
-       m_surface.clut.data=new gRGB[m_surface.clut.colors];
-       
+       m_surface.clut.colors = 256;
+       m_surface.clut.data = new gRGB[m_surface.clut.colors];
+
        m_pixmap = new gPixmap(&m_surface);
-       
+
        memset(m_surface.clut.data, 0, sizeof(*m_surface.clut.data)*m_surface.clut.colors);
+
+       run();
 }
 
 gSDLDC::~gSDLDC()
 {
+       pushEvent(EV_QUIT);
+       kill();
        SDL_Quit();
-       m_instance=0;
 }
 
-void gSDLDC::setPalette()
+void gSDLDC::keyEvent(const SDL_Event &event)
 {
-       if (!m_surface.clut.data)
-               return;
-       
-/*     for (int i=0; i<256; ++i)
-       {
-               fb->CMAP()->red[i]=ramp[m_surface.clut.data[i].r]<<8;
-               fb->CMAP()->green[i]=ramp[m_surface.clut.data[i].g]<<8;
-               fb->CMAP()->blue[i]=ramp[m_surface.clut.data[i].b]<<8;
-               fb->CMAP()->transp[i]=rampalpha[m_surface.clut.data[i].a]<<8;
-               if (!fb->CMAP()->red[i])
-                       fb->CMAP()->red[i]=0x100;
-       }
-       fb->PutCMAP(); */
+       eSDLInputDriver *driver = eSDLInputDriver::getInstance();
+
+       eDebug("SDL Key %s: key=%d", (event.type == SDL_KEYDOWN) ? "Down" : "Up", event.key.keysym.sym);
+
+       if (driver)
+               driver->keyPressed(&event.key);
 }
 
-void gSDLDC::exec(gOpcode *o)
+void gSDLDC::pumpEvent(const SDL_Event &event)
 {
-       switch (o->opcode)
-       {
-       case gOpcode::setPalette:
-       {
-               gDC::exec(o);
-               setPalette();
+       switch (event.type) {
+       case SDL_KEYDOWN:
+       case SDL_KEYUP:
+               keyEvent(event);
+               break;
+       case SDL_QUIT:
+               eDebug("SDL Quit");
+               extern void quitMainloop(int exit_code);
+               quitMainloop(0);
                break;
        }
+}
+
+void gSDLDC::pushEvent(enum event code, void *data1, void *data2)
+{
+       SDL_Event event;
+
+       event.type = SDL_USEREVENT;
+       event.user.code = code;
+       event.user.data1 = data1;
+       event.user.data2 = data2;
+
+       SDL_PushEvent(&event);
+}
+
+void gSDLDC::exec(const gOpcode *o)
+{
+       switch (o->opcode) {
        case gOpcode::flush:
-               SDL_Flip(m_screen);
+               pushEvent(EV_FLIP);
                eDebug("FLUSH");
                break;
        default:
@@ -83,6 +86,68 @@ void gSDLDC::exec(gOpcode *o)
        }
 }
 
-eAutoInitPtr<gSDLDC> init_gSDLDC(eAutoInitNumbers::graphic-1, "gSDLDC");
+void gSDLDC::setResolution(int xres, int yres)
+{
+       pushEvent(EV_SET_VIDEO_MODE, (void *)xres, (void *)yres);
+}
+
+/*
+ * SDL thread below...
+ */
+
+void gSDLDC::evSetVideoMode(unsigned long xres, unsigned long yres)
+{
+       m_screen = SDL_SetVideoMode(xres, yres, 32, SDL_HWSURFACE);
+       if (!m_screen) {
+               eFatal("Could not create SDL surface: %s", SDL_GetError());
+               return;
+       }
 
-#endif
+       m_surface.x = m_screen->w;
+       m_surface.y = m_screen->h;
+       m_surface.bpp = m_screen->format->BitsPerPixel;
+       m_surface.bypp = m_screen->format->BytesPerPixel;
+       m_surface.stride = m_screen->pitch;
+       m_surface.data = m_screen->pixels;
+
+       SDL_EnableUNICODE(1);
+}
+
+void gSDLDC::evFlip()
+{
+       SDL_Flip(m_screen);
+}
+
+void gSDLDC::thread()
+{
+       hasStarted();
+
+       bool stop = false;
+       while (!stop) {
+               SDL_Event event;
+               if (SDL_WaitEvent(&event)) {
+                       switch (event.type) {
+                       case SDL_KEYDOWN:
+                       case SDL_KEYUP:
+                       case SDL_QUIT:
+                               m_pump.send(event);
+                               break;
+                       case SDL_USEREVENT:
+                               switch (event.user.code) {
+                               case EV_SET_VIDEO_MODE:
+                                       evSetVideoMode((unsigned long)event.user.data1, (unsigned long)event.user.data2);
+                                       break;
+                               case EV_FLIP:
+                                       evFlip();
+                                       break;
+                               case EV_QUIT:
+                                       stop = true;
+                                       break;
+                               }
+                               break;
+                       }
+               }
+       }
+}
+
+eAutoInitPtr<gSDLDC> init_gSDLDC(eAutoInitNumbers::graphic-1, "gSDLDC");
index 20ff04f..6d016cf 100644 (file)
@@ -1,27 +1,39 @@
 #ifndef __lib_gdi_sdl_h
 #define __lib_gdi_sdl_h
 
-#include "fb.h"
-#include "gpixmap.h"
-#include "grc.h"
+#include <lib/base/thread.h>
+#include <lib/gdi/gmaindc.h>
 
 #include <SDL.h>
 
-class gSDLDC: public gDC
+class gSDLDC: public gMainDC, public eThread, public Object
 {
+private:
        SDL_Surface *m_screen;
-       static gSDLDC *m_instance;
-       void exec(gOpcode *opcode);
+       void exec(const gOpcode *opcode);
 
-       void setPalette();
        gSurface m_surface;
+
+       eFixedMessagePump<SDL_Event> m_pump;
+       void keyEvent(const SDL_Event &event);
+       void pumpEvent(const SDL_Event &event);
+       virtual void thread();
+
+       enum event {
+               EV_SET_VIDEO_MODE,
+               EV_FLIP,
+               EV_QUIT,
+       };
+
+       void pushEvent(enum event code, void *data1 = 0, void *data2 = 0);
+       void evSetVideoMode(unsigned long xres, unsigned long yres);
+       void evFlip();
+
 public:
-       
+       void setResolution(int xres, int yres);
        gSDLDC();
        virtual ~gSDLDC();
-       static int getInstance(ePtr<gSDLDC> &ptr) { if (!m_instance) return -1; ptr = m_instance; return 0; }
        int islocked() { return 0; }
 };
 
-
 #endif
index f4de9d1..9d31bf7 100644 (file)
@@ -1,11 +1,50 @@
-INCLUDES = \
+AM_CPPFLAGS = \
+       -I$(top_srcdir) \
        -I$(top_srcdir)/include \
-       -I$(top_srcdir)/src
+       -include Python.h \
+       -include $(top_builddir)/enigma2_config.h
 
 noinst_LIBRARIES = libenigma_gui.a
 
 libenigma_gui_a_SOURCES = \
-       ebutton.cpp elabel.cpp eslider.cpp ewidget.cpp ewidgetdesktop.cpp  \
-       ewindow.cpp ewindowstyle.cpp elistbox.cpp elistboxcontent.cpp \
-       epixmap.cpp ewindowstyleskinned.cpp einput.cpp einputstring.cpp einputnumber.cpp \
-       ewidgetanimation.cpp epositiongauge.cpp evideo.cpp esubtitle.cpp ecanvas.cpp
+       ebutton.cpp \
+       ecanvas.cpp \
+       einput.cpp \
+       einputnumber.cpp \
+       einputstring.cpp \
+       elabel.cpp \
+       elistbox.cpp \
+       elistboxcontent.cpp \
+       epixmap.cpp \
+       epositiongauge.cpp \
+       eslider.cpp \
+       esubtitle.cpp \
+       evideo.cpp \
+       ewidget.cpp \
+       ewidgetanimation.cpp \
+       ewidgetdesktop.cpp \
+       ewindow.cpp \
+       ewindowstyle.cpp \
+       ewindowstyleskinned.cpp
+
+guiincludedir = $(pkgincludedir)/lib/gui
+guiinclude_HEADERS = \
+       ebutton.h \
+       ecanvas.h \
+       einput.h \
+       einputnumber.h \
+       einputstring.h \
+       elabel.h \
+       elistbox.h \
+       elistboxcontent.h \
+       epixmap.h \
+       epositiongauge.h \
+       eslider.h \
+       esubtitle.h \
+       evideo.h \
+       ewidget.h \
+       ewidgetanimation.h \
+       ewidgetdesktop.h \
+       ewindow.h \
+       ewindowstyle.h \
+       ewindowstyleskinned.h
index 43fbc59..ba0794e 100644 (file)
@@ -501,6 +501,7 @@ eListboxPythonMultiContent::~eListboxPythonMultiContent()
 {
        Py_XDECREF(m_buildFunc);
        Py_XDECREF(m_selectableFunc);
+       Py_XDECREF(m_template);
 }
 
 void eListboxPythonMultiContent::setSelectionClip(eRect &rect, bool update)
@@ -640,7 +641,8 @@ static ePyObject lookupColor(ePyObject color, ePyObject data)
        if ((icolor & 0xFF000000) == 0xFF000000)
        {
                int index = icolor & 0xFFFFFF;
-               eDebug("[eListboxPythonMultiContent] template color index: %d", index);
+               if (PyTuple_GetItem(data, index) == Py_None)
+                       return ePyObject();
                return PyTuple_GetItem(data, index);
        }
 
@@ -967,6 +969,9 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
                                if (ppixmap)
                                {
                                        ePtr<gPixmap> pixmap;
+                                       if (PyInt_Check(ppixmap) && data) /* if the pixmap is in fact a number, it refers to the data list */
+                                               ppixmap = PyTuple_GetItem(data, PyInt_AsLong(ppixmap));
+
                                        if (SwigFromPython(pixmap, ppixmap))
                                        {
                                                eDebug("eListboxPythonMultiContent (Pixmap) get pixmap failed");
@@ -1155,5 +1160,7 @@ void eListboxPythonMultiContent::entryRemoved(int idx)
 
 void eListboxPythonMultiContent::setTemplate(ePyObject tmplate)
 {
+       Py_XDECREF(m_template);
        m_template = tmplate;
+       Py_XINCREF(m_template);
 }
index ff98c08..e45d4a6 100644 (file)
@@ -112,6 +112,7 @@ int ePositionGauge::event(int event, void *data, void *data2)
 //             painter.fill(eRect(0, 10, s.width(), s.height()-20));
                
                pts_t in = 0, out = 0;
+               int xm, xm_last = -1;
                
                std::multiset<cueEntry>::iterator i(m_cue_entries.begin());
                
@@ -126,17 +127,22 @@ int ePositionGauge::event(int event, void *data, void *data2)
                                        continue;
                                } else if (i->what == 1) /* out */
                                        out = i++->where;
-                               else if (i->what == 2) /* mark */
+                               else /* mark or last */
                                {
-                                       int xm = scale(i->where);
-                                       painter.setForegroundColor(gRGB(0xFF8080));
-                                       painter.fill(eRect(xm - 2, 0, 4, s.height()));
+                                       xm = scale(i->where);
+                                       if (i->what == 2) {
+                                               painter.setForegroundColor(gRGB(0xFF8080));
+                                               if (xm - 2 < xm_last) /* Make sure last is not overdrawn */
+                                                       painter.fill(eRect(xm_last, 0, 2 + xm - xm_last, s.height()));
+                                               else
+                                                       painter.fill(eRect(xm - 2, 0, 4, s.height()));
+                                       } else if (i->what == 3) {
+                                               painter.setForegroundColor(gRGB(0x80FF80));
+                                               painter.fill(eRect(xm - 1, 0, 3, s.height()));
+                                               xm_last = xm + 2;
+                                       }
                                        i++;
                                        continue;
-                               } else /* other marker, like last position */
-                               {
-                                       ++i;
-                                       continue;
                                }
                        }
                        
index 45345db..cdad728 100644 (file)
@@ -23,15 +23,21 @@ struct ePangoSubtitlePageElement
 
 struct ePangoSubtitlePage
 {
-       pts_t show_pts;
+       pts_t m_show_pts;
        int m_timeout; /* in milliseconds */
        std::vector<ePangoSubtitlePageElement> m_elements;
        void clear() { m_elements.clear(); }
 };
 
+struct eVobSubtitlePage
+{
+       pts_t m_show_pts;
+       int m_timeout; /* in milliseconds */
+       ePtr<gPixmap> m_pixmap;
+};
+
 class eDVBTeletextSubtitlePage;
-class eDVBPangoSubtitlePage;
-class ePangoSubtitlePage;
+class eDVBSubtitlePage;
 
 class eSubtitleWidget: public eWidget, public Object
 {
index 98bc1f7..08bd047 100644 (file)
@@ -381,7 +381,10 @@ void eWidgetDesktop::makeCompatiblePixmap(gPixmap &pm)
        ePtr<gPixmap> target_pixmap;
        m_screen.m_dc->getPixmap(target_pixmap);
        
-       ASSERT(target_pixmap);
+       if (!target_pixmap) {
+               eDebug("no target pixmap! assuming bpp > 8 for accelerated graphics.");
+               return;
+       }
        
        if (target_pixmap->surface && target_pixmap->surface->bpp > 8)
                return;
index 68a74e0..0ecdc2a 100644 (file)
@@ -28,7 +28,9 @@ eWindowStyleManager::~eWindowStyleManager()
 
 void eWindowStyleManager::getStyle(int style_id, ePtr<eWindowStyle> &style)
 {
-       style = m_current_style[style_id];
+       std::map<int, ePtr<eWindowStyle> >::iterator it = m_current_style.find(style_id);
+       ASSERT(it != m_current_style.end());
+       style = it->second;
 }
 
 void eWindowStyleManager::setStyle(int style_id, eWindowStyle *style)
index 020c988..392c52c 100644 (file)
@@ -1,6 +1,14 @@
-INCLUDES = \
-       -I$(top_srcdir)/include
+AM_CPPFLAGS = \
+       -I$(top_srcdir) \
+       -I$(top_srcdir)/include \
+       -include Python.h \
+       -include $(top_builddir)/enigma2_config.h
 
 noinst_LIBRARIES = libenigma_mmi.a
 
-libenigma_mmi_a_SOURCES = mmi_ui.cpp
+libenigma_mmi_a_SOURCES = \
+       mmi_ui.cpp
+
+mmiincludedir = $(pkgincludedir)/lib/mmi
+mmiinclude_HEADERS = \
+       mmi_ui.h
index 0320cb2..3d57d6a 100644 (file)
@@ -1,9 +1,16 @@
-INCLUDES = \
-       -I$(top_srcdir)/include
+AM_CPPFLAGS = \
+       -I$(top_srcdir) \
+       -I$(top_srcdir)/include \
+       -include Python.h \
+       -include $(top_builddir)/enigma2_config.h
 
 noinst_LIBRARIES = libenigma_nav.a
 
 libenigma_nav_a_SOURCES = \
-       core.cpp pcore.cpp
-
+       core.cpp \
+       pcore.cpp
 
+navincludedir = $(pkgincludedir)/lib/nav
+navinclude_HEADERS = \
+       core.h \
+       pcore.h
diff --git a/lib/python/.gitignore b/lib/python/.gitignore
new file mode 100644 (file)
index 0000000..c1fa59f
--- /dev/null
@@ -0,0 +1,2 @@
+enigma.py
+enigma_python.cpp
index 3b6fd3e..b73f6d5 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 SensorToText.py
+       Combine.py SensorToText.py ValueToPixmap.py
diff --git a/lib/python/Components/Converter/ValueToPixmap.py b/lib/python/Components/Converter/ValueToPixmap.py
new file mode 100644 (file)
index 0000000..0acd263
--- /dev/null
@@ -0,0 +1,40 @@
+from Components.Converter.Converter import Converter
+from Components.Element import cached, ElementError
+from Tools.Directories import fileExists, SCOPE_SKIN_IMAGE, SCOPE_CURRENT_SKIN, resolveFilename
+from Tools.LoadPixmap import LoadPixmap
+
+
+class ValueToPixmap(Converter, object):
+       LANGUAGE_CODE = 0
+       PATH = 1
+       
+       def __init__(self, type):
+               Converter.__init__(self, type)
+               if type == "LanguageCode":
+                       self.type = self.LANGUAGE_CODE
+               elif type == "Path":
+                       self.type = self.PATH
+               else:
+                       raise ElementError("'%s' is not <LanguageCode|Path> for ValueToPixmap converter" % type)
+
+       @cached
+       def getPixmap(self):
+               if self.source:
+                       val = self.source.text
+                       if val in (None, ""):
+                               return None
+               if self.type == self.PATH:
+                       return LoadPixmap(val)
+               if self.type == self.LANGUAGE_CODE:
+                       png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "countries/" + val[3:].lower() + ".png"))
+                       if png == None:
+                               png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "countries/missing.png"))
+                       return png
+               return None                     
+       
+       pixmap = property(getPixmap)
+
+       def changed(self, what):
+               if what[0] != self.CHANGED_SPECIFIC or what[1] == self.type:
+                       Converter.changed(self, what)
+
index 03d5215..8097365 100755 (executable)
@@ -84,6 +84,8 @@ class InfoHandler(xml.sax.ContentHandler):
                                self.attributes["packagename"] = str(attrs["packagename"])
                        if attrs.has_key("packagetype"):
                                self.attributes["packagetype"] = str(attrs["packagetype"])
+                       if attrs.has_key("needsRestart"):
+                               self.attributes["needsRestart"] = str(attrs["needsRestart"])
                        if attrs.has_key("shortdescription"):
                                self.attributes["shortdescription"] = str(attrs["shortdescription"])
 
@@ -120,6 +122,8 @@ class InfoHandler(xml.sax.ContentHandler):
                        self.attributes["name"] = str(data)
                if self.elements[-1] == "packagename":
                        self.attributes["packagename"] = str(data)
+               if self.elements[-1] == "needsRestart":
+                       self.attributes["needsRestart"] = str(data)
                if self.elements[-1] == "shortdescription":
                        self.attributes["shortdescription"] = str(data)
                if self.elements[-1] == "description":
@@ -397,7 +401,7 @@ class DreamInfoHandler:
                
        def installIPK(self, directory, name):
                if self.blocking:
-                       os.system("ipkg install " + directory + name)
+                       os.system("opkg install " + directory + name)
                        self.installNext()
                else:
                        self.ipkg = IpkgComponent()
index 1d71514..1b7e81f 100755 (executable)
@@ -28,7 +28,8 @@ EXTENSIONS = {
                "mpeg": "movie",
                "mkv": "movie",
                "mp4": "movie",
-               "mov": "movie"
+               "mov": "movie",
+               "m2ts": "movie",
        }
 
 def FileEntryComponent(name, absolute = None, isDir = False):
old mode 100755 (executable)
new mode 100644 (file)
index e8e612a..30a7b60
@@ -5,23 +5,27 @@ from SystemInfo import SystemInfo
 import time
 from Components.Console import Console
 
+def MajorMinor(path):
+       rdev = stat(path).st_rdev
+       return (major(rdev),minor(rdev))
+
 def readFile(filename):
        file = open(filename)
        data = file.read().strip()
        file.close()
        return data
 
-class Harddisk:
-       DEVTYPE_UDEV = 0
-       DEVTYPE_DEVFS = 1
+DEVTYPE_UDEV = 0
+DEVTYPE_DEVFS = 1
 
+class Harddisk:
        def __init__(self, device):
                self.device = device
 
                if access("/dev/.udev", 0):
-                       self.type = self.DEVTYPE_UDEV
+                       self.type = DEVTYPE_UDEV
                elif access("/dev/.devfsd", 0):
-                       self.type = self.DEVTYPE_DEVFS
+                       self.type = DEVTYPE_DEVFS
                else:
                        print "Unable to determine structure of /dev"
 
@@ -33,11 +37,11 @@ class Harddisk:
                self.disk_path = ''
                self.phys_path = path.realpath(self.sysfsPath('device'))
 
-               if self.type == self.DEVTYPE_UDEV:
+               if self.type == DEVTYPE_UDEV:
                        self.dev_path = '/dev/' + self.device
                        self.disk_path = self.dev_path
 
-               elif self.type == self.DEVTYPE_DEVFS:
+               elif self.type == DEVTYPE_DEVFS:
                        tmp = readFile(self.sysfsPath('dev')).split(':')
                        s_major = int(tmp[0])
                        s_minor = int(tmp[1])
@@ -60,9 +64,9 @@ class Harddisk:
                return self.device < ob.device
 
        def partitionPath(self, n):
-               if self.type == self.DEVTYPE_UDEV:
+               if self.type == DEVTYPE_UDEV:
                        return self.dev_path + n
-               elif self.type == self.DEVTYPE_DEVFS:
+               elif self.type == DEVTYPE_DEVFS:
                        return self.dev_path + '/part' + n
 
        def sysfsPath(self, filename):
@@ -75,9 +79,9 @@ class Harddisk:
 
        def bus(self):
                # CF (7025 specific)
-               if self.type == self.DEVTYPE_UDEV:
+               if self.type == DEVTYPE_UDEV:
                        ide_cf = False  # FIXME
-               elif self.type == self.DEVTYPE_DEVFS:
+               elif self.type == DEVTYPE_DEVFS:
                        ide_cf = self.device[:2] == "hd" and "host0" not in self.dev_path
 
                internal = "pci" in self.phys_path
@@ -125,18 +129,20 @@ class Harddisk:
 
                for line in lines:
                        parts = line.strip().split(" ")
-                       if path.realpath(parts[0]).startswith(self.dev_path):
-                               try:
+                       real_path = path.realpath(parts[0])
+                       if not real_path[-1].isdigit():
+                               continue
+                       try:
+                               if MajorMinor(real_path) == MajorMinor(self.partitionPath(real_path[-1])):
                                        stat = statvfs(parts[1])
-                               except OSError:
-                                       continue
-                               return stat.f_bfree/1000 * stat.f_bsize/1000
-
+                                       return stat.f_bfree/1000 * stat.f_bsize/1000
+                       except OSError:
+                               pass
                return -1
 
        def numPartitions(self):
                numPart = -1
-               if self.type == self.DEVTYPE_UDEV:
+               if self.type == DEVTYPE_UDEV:
                        try:
                                devdir = listdir('/dev')
                        except OSError:
@@ -145,7 +151,7 @@ class Harddisk:
                                if filename.startswith(self.device):
                                        numPart += 1
 
-               elif self.type == self.DEVTYPE_DEVFS:
+               elif self.type == DEVTYPE_DEVFS:
                        try:
                                idedir = listdir(self.dev_path)
                        except OSError:
@@ -168,16 +174,23 @@ class Harddisk:
 
                cmd = "umount"
 
-               for line in lines:
-                       parts = line.strip().split(" ")
-                       if path.realpath(parts[0]).startswith(self.dev_path):
-                               cmd = ' ' . join([cmd, parts[1]])
+                for line in lines:                                                                          
+                        parts = line.strip().split(" ")                                                     
+                        real_path = path.realpath(parts[0])                                                 
+                        if not real_path[-1].isdigit():                                                     
+                                continue                                                                    
+                        try:                                                                                
+                                if MajorMinor(real_path) == MajorMinor(self.partitionPath(real_path[-1])):
+                                       cmd = ' ' . join([cmd, parts[1]])
+                                       break
+                       except OSError:
+                               pass
 
                res = system(cmd)
                return (res >> 8)
 
        def createPartition(self):
-               cmd = 'printf "0,\n;\n;\n;\ny\n" | sfdisk -f ' + self.disk_path
+               cmd = 'printf "8,\n;0,0\n;0,0\n;0,0\ny\n" | sfdisk -f -uS ' + self.disk_path
                res = system(cmd)
                return (res >> 8)
 
@@ -201,10 +214,16 @@ class Harddisk:
                res = -1
                for line in lines:
                        parts = line.strip().split(" ")
-                       if path.realpath(parts[0]) == self.partitionPath("1"):
-                               cmd = "mount -t ext3 " + parts[0]
-                               res = system(cmd)
-                               break
+                        real_path = path.realpath(parts[0])                                                 
+                        if not real_path[-1].isdigit():                                                     
+                                continue                                                                    
+                        try:                                                                                
+                                if MajorMinor(real_path) == MajorMinor(self.partitionPath(real_path[-1])):
+                                       cmd = "mount -t ext3 " + parts[0]
+                                       res = system(cmd)
+                                       break
+                       except OSError:
+                               pass
 
                return (res >> 8)
 
@@ -394,24 +413,38 @@ class Partition:
                                return True
                return False
 
-DEVICEDB =  \
+DEVICEDB_SR = \
        {"dm8000":
                {
-                       # dm8000:
-                       "/devices/platform/brcm-ehci.0/usb1/1-1/1-1.1/1-1.1:1.0": "Front USB Slot",
-                       "/devices/platform/brcm-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0": "Back, upper USB Slot",
-                       "/devices/platform/brcm-ehci.0/usb1/1-1/1-1.3/1-1.3:1.0": "Back, lower USB Slot",
-                       "/devices/platform/brcm-ehci-1.1/usb2/2-1/2-1:1.0/host1/target1:0:0/1:0:0:0": "DVD Drive",
+                       "/devices/pci0000:01/0000:01:00.0/host0/target0:0:0/0:0:0:0": _("DVD Drive"),
+                       "/devices/pci0000:01/0000:01:00.0/host1/target1:0:0/1:0:0:0": _("DVD Drive"),
+                       "/devices/platform/brcm-ehci-1.1/usb2/2-1/2-1:1.0/host3/target3:0:0/3:0:0:0": _("DVD Drive"),
+               },
+       "dm800":
+       {
+       },
+       "dm7025":
+       {
+       }
+       }
+
+DEVICEDB = \
+       {"dm8000":
+               {
+                       "/devices/platform/brcm-ehci.0/usb1/1-1/1-1.1/1-1.1:1.0": _("Front USB Slot"),
+                       "/devices/platform/brcm-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0": _("Back, upper USB Slot"),
+                       "/devices/platform/brcm-ehci.0/usb1/1-1/1-1.3/1-1.3:1.0": _("Back, lower USB Slot"),
+                       "/devices/platform/brcm-ehci.0/usb1/1-1/1-1.1/1-1.1:1.0": _("Front USB Slot"),
+                       "/devices/platform/brcm-ehci-1.1/usb2/2-1/2-1:1.0/": _("Internal USB Slot"),
+                       "/devices/platform/brcm-ohci-1.1/usb4/4-1/4-1:1.0/": _("Internal USB Slot"),
                },
        "dm800":
        {
-               # dm800:
                "/devices/platform/brcm-ehci.0/usb1/1-2/1-2:1.0": "Upper USB Slot",
                "/devices/platform/brcm-ehci.0/usb1/1-1/1-1:1.0": "Lower USB Slot",
        },
        "dm7025":
        {
-               # dm7025:
                "/devices/pci0000:00/0000:00:14.1/ide1/1.0": "CF Card Slot", #hdc
                "/devices/pci0000:00/0000:00:14.1/ide0/0.0": "Internal Harddisk"
        }
@@ -422,6 +455,7 @@ class HarddiskManager:
                self.hdd = [ ]
                self.cd = ""
                self.partitions = [ ]
+               self.devices_scanned_on_init = [ ]
 
                self.on_partition_list_change = CList()
 
@@ -489,24 +523,23 @@ class HarddiskManager:
        def enumerateBlockDevices(self):
                print "enumerating block devices..."
                for blockdev in listdir("/sys/block"):
-                       error, blacklisted, removable, is_cdrom, partitions, medium_found = self.getBlockDevInfo(blockdev)
-                       print "found block device '%s':" % blockdev, 
-                       if error:
-                               print "error querying properties"
-                       elif blacklisted:
-                               print "blacklisted"
-                       elif not medium_found:
-                               print "no medium"
-                       else:
-                               print "ok, removable=%s, cdrom=%s, partitions=%s, device=%s" % (removable, is_cdrom, partitions, blockdev)
-
-                               self.addHotplugPartition(blockdev)
-                               for part in partitions:
-                                       self.addHotplugPartition(part)
+                       error, blacklisted, removable, is_cdrom, partitions, medium_found = self.addHotplugPartition(blockdev)
+                       if not error and not blacklisted:
+                               if medium_found:
+                                       for part in partitions:
+                                               self.addHotplugPartition(part)
+                               self.devices_scanned_on_init.append((blockdev, removable, is_cdrom, medium_found))
 
        def getAutofsMountpoint(self, device):
                return "/autofs/%s/" % (device)
 
+       def is_hard_mounted(self, device):
+               mounts = file('/proc/mounts').read().split('\n')
+               for x in mounts:
+                       if x.find('/autofs') == -1 and x.find(device) != -1:
+                               return True
+               return False
+
        def addHotplugPartition(self, device, physdev = None):
                if not physdev:
                        dev, part = self.splitDeviceName(device)
@@ -516,22 +549,36 @@ class HarddiskManager:
                                physdev = dev
                                print "couldn't determine blockdev physdev for device", device
 
-               # device is the device name, without /dev
-               # physdev is the physical device path, which we (might) use to determine the userfriendly name
-               description = self.getUserfriendlyDeviceName(device, physdev)
+               error, blacklisted, removable, is_cdrom, partitions, medium_found = self.getBlockDevInfo(device)
+               print "found block device '%s':" % device,
 
-               p = Partition(mountpoint = self.getAutofsMountpoint(device), description = description, force_mounted = True, device = device)
-               self.partitions.append(p)
-               self.on_partition_list_change("add", p)
+               if blacklisted:
+                       print "blacklisted"
+               else:
+                       if error:
+                               print "error querying properties"
+                       elif not medium_found:
+                               print "no medium"
+                       else:
+                               print "ok, removable=%s, cdrom=%s, partitions=%s" % (removable, is_cdrom, partitions)
+
+                       l = len(device)
+                       if l:
+                               # see if this is a harddrive
+                               if not device[l-1].isdigit() and not removable and not is_cdrom:
+                                       self.hdd.append(Harddisk(device))
+                                       self.hdd.sort()
+                                       SystemInfo["Harddisk"] = len(self.hdd) > 0
+
+                               if (not removable or medium_found) and not self.is_hard_mounted(device):
+                                       # device is the device name, without /dev
+                                       # physdev is the physical device path, which we (might) use to determine the userfriendly name
+                                       description = self.getUserfriendlyDeviceName(device, physdev)
+                                       p = Partition(mountpoint = self.getAutofsMountpoint(device), description = description, force_mounted = True, device = device)
+                                       self.partitions.append(p)
+                                       self.on_partition_list_change("add", p)
 
-               # see if this is a harddrive
-               l = len(device)
-               if l and not device[l-1].isdigit():
-                       error, blacklisted, removable, is_cdrom, partitions, medium_found = self.getBlockDevInfo(device)
-                       if not blacklisted and not removable and not is_cdrom and medium_found:
-                               self.hdd.append(Harddisk(device))
-                               self.hdd.sort()
-                               SystemInfo["Harddisk"] = len(self.hdd) > 0
+               return error, blacklisted, removable, is_cdrom, partitions, medium_found
 
        def removeHotplugPartition(self, device):
                mountpoint = self.getAutofsMountpoint(device)
@@ -589,15 +636,23 @@ class HarddiskManager:
        def getUserfriendlyDeviceName(self, dev, phys):
                dev, part = self.splitDeviceName(dev)
                description = "External Storage %s" % dev
+               have_model_descr = False
                try:
                        description = readFile("/sys" + phys + "/model")
+                       have_model_descr = True
                except IOError, s:
                        print "couldn't read model: ", s
                from Tools.HardwareInfo import HardwareInfo
-               for physdevprefix, pdescription in DEVICEDB.get(HardwareInfo().device_name,{}).items():
+               if dev.find('sr') == 0 and dev[2].isdigit():
+                       devicedb = DEVICEDB_SR
+               else:
+                       devicedb = DEVICEDB
+               for physdevprefix, pdescription in devicedb.get(HardwareInfo().device_name,{}).items():
                        if phys.startswith(physdevprefix):
-                               description = pdescription
-
+                               if have_model_descr:
+                                       description = pdescription + ' - ' + description
+                               else:
+                                       description = pdescription
                # not wholedisk and not partition 1
                if part and part != 1:
                        description += " (Partition %d)" % part
index 7144777..cc55965 100755 (executable)
@@ -19,9 +19,8 @@ class IpkgComponent:
        CMD_UPDATE = 3
        CMD_UPGRADE = 4
        
-       def __init__(self, ipkg = '/usr/bin/ipkg'):
+       def __init__(self, ipkg = 'opkg'):
                self.ipkg = ipkg
-               self.opkgAvail = fileExists('/usr/bin/opkg')
                self.cmd = eConsoleAppContainer()
                self.cache = None
                self.callbackList = []
@@ -90,10 +89,7 @@ class IpkgComponent:
                        if data.find('Downloading') == 0:
                                self.callCallbacks(self.EVENT_DOWNLOAD, data.split(' ', 5)[1].strip())
                        elif data.find('Upgrading') == 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])
+                               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 820d103..b026cd5 100755 (executable)
@@ -1,6 +1,7 @@
 from Components.Console import Console
 from os import listdir as os_listdir, path as os_path
 from re import compile as re_compile
+from enigma import eEnv
 
 class Keyboard:
        def __init__(self):
@@ -8,9 +9,9 @@ class Keyboard:
                self.readKeyboardMapFiles()
 
        def readKeyboardMapFiles(self):
-               for keymapfile in os_listdir('/usr/share/keymaps/'):
+               for keymapfile in os_listdir(eEnv.resolve('${datadir}/keymaps/')):
                        if (keymapfile.endswith(".info")):
-                               f = open('/usr/share/keymaps/' + keymapfile)
+                               f = open(eEnv.resolve('${datadir}/keymaps/') + keymapfile)
                                mapfile = None
                                mapname = None
                                for line in f:
@@ -32,7 +33,7 @@ class Keyboard:
                try:
                        keymap = self.keyboardmaps[index]
                        print "Activating keymap:",keymap[1]
-                       keymappath = '/usr/share/keymaps/' + keymap[0]
+                       keymappath = eEnv.resolve('${datadir}/keymaps/') + keymap[0]
                        if os_path.exists(keymappath):
                                Console().ePopen(("loadkmap < " + str(keymappath)))
                except:
index e980cb8..eee5a70 100755 (executable)
@@ -20,9 +20,8 @@ class Network:
                self.Console = Console()
                self.LinkConsole = Console()
                self.restartConsole = Console()
-               self.deactivateConsole = Console()
                self.deactivateInterfaceConsole = Console()
-               self.activateConsole = Console()
+               self.activateInterfaceConsole = Console()
                self.resetNetworkConsole = Console()
                self.DnsConsole = Console()
                self.PingConsole = Console()
@@ -30,37 +29,29 @@ class Network:
                self.friendlyNames = {}
                self.lan_interfaces = []
                self.wlan_interfaces = []
+               self.remoteRootFS = None
                self.getInterfaces()
 
        def onRemoteRootFS(self):
-               fp = file('/proc/mounts', 'r')
-               mounts = fp.readlines()
-               fp.close()
-               for line in mounts:
-                       parts = line.strip().split(' ')
-                       if parts[1] == '/' and (parts[2] == 'nfs' or parts[2] == 'smbfs'):
-                               return True
-               return False
+               if self.remoteRootFS == None:
+                       fp = file('/proc/mounts', 'r')
+                       mounts = fp.readlines()
+                       fp.close()
+                       self.remoteRootFS = False
+                       for line in mounts:
+                               parts = line.strip().split()
+                               if parts[1] == '/' and parts[2] == 'nfs':
+                                       self.remoteRootFS = True
+                                       break
+               return self.remoteRootFS
+
+       def isBlacklisted(self, iface):
+               return iface in ('lo', 'wifi0', 'wmaster0')
 
        def getInterfaces(self, callback = None):
-               devicesPattern = re_compile('[a-z]+[0-9]+')
                self.configuredInterfaces = []
-               fp = file('/proc/net/dev', 'r')
-               result = fp.readlines()
-               fp.close()
-               for line in result:
-                       try:
-                               device = devicesPattern.search(line).group()
-                               if device in ('wifi0', 'wmaster0'):
-                                       continue
-                               self.getDataForInterface(device, callback)
-                       except AttributeError:
-                               pass
-               #print "self.ifaces:", self.ifaces
-               #self.writeNetworkConfig()
-               #print ord(' ')
-               #for line in result:
-               #       print ord(line[0])
+               for device in self.getInstalledAdapters():
+                       self.getAddrInet(device, callback)
 
        # helper function
        def regExpMatch(self, pattern, string):
@@ -69,37 +60,32 @@ class Network:
                try:
                        return pattern.search(string).group()
                except AttributeError:
-                       None
+                       return None
 
        # helper function to convert ips from a sring to a list of ints
        def convertIP(self, ip):
-               strIP = ip.split('.')
-               ip = []
-               for x in strIP:
-                       ip.append(int(x))
-               return ip
-
-       def getDataForInterface(self, iface,callback):
-               #get ip out of ip addr, as avahi sometimes overrides it in ifconfig.
+               return [ int(n) for n in ip.split('.') ]
+
+       def getAddrInet(self, iface, callback):
                if not self.Console:
                        self.Console = Console()
-               cmd = "ip -o addr"
+               cmd = "ip -o addr show dev " + iface
                self.Console.ePopen(cmd, self.IPaddrFinished, [iface,callback])
 
        def IPaddrFinished(self, result, retval, extra_args):
                (iface, callback ) = extra_args
-               data = { 'up': False, 'dhcp': False, 'preup' : False, 'postdown' : False }
+               data = { 'up': False, 'dhcp': False, 'preup' : False, 'predown' : False }
                globalIPpattern = re_compile("scope global")
                ipRegexp = '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
                netRegexp = '[0-9]{1,2}'
-               macRegexp = '[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[a-z0-9]{2}\:[a-z0-9]{2}\:[a-z0-9]{2}'
+               macRegexp = '[0-9a-fA-F]{2}\:[0-9a-fA-F]{2}\:[0-9a-fA-F]{2}\:[0-9a-fA-F]{2}\:[0-9a-fA-F]{2}\:[0-9a-fA-F]{2}'
                ipLinePattern = re_compile('inet ' + ipRegexp + '/')
                ipPattern = re_compile(ipRegexp)
                netmaskLinePattern = re_compile('/' + netRegexp)
                netmaskPattern = re_compile(netRegexp)
                bcastLinePattern = re_compile(' brd ' + ipRegexp)
                upPattern = re_compile('UP')
-               macPattern = re_compile('[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[a-z0-9]{2}\:[a-z0-9]{2}\:[a-z0-9]{2}')
+               macPattern = re_compile(macRegexp)
                macLinePattern = re_compile('link/ether ' + macRegexp)
                
                for line in result.splitlines():
@@ -144,7 +130,7 @@ class Network:
                        print line[0:7]
                        if line[0:7] == "0.0.0.0":
                                gateway = self.regExpMatch(ipPattern, line[16:31])
-                               if gateway is not None:
+                               if gateway:
                                        data['gateway'] = self.convertIP(gateway)
                                        
                self.ifaces[iface] = data
@@ -171,12 +157,14 @@ class Network:
                                        if iface.has_key('gateway'):
                                                fp.write("      gateway %d.%d.%d.%d\n" % tuple(iface['gateway']))
                        if iface.has_key("configStrings"):
-                               fp.write("\n" + iface["configStrings"] + "\n")
+                               fp.write(iface["configStrings"])
                        if iface["preup"] is not False and not iface.has_key("configStrings"):
                                fp.write(iface["preup"])
-                               fp.write(iface["postdown"])
+                       if iface["predown"] is not False and not iface.has_key("configStrings"):
+                               fp.write(iface["predown"])
                        fp.write("\n")                          
                fp.close()
+               self.configuredNetworkAdapters = self.configuredInterfaces
                self.writeNameserverConfig()
 
        def writeNameserverConfig(self):
@@ -225,9 +213,9 @@ class Network:
                                if (split[0] == "pre-up"):
                                        if self.ifaces[currif].has_key("preup"):
                                                self.ifaces[currif]["preup"] = i
-                               if (split[0] == "post-down"):
-                                       if self.ifaces[currif].has_key("postdown"):
-                                               self.ifaces[currif]["postdown"] = i
+                               if (split[0] in ("pre-down","post-down")):
+                                       if self.ifaces[currif].has_key("predown"):
+                                               self.ifaces[currif]["predown"] = i
 
                for ifacename, iface in ifaces.items():
                        if self.ifaces.has_key(ifacename):
@@ -262,49 +250,13 @@ class Network:
                for line in resolv:
                        if self.regExpMatch(nameserverPattern, line) is not None:
                                ip = self.regExpMatch(ipPattern, line)
-                               if ip is not None:
+                               if ip:
                                        self.nameservers.append(self.convertIP(ip))
 
                print "nameservers:", self.nameservers
 
-       def deactivateNetworkConfig(self, callback = None):
-               if self.onRemoteRootFS():
-                       if callback is not None:
-                               callback(True)
-                       return
-               self.deactivateConsole = Console()
-               self.commands = []
-               self.commands.append("/etc/init.d/avahi-daemon stop")
-               for iface in self.ifaces.keys():
-                       cmd = "ip addr flush " + iface
-                       self.commands.append(cmd)               
-               self.commands.append("/etc/init.d/networking stop")
-               self.commands.append("killall -9 udhcpc")
-               self.commands.append("rm /var/run/udhcpc*")
-               self.deactivateConsole.eBatch(self.commands, self.deactivateNetworkFinished, callback, debug=True)
-               
-       def deactivateNetworkFinished(self,extra_args):
-               callback = extra_args
-               if len(self.deactivateConsole.appContainers) == 0:
-                       if callback is not None:
-                               callback(True)
-
-       def activateNetworkConfig(self, callback = None):
-               if self.onRemoteRootFS():
-                       if callback is not None:
-                               callback(True)
-                       return
-               self.activateConsole = Console()
-               self.commands = []
-               self.commands.append("/etc/init.d/networking start")
-               self.commands.append("/etc/init.d/avahi-daemon start")
-               self.activateConsole.eBatch(self.commands, self.activateNetworkFinished, callback, debug=True)
-               
-       def activateNetworkFinished(self,extra_args):
-               callback = extra_args
-               if len(self.activateConsole.appContainers) == 0:
-                       if callback is not None:
-                               callback(True)
+       def getInstalledAdapters(self):
+               return [x for x in listdir('/sys/class/net') if not self.isBlacklisted(x)]
 
        def getConfiguredAdapters(self):
                return self.configuredNetworkAdapters
@@ -315,47 +267,44 @@ class Network:
        def getFriendlyAdapterName(self, x):
                if x in self.friendlyNames.keys():
                        return self.friendlyNames.get(x, x)
-               else:
-                       self.friendlyNames[x] = self.getFriendlyAdapterNaming(x)
-                       return self.friendlyNames.get(x, x) # when we have no friendly name, use adapter name
+               self.friendlyNames[x] = self.getFriendlyAdapterNaming(x)
+               return self.friendlyNames.get(x, x) # when we have no friendly name, use adapter name
 
        def getFriendlyAdapterNaming(self, iface):
-               if iface.startswith('eth'):
-                       if iface not in self.lan_interfaces and len(self.lan_interfaces) == 0:
-                               self.lan_interfaces.append(iface)
-                               return _("LAN connection")
-                       elif iface not in self.lan_interfaces and len(self.lan_interfaces) >= 1:
-                               self.lan_interfaces.append(iface)
-                               return _("LAN connection") + " " + str(len(self.lan_interfaces))
-               else:
-                       if iface not in self.wlan_interfaces and len(self.wlan_interfaces) == 0:
+               name = None
+               if self.isWirelessInterface(iface):
+                       if iface not in self.wlan_interfaces:
                                self.wlan_interfaces.append(iface)
-                               return _("WLAN connection")
-                       elif iface not in self.wlan_interfaces and len(self.wlan_interfaces) >= 1:
-                               self.wlan_interfaces.append(iface)
-                               return _("WLAN connection") + " " + str(len(self.wlan_interfaces))
-
+                               name = _("WLAN connection")
+                               if len(self.wlan_interfaces):
+                                       name += " " + str(len(self.wlan_interfaces))
+               else:
+                       if iface not in self.lan_interfaces:
+                               self.lan_interfaces.append(iface)
+                               name = _("LAN connection")
+                               if len(self.lan_interfaces):
+                                       name += " " + str(len(self.lan_interfaces))
+               return name
+       
        def getFriendlyAdapterDescription(self, iface):
-               if iface == 'eth0':
-                       return _("Internal LAN adapter.")
+               if not self.isWirelessInterface(iface):
+                       return _('Ethernet network interface')
+
+               moduledir = self.getWlanModuleDir(iface)
+               if moduledir:
+                       name = os_path.basename(os_path.realpath(moduledir))
+                       if name in ('ath_pci','ath5k'):
+                               name = 'Atheros'
+                       elif name in ('rt73','rt73usb','rt3070sta'):
+                               name = 'Ralink'
+                       elif name == 'zd1211b':
+                               name = 'Zydas'
+                       elif name == 'r871x_usb_drv':
+                               name = 'Realtek'
                else:
-                       classdir = "/sys/class/net/" + iface + "/device/"
-                       driverdir = "/sys/class/net/" + iface + "/device/driver/"
-                       if os_path.exists(classdir):
-                               files = listdir(classdir)
-                               if 'driver' in files:
-                                       if os_path.realpath(driverdir).endswith('ath_pci'):
-                                               return _("Atheros")+ " " + str(os_path.basename(os_path.realpath(driverdir))) + " " + _("WLAN adapter.") 
-                                       elif os_path.realpath(driverdir).endswith('zd1211b'):
-                                               return _("Zydas")+ " " + str(os_path.basename(os_path.realpath(driverdir))) + " " + _("WLAN adapter.") 
-                                       elif os_path.realpath(driverdir).endswith('rt73'):
-                                               return _("Ralink")+ " " + str(os_path.basename(os_path.realpath(driverdir))) + " " + _("WLAN adapter.") 
-                                       elif os_path.realpath(driverdir).endswith('rt73usb'):
-                                               return _("Ralink")+ " " + str(os_path.basename(os_path.realpath(driverdir))) + " " + _("WLAN adapter.") 
-                                       else:
-                                               return str(os_path.basename(os_path.realpath(driverdir))) + " " + _("WLAN adapter.") 
-                               else:
-                                       return _("Unknown network adapter.")
+                       name = _('Unknown')
+
+               return name + ' ' + _('wireless network interface')
 
        def getAdapterName(self, iface):
                return iface
@@ -403,16 +352,12 @@ class Network:
                                        self.nameservers[i] = newnameserver
 
        def resetNetworkConfig(self, mode='lan', callback = None):
-               if self.onRemoteRootFS():
-                       if callback is not None:
-                               callback(True)
-                       return
                self.resetNetworkConsole = Console()
                self.commands = []
                self.commands.append("/etc/init.d/avahi-daemon stop")
                for iface in self.ifaces.keys():
-                       cmd = "ip addr flush " + iface
-                       self.commands.append(cmd)               
+                       if iface != 'eth0' or not self.onRemoteRootFS():
+                               self.commands.append("ip addr flush dev " + iface)      
                self.commands.append("/etc/init.d/networking stop")
                self.commands.append("killall -9 udhcpc")
                self.commands.append("rm /var/run/udhcpc*")
@@ -486,18 +431,15 @@ class Network:
                                        statecallback(self.NetworkState)
                
        def restartNetwork(self,callback = None):
-               if self.onRemoteRootFS():
-                       if callback is not None:
-                               callback(True)
-                       return
                self.restartConsole = Console()
                self.config_ready = False
                self.msgPlugins()
                self.commands = []
                self.commands.append("/etc/init.d/avahi-daemon stop")
                for iface in self.ifaces.keys():
-                       cmd = "ip addr flush " + iface
-                       self.commands.append(cmd)               
+                       if iface != 'eth0' or not self.onRemoteRootFS():
+                               self.commands.append("ifdown " + iface)
+                               self.commands.append("ip addr flush dev " + iface)
                self.commands.append("/etc/init.d/networking stop")
                self.commands.append("killall -9 udhcpc")
                self.commands.append("rm /var/run/udhcpc*")
@@ -554,9 +496,13 @@ class Network:
                                        
        def stopDeactivateInterfaceConsole(self):
                if self.deactivateInterfaceConsole is not None:
-                       if len(self.deactivateInterfaceConsole.appContainers):
-                               for name in self.deactivateInterfaceConsole.appContainers.keys():
-                                       self.deactivateInterfaceConsole.kill(name)
+                       self.deactivateInterfaceConsole.killAll()
+                       self.deactivateInterfaceConsole = None
+
+       def stopActivateInterfaceConsole(self):
+               if self.activateInterfaceConsole is not None:
+                       self.activateInterfaceConsole.killAll()
+                       self.activateInterfaceConsole = None
                                        
        def checkforInterface(self,iface):
                if self.getAdapterAttribute(iface, 'up') is True:
@@ -589,59 +535,138 @@ class Network:
                                if len(self.DnsConsole.appContainers) == 0:
                                        statecallback(self.DnsState)
 
-       def deactivateInterface(self,iface,callback = None):
-               if self.onRemoteRootFS():
+       def deactivateInterface(self,ifaces,callback = None):
+               self.config_ready = False
+               self.msgPlugins()
+               commands = []
+               def buildCommands(iface):
+                       commands.append("ifdown " + iface)
+                       commands.append("ip addr flush dev " + iface)
+                       #wpa_supplicant sometimes doesn't quit properly on SIGTERM
+                       if os_path.exists('/var/run/wpa_supplicant/'+ iface):
+                               commands.append("wpa_cli -i" + iface + " terminate")
+                       
+               if not self.deactivateInterfaceConsole:
+                       self.deactivateInterfaceConsole = Console()
+
+               if isinstance(ifaces, (list, tuple)):
+                       for iface in ifaces:
+                               if iface != 'eth0' or not self.onRemoteRootFS():
+                                       buildCommands(iface)
+               else:
+                       if ifaces == 'eth0' and self.onRemoteRootFS():
+                               if callback is not None:
+                                       callback(True)
+                               return
+                       buildCommands(ifaces)
+               self.deactivateInterfaceConsole.eBatch(commands, self.deactivateInterfaceFinished, [ifaces,callback], debug=True)
+
+       def deactivateInterfaceFinished(self,extra_args):
+               (ifaces, callback) = extra_args
+               def checkCommandResult(iface):
+                       if self.deactivateInterfaceConsole and self.deactivateInterfaceConsole.appResults.has_key("ifdown " + iface):
+                               result = str(self.deactivateInterfaceConsole.appResults.get("ifdown " + iface)).strip("\n")
+                               if result == "ifdown: interface " + iface + " not configured":
+                                       return False
+                               else:
+                                       return True
+               #ifdown sometimes can't get the interface down.
+               if isinstance(ifaces, (list, tuple)):
+                       for iface in ifaces:
+                               if checkCommandResult(iface) is False:
+                                       Console().ePopen(("ifconfig " + iface + " down" ))
+               else:
+                       if checkCommandResult(ifaces) is False:
+                               Console().ePopen(("ifconfig " + ifaces + " down" ))
+
+               if self.deactivateInterfaceConsole:
+                       if len(self.deactivateInterfaceConsole.appContainers) == 0:
+                               if callback is not None:
+                                       callback(True)
+
+       def activateInterface(self,iface,callback = None):
+               if self.config_ready:
+                       self.config_ready = False
+                       self.msgPlugins()
+               if iface == 'eth0' and self.onRemoteRootFS():
                        if callback is not None:
                                callback(True)
                        return
-               self.deactivateInterfaceConsole = Console()
-               self.commands = []
-               cmd1 = "ip addr flush " + iface
-               cmd2 = "ifconfig " + iface + " down"
-               self.commands.append(cmd1)
-               self.commands.append(cmd2)
-               self.deactivateInterfaceConsole.eBatch(self.commands, self.deactivateInterfaceFinished, callback, debug=True)
+               if not self.activateInterfaceConsole:
+                       self.activateInterfaceConsole = Console()
+               commands = []
+               commands.append("ifup " + iface)
+               self.activateInterfaceConsole.eBatch(commands, self.activateInterfaceFinished, callback, debug=True)
 
-       def deactivateInterfaceFinished(self,extra_args):
+       def activateInterfaceFinished(self,extra_args):
                callback = extra_args
-               if self.deactivateInterfaceConsole:
-                       if len(self.deactivateInterfaceConsole.appContainers) == 0:
+               if self.activateInterfaceConsole:
+                       if len(self.activateInterfaceConsole.appContainers) == 0:
                                if callback is not None:
                                        callback(True)
 
+       def sysfsPath(self, iface):
+               return '/sys/class/net/' + iface
+
+       def isWirelessInterface(self, iface):
+               if iface in self.wlan_interfaces:
+                       return True
+
+               if os_path.isdir(self.sysfsPath(iface) + '/wireless'):
+                       return True
+
+               # r871x_usb_drv on kernel 2.6.12 is not identifiable over /sys/class/net/'ifacename'/wireless so look also inside /proc/net/wireless
+               device = re_compile('[a-z]{2,}[0-9]*:')
+               ifnames = []
+               fp = open('/proc/net/wireless', 'r')
+               for line in fp:
+                       try:
+                               ifnames.append(device.search(line).group()[:-1])
+                       except AttributeError:
+                               pass
+               if iface in ifnames:
+                       return True
+
+               return False
+
+       def getWlanModuleDir(self, iface = None):
+               devicedir = self.sysfsPath(iface) + '/device'
+               moduledir = devicedir + '/driver/module'
+               if os_path.isdir(moduledir):
+                       return moduledir
+
+               # identification is not possible over default moduledir
+               for x in listdir(devicedir):
+                       # rt3070 on kernel 2.6.18 registers wireless devices as usb_device (e.g. 1-1.3:1.0) and identification is only possible over /sys/class/net/'ifacename'/device/1-xxx
+                       if x.startswith("1-"):
+                               moduledir = devicedir + '/' + x + '/driver/module'
+                               if os_path.isdir(moduledir):
+                                       return moduledir
+               # rt73, zd1211b, r871x_usb_drv on kernel 2.6.12 can be identified over /sys/class/net/'ifacename'/device/driver, so look also here
+               moduledir = devicedir + '/driver'
+               if os_path.isdir(moduledir):
+                       return moduledir
+
+               return None
+
        def detectWlanModule(self, iface = None):
-               self.wlanmodule = None
-               classdir = "/sys/class/net/" + iface + "/device/"
-               driverdir = "/sys/class/net/" + iface + "/device/driver/"
-               if os_path.exists(classdir):
-                       classfiles = listdir(classdir)
-                       driver_found = False
-                       nl80211_found = False
-                       for x in classfiles:
-                               if x == 'driver':
-                                       driver_found = True
-                               if x.startswith('ieee80211:'):
-                                       nl80211_found = True
-
-                       if driver_found and nl80211_found:
-                               #print about.getKernelVersionString()
-                               self.wlanmodule = "nl80211"
-                       else:
-                               if driver_found and not nl80211_found:
-                                       driverfiles = listdir(driverdir)
-                                       if os_path.realpath(driverdir).endswith('ath_pci'):
-                                               if len(driverfiles) >= 1:
-                                                       self.wlanmodule = 'madwifi'
-                                       if os_path.realpath(driverdir).endswith('rt73'):
-                                               if len(driverfiles) == 2 or len(driverfiles) == 5:
-                                                       self.wlanmodule = 'ralink'                                      
-                                       if os_path.realpath(driverdir).endswith('zd1211b'):
-                                               if len(driverfiles) == 1 or len(driverfiles) == 5:
-                                                       self.wlanmodule = 'zydas'
-                       if self.wlanmodule is None:
-                               self.wlanmodule = "wext"
-                       print 'Using "%s" as wpa-supplicant driver' % (self.wlanmodule)
-                       return self.wlanmodule
+               if not self.isWirelessInterface(iface):
+                       return None
+
+               devicedir = self.sysfsPath(iface) + '/device'
+               if os_path.isdir(devicedir + '/ieee80211'):
+                       return 'nl80211'
+
+               moduledir = self.getWlanModuleDir(iface)
+               if moduledir:
+                       module = os_path.basename(os_path.realpath(moduledir))
+                       if module in ('ath_pci','ath5k'):
+                               return 'madwifi'
+                       if module in ('rt73','rt73'):
+                               return 'ralink'
+                       if module == 'zd1211b':
+                               return 'zydas'
+               return 'wext'
        
        def calc_netmask(self,nmask):
                from struct import pack, unpack
index 7303186..bd1a363 100644 (file)
@@ -10,7 +10,7 @@ from enigma import eDVBSatelliteEquipmentControl as secClass, \
        eDVBSatelliteDiseqcParameters as diseqcParam, \
        eDVBSatelliteSwitchParameters as switchParam, \
        eDVBSatelliteRotorParameters as rotorParam, \
-       eDVBResourceManager, eDVBDB
+       eDVBResourceManager, eDVBDB, eEnv
 
 from time import localtime, mktime
 from datetime import datetime
@@ -390,6 +390,7 @@ class SecConfigure:
 
                                        if currLnb.diseqcMode.value == "1_0":
                                                currCO = currLnb.commandOrder1_0.value
+                                               sec.setRepeats(0)
                                        else:
                                                currCO = currLnb.commandOrder.value
 
@@ -1082,7 +1083,7 @@ def InitNimManager(nimmgr):
 
        unicablelnbproducts = {}
        unicablematrixproducts = {}
-       doc = xml.etree.cElementTree.parse("/usr/share/enigma2/unicable.xml")
+       doc = xml.etree.cElementTree.parse(eEnv.resolve("${datadir}/enigma2/unicable.xml"))
        root = doc.getroot()
 
        entry = root.find("lnb")
@@ -1360,25 +1361,32 @@ def InitNimManager(nimmgr):
                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)
-               try:
-                       oldvalue = open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "r").readline()
-                       open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "w").write("0")
-               except:
-                       print "[info] no /sys/module/dvb_core/parameters/dvb_shutdown_timeout available"
-               frontend = eDVBResourceManager.getInstance().allocateRawChannel(fe_id).getFrontend()
-               frontend.closeFrontend()
-               open("/proc/stb/frontend/%d/mode" % (fe_id), "w").write(configElement.value)
-               frontend.reopenFrontend()
-               try:
-                       open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "w").write(oldvalue)
-               except:
-                       print "[info] no /sys/module/dvb_core/parameters/dvb_shutdown_timeout available"
-               nimmgr.enumerateNIMs()
-       
+
+               cur_type = int(open("/proc/stb/frontend/%d/mode" % (fe_id), "r").read())
+               if cur_type != int(configElement.value):
+                       print "tunerTypeChanged feid %d from %d to mode %d" % (fe_id, cur_type, int(configElement.value))
+
+                       try:
+                               oldvalue = open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "r").readline()
+                               open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "w").write("0")
+                       except:
+                               print "[info] no /sys/module/dvb_core/parameters/dvb_shutdown_timeout available"
+
+                       frontend = eDVBResourceManager.getInstance().allocateRawChannel(fe_id).getFrontend()
+                       frontend.closeFrontend()
+                       open("/proc/stb/frontend/%d/mode" % (fe_id), "w").write(configElement.value)
+                       frontend.reopenFrontend()
+                       try:
+                               open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "w").write(oldvalue)
+                       except:
+                               print "[info] no /sys/module/dvb_core/parameters/dvb_shutdown_timeout available"
+                       nimmgr.enumerateNIMs()
+               else:
+                       print "tuner type is already already %d" %cur_type
+
        empty_slots = 0
        for slot in nimmgr.nim_slots:
                x = slot.slot
index 797ea39..0e65257 100644 (file)
@@ -1,5 +1,5 @@
 from MenuList import MenuList
-from Components.ParentalControl import parentalControl, IMG_WHITESERVICE, IMG_WHITEBOUQUET, IMG_BLACKSERVICE, IMG_BLACKBOUQUET
+from Components.ParentalControl import IMG_WHITESERVICE, IMG_WHITEBOUQUET, IMG_BLACKSERVICE, IMG_BLACKBOUQUET
 from Tools.Directories import SCOPE_SKIN_IMAGE, resolveFilename
 
 from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_LEFT
@@ -32,13 +32,14 @@ class ParentalControlList(MenuList):
                self.l.setItemHeight(32)
 
        def toggleSelectedLock(self):
+               from Components.ParentalControl import parentalControl
                print "self.l.getCurrentSelection():", self.l.getCurrentSelection()
                print "self.l.getCurrentSelectionIndex():", self.l.getCurrentSelectionIndex()
                curSel = self.l.getCurrentSelection()
                if curSel[0][2]:
                        parentalControl.unProtectService(self.l.getCurrentSelection()[0][0])
                else:
-                       parentalControl.protectService(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 5e439fd..b06246b 100755 (executable)
@@ -8,9 +8,13 @@ from Plugins.Plugin import PluginDescriptor
 import keymapparser
 
 class PluginComponent:
+       firstRun = True
+       restartRequired = False
+       
        def __init__(self):
                self.plugins = {}
                self.pluginList = [ ]
+               self.installedPluginList = [ ]
                self.setPluginPrefix("Plugins.")
                self.resetWarnings()
 
@@ -18,12 +22,15 @@ class PluginComponent:
                self.prefix = prefix
 
        def addPlugin(self, plugin):
-               self.pluginList.append(plugin)
-               for x in plugin.where:
-                       self.plugins.setdefault(x, []).append(plugin)
-                       if x == PluginDescriptor.WHERE_AUTOSTART:
-                               plugin(reason=0)
-
+               if self.firstRun or plugin.needsRestart is False:
+                       self.pluginList.append(plugin)
+                       for x in plugin.where:
+                               self.plugins.setdefault(x, []).append(plugin)
+                               if x == PluginDescriptor.WHERE_AUTOSTART:
+                                       plugin(reason=0)
+               else:
+                       self.restartRequired = True
+                               
        def removePlugin(self, plugin):
                self.pluginList.remove(plugin)
                for x in plugin.where:
@@ -42,7 +49,6 @@ class PluginComponent:
                        directory_category = directory + c
                        if not os_path.isdir(directory_category):
                                continue
-                       open(directory_category + "/__init__.py", "a").close()
                        for pluginname in os_listdir(directory_category):
                                path = directory_category + "/" + pluginname
                                if os_path.isdir(path):
@@ -67,6 +73,7 @@ class PluginComponent:
                                                        plugins = [ plugins ]
 
                                                for p in plugins:
+                                                       p.path = path
                                                        p.updateIcon(path)
                                                        new_plugins.append(p)
 
@@ -81,12 +88,29 @@ class PluginComponent:
                # internally, the "fnc" argument will be compared with __eq__
                plugins_added = [p for p in new_plugins if p not in self.pluginList]
                plugins_removed = [p for p in self.pluginList if not p.internal and p not in new_plugins]
+               
+               #ignore already installed but reloaded plugins
+               for p in plugins_removed: 
+                       for pa in plugins_added:
+                               if pa.path == p.path and pa.where == p.where:
+                                       pa.needsRestart = False
 
                for p in plugins_removed:
                        self.removePlugin(p)
 
                for p in plugins_added:
-                       self.addPlugin(p)
+                       if self.firstRun or p.needsRestart is False:
+                               self.addPlugin(p)
+                       else:
+                               for installed_plugin in self.installedPluginList:
+                                       if installed_plugin.path == p.path:
+                                               if installed_plugin.where == p.where:
+                                                       p.needsRestart = False
+                               self.addPlugin(p)
+                                               
+               if self.firstRun:
+                       self.firstRun = False
+                       self.installedPluginList = self.pluginList
 
        def getPlugins(self, where):
                """Get list of plugins in a specific category"""
@@ -97,8 +121,8 @@ class PluginComponent:
 
                for x in where:
                        res.extend(self.plugins.get(x, [ ]))
-
-               return  res
+               res.sort(key=lambda x:x.weight)
+               return res
 
        def getPluginsForMenu(self, menuid):
                res = [ ]
index 5ae43ed..51dc09a 100644 (file)
@@ -2,11 +2,11 @@
 ## Picon renderer by Gruffy .. some speedups by Ghost
 ##
 from Renderer import Renderer
-from enigma import ePixmap
+from enigma import ePixmap, eEnv
 from Tools.Directories import fileExists, SCOPE_SKIN_IMAGE, SCOPE_CURRENT_SKIN, resolveFilename
 
 class Picon(Renderer):
-       searchPaths = ('/usr/share/enigma2/%s/',
+       searchPaths = (eEnv.resolve('${datadir}/enigma2/%s/'),
                                '/media/cf/%s/',
                                '/media/usb/%s/')
 
index d67cd55..7c6b579 100644 (file)
@@ -3,4 +3,17 @@ from Renderer import Renderer
 from enigma import ePixmap
 
 class Pixmap(Renderer):
+       def __init__(self):
+               Renderer.__init__(self)
+
        GUI_WIDGET = ePixmap
+
+       def postWidgetCreate(self, instance):
+               self.changed((self.CHANGED_DEFAULT,))
+
+       def changed(self, what):
+               if what[0] != self.CHANGED_CLEAR:
+                       if self.source and hasattr(self.source, "pixmap"):
+                               if self.instance:
+                                       self.instance.setPixmap(self.source.pixmap)
+
index 813c09f..e01c61f 100644 (file)
@@ -11,6 +11,8 @@ add_type("application/x-dream-package", ".dmpkg")
 add_type("application/x-dream-image", ".nfi")
 add_type("video/MP2T", ".ts")
 add_type("video/x-dvd-iso", ".iso")
+add_type("video/x-matroska", ".mkv")
+add_type("audio/x-matroska", ".mka")
 
 def getType(file):
        (type, _) = guess_type(file)
index 93c733b..8a0a66a 100644 (file)
@@ -25,7 +25,7 @@ class ServiceEvent(Source, object):
        def newService(self, ref):
                if not self.service or not ref or self.service != ref:
                        self.service = ref
-                       if not ref or (ref.flags & Ref.flagDirectory) == Ref.flagDirectory or ref.flags & Ref.isMarker:
+                       if not ref:
                                self.changed((self.CHANGED_CLEAR,))
                        else:
                                self.changed((self.CHANGED_ALL,))
index 3a75540..8676923 100644 (file)
@@ -108,7 +108,6 @@ class Job(object):
                        self.tasks[i].abort()
 
        def cancel(self):
-               # some Jobs might have a better idea of how to cancel a job
                self.abort()
 
 class Task(object):
@@ -305,6 +304,7 @@ class JobManager:
                        list.append(self.active_job)
                list += self.active_jobs
                return list
+
 # some examples:
 #class PartitionExistsPostcondition:
 #      def __init__(self, device):
index b472a19..b9dda6a 100644 (file)
@@ -2,6 +2,7 @@ import NavigationInstance
 from time import localtime, mktime, gmtime
 from ServiceReference import ServiceReference
 from enigma import iServiceInformation, eServiceCenter, eServiceReference
+from timer import TimerEntry
 
 class TimerSanityCheck:
        def __init__(self, timerlist, newtimer=None):
@@ -107,7 +108,7 @@ class TimerSanityCheck:
                                                        self.rep_eventlist.append((begin, idx))
                                                begin += 86400
                                                rflags >>= 1
-                               else:
+                               elif timer.state < TimerEntry.StateEnded:
                                        self.nrep_eventlist.extend([(timer.begin,self.bflag,idx),(timer.end,self.eflag,idx)])
                        idx += 1
 
index b86c1a1..ce56f0f 100644 (file)
@@ -1,7 +1,7 @@
 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 enigma import Misc_Options, setTunerTypePriorityOrder, eEnv;
 from SystemInfo import SystemInfo
 import os
 
@@ -9,6 +9,8 @@ def InitUsageConfig():
        config.usage = ConfigSubsection();
        config.usage.showdish = ConfigYesNo(default = True)
        config.usage.multibouquet = ConfigYesNo(default = False)
+       config.usage.multiepg_ask_bouquet = ConfigYesNo(default = False)
+
        config.usage.quickzap_bouquet_change = ConfigYesNo(default = False)
        config.usage.e1like_radio_mode = ConfigYesNo(default = False)
        config.usage.infobar_timeout = ConfigSelection(default = "5", choices = [
@@ -94,7 +96,7 @@ def InitUsageConfig():
 
        SystemInfo["12V_Output"] = Misc_Options.getInstance().detected_12V_output()
 
-       config.usage.keymap = ConfigText(default = "/usr/share/enigma2/keymap.xml")
+       config.usage.keymap = ConfigText(default = eEnv.resolve("${datadir}/enigma2/keymap.xml"))
 
        config.seek = ConfigSubsection()
        config.seek.selfdefined_13 = ConfigNumber(default=15)
@@ -102,19 +104,19 @@ def InitUsageConfig():
        config.seek.selfdefined_79 = ConfigNumber(default=300)
 
        config.seek.speeds_forward = ConfigSet(default=[2, 4, 8, 16, 32, 64, 128], choices=[2, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128])
-       config.seek.speeds_backward = ConfigSet(default=[8, 16, 32, 64, 128], choices=[1, 2, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128])
+       config.seek.speeds_backward = ConfigSet(default=[2, 4, 8, 16, 32, 64, 128], choices=[1, 2, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128])
        config.seek.speeds_slowmotion = ConfigSet(default=[2, 4, 8], choices=[2, 4, 6, 8, 12, 16, 25])
 
        config.seek.enter_forward = ConfigSelection(default = "2", choices = ["2", "4", "6", "8", "12", "16", "24", "32", "48", "64", "96", "128"])
        config.seek.enter_backward = ConfigSelection(default = "1", choices = ["1", "2", "4", "6", "8", "12", "16", "24", "32", "48", "64", "96", "128"])
-       config.seek.stepwise_minspeed = ConfigSelection(default = "16", choices = ["Never", "2", "4", "6", "8", "12", "16", "24", "32", "48", "64", "96", "128"])
-       config.seek.stepwise_repeat = ConfigSelection(default = "3", choices = ["2", "3", "4", "5", "6"])
 
        config.seek.on_pause = ConfigSelection(default = "play", choices = [
                ("play", _("Play")),
                ("step", _("Singlestep (GOP)")),
                ("last", _("Last speed")) ])
 
+       config.usage.timerlist_finished_timer_position = ConfigSelection(default = "beginning", choices = [("beginning", _("at beginning")), ("end", _("at end"))])
+
        def updateEnterForward(configElement):
                if not configElement.value:
                        configElement.value = [2]
index d7506e3..5507cae 100755 (executable)
@@ -1624,16 +1624,17 @@ class Config(ConfigSubsection):
                self.pickle_this("config", self.saved_value, result)
                return ''.join(result)
 
-       def unpickle(self, lines):
+       def unpickle(self, lines, base_file=True):
                tree = { }
                for l in lines:
                        if not l or l[0] == '#':
                                continue
 
                        n = l.find('=')
+                       name = l[:n]
                        val = l[n+1:].strip()
 
-                       names = l[:n].split('.')
+                       names = name.split('.')
 #                      if val.find(' ') != -1:
 #                              val = val[:val.find(' ')]
 
@@ -1644,6 +1645,15 @@ class Config(ConfigSubsection):
 
                        base[names[-1]] = val
 
+                       if not base_file: # not the initial config file..
+                               #update config.x.y.value when exist
+                               try:
+                                       configEntry = eval(name)
+                                       if configEntry is not None:
+                                               configEntry.value = val
+                               except (SyntaxError, KeyError):
+                                       pass
+
                # we inherit from ConfigSubsection, so ...
                #object.__setattr__(self, "saved_value", tree["config"])
                if "config" in tree:
@@ -1651,13 +1661,16 @@ class Config(ConfigSubsection):
 
        def saveToFile(self, filename):
                text = self.pickle()
-               f = open(filename, "w")
-               f.write(text)
-               f.close()
+               try:
+                       f = open(filename, "w")
+                       f.write(text)
+                       f.close()
+               except IOError:
+                       print "Config: Couldn't write %s" % filename
 
-       def loadFromFile(self, filename):
+       def loadFromFile(self, filename, base_file=False):
                f = open(filename, "r")
-               self.unpickle(f.readlines())
+               self.unpickle(f.readlines(), base_file)
                f.close()
 
 config = Config()
@@ -1668,7 +1681,7 @@ class ConfigFile:
 
        def load(self):
                try:
-                       config.loadFromFile(self.CONFIG_FILE)
+                       config.loadFromFile(self.CONFIG_FILE, True)
                except IOError, e:
                        print "unable to load config (%s), assuming defaults..." % str(e)
 
index e38f7d8..666ba67 100644 (file)
@@ -1,23 +1,45 @@
-INCLUDES = \
+AM_CPPFLAGS = \
+       -I$(top_srcdir) \
        -I$(top_srcdir)/include \
-       -I$(top_srcdir)/src
+       -include Python.h \
+       -include $(top_builddir)/enigma2_config.h
 
 SUBDIRS = Components Tools Screens Plugins
 
 noinst_LIBRARIES = libenigma_python.a
 
 libenigma_python_a_SOURCES = \
-       python.cpp enigma_python_wrap.cxx connections.cpp
+       connections.cpp \
+       python.cpp
 
-enigma_python_wrap.cxx: enigma_python.i
-       swig -I$(top_srcdir)/ -c++ -python -O -nortti -nothreads enigma_python.i
-       python enigma_py_patcher.py
+pythonincludedir = $(pkgincludedir)/lib/python
+pythoninclude_HEADERS = \
+       connections.h \
+       python.h \
+       swig.h
 
-enigma.py: enigma_python_wrap.cxx
+nodist_libenigma_python_a_SOURCES = \
+       enigma_python.cpp
 
-CLEANFILES = enigma.py enigma_python_wrap.cxx
+noinst_PYTHON = \
+       enigma_py_patcher.py
+
+EXTRA_DIST = \
+       enigma_python.i
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/enigma_python.Pcpp@am__quote@
+
+.i.cpp:
+       $(AM_V_GEN)$(SWIG) $(AX_SWIG_PYTHON_OPT) -MT $@ -MD -MF $(DEPDIR)/$*.Tpo -I$(top_srcdir) -O -nortti -nothreads -o $@ $<
+       $(AM_V_at)mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Pcpp
+       $(AM_V_at)$(PYTHON) $(srcdir)/enigma_py_patcher.py
+
+enigma.py: enigma_python.cpp
+
+CLEANFILES = enigma.py enigma_python.cpp
 
 installdir = $(pkglibdir)/python
 
 install_PYTHON = \
        enigma.py
+
index 3ccca98..4828081 100644 (file)
@@ -1,4 +1,4 @@
-installdir = $(LIBDIR)/enigma2/python/Plugins/DemoPlugins/TPMDemo
+installdir = $(pkglibdir)/python/Plugins/DemoPlugins/TPMDemo
 
 install_PYTHON = \
        __init__.py \
index 2c078d3..dcaa1f6 100644 (file)
@@ -82,6 +82,6 @@ def main(session, **kwargs):
                        # would start your plugin here
 
 def Plugins(**kwargs):
-       return [PluginDescriptor(name = "TPM Demo", description = _("A demo plugin for TPM usage."), where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc = main),
-               PluginDescriptor(name = "TPM Demo", description = _("A demo plugin for TPM usage."), icon = "plugin.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc = main)]
+       return [PluginDescriptor(name = "TPM Demo", description = _("A demo plugin for TPM usage."), where = PluginDescriptor.WHERE_EXTENSIONSMENU, needsRestart = False, fnc = main),
+               PluginDescriptor(name = "TPM Demo", description = _("A demo plugin for TPM usage."), icon = "plugin.png", where = PluginDescriptor.WHERE_PLUGINMENU, needsRestart = False, fnc = main)]
        
\ No newline at end of file
index 69f935e..4ef4a87 100644 (file)
@@ -80,4 +80,4 @@ def test(returnValue):
        print "You entered", returnValue
 
 def Plugins(**kwargs):
-       return PluginDescriptor(name="Test", description="plugin to test some capabilities", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main)
+       return PluginDescriptor(name="Test", description="plugin to test some capabilities", where = PluginDescriptor.WHERE_PLUGINMENU, needsRestart = False, fnc=main)
index 0627df3..141c04a 100644 (file)
@@ -406,4 +406,4 @@ def main(session, service, **kwargs):
        session.open(CutListEditor, service)
 
 def Plugins(**kwargs):
-       return PluginDescriptor(name="Cutlist Editor", description=_("Cutlist editor..."), where = PluginDescriptor.WHERE_MOVIELIST, fnc=main)
+       return PluginDescriptor(name="Cutlist Editor", description=_("Cutlist editor..."), where = PluginDescriptor.WHERE_MOVIELIST, needsRestart = False, fnc=main)
index 7f755db..6dbcd49 100644 (file)
@@ -2,6 +2,7 @@ from Tools.Directories import fileExists
 from Components.config import config, ConfigSubsection, ConfigInteger, ConfigText, ConfigSelection, getConfigListEntry, ConfigSequence, ConfigSubList
 import DVDTitle
 import xml.dom.minidom
+from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_FONTS
 
 class ConfigColor(ConfigSequence):
        def __init__(self, default = [128,128,128]):
@@ -125,6 +126,14 @@ class DVDProject:
                        for key in self.filekeys:
                                val = self.settings.dict()[key].getValue()
                                if not fileExists(val):
+                                       if val[0] != "/":
+                                               if key.find("font") == 0:
+                                                       val = resolveFilename(SCOPE_FONTS)+val
+                                               else:
+                                                       val = resolveFilename(SCOPE_PLUGINS)+"Extensions/DVDBurn/"+val
+                                               if fileExists(val):
+                                                       self.settings.dict()[key].setValue(val)
+                                                       continue
                                        self.error += "\n%s '%s' not found" % (key, val)
                #except AttributeError:
                        #print "loadProject AttributeError", self.error
index 451e8a8..4645260 100644 (file)
@@ -3,11 +3,11 @@
        <settings
                name="Dreambox DVD record"
                authormode="menu_linked"
-               menutemplate="/usr/lib/enigma2/python/Plugins/Extensions/DVDBurn/Thumbs_menu_clouds.ddvdm.xml"
+               menutemplate="Thumbs_menu_clouds.ddvdm.xml"
                titlesetmode="multi"
-               vmgm="/usr/lib/enigma2/python/Plugins/Extensions/DVDBurn/vmgmdream.mpg"
+               vmgm="vmgmdream.mpg"
                output="dvd"
-               isopath="/media/hdd/movie/"
+               isopath="/hdd/movie/"
                dataformat="iso9660_4"
        />
        <titles> </titles>
index e00dedd..a928ae2 100644 (file)
@@ -85,7 +85,7 @@ class DemuxTask(Task):
                title = job.project.titles[job.i]
                self.global_preconditions.append(DiskspacePrecondition(title.estimatedDiskspace))
                self.setTool("projectx")
-               self.args += [inputfile, "-demux", "-out", self.job.workspace ]
+               self.args += [inputfile, "-demux", "-set", "ExportPanel.Streamtype.Subpicture=0", "-set", "ExportPanel.Streamtype.Teletext=0", "-out", self.job.workspace ]
                self.end = 300
                self.prog_state = 0
                self.weighting = 1000
@@ -174,7 +174,8 @@ class DemuxTask(Task):
                print "[DemuxTask::cleanup]"
                self.mplex_streamfiles = [ self.mplex_videofile ]
                for pid in self.relevantAudioPIDs:
-                       self.mplex_streamfiles.append(self.mplex_audiofiles[pid])
+                       if pid in self.mplex_audiofiles:
+                               self.mplex_streamfiles.append(self.mplex_audiofiles[pid])
                print self.mplex_streamfiles
 
                if failed:
index 0de7f4b..bf6356a 100644 (file)
@@ -3,17 +3,17 @@
        <settings
                titleformat="$i. $t"
                subtitleformat="$D.$M.$Y, $T $C, $d"
-               menubg="/usr/lib/enigma2/python/Plugins/Extensions/DVDBurn/dreamdvd_boat.jpg"
-               menuaudio="/usr/lib/enigma2/python/Plugins/Extensions/DVDBurn/silence.mp2"
+               menubg="dreamdvd_boat.jpg"
+               menuaudio="silence.mp2"
                dimensions="(720, 576)"
                rows="5"
                cols="1"
                color_button="[8, 0, 0]"
                color_highlight="[0, 192, 192]"
                color_headline="[0, 0, 128]"
-               fontface_headline="/usr/share/fonts/nmsbd.ttf"
-               fontface_title="/usr/share/fonts/nmsbd.ttf"
-               fontface_subtitle="/usr/share/fonts/nmsbd.ttf"
+               fontface_headline="nmsbd.ttf"
+               fontface_title="nmsbd.ttf"
+               fontface_subtitle="nmsbd.ttf"
                fontsize_headline="46"
                fontsize_title="24"
                fontsize_subtitle="14"
index c00c3fe..074f203 100644 (file)
@@ -3,17 +3,17 @@
        <settings
                titleformat="$t"
                subtitleformat="$d"
-               menubg="/usr/lib/enigma2/python/Plugins/Extensions/DVDBurn/dreamdvd_clouds.jpg"
-               menuaudio="/usr/lib/enigma2/python/Plugins/Extensions/DVDBurn/silence.mp2"
+               menubg="dreamdvd_clouds.jpg"
+               menuaudio="silence.mp2"
                dimensions="(720, 576)"
                rows="2"
                cols="2"
                color_button="[8, 0, 0]"
                color_highlight="[128, 0, 0]"
                color_headline="[128, 0, 0]"
-               fontface_headline="/usr/share/fonts/nmsbd.ttf"
-               fontface_title="/usr/share/fonts/nmsbd.ttf"
-               fontface_subtitle="/usr/share/fonts/nmsbd.ttf"
+               fontface_headline="nmsbd.ttf"
+               fontface_title="nmsbd.ttf"
+               fontface_subtitle="nmsbd.ttf"
                fontsize_headline="46"
                fontsize_title="18"
                fontsize_subtitle="12"
index bd856b4..f5d2fa6 100644 (file)
@@ -13,5 +13,5 @@ def main_add(session, service, **kwargs):
 
 def Plugins(**kwargs):
        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") ]
+       return [PluginDescriptor(name="DVD Burn", description=descr, where = PluginDescriptor.WHERE_MOVIELIST, needsRestart = True, fnc=main_add, icon="dvdburn.png"),
+               PluginDescriptor(name="DVD Burn", description=descr, where = PluginDescriptor.WHERE_PLUGINMENU, needsRestart = True, fnc=main, icon="dvdburn.png") ]
index 71ea714..ec212e4 100644 (file)
@@ -1,4 +1,3 @@
-if HAVE_DDVDLIB
 SUBDIRS = src meta
 
 installdir = $(pkglibdir)/python/Plugins/Extensions/DVDPlayer
@@ -8,4 +7,3 @@ install_PYTHON = \
        plugin.py \
        keymap.xml \
        LICENSE
-endif
index 7b7f205..bf57e75 100644 (file)
@@ -8,7 +8,8 @@
                        <key id="KEY_PREVIOUS" mapto="prevChapter" flags="m" />
                        <key id="KEY_NEXT" mapto="nextChapter" flags="m" />
                        <key id="KEY_TV" mapto="tv" flags="m" />
-                       <key id="KEY_AUDIO" mapto="dvdAudioMenu" flags="m" />
+                       <key id="KEY_AUDIO" mapto="AudioSelection" flags="m" />
+                       <key id="KEY_AUDIO" mapto="dvdAudioMenu" flags="l" />
                        <key id="KEY_RADIO" mapto="nextAudioTrack" flags="m" />
                        <key id="KEY_TEXT" mapto="nextSubtitleTrack" flags="m" />
                        <key id="KEY_VIDEO" mapto="nextAngle" flags="m" />
old mode 100755 (executable)
new mode 100644 (file)
index 64b4ae5..1cee0aa
@@ -4,7 +4,7 @@ from Screens.Screen import Screen
 from Screens.MessageBox import MessageBox
 from Screens.ChoiceBox import ChoiceBox
 from Screens.HelpMenu import HelpableScreen
-from Screens.InfoBarGenerics import InfoBarSeek, InfoBarPVRState, InfoBarCueSheetSupport, InfoBarShowHide, InfoBarNotifications
+from Screens.InfoBarGenerics import InfoBarSeek, InfoBarPVRState, InfoBarCueSheetSupport, InfoBarShowHide, InfoBarNotifications, InfoBarAudioSelection, InfoBarSubtitleSupport
 from Components.ActionMap import ActionMap, NumberActionMap, HelpableActionMap
 from Components.Label import Label
 from Components.Sources.StaticText import StaticText
@@ -39,8 +39,11 @@ class FileBrowser(Screen):
                                currDir = "/media/dvd/"
                        if not pathExists(currDir):
                                currDir = "/"
+                       if lastpath == "":  # 'None' is magic to start at the list of mountpoints
+                               currDir = None
 
-                       self.filelist = FileList(currDir, matchingPattern = "(?i)^.*\.(iso)", useServiceRef = True)
+                       inhibitDirs = ["/bin", "/boot", "/dev", "/etc", "/home", "/lib", "/proc", "/sbin", "/share", "/sys", "/tmp", "/usr", "/var"]
+                       self.filelist = FileList(currDir, matchingPattern = "(?i)^.*\.(iso|img)", useServiceRef = True)
                        self["filelist"] = self.filelist
 
                self["FilelistActions"] = ActionMap(["SetupActions"],
@@ -79,6 +82,12 @@ class FileBrowser(Screen):
                                        lastpath = (pathname.rstrip("/").rsplit("/",1))[0]
                                        print "lastpath video_ts.ifo=", lastpath
                                        self.close(pathname)
+                               if fileExists(pathname+"VIDEO_TS/VIDEO_TS.IFO"):
+                                       print "dvd structure found, trying to open..."
+                                       lastpath = (pathname.rstrip("/").rsplit("/",1))[0]
+                                       print "lastpath video_ts.ifo=", lastpath
+                                       pathname += "VIDEO_TS"
+                                       self.close(pathname)
                        else:
                                lastpath = filename[0:filename.rfind("/")]
                                print "lastpath directory=", lastpath
@@ -186,7 +195,7 @@ class ChapterZap(Screen):
                self.Timer.callback.append(self.keyOK)
                self.Timer.start(3000, True)
 
-class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarPVRState, InfoBarShowHide, HelpableScreen, InfoBarCueSheetSupport):
+class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarPVRState, InfoBarShowHide, HelpableScreen, InfoBarCueSheetSupport, InfoBarAudioSelection, InfoBarSubtitleSupport):
        ALLOW_SUSPEND = Screen.SUSPEND_PAUSES
        ENABLE_RESUME_SUPPORT = True
        
@@ -235,8 +244,6 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                self.saved_config_speeds_backward = config.seek.speeds_backward.value
                self.saved_config_enter_forward = config.seek.enter_forward.value
                self.saved_config_enter_backward = config.seek.enter_backward.value
-               self.saved_config_seek_stepwise_minspeed = config.seek.stepwise_minspeed.value
-               self.saved_config_seek_stepwise_repeat = config.seek.stepwise_repeat.value
                self.saved_config_seek_on_pause = config.seek.on_pause.value
                self.saved_config_seek_speeds_slowmotion = config.seek.speeds_slowmotion.value
 
@@ -246,8 +253,6 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                config.seek.speeds_slowmotion.value = [ ]
                config.seek.enter_forward.value = "2"
                config.seek.enter_backward.value = "2"
-               config.seek.stepwise_minspeed.value = "Never"
-               config.seek.stepwise_repeat.value = "3"
                config.seek.on_pause.value = "play"
 
        def restore_infobar_seek_config(self):
@@ -256,8 +261,6 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                config.seek.speeds_slowmotion.value = self.saved_config_seek_speeds_slowmotion
                config.seek.enter_forward.value = self.saved_config_enter_forward
                config.seek.enter_backward.value = self.saved_config_enter_backward
-               config.seek.stepwise_minspeed.value = self.saved_config_seek_stepwise_minspeed
-               config.seek.stepwise_repeat.value = self.saved_config_seek_stepwise_repeat
                config.seek.on_pause.value = self.saved_config_seek_on_pause
 
        def __init__(self, session, dvd_device = None, dvd_filelist = [ ], args = None):
@@ -266,10 +269,12 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                InfoBarNotifications.__init__(self)
                InfoBarCueSheetSupport.__init__(self, actionmap = "MediaPlayerCueSheetActions")
                InfoBarShowHide.__init__(self)
+               InfoBarAudioSelection.__init__(self)
+               InfoBarSubtitleSupport.__init__(self)
                HelpableScreen.__init__(self)
                self.save_infobar_seek_config()
                self.change_infobar_seek_config()
-               InfoBarSeek.__init__(self, useSeekBackHack=False)
+               InfoBarSeek.__init__(self)
                InfoBarPVRState.__init__(self)
                self.dvdScreen = self.session.instantiateDialog(DVDOverlay)
 
@@ -345,6 +350,7 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                                "prevTitle": (self.prevTitle, _("jump back to the previous title")),
                                "tv": (self.askLeavePlayer, _("exit DVD player or return to file browser")),
                                "dvdAudioMenu": (self.enterDVDAudioMenu, _("(show optional DVD audio menu)")),
+                               "AudioSelection": (self.enterAudioSelection, _("Select audio track")),
                                "nextAudioTrack": (self.nextAudioTrack, _("switch to the next audio track")),
                                "nextSubtitleTrack": (self.nextSubtitleTrack, _("switch to the next subtitle language")),
                                "nextAngle": (self.nextAngle, _("switch to the next angle")),
@@ -537,6 +543,9 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                        keys.keyPressed(key)
                return keys
 
+       def enterAudioSelection(self):
+               self.audioSelection()
+
        def nextAudioTrack(self):
                self.sendKey(iServiceKeys.keyUser)
 
@@ -625,6 +634,14 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                        newref = eServiceReference(4369, 0, val)
                        print "play", newref.toString()
                        if curref is None or curref != newref:
+                               if newref.toString().endswith("/VIDEO_TS") or newref.toString().endswith("/"):
+                                       names = newref.toString().rsplit("/",3)
+                                       if names[2].startswith("Disk ") or names[2].startswith("DVD "):
+                                               name = str(names[1]) + " - " + str(names[2])
+                                       else:
+                                               name = names[2]
+                                       print "setting name to: ", self.service
+                                       newref.setName(str(name))
                                self.session.nav.playService(newref)
                                self.service = self.session.nav.getCurrentService()
                                print "self.service", self.service
@@ -758,5 +775,5 @@ def filescan(**kwargs):
                )]              
 
 def Plugins(**kwargs):
-       return [PluginDescriptor(name = "DVDPlayer", description = "Play DVDs", where = PluginDescriptor.WHERE_MENU, fnc = menu),
-                       PluginDescriptor(where = PluginDescriptor.WHERE_FILESCAN, fnc = filescan)]
+       return [PluginDescriptor(name = "DVDPlayer", description = "Play DVDs", where = PluginDescriptor.WHERE_MENU, needsRestart = True, fnc = menu),
+                       PluginDescriptor(where = PluginDescriptor.WHERE_FILESCAN, needsRestart = True, fnc = filescan)]
index 27c751c..3e2ee67 100644 (file)
@@ -1,17 +1,18 @@
-OBJS := servicedvd.cpp
+AM_CPPFLAGS = \
+       -I$(top_srcdir) \
+       -I$(top_srcdir)/include \
+       -include Python.h \
+       -include $(top_builddir)/enigma2_config.h
 
--include $(OBJS:.cpp=.d)
+AM_CXXFLAGS = @LIBDDVD_CFLAGS@
 
-installdir = $(pkglibdir)/python/Plugins/Extensions/DVDPlayer
+plugindir = $(pkglibdir)/python/Plugins/Extensions/DVDPlayer
 
-install_PYTHON = \
-       servicedvd.so
+plugin_LTLIBRARIES = servicedvd.la
 
-servicedvd.so:
-       $(CXX) $(CPPFLAGS) -MD $(CXXFLAGS) $(DEFS) -I$(top_srcdir)/include \
-       -Wall -W $(OBJS) -shared -fPIC -Wl,-soname,servicedvd.so -o servicedvd.so \
-       $(LDFLAGS) -ldreamdvd
+servicedvd_la_SOURCES = \
+       servicedvd.cpp \
+       servicedvd.h
 
-all: servicedvd.so
-
-CLEANFILES = servicedvd.so servicedvd.d
+servicedvd_la_LDFLAGS = -avoid-version -module
+servicedvd_la_LIBADD = @LIBDDVD_LIBS@
index 2ba5392..6d1397d 100644 (file)
@@ -32,6 +32,7 @@ eServiceFactoryDVD::eServiceFactoryDVD()
        {
                std::list<std::string> extensions;
                extensions.push_back("iso");
+               extensions.push_back("img");
                sc->addServiceFactory(eServiceFactoryDVD::id, this, extensions);
        }
 }
@@ -396,6 +397,61 @@ RESULT eServiceDVD::subtitle(ePtr<iSubtitleOutput> &ptr)
        return 0;
 }
 
+RESULT eServiceDVD::audioTracks(ePtr<iAudioTrackSelection> &ptr)
+{
+       ptr = this;
+       return 0;
+}
+
+int eServiceDVD::getNumberOfTracks()
+{
+       int i = 0;
+       ddvd_get_audio_count(m_ddvdconfig, &i);
+       return i;
+}
+
+int eServiceDVD::getCurrentTrack()
+{
+       int audio_id,audio_type;
+       uint16_t audio_lang;
+       ddvd_get_last_audio(m_ddvdconfig, &audio_id, &audio_lang, &audio_type);
+       return audio_id;
+}
+
+RESULT eServiceDVD::selectTrack(unsigned int i)
+{
+       ddvd_set_audio(m_ddvdconfig, i);
+       return 0;
+}
+
+RESULT eServiceDVD::getTrackInfo(struct iAudioTrackInfo &info, unsigned int audio_id)
+{
+       int audio_type;
+       uint16_t audio_lang;
+       ddvd_get_audio_byid(m_ddvdconfig, audio_id, &audio_lang, &audio_type);
+       char audio_string[3]={audio_lang >> 8, audio_lang, 0};
+       info.m_pid = audio_id+1;
+       info.m_language = audio_string;
+       switch(audio_type)
+       {
+               case DDVD_MPEG:
+                       info.m_description = "MPEG";
+                       break;
+               case DDVD_AC3:
+                       info.m_description = "AC3";
+                       break;
+               case DDVD_DTS:
+                       info.m_description = "DTS";
+                       break;
+               case DDVD_LPCM:
+                       info.m_description = "LPCM";
+                       break;
+               default:
+                       info.m_description = "und";
+       }
+       return 0;
+}
+
 RESULT eServiceDVD::keys(ePtr<iServiceKeys> &ptr)
 {
        ptr=this;
@@ -480,7 +536,10 @@ RESULT eServiceDVD::getName(std::string &name)
        if ( m_ddvd_titlestring[0] != '\0' )
                name = m_ddvd_titlestring;
        else
-               name = m_ref.path;
+               if ( !m_ref.name.empty() )
+                       name = m_ref.name;
+               else
+                       name = m_ref.path;
        return 0;
 }
 
@@ -619,14 +678,33 @@ PyObject *eServiceDVD::getInfoObject(int w)
        Py_RETURN_NONE;
 }
 
-RESULT eServiceDVD::enableSubtitles(eWidget *parent, SWIG_PYOBJECT(ePyObject) /*entry*/)
+RESULT eServiceDVD::enableSubtitles(eWidget *parent, ePyObject tuple)
 {
        delete m_subtitle_widget;
+       eSize size = eSize(720, 576);
 
        m_subtitle_widget = new eSubtitleWidget(parent);
        m_subtitle_widget->resize(parent->size());
 
-       eSize size = eSize(720, 576);
+       int pid = -1;
+
+       if ( tuple != Py_None )
+       {               
+               ePyObject entry;
+               int tuplesize = PyTuple_Size(tuple);
+               if (!PyTuple_Check(tuple))
+                       goto error_out;
+               if (tuplesize < 1)
+                       goto error_out;
+               entry = PyTuple_GET_ITEM(tuple, 1);
+               if (!PyInt_Check(entry))
+                       goto error_out;
+               pid = PyInt_AsLong(entry)-1;
+
+               ddvd_set_spu(m_ddvdconfig, pid);
+               m_event(this, evUser+7);
+       }
+       eDebug("eServiceDVD::enableSubtitles %i", pid);
 
        if (!m_pixmap)
        {
@@ -644,6 +722,9 @@ RESULT eServiceDVD::enableSubtitles(eWidget *parent, SWIG_PYOBJECT(ePyObject) /*
        m_subtitle_widget->show();
 
        return 0;
+
+error_out:
+       return -1;
 }
 
 RESULT eServiceDVD::disableSubtitles(eWidget */*parent*/)
@@ -655,8 +736,26 @@ RESULT eServiceDVD::disableSubtitles(eWidget */*parent*/)
 
 PyObject *eServiceDVD::getSubtitleList()
 {
-       eDebug("eServiceDVD::getSubtitleList nyi");
-       Py_RETURN_NONE;
+       ePyObject l = PyList_New(0);
+       unsigned int spu_count = 0;
+       ddvd_get_spu_count(m_ddvdconfig, &spu_count);
+
+       for ( unsigned int spu_id = 0; spu_id < spu_count; spu_id++ )
+       {
+               uint16_t spu_lang;
+               ddvd_get_spu_byid(m_ddvdconfig, spu_id, &spu_lang);
+               char spu_string[3]={spu_lang >> 8, spu_lang, 0};
+
+               ePyObject tuple = PyTuple_New(5);
+               PyTuple_SetItem(tuple, 0, PyInt_FromLong(2));
+               PyTuple_SetItem(tuple, 1, PyInt_FromLong(spu_id+1));
+               PyTuple_SetItem(tuple, 2, PyInt_FromLong(5));
+               PyTuple_SetItem(tuple, 3, PyInt_FromLong(0));
+               PyTuple_SetItem(tuple, 4, PyString_FromString(spu_string));
+               PyList_Append(l, tuple);
+               Py_DECREF(tuple);
+       }
+       return l;
 }
 
 PyObject *eServiceDVD::getCachedSubtitle()
index c751a39..80cfcf0 100644 (file)
@@ -26,7 +26,7 @@ public:
        RESULT offlineOperations(const eServiceReference &, ePtr<iServiceOfflineOperations> &ptr);
 };
 
-class eServiceDVD: public iPlayableService, public iPauseableService, public iSeekableService,
+class eServiceDVD: public iPlayableService, public iPauseableService, public iSeekableService, public iAudioTrackSelection,
        public iServiceInformation, public iSubtitleOutput, public iServiceKeys, public iCueSheet, public eThread, public Object
 {
        friend class eServiceFactoryDVD;
@@ -35,7 +35,7 @@ public:
        virtual ~eServiceDVD();
                // not implemented (yet)
        RESULT audioChannel(ePtr<iAudioChannelSelection> &ptr) { ptr = 0; return -1; }
-       RESULT audioTracks(ePtr<iAudioTrackSelection> &ptr) { ptr = 0; return -1; }
+       RESULT audioTracks(ePtr<iAudioTrackSelection> &ptr);
        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; }
@@ -89,8 +89,15 @@ public:
        void setCutList(SWIG_PYOBJECT(ePyObject));
        void setCutListEnable(int enable);
 
-               // iServiceKeys
+                       // iAudioTrackSelection 
+       int getNumberOfTracks();
+       RESULT selectTrack(unsigned int i);
+       RESULT getTrackInfo(struct iAudioTrackInfo &, unsigned int n);
+       int getCurrentTrack();
+
+       // iServiceKeys
        RESULT keyPressed(int key);
+
 private:
        eServiceDVD(eServiceReference ref);
 
index adb7015..af14578 100644 (file)
@@ -1,8 +1,9 @@
 from Plugins.Plugin import PluginDescriptor
 from GraphMultiEpg import GraphMultiEPG
-from Screens.ChannelSelection import BouquetSelector
+from Screens.ChannelSelection import BouquetSelector, SilentBouquetSelector
 from enigma import eServiceCenter, eServiceReference
 from ServiceReference import ServiceReference
+from Components.config import config
 
 Session = None
 Servicelist = None
@@ -73,6 +74,32 @@ def changeBouquetCB(direction, epg):
                        epg_bouquet = bouquet
                        epg.setServices(services)
 
+def openAskBouquet(Session, bouquets, cnt):
+       if cnt > 1: # show bouquet list
+               global bouquetSel
+               bouquetSel = Session.openWithCallback(closed, BouquetSelector, bouquets, openBouquetEPG, enableWrapAround=True)
+               dlg_stack.append(bouquetSel)
+       elif cnt == 1:
+               if not openBouquetEPG(bouquets[0][1]):
+                       cleanup()
+
+def openSilent(Servicelist, bouquets, cnt):
+       root = Servicelist.getRoot()
+       if cnt > 1: # create bouquet list
+               global bouquetSel
+               current = 0
+               rootstr = root.toCompareString()
+               for bouquet in bouquets:
+                       if bouquet[1].toCompareString() == rootstr:
+                               break
+                       current += 1
+               if current >= cnt:
+                       current = 0
+               bouquetSel = SilentBouquetSelector(bouquets, True, current)
+       if cnt >= 1: # open current bouquet
+               if not openBouquetEPG(root):
+                       cleanup()
+
 def main(session, servicelist, **kwargs):
        global Session
        Session = session
@@ -83,16 +110,13 @@ def main(session, servicelist, **kwargs):
                cnt = 0
        else:
                cnt = len(bouquets)
-       if cnt > 1: # show bouquet list
-               global bouquetSel
-               bouquetSel = Session.openWithCallback(closed, BouquetSelector, bouquets, openBouquetEPG, enableWrapAround=True)
-               dlg_stack.append(bouquetSel)
-       elif cnt == 1:
-               if not openBouquetEPG(bouquets[0][1]):
-                       cleanup()
+       if config.usage.multiepg_ask_bouquet.value:
+               openAskBouquet(session, bouquets, cnt)
+       else:
+               openSilent(servicelist, bouquets, cnt)
 
 def Plugins(**kwargs):
        name = _("Graphical Multi EPG")
        descr = _("A graphical EPG for all services of an specific bouquet")
-       return [ PluginDescriptor(name=name, description=descr, where = PluginDescriptor.WHERE_EVENTINFO, fnc=main),
-         PluginDescriptor(name=name, description=descr, where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc=main) ]
+       return [PluginDescriptor(name=name, description=descr, where = PluginDescriptor.WHERE_EVENTINFO, needsRestart = False, fnc=main),
+               PluginDescriptor(name=name, description=descr, where = PluginDescriptor.WHERE_EXTENSIONSMENU, needsRestart = False, fnc=main)]
index 5a6e3f3..7a3a9be 100755 (executable)
@@ -1,6 +1,10 @@
 installdir = $(pkglibdir)/python/Plugins/Extensions
 
-SUBDIRS = TuxboxPlugins CutListEditor PicturePlayer MediaScanner MediaPlayer GraphMultiEPG SocketMMI DVDPlayer DVDBurn Modem
+SUBDIRS = TuxboxPlugins CutListEditor PicturePlayer MediaScanner MediaPlayer GraphMultiEPG SocketMMI DVDBurn Modem
+
+if HAVE_LIBDDVD
+SUBDIRS += DVDPlayer
+endif
 
 install_PYTHON =       \
        __init__.py
old mode 100755 (executable)
new mode 100644 (file)
index 9ae886f..6ff1c5a
@@ -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|wav|wave|m3u|pls|e2pls|mpg|vob|avi|divx|m4v|mkv|mp4|m4a|dat|flac|mov|m2ts)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls")
                self["filelist"] = self.filelist
 
                self.playlist = MyPlayList()
@@ -1041,6 +1041,6 @@ def filescan(**kwargs):
 from Plugins.Plugin import PluginDescriptor
 def Plugins(**kwargs):
        return [
-               PluginDescriptor(name = "MediaPlayer", description = "Play back media files", where = PluginDescriptor.WHERE_MENU, fnc = menu),
-               PluginDescriptor(name = "MediaPlayer", where = PluginDescriptor.WHERE_FILESCAN, fnc = filescan)
+               PluginDescriptor(name = "MediaPlayer", description = "Play back media files", where = PluginDescriptor.WHERE_MENU, needsRestart = False, fnc = menu),
+               PluginDescriptor(name = "MediaPlayer", where = PluginDescriptor.WHERE_FILESCAN, needsRestart = False, fnc = filescan)
        ]
old mode 100755 (executable)
new mode 100644 (file)
index 0cefa35..76bbb26
@@ -91,8 +91,8 @@ def autostart(reason, **kwargs):
 
 def Plugins(**kwargs):
        return [
-               PluginDescriptor(name="MediaScanner", description=_("Scan Files..."), where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main),
+               PluginDescriptor(name="MediaScanner", description=_("Scan Files..."), where = PluginDescriptor.WHERE_PLUGINMENU, needsRestart = True, fnc=main),
 #              PluginDescriptor(where = PluginDescriptor.WHERE_MENU, fnc=menuHook),
-               PluginDescriptor(where = PluginDescriptor.WHERE_SESSIONSTART, fnc = sessionstart),
-               PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart)
+               PluginDescriptor(where = PluginDescriptor.WHERE_SESSIONSTART, needsRestart = True, fnc = sessionstart),
+               PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, needsRestart = True, fnc = autostart)
                ]
index e57e4f5..0b397c1 100644 (file)
@@ -280,4 +280,4 @@ def main(session, **kwargs):
        session.open(ModemSetup)
 
 def Plugins(**kwargs):
-       return PluginDescriptor(name="Modem", description="plugin to connect to internet via builtin modem", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main)
+       return PluginDescriptor(name="Modem", description="plugin to connect to internet via builtin modem", where = PluginDescriptor.WHERE_PLUGINMENU, needsRestart = False, fnc=main)
old mode 100755 (executable)
new mode 100644 (file)
index 5d1c2cb..169a8c8
@@ -625,5 +625,5 @@ def filescan(**kwargs):
 
 def Plugins(**kwargs):
        return \
-               [PluginDescriptor(name=_("PicturePlayer"), description=_("fileformats (BMP, PNG, JPG, GIF)"), icon="pictureplayer.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main),
-                PluginDescriptor(name=_("PicturePlayer"), where = PluginDescriptor.WHERE_FILESCAN, fnc = filescan)]
+               [PluginDescriptor(name=_("PicturePlayer"), description=_("fileformats (BMP, PNG, JPG, GIF)"), icon="pictureplayer.png", where = PluginDescriptor.WHERE_PLUGINMENU, needsRestart = False, fnc=main),
+                PluginDescriptor(name=_("PicturePlayer"), where = PluginDescriptor.WHERE_FILESCAN, needsRestart = False, fnc = filescan)]
index 387c830..568cde2 100644 (file)
@@ -22,6 +22,7 @@ def autostart(reason, **kwargs):
                socketHandler = SocketMMIMessageHandler()
 
 def Plugins(**kwargs):
-       return [ PluginDescriptor(name = "SocketMMI", description = _("Python frontend for /tmp/mmi.socket"), where = PluginDescriptor.WHERE_MENU, fnc = menu),
-               PluginDescriptor(where = PluginDescriptor.WHERE_SESSIONSTART, fnc = sessionstart),
-               PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart) ]
+       return [ PluginDescriptor(name = "SocketMMI", description = _("Python frontend for /tmp/mmi.socket"), where = PluginDescriptor.WHERE_MENU, needsRestart = True, fnc = menu),
+               PluginDescriptor(where = PluginDescriptor.WHERE_SESSIONSTART, needsRestart = True, fnc = sessionstart),
+               PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, needsRestart = True, fnc = autostart) ]
+
index 8e80e18..5ce7d03 100644 (file)
@@ -1,17 +1,15 @@
-OBJS = socket_mmi.cpp
+AM_CPPFLAGS = \
+       -I$(top_srcdir) \
+       -I$(top_srcdir)/include \
+       -include Python.h \
+       -include $(top_builddir)/enigma2_config.h
 
--include $(OBJS:.cpp=.d)
+plugindir = $(pkglibdir)/python/Plugins/Extensions/SocketMMI
 
-installdir = $(pkglibdir)/python/Plugins/Extensions/SocketMMI
+plugin_LTLIBRARIES = socketmmi.la
 
-install_PYTHON = \
-       socketmmi.so
+socketmmi_la_SOURCES = \
+       socket_mmi.cpp \
+       socket_mmi.h
 
-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 \
-       $(LDFLAGS)
-
-all: socketmmi.so
-
-CLEANFILES = socketmmi.so socketmmi.d
+socketmmi_la_LDFLAGS = -avoid-version -module
index 673b525..9a69de3 100644 (file)
@@ -118,11 +118,11 @@ eAutoInitP0<eSocket_UI> init_socketui(eAutoInitNumbers::rc, "Socket MMI");
 
 int eSocketMMIHandler::send_to_mmisock( void* buf, size_t len)
 {
-       int ret = write(connfd, buf, len);
+       ssize_t ret = write(connfd, buf, len);
        if ( ret < 0 )
                eDebug("[eSocketMMIHandler] write (%m)");
-       else if ( (uint)ret != len )
-               eDebug("[eSocketMMIHandler] only %d bytes sent.. %d bytes should be sent", ret, len );
+       else if ( (size_t)ret != len )
+               eDebug("[eSocketMMIHandler] only %zd bytes sent.. %zu bytes should be sent", ret, len );
        else
                return 0;
        return ret;
index 05085ea..e124ffd 100644 (file)
@@ -17,7 +17,7 @@ def getPlugins():
                for x in dir:
                        if x[-3:] == "cfg":
                                params = getPluginParams(x)
-                               pluginlist.append(PluginDescriptor(name=params["name"], description=params["desc"], where = PluginDescriptor.WHERE_PLUGINMENU, icon="tuxbox.png", fnc=boundFunction(main, plugin=x)))
+                               pluginlist.append(PluginDescriptor(name=params["name"], description=params["desc"], where = PluginDescriptor.WHERE_PLUGINMENU, icon="tuxbox.png", needsRestart = True, fnc=boundFunction(main, plugin=x)))
        
        return pluginlist
 
index 5a676cd..d87e6e9 100755 (executable)
@@ -61,9 +61,11 @@ class PluginDescriptor:
        WHERE_SOFTWAREMANAGER = 14
 
 
-       def __init__(self, name = "Plugin", where = [ ], description = "", icon = None, fnc = None, wakeupfnc = None, internal = False):
+       def __init__(self, name = "Plugin", where = [ ], description = "", icon = None, fnc = None, wakeupfnc = None, needsRestart = None, internal = False, weight = 0):
                self.name = name
                self.internal = internal
+               self.needsRestart = needsRestart
+               self.path = None
                if isinstance(where, list):
                        self.where = where
                else:
@@ -76,6 +78,8 @@ class PluginDescriptor:
                else:
                        self.icon = icon
 
+               self.weight = weight
+
                self.wakeupfnc = wakeupfnc
 
                self.__call__ = fnc
index d8de354..797010c 100755 (executable)
@@ -88,7 +88,7 @@ class CleanupWizard(WizardLanguage, Rc):
                if self.NextStep is not 'end':
                        if not self.Console:
                                self.Console = Console()
-                       cmd = "ipkg list_installed | grep enigma2"
+                       cmd = "opkg list_installed | grep enigma2"
                        self.Console.ePopen(cmd, self.buildListInstalled_Finished)
                        self.buildListRef = self.session.openWithCallback(self.buildListfinishedCB, MessageBox, _("Please wait while searching for removable packages..."), type = MessageBox.TYPE_INFO, enable_input = False)
                else:
old mode 100755 (executable)
new mode 100644 (file)
index f8677bb..157aa75
@@ -126,10 +126,10 @@ def selSetup(menuid, **kwargs):
 
 def Plugins(**kwargs):
        list = []
-       list.append(PluginDescriptor(name=_("CleanupWizard"), description=_("Cleanup Wizard settings"),where=PluginDescriptor.WHERE_MENU, fnc=selSetup))
+       list.append(PluginDescriptor(name=_("CleanupWizard"), description=_("Cleanup Wizard settings"),where=PluginDescriptor.WHERE_MENU, needsRestart = False, fnc=selSetup))
        if config.plugins.cleanupwizard.enable.value:
                if not config.misc.firstrun.value:
                        if internalMemoryExceeded:
-                               list.append(PluginDescriptor(name=_("Cleanup Wizard"), where = PluginDescriptor.WHERE_WIZARD, fnc=(1, CleanupWizard)))
+                               list.append(PluginDescriptor(name=_("Cleanup Wizard"), where = PluginDescriptor.WHERE_WIZARD, needsRestart = False, fnc=(1, CleanupWizard)))
        return list
 
old mode 100755 (executable)
new mode 100644 (file)
index 2c0edf5..b345428
@@ -12,7 +12,7 @@ from ServiceReference import ServiceReference
 from Plugins.Plugin import PluginDescriptor
 from xml.etree.cElementTree import parse as ci_parse
 from Tools.XMLTools import elementsWithTag, mergeText, stringToXML
-from enigma import eDVBCI_UI, eDVBCIInterfaces
+from enigma import eDVBCI_UI, eDVBCIInterfaces, eEnv
 
 from os import system, path as os_path
 
@@ -115,7 +115,7 @@ class CIconfigMenu(Screen):
 
                Screen.__init__(self, session)
                self.ci_slot=ci_slot
-               self.filename="/etc/enigma2/ci"+str(self.ci_slot)+".xml"
+               self.filename = eEnv.resolve("${sysconfdir}/enigma2/ci") + str(self.ci_slot) + ".xml"
 
                self["key_red"] = StaticText(_("Delete"))
                self["key_green"] = StaticText(_("add Service"))
@@ -567,7 +567,7 @@ def activate_all(session):
                        return Len > 0 and definitions[Len-1].text or default   
 
                for ci in range(NUM_CI):
-                       filename="/etc/enigma2/ci"+str(ci)+".xml"
+                       filename = eEnv.resolve("${sysconfdir}/enigma2/ci") + str(ci) + ".xml"
 
                        if not os_path.exists(filename):
                                print "[CI_Activate_Config_CI%d] no config file found" %ci
@@ -636,10 +636,10 @@ def menu(menuid, **kwargs):
 
 def Plugins(**kwargs):
        if config.usage.setup_level.index > 1:
-               return [PluginDescriptor( where = PluginDescriptor.WHERE_SESSIONSTART, fnc = sessionstart ),
-                               PluginDescriptor( where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart ),
-                               PluginDescriptor( name = "CommonInterfaceAssignment", description = _("a gui to assign services/providers/caids to common interface modules"), where = PluginDescriptor.WHERE_MENU, fnc = menu )]
+               return [PluginDescriptor( where = PluginDescriptor.WHERE_SESSIONSTART, needsRestart = False, fnc = sessionstart ),
+                               PluginDescriptor( where = PluginDescriptor.WHERE_AUTOSTART, needsRestart = False, fnc = autostart ),
+                               PluginDescriptor( name = "CommonInterfaceAssignment", description = _("a gui to assign services/providers/caids to common interface modules"), where = PluginDescriptor.WHERE_MENU, needsRestart = False, fnc = menu )]
        else:
-               return [PluginDescriptor( where = PluginDescriptor.WHERE_SESSIONSTART, fnc = sessionstart ),
-                               PluginDescriptor( where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart ),
-                               PluginDescriptor( name = "CommonInterfaceAssignment", description = _("a gui to assign services/providers to common interface modules"), where = PluginDescriptor.WHERE_MENU, fnc = menu )]
+               return [PluginDescriptor( where = PluginDescriptor.WHERE_SESSIONSTART, needsRestart = False, fnc = sessionstart ),
+                               PluginDescriptor( where = PluginDescriptor.WHERE_AUTOSTART, needsRestart = False, fnc = autostart ),
+                               PluginDescriptor( name = "CommonInterfaceAssignment", description = _("a gui to assign services/providers to common interface modules"), where = PluginDescriptor.WHERE_MENU, needsRestart = False, fnc = menu )]
old mode 100755 (executable)
new mode 100644 (file)
index 92c1628..ab74de4
@@ -421,6 +421,6 @@ def selSetup(menuid, **kwargs):
 
 
 def Plugins(**kwargs):
-       return [PluginDescriptor(where = [PluginDescriptor.WHERE_SESSIONSTART, PluginDescriptor.WHERE_AUTOSTART], fnc = autostart),
-               PluginDescriptor(name=_("CrashlogAutoSubmit"), description=_("CrashlogAutoSubmit settings"),where=PluginDescriptor.WHERE_MENU, fnc=selSetup)]
+       return [PluginDescriptor(where = [PluginDescriptor.WHERE_SESSIONSTART, PluginDescriptor.WHERE_AUTOSTART], needsRestart = False, fnc = autostart),
+               PluginDescriptor(name=_("CrashlogAutoSubmit"), description=_("CrashlogAutoSubmit settings"),where=PluginDescriptor.WHERE_MENU, needsRestart = False, fnc=selSetup)]
 
index 4d0a992..d26881e 100644 (file)
@@ -134,4 +134,4 @@ def DefaultServicesScannerMain(session, **kwargs):
        session.open(DefaultServicesScannerPlugin)
 
 def Plugins(**kwargs):
-       return PluginDescriptor(name="Default Services Scanner", description=_("Scans default lamedbs sorted by satellite with a connected dish positioner"), where = PluginDescriptor.WHERE_PLUGINMENU, fnc=DefaultServicesScannerMain)
+       return PluginDescriptor(name="Default Services Scanner", description=_("Scans default lamedbs sorted by satellite with a connected dish positioner"), where = PluginDescriptor.WHERE_PLUGINMENU, needsRestart = False, fnc=DefaultServicesScannerMain)
old mode 100755 (executable)
new mode 100644 (file)
index 5b7edcf..4dcf6c6
@@ -679,5 +679,5 @@ def autostart(reason, **kwargs):
        resourcemanager.addResource("DiseqcTester", DiseqcTesterMain)
 
 def Plugins(**kwargs):
-       return [ PluginDescriptor(name="DiSEqC Tester", description=_("Test DiSEqC settings"), where = PluginDescriptor.WHERE_PLUGINMENU, fnc=DiseqcTesterMain),
-                       PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart)]
+       return [ PluginDescriptor(name="DiSEqC Tester", description=_("Test DiSEqC settings"), where = PluginDescriptor.WHERE_PLUGINMENU, needsRestart = False, fnc=DiseqcTesterMain),
+                       PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, needsRestart = False, fnc = autostart)]
index 38b80c9..6cb30de 100644 (file)
@@ -76,11 +76,11 @@ def Plugins(**kwargs):
        newversion = getUpgradeVersion() or 0
        list = []
        if version is not None and version < newversion:
-               list.append(PluginDescriptor(name="FP Upgrade", where = PluginDescriptor.WHERE_WIZARD, fnc=(8, FPUpgrade)))
+               list.append(PluginDescriptor(name="FP Upgrade", where = PluginDescriptor.WHERE_WIZARD, needsRestart = True, fnc=(8, FPUpgrade)))
 
        try:
                msg = open("/proc/stb/message").read()
-               list.append(PluginDescriptor(name="System Message Check", where = PluginDescriptor.WHERE_WIZARD, fnc=(9, SystemMessage, msg)))
+               list.append(PluginDescriptor(name="System Message Check", where = PluginDescriptor.WHERE_WIZARD, needsRestart = True, fnc=(9, SystemMessage, msg)))
        except:
                pass
 
index b19007c..84cbbcb 100644 (file)
 from Plugins.Plugin import PluginDescriptor
-from twisted.internet.protocol import Protocol, Factory
-from twisted.internet import reactor
 from Components.Harddisk import harddiskmanager
+from Tools.Directories import fileExists
 
 hotplugNotifier = [ ]
+bdpoll = None
 
-class Hotplug(Protocol):
-       def connectionMade(self):
-               self.received = ""
+def processHotplugData(self, v):
+       print "hotplug:", v
+       action = v.get("ACTION")
+       device = v.get("DEVPATH")
+       physdevpath = v.get("PHYSDEVPATH")
+       media_state = v.get("X_E2_MEDIA_STATUS")
 
-       def dataReceived(self, data):
-               self.received += data
+       dev = device.split('/')[-1]
 
-       def connectionLost(self, reason):
-               data = self.received.split('\0')[:-1]
+       if action is not None and action == "add":
+               error, blacklisted, removable, is_cdrom, partitions, medium_found = harddiskmanager.addHotplugPartition(dev, physdevpath)
+               if bdpoll and removable or is_cdrom:
+                       bdpoll.addDevice(dev, is_cdrom, medium_found)
+       elif action is not None and action == "remove":
+               if bdpoll:
+                       bdpoll.removeDevice(dev)
+               harddiskmanager.removeHotplugPartition(dev)
+       elif media_state is not None:
+               if media_state == '1':
+                       harddiskmanager.removeHotplugPartition(dev)
+                       harddiskmanager.addHotplugPartition(dev, physdevpath)
+               elif media_state == '0':
+                       harddiskmanager.removeHotplugPartition(dev)
 
-               v = {}
+       for callback in hotplugNotifier:
+               try:
+                       callback(dev, action or media_state)
+               except AttributeError:
+                       hotplugNotifier.remove(callback)
 
-               for x in data:
-                       i = x.find('=')
-                       var, val = x[:i], x[i+1:]
-                       v[var] = val
+CDROM_DRIVE_STATUS = 0x5326
+CDROM_MEDIA_CHANGED = 0x5325
+CDSL_CURRENT = ((int)(~0>>1))
+CDS_NO_INFO = 0
+CDS_NO_DISC = 1
+CDS_TRAY_OPEN = 2
+CDS_DRIVE_NOT_READY = 3
+CDS_DISC_OK = 4
+ENOMEDIUM = 159
+IOC_NRBITS = 8
+IOC_NRSHIFT = 0
+IOC_TYPESHIFT = (IOC_NRSHIFT+IOC_NRBITS)
+BLKRRPART = ((0x12<<IOC_TYPESHIFT) | (95<<IOC_NRSHIFT))
 
-               print "hotplug:", v
+def autostart(reason, **kwargs):
+       if reason == 0:
+               print "starting hotplug handler"
 
-               action = v.get("ACTION")
-               device = v.get("DEVPATH")
-               physdevpath = v.get("PHYSDEVPATH")
-               media_state = v.get("X_E2_MEDIA_STATUS")
+               if fileExists('/dev/.udev'):
+                       global netlink
+                       global bdpoll
+                       from enigma import eSocketNotifier, eTimer, ePythonMessagePump
+                       import socket
+                       from select import POLLIN, POLLPRI
 
-               dev = device.split('/')[-1]
+                       class Netlink:
+                               def __init__(self):
+                                       self.netlink = socket.socket(socket.AF_NETLINK, socket.SOCK_DGRAM, 15)
+                                       self.netlink.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 65536)
+                                       self.netlink.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 65536)
+                                       self.netlink.bind((0, 1))
+                                       self.sn = eSocketNotifier(self.netlink.fileno(), POLLIN|POLLPRI)
+                                       self.sn.callback.append(self.dataAvail)
 
-               if action is not None and action == "add":
-                       harddiskmanager.addHotplugPartition(dev, physdevpath)
-               elif action is not None and action == "remove":
-                       harddiskmanager.removeHotplugPartition(dev)
-               elif media_state is not None:
-                       if media_state == '1':
-                               harddiskmanager.removeHotplugPartition(dev)
-                               harddiskmanager.addHotplugPartition(dev, physdevpath)
-                       elif media_state == '0':
-                               harddiskmanager.removeHotplugPartition(dev)
-               
-               for callback in hotplugNotifier:
-                       try:
-                               callback(dev, action or media_state)
-                       except AttributeError:
-                               hotplugNotifier.remove(callback)
+                               def dataAvail(self, what):
+                                       received = self.netlink.recvfrom(16384)
+#                                      print "HOTPLUG(%d):" %(what), received
 
-def autostart(reason, **kwargs):
-       if reason == 0:
-               print "starting hotplug handler"
-               factory = Factory()
-               factory.protocol = Hotplug
+                                       data = received[0].split('\0')[:-1]
+                                       v = {}
+
+                                       for x in data:
+                                               i = x.find('=')
+                                               var, val = x[:i], x[i+1:]
+                                               v[var] = val
+
+                                       if v['SUBSYSTEM'] == 'block' and v['ACTION'] in ('add', 'remove'):
+                                               processHotplugData(self, v)
+
+                       from threading import Thread, Semaphore, Lock
+
+                       class ThreadQueue:
+                               def __init__(self):
+                                       self.__list = [ ]
+                                       self.__lock = Lock()
+
+                               def push(self, val):
+                                       list = self.__list
+                                       lock = self.__lock
+                                       lock.acquire()
+                                       list.append(val)
+                                       lock.release()
+
+                               def pop(self):
+                                       list = self.__list
+                                       lock = self.__lock
+                                       lock.acquire()
+                                       ret = list[0]
+                                       del list[0]
+                                       lock.release()
+                                       return ret
 
-               try:
                        import os
-                       os.remove("/tmp/hotplug.socket")
-               except OSError:
-                       pass
+                       import errno
+                       import fcntl
+
+                       class BDPoll(Thread):
+                               CHECK_INTERVAL = 2000
+                               MSG_MEDIUM_REMOVED = 1
+                               MSG_MEDIUM_INSERTED = 2
+                               MSG_POLL_FINISHED = 4
+                               def __init__(self):
+                                       Thread.__init__(self)
+                                       self.__sema = Semaphore(0)
+                                       self.__lock = Lock()
+                                       self.running = False
+                                       self.devices_to_poll = { }
+                                       self.messages = ThreadQueue()
+                                       self.checkTimer = eTimer()
+                                       self.checkTimer.callback.append(self.timeout)
+                                       self.checkTimer.start(BDPoll.CHECK_INTERVAL, True)
+                                       self.mp = ePythonMessagePump()
+                                       self.mp.recv_msg.get().append(self.gotThreadMsg)
+                                       self.start()
+
+                               def gotThreadMsg(self, msg):
+                                       msg = self.messages.pop()
+                                       if msg[0] == BDPoll.MSG_MEDIUM_REMOVED:
+                                               print "MSG_MEDIUM_REMOVED"
+                                               harddiskmanager.removeHotplugPartition(msg[1])
+                                       elif msg[0] == BDPoll.MSG_MEDIUM_INSERTED:
+                                               print "MSG_MEDIUM_INSERTED"
+                                               harddiskmanager.addHotplugPartition(msg[1])
+                                       elif msg[0] == BDPoll.MSG_POLL_FINISHED:
+                                               self.checkTimer.start(BDPoll.CHECK_INTERVAL, True)
+
+                               def timeout(self):
+                                       self.__sema.release() # start bdpoll loop in thread
+
+                               def is_mounted(self, dev):
+                                       mounts = file('/proc/mounts').read()
+                                       return mounts.find(dev) != -1
+
+                               def run(self):
+                                       sema = self.__sema
+                                       lock = self.__lock
+                                       messages = self.messages
+                                       mp = self.mp
+                                       self.running = True
+                                       while self.running:
+                                               sema.acquire()
+                                               self.__lock.acquire()
+                                               devices_to_poll = self.devices_to_poll.items()
+                                               self.__lock.release()
+                                               devices_to_poll_processed = [ ]
+                                               for device, state in devices_to_poll:
+                                                       got_media = False
+                                                       is_cdrom, prev_media_state = state
+                                                       if is_cdrom:
+                                                               try:
+                                                                       fd = os.open("/dev/" + device, os.O_RDONLY | os.O_NONBLOCK | os.O_EXCL)
+                                                               except OSError, err:
+                                                                       if err.errno == errno.EBUSY:
+                                                                               print "open cdrom exclusive failed:",
+                                                                               if not self.is_mounted(device):
+                                                                                       print "not mounted"
+                                                                                       continue
+                                                                               try:
+                                                                                       print "mounted... try non exclusive"
+                                                                                       fd = os.open("/dev/" + device, os.O_RDONLY | os.O_NONBLOCK)
+                                                                               except OSError, err:
+                                                                                       print "open cdrom not exclusive failed", os.strerror(err.errno)
+                                                                                       continue
+                                                               #here the fs must be valid!
+                                                               try:
+                                                                       ret = fcntl.ioctl(fd, CDROM_DRIVE_STATUS, CDSL_CURRENT)
+                                                               except IOError, err:
+                                                                       print "ioctl CDROM_DRIVE_STATUS failed", os.strerror(err.errno)
+                                                               else:
+                                                                       if ret in (CDS_NO_INFO, CDS_NO_DISC, CDS_TRAY_OPEN, CDS_DRIVE_NOT_READY):
+                                                                               pass
+                                                                       elif ret == CDS_DISC_OK:
+                                                                               #todo new kernels support events to userspace event on media change
+                                                                               #but not 2.6.18.... see hotplug-ng bdpoll.c
+                                                                               got_media = True
+                                                               os.close(fd)
+                                                       else:
+                                                               try:
+                                                                       fd = os.open("/dev/" + device, os.O_RDONLY)
+                                                               except OSError, err:
+                                                                       if err.errno == ENOMEDIUM:
+                                                                               pass
+                                                                       else:
+                                                                               print "open non cdrom failed", os.strerror(err.errno)
+                                                                               continue
+                                                               else:
+                                                                       got_media = True
+                                                                       os.close(fd)
+                                                       if prev_media_state:
+                                                               if not got_media:
+                                                                       print "media removal detected on", device
+                                                                       try:
+                                                                               fd = os.open("/dev/" + device, os.O_RDONLY | os.O_NONBLOCK)
+                                                                       except OSError, err:
+                                                                               print "open device for blkrrpart ioctl failed", os.strerror(err.errno)
+                                                                       else:
+                                                                               try:
+                                                                                       fcntl.ioctl(fd, BLKRRPART)
+                                                                               except IOError, err:
+                                                                                       print "ioctl BLKRRPART failed", os.strerror(err.errno)
+                                                                               os.close(fd)
+                                                       else:
+                                                               if got_media:
+                                                                       print "media insertion detected on", device
+                                                       devices_to_poll_processed.append((device, is_cdrom, got_media))
+                                               self.__lock.acquire()
+                                               for device, is_cdrom, state in devices_to_poll_processed:
+                                                       old_state = self.devices_to_poll.get(device)
+                                                       if old_state is not None and old_state[1] != state:
+                                                               msg = state and BDPoll.MSG_MEDIUM_INSERTED or BDPoll.MSG_MEDIUM_REMOVED
+                                                               self.devices_to_poll[device] = (is_cdrom, state)
+                                                               messages.push((msg, device))
+                                                               mp.send(0)
+
+                                               self.__lock.release()
+                                               messages.push((self.MSG_POLL_FINISHED,))
+                                               mp.send(0)
+
+                               def addDevice(self, device, is_cdrom, inserted):
+                                       self.__lock.acquire()
+                                       if device in self.devices_to_poll:
+                                               print "device", device, "already in bdpoll"
+                                       else:
+                                               print "add device", device, "to bdpoll current state:",
+                                               if inserted:
+                                                       print "medium inserted"
+                                               else:
+                                                       print "medium removed"
+                                               self.devices_to_poll[device] = (is_cdrom, inserted)
+                                       self.__lock.release()
+
+                               def removeDevice(self, device):
+                                       self.__lock.acquire()
+                                       if device in self.devices_to_poll:
+                                               print "device", device, "removed from bdpoll"
+                                               del self.devices_to_poll[device]
+                                       else:
+                                               print "try to del not exist device", device, "from bdpoll"
+                                       self.__lock.release()
+
+                       netlink = Netlink()
+                       bdpoll = BDPoll()
+                       for blockdev, removable, is_cdrom, medium_found in harddiskmanager.devices_scanned_on_init:
+                               if removable or is_cdrom:
+                                       bdpoll.addDevice(blockdev, is_cdrom, medium_found)
+               else:
+                       from twisted.internet.protocol import Protocol, Factory
+                       from twisted.internet import reactor
+
+                       try:
+                               import os
+                               os.remove("/tmp/hotplug.socket")
+                       except OSError:
+                               pass
+
+                       class Hotplug(Protocol):
+                               def connectionMade(self):
+                                       print "HOTPLUG connection!"
+                                       self.received = ""
+
+                               def dataReceived(self, data):
+                                       print "hotplug:", data
+                                       self.received += data
+                                       print "complete", self.received
+
+                               def connectionLost(self, reason):
+                                       print "HOTPLUG connection lost!"
+                                       data = self.received.split('\0')[:-1]
+                                       v = {}
+
+                                       for x in data:
+                                               i = x.find('=')
+                                               var, val = x[:i], x[i+1:]
+                                               v[var] = val
+
+                                       processHotplugData(self, v)
 
-               reactor.listenUNIX("/tmp/hotplug.socket", factory)
+                       factory = Factory()
+                       factory.protocol = Hotplug
+                       reactor.listenUNIX("/tmp/hotplug.socket", factory)
 
 def Plugins(**kwargs):
-       return PluginDescriptor(name = "Hotplug", description = "listens to hotplug events", where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart)
+       return PluginDescriptor(name = "Hotplug", description = "listens to hotplug events", where = PluginDescriptor.WHERE_AUTOSTART, needsRestart = True, fnc = autostart)
index 296d3bc..85ecc92 100644 (file)
@@ -16,7 +16,7 @@ from Components.MultiContent import MultiContentEntryText
 from Components.ScrollLabel import ScrollLabel
 from Components.Harddisk import harddiskmanager
 from Components.Task import Task, Job, job_manager, Condition
-from Tools.Directories import fileExists, isMount
+from Tools.Directories import fileExists, isMount, resolveFilename, SCOPE_HDD, SCOPE_MEDIA
 from Tools.HardwareInfo import HardwareInfo
 from Tools.Downloader import downloadWithProgress
 from enigma import eConsoleAppContainer, gFont, RT_HALIGN_LEFT, RT_HALIGN_CENTER, RT_VALIGN_CENTER, RT_WRAP, eTimer
@@ -391,7 +391,7 @@ class NFIDownload(Screen):
                
                self.box = HardwareInfo().get_device_name()
                self.feed_base = "http://www.dreamboxupdate.com/opendreambox" #/1.5/%s/images/" % self.box      
-               self.usbmountpoint = "/mnt/usb/"
+               self.usbmountpoint = resolveFilename(SCOPE_MEDIA)+"usb/"
 
                self.menulist = []
 
@@ -570,7 +570,7 @@ class NFIDownload(Screen):
 
        def ackedDestination(self):
                print "[ackedDestination]", self.branch, self.target_dir
-               self.container.setCWD("/mnt")
+               self.container.setCWD(resolveFilename(SCOPE_MEDIA)+"usb/")
                if self.target_dir[:8] == "/autofs/":
                        self.target_dir = "/dev/" + self.target_dir[8:-1]
 
@@ -792,13 +792,14 @@ If you already have a prepared bootable USB stick, please insert it now. Otherwi
                self.umountCallback()
 
 def main(session, **kwargs):
-       session.open(NFIDownload,"/home/root")
+       session.open(NFIDownload,resolveFilename(SCOPE_HDD))
 
 def filescan_open(list, session, **kwargs):
        dev = "/dev/" + (list[0].path).rsplit('/',1)[0][7:]
-       print "mounting device " + dev + " to /mnt/usb..."
-       system("mount "+dev+" /mnt/usb/ -o rw,sync")
-       session.open(NFIDownload,"/mnt/usb/")
+       print "mounting device " + dev + " to /media/usb..."
+       usbmountpoint = resolveFilename(SCOPE_MEDIA)+"usb/"
+       system("mount %s %s -o rw,sync" % (dev, usbmountpoint))
+       session.open(NFIDownload,usbmountpoint)
 
 def filescan(**kwargs):
        from Components.Scanner import Scanner, ScanPath
index ba96c07..3504d4c 100755 (executable)
@@ -14,7 +14,7 @@ from Screens.TaskView import JobView
 from Tools.Directories import fileExists
 from Tools.HardwareInfo import HardwareInfo
 from os import system
-from enigma import eConsoleAppContainer, quitMainloop
+from enigma import eConsoleAppContainer, quitMainloop, eEnv
 from Components.About import about
 
 class md5Postcondition(Condition):
@@ -51,7 +51,7 @@ class md5verify(Task):
 class writeNAND(Task):
        def __init__(self, job, param, box):
                Task.__init__(self,job, ("Writing image file to NAND Flash"))
-               self.setTool("/usr/lib/enigma2/python/Plugins/SystemPlugins/NFIFlash/writenfi-mipsel-2.6.18-r1")
+               self.setTool(eEnv.resolve("${libdir}/enigma2/python/Plugins/SystemPlugins/NFIFlash/writenfi-mipsel-2.6.18-r1"))
                if box == "dm7025":
                        self.end = 256
                elif box[:5] == "dm800":
@@ -226,4 +226,4 @@ class NFIFlash(Screen):
                if self.job.status == self.job.FINISHED:
                        self["status"].text = ("rebooting...")
                        from os import system
-                       system("/usr/lib/enigma2/python/Plugins/SystemPlugins/NFIFlash/kill_e2_reboot.sh")
+                       system(eEnv.resolve("${libdir}/enigma2/python/Plugins/SystemPlugins/NFIFlash/kill_e2_reboot.sh"))
old mode 100755 (executable)
new mode 100644 (file)
index 1eba1dd..b654476
@@ -20,6 +20,7 @@ def Plugins(**kwargs):
                description=_("Download .NFI-Files for USB-Flasher"),
                icon = "flash.png",
                where = PluginDescriptor.WHERE_SOFTWAREMANAGER,
+               needsRestart = False,
                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)]
+               PluginDescriptor(name="nfi", where = PluginDescriptor.WHERE_FILESCAN, needsRestart = False, fnc = filescan)]
index d7e8307..cb954bb 100755 (executable)
@@ -4,31 +4,10 @@ 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 Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
 from enigma import eTimer
-
-config.misc.firstrun = ConfigBoolean(default = True)
-list = []
-list.append("WEP")
-list.append("WPA")
-list.append("WPA2")
-list.append("WPA/WPA2")
-
-weplist = []
-weplist.append("ASCII")
-weplist.append("HEX")
-
-config.plugins.wlan = ConfigSubsection()
-config.plugins.wlan.essid = NoSave(ConfigText(default = "home", fixed_size = False))
-config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = "home", fixed_size = False))
-
-config.plugins.wlan.encryption = ConfigSubsection()
-config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = False))
-config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = "WPA/WPA2" ))
-config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
-config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewlan", fixed_size = False))
+from os import system
 
 class NetworkWizard(WizardLanguage, Rc):
        skin = """
@@ -65,8 +44,9 @@ class NetworkWizard(WizardLanguage, Rc):
                self.Adapterlist = None
                self.InterfaceState = None
                self.isInterfaceUp = None
-               self.WlanPluginInstalled = None
+               self.WlanPluginInstalled = False
                self.ap = None
+               self.w = None
                if interface is not None:
                        self.selectedInterface = interface
                else:
@@ -77,11 +57,9 @@ class NetworkWizard(WizardLanguage, Rc):
                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.originalInterfaceState = {}
                self.originalInterfaceStateChanged = False
                self.Text = None
                self.rescanTimer = eTimer()
@@ -95,65 +73,64 @@ class NetworkWizard(WizardLanguage, Rc):
                        self.close()
                
        def markDone(self):
-               self.rescanTimer.stop()
+               self.stopScan()
                del self.rescanTimer
                self.checkOldInterfaceState()
                pass
 
-       def getInstalledInterfaceCount(self):
+       def back(self):
+               self.stopScan()
+               self.ap = None
+               WizardLanguage.back(self)
+               
+       def stopScan(self):
                self.rescanTimer.stop()
+               if self.w is not None:
+                       from Plugins.SystemPlugins.WirelessLan.Wlan import iWlan
+                       iWlan.stopGetNetworkList()
+                       self.w = None
+
+       def getInstalledInterfaceCount(self):
+               self.originalInterfaceState = {}
                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')
+               for interface in iNetwork.getAdapterList():
+                       self.originalInterfaceState[interface] = {}
+                       self.originalInterfaceState[interface]["up"] = iNetwork.getAdapterAttribute(interface, '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'
+               if self.selectedInterface is None:
+                       if self.InstalledInterfaceCount <= 1:
+                               if not iNetwork.isWirelessInterface(self.selectedInterface):
+                                       self.NextStep = 'nwconfig'
+                               else:
+                                       self.NextStep = 'asknetworktype'
+                               self.checkInterface(self.selectedInterface)
                        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 = 'selectinterface'
+                               self.currStep = self.getStepWithID(self.NextStep)
+                               self.afterAsyncCode()
+               else:
+                       if not iNetwork.isWirelessInterface(self.selectedInterface):
                                self.NextStep = 'nwconfig'
                        else:
-                               self.NextStep = 'scanwlan'
+                               self.NextStep = 'asknetworktype'
                        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')
+               if self.originalInterfaceStateChanged is False:
+                       for interface in self.originalInterfaceState.keys():
+                               if interface == self.selectedInterface:
+                                       if self.originalInterfaceState[interface]["up"] is False:
+                                               if iNetwork.checkforInterface(interface) is True:
+                                                       system("ifconfig " + interface + " down")
 
        def listInterfaces(self):
-               self.rescanTimer.stop()
                self.checkOldInterfaceState()
                list = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()]
                list.append((_("Exit network wizard"), "end"))
@@ -169,13 +146,13 @@ class NetworkWizard(WizardLanguage, Rc):
                elif index == 'eth0':
                        self.NextStep = 'nwconfig'
                else:
-                       self.NextStep = 'scanwlan'
+                       self.NextStep = 'asknetworktype'
 
        def InterfaceSelectionMoved(self):
                self.InterfaceSelect(self.selection)
                
        def checkInterface(self,iface):
-               self.rescanTimer.stop()
+               self.stopScan()
                if self.Adapterlist is None:
                        self.Adapterlist = iNetwork.getAdapterList()
                if self.NextStep is not 'end':
@@ -183,7 +160,7 @@ class NetworkWizard(WizardLanguage, Rc):
                                #Reset Network to defaults if network broken
                                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.getInstalledAdapters():
                                if iface in iNetwork.configuredNetworkAdapters and len(iNetwork.configuredNetworkAdapters) == 1:
                                        if iNetwork.getAdapterAttribute(iface, 'up') is True:
                                                self.isInterfaceUp = True
@@ -232,7 +209,7 @@ class NetworkWizard(WizardLanguage, Rc):
 
        def AdapterSetupEndCB(self,data):
                if data is True:
-                       if self.selectedInterface in ('wlan0', 'ath0'):
+                       if iNetwork.isWirelessInterface(self.selectedInterface):
                                if self.WlanPluginInstalled == True:
                                        from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
                                        iStatus.getDataForInterface(self.selectedInterface,self.checkWlanStateCB)
@@ -255,7 +232,7 @@ class NetworkWizard(WizardLanguage, Rc):
                        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"
+                                       text2 = _('Accesspoint:') + "\t" + str(status[self.selectedInterface]["accesspoint"]) + "\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"
@@ -265,7 +242,7 @@ class NetworkWizard(WizardLanguage, Rc):
                                        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":
+                                       if str(status[self.selectedInterface]["accesspoint"]) == "Not-Associated":
                                                self.InterfaceState = False
                                        self.afterAsyncCode()
 
@@ -275,7 +252,7 @@ class NetworkWizard(WizardLanguage, Rc):
 
        def checkNetworkCB(self,data):
                if data is True:
-                       if self.selectedInterface in ('wlan0', 'ath0'):
+                       if iNetwork.isWirelessInterface(self.selectedInterface):
                                if self.WlanPluginInstalled == True:
                                        from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
                                        iStatus.getDataForInterface(self.selectedInterface,self.checkWlanStateCB)
@@ -310,96 +287,74 @@ class NetworkWizard(WizardLanguage, Rc):
                                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 len(self.newAPlist):
                        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
+                               if currentListEntry is not None:
+                                       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)
+                               if newListIndex is not None:
+                                       self["list"].setIndex(newListIndex)
                                self["list"].updateList(self.newAPlist)
 
        def listAccessPoints(self):
                self.APList = []
-               try:
-                       from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan
-               except ImportError:
-                       self.APList.append( ( _("No networks found"),_("unavailable") ) )
-                       return self.APList
+               if self.WlanPluginInstalled is False:
+                       self.APList.append( ( _("No networks found"), None ) )
                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]) )
-       
-                               if "hidden..." not in self.APList:
-                                       self.APList.append(( _("enter hidden network SSID"), "hidden..." ))
+                       from Plugins.SystemPlugins.WirelessLan.Wlan import iWlan
+                       iWlan.setInterface(self.selectedInterface)
+                       self.w = iWlan.getInterface()
+                       aps = iWlan.getNetworkList()
+                       if aps is not None:
+                               print "[NetworkWizard.py] got Accespoints!"
+                               tmplist = []
+                               complist = []
+                               for ap in aps:
+                                       a = aps[ap]
+                                       if a['active']:
+                                               tmplist.append( (a['bssid'], a['essid']) )
+                                               complist.append( (a['bssid'], a['essid']) )
+                               
+                               for entry in tmplist:
+                                       if entry[1] == "":
+                                               for compentry in complist:
+                                                       if compentry[0] == entry[0]:
+                                                               complist.remove(compentry)
+                               for entry in complist:
+                                       self.APList.append( (entry[1], entry[1]) )
+                       if not len(aps):
+                               self.APList.append( ( _("No networks found"), None ) )
                        
-                               self.rescanTimer.start(3000)
-                               return self.APList
+               self.rescanTimer.start(4000)
+               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)
+               self.ap = self.selection
+               self.NextStep = 'wlanconfig'
 
        def checkWlanSelection(self):
-               self.rescanTimer.stop()
+               self.stopScan()
                self.currStep = self.getStepWithID(self.NextStep)
 
        def isWlanPluginInstalled(self):
                try:
-                       from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan
+                       from Plugins.SystemPlugins.WirelessLan.Wlan import iWlan
                except ImportError:
                        self.WlanPluginInstalled = False
                else:
                        self.WlanPluginInstalled = True
 
        def listChoices(self):
-               self.rescanTimer.stop()
+               self.stopScan()
                list = []
                if self.WlanPluginInstalled == True:
                        list.append((_("Configure your wireless LAN again"), "scanwlan"))
@@ -417,8 +372,7 @@ class NetworkWizard(WizardLanguage, Rc):
                        self.selectedInterface = "eth0"
                        self.NextStep = 'nwconfig'
                else:
-                       self.NextStep = 'scanwlan'
+                       self.NextStep = 'asknetworktype'
 
        def ChoicesSelectionMoved(self):
                pass
-
index c430043..0b3a298 100755 (executable)
@@ -87,13 +87,33 @@ self.selectKey("DOWN")
                         <listentry caption="Exit network wizard" step="end" />
                 </list>
         </step>
+
+        <step id="asknetworktype">
+               <condition>
+self.condition = (self.isInterfaceUp == True and self.WlanPluginInstalled == True)
+               </condition>
+                <text value="Wireless network connection setup." />
+                <displaytext value="Wireless network connection setup" />
+                <code>
+self.clearSelectedKeys()
+self.selectKey("OK")
+self.selectKey("UP")
+self.selectKey("DOWN")
+                </code>
+                <list>
+                        <listentry caption="List available networks" step="scanwlan" />
+                        <listentry caption="Manual configuration" step="wlanconfig" />
+                        <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="listAccessPoints" evaluation="AccessPointsSelectionMade" onselect="AccessPointsSelectionMoved" />
+                <list type="dynamic" source="listAccessPoints" onselect="AccessPointsSelectionMoved" />
                 <code>
 self.clearSelectedKeys()
 self.selectKey("OK")
@@ -138,7 +158,7 @@ self.selectKey("DOWN")
         <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" />
+                <config screen="AdapterSetup" module="NetworkSetup" args="(self.selectedInterface,self.ap)" type="ConfigList" />
                 <code>
 self.clearSelectedKeys()
 self.selectKey("OK")
@@ -196,4 +216,3 @@ self.selectKey("OK")
         </step>
 </wizard>
 
-
old mode 100755 (executable)
new mode 100644 (file)
index 49ec7da..30a2423
@@ -1,6 +1,8 @@
 from Screens.Screen import Screen
 from Plugins.Plugin import PluginDescriptor
-from Components.config import getConfigListEntry, config
+from Components.config import getConfigListEntry, config, ConfigBoolean
+
+config.misc.firstrun = ConfigBoolean(default = True)
 
 def NetworkWizardMain(session, **kwargs):
        session.open(NetworkWizard)
@@ -18,5 +20,5 @@ def NetworkWizard(*args, **kwargs):
 def Plugins(**kwargs):
        list = []
        if config.misc.firstrun.value:
-               list.append(PluginDescriptor(name=_("Network Wizard"), where = PluginDescriptor.WHERE_WIZARD, fnc=(25, NetworkWizard)))
+               list.append(PluginDescriptor(name=_("Network Wizard"), where = PluginDescriptor.WHERE_WIZARD, needsRestart = False, fnc=(25, NetworkWizard)))
        return list
index c721638..22e5436 100644 (file)
@@ -10,7 +10,7 @@ from os import popen
 
 class Upgrade(Screen):
        skin = """
-               <screen position="100,100" size="550,400" title="IPKG upgrade..." >
+               <screen position="100,100" size="550,400" title="opkg upgrade..." >
                        <widget name="text" position="0,0" size="550,400" font="Regular;15" />
                </screen>"""
                
@@ -39,7 +39,7 @@ class Upgrade(Screen):
                        self.close()
        
        def doUpdateDelay(self):
-               lines = popen("ipkg update && ipkg upgrade -force-defaults -force-overwrite", "r").readlines()
+               lines = popen("opkg update && opkg upgrade -force-defaults -force-overwrite", "r").readlines()
                string = ""
                for x in lines:
                        string += x
@@ -87,7 +87,7 @@ class PacketList(GUIComponent):
 
 class Ipkg(Screen):
        skin = """
-               <screen position="100,100" size="550,400" title="IPKG upgrade..." >
+               <screen position="100,100" size="550,400" title="opkg upgrade..." >
                        <widget name="list" position="0,0" size="550,400" scrollbarMode="showOnDemand" />
                </screen>"""
                
@@ -109,13 +109,13 @@ class Ipkg(Screen):
                
 
        def fillPacketList(self):
-               lines = popen("ipkg list", "r").readlines()
+               lines = popen("opkg list", "r").readlines()
                packetlist = []
                for x in lines:
                        split = x.split(' - ')
                        packetlist.append([split[0].strip(), split[1].strip()])
                
-               lines = popen("ipkg list_installed", "r").readlines()
+               lines = popen("opkg list_installed", "r").readlines()
                
                installedlist = {}
                for x in lines:
@@ -138,7 +138,7 @@ class Ipkg(Screen):
                        self.close()
        
        def doUpdateDelay(self):
-               lines = popen("ipkg update && ipkg upgrade", "r").readlines()
+               lines = popen("opkg update && opkg upgrade", "r").readlines()
                string = ""
                for x in lines:
                        string += x
@@ -161,4 +161,4 @@ def IpkgMain(session, **kwargs):
 
 def Plugins(**kwargs):
        return [PluginDescriptor(name="Old Softwareupdate", description="Updates your receiver's software", icon="update.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=UpgradeMain),
-                       PluginDescriptor(name="IPKG", description="IPKG frontend", icon="update.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=IpkgMain)]
+                       PluginDescriptor(name="opkg", description="opkg frontend", icon="update.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=IpkgMain)]
index 3cc9e75..e097117 100644 (file)
@@ -441,15 +441,15 @@ class TunerScreen(ScanSetup):
                                self.scan_sat.system.value = eDVBFrontendParametersSatellite.System_DVB_S
                        self.list.append(getConfigListEntry(_('Frequency'), self.scan_sat.frequency))
                        self.list.append(getConfigListEntry(_('Inversion'), self.scan_sat.inversion))
-                       self.list.append(getConfigListEntry(_('Symbol Rate'), self.scan_sat.symbolrate))
-                       self.list.append(getConfigListEntry(_("Polarity"), self.scan_sat.polarization))
+                       self.list.append(getConfigListEntry(_('Symbol rate'), self.scan_sat.symbolrate))
+                       self.list.append(getConfigListEntry(_('Polarization'), self.scan_sat.polarization))
                        if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S:
                                self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
                        elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2:
                                self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2))
                                self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation)
                                self.list.append(self.modulationEntry)
-                               self.list.append(getConfigListEntry(_('Rolloff'), self.scan_sat.rolloff))
+                               self.list.append(getConfigListEntry(_('Roll-off'), self.scan_sat.rolloff))
                                self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot))
                elif tuning.type.value == "predefined_transponder":
                        self.list.append(getConfigListEntry(_("Transponder"), tuning.transponder))
@@ -608,6 +608,6 @@ def PositionerSetupStart(menuid, **kwargs):
 
 def Plugins(**kwargs):
        if (nimmanager.hasNimType("DVB-S")):
-               return PluginDescriptor(name=_("Positioner setup"), description="Setup your positioner", where = PluginDescriptor.WHERE_MENU, fnc=PositionerSetupStart)
+               return PluginDescriptor(name=_("Positioner setup"), description="Setup your positioner", where = PluginDescriptor.WHERE_MENU, needsRestart = False, fnc=PositionerSetupStart)
        else:
                return []
index ec472e7..3a8c75c 100644 (file)
@@ -71,6 +71,6 @@ def SecSetupStart(menuid):
 
 def Plugins(**kwargs):
        if (nimmgr.hasNimType("DVB-S")):
-               return PluginDescriptor(name=_("Satellite Equipment Setup"), description="Setup your satellite equipment", where = PluginDescriptor.WHERE_MENU, fnc=SecSetupStart)
+               return PluginDescriptor(name=_("Satellite Equipment Setup"), description="Setup your satellite equipment", where = PluginDescriptor.WHERE_MENU, needsRestart = False, fnc=SecSetupStart)
        else:
                return []
index d4fe6b5..e611ca5 100644 (file)
@@ -79,15 +79,15 @@ class Satfinder(ScanSetup):
                                self.scan_sat.system.value = eDVBFrontendParametersSatellite.System_DVB_S
                        self.list.append(getConfigListEntry(_('Frequency'), self.scan_sat.frequency))
                        self.list.append(getConfigListEntry(_('Inversion'), self.scan_sat.inversion))
-                       self.list.append(getConfigListEntry(_('Symbol Rate'), self.scan_sat.symbolrate))
-                       self.list.append(getConfigListEntry(_("Polarity"), self.scan_sat.polarization))
+                       self.list.append(getConfigListEntry(_('Symbol rate'), self.scan_sat.symbolrate))
+                       self.list.append(getConfigListEntry(_('Polarization'), self.scan_sat.polarization))
                        if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S:
                                self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
                        elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2:
                                self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2))
                                self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation)
                                self.list.append(self.modulationEntry)
-                               self.list.append(getConfigListEntry(_('Rolloff'), self.scan_sat.rolloff))
+                               self.list.append(getConfigListEntry(_('Roll-off'), self.scan_sat.rolloff))
                                self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot))
                elif self.tuning_transponder and self.tuning_type.value == "predefined_transponder":
                        self.list.append(getConfigListEntry(_("Transponder"), self.tuning_transponder))
@@ -276,6 +276,6 @@ def SatfinderStart(menuid, **kwargs):
 
 def Plugins(**kwargs):
        if (nimmanager.hasNimType("DVB-S")):
-               return PluginDescriptor(name=_("Satfinder"), description="Helps setting up your dish", where = PluginDescriptor.WHERE_MENU, fnc=SatfinderStart)
+               return PluginDescriptor(name=_("Satfinder"), description="Helps setting up your dish", where = PluginDescriptor.WHERE_MENU, needsRestart = False, fnc=SatfinderStart)
        else:
                return []
old mode 100755 (executable)
new mode 100644 (file)
index 997b957..fd2b5e1
@@ -12,12 +12,13 @@ from Plugins.Plugin import PluginDescriptor
 from Components.config import config
 from Tools.Directories import resolveFilename, SCOPE_PLUGINS
 from os import path, walk
+from enigma import eEnv
 
 class SkinSelector(Screen):
        # for i18n:
        # _("Choose your Skin")
        skinlist = []
-       root = "/usr/share/enigma2/"
+       root = eEnv.resolve("${datadir}/enigma2/")
 
        def __init__(self, session, args = None):
 
@@ -130,4 +131,4 @@ def SkinSelSetup(menuid, **kwargs):
                return []
 
 def Plugins(**kwargs):
-       return PluginDescriptor(name="Skinselector", description="Select Your Skin", where = PluginDescriptor.WHERE_MENU, fnc=SkinSelSetup)
+       return PluginDescriptor(name="Skinselector", description="Select Your Skin", where = PluginDescriptor.WHERE_MENU, needsRestart = False, fnc=SkinSelSetup)
index 7bd7d7a..c7c143f 100755 (executable)
@@ -11,16 +11,15 @@ from Components.config import config
 from Components.ConfigList import ConfigList,ConfigListScreen
 from Components.FileList import MultiFileSelectList
 from Plugins.Plugin import PluginDescriptor
-from enigma import eTimer
+from enigma import eTimer, eEnv
 from Tools.Directories import *
 from os import popen, path, makedirs, listdir, access, stat, rename, remove, W_OK, R_OK
 from time import gmtime, strftime, localtime
 from datetime import date
 
-
 config.plugins.configurationbackup = ConfigSubsection()
 config.plugins.configurationbackup.backuplocation = ConfigText(default = '/media/hdd/', visible_width = 50, fixed_size = False)
-config.plugins.configurationbackup.backupdirs = ConfigLocations(default=['/etc/enigma2/', '/etc/network/interfaces', '/etc/wpa_supplicant.conf', '/etc/resolv.conf', '/etc/default_gw', '/etc/hostname'])
+config.plugins.configurationbackup.backupdirs = ConfigLocations(default=[eEnv.resolve('${sysconfdir}/enigma2/'), '/etc/network/interfaces', '/etc/wpa_supplicant.conf', '/etc/wpa_supplicant.ath0.conf', '/etc/wpa_supplicant.wlan0.conf', '/etc/resolv.conf', '/etc/default_gw', '/etc/hostname'])
 
 def getBackupPath():
        backuppath = config.plugins.configurationbackup.backuplocation.value
@@ -268,7 +267,7 @@ class RestoreMenu(Screen):
                        self.sel = self["filelist"].getCurrent()
                        if self.sel:
                                self.val = self.path + "/" + self.sel
-                               self.session.openWithCallback(self.startDelete, MessageBox, _("Are you sure you want to delete\nfollowing backup:\n" + self.sel ))
+                               self.session.openWithCallback(self.startDelete, MessageBox, _("Are you sure you want to delete\nfollowing backup:\n") + self.sel)
 
        def startDelete(self, ret = False):
                if (ret == True):
index 1797e4f..3ea787c 100755 (executable)
@@ -9,13 +9,15 @@ from Plugins.Plugin import PluginDescriptor
 from Tools.Directories import fileExists, resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
 from Components.Pixmap import Pixmap, MovingPixmap, MultiPixmap
 from os import popen, path, makedirs, listdir, access, stat, rename, remove, W_OK, R_OK
+from enigma import eEnv
 
 from Components.config import config, getConfigListEntry, ConfigSubsection, ConfigText, ConfigLocations, ConfigBoolean
 from Components.Harddisk import harddiskmanager
+
 config.misc.firstrun = ConfigBoolean(default = True)
 config.plugins.configurationbackup = ConfigSubsection()
 config.plugins.configurationbackup.backuplocation = ConfigText(default = '/media/hdd/', visible_width = 50, fixed_size = False)
-config.plugins.configurationbackup.backupdirs = ConfigLocations(default=['/etc/enigma2/', '/etc/network/interfaces', '/etc/wpa_supplicant.conf'])
+config.plugins.configurationbackup.backupdirs = ConfigLocations(default=[eEnv.resolve('${sysconfdir}/enigma2/'), '/etc/network/interfaces', '/etc/wpa_supplicant.conf', '/etc/wpa_supplicant.ath0.conf', '/etc/wpa_supplicant.wlan0.conf', '/etc/resolv.conf', '/etc/default_gw', '/etc/hostname'])
 
 
 backupfile = "enigma2settingsbackup.tar.gz"
index ee0bec7..ec2f82c 100755 (executable)
@@ -9,9 +9,10 @@ from Components.Ipkg import IpkgComponent
 from Components.Network import iNetwork
 from Tools.Directories import pathExists, fileExists, resolveFilename, SCOPE_METADIR
 from Tools.HardwareInfo import HardwareInfo
-import sha
-
+import hashlib
 from time import time
+from os import urandom
+
 rootkey = ['\x9f', '|', '\xe4', 'G', '\xc9', '\xb4', '\xf4', '#', '&', '\xce', '\xb3', '\xfe', '\xda', '\xc9', 'U', '`', '\xd8', '\x8c', 's', 'o', '\x90', '\x9b', '\\', 'b', '\xc0', '\x89', '\xd1', '\x8c', '\x9e', 'J', 'T', '\xc5', 'X', '\xa1', '\xb8', '\x13', '5', 'E', '\x02', '\xc9', '\xb2', '\xe6', 't', '\x89', '\xde', '\xcd', '\x9d', '\x11', '\xdd', '\xc7', '\xf4', '\xe4', '\xe4', '\xbc', '\xdb', '\x9c', '\xea', '}', '\xad', '\xda', 't', 'r', '\x9b', '\xdc', '\xbc', '\x18', '3', '\xe7', '\xaf', '|', '\xae', '\x0c', '\xe3', '\xb5', '\x84', '\x8d', '\r', '\x8d', '\x9d', '2', '\xd0', '\xce', '\xd5', 'q', '\t', '\x84', 'c', '\xa8', ')', '\x99', '\xdc', '<', '"', 'x', '\xe8', '\x87', '\x8f', '\x02', ';', 'S', 'm', '\xd5', '\xf0', '\xa3', '_', '\xb7', 'T', '\t', '\xde', '\xa7', '\xf1', '\xc9', '\xae', '\x8a', '\xd7', '\xd2', '\xcf', '\xb2', '.', '\x13', '\xfb', '\xac', 'j', '\xdf', '\xb1', '\x1d', ':', '?']
 
 def bin2long(s):
@@ -30,7 +31,7 @@ def decrypt_block(src, mod):
        if len(src) != 128 and len(src) != 202:
                return None
        dest = rsa_pub1024(src[:128], mod)
-       hash = sha.new(dest[1:107])
+       hash = hashlib.sha1(dest[1:107])
        if len(src) == 202:
                hash.update(src[131:192])       
        result = hash.digest()
@@ -46,10 +47,12 @@ def validate_cert(cert, key):
 
 def read_random():
        try:
-               fd = open("/dev/urandom", "r")
-               buf = fd.read(8)
-               fd.close()
-               return buf
+               xor = lambda a,b: ''.join(chr(ord(c)^ord(d)) for c,d in zip(a,b*100))
+               random = urandom(8)
+               x = str(time())[-8:]
+               result = xor(random, x)
+                               
+               return result
        except:
                return None
 
@@ -205,7 +208,7 @@ class SoftwareTools(DreamInfoHandler):
                if self.list_updating:
                        if not self.UpdateConsole:
                                self.UpdateConsole = Console()
-                       cmd = "ipkg list"
+                       cmd = "opkg list"
                        self.UpdateConsole.ePopen(cmd, self.IpkgListAvailableCB, callback)
 
        def IpkgListAvailableCB(self, result, retval, extra_args = None):
@@ -241,7 +244,7 @@ class SoftwareTools(DreamInfoHandler):
                        if self.NetworkConnectionAvailable == True:
                                if not self.UpdateConsole:
                                        self.UpdateConsole = Console()
-                               cmd = "ipkg install enigma2-meta enigma2-plugins-meta enigma2-skins-meta"
+                               cmd = "opkg install enigma2-meta enigma2-plugins-meta enigma2-skins-meta enigma2-drivers-meta"
                                self.UpdateConsole.ePopen(cmd, self.InstallMetaPackageCB, callback)
                        else:
                                self.InstallMetaPackageCB(True)
@@ -264,13 +267,12 @@ class SoftwareTools(DreamInfoHandler):
                                                callback(False)
 
        def startIpkgListInstalled(self, callback = None):
-               print "STARTIPKGLISTINSTALLED"
                if callback is not None:
                        self.list_updating = True
                if self.list_updating:
                        if not self.UpdateConsole:
                                self.UpdateConsole = Console()
-                       cmd = "ipkg list_installed"
+                       cmd = "opkg list-installed"
                        self.UpdateConsole.ePopen(cmd, self.IpkgListInstalledCB, callback)
 
        def IpkgListInstalledCB(self, result, retval, extra_args = None):
@@ -331,7 +333,7 @@ class SoftwareTools(DreamInfoHandler):
        def startIpkgUpdate(self, callback = None):
                if not self.Console:
                        self.Console = Console()
-               cmd = "ipkg update"
+               cmd = "opkg update"
                self.Console.ePopen(cmd, self.IpkgUpdateCB, callback)
 
        def IpkgUpdateCB(self, result, retval, extra_args = None):
@@ -344,6 +346,7 @@ class SoftwareTools(DreamInfoHandler):
                                                callback = None
 
        def cleanupSoftwareTools(self):
+               self.list_updating = False
                if self.NotifierCallback is not None:
                        self.NotifierCallback = None
                self.ipkg.stop()
@@ -366,4 +369,4 @@ class SoftwareTools(DreamInfoHandler):
                                return False
                return True
 
-iSoftwareTools = SoftwareTools()
\ No newline at end of file
+iSoftwareTools = SoftwareTools()
old mode 100755 (executable)
new mode 100644 (file)
index 00608ee..12fd609
@@ -28,7 +28,7 @@ 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 Tools.NumericalTextInput import NumericalTextInput
-from enigma import eTimer, quitMainloop, RT_HALIGN_LEFT, RT_VALIGN_CENTER, eListboxPythonMultiContent, eListbox, gFont, getDesktop, ePicLoad, eRCInput, getPrevAsciiCode
+from enigma import eTimer, quitMainloop, RT_HALIGN_LEFT, RT_VALIGN_CENTER, eListboxPythonMultiContent, eListbox, gFont, getDesktop, ePicLoad, eRCInput, getPrevAsciiCode, eEnv
 from cPickle import dump, load
 from os import path as os_path, system as os_system, unlink, stat, mkdir, popen, makedirs, listdir, access, rename, remove, W_OK, R_OK, F_OK
 from time import time, gmtime, strftime, localtime
@@ -43,10 +43,10 @@ from SoftwareTools import iSoftwareTools
 
 config.plugins.configurationbackup = ConfigSubsection()
 config.plugins.configurationbackup.backuplocation = ConfigText(default = '/media/hdd/', visible_width = 50, fixed_size = False)
-config.plugins.configurationbackup.backupdirs = ConfigLocations(default=['/etc/enigma2/', '/etc/network/interfaces', '/etc/wpa_supplicant.conf', '/etc/resolv.conf', '/etc/default_gw', '/etc/hostname'])
+config.plugins.configurationbackup.backupdirs = ConfigLocations(default=[eEnv.resolve('${sysconfdir}/enigma2/'), '/etc/network/interfaces', '/etc/wpa_supplicant.conf', '/etc/wpa_supplicant.ath0.conf', '/etc/wpa_supplicant.wlan0.conf', '/etc/resolv.conf', '/etc/default_gw', '/etc/hostname'])
 
-config.plugins.SoftwareManager = ConfigSubsection()
-config.plugins.SoftwareManager.overwriteConfigFiles = ConfigSelection(
+config.plugins.softwaremanager = ConfigSubsection()
+config.plugins.softwaremanager.overwriteConfigFiles = ConfigSelection(
                                [
                                 ("Y", _("Yes, always")),
                                 ("N", _("No, never")),                          
@@ -261,9 +261,6 @@ class UpdatePluginMenu(Screen):
                                        for x in parts:
                                                if not access(x[1], F_OK|R_OK|W_OK) or x[1] == '/':
                                                        parts.remove(x)
-                                       for x in parts:
-                                               if x[1].startswith('/autofs/'):
-                                                       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 (currentEntry == "backupfiles"):
@@ -278,14 +275,20 @@ class UpdatePluginMenu(Screen):
 
        def backupfiles_choosen(self, ret):
                self.backupdirs = ' '.join( config.plugins.configurationbackup.backupdirs.value )
-
+               config.plugins.configurationbackup.backupdirs.save()
+               config.plugins.configurationbackup.save()
+               config.save()
+               
        def backuplocation_choosen(self, option):
+               oldpath = config.plugins.configurationbackup.backuplocation.getValue()
                if option is not None:
                        config.plugins.configurationbackup.backuplocation.value = str(option[1])
                config.plugins.configurationbackup.backuplocation.save()
                config.plugins.configurationbackup.save()
                config.save()
-               self.createBackupfolders()
+               newpath = config.plugins.configurationbackup.backuplocation.getValue()
+               if newpath != oldpath:
+                       self.createBackupfolders()
 
        def runUpgrade(self, result):
                if result:
@@ -362,7 +365,7 @@ class SoftwareManagerSetup(Screen, ConfigListScreen):
 
        def createSetup(self):
                self.list = [ ]
-               self.overwriteConfigfilesEntry = getConfigListEntry(_("Overwrite configuration files ?"), config.plugins.SoftwareManager.overwriteConfigFiles)
+               self.overwriteConfigfilesEntry = getConfigListEntry(_("Overwrite configuration files ?"), config.plugins.softwaremanager.overwriteConfigFiles)
                self.list.append(self.overwriteConfigfilesEntry)        
                self["config"].list = self.list
                self["config"].l.setSeperation(400)
@@ -486,7 +489,6 @@ class SoftwareManagerInfo(Screen):
                        self.list = []
                        backupfiles = config.plugins.configurationbackup.backupdirs.value
                        for entry in backupfiles:
-                               print entry
                                self.list.append((entry,))
                        self['list'].setList(self.list)
                        
@@ -566,6 +568,7 @@ class PluginManager(Screen, DreamInfoHandler):
                self.currentSelectedIndex = None
                self.currentSelectedPackage = None
                self.saved_currentSelectedPackage = None
+               self.restartRequired = False
                
                self.onShown.append(self.setWindowTitle)
                self.onLayoutFinish.append(self.getUpdateInfos)
@@ -806,6 +809,8 @@ class PluginManager(Screen, DreamInfoHandler):
                                name = x[0].strip()
                                details = x[1].strip()
                                description = x[2].strip()
+                               if description == "":
+                                       description = "No description available."
                                packagename = x[3].strip()
                                selectState = self.getSelectionState(details)
                                if iSoftwareTools.installed_packetlist.has_key(packagename):
@@ -887,6 +892,8 @@ class PluginManager(Screen, DreamInfoHandler):
                                        self.package = iSoftwareTools.packageDetails[0]
                                        if self.package[0].has_key("attributes"):
                                                self.attributes = self.package[0]["attributes"]
+                                               if self.attributes.has_key("needsRestart"):
+                                                       self.restartRequired = True
                                        if self.attributes.has_key("package"):
                                                self.packagefiles = self.attributes["package"]
                                        if plugin[1] == 'installed':
@@ -918,17 +925,21 @@ class PluginManager(Screen, DreamInfoHandler):
                        self.close()
 
        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.reloadPluginlist()
+               if plugins.restartRequired or self.restartRequired:
+                       self.session.openWithCallback(self.ExecuteReboot, MessageBox, _("Install or remove finished.") +" "+_("Do you want to reboot your Dreambox?"), MessageBox.TYPE_YESNO)
+               else:
                        self.selectedFiles = []
+                       self.restartRequired = False
                        self.detailsClosed(True)
+
+       def ExecuteReboot(self, result):
                if result:
                        quitMainloop(3)
+               else:
+                       self.selectedFiles = []
+                       self.restartRequired = False
+                       self.detailsClosed(True)
 
        def reloadPluginlist(self):
                plugins.readPluginList(resolveFilename(SCOPE_PLUGINS))
@@ -1166,7 +1177,7 @@ class PluginDetails(Screen, DreamInfoHandler):
                self.package = self.packageDetails[0]
                if self.package[0].has_key("attributes"):
                        self.attributes = self.package[0]["attributes"]
-
+               self.restartRequired = False
                self.cmdList = []
                self.oktext = _("\nAfter pressing OK, please wait!")
                self.picload = ePicLoad()
@@ -1264,6 +1275,8 @@ class PluginDetails(Screen, DreamInfoHandler):
        def go(self):
                if self.attributes.has_key("package"):
                        self.packagefiles = self.attributes["package"]
+               if self.attributes.has_key("needsRestart"):
+                       self.restartRequired = True
                self.cmdList = []
                if self.pluginstate in ('installed', 'remove'):
                        if self.packagefiles:
@@ -1284,30 +1297,23 @@ class PluginDetails(Screen, DreamInfoHandler):
                        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.reloadPluginlist()
+               if plugins.restartRequired or self.restartRequired:
+                       self.session.openWithCallback(self.UpgradeReboot, MessageBox, _("Installation finished.") +" "+_("Do you want to reboot your Dreambox?"), MessageBox.TYPE_YESNO)
+               else:
                        self.close(True)
+       def UpgradeReboot(self, result):
                if result:
                        quitMainloop(3)
+               else:
+                       self.close(True)
 
        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)
+               self.close(True)
 
        def reloadPluginlist(self):
                plugins.readPluginList(resolveFilename(SCOPE_PLUGINS))
@@ -1335,9 +1341,9 @@ class UpdatePlugin(Screen):
                self["slider"] = self.slider
                self.activityslider = Slider(0, 100)
                self["activityslider"] = self.activityslider
-               self.status = StaticText(_("Upgrading Dreambox... Please wait"))
+               self.status = StaticText(_("Please wait..."))
                self["status"] = self.status
-               self.package = StaticText()
+               self.package = StaticText(_("Verifying your internet connection..."))
                self["package"] = self.package
                self.oktext = _("Press OK on your remote control to continue.")
 
@@ -1348,20 +1354,35 @@ class UpdatePlugin(Screen):
                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.updating = False
 
                self["actions"] = ActionMap(["WizardActions"], 
                {
                        "ok": self.exit,
                        "back": self.exit
                }, -1)
+               
+               iNetwork.checkNetworkState(self.checkNetworkCB)
+               self.onClose.append(self.cleanup)
+               
+       def cleanup(self):
+               iNetwork.stopPingConsole()
+
+       def checkNetworkCB(self,data):
+               if data is not None:
+                       if data <= 2:
+                               self.updating = True
+                               self.activityTimer.start(100, False)
+                               self.package.setText(_("Package list update"))
+                               self.status.setText(_("Upgrading Dreambox... Please wait"))
+                               self.ipkg.startCmd(IpkgComponent.CMD_UPDATE)
+                       else:
+                               self.package.setText(_("Your network is not working. Please try again."))
+                               self.status.setText(self.oktext)
 
        def doActivityTimer(self):
                self.activity += 1
@@ -1397,8 +1418,8 @@ class UpdatePlugin(Screen):
                        self.status.setText(_("Configuring"))
                        
                elif event == IpkgComponent.EVENT_MODIFIED:
-                       if config.plugins.SoftwareManager.overwriteConfigFiles.value in ("N", "Y"):
-                               self.ipkg.write(True and config.plugins.SoftwareManager.overwriteConfigFiles.value)
+                       if config.plugins.softwaremanager.overwriteConfigFiles.value in ("N", "Y"):
+                               self.ipkg.write(True and config.plugins.softwaremanager.overwriteConfigFiles.value)
                        else:
                                self.session.openWithCallback(
                                        self.modificationCallback,
@@ -1440,6 +1461,9 @@ class UpdatePlugin(Screen):
                                self.session.openWithCallback(self.exitAnswer, MessageBox, _("Upgrade finished.") +" "+_("Do you want to reboot your Dreambox?"))
                        else:
                                self.close()
+               else:
+                       if not self.updating:
+                               self.close()
 
        def exitAnswer(self, result):
                if result is not None and result:
@@ -1496,7 +1520,7 @@ class IPKGMenu(Screen):
 
        def fill_list(self):
                self.flist = []
-               self.path = '/etc/ipkg/'
+               self.path = '/etc/opkg/'
                if (os_path.exists(self.path) == False):
                        self.entry = False
                        return
@@ -1679,11 +1703,12 @@ class PacketManager(Screen, NumericalTextInput):
                self.list_updating = True
                self.packetlist = []
                self.installed_packetlist = {}
+               self.upgradeable_packages = {}
                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.cache_file = eEnv.resolve('${libdir}/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')
 
@@ -1839,7 +1864,7 @@ class PacketManager(Screen, NumericalTextInput):
                                self.list_updating = False
                                if not self.Console:
                                        self.Console = Console()
-                               cmd = "ipkg list"
+                               cmd = "opkg list"
                                self.Console.ePopen(cmd, self.IpkgList_Finished)
                #print event, "-", param
                pass
@@ -1847,47 +1872,68 @@ class PacketManager(Screen, NumericalTextInput):
        def IpkgList_Finished(self, result, retval, extra_args = None):
                if result:
                        self.packetlist = []
+                       last_name = ""
                        for x in result.splitlines():
-                               tokens = x.split(' - ')   #self.blacklisted_packages
+                               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 ""
+                                       if name == last_name:
+                                               continue
+                                       last_name = name 
                                        self.packetlist.append([name, version, descr])
+
                if not self.Console:
                        self.Console = Console()
-               cmd = "ipkg list_installed"
+               cmd = "opkg list-installed"
                self.Console.ePopen(cmd, self.IpkgListInstalled_Finished)
 
        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
+                               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 ""
                                        self.installed_packetlist[name] = version
-               self.buildPacketList()
+               if not self.Console:
+                       self.Console = Console()
+               cmd = "opkg list-upgradable"
+               self.Console.ePopen(cmd, self.OpkgListUpgradeable_Finished)
 
+       def OpkgListUpgradeable_Finished(self, result, retval, extra_args = None):
+               if result:
+                       self.upgradeable_packages = {}
+                       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 > 2 and tokens[2].strip() or ""
+                                       self.upgradeable_packages[name] = version
+               self.buildPacketList()
+       
        def buildEntryComponent(self, name, version, description, state):
                divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png"))
+               if description == "":
+                       description = "No description available."
                if state == 'installed':
                        installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installed.png"))
-                       return((name, version, description, state, installedpng, divpng))       
+                       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))     
+                       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))
+                       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:
@@ -1903,24 +1949,22 @@ class PacketManager(Screen, NumericalTextInput):
                        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:
+                               if self.installed_packetlist.has_key(x[0]):
+                                       if self.upgradeable_packages.has_key(x[0]):
                                                status = "upgradeable"
-                                               self.list.append(self.buildEntryComponent(x[0].strip(), x[1].strip(), x[2].strip(), status))
+                                       else:
+                                               status = "installed"
                                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])
+                               self.list.append(self.buildEntryComponent(x[0], x[1], x[2], status))    
+                               self.cachelist.append([x[0], x[1], x[2], 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 = """
                <screen name="IpkgInstaller" position="center,center" size="550,450" title="Install extensions" >
@@ -1993,9 +2037,9 @@ def Plugins(path, **kwargs):
        global plugin_path
        plugin_path = path
        list = [
-               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)
+               PluginDescriptor(name=_("Software management"), description=_("Manage your receiver's software"), where = PluginDescriptor.WHERE_MENU, needsRestart = False, fnc=startSetup),
+               PluginDescriptor(name=_("Ipkg"), where = PluginDescriptor.WHERE_FILESCAN, needsRestart = False, fnc = filescan)
        ]
        if config.usage.setup_level.index >= 2: # expert+
-               list.append(PluginDescriptor(name=_("Software management"), 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, needsRestart = False, fnc=UpgradeMain))
        return list
index cfdeb65..490a772 100755 (executable)
@@ -1,4 +1,4 @@
-installdir = $(LIBDIR)/enigma2/python/Plugins/SystemPlugins/TempFanControl
+installdir = $(pkglibdir)/python/Plugins/SystemPlugins/TempFanControl
 
 SUBDIRS = meta
 
@@ -6,4 +6,4 @@ install_PYTHON = \
        __init__.py \
        plugin.py
 
-dist_install_DATA = LICENSE
\ No newline at end of file
+dist_install_DATA = LICENSE
index a0bb5fa..5c6565a 100755 (executable)
@@ -2,6 +2,8 @@
          <prerequisites>
                     <hardware type="dm8000" />
                     <hardware type="dm500hd" />
+                    <hardware type="dm800se" />
+                    <hardware type="dm7020hd" />
                     <tag type="System" />
          </prerequisites>
           <info>
old mode 100755 (executable)
new mode 100644 (file)
index 42fe82d..48f871f
@@ -166,5 +166,5 @@ def startMenu(menuid):
        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)
+       return PluginDescriptor(name = "Temperature and Fan control", description = _("Temperature and Fan control"), where = PluginDescriptor.WHERE_MENU, needsRestart = False, fnc = startMenu)
 
index 11b0c59..f52b4da 100755 (executable)
@@ -3,6 +3,8 @@
                     <hardware type="dm8000" />
                     <hardware type="dm800" />
                     <hardware type="dm500hd" />
+                    <hardware type="dm800se" />
+                    <hardware type="dm7020hd" />
                     <tag type="Display" />
                     <tag type="System" />
          </prerequisites>
old mode 100755 (executable)
new mode 100644 (file)
index 7953d38..cde3930
@@ -394,5 +394,5 @@ def startSetup(menuid):
 def Plugins(**kwargs):
        list = []
        if config.usage.setup_level.index >= 2 and os_path.exists("/proc/stb/vmpeg/0/pep_apply"):
-               list.append(PluginDescriptor(name=_("Videoenhancement Setup"), description=_("Advanced Video Enhancement Setup"), where = PluginDescriptor.WHERE_MENU, fnc=startSetup))
+               list.append(PluginDescriptor(name=_("Videoenhancement Setup"), description=_("Advanced Video Enhancement Setup"), where = PluginDescriptor.WHERE_MENU, needsRestart = False, fnc=startSetup))
        return list
index 1b62206..9e90c72 100644 (file)
@@ -34,6 +34,6 @@ def startSetup(menuid):
 
 def Plugins(**kwargs):
        return [
-               PluginDescriptor(name=_("Video Fine-Tuning"), description=_("fine-tune your display"), where = PluginDescriptor.WHERE_MENU, fnc=startSetup),
-               PluginDescriptor(name=_("Video Fine-Tuning Wizard"), where = PluginDescriptor.WHERE_WIZARD, fnc=(1, videoFinetuneWizard))
+               PluginDescriptor(name=_("Video Fine-Tuning"), description=_("fine-tune your display"), where = PluginDescriptor.WHERE_MENU, needsRestart = False, fnc=startSetup),
+               PluginDescriptor(name=_("Video Fine-Tuning Wizard"), where = PluginDescriptor.WHERE_WIZARD, needsRestart = False, fnc=(1, videoFinetuneWizard))
        ]
index 59c5047..6ecbfd4 100644 (file)
@@ -196,10 +196,12 @@ class VideoHardware:
                print "saveMode", port, mode, rate
                config.av.videoport.value = port
                config.av.videoport.save()
-               config.av.videomode[port].value = mode
-               config.av.videomode[port].save()
-               config.av.videorate[mode].value = rate
-               config.av.videorate[mode].save()
+               if port in config.av.videomode:
+                       config.av.videomode[port].value = mode
+                       config.av.videomode[port].save()
+               if mode in config.av.videorate:
+                       config.av.videorate[mode].value = rate
+                       config.av.videorate[mode].save()
 
        def isPortAvailable(self, port):
                # fixme
@@ -239,9 +241,9 @@ class VideoHardware:
                portlist = self.getPortList()
                for port in portlist:
                        descr = port
-                       if descr == 'DVI' and hw_type in ('dm500hd', 'dm800se'):
+                       if descr == 'DVI' and hw_type in ('dm500hd', 'dm800se', 'dm7020hd'):
                                descr = 'HDMI'
-                       elif descr == 'DVI-PC' and hw_type in ('dm500hd', 'dm800se'):
+                       elif descr == 'DVI-PC' and hw_type in ('dm500hd', 'dm800se', 'dm7020hd'):
                                descr = 'HDMI-PC'
                        lst.append((port, descr))
 
index 9b9044e..18e8176 100755 (executable)
@@ -90,7 +90,7 @@ class VideoWizard(WizardLanguage, Rc):
                for port in self.hw.getPortList():
                        if self.hw.isPortUsed(port):
                                descr = port
-                               if descr == 'DVI' and hw_type in ('dm500hd', 'dm800se'):
+                               if descr == 'DVI' and hw_type in ('dm500hd', 'dm800se', 'dm7020hd'):
                                        descr = 'HDMI'
                                if port != "DVI-PC":
                                        list.append((descr,port))
@@ -108,7 +108,7 @@ class VideoWizard(WizardLanguage, Rc):
                self.inputSelect(self.selection)
                if self["portpic"].instance is not None:
                        picname = self.selection
-                       if picname == "DVI" and HardwareInfo().get_device_name() in ("dm500hd", "dm800se"):
+                       if picname == "DVI" and HardwareInfo().get_device_name() in ("dm500hd", "dm800se", "dm7020hd"):
                                picname = "HDMI"
                        self["portpic"].instance.setPixmapFromFile(resolveFilename(SCOPE_PLUGINS, "SystemPlugins/Videomode/" + picname + ".png"))
                
old mode 100755 (executable)
new mode 100644 (file)
index 39c1131..7396534
@@ -227,8 +227,8 @@ def VideoWizard(*args, **kwargs):
 def Plugins(**kwargs):
        list = [
 #              PluginDescriptor(where = [PluginDescriptor.WHERE_SESSIONSTART, PluginDescriptor.WHERE_AUTOSTART], fnc = autostart),
-               PluginDescriptor(name=_("Video Setup"), description=_("Advanced Video Setup"), where = PluginDescriptor.WHERE_MENU, fnc=startSetup) 
+               PluginDescriptor(name=_("Video Setup"), description=_("Advanced Video Setup"), where = PluginDescriptor.WHERE_MENU, needsRestart = False, fnc=startSetup) 
        ]
        if config.misc.videowizardenabled.value:
-               list.append(PluginDescriptor(name=_("Video Wizard"), where = PluginDescriptor.WHERE_WIZARD, fnc=(0, VideoWizard)))
+               list.append(PluginDescriptor(name=_("Video Wizard"), where = PluginDescriptor.WHERE_WIZARD, needsRestart = False, fnc=(0, VideoWizard)))
        return list
index baefd43..a185157 100755 (executable)
@@ -1,36 +1,42 @@
 from Components.config import config, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, ConfigSelection, ConfigPassword
 from Components.Console import Console
+from Components.Network import iNetwork
 
-from os import system
+from os import system, path as os_path
 from string import maketrans, strip
 import sys
 import types
-from re import compile as re_compile, search as re_search
+from re import compile as re_compile, search as re_search, escape as re_escape
 from pythonwifi.iwlibs import getNICnames, Wireless, Iwfreq, getWNICnames
 from pythonwifi import flags as wififlags
 
 list = []
+list.append("Unencrypted")
 list.append("WEP")
 list.append("WPA")
-list.append("WPA2")
 list.append("WPA/WPA2")
+list.append("WPA2")
 
 weplist = []
 weplist.append("ASCII")
 weplist.append("HEX")
 
 config.plugins.wlan = ConfigSubsection()
-config.plugins.wlan.essid = NoSave(ConfigText(default = "home", fixed_size = False))
-config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = "home", fixed_size = False))
+config.plugins.wlan.essid = NoSave(ConfigText(default = "", fixed_size = False))
+config.plugins.wlan.hiddenessid = NoSave(ConfigYesNo(default = False))
+config.plugins.wlan.encryption = NoSave(ConfigSelection(list, default = "WPA2"))
+config.plugins.wlan.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
+config.plugins.wlan.psk = NoSave(ConfigPassword(default = "", fixed_size = False))
+
 
-config.plugins.wlan.encryption = ConfigSubsection()
-config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = True))
-config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = "WPA/WPA2"))
-config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
-config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewlan", fixed_size = False))
+def getWlanConfigName(iface):
+       return '/etc/wpa_supplicant.' + iface + '.conf'
 
 class Wlan:
-       def __init__(self, iface):
+       def __init__(self, iface = None):
+               self.iface = iface
+               self.oldInterfaceState = None
+               
                a = ''; b = ''
                for i in range(0, 255):
                        a = a + chr(i)
@@ -39,135 +45,37 @@ class Wlan:
                        else:
                                b = b + chr(i)
                
-               self.iface = iface
-               self.wlaniface = {}
-               self.WlanConsole = Console()
                self.asciitrans = maketrans(a, b)
 
-       def stopWlanConsole(self):
-               if self.WlanConsole is not None:
-                       print "killing self.WlanConsole"
-                       self.WlanConsole = None
-                       del self.WlanConsole
-                       
-       def getDataForInterface(self, callback = None):
-               #get ip out of ip addr, as avahi sometimes overrides it in ifconfig.
-               print "self.iface im getDataForInterface",self.iface
-               if len(self.WlanConsole.appContainers) == 0:
-                       self.WlanConsole = Console()
-                       cmd = "iwconfig " + self.iface
-                       self.WlanConsole.ePopen(cmd, self.iwconfigFinished, callback)
-
-       def iwconfigFinished(self, result, retval, extra_args):
-               print "self.iface im iwconfigFinished",self.iface
-               callback = extra_args
-               data = { 'essid': False, 'frequency': False, 'acesspoint': False, 'bitrate': False, 'encryption': False, 'quality': False, 'signal': False }
-               
-               for line in result.splitlines():
-                       line = line.strip()
-                       if "ESSID" in line:
-                               if "off/any" in line:
-                                       ssid = _("No Connection")
-                               else:
-                                       if "Nickname" in line:
-                                               tmpssid=(line[line.index('ESSID')+7:line.index('"  Nickname')])
-                                               if tmpssid == '':
-                                                       ssid = _("Hidden networkname")
-                                               elif tmpssid ==' ':
-                                                       ssid = _("Hidden networkname")
-                                               else:
-                                                       ssid = tmpssid
-                                       else:
-                                               tmpssid=(line[line.index('ESSID')+7:len(line)-1])
-                                               if tmpssid == '':
-                                                       ssid = _("Hidden networkname")
-                                               elif tmpssid ==' ':
-                                                       ssid = _("Hidden networkname")
-                                               else:
-                                                       ssid = tmpssid                                          
-
-                               if ssid is not None:
-                                       data['essid'] = ssid
-                       if 'Frequency' in line:
-                               frequency = line[line.index('Frequency')+10 :line.index(' GHz')]
-                               if frequency is not None:
-                                       data['frequency'] = frequency
-                       if "Access Point" in line:
-                               ap=line[line.index('Access Point')+14:len(line)-1]
-                               if ap is not None:
-                                       data['acesspoint'] = ap
-                       if "Bit Rate" in line:
-                               br = line[line.index('Bit Rate')+9 :line.index(' Mb/s')]
-                               if br is not None:
-                                       data['bitrate'] = br
-                       if 'Encryption key' in line:
-                               if ":off" in line:
-                                   enc = _("Disabled")
-                               else:
-                                   enc = line[line.index('Encryption key')+15 :line.index('   Security')]
-                               if enc is not None:
-                                       data['encryption'] = _("Enabled")
-                       if 'Quality' in line:
-                               if "/100" in line:
-                                       qual = line[line.index('Quality')+8:line.index('/100')]
-                               else:
-                                       qual = line[line.index('Quality')+8:line.index('Sig')]
-                               if qual is not None:
-                                       data['quality'] = qual
-                       if 'Signal level' in line:
-                               signal = line[line.index('Signal level')+13 :line.index(' dBm')]
-                               if signal is not None:
-                                       data['signal'] = signal
-
-               self.wlaniface[self.iface] = data
-               
-               if len(self.WlanConsole.appContainers) == 0:
-                       print "self.wlaniface after loading:", self.wlaniface
-                       self.WlanConsole = None
-                       if callback is not None:
-                               callback(True,self.wlaniface)
-
-       def getAdapterAttribute(self, attribute):
-               if self.wlaniface.has_key(self.iface):
-                       print "self.wlaniface.has_key",self.iface
-                       if self.wlaniface[self.iface].has_key(attribute):
-                               return self.wlaniface[self.iface][attribute]
-               return None
-               
        def asciify(self, str):
                return str.translate(self.asciitrans)
-
        
        def getWirelessInterfaces(self):
-               device = re_compile('[a-z]{2,}[0-9]*:')
-               ifnames = []
+               return getWNICnames()
+
+       def setInterface(self, iface = None):
+               self.iface = iface
 
-               fp = open('/proc/net/wireless', 'r')
-               for line in fp:
-                       try:
-                               # append matching pattern, without the trailing colon
-                               ifnames.append(device.search(line).group()[:-1])
-                       except AttributeError:
-                               pass
-               return ifnames
+       def getInterface(self):
+               return self.iface
 
-       
        def getNetworkList(self):
-               system("ifconfig "+self.iface+" up")
+               if self.oldInterfaceState is None:
+                       self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up")
+               if self.oldInterfaceState is False:
+                       if iNetwork.getAdapterAttribute(self.iface, "up") is False:
+                               iNetwork.setAdapterAttribute(self.iface, "up", True)
+                               system("ifconfig "+self.iface+" up")
+
                ifobj = Wireless(self.iface) # a Wireless NIC Object
-               
-               #Association mappings
-               #stats, quality, discard, missed_beacon = ifobj.getStatistics()
-               #snr = quality.signallevel - quality.noiselevel
 
                try:
                        scanresults = ifobj.scan()
                except:
                        scanresults = None
-                       print "[Wlan.py] No Wireless Networks could be found"
-               
+                       print "[Wlan.py] No wireless networks could be found"
+               aps = {}
                if scanresults is not None:
-                       aps = {}
                        (num_channels, frequencies) = ifobj.getChannelInfo()
                        index = 1
                        for result in scanresults:
@@ -188,7 +96,6 @@ class Wlan:
                                        element = element.encode()
                                        extra.append( strip(self.asciify(element)) )
                                for element in extra:
-                                       print element
                                        if 'SignalStrength' in element:
                                                signal = element[element.index('SignalStrength')+15:element.index(',L')]                                        
                                        if 'LinkQuality' in element:
@@ -207,277 +114,222 @@ class Wlan:
                                        'signal' : str(signal),
                                        'custom' : extra,
                                }
-                               #print "GOT APS ENTRY:",aps[bssid]
-                               index = index + 1
-                       return aps
 
+                               index = index + 1
+               return aps
                
-       def getStatus(self):
-               ifobj = Wireless(self.iface)
-               fq = Iwfreq()
-               try:
-                       self.channel = str(fq.getChannel(str(ifobj.getFrequency()[0:-3])))
-               except:
-                       self.channel = 0
-               status = {
-                                 'BSSID': str(ifobj.getAPaddr()), #ifobj.getStatistics()
-                                 'ESSID': str(ifobj.getEssid()),
-                                 'quality': "%s/%s" % (ifobj.getStatistics()[1].quality,ifobj.getQualityMax().quality),
-                                 'signal': str(ifobj.getStatistics()[1].siglevel-0x100) + " dBm",
-                                 'bitrate': str(ifobj.getBitrate()),
-                                 'channel': str(self.channel),
-                                 #'channel': str(fq.getChannel(str(ifobj.getFrequency()[0:-3]))),
-               }
-               
-               for (key, item) in status.items():
-                       if item is "None" or item is "":
-                                       status[key] = _("N/A")
-                               
-               return status
+       def stopGetNetworkList(self):
+               if self.oldInterfaceState is not None:
+                       if self.oldInterfaceState is False:
+                               iNetwork.setAdapterAttribute(self.iface, "up", False)
+                               system("ifconfig "+self.iface+" down")
+                               self.oldInterfaceState = None
+                               self.iface = None
 
+iWlan = Wlan()
 
 class wpaSupplicant:
        def __init__(self):
                pass
-       
                
-       def writeConfig(self):  
-                       
-                       essid = config.plugins.wlan.essid.value
-                       hiddenessid = config.plugins.wlan.hiddenessid.value
-                       encrypted = config.plugins.wlan.encryption.enabled.value
-                       encryption = config.plugins.wlan.encryption.type.value
-                       wepkeytype = config.plugins.wlan.encryption.wepkeytype.value
-                       psk = config.plugins.wlan.encryption.psk.value
-                       fp = file('/etc/wpa_supplicant.conf', 'w')
-                       fp.write('#WPA Supplicant Configuration by enigma2\n')
-                       fp.write('ctrl_interface=/var/run/wpa_supplicant\n')
-                       fp.write('eapol_version=1\n')
-                       fp.write('fast_reauth=1\n')     
-                       if essid == 'hidden...':
-                               fp.write('ap_scan=2\n')
+       def writeConfig(self, iface):
+               essid = config.plugins.wlan.essid.value
+               hiddenessid = config.plugins.wlan.hiddenessid.value
+               encryption = config.plugins.wlan.encryption.value
+               wepkeytype = config.plugins.wlan.wepkeytype.value
+               psk = config.plugins.wlan.psk.value
+               fp = file(getWlanConfigName(iface), 'w')
+               fp.write('#WPA Supplicant Configuration by enigma2\n')
+               fp.write('ctrl_interface=/var/run/wpa_supplicant\n')
+               fp.write('eapol_version=1\n')
+               fp.write('fast_reauth=1\n')     
+
+               if hiddenessid:
+                       fp.write('ap_scan=2\n')
+               else:
+                       fp.write('ap_scan=1\n')
+               fp.write('network={\n')
+               fp.write('\tssid="'+essid+'"\n')
+               fp.write('\tscan_ssid=0\n')                     
+               if encryption in ('WPA', 'WPA2', 'WPA/WPA2'):
+                       fp.write('\tkey_mgmt=WPA-PSK\n')
+                       if encryption == 'WPA':
+                               fp.write('\tproto=WPA\n')
+                               fp.write('\tpairwise=TKIP\n')
+                               fp.write('\tgroup=TKIP\n')
+                       elif encryption == 'WPA2':
+                               fp.write('\tproto=RSN\n')
+                               fp.write('\tpairwise=CCMP\n')
+                               fp.write('\tgroup=CCMP\n')
                        else:
-                               fp.write('ap_scan=1\n')
-                       fp.write('network={\n')
-                       if essid == 'hidden...':
-                               fp.write('\tssid="'+hiddenessid+'"\n')
+                               fp.write('\tproto=WPA RSN\n')
+                               fp.write('\tpairwise=CCMP TKIP\n')
+                               fp.write('\tgroup=CCMP TKIP\n')
+                       fp.write('\tpsk="'+psk+'"\n')
+               elif encryption == 'WEP':
+                       fp.write('\tkey_mgmt=NONE\n')
+                       if wepkeytype == 'ASCII':
+                               fp.write('\twep_key0="'+psk+'"\n')
                        else:
-                               fp.write('\tssid="'+essid+'"\n')
-                       fp.write('\tscan_ssid=0\n')                     
-                       if encrypted:
-                               if encryption == 'WPA' or encryption == 'WPA2' or encryption == 'WPA/WPA2' :
-                                       fp.write('\tkey_mgmt=WPA-PSK\n')
-                                       
-                                       if encryption == 'WPA':
-                                               fp.write('\tproto=WPA\n')
-                                               fp.write('\tpairwise=TKIP\n')
-                                               fp.write('\tgroup=TKIP\n')
-                                       elif encryption == 'WPA2':
-                                               fp.write('\tproto=WPA RSN\n')
-                                               fp.write('\tpairwise=CCMP TKIP\n')
-                                               fp.write('\tgroup=CCMP TKIP\n')                                         
-                                       else:
-                                               fp.write('\tproto=WPA WPA2\n')
-                                               fp.write('\tpairwise=CCMP\n')
-                                               fp.write('\tgroup=TKIP\n')                                      
-                                       fp.write('\tpsk="'+psk+'"\n')
-                                               
-                               elif encryption == 'WEP':
-                                       fp.write('\tkey_mgmt=NONE\n')
-                                       if wepkeytype == 'ASCII':
-                                               fp.write('\twep_key0="'+psk+'"\n')
-                                       else:
-                                               fp.write('\twep_key0='+psk+'\n')
-                       else:
-                               fp.write('\tkey_mgmt=NONE\n')                   
-                       fp.write('}')
-                       fp.write('\n')
-                       fp.close()
-                       system("cat /etc/wpa_supplicant.conf")
+                               fp.write('\twep_key0='+psk+'\n')
+               else:
+                       fp.write('\tkey_mgmt=NONE\n')
+               fp.write('}')
+               fp.write('\n')
+               fp.close()
+               #system('cat ' + getWlanConfigName(iface))
                
-       def loadConfig(self):
+       def loadConfig(self,iface):
+               configfile = getWlanConfigName(iface)
+               if not os_path.exists(configfile):
+                       configfile = '/etc/wpa_supplicant.conf'
                try:
                        #parse the wpasupplicant configfile
-                       fp = file('/etc/wpa_supplicant.conf', 'r')
+                       print "[Wlan.py] parsing configfile: ",configfile
+                       fp = file(configfile, 'r')
                        supplicant = fp.readlines()
                        fp.close()
-                       ap_scan = False
                        essid = None
+                       encryption = "Unencrypted"
 
                        for s in supplicant:
                                split = s.strip().split('=',1)
                                if split[0] == 'ap_scan':
-                                       print "[Wlan.py] Got Hidden SSID Scan  Value "+split[1]
                                        if split[1] == '2':
-                                               ap_scan = True
+                                               config.plugins.wlan.hiddenessid.value = True
                                        else:
-                                               ap_scan = False
-                                               
+                                               config.plugins.wlan.hiddenessid.value = False
+
                                elif split[0] == 'ssid':
-                                       print "[Wlan.py] Got SSID "+split[1][1:-1]
                                        essid = split[1][1:-1]
-                                       
+                                       config.plugins.wlan.essid.value = essid
+
                                elif split[0] == 'proto':
-                                       config.plugins.wlan.encryption.enabled.value = True
-                                       if split[1] == "WPA" :
+                                       if split[1] == 'WPA' :
                                                mode = 'WPA'
-                                       if split[1] == "WPA WPA2" :
-                                               mode = 'WPA/WPA2'
-                                       if split[1] == "WPA RSN" :
+                                       if split[1] == 'RSN':
                                                mode = 'WPA2'
-                                       config.plugins.wlan.encryption.type.value = mode
-                                       print "[Wlan.py] Got Encryption: "+mode
-                                       
-                               #currently unused !
-                               #elif split[0] == 'key_mgmt':
-                               #       print "split[1]",split[1]
-                               #       if split[1] == "WPA-PSK" :
-                               #               config.plugins.wlan.encryption.enabled.value = True
-                               #               config.plugins.wlan.encryption.type.value = "WPA/WPA2"
-                               #       print "[Wlan.py] Got Encryption: "+ config.plugins.wlan.encryption.type.value
+                                       if split[1] in ('WPA RSN', 'WPA WPA2'):
+                                               mode = 'WPA/WPA2'
+                                       encryption = mode
                                        
                                elif split[0] == 'wep_key0':
-                                       config.plugins.wlan.encryption.enabled.value = True
-                                       config.plugins.wlan.encryption.type.value = 'WEP'
+                                       encryption = 'WEP'
                                        if split[1].startswith('"') and split[1].endswith('"'):
-                                               config.plugins.wlan.encryption.wepkeytype.value = 'ASCII'
-                                               config.plugins.wlan.encryption.psk.value = split[1][1:-1]
+                                               config.plugins.wlan.wepkeytype.value = 'ASCII'
+                                               config.plugins.wlan.psk.value = split[1][1:-1]
                                        else:
-                                               config.plugins.wlan.encryption.wepkeytype.value = 'HEX'
-                                               config.plugins.wlan.encryption.psk.value = split[1]                                             
+                                               config.plugins.wlan.wepkeytype.value = 'HEX'
+                                               config.plugins.wlan.psk.value = split[1]                                                
                                        
                                elif split[0] == 'psk':
-                                       config.plugins.wlan.encryption.psk.value = split[1][1:-1]
+                                       config.plugins.wlan.psk.value = split[1][1:-1]
                                else:
                                        pass
+
+                       config.plugins.wlan.encryption.value = encryption
                                
-                       if ap_scan is True:
-                               config.plugins.wlan.hiddenessid.value = essid
-                               config.plugins.wlan.essid.value = 'hidden...'
-                       else:
-                               config.plugins.wlan.hiddenessid.value = essid
-                               config.plugins.wlan.essid.value = essid
                        wsconfig = {
                                        'hiddenessid': config.plugins.wlan.hiddenessid.value,
                                        'ssid': config.plugins.wlan.essid.value,
-                                       'encryption': config.plugins.wlan.encryption.enabled.value,
-                                       'encryption_type': config.plugins.wlan.encryption.type.value,
-                                       'encryption_wepkeytype': config.plugins.wlan.encryption.wepkeytype.value,
-                                       'key': config.plugins.wlan.encryption.psk.value,
+                                       'encryption': config.plugins.wlan.encryption.value,
+                                       'wepkeytype': config.plugins.wlan.wepkeytype.value,
+                                       'key': config.plugins.wlan.psk.value,
                                }
                
                        for (key, item) in wsconfig.items():
                                if item is "None" or item is "":
                                        if key == 'hiddenessid':
-                                               wsconfig['hiddenessid'] = "home"
+                                               wsconfig['hiddenessid'] = False
                                        if key == 'ssid':
-                                               wsconfig['ssid'] = "home"
+                                               wsconfig['ssid'] = ""
                                        if key == 'encryption':
-                                               wsconfig['encryption'] = True                           
-                                       if key == 'encryption':
-                                               wsconfig['encryption_type'] = "WPA/WPA2"
-                                       if key == 'encryption':
-                                               wsconfig['encryption_wepkeytype'] = "ASCII"
-                                       if key == 'encryption':
-                                               wsconfig['key'] = "mysecurewlan"
-
+                                               wsconfig['encryption'] = "WPA2"                 
+                                       if key == 'wepkeytype':
+                                               wsconfig['wepkeytype'] = "ASCII"
+                                       if key == 'key':
+                                               wsconfig['key'] = ""
                except:
-                       print "[Wlan.py] Error parsing /etc/wpa_supplicant.conf"
+                       print "[Wlan.py] Error parsing ",configfile
                        wsconfig = {
-                                       'hiddenessid': "home",
-                                       'ssid': "home",
-                                       'encryption': True,
-                                       'encryption_type': "WPA/WPA2",
-                                       'encryption_wepkeytype': "ASCII",
-                                       'key': "mysecurewlan",
+                                       'hiddenessid': False,
+                                       'ssid': "",
+                                       'encryption': "WPA2",
+                                       'wepkeytype': "ASCII",
+                                       'key': "",
                                }
-               print "[Wlan.py] WS-CONFIG-->",wsconfig
+               #print "[Wlan.py] WS-CONFIG-->",wsconfig
                return wsconfig
 
-       
-       def restart(self, iface):
-               system("start-stop-daemon -K -x /usr/sbin/wpa_supplicant")
-               system("start-stop-daemon -S -x /usr/sbin/wpa_supplicant -- -B -i"+iface+" -c/etc/wpa_supplicant.conf")
 
 class Status:
        def __init__(self):
                self.wlaniface = {}
                self.backupwlaniface = {}
+               self.statusCallback = None
                self.WlanConsole = Console()
 
        def stopWlanConsole(self):
                if self.WlanConsole is not None:
-                       print "killing self.WlanConsole"
+                       print "[iStatus] killing self.WlanConsole"
+                       self.WlanConsole.killAll()
                        self.WlanConsole = None
                        
        def getDataForInterface(self, iface, callback = None):
                self.WlanConsole = Console()
                cmd = "iwconfig " + iface
-               self.WlanConsole.ePopen(cmd, self.iwconfigFinished, [iface, callback])
+               if callback is not None:
+                       self.statusCallback = callback
+               self.WlanConsole.ePopen(cmd, self.iwconfigFinished, iface)
 
        def iwconfigFinished(self, result, retval, extra_args):
-               (iface, callback) = extra_args
-               data = { 'essid': False, 'frequency': False, 'acesspoint': False, 'bitrate': False, 'encryption': False, 'quality': False, 'signal': False }
+               iface = extra_args
+               data = { 'essid': False, 'frequency': False, 'accesspoint': False, 'bitrate': False, 'encryption': False, 'quality': False, 'signal': False }
                for line in result.splitlines():
                        line = line.strip()
                        if "ESSID" in line:
                                if "off/any" in line:
-                                       ssid = _("No Connection")
+                                       ssid = "off"
                                else:
                                        if "Nickname" in line:
-                                               tmpssid=(line[line.index('ESSID')+7:line.index('"  Nickname')])
-                                               if tmpssid == '':
-                                                       ssid = _("Hidden networkname")
-                                               elif tmpssid ==' ':
-                                                       ssid = _("Hidden networkname")
-                                               else:
-                                                       ssid = tmpssid
+                                               ssid=(line[line.index('ESSID')+7:line.index('"  Nickname')])
                                        else:
-                                               tmpssid=(line[line.index('ESSID')+7:len(line)-1])
-                                               if tmpssid == '':
-                                                       ssid = _("Hidden networkname")
-                                               elif tmpssid ==' ':
-                                                       ssid = _("Hidden networkname")
-                                               else:
-                                                       ssid = tmpssid                                          
+                                               ssid=(line[line.index('ESSID')+7:len(line)-1])
                                if ssid is not None:
                                        data['essid'] = ssid
-                       if 'Frequency' in line:
+                       if "Frequency" in line:
                                frequency = line[line.index('Frequency')+10 :line.index(' GHz')]
                                if frequency is not None:
                                        data['frequency'] = frequency
                        if "Access Point" in line:
-                               ap=line[line.index('Access Point')+14:len(line)]
+                               if "Sensitivity" in line:
+                                       ap=line[line.index('Access Point')+14:line.index('   Sensitivity')]
+                               else:
+                                       ap=line[line.index('Access Point')+14:len(line)]
                                if ap is not None:
-                                       data['acesspoint'] = ap
-                                       if ap == "Not-Associated":
-                                               data['essid'] = _("No Connection")
+                                       data['accesspoint'] = ap
                        if "Bit Rate" in line:
                                if "kb" in line:
                                        br = line[line.index('Bit Rate')+9 :line.index(' kb/s')]
-                                       if br == '0':
-                                               br = _("Unsupported")
-                                       else:
-                                               br += " Mb/s"
                                else:
-                                       br = line[line.index('Bit Rate')+9 :line.index(' Mb/s')] + " Mb/s"
+                                       br = line[line.index('Bit Rate')+9 :line.index(' Mb/s')]
                                if br is not None:
                                        data['bitrate'] = br
-                       if 'Encryption key' in line:
+                       if "Encryption key" in line:
                                if ":off" in line:
-                                       if data['acesspoint'] is not "Not-Associated":
-                                               enc = _("Unsupported")
-                                       else:
-                                               enc = _("Disabled")
-                               else:
+                                       enc = "off"
+                               elif "Security" in line:
                                        enc = line[line.index('Encryption key')+15 :line.index('   Security')]
                                        if enc is not None:
-                                               enc = _("Enabled")
+                                               enc = "on"
+                               else:
+                                       enc = line[line.index('Encryption key')+15 :len(line)]
+                                       if enc is not None:
+                                               enc = "on"
                                if enc is not None:
                                        data['encryption'] = enc
                        if 'Quality' in line:
                                if "/100" in line:
-                                       #qual = line[line.index('Quality')+8:line.index('/100')]
                                        qual = line[line.index('Quality')+8:line.index('  Signal')]
                                else:
                                        qual = line[line.index('Quality')+8:line.index('Sig')]
@@ -485,8 +337,7 @@ class Status:
                                        data['quality'] = qual
                        if 'Signal level' in line:
                                if "dBm" in line:
-                                       signal = line[line.index('Signal level')+13 :line.index(' dBm')]
-                                       signal += " dBm"
+                                       signal = line[line.index('Signal level')+13 :line.index(' dBm')] + " dBm"
                                elif "/100" in line:
                                        if "Noise" in line:
                                                signal = line[line.index('Signal level')+13:line.index('  Noise')]
@@ -505,9 +356,10 @@ class Status:
                
                if self.WlanConsole is not None:
                        if len(self.WlanConsole.appContainers) == 0:
-                               print "self.wlaniface after loading:", self.wlaniface
-                               if callback is not None:
-                                       callback(True,self.wlaniface)
+                               print "[Wlan.py] self.wlaniface after loading:", self.wlaniface
+                               if self.statusCallback is not None:
+                                               self.statusCallback(True,self.wlaniface)
+                                               self.statusCallback = None
 
        def getAdapterAttribute(self, iface, attribute):
                self.iface = iface
old mode 100755 (executable)
new mode 100644 (file)
index 28ee363..3462146
@@ -1,4 +1,4 @@
-from enigma import eTimer, eTPM
+from enigma import eTimer, eTPM, eEnv
 from Screens.Screen import Screen
 from Components.ActionMap import ActionMap, NumberActionMap
 from Components.Pixmap import Pixmap,MultiPixmap
@@ -8,37 +8,40 @@ 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
-from Components.Network import Network, iNetwork
+from Components.Network import iNetwork
 from Components.Console import Console
 from Plugins.Plugin import PluginDescriptor
 from os import system, path as os_path, listdir
 from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
 from Tools.LoadPixmap import LoadPixmap
 from Tools.HardwareInfo import HardwareInfo
-from Wlan import Wlan, wpaSupplicant, iStatus
-import sha
+from Wlan import iWlan, wpaSupplicant, iStatus, getWlanConfigName
+import hashlib
+from time import time
+from os import urandom, system
+from re import escape as re_escape
+
+plugin_path = eEnv.resolve("${libdir}/enigma2/python/Plugins/SystemPlugins/WirelessLan")
 
-plugin_path = "/usr/lib/enigma2/python/Plugins/SystemPlugins/WirelessLan"
 
 list = []
+list.append("Unencrypted")
 list.append("WEP")
 list.append("WPA")
-list.append("WPA2")
 list.append("WPA/WPA2")
+list.append("WPA2")
 
 weplist = []
 weplist.append("ASCII")
 weplist.append("HEX")
 
 config.plugins.wlan = ConfigSubsection()
-config.plugins.wlan.essid = NoSave(ConfigText(default = "home", fixed_size = False))
-config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = "home", fixed_size = False))
+config.plugins.wlan.essid = NoSave(ConfigText(default = "", fixed_size = False))
+config.plugins.wlan.hiddenessid = NoSave(ConfigYesNo(default = False))
+config.plugins.wlan.encryption = NoSave(ConfigSelection(list, default = "WPA2"))
+config.plugins.wlan.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
+config.plugins.wlan.psk = NoSave(ConfigPassword(default = "", fixed_size = False))
 
-config.plugins.wlan.encryption = ConfigSubsection()
-config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = False))
-config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = "WPA/WPA2" ))
-config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
-config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewlan", fixed_size = False))
 
 
 class WlanStatus(Screen):
@@ -105,7 +108,7 @@ class WlanStatus(Screen):
                }, -1)
                self.timer = eTimer()
                self.timer.timeout.get().append(self.resetList) 
-               self.onShown.append(lambda: self.timer.start(5000))
+               self.onShown.append(lambda: self.timer.start(8000))
                self.onLayoutFinish.append(self.layoutFinished)
                self.onClose.append(self.cleanup)
 
@@ -113,7 +116,7 @@ class WlanStatus(Screen):
                iStatus.stopWlanConsole()
                
        def layoutFinished(self):
-               self.setTitle(_("Wireless Network State"))
+               self.setTitle(_("Wireless network state"))
                
        def resetList(self):
                iStatus.getDataForInterface(self.iface,self.getInfoCB)
@@ -122,32 +125,65 @@ class WlanStatus(Screen):
                if data is not None:
                        if data is True:
                                if status is not None:
-                                       self["BSSID"].setText(status[self.iface]["acesspoint"])
-                                       self["ESSID"].setText(status[self.iface]["essid"])
-                                       self["quality"].setText(status[self.iface]["quality"])
-                                       self["signal"].setText(status[self.iface]["signal"])
-                                       self["bitrate"].setText(status[self.iface]["bitrate"])
-                                       self["enc"].setText(status[self.iface]["encryption"])
+                                       if status[self.iface]["essid"] == "off":
+                                               essid = _("No Connection")
+                                       else:
+                                               essid = status[self.iface]["essid"]
+                                       if status[self.iface]["accesspoint"] == "Not-Associated":
+                                               accesspoint = _("Not-Associated")
+                                               essid = _("No Connection")
+                                       else:
+                                               accesspoint = status[self.iface]["accesspoint"]
+                                       if self.has_key("BSSID"):
+                                               self["BSSID"].setText(accesspoint)
+                                       if self.has_key("ESSID"):
+                                               self["ESSID"].setText(essid)
+
+                                       quality = status[self.iface]["quality"]
+                                       if self.has_key("quality"):
+                                               self["quality"].setText(quality)
+                                               
+                                       if status[self.iface]["bitrate"] == '0':
+                                               bitrate = _("Unsupported")
+                                       else:
+                                               bitrate = str(status[self.iface]["bitrate"]) + " Mb/s"
+                                       if self.has_key("bitrate"):
+                                               self["bitrate"].setText(bitrate)                                        
+                                       
+                                       signal = status[self.iface]["signal"]
+                                       if self.has_key("signal"):
+                                               self["signal"].setText(signal)
+
+                                       if status[self.iface]["encryption"] == "off":
+                                               if accesspoint == "Not-Associated":
+                                                       encryption = _("Disabled")
+                                               else:
+                                                       encryption = _("Unsupported")
+                                       else:
+                                               encryption = _("Enabled")
+                                       if self.has_key("enc"):
+                                               self["enc"].setText(encryption)
                                        self.updateStatusLink(status)
 
        def exit(self):
                self.timer.stop()
-               self.close(True)        
+               self.close(True)
 
        def updateStatusbar(self):
-               self["BSSID"].setText(_("Please wait..."))
-               self["ESSID"].setText(_("Please wait..."))
-               self["quality"].setText(_("Please wait..."))
-               self["signal"].setText(_("Please wait..."))
-               self["bitrate"].setText(_("Please wait..."))
-               self["enc"].setText(_("Please wait..."))
+               wait_txt = _("Please wait...")
+               self["BSSID"].setText(wait_txt)
+               self["ESSID"].setText(wait_txt)
+               self["quality"].setText(wait_txt)
+               self["signal"].setText(wait_txt)
+               self["bitrate"].setText(wait_txt)
+               self["enc"].setText(wait_txt)
                self["IFtext"].setText(_("Network:"))
                self["IF"].setText(iNetwork.getFriendlyAdapterName(self.iface))
                self["Statustext"].setText(_("Link:"))
 
        def updateStatusLink(self,status):
                if status is not None:
-                       if status[self.iface]["acesspoint"] == "No Connection" or status[self.iface]["acesspoint"] == "Not-Associated" or status[self.iface]["acesspoint"] == False:
+                       if status[self.iface]["essid"] == "off" or status[self.iface]["accesspoint"] == "Not-Associated" or status[self.iface]["accesspoint"] == False:
                                self["statuspic"].setPixmapNum(1)
                        else:
                                self["statuspic"].setPixmapNum(0)
@@ -217,6 +253,8 @@ class WlanScan(Screen):
                        "red": self.cancel,
                        "green": self.select,
                })
+               iWlan.setInterface(self.iface)
+               self.w = iWlan.getInterface()
                self.onLayoutFinish.append(self.layoutFinished)
                self.getAccessPoints(refresh = False)
                
@@ -226,42 +264,24 @@ class WlanScan(Screen):
        def select(self):
                cur = self["list"].getCurrent()
                if cur is not None:
+                       iWlan.stopGetNetworkList()
                        self.rescanTimer.stop()
                        del self.rescanTimer
-                       if cur[1] is not None:
-                               if cur[1] == 'hidden...':
-                                       essid = cur[1]
-                               else:
-                                       essid = cur[0]
-                               self.close(essid,self.getWlanList())
+                       if cur[0] is not None:
+                               self.close(cur[0])
                        else:
-                               self.close(None,None)
+                               self.close(None)
                else:
-                       self.rescanTimer.stop()
-                       del self.rescanTimer
-                       self.close(None,None)
-       
-       def WlanSetupClosed(self, *ret):
-               if ret[0] == 2:
+                       iWlan.stopGetNetworkList()
                        self.rescanTimer.stop()
                        del self.rescanTimer
                        self.close(None)
        
        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:
-                               self.rescanTimer.stop()
-                               del self.rescanTimer
-                               self.close(None)
+               iWlan.stopGetNetworkList()
+               self.rescanTimer.stop()
+               del self.rescanTimer
+               self.close(None)
 
        def rescanTimerFired(self):
                self.rescanTimer.stop()
@@ -270,10 +290,7 @@ class WlanScan(Screen):
        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))
+               return((essid, bssid, _("Signal: ") + str(signal), _("Max. Bitrate: ") + str(maxrate), _("Encrypted: ") + encryption, _("Interface: ") + str(iface), divpng))
 
        def updateAPList(self):
                newList = []
@@ -290,20 +307,19 @@ class WlanScan(Screen):
                                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
+                       if currentListEntry is not None:
+                               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)
+                       if newListIndex is not None:
+                               self["list"].setIndex(newListIndex)
                        self["list"].updateList(self.newAPList)
                        self.listLength = len(self.newAPList)
                        self.buildWlanList()
@@ -312,8 +328,7 @@ class WlanScan(Screen):
        def getAccessPoints(self, refresh = False):
                self.APList = []
                self.cleanList = []
-               self.w = Wlan(self.iface)
-               aps = self.w.getNetworkList()
+               aps = iWlan.getNetworkList()
                if aps is not None:
                        print "[WirelessLan.py] got Accespoints!"
                        tmpList = []
@@ -336,9 +351,6 @@ class WlanScan(Screen):
                                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] ))
                
@@ -351,20 +363,17 @@ class WlanScan(Screen):
 
        def setInfo(self):
                length = self.getLength()
-               if length <= 1:
-                       self["info"].setText(_("No wireless networks found! Please refresh."))
-               elif length == 2:
+               if length == 0:
+                       self["info"].setText(_("No wireless networks found! Searching..."))
+               elif length == 1:
                        self["info"].setText(_("1 wireless network found!"))
                else:
-                       self["info"].setText(str(length-1)+_(" wireless networks found!"))
+                       self["info"].setText(str(length)+_(" 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]) )
+                       self.WlanList.append( (entry[0], entry[0]) )
 
        def getLength(self):
                return self.listLength          
@@ -391,7 +400,7 @@ def decrypt_block(src, mod):
        if len(src) != 128 and len(src) != 202:
                return None
        dest = rsa_pub1024(src[:128], mod)
-       hash = sha.new(dest[1:107])
+       hash = hashlib.sha1(dest[1:107])
        if len(src) == 202:
                hash.update(src[131:192])       
        result = hash.digest()
@@ -399,68 +408,71 @@ def decrypt_block(src, mod):
                return dest
        return None
 
-def validate_cert(cert, key):
+def validate_certificate(cert, key):
        buf = decrypt_block(cert[8:], key) 
        if buf is None:
                return None
        return buf[36:107] + cert[139:196]
 
-def read_random():
+def get_random():
        try:
-               fd = open("/dev/urandom", "r")
-               buf = fd.read(8)
-               fd.close()
-               return buf
+               xor = lambda a,b: ''.join(chr(ord(c)^ord(d)) for c,d in zip(a,b*100))
+               random = urandom(8)
+               x = str(time())[-8:]
+               result = xor(random, x)
+                               
+               return result
        except:
                return None
 
 def WlanStatusScreenMain(session, iface):
        session.open(WlanStatus, iface)
 
-
 def callFunction(iface):
-       w = Wlan(iface)
-       i = w.getWirelessInterfaces()
+       iWlan.setInterface(iface)
+       i = iWlan.getWirelessInterfaces()
        if i:
-               if iface in i:
+               if iface in i or iNetwork.isWirelessInterface(iface):
                        return WlanStatusScreenMain
+               return None
        return None
 
-
 def configStrings(iface):
-       hardware_info = HardwareInfo()
-       if  hardware_info.device_name != "dm7025":
+       try:
+               device = open("/proc/stb/info/model", "r").readline().strip()
+       except:
+               device = ""     
+       if device != "dm7025":
                rootkey = ['\x9f', '|', '\xe4', 'G', '\xc9', '\xb4', '\xf4', '#', '&', '\xce', '\xb3', '\xfe', '\xda', '\xc9', 'U', '`', '\xd8', '\x8c', 's', 'o', '\x90', '\x9b', '\\', 'b', '\xc0', '\x89', '\xd1', '\x8c', '\x9e', 'J', 'T', '\xc5', 'X', '\xa1', '\xb8', '\x13', '5', 'E', '\x02', '\xc9', '\xb2', '\xe6', 't', '\x89', '\xde', '\xcd', '\x9d', '\x11', '\xdd', '\xc7', '\xf4', '\xe4', '\xe4', '\xbc', '\xdb', '\x9c', '\xea', '}', '\xad', '\xda', 't', 'r', '\x9b', '\xdc', '\xbc', '\x18', '3', '\xe7', '\xaf', '|', '\xae', '\x0c', '\xe3', '\xb5', '\x84', '\x8d', '\r', '\x8d', '\x9d', '2', '\xd0', '\xce', '\xd5', 'q', '\t', '\x84', 'c', '\xa8', ')', '\x99', '\xdc', '<', '"', 'x', '\xe8', '\x87', '\x8f', '\x02', ';', 'S', 'm', '\xd5', '\xf0', '\xa3', '_', '\xb7', 'T', '\t', '\xde', '\xa7', '\xf1', '\xc9', '\xae', '\x8a', '\xd7', '\xd2', '\xcf', '\xb2', '.', '\x13', '\xfb', '\xac', 'j', '\xdf', '\xb1', '\x1d', ':', '?']
                etpm = eTPM()
                l2cert = etpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT)
                if l2cert is None:
                        return
-               l2key = validate_cert(l2cert, rootkey)
+               l2key = validate_certificate(l2cert, rootkey)
                if l2key is None:
                        return
                l3cert = etpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT)
                if l3cert is None:
-                       print "better run the genuine dreambox plugin"
                        return
-               l3key = validate_cert(l3cert, l2key)
+               l3key = validate_certificate(l3cert, l2key)
                if l3key is None:
                        return
-               rnd = read_random()
+               rnd = get_random()
                if rnd is None:
                        return
                val = etpm.challenge(rnd)
                result = decrypt_block(val, l3key)
-       if hardware_info.device_name == "dm7025" or result[80:88] == rnd:
+       if device == "dm7025" or result[80:88] == rnd:
                driver = iNetwork.detectWlanModule(iface)
        else:
                driver = 'dreambox'
-       if driver  in ('ralink', 'zydas'):
-               return "        pre-up /usr/sbin/wpa_supplicant -i"+iface+" -c/etc/wpa_supplicant.conf -B -D"+driver+"\n        post-down wpa_cli terminate"
-       else:
-               if config.plugins.wlan.essid.value == "hidden...":
-                       return '        pre-up iwconfig '+iface+' essid "'+config.plugins.wlan.hiddenessid.value+'"\n   pre-up /usr/sbin/wpa_supplicant -i'+iface+' -c/etc/wpa_supplicant.conf -B -dd -D'+driver+'\n    post-down wpa_cli terminate'
-               else:
-                       return '        pre-up iwconfig '+iface+' essid "'+config.plugins.wlan.essid.value+'"\n pre-up /usr/sbin/wpa_supplicant -i'+iface+' -c/etc/wpa_supplicant.conf -B -dd -D'+driver+'\n    post-down wpa_cli terminate'
+       print 'Using "%s" as wpa-supplicant driver' % (driver)
+       ret = ""
+       if driver == 'madwifi' and config.plugins.wlan.hiddenessid.value:
+               ret += "\tpre-up iwconfig " + iface + " essid \"" + re_escape(config.plugins.wlan.essid.value) + "\" || true\n"
+       ret += "\tpre-up wpa_supplicant -i" + iface + " -c" + getWlanConfigName(iface) + " -B -dd -D" + driver + " || true\n"
+       ret += "\tpre-down wpa_cli -i" + iface + " terminate || true\n"
+       return ret
 
 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..."})
+       return PluginDescriptor(name=_("Wireless LAN"), description=_("Connect to a Wireless Network"), where = PluginDescriptor.WHERE_NETWORKSETUP, needsRestart = False, fnc={"ifaceSupported": callFunction, "configStrings": configStrings, "WlanPluginEntry": lambda x: "Wireless Network Configuartion..."})
old mode 100644 (file)
new mode 100755 (executable)
index c1c6f94..32c7269
@@ -137,7 +137,7 @@ def Plugins(**kwargs):
 file.close()
 
 makefile = open(pluginpath + "/Makefile.am", "w")
-makefile.write("""installdir = $(LIBDIR)/enigma2/python/Plugins/%s/%s
+makefile.write("""installdir = $(pkglibdir)/python/Plugins/%s/%s
 
 install_PYTHON = \\
        __init__.py \\
index a0bfcab..4c68962 100644 (file)
@@ -46,7 +46,7 @@ class AudioSelection(Screen, ConfigListScreen):
                        "cancel": self.cancel,
                        "up": self.keyUp,
                        "down": self.keyDown,
-               }, -3)
+               }, -2)
 
                self.settings = ConfigSubsection()
                choicelist = [(PAGE_AUDIO,_("audio tracks")), (PAGE_SUBTITLES,_("Subtitles"))]
@@ -62,13 +62,12 @@ class AudioSelection(Screen, ConfigListScreen):
                streams = []
                conflist = []
                selectedidx = 0
-               
-               service = self.session.nav.getCurrentService()
-               self.audioTracks = audio = service and service.audioTracks()
-               n = audio and audio.getNumberOfTracks() or 0
-               
+
                if self.settings.menupage.getValue() == PAGE_AUDIO:
                        self.setTitle(_("Select audio track"))
+                       service = self.session.nav.getCurrentService()
+                       self.audioTracks = audio = service and service.audioTracks()
+                       n = audio and audio.getNumberOfTracks() or 0
                        if SystemInfo["CanDownmixAC3"]:
                                self.settings.downmix = ConfigOnOff(default=config.av.downmix_ac3.value)
                                self.settings.downmix.addNotifier(self.changeAC3Downmix, initial_call = False)
@@ -77,11 +76,15 @@ class AudioSelection(Screen, ConfigListScreen):
 
                        if n > 0:
                                self.audioChannel = service.audioChannel()
-                               choicelist = [("0",_("left")), ("1",_("stereo")), ("2", _("right"))]
-                               self.settings.channelmode = ConfigSelection(choices = choicelist, default = str(self.audioChannel.getCurrentChannel()))
-                               self.settings.channelmode.addNotifier(self.changeMode, initial_call = False)
-                               conflist.append(getConfigListEntry(_("Channel"), self.settings.channelmode))
-                               self["key_green"].setBoolean(True)
+                               if self.audioChannel:
+                                       choicelist = [("0",_("left")), ("1",_("stereo")), ("2", _("right"))]
+                                       self.settings.channelmode = ConfigSelection(choices = choicelist, default = str(self.audioChannel.getCurrentChannel()))
+                                       self.settings.channelmode.addNotifier(self.changeMode, initial_call = False)
+                                       conflist.append(getConfigListEntry(_("Channel"), self.settings.channelmode))
+                                       self["key_green"].setBoolean(True)
+                               else:
+                                       conflist.append(('',))
+                                       self["key_green"].setBoolean(False)
                                selectedAudio = self.audioTracks.getCurrentTrack()
                                for x in range(n):
                                        number = str(x)
@@ -137,7 +140,7 @@ class AudioSelection(Screen, ConfigListScreen):
                                        language = _("<unknown>")
                                        selected = ""
 
-                                       if sel and x[:4] == sel[:4]:
+                                       if sel and x == sel:
                                                selected = _("Running")
                                                selectedidx = idx
                                        
@@ -156,7 +159,7 @@ class AudioSelection(Screen, ConfigListScreen):
                                                number = "%x%02x" % (x[3],x[2])
 
                                        elif x[0] == 2:
-                                               types = ("UTF-8 text","SSA / AAS",".SRT file")
+                                               types = (_("<unknown>"), "UTF-8 text", "SSA", "AAS", ".SRT file", "VOB", "PGS (unsupported)")
                                                description = types[x[2]]
 
                                        streams.append((x, "", number, description, language, selected))
@@ -185,7 +188,7 @@ class AudioSelection(Screen, ConfigListScreen):
                                conflist.append(getConfigListEntry(Plugins[0][0], ConfigNothing()))
                                self.plugincallfunc = Plugins[0][1]
                        if len(Plugins) > 1:
-                               print "these plugins are installed but not displayed in the dialog box:", Plugins[1:]
+                               print "plugin(s) installed but not displayed in the dialog box:", Plugins[1:]
 
                self["config"].list = conflist
                self["config"].l.setList(conflist)
@@ -219,7 +222,7 @@ class AudioSelection(Screen, ConfigListScreen):
                config.av.downmix_ac3.save()
 
        def changeMode(self, mode):
-               if mode is not None:
+               if mode is not None and self.audioChannel:
                        self.audioChannel.selectChannel(int(mode.getValue()))
 
        def changeAudio(self, audio):
index c872bce..912d678 100644 (file)
@@ -8,7 +8,7 @@ from Components.MenuList import MenuList
 from Components.ServiceEventTracker import ServiceEventTracker, InfoBarBase
 profile("ChannelSelection.py 1")
 from EpgSelection import EPGSelection
-from enigma import eServiceReference, eEPGCache, eServiceCenter, eRCInput, eTimer, eDVBDB, iPlayableService, iServiceInformation, getPrevAsciiCode
+from enigma import eServiceReference, eEPGCache, eServiceCenter, eRCInput, eTimer, eDVBDB, iPlayableService, iServiceInformation, getPrevAsciiCode, eEnv
 from Components.config import config, ConfigSubsection, ConfigText
 from Tools.NumericalTextInput import NumericalTextInput
 profile("ChannelSelection.py 2")
@@ -65,6 +65,24 @@ class BouquetSelector(Screen):
        def cancelClick(self):
                self.close(False)
 
+class SilentBouquetSelector:
+       def __init__(self, bouquets, enableWrapAround=False, current=0):
+               self.bouquets = [b[1] for b in bouquets]
+               self.pos = current
+               self.count = len(bouquets)
+               self.enableWrapAround = enableWrapAround
+
+       def up(self):
+               if self.pos > 0 or self.enableWrapAround:
+                       self.pos = (self.pos - 1) % self.count
+
+       def down(self):
+               if self.pos < (self.count - 1) or self.enableWrapAround:
+                       self.pos = (self.pos + 1) % self.count
+
+       def getCurrent(self):
+               return self.bouquets[self.pos]
+
 # csel.bouquet_mark_edit values
 OFF = 0
 EDIT_BOUQUET = 1
@@ -76,7 +94,7 @@ def append_when_current_valid(current, menu, args, level = 0, key = ""):
 
 class ChannelContextMenu(Screen):
        def __init__(self, session, csel):
-               from Components.ParentalControl import parentalControl
+
                Screen.__init__(self, session)
                #raise Exception("we need a better summary screen here")
                self.csel = csel
@@ -106,6 +124,7 @@ class ChannelContextMenu(Screen):
                                isPlayable = not (current_sel_flags & (eServiceReference.isMarker|eServiceReference.isDirectory))
                                if isPlayable:
                                        if config.ParentalControl.configured.value:
+                                               from Components.ParentalControl import parentalControl
                                                if parentalControl.getProtectionLevel(csel.getCurrentSelection().toCompareString()) == -1:
                                                        append_when_current_valid(current, menu, (_("add to parental protection"), boundFunction(self.addParentalProtection, csel.getCurrentSelection())), level = 0)
                                                else:
@@ -191,6 +210,7 @@ class ChannelContextMenu(Screen):
                self.close()
 
        def addParentalProtection(self, service):
+               from Components.ParentalControl import parentalControl
                parentalControl.protectService(service.toCompareString())
                self.close()
 
@@ -199,6 +219,7 @@ class ChannelContextMenu(Screen):
 
        def pinEntered(self, service, result):
                if result:
+                       from Components.ParentalControl import parentalControl
                        parentalControl.unProtectService(service)
                        self.close()
                else:
@@ -541,7 +562,7 @@ class ChannelSelectionEdit:
                        refstr = refstr[pos+14:]
                        pos = refstr.find('"')
                        if pos != -1:
-                               filename = '/etc/enigma2/' + refstr[:pos] # FIXMEEE !!! HARDCODED /etc/enigma2
+                               filename = eEnv.resolve('${sysconfdir}/enigma2/') + refstr[:pos]
                self.removeCurrentService()
                try:
                        if filename is not None:
index 73b07ac..54e241d 100644 (file)
@@ -25,9 +25,10 @@ class DefaultWizard(WizardLanguage, DreamInfoHandler):
                self["arrowup2"] = MovingPixmap()
        
        def setDirectory(self):
-               os_system("mount %s %s" % (resolveFilename(SCOPE_DEFAULTPARTITION), resolveFilename(SCOPE_DEFAULTPARTITIONMOUNTDIR)))
                self.directory = resolveFilename(SCOPE_DEFAULTPARTITIONMOUNTDIR)
                self.xmlfile = "defaultwizard.xml"
+               if self.directory:
+                       os_system("mount %s %s" % (resolveFilename(SCOPE_DEFAULTPARTITION), self.directory))
         
        def markDone(self):
                config.misc.defaultchosen.value = 0
index 5b06124..5506287 100644 (file)
@@ -221,6 +221,7 @@ class MoviePlayer(InfoBarBase, InfoBarShowHide, \
                        self.session.nav.stopService()
                elif answer == "restart":
                        self.doSeek(0)
+                       self.setSeekState(self.SEEK_STATE_PLAY)
 
        def doEofInternal(self, playing):
                if not self.execing:
index 6fa8911..93a4788 100644 (file)
@@ -1,4 +1,4 @@
-from ChannelSelection import ChannelSelection, BouquetSelector
+from ChannelSelection import ChannelSelection, BouquetSelector, SilentBouquetSelector
 
 from Components.ActionMap import ActionMap, HelpableActionMap
 from Components.ActionMap import NumberActionMap
@@ -559,6 +559,12 @@ class InfoBarEPG:
                        cnt = 0
                else:
                        cnt = len(bouquets)
+               if config.usage.multiepg_ask_bouquet.value:
+                       self.openMultiServiceEPGAskBouquet(bouquets, cnt, withCallback)
+               else:
+                       self.openMultiServiceEPGSilent(bouquets, cnt, withCallback)
+
+       def openMultiServiceEPGAskBouquet(self, bouquets, cnt, withCallback):
                if cnt > 1: # show bouquet list
                        if withCallback:
                                self.bouquetSel = self.session.openWithCallback(self.closed, BouquetSelector, bouquets, self.openBouquetEPG, enableWrapAround=True)
@@ -568,6 +574,21 @@ class InfoBarEPG:
                elif cnt == 1:
                        self.openBouquetEPG(bouquets[0][1], withCallback)
 
+       def openMultiServiceEPGSilent(self, bouquets, cnt, withCallback):
+               root = self.servicelist.getRoot()
+               rootstr = root.toCompareString()
+               current = 0
+               for bouquet in bouquets:
+                       if bouquet[1].toCompareString() == rootstr:
+                               break
+                       current += 1
+               if current >= cnt:
+                       current = 0
+               if cnt > 1: # create bouquet list for bouq+/-
+                       self.bouquetSel = SilentBouquetSelector(bouquets, True, self.servicelist.getBouquetNumOffset(root))
+               if cnt >= 1:
+                       self.openBouquetEPG(root, withCallback)
+
        def changeServiceCB(self, direction, epg):
                if self.serviceSel:
                        if direction > 0:
@@ -717,7 +738,7 @@ class InfoBarSeek:
        SEEK_STATE_PAUSE = (1, 0, 0, "||")
        SEEK_STATE_EOF = (1, 0, 0, "END")
 
-       def __init__(self, actionmap = "InfobarSeekActions", useSeekBackHack=True):
+       def __init__(self, actionmap = "InfobarSeekActions"):
                self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
                        {
                                iPlayableService.evSeekableStatusChanged: self.__seekableStatusChanged,
@@ -774,20 +795,10 @@ 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:
-                       return (0, n, 0, ">> %dx" % n)
+               return (0, n, 0, ">> %dx" % n)
 
        def makeStateBackward(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:
-                       return (0, -n, 0, "<< %dx" % n)
+               return (0, -n, 0, "<< %dx" % n)
 
        def makeStateSlowMotion(self, n):
                return (0, 0, n, "/%d" % n)
@@ -1363,6 +1374,7 @@ class InfoBarExtensions:
                        answer[1][1]()
 
 from Tools.BoundFunction import boundFunction
+import inspect
 
 # depends on InfoBarExtensions
 
@@ -1374,9 +1386,13 @@ class InfoBarPlugins:
                return name
 
        def getPluginList(self):
-               list = [((boundFunction(self.getPluginName, p.name), boundFunction(self.runPlugin, p), lambda: True), None, p.name) for p in plugins.getPlugins(where = PluginDescriptor.WHERE_EXTENSIONSMENU)]
-               list.sort(key = lambda e: e[2]) # sort by name
-               return list
+               l = []
+               for p in plugins.getPlugins(where = PluginDescriptor.WHERE_EXTENSIONSMENU):
+                 args = inspect.getargspec(p.__call__)[0]
+                 if len(args) == 1 or len(args) == 2 and isinstance(self, InfoBarChannelSelection):
+                         l.append(((boundFunction(self.getPluginName, p.name), boundFunction(self.runPlugin, p), lambda: True), None, p.name))
+               l.sort(key = lambda e: e[2]) # sort by name
+               return l
 
        def runPlugin(self, plugin):
                if isinstance(self, InfoBarChannelSelection):
@@ -1534,28 +1550,30 @@ class InfoBarInstantRecord:
 
                recording = RecordTimerEntry(serviceref, begin, end, name, description, eventid, dirname = preferredInstantRecordPath())
                recording.dontSave = True
-               
+
                if event is None or limitEvent == False:
                        recording.autoincrease = True
-                       if recording.setAutoincreaseEnd():
-                               self.session.nav.RecordTimer.record(recording)
-                               self.recording.append(recording)
+                       recording.setAutoincreaseEnd()
+
+               simulTimerList = self.session.nav.RecordTimer.record(recording)
+
+               if simulTimerList is None:      # no conflict
+                       self.recording.append(recording)
                else:
-                               simulTimerList = self.session.nav.RecordTimer.record(recording)
-                               if simulTimerList is not None:  # conflict with other recording
-                                       name = simulTimerList[1].name
-                                       name_date = ' '.join((name, strftime('%c', localtime(simulTimerList[1].begin))))
-                                       print "[TIMER] conflicts with", name_date
-                                       recording.autoincrease = True   # start with max available length, then increment
-                                       if recording.setAutoincreaseEnd():
-                                               self.session.nav.RecordTimer.record(recording)
-                                               self.recording.append(recording)
-                                               self.session.open(MessageBox, _("Record time limited due to conflicting timer %s") % name_date, MessageBox.TYPE_INFO)
-                                       else:
-                                               self.session.open(MessageBox, _("Couldn't record due to conflicting timer %s") % name, MessageBox.TYPE_INFO)
-                                       recording.autoincrease = False
-                               else:
+                       if len(simulTimerList) > 1: # with other recording
+                               name = simulTimerList[1].name
+                               name_date = ' '.join((name, strftime('%c', localtime(simulTimerList[1].begin))))
+                               print "[TIMER] conflicts with", name_date
+                               recording.autoincrease = True   # start with max available length, then increment
+                               if recording.setAutoincreaseEnd():
+                                       self.session.nav.RecordTimer.record(recording)
                                        self.recording.append(recording)
+                                       self.session.open(MessageBox, _("Record time limited due to conflicting timer %s") % name_date, MessageBox.TYPE_INFO)
+                               else:
+                                       self.session.open(MessageBox, _("Couldn't record due to conflicting timer %s") % name, MessageBox.TYPE_INFO)
+                       else:
+                               self.session.open(MessageBox, _("Couldn't record due to invalid service %s") % serviceref, MessageBox.TYPE_INFO)
+                       recording.autoincrease = False
 
        def isInstantRecordRunning(self):
                print "self.recording:", self.recording
@@ -1970,20 +1988,21 @@ class InfoBarCueSheetSupport:
                return True
 
        def jumpPreviousMark(self):
-               # we add 2 seconds, so if the play position is <2s after
+               # we add 5 seconds, so if the play position is <5s after
                # the mark, the mark before will be used
                self.jumpPreviousNextMark(lambda x: -x-5*90000, start=True)
 
        def jumpNextMark(self):
-               if not self.jumpPreviousNextMark(lambda x: x):
+               if not self.jumpPreviousNextMark(lambda x: x-90000):
                        self.doSeek(-1)
 
        def getNearestCutPoint(self, pts, cmp=abs, start=False):
                # can be optimized
-               beforecut = False
+               beforecut = True
                nearest = None
+               bestdiff = -1
+               instate = True
                if start:
-                       beforecut = True
                        bestdiff = cmp(0 - pts)
                        if bestdiff >= 0:
                                nearest = [0, False]
@@ -1992,14 +2011,19 @@ class InfoBarCueSheetSupport:
                                beforecut = False
                                if cp[1] == self.CUT_TYPE_IN:  # Start is here, disregard previous marks
                                        diff = cmp(cp[0] - pts)
-                                       if diff >= 0:
+                                       if start and diff >= 0:
                                                nearest = cp
                                                bestdiff = diff
                                        else:
                                                nearest = None
-                       if cp[1] in (self.CUT_TYPE_MARK, self.CUT_TYPE_LAST):
+                                               bestdiff = -1
+                       if cp[1] == self.CUT_TYPE_IN:
+                               instate = True
+                       elif cp[1] == self.CUT_TYPE_OUT:
+                               instate = False
+                       elif cp[1] in (self.CUT_TYPE_MARK, self.CUT_TYPE_LAST):
                                diff = cmp(cp[0] - pts)
-                               if diff >= 0 and (nearest is None or bestdiff > diff):
+                               if instate and diff >= 0 and (nearest is None or bestdiff > diff):
                                        nearest = cp
                                        bestdiff = diff
                return nearest
index 61ce356..7dd7b12 100644 (file)
@@ -41,9 +41,11 @@ class InputBox(Screen):
                        "9": self.keyNumberGlobal,
                        "0": self.keyNumberGlobal
                }, -1)
+
                if self["input"].type == Input.TEXT:
-                       rcinput = eRCInput.getInstance()
-                       rcinput.setKeyboardMode(rcinput.kmAscii)
+                       self.onExecBegin.append(self.setKeyboardModeAscii)
+               else:
+                       self.onExecBegin.append(self.setKeyboardModeNone)
 
        def gotAsciiCode(self):
                self["input"].handleAscii(getPrevAsciiCode())
@@ -61,13 +63,9 @@ class InputBox(Screen):
                self["input"].delete()
 
        def go(self):
-               rcinput = eRCInput.getInstance()
-               rcinput.setKeyboardMode(rcinput.kmNone)
                self.close(self["input"].getText())
 
        def cancel(self):
-               rcinput = eRCInput.getInstance()
-               rcinput.setKeyboardMode(rcinput.kmNone)
                self.close(None)
 
        def keyHome(self):
@@ -142,19 +140,13 @@ class PinInput(InputBox):
                                pass
        
        def closePinWrong(self, *args):
-               rcinput = eRCInput.getInstance()
-               rcinput.setKeyboardMode(rcinput.kmNone)
                print "args:", args
                self.close(False)
                
        def closePinCorrect(self, *args):
-               rcinput = eRCInput.getInstance()
-               rcinput.setKeyboardMode(rcinput.kmNone)
                self.close(True)
                
        def closePinCancel(self, *args):
-               rcinput = eRCInput.getInstance()
-               rcinput.setKeyboardMode(rcinput.kmNone)
                self.close(None)
                        
        def cancel(self):
index de2fa99..4b15ee0 100755 (executable)
@@ -11,7 +11,7 @@ from Components.Sources.List import List
 from Components.Label import Label,MultiColorLabel
 from Components.Pixmap import Pixmap,MultiPixmap
 from Components.MenuList import MenuList
-from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigText, ConfigPassword, ConfigSelection, getConfigListEntry, ConfigNothing
+from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigText, ConfigPassword, ConfigSelection, getConfigListEntry, ConfigNothing, ConfigBoolean
 from Components.ConfigList import ConfigListScreen
 from Components.PluginComponent import plugins
 from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
@@ -42,11 +42,6 @@ class NetworkAdapterSelection(Screen,HelpableScreen):
                self["key_blue"] = StaticText("")
                self["introduction"] = StaticText(self.edittext)
                
-               self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()]
-               
-               if not self.adapters:
-                       self.onFirstExecBegin.append(self.NetworkFallback)
-                       
                self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
                        {
                        "cancel": (self.close, _("exit network interface list")),
@@ -65,6 +60,14 @@ class NetworkAdapterSelection(Screen,HelpableScreen):
                        "yellow": (self.setDefaultInterface, [_("Set interface as default Interface"),_("* Only available if more than one interface is active.")] ),
                        })
 
+               self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()]
+
+               if not self.adapters:
+                       self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getConfiguredAdapters()]
+
+               if len(self.adapters) == 0:
+                       self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getInstalledAdapters()]
+
                self.list = []
                self["list"] = List(self.list)
                self.updateList()
@@ -80,14 +83,14 @@ class NetworkAdapterSelection(Screen,HelpableScreen):
                description = None
                interfacepng = None
 
-               if iface in iNetwork.lan_interfaces:
+               if not iNetwork.isWirelessInterface(iface):
                        if active is True:
                                interfacepng = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/network_wired-active.png"))
                        elif active is False:
                                interfacepng = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/network_wired-inactive.png"))
                        else:
                                interfacepng = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/network_wired.png"))
-               elif iface in iNetwork.wlan_interfaces:
+               elif iNetwork.isWirelessInterface(iface):
                        if active is True:
                                interfacepng = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/network_wireless-active.png"))
                        elif active is False:
@@ -132,19 +135,16 @@ class NetworkAdapterSelection(Screen,HelpableScreen):
                        fp.close()
                        default_gw = result
                                        
-               if len(self.adapters) == 0: # no interface available => display only eth0
-                       self.list.append(self.buildInterfaceList("eth0",iNetwork.getFriendlyAdapterName('eth0'),True,True ))
-               else:
-                       for x in self.adapters:
-                               if x[1] == default_gw:
-                                       default_int = True
-                               else:
-                                       default_int = False
-                               if iNetwork.getAdapterAttribute(x[1], 'up') is True:
-                                       active_int = True
-                               else:
-                                       active_int = False
-                               self.list.append(self.buildInterfaceList(x[1],_(x[0]),default_int,active_int ))
+               for x in self.adapters:
+                       if x[1] == default_gw:
+                               default_int = True
+                       else:
+                               default_int = False
+                       if iNetwork.getAdapterAttribute(x[1], 'up') is True:
+                               active_int = True
+                       else:
+                               active_int = False
+                       self.list.append(self.buildInterfaceList(x[1],_(x[0]),default_int,active_int ))
                
                if os_path.exists(resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml")):
                        self["key_blue"].setText(_("NetworkWizard"))
@@ -179,22 +179,6 @@ class NetworkAdapterSelection(Screen,HelpableScreen):
                else:
                        self.updateList()
 
-       def NetworkFallback(self):
-               if iNetwork.configuredNetworkAdapters.has_key('wlan0') is True:
-                       self.session.openWithCallback(self.ErrorMessageClosed, MessageBox, self.wlan_errortext, type = MessageBox.TYPE_INFO,timeout = 10)
-               if iNetwork.configuredNetworkAdapters.has_key('ath0') is True:
-                       self.session.openWithCallback(self.ErrorMessageClosed, MessageBox, self.wlan_errortext, type = MessageBox.TYPE_INFO,timeout = 10)
-               else:
-                       self.session.openWithCallback(self.ErrorMessageClosed, MessageBox, self.lan_errortext, type = MessageBox.TYPE_INFO,timeout = 10)
-
-       def ErrorMessageClosed(self, *ret):
-               if iNetwork.configuredNetworkAdapters.has_key('wlan0') is True:
-                       self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, 'wlan0')
-               elif iNetwork.configuredNetworkAdapters.has_key('ath0') is True:
-                       self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, 'ath0')
-               else:
-                       self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, 'eth0')
-
        def cleanup(self):
                iNetwork.stopLinkStateConsole()
                iNetwork.stopRestartConsole()
@@ -312,18 +296,17 @@ class NameserverSetup(Screen, ConfigListScreen, HelpableScreen):
 
 
 class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
-       def __init__(self, session, networkinfo, essid=None, aplist=None):
+       def __init__(self, session, networkinfo, essid=None):
                Screen.__init__(self, session)
                HelpableScreen.__init__(self)
                self.session = session
                if isinstance(networkinfo, (list, tuple)):
                        self.iface = networkinfo[0]
                        self.essid = networkinfo[1]
-                       self.aplist = networkinfo[2]
                else:
                        self.iface = networkinfo
                        self.essid = essid
-                       self.aplist = aplist
+                       
                self.extended = None
                self.applyConfigRef = None
                self.finished_cb = None
@@ -414,62 +397,36 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                self.gatewayEntry = None
                self.hiddenSSID = None
                self.wlanSSID = None
-               self.encryptionEnabled = None
-               self.encryptionKey = None
+               self.encryption = None
                self.encryptionType = None
-               self.nwlist = None
+               self.encryptionKey = None
                self.encryptionlist = None
                self.weplist = None
                self.wsconfig = None
                self.default = None
 
-               if self.iface in iNetwork.wlan_interfaces:
-                       from Plugins.SystemPlugins.WirelessLan.Wlan import wpaSupplicant,Wlan
-                       self.w = Wlan(self.iface)
+               if iNetwork.isWirelessInterface(self.iface):
+                       from Plugins.SystemPlugins.WirelessLan.Wlan import wpaSupplicant
                        self.ws = wpaSupplicant()
                        self.encryptionlist = []
+                       self.encryptionlist.append(("Unencrypted", _("Unencrypted")))
                        self.encryptionlist.append(("WEP", _("WEP")))
                        self.encryptionlist.append(("WPA", _("WPA")))
-                       self.encryptionlist.append(("WPA2", _("WPA2")))
                        self.encryptionlist.append(("WPA/WPA2", _("WPA or WPA2")))
+                       self.encryptionlist.append(("WPA2", _("WPA2")))
                        self.weplist = []
                        self.weplist.append("ASCII")
                        self.weplist.append("HEX")
-                       if self.aplist is not None:
-                               self.nwlist = self.aplist
-                               self.nwlist.sort(key = lambda x: x[0])
-                       else:
-                               self.nwlist = []
-                               self.aps = None
-                               try:
-                                       self.aps = self.w.getNetworkList()
-                                       if self.aps is not None:
-                                               for ap in self.aps:
-                                                       a = self.aps[ap]
-                                                       if a['active']:
-                                                               if a['essid'] != '':
-                                                                       self.nwlist.append((a['essid'],a['essid']))
-                                       self.nwlist.sort(key = lambda x: x[0])
-                               except:
-                                       self.nwlist.append(("No Networks found",_("No Networks found")))
-
-                       self.wsconfig = self.ws.loadConfig()
-                       if self.essid is not None: # ssid from wlan scan
-                               self.default = self.essid
-                       else:
-                               self.default = self.wsconfig['ssid']
 
-                       if "hidden..." not in self.nwlist:
-                               self.nwlist.append(("hidden...",_("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 ))
-                       config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = self.wsconfig['hiddenessid'], visible_width = 50, fixed_size = False))
+                       self.wsconfig = self.ws.loadConfig(self.iface)
+                       if self.essid is None:
+                               self.essid = self.wsconfig['ssid']
 
-                       config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = self.wsconfig['encryption'] ))
-                       config.plugins.wlan.encryption.type = NoSave(ConfigSelection(self.encryptionlist, default = self.wsconfig['encryption_type'] ))
-                       config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(self.weplist, default = self.wsconfig['encryption_wepkeytype'] ))
-                       config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = self.wsconfig['key'], visible_width = 50, fixed_size = False))
+                       config.plugins.wlan.hiddenessid = NoSave(ConfigYesNo(default = self.wsconfig['hiddenessid']))
+                       config.plugins.wlan.essid = NoSave(ConfigText(default = self.essid, visible_width = 50, fixed_size = False))
+                       config.plugins.wlan.encryption = NoSave(ConfigSelection(self.encryptionlist, default = self.wsconfig['encryption'] ))
+                       config.plugins.wlan.wepkeytype = NoSave(ConfigSelection(self.weplist, default = self.wsconfig['wepkeytype'] ))
+                       config.plugins.wlan.psk = NoSave(ConfigPassword(default = self.wsconfig['key'], visible_width = 50, fixed_size = False))
 
                self.activateInterfaceEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "up") or False))
                self.dhcpConfigEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "dhcp") or False))
@@ -502,6 +459,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                                        self.list.append(getConfigListEntry(_('Gateway'), self.gatewayConfigEntry))
 
                        self.extended = None
+                       self.configStrings = None
                        for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKSETUP):
                                callFnc = p.__call__["ifaceSupported"](self.iface)
                                if callFnc is not None:
@@ -509,30 +467,21 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                                                self.extended = callFnc
                                                if p.__call__.has_key("configStrings"):
                                                        self.configStrings = p.__call__["configStrings"]
-                                               else:
-                                                       self.configStrings = None
-                                               if config.plugins.wlan.essid.value == 'hidden...':
-                                                       self.wlanSSID = getConfigListEntry(_("Network SSID"), config.plugins.wlan.essid)
-                                                       self.list.append(self.wlanSSID)
-                                                       self.hiddenSSID = getConfigListEntry(_("Hidden network SSID"), config.plugins.wlan.hiddenessid)
-                                                       self.list.append(self.hiddenSSID)
-                                               else:
-                                                       self.wlanSSID = getConfigListEntry(_("Network SSID"), config.plugins.wlan.essid)
-                                                       self.list.append(self.wlanSSID)
-                                               self.encryptionEnabled = getConfigListEntry(_("Encryption"), config.plugins.wlan.encryption.enabled)
-                                               self.list.append(self.encryptionEnabled)
-                                               
-                                               if config.plugins.wlan.encryption.enabled.value:
-                                                       self.encryptionType = getConfigListEntry(_("Encryption Type"), config.plugins.wlan.encryption.type)
-                                                       self.list.append(self.encryptionType)
-                                                       if config.plugins.wlan.encryption.type.value == 'WEP':
-                                                               self.list.append(getConfigListEntry(_("Encryption Keytype"), config.plugins.wlan.encryption.wepkeytype))
-                                                               self.encryptionKey = getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk)
-                                                               self.list.append(self.encryptionKey)
-                                                       else:
-                                                               self.encryptionKey = getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk)
-                                                               self.list.append(self.encryptionKey)
 
+                                               self.hiddenSSID = getConfigListEntry(_("Hidden network"), config.plugins.wlan.hiddenessid)
+                                               self.list.append(self.hiddenSSID)
+                                               self.wlanSSID = getConfigListEntry(_("Networkname (SSID)"), config.plugins.wlan.essid)
+                                               self.list.append(self.wlanSSID)
+                                               self.encryption = getConfigListEntry(_("Encryption"), config.plugins.wlan.encryption)
+                                               self.list.append(self.encryption)                                               
+
+                                               self.encryptionType = getConfigListEntry(_("Encryption Keytype"), config.plugins.wlan.wepkeytype)
+                                               self.encryptionKey = getConfigListEntry(_("Encryption Key"), config.plugins.wlan.psk)
+                                               
+                                               if config.plugins.wlan.encryption.value != "Unencrypted":
+                                                       if config.plugins.wlan.encryption.value == 'WEP':
+                                                               self.list.append(self.encryptionType)
+                                                       self.list.append(self.encryptionKey)
                self["config"].list = self.list
                self["config"].l.setList(self.list)
 
@@ -546,12 +495,8 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                        self.createSetup()
                if self["config"].getCurrent() == self.gatewayEntry:
                        self.createSetup()
-               if self.iface in iNetwork.wlan_interfaces:
-                       if self["config"].getCurrent() == self.wlanSSID:
-                               self.createSetup()
-                       if self["config"].getCurrent() == self.encryptionEnabled:
-                               self.createSetup()
-                       if self["config"].getCurrent() == self.encryptionType:
+               if iNetwork.isWirelessInterface(self.iface):
+                       if self["config"].getCurrent() == self.encryption:
                                self.createSetup()
 
        def keyLeft(self):
@@ -576,7 +521,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                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():
+                               if 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)
@@ -594,11 +539,15 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                                if interface == self.iface:
                                        continue
                                iNetwork.setAdapterAttribute(interface, "up", False)
-                               iNetwork.deactivateInterface(interface)
-                               self.applyConfig(True)
+                       iNetwork.deactivateInterface(configuredInterfaces,self.deactivateSecondInterfaceCB)
+
+       def deactivateSecondInterfaceCB(self, data):
+               if data is True:
+                       self.applyConfig(True)
 
        def applyConfig(self, ret = False):
                if (ret == True):
+                       self.applyConfigRef = None
                        iNetwork.setAdapterAttribute(self.iface, "up", self.activateInterfaceEntry.value)
                        iNetwork.setAdapterAttribute(self.iface, "dhcp", self.dhcpConfigEntry.value)
                        iNetwork.setAdapterAttribute(self.iface, "ip", self.ipConfigEntry.value)
@@ -607,17 +556,33 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                                iNetwork.setAdapterAttribute(self.iface, "gateway", self.gatewayConfigEntry.value)
                        else:
                                iNetwork.removeAdapterAttribute(self.iface, "gateway")
-                       if self.extended is not None and self.configStrings is not None:
+
+                       if (self.extended is not None and self.configStrings is not None):
                                iNetwork.setAdapterAttribute(self.iface, "configStrings", self.configStrings(self.iface))
-                               self.ws.writeConfig()
+                               self.ws.writeConfig(self.iface)
+                               
                        if self.activateInterfaceEntry.value is False:
-                               iNetwork.deactivateInterface(self.iface)
-                       iNetwork.writeNetworkConfig()
-                       iNetwork.restartNetwork(self.applyConfigDataAvail)
-                       self.applyConfigRef = self.session.openWithCallback(self.applyConfigfinishedCB, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False)
+                               iNetwork.deactivateInterface(self.iface,self.deactivateInterfaceCB)
+                               iNetwork.writeNetworkConfig()
+                               self.applyConfigRef = self.session.openWithCallback(self.applyConfigfinishedCB, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False)
+                       else:
+                               if self.oldInterfaceState is False:
+                                       iNetwork.activateInterface(self.iface,self.deactivateInterfaceCB)
+                               else:
+                                       iNetwork.deactivateInterface(self.iface,self.activateInterfaceCB)
+                               iNetwork.writeNetworkConfig()
+                               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.keyCancel()
 
+       def deactivateInterfaceCB(self, data):
+               if data is True:
+                       self.applyConfigDataAvail(True)
+
+       def activateInterfaceCB(self, data):
+               if data is True:
+                       iNetwork.activateInterface(self.iface,self.applyConfigDataAvail)
+
        def applyConfigDataAvail(self, data):
                if data is True:
                        iNetwork.getInterfaces(self.getInterfacesDataAvail)
@@ -675,10 +640,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                
        def hideInputHelp(self):
                current = self["config"].getCurrent()
-               if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...':
+               if current == self.wlanSSID:
                        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:
+               elif current == self.encryptionKey and config.plugins.wlan.encryption.value is not "Unencrypted":
                        if current[1].help_window.instance is not None:
                                current[1].help_window.instance.hide()
 
@@ -703,7 +668,8 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                
                self.oktext = _("Press OK on your remote control to continue.")
                self.reboottext = _("Your Dreambox will restart after pressing OK on your remote control.")
-               self.errortext = _("No working wireless network interface found.\n Please verify that you have attached a compatible WLAN device or enable your local network interface.")      
+               self.errortext = _("No working wireless network interface found.\n Please verify that you have attached a compatible WLAN device or enable your local network interface.")
+               self.missingwlanplugintxt = _("The wireless LAN plugin is not installed!\nPlease install it.")
                
                self["WizardActions"] = HelpableActionMap(self, "WizardActions",
                        {
@@ -739,30 +705,39 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                self.onLayoutFinish.append(self.layoutFinished)
                self.onClose.append(self.cleanup)
 
+
+       def queryWirelessDevice(self,iface):
+               try:
+                       from pythonwifi.iwlibs import Wireless
+                       import errno
+               except ImportError:
+                       return False
+               else:
+                       try:
+                               ifobj = Wireless(iface) # a Wireless NIC Object
+                               wlanresponse = ifobj.getAPaddr()
+                       except IOError, (error_no, error_str):
+                               if error_no in (errno.EOPNOTSUPP, errno.ENODEV, errno.EPERM):
+                                       return False
+                               else:
+                                       print "error: ",error_no,error_str
+                                       return True
+                       else:
+                               return True
+
        def ok(self):
                self.cleanup()
                if self["menulist"].getCurrent()[1] == 'edit':
-                       if self.iface in iNetwork.wlan_interfaces:
+                       if iNetwork.isWirelessInterface(self.iface):
                                try:
                                        from Plugins.SystemPlugins.WirelessLan.plugin import WlanScan
-                                       from pythonwifi.iwlibs import Wireless
                                except ImportError:
-                                       self.session.open(MessageBox, _("The wireless LAN plugin is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 )
+                                       self.session.open(MessageBox, self.missingwlanplugintxt, type = MessageBox.TYPE_INFO,timeout = 10 )
                                else:
-                                       ifobj = Wireless(self.iface) # a Wireless NIC Object
-                                       try:
-                                               self.wlanresponse = ifobj.getAPaddr()
-                                       except IOError:
-                                               self.wlanresponse = ifobj.getStatistics()
-                                       if self.wlanresponse:
-                                               if self.wlanresponse[0] not in (19,95): # 19 = 'No such device', 95 = 'Operation not supported'
-                                                       self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup,self.iface)
-                                               else:
-                                                       # Display Wlan not available Message
-                                                       self.showErrorMessage()
+                                       if self.queryWirelessDevice(self.iface):
+                                               self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup,self.iface)
                                        else:
-                                               # Display Wlan not available Message
-                                               self.showErrorMessage()
+                                               self.showErrorMessage() # Display Wlan not available Message
                        else:
                                self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup,self.iface)
                if self["menulist"].getCurrent()[1] == 'test':
@@ -772,45 +747,23 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                if self["menulist"].getCurrent()[1] == 'scanwlan':
                        try:
                                from Plugins.SystemPlugins.WirelessLan.plugin import WlanScan
-                               from pythonwifi.iwlibs import Wireless
                        except ImportError:
-                               self.session.open(MessageBox, _("The wireless LAN plugin is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 )
+                               self.session.open(MessageBox, self.missingwlanplugintxt, type = MessageBox.TYPE_INFO,timeout = 10 )
                        else:
-                               ifobj = Wireless(self.iface) # a Wireless NIC Object
-                               try:
-                                       self.wlanresponse = ifobj.getAPaddr()
-                               except IOError:
-                                       self.wlanresponse = ifobj.getStatistics()
-                               if self.wlanresponse:
-                                       if self.wlanresponse[0] not in (19,95): # 19 = 'No such device', 95 = 'Operation not supported'
-                                               self.session.openWithCallback(self.WlanScanClosed, WlanScan, self.iface)
-                                       else:
-                                               # Display Wlan not available Message
-                                               self.showErrorMessage()
+                               if self.queryWirelessDevice(self.iface):
+                                       self.session.openWithCallback(self.WlanScanClosed, WlanScan, self.iface)
                                else:
-                                       # Display Wlan not available Message
-                                       self.showErrorMessage()
+                                       self.showErrorMessage() # Display Wlan not available Message
                if self["menulist"].getCurrent()[1] == 'wlanstatus':
                        try:
                                from Plugins.SystemPlugins.WirelessLan.plugin import WlanStatus
-                               from pythonwifi.iwlibs import Wireless
                        except ImportError:
-                               self.session.open(MessageBox, _("The wireless LAN plugin is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 )
-                       else:   
-                               ifobj = Wireless(self.iface) # a Wireless NIC Object
-                               try:
-                                       self.wlanresponse = ifobj.getAPaddr()
-                               except IOError:
-                                       self.wlanresponse = ifobj.getStatistics()
-                               if self.wlanresponse:
-                                       if self.wlanresponse[0] not in (19,95): # 19 = 'No such device', 95 = 'Operation not supported'
-                                               self.session.openWithCallback(self.WlanStatusClosed, WlanStatus,self.iface)
-                                       else:
-                                               # Display Wlan not available Message
-                                               self.showErrorMessage()
+                               self.session.open(MessageBox, self.missingwlanplugintxt, type = MessageBox.TYPE_INFO,timeout = 10 )
+                       else:
+                               if self.queryWirelessDevice(self.iface):
+                                       self.session.openWithCallback(self.WlanStatusClosed, WlanStatus,self.iface)
                                else:
-                                       # Display Wlan not available Message
-                                       self.showErrorMessage()
+                                       self.showErrorMessage() # Display Wlan not available Message
                if self["menulist"].getCurrent()[1] == 'lanrestart':
                        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':
@@ -866,7 +819,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                self["IF"].setText(iNetwork.getFriendlyAdapterName(self.iface))
                self["Statustext"].setText(_("Link:"))
                
-               if self.iface in iNetwork.wlan_interfaces:
+               if iNetwork.isWirelessInterface(self.iface):
                        try:
                                from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
                        except:
@@ -916,27 +869,16 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
 
        def AdapterSetupClosed(self, *ret):
                if ret is not None and len(ret):
-                       if ret[0] == 'ok' and (self.iface in iNetwork.wlan_interfaces) and iNetwork.getAdapterAttribute(self.iface, "up") is True:
+                       if ret[0] == 'ok' and (iNetwork.isWirelessInterface(self.iface) and iNetwork.getAdapterAttribute(self.iface, "up") is True):
                                try:
                                        from Plugins.SystemPlugins.WirelessLan.plugin import WlanStatus
-                                       from pythonwifi.iwlibs import Wireless
                                except ImportError:
-                                       self.session.open(MessageBox, _("The wireless LAN plugin is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 )
+                                       self.session.open(MessageBox, self.missingwlanplugintxt, type = MessageBox.TYPE_INFO,timeout = 10 )
                                else:   
-                                       ifobj = Wireless(self.iface) # a Wireless NIC Object
-                                       try:
-                                               self.wlanresponse = ifobj.getAPaddr()
-                                       except IOError:
-                                               self.wlanresponse = ifobj.getStatistics()
-                                       if self.wlanresponse:
-                                               if self.wlanresponse[0] not in (19,95): # 19 = 'No such device', 95 = 'Operation not supported'
-                                                       self.session.openWithCallback(self.WlanStatusClosed, WlanStatus,self.iface)
-                                               else:
-                                                       # Display Wlan not available Message
-                                                       self.showErrorMessage()
+                                       if self.queryWirelessDevice(self.iface):
+                                               self.session.openWithCallback(self.WlanStatusClosed, WlanStatus,self.iface)
                                        else:
-                                               # Display Wlan not available Message
-                                               self.showErrorMessage()
+                                               self.showErrorMessage() # Display Wlan not available Message
                        else:
                                self.updateStatusbar()
                else:
@@ -950,7 +892,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
 
        def WlanScanClosed(self,*ret):
                if ret[0] is not None:
-                       self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup, self.iface,ret[0],ret[1])
+                       self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup, self.iface,ret[0])
                else:
                        from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
                        iStatus.stopWlanConsole()
@@ -995,6 +937,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
        def cleanup(self):
                iNetwork.stopLinkStateConsole()
                iNetwork.stopDeactivateInterfaceConsole()
+               iNetwork.stopActivateInterfaceConsole()
                iNetwork.stopPingConsole()
                try:
                        from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
@@ -1008,7 +951,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                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:
+                                       if status[self.iface]["essid"] == "off" or status[self.iface]["accesspoint"] == "Not-Associated" or status[self.iface]["accesspoint"] == False:
                                                self.LinkState = False
                                                self["statuspic"].setPixmapNum(1)
                                                self["statuspic"].show()
@@ -1376,7 +1319,7 @@ class NetworkAdapterTest(Screen):
 
        def LinkStatedataAvail(self,data):
                self.output = data.strip()
-               result = self.output.split('\n')
+               result = self.output.splitlines()
                pattern = re_compile("Link detected: yes")
                for item in result:
                        if re_search(pattern, item):
@@ -1430,7 +1373,7 @@ class NetworkAdapterTest(Screen):
                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:
+                                       if status[self.iface]["essid"] == "off" or status[self.iface]["accesspoint"] == "Not-Associated" or status[self.iface]["accesspoint"] == False:
                                                self["Network"].setForegroundColorNum(1)
                                                self["Network"].setText(_("disconnected"))
                                                self["NetworkInfo_Check"].setPixmapNum(1)
index f174b58..284294f 100644 (file)
@@ -3,7 +3,7 @@ from Components.ConfigList import ConfigListScreen
 from Components.ActionMap import NumberActionMap
 from Components.config import config, getConfigListEntry, ConfigNothing, NoSave, ConfigPIN
 from Components.ParentalControlList import ParentalControlEntryComponent, ParentalControlList 
-from Components.ParentalControl import parentalControl
+
 from Components.Sources.StaticText import StaticText
 from Screens.ChoiceBox import ChoiceBox
 from Screens.MessageBox import MessageBox
@@ -119,6 +119,7 @@ class ParentalControlSetup(Screen, ConfigListScreen, ProtectedScreen):
                elif self["config"].l.getCurrentSelection() == self.changeSetupPin:
                        self.session.open(ParentalControlChangePin, config.ParentalControl.setuppin, _("setup PIN"))
                elif self["config"].l.getCurrentSelection() == self.reloadLists:
+                       from Components.ParentalControl import parentalControl
                        parentalControl.open()
                else:
                        ConfigListScreen.keyRight(self)
@@ -255,6 +256,7 @@ class ParentalControlEditor(Screen):
                self.session.openWithCallback(self.letterChosen, ChoiceBox, title=_("Show services beginning with"), list=mylist, keys = [], selection = sel)
 
        def letterChosen(self, result):
+               from Components.ParentalControl import parentalControl
                if result is not None:
                        print "result:", result
                        self.currentLetter = result[1]
@@ -284,6 +286,7 @@ class ParentalControlBouquetEditor(Screen):
                }, -1)
 
        def cancel(self):
+               from Components.ParentalControl import parentalControl
                parentalControl.save()
                self.close()
 
@@ -300,6 +303,7 @@ class ParentalControlBouquetEditor(Screen):
                        self.bouquetlist = list.getContent("CN", True)
        
        def selectBouquet(self):
+               from Components.ParentalControl import parentalControl
                self.list = [ParentalControlEntryComponent(x[0], x[1], parentalControl.getProtectionType(x[0])) for x in self.bouquetlist]
                self.bouquetslist.setList(self.list)
 
index 69bf80f..359552e 100755 (executable)
@@ -155,9 +155,9 @@ class PluginDownloadBrowser(Screen):
        def runInstall(self, val):
                if val:
                        if self.type == self.DOWNLOAD:
-                               self.session.openWithCallback(self.installFinished, Console, cmdlist = ["ipkg install " + "enigma2-plugin-" + self["list"].l.getCurrentSelection()[0].name])
+                               self.session.openWithCallback(self.installFinished, Console, cmdlist = ["opkg install " + "enigma2-plugin-" + self["list"].l.getCurrentSelection()[0].name])
                        elif self.type == self.REMOVE:
-                               self.session.openWithCallback(self.installFinished, Console, cmdlist = ["ipkg remove " + "enigma2-plugin-" + self["list"].l.getCurrentSelection()[0].name])
+                               self.session.openWithCallback(self.installFinished, Console, cmdlist = ["opkg remove " + "enigma2-plugin-" + self["list"].l.getCurrentSelection()[0].name])
 
        def setWindowTitle(self):
                if self.type == self.DOWNLOAD:
@@ -166,17 +166,17 @@ class PluginDownloadBrowser(Screen):
                        self.setTitle(_("Remove plugins"))
 
        def startIpkgListInstalled(self):
-               self.container.execute("ipkg list_installed enigma2-plugin-*")
+               self.container.execute("opkg list_installed enigma2-plugin-*")
 
        def startIpkgListAvailable(self):
-               self.container.execute("ipkg list enigma2-plugin-*")
+               self.container.execute("opkg list enigma2-plugin-*")
 
        def startRun(self):
                self["list"].instance.hide()
                if self.type == self.DOWNLOAD:
                        if not PluginDownloadBrowser.lastDownloadDate or (time() - PluginDownloadBrowser.lastDownloadDate) > 3600:
                                # Only update from internet once per hour
-                               self.container.execute("ipkg update")
+                               self.container.execute("opkg update")
                                PluginDownloadBrowser.lastDownloadDate = time()
                        else:
                                self.startIpkgListAvailable()
@@ -256,4 +256,4 @@ class PluginDownloadBrowser(Screen):
                self.list = list
                self["list"].l.setList(list)
 
-language.addCallback(languageChanged)
\ No newline at end of file
+language.addCallback(languageChanged)
index 2e2f836..f8bfeb7 100644 (file)
@@ -107,6 +107,7 @@ class CableTransponderSearchSupport:
                        if raw_channel:
                                frontend = raw_channel.getFrontend()
                                if frontend:
+                                       frontend.closeFrontend() # immediate close... 
                                        del frontend
                                        del raw_channel
                                        return True
@@ -114,13 +115,16 @@ class CableTransponderSearchSupport:
 
        def cableTransponderSearchSessionClosed(self, *val):
                print "cableTransponderSearchSessionClosed, val", val
-               self.resetTimeout()
                self.cable_search_container.appClosed.remove(self.cableTransponderSearchClosed)
                self.cable_search_container.dataAvail.remove(self.getCableTransponderData)
+               if val and len(val):
+                       if val[0]:
+                               self.setCableTransponderSearchResult(self.__tlist)
+                       else:
+                               self.cable_search_container.sendCtrlC()
+                               self.setCableTransponderSearchResult(None)
                self.cable_search_container = None
                self.cable_search_session = None
-               if val and len(val) and val[0]:
-                       self.setCableTransponderSearchResult(self.__tlist)
                self.__tlist = None
                self.cableTransponderSearchFinished()
 
@@ -156,25 +160,12 @@ class CableTransponderSearchSupport:
                                parm.modulation = qam[data[4]]
                                parm.inversion = inv[data[5]]
                                self.__tlist.append(parm)
-               tmpstr = _("Try to find used Transponders in cable network.. please wait...")
-               tmpstr += "\n\n"
-               tmpstr += data[1]
-               tmpstr += " kHz "
-               tmpstr += data[0]
-               self.cable_search_session["text"].setText(tmpstr)
-               
-       def setTimeout(self):
-               try:
-                       self.oldtimeoutvalue = open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "r").readline()
-                       open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "w").write("0")
-               except:
-                       print "[info] no /sys/module/dvb_core/parameters/dvb_shutdown_timeout available"                
-               
-       def resetTimeout(self):
-               try:
-                       open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "w").write(self.oldtimeoutvalue)
-               except:
-                       print "[info] no /sys/module/dvb_core/parameters/dvb_shutdown_timeout available"
+                       tmpstr = _("Try to find used Transponders in cable network.. please wait...")
+                       tmpstr += "\n\n"
+                       tmpstr += data[1]
+                       tmpstr += " kHz "
+                       tmpstr += data[0]
+                       self.cable_search_session["text"].setText(tmpstr)
 
        def startCableTransponderSearch(self, nim_idx):
                if not self.tryGetRawFrontend(nim_idx):
@@ -260,7 +251,6 @@ class CableTransponderSearchSupport:
                self.cable_search_container.execute(cmd)
                tmpstr = _("Try to find used transponders in cable network.. please wait...")
                tmpstr += "\n\n..."
-               self.setTimeout()
                self.cable_search_session = self.session.openWithCallback(self.cableTransponderSearchSessionClosed, MessageBox, tmpstr, MessageBox.TYPE_INFO)
 
 class DefaultSatLists(DefaultWizard):
@@ -371,15 +361,15 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
                                self.list.append(getConfigListEntry(_('Satellite'), self.scan_satselection[index_to_scan]))
                                self.list.append(getConfigListEntry(_('Frequency'), self.scan_sat.frequency))
                                self.list.append(getConfigListEntry(_('Inversion'), self.scan_sat.inversion))
-                               self.list.append(getConfigListEntry(_('Symbol Rate'), self.scan_sat.symbolrate))
-                               self.list.append(getConfigListEntry(_("Polarity"), self.scan_sat.polarization))
+                               self.list.append(getConfigListEntry(_('Symbol rate'), self.scan_sat.symbolrate))
+                               self.list.append(getConfigListEntry(_('Polarization'), self.scan_sat.polarization))
                                if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S:
                                        self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
                                elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2:
                                        self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2))
                                        self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation)
                                        self.list.append(self.modulationEntry)
-                                       self.list.append(getConfigListEntry(_('Rolloff'), self.scan_sat.rolloff))
+                                       self.list.append(getConfigListEntry(_('Roll-off'), self.scan_sat.rolloff))
                                        self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot))
                        elif self.scan_type.value == "single_satellite":
                                self.updateSatList()
@@ -401,7 +391,7 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
                        if self.scan_typecable.value == "single_transponder":
                                self.list.append(getConfigListEntry(_("Frequency"), self.scan_cab.frequency))
                                self.list.append(getConfigListEntry(_("Inversion"), self.scan_cab.inversion))
-                               self.list.append(getConfigListEntry(_("Symbol Rate"), self.scan_cab.symbolrate))
+                               self.list.append(getConfigListEntry(_("Symbol rate"), self.scan_cab.symbolrate))
                                self.list.append(getConfigListEntry(_("Modulation"), self.scan_cab.modulation))
                                self.list.append(getConfigListEntry(_("FEC"), self.scan_cab.fec))
                elif nim.isCompatible("DVB-T"):
@@ -409,12 +399,12 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
                                self.list.append(getConfigListEntry(_("Frequency"), self.scan_ter.frequency))
                                self.list.append(getConfigListEntry(_("Inversion"), self.scan_ter.inversion))
                                self.list.append(getConfigListEntry(_("Bandwidth"), self.scan_ter.bandwidth))
-                               self.list.append(getConfigListEntry(_("Code rate high"), self.scan_ter.fechigh))
-                               self.list.append(getConfigListEntry(_("Code rate low"), self.scan_ter.feclow))
+                               self.list.append(getConfigListEntry(_("Code rate HP"), self.scan_ter.fechigh))
+                               self.list.append(getConfigListEntry(_("Code rate LP"), self.scan_ter.feclow))
                                self.list.append(getConfigListEntry(_("Modulation"), self.scan_ter.modulation))
                                self.list.append(getConfigListEntry(_("Transmission mode"), self.scan_ter.transmission))
-                               self.list.append(getConfigListEntry(_("Guard interval mode"), self.scan_ter.guard))
-                               self.list.append(getConfigListEntry(_("Hierarchy mode"), self.scan_ter.hierarchy))
+                               self.list.append(getConfigListEntry(_("Guard interval"), self.scan_ter.guard))
+                               self.list.append(getConfigListEntry(_("Hierarchy info"), self.scan_ter.hierarchy))
                self.list.append(getConfigListEntry(_("Network scan"), self.scan_networkScan))
                self.list.append(getConfigListEntry(_("Clear before scan"), self.scan_clearallservices))
                self.list.append(getConfigListEntry(_("Only Free scan"), self.scan_onlyfree))
@@ -567,8 +557,8 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
                                (eDVBFrontendParametersSatellite.System_DVB_S2, _("DVB-S2"))])
                        self.scan_sat.frequency = ConfigInteger(default = defaultSat["frequency"], limits = (1, 99999))
                        self.scan_sat.inversion = ConfigSelection(default = defaultSat["inversion"], choices = [
-                               (eDVBFrontendParametersSatellite.Inversion_Off, _("off")),
-                               (eDVBFrontendParametersSatellite.Inversion_On, _("on")),
+                               (eDVBFrontendParametersSatellite.Inversion_Off, _("Off")),
+                               (eDVBFrontendParametersSatellite.Inversion_On, _("On")),
                                (eDVBFrontendParametersSatellite.Inversion_Unknown, _("Auto"))])
                        self.scan_sat.symbolrate = ConfigInteger(default = defaultSat["symbolrate"], limits = (1, 99999))
                        self.scan_sat.polarization = ConfigSelection(default = defaultSat["polarization"], choices = [
@@ -602,15 +592,15 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
                                (eDVBFrontendParametersSatellite.RollOff_alpha_0_25, "0.25"),
                                (eDVBFrontendParametersSatellite.RollOff_alpha_0_20, "0.20")])
                        self.scan_sat.pilot = ConfigSelection(default = defaultSat.get("pilot", eDVBFrontendParametersSatellite.Pilot_Unknown), choices = [
-                               (eDVBFrontendParametersSatellite.Pilot_Off, _("off")),
-                               (eDVBFrontendParametersSatellite.Pilot_On, _("on")),
+                               (eDVBFrontendParametersSatellite.Pilot_Off, _("Off")),
+                               (eDVBFrontendParametersSatellite.Pilot_On, _("On")),
                                (eDVBFrontendParametersSatellite.Pilot_Unknown, _("Auto"))])
 
                        # cable
                        self.scan_cab.frequency = ConfigInteger(default = defaultCab["frequency"], limits = (50, 999))
                        self.scan_cab.inversion = ConfigSelection(default = defaultCab["inversion"], choices = [
-                               (eDVBFrontendParametersCable.Inversion_Off, _("off")),
-                               (eDVBFrontendParametersCable.Inversion_On, _("on")),
+                               (eDVBFrontendParametersCable.Inversion_Off, _("Off")),
+                               (eDVBFrontendParametersCable.Inversion_On, _("On")),
                                (eDVBFrontendParametersCable.Inversion_Unknown, _("Auto"))])
                        self.scan_cab.modulation = ConfigSelection(default = defaultCab["modulation"], choices = [
                                (eDVBFrontendParametersCable.Modulation_QAM16, "16-QAM"),
@@ -632,8 +622,8 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
                        # terrestial
                        self.scan_ter.frequency = ConfigInteger(default = 466000, limits = (50000, 999000))
                        self.scan_ter.inversion = ConfigSelection(default = defaultTer["inversion"], choices = [
-                               (eDVBFrontendParametersTerrestrial.Inversion_Off, _("off")),
-                               (eDVBFrontendParametersTerrestrial.Inversion_On, _("on")),
+                               (eDVBFrontendParametersTerrestrial.Inversion_Off, _("Off")),
+                               (eDVBFrontendParametersTerrestrial.Inversion_On, _("On")),
                                (eDVBFrontendParametersTerrestrial.Inversion_Unknown, _("Auto"))])
                        # WORKAROUND: we can't use BW-auto
                        self.scan_ter.bandwidth = ConfigSelection(default = defaultTer["bandwidth"], choices = [
@@ -845,7 +835,10 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
                self.tlist = tlist
 
        def cableTransponderSearchFinished(self):
-               self.startScan(self.tlist, self.flags, self.feid)
+               if self.tlist is None:
+                       self.tlist = []
+               else:
+                       self.startScan(self.tlist, self.flags, self.feid)
 
        def startScan(self, tlist, flags, feid):
                if len(tlist):
@@ -1011,7 +1004,8 @@ class ScanSimple(ConfigListScreen, Screen, CableTransponderSearchSupport):
                                self.session.open(MessageBox, _("Nothing to scan!\nPlease setup your tuner settings before you start a service scan."), MessageBox.TYPE_ERROR)
 
        def setCableTransponderSearchResult(self, tlist):
-               self.scanList.append({"transponders": tlist, "feid": self.feid, "flags": self.flags})
+               if tlist is not None:
+                       self.scanList.append({"transponders": tlist, "feid": self.feid, "flags": self.flags})
 
        def cableTransponderSearchFinished(self):
                self.buildTransponderList()
index f0bf773..4a0accd 100644 (file)
@@ -6,6 +6,8 @@ profile("LOAD:Source")
 from Components.Sources.Source import Source
 profile("LOAD:GUIComponent")
 from Components.GUIComponent import GUIComponent
+profile("LOAD:eRCInput")
+from enigma import eRCInput
 
 class Screen(dict, GUISkin):
 
@@ -46,6 +48,24 @@ class Screen(dict, GUISkin):
                # stand alone screens (for example web screens)
                # don't care about having or not having focus.
                self.stand_alone = False
+               self.keyboardMode = None
+
+       def saveKeyboardMode(self):
+               rcinput = eRCInput.getInstance()
+               self.keyboardMode = rcinput.getKeyboardMode()
+
+       def setKeyboardModeAscii(self):
+               rcinput = eRCInput.getInstance()
+               rcinput.setKeyboardMode(rcinput.kmAscii)
+
+       def setKeyboardModeNone(self):
+               rcinput = eRCInput.getInstance()
+               rcinput.setKeyboardMode(rcinput.kmNone)
+
+       def restoreKeyboardMode(self):
+               rcinput = eRCInput.getInstance()
+               if self.keyboardMode is not None:
+                       rcinput.setKeyboardMode(self.keyboardMode)
 
        def execBegin(self):
                self.active_components = [ ]
index fa2f447..61885df 100644 (file)
@@ -81,9 +81,9 @@ class ServiceInfo(Screen):
                        self.feinfo = None
                else:
                        self.type = TYPE_SERVICE_INFO
-                       self["red"] = Label(_("Serviceinfo"))
+                       self["red"] = Label(_("Service"))
                        self["green"] = Label(_("PIDs"))
-                       self["yellow"] = Label(_("Transponder"))
+                       self["yellow"] = Label(_("Multiplex"))
                        self["blue"] = Label(_("Tuner status"))
                        service = session.nav.getCurrentService()
                        if service is not None:
@@ -105,63 +105,63 @@ class ServiceInfo(Screen):
                                name = ServiceReference(self.session.nav.getCurrentlyPlayingServiceReference()).getServiceName()
                                refstr = self.session.nav.getCurrentlyPlayingServiceReference().toString()
                        else:
-                               name = "N/A"
-                               refstr = "N/A"
+                               name = _("N/A")
+                               refstr = _("N/A")
                        aspect = self.getServiceInfoValue(iServiceInformation.sAspect)
                        if aspect in ( 1, 2, 5, 6, 9, 0xA, 0xD, 0xE ):
-                               aspect = "4:3"
+                               aspect = _("4:3")
                        else:
-                               aspect = "16:9"
+                               aspect = _("16:9")
                        width = self.info and self.info.getInfo(iServiceInformation.sVideoWidth) or -1
                        height = self.info and self.info.getInfo(iServiceInformation.sVideoHeight) or -1
                        if width != -1 and height != -1:
-                               Labels = ( ("Name", name, TYPE_TEXT),
-                                                  ("Provider", self.getServiceInfoValue(iServiceInformation.sProvider), TYPE_TEXT),
-                                                  ("Videoformat", aspect, TYPE_TEXT),
-                                                  ("Videosize", "%dx%d" %(width, height), TYPE_TEXT),
-                                                  ("Namespace", self.getServiceInfoValue(iServiceInformation.sNamespace), TYPE_VALUE_HEX, 8),
-                                                  ("Service Reference", refstr, TYPE_TEXT))
+                               Labels = ( (_("Name"), name, TYPE_TEXT),
+                                                  (_("Provider"), self.getServiceInfoValue(iServiceInformation.sProvider), TYPE_TEXT),
+                                                  (_("Aspect ratio"), aspect, TYPE_TEXT),
+                                                  (_("Resolution"), "%dx%d" %(width, height), TYPE_TEXT),
+                                                  (_("Namespace"), self.getServiceInfoValue(iServiceInformation.sNamespace), TYPE_VALUE_HEX, 8),
+                                                  (_("Service reference"), refstr, TYPE_TEXT))
                        else:
-                               Labels = ( ("Name", name, TYPE_TEXT),
-                                                  ("Provider", self.getServiceInfoValue(iServiceInformation.sProvider), TYPE_TEXT),
-                                                  ("Videoformat", aspect, TYPE_TEXT),
-                                                  ("Namespace", self.getServiceInfoValue(iServiceInformation.sNamespace), TYPE_VALUE_HEX, 8),
-                                                  ("Service Reference", refstr, TYPE_TEXT))
+                               Labels = ( (_("Name"), name, TYPE_TEXT),
+                                                  (_("Provider"), self.getServiceInfoValue(iServiceInformation.sProvider), TYPE_TEXT),
+                                                  (_("Aspect ratio"), aspect, TYPE_TEXT),
+                                                  (_("Namespace"), self.getServiceInfoValue(iServiceInformation.sNamespace), TYPE_VALUE_HEX, 8),
+                                                  (_("Service reference"), refstr, TYPE_TEXT))
                        self.fillList(Labels)
                else:
                        if self.transponder_info:
                                tp_info = ConvertToHumanReadable(self.transponder_info)
-                               conv = { "tuner_type"           : _("Transponder Type"),
-                                                "system"                       : _("System"),
-                                                "modulation"           : _("Modulation"),
-                                                "orbital_position" : _("Orbital Position"),
-                                                "frequency"            : _("Frequency"),
-                                                "symbol_rate"          : _("Symbolrate"),
-                                                "bandwidth"            : _("Bandwidth"),
-                                                "polarization"         : _("Polarization"),
-                                                "inversion"            : _("Inversion"),
-                                                "pilot"                        : _("Pilot"),
-                                                "rolloff"                      : _("Rolloff"),
-                                                "fec_inner"            : _("FEC"),
-                                                "code_rate_lp"         : _("Coderate LP"),
-                                                "code_rate_hp"         : _("Coderate HP"),
-                                                "constellation"        : _("Constellation"),
-                                                "transmission_mode": _("Transmission Mode"),
-                                                "guard_interval"       : _("Guard Interval"),
-                                                "hierarchy_information": _("Hierarchy Information") }
+                               conv = { "tuner_type"                   : _("Type"),
+                                        "system"                       : _("System"),
+                                        "modulation"                   : _("Modulation"),
+                                        "orbital_position"             : _("Orbital position"),
+                                        "frequency"                    : _("Frequency"),
+                                        "symbol_rate"                  : _("Symbol rate"),
+                                        "bandwidth"                    : _("Bandwidth"),
+                                        "polarization"                 : _("Polarization"),
+                                        "inversion"                    : _("Inversion"),
+                                        "pilot"                        : _("Pilot"),
+                                        "rolloff"                      : _("Roll-off"),
+                                        "fec_inner"                    : _("FEC"),
+                                        "code_rate_lp"                 : _("Code rate LP"),
+                                        "code_rate_hp"                 : _("Code rate HP"),
+                                        "constellation"                : _("Constellation"),
+                                        "transmission_mode"            : _("Transmission mode"),
+                                        "guard_interval"               : _("Guard interval"),
+                                        "hierarchy_information"        : _("Hierarchy info") }
                                Labels = [(conv[i], tp_info[i], TYPE_VALUE_DEC) for i in tp_info.keys()]
                                self.fillList(Labels)
 
        def pids(self):
                if self.type == TYPE_SERVICE_INFO:
-                       Labels = ( ("VideoPID", self.getServiceInfoValue(iServiceInformation.sVideoPID), TYPE_VALUE_HEX_DEC, 4),
-                                          ("AudioPID", self.getServiceInfoValue(iServiceInformation.sAudioPID), TYPE_VALUE_HEX_DEC, 4),
-                                          ("PCRPID", self.getServiceInfoValue(iServiceInformation.sPCRPID), TYPE_VALUE_HEX_DEC, 4),
-                                          ("PMTPID", self.getServiceInfoValue(iServiceInformation.sPMTPID), TYPE_VALUE_HEX_DEC, 4),
-                                          ("TXTPID", self.getServiceInfoValue(iServiceInformation.sTXTPID), TYPE_VALUE_HEX_DEC, 4),
-                                          ("TSID", self.getServiceInfoValue(iServiceInformation.sTSID), TYPE_VALUE_HEX_DEC, 4),
-                                          ("ONID", self.getServiceInfoValue(iServiceInformation.sONID), TYPE_VALUE_HEX_DEC, 4),
-                                          ("SID", self.getServiceInfoValue(iServiceInformation.sSID), TYPE_VALUE_HEX_DEC, 4))
+                       Labels = ( (_("Video PID"), self.getServiceInfoValue(iServiceInformation.sVideoPID), TYPE_VALUE_HEX_DEC, 4),
+                                          (_("Audio PID"), self.getServiceInfoValue(iServiceInformation.sAudioPID), TYPE_VALUE_HEX_DEC, 4),
+                                          (_("PCR PID"), self.getServiceInfoValue(iServiceInformation.sPCRPID), TYPE_VALUE_HEX_DEC, 4),
+                                          (_("PMT PID"), self.getServiceInfoValue(iServiceInformation.sPMTPID), TYPE_VALUE_HEX_DEC, 4),
+                                          (_("TXT PID"), self.getServiceInfoValue(iServiceInformation.sTXTPID), TYPE_VALUE_HEX_DEC, 4),
+                                          (_("TSID"), self.getServiceInfoValue(iServiceInformation.sTSID), TYPE_VALUE_HEX_DEC, 4),
+                                          (_("ONID"), self.getServiceInfoValue(iServiceInformation.sONID), TYPE_VALUE_HEX_DEC, 4),
+                                          (_("SID"), self.getServiceInfoValue(iServiceInformation.sSID), TYPE_VALUE_HEX_DEC, 4))
                        self.fillList(Labels)
        
        def showFrontendData(self, real):
@@ -182,37 +182,38 @@ class ServiceInfo(Screen):
                if frontendDataOrg and len(frontendDataOrg):
                        frontendData = ConvertToHumanReadable(frontendDataOrg)
                        if frontendDataOrg["tuner_type"] == "DVB-S":
-                               return (("NIM", ('A', 'B', 'C', 'D')[frontendData["tuner_number"]], TYPE_TEXT),
-                                                       ("Type", frontendData["system"], TYPE_TEXT),
-                                                       ("Modulation", frontendData["modulation"], TYPE_TEXT),
-                                                       ("Orbital position", frontendData["orbital_position"], TYPE_VALUE_DEC),
-                                                       ("Frequency", frontendData["frequency"], TYPE_VALUE_DEC),
-                                                       ("Symbolrate", frontendData["symbol_rate"], TYPE_VALUE_DEC),
-                                                       ("Polarization", frontendData["polarization"], TYPE_TEXT),
-                                                       ("Inversion", frontendData["inversion"], TYPE_TEXT),
-                                                       ("FEC inner", frontendData["fec_inner"], TYPE_TEXT),
-                                                       ("Pilot", frontendData.get("pilot", None), TYPE_TEXT),
-                                                       ("Rolloff", frontendData.get("rolloff", None), TYPE_TEXT))
+                               return ((_("NIM"), ('A', 'B', 'C', 'D')[frontendData["tuner_number"]], TYPE_TEXT),
+                                               (_("Type"), frontendData["tuner_type"], TYPE_TEXT),
+                                               (_("System"), frontendData["system"], TYPE_TEXT),
+                                               (_("Modulation"), frontendData["modulation"], TYPE_TEXT),
+                                               (_("Orbital position"), frontendData["orbital_position"], TYPE_VALUE_DEC),
+                                               (_("Frequency"), frontendData["frequency"], TYPE_VALUE_DEC),
+                                               (_("Symbol rate"), frontendData["symbol_rate"], TYPE_VALUE_DEC),
+                                               (_("Polarization"), frontendData["polarization"], TYPE_TEXT),
+                                               (_("Inversion"), frontendData["inversion"], TYPE_TEXT),
+                                               (_("FEC"), frontendData["fec_inner"], TYPE_TEXT),
+                                               (_("Pilot"), frontendData.get("pilot", None), TYPE_TEXT),
+                                               (_("Roll-off"), frontendData.get("rolloff", None), TYPE_TEXT))
                        elif frontendDataOrg["tuner_type"] == "DVB-C":
-                               return (("NIM", ('A', 'B', 'C', 'D')[frontendData["tuner_number"]], TYPE_TEXT),
-                                               ("Type", frontendData["tuner_type"], TYPE_TEXT),
-                                               ("Frequency", frontendData["frequency"], TYPE_VALUE_DEC),
-                                               ("Symbolrate", frontendData["symbol_rate"], TYPE_VALUE_DEC),
-                                               ("Modulation", frontendData["modulation"], TYPE_TEXT),
-                                               ("Inversion", frontendData["inversion"], TYPE_TEXT),
-                                               ("FEC inner", frontendData["fec_inner"], TYPE_TEXT))
+                               return ((_("NIM"), ('A', 'B', 'C', 'D')[frontendData["tuner_number"]], TYPE_TEXT),
+                                               (_("Type"), frontendData["tuner_type"], TYPE_TEXT),
+                                               (_("Modulation"), frontendData["modulation"], TYPE_TEXT),
+                                               (_("Frequency"), frontendData["frequency"], TYPE_VALUE_DEC),
+                                               (_("Symbol rate"), frontendData["symbol_rate"], TYPE_VALUE_DEC),
+                                               (_("Inversion"), frontendData["inversion"], TYPE_TEXT),
+                                               (_("FEC"), frontendData["fec_inner"], TYPE_TEXT))
                        elif frontendDataOrg["tuner_type"] == "DVB-T":
-                               return (("NIM", ('A', 'B', 'C', 'D')[frontendData["tuner_number"]], TYPE_TEXT),
-                                               ("Type", frontendData["tuner_type"], TYPE_TEXT),
-                                               ("Frequency", frontendData["frequency"], TYPE_VALUE_DEC),
-                                               ("Inversion", frontendData["inversion"], TYPE_TEXT),
-                                               ("Bandwidth", frontendData["bandwidth"], TYPE_VALUE_DEC),
-                                               ("CodeRateLP", frontendData["code_rate_lp"], TYPE_TEXT),
-                                               ("CodeRateHP", frontendData["code_rate_hp"], TYPE_TEXT),
-                                               ("Constellation", frontendData["constellation"], TYPE_TEXT),
-                                               ("Transmission Mode", frontendData["transmission_mode"], TYPE_TEXT),
-                                               ("Guard Interval", frontendData["guard_interval"], TYPE_TEXT),
-                                               ("Hierarchy Inform.", frontendData["hierarchy_information"], TYPE_TEXT))
+                               return ((_("NIM"), ('A', 'B', 'C', 'D')[frontendData["tuner_number"]], TYPE_TEXT),
+                                               (_("Type"), frontendData["tuner_type"], TYPE_TEXT),
+                                               (_("Frequency"), frontendData["frequency"], TYPE_VALUE_DEC),
+                                               (_("Inversion"), frontendData["inversion"], TYPE_TEXT),
+                                               (_("Bandwidth"), frontendData["bandwidth"], TYPE_VALUE_DEC),
+                                               (_("Code rate LP"), frontendData["code_rate_lp"], TYPE_TEXT),
+                                               (_("Code rate HP"), frontendData["code_rate_hp"], TYPE_TEXT),
+                                               (_("Constellation"), frontendData["constellation"], TYPE_TEXT),
+                                               (_("Transmission mode"), frontendData["transmission_mode"], TYPE_TEXT),
+                                               (_("Guard interval"), frontendData["guard_interval"], TYPE_TEXT),
+                                               (_("Hierarchy info"), frontendData["hierarchy_information"], TYPE_TEXT))
                return [ ]
 
        def fillList(self, Labels):
@@ -237,6 +238,6 @@ class ServiceInfo(Screen):
                if v == -2:
                        v = self.info.getInfoString(what)
                elif v == -1:
-                       v = "N/A"
+                       v = _("N/A")
 
                return v
index e9c3c68..61e6fdd 100755 (executable)
@@ -4,6 +4,7 @@ from Components.config import config, ConfigNothing
 from Components.SystemInfo import SystemInfo
 from Components.ConfigList import ConfigListScreen
 from Components.Sources.StaticText import StaticText
+from enigma import eEnv
 
 import xml.etree.cElementTree
 
@@ -14,7 +15,7 @@ try:
        setupfile = file('data/setup.xml', 'r')
 except:
        # if not found in the current path, we use the global datadir-path
-       setupfile = file('/usr/share/enigma2/setup.xml', 'r')
+       setupfile = file(eEnv.resolve('${datadir}/enigma2/setup.xml'), 'r')
 setupdom = xml.etree.cElementTree.parse(setupfile)
 setupfile.close()
 
index e5e7af4..61440d4 100644 (file)
@@ -103,6 +103,7 @@ class SleepTimerEdit(Screen):
                        config.SleepTimer.defaulttime.setValue(time)
                        config.SleepTimer.defaulttime.save()
                        config.SleepTimer.action.save()
+                       config.SleepTimer.ask.save()
                        self.session.nav.SleepTimer.setSleepTime(time)
                        self.session.openWithCallback(self.close, MessageBox, _("The sleep timer has been activated."), MessageBox.TYPE_INFO)
                else:
index 1a7ebbd..94a56ee 100644 (file)
@@ -160,14 +160,9 @@ class TryQuitMainloop(MessageBox):
                        self.conntected=False
                        self.session.nav.record_event.remove(self.getRecordEvent)
                if value:
-                       # hack .. we dont like to show any other screens when this screen has closed
-                       self.onClose = [self.__closed]
-                       self.session.dialog_stack = []
-                       self.session.summary_stack = [None]
-               MessageBox.close(self, True)
-
-       def __closed(self):
-               quitMainloop(self.retval)
+                       quitMainloop(self.retval)
+               else:
+                       MessageBox.close(self, True)
 
        def __onShow(self):
                global inTryQuitMainloop
index 660fb27..5dd744f 100644 (file)
@@ -2,6 +2,7 @@ from Screen import Screen
 from Components.ConfigList import ConfigListScreen
 from Components.config import config, ConfigSubsection, ConfigSelection, getConfigListEntry
 from Components.SystemInfo import SystemInfo
+from Components.Task import job_manager
 from InfoBarGenerics import InfoBarNotifications
 import Screens.Standby
 from Tools import Notifications
@@ -108,10 +109,13 @@ class JobView(InfoBarNotifications, Screen, ConfigListScreen):
                        self.close(False)
 
        def abort(self):
-               if self.job.status in (self.job.FINISHED, self.job.FAILED):
+               if self.job.status == self.job.NOT_STARTED:
+                       job_manager.active_jobs.remove(self.job)
                        self.close(False)
-               if self["cancelable"].boolean == True:
+               elif self.job.status == self.job.IN_PROGRESS and self["cancelable"].boolean == True:
                        self.job.cancel()
+               else:
+                       self.close(False)
 
        def performAfterEvent(self):
                self["config"].hide()
index 5435498..0abb42a 100644 (file)
@@ -13,6 +13,7 @@ from ServiceReference import ServiceReference
 from TimerEntry import TimerEntry, TimerLog
 from Tools.BoundFunction import boundFunction
 from time import time
+from timer import TimerEntry as RealTimerEntry
 
 class TimerEditList(Screen):
        EMPTY = 0
@@ -88,7 +89,9 @@ class TimerEditList(Screen):
                                if not timersanitycheck.check():
                                        t.disable()
                                        print "Sanity check failed"
-                                       self.session.openWithCallback(self.finishedEdit, TimerSanityConflict, timersanitycheck.getSimulTimerList())
+                                       simulTimerList = timersanitycheck.getSimulTimerList()
+                                       if simulTimerList is not None:
+                                               self.session.openWithCallback(self.finishedEdit, TimerSanityConflict, simulTimerList)
                                else:
                                        print "Sanity check passed"
                                        if timersanitycheck.doubleCheck():
@@ -172,11 +175,20 @@ class TimerEditList(Screen):
                        self.key_blue_choice = self.EMPTY
 
        def fillTimerList(self):
+               #helper function to move finished timers to end of list
+               def eol_compare(x, y):
+                       if x[0].state != y[0].state and x[0].state == RealTimerEntry.StateEnded or y[0].state == RealTimerEntry.StateEnded:
+                               return cmp(x[0].state, y[0].state)
+                       return cmp(x[0].begin, y[0].begin)
+
                list = self.list
                del list[:]
                list.extend([(timer, False) for timer in self.session.nav.RecordTimer.timer_list])
                list.extend([(timer, True) for timer in self.session.nav.RecordTimer.processed_timers])
-               list.sort(cmp = lambda x, y: x[0].begin < y[0].begin)
+               if config.usage.timerlist_finished_timer_position.index: #end of list
+                       list.sort(cmp = eol_compare)
+               else:
+                       list.sort(key = lambda x: x[0].begin)
 
        def showLog(self):
                cur=self["timerlist"].getCurrent()
index 7846e4b..c0d0c10 100755 (executable)
@@ -1,12 +1,13 @@
-# -*- coding: iso-8859-1 -*-
+# -*- coding: UTF-8 -*-
+from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_CENTER, RT_VALIGN_CENTER, getPrevAsciiCode
+from Screen import Screen
 from Components.Language import language
 from Components.ActionMap import ActionMap
+from Components.Sources.StaticText import StaticText
 from Components.Label import Label
 from Components.Pixmap import Pixmap
 from Components.MenuList import MenuList
 from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
-from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_CENTER, RT_VALIGN_CENTER
-from Screen import Screen
 from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN
 from Tools.LoadPixmap import LoadPixmap
 
@@ -86,52 +87,127 @@ class VirtualKeyBoard(Screen):
                self.keys_list = []
                self.shiftkeys_list = []
                self.lang = language.getLanguage()
+               self.nextLang = None
+               self.shiftMode = False
+               self.text = text
+               self.selectedKey = 0
+               
+               self["country"] = StaticText("")
+               self["header"] = Label(title)
+               self["text"] = Label(self.text)
+               self["list"] = VirtualKeyBoardList([])
+               
+               self["actions"] = ActionMap(["OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions"],
+                       {
+                               "gotAsciiCode": self.keyGotAscii,
+                               "ok": self.okClicked,
+                               "cancel": self.exit,
+                               "left": self.left,
+                               "right": self.right,
+                               "up": self.up,
+                               "down": self.down,
+                               "red": self.backClicked,
+                               "green": self.ok,
+                               "yellow": self.switchLang,
+                               "deleteBackward": self.backClicked,
+                               "back": self.exit                               
+                       }, -2)
+               self.setLang()
+               self.onExecBegin.append(self.setKeyboardModeAscii)
+               self.onLayoutFinish.append(self.buildVirtualKeyBoard)
+       
+       def switchLang(self):
+               self.lang = self.nextLang
+               self.setLang()
+               self.buildVirtualKeyBoard()
+
+       def setLang(self):
                if self.lang == 'de_DE':
                        self.keys_list = [
                                [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],
-                               [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"ü", u"+"],
-                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ö", u"ä", u"#"],
+                               [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"ü", u"+"],
+                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ö", u"ä", u"#"],
                                [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],
-                               [u"SHIFT", u"SPACE", u"@", u"ß", u"OK"]]
-                       
+                               [u"SHIFT", u"SPACE", u"@", u"ß", u"OK"]]
                        self.shiftkeys_list = [
-                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
-                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"Ü", u"*"],
-                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ö", u"Ä", u"'"],
+                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
+                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"Ü", u"*"],
+                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ö", u"Ä", u"'"],
                                [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],
                                [u"SHIFT", u"SPACE", u"?", u"\\", u"OK"]]
-                       
+                       self.nextLang = 'es_ES'
                elif self.lang == 'es_ES':
-                       #still missing keys (u"ùÙ")
+                       #still missing keys (u"ùÙ")
                        self.keys_list = [
                                [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],
-                               [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"ú", u"+"],
-                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ó", u"á", u"#"],
+                               [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"ú", u"+"],
+                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ó", u"á", u"#"],
                                [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],
-                               [u"SHIFT", u"SPACE", u"@", u"£", u"à", u"é", u"è", u"í", u"ì", u"ñ", u"ò", u"OK"]]
-                       
+                               [u"SHIFT", u"SPACE", u"@", u"Ł", u"ŕ", u"é", u"č", u"í", u"ě", u"ń", u"ň", u"OK"]]
                        self.shiftkeys_list = [
-                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
-                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"Ú", u"*"],
-                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ó", u"Á", u"'"],
+                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
+                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"Ú", u"*"],
+                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ó", u"Á", u"'"],
                                [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],
-                               [u"SHIFT", u"SPACE", u"?", u"\\", u"À", u"É", u"È",  u"Í", u"Ì", u"Ñ", u"Ò", u"OK"]]
-                               
-               elif self.lang in ('sv_SE', 'fi_FI'):
+                               [u"SHIFT", u"SPACE", u"?", u"\\", u"Ŕ", u"É", u"Č", u"Í", u"Ě", u"Ń", u"Ň", u"OK"]]
+                       self.nextLang = 'fi_FI'
+               elif self.lang == 'fi_FI':
                        self.keys_list = [
                                [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],
-                               [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"é", u"+"],
-                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ö", u"ä", u"#"],
+                               [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"é", u"+"],
+                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ö", u"ä", u"#"],
                                [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],
-                               [u"SHIFT", u"SPACE", u"@", u"ß", u"å", u"OK"]]
-                               
+                               [u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", u"OK"]]
                        self.shiftkeys_list = [
-                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
-                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"É", u"*"],
-                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ö", u"Ä", u"'"],
+                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
+                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"É", u"*"],
+                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ö", u"Ä", u"'"],
                                [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],
-
-                               [u"SHIFT", u"SPACE", u"?", u"\\", u"Å", u"OK"]]
+                               [u"SHIFT", u"SPACE", u"?", u"\\", u"Ĺ", u"OK"]]
+                       self.nextLang = 'sv_SE'
+               elif self.lang == 'sv_SE':
+                       self.keys_list = [
+                               [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],
+                               [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"é", u"+"],
+                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ö", u"ä", u"#"],
+                               [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],
+                               [u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", u"OK"]]
+                       self.shiftkeys_list = [
+                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
+                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"É", u"*"],
+                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ö", u"Ä", u"'"],
+                               [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],
+                               [u"SHIFT", u"SPACE", u"?", u"\\", u"Ĺ", u"OK"]]
+                       self.nextLang = 'sk_SK'
+               elif self.lang =='sk_SK':
+                       self.keys_list = [
+                               [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],
+                               [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"ú", u"+"],
+                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ľ", u"@", u"#"],
+                               [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],
+                               [u"SHIFT", u"SPACE", u"š", u"č", u"ž", u"ý", u"á", u"í", u"é", u"OK"]]
+                       self.shiftkeys_list = [
+                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
+                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"ť", u"*"],
+                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"ň", u"ď", u"'"],
+                               [u"Á", u"É", u"Ď", u"Í", u"Ý", u"Ó", u"Ú", u"Ž", u"Š", u"Č", u"Ť", u"Ň"],
+                               [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],
+                               [u"SHIFT", u"SPACE", u"?", u"\\", u"ä", u"ö", u"ü", u"ô", u"ŕ", u"ĺ", u"OK"]]
+                       self.nextLang = 'cs_CZ'
+               elif self.lang == 'cs_CZ':
+                       self.keys_list = [
+                               [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],
+                               [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"ú", u"+"],
+                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ů", u"@", u"#"],
+                               [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],
+                               [u"SHIFT", u"SPACE", u"ě", u"š", u"č", u"ř", u"ž", u"ý", u"á", u"í", u"é", u"OK"]]
+                       self.shiftkeys_list = [
+                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
+                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"ť", u"*"],
+                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"ň", u"ď", u"'"],
+                               [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],
+                               [u"SHIFT", u"SPACE", u"?", u"\\", u"Č", u"Ř", u"Š", u"Ž", u"Ú", u"Á", u"É", u"OK"]]
+                       self.nextLang = 'en_EN'
                else:
                        self.keys_list = [
                                [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],
@@ -139,36 +215,15 @@ class VirtualKeyBoard(Screen):
                                [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"#", u"\\"],
                                [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],
                                [u"SHIFT", u"SPACE", u"OK"]]
-                       
                        self.shiftkeys_list = [
-                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
+                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
                                [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"*"],
                                [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"'", u"?"],
                                [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],
                                [u"SHIFT", u"SPACE", u"OK"]]
-               
-               self.shiftMode = False
-               self.text = text
-               self.selectedKey = 0
-               
-               self["header"] = Label(title)
-               self["text"] = Label(self.text)
-               self["list"] = VirtualKeyBoardList([])
-               
-               self["actions"] = ActionMap(["OkCancelActions", "WizardActions", "ColorActions"],
-                       {
-                               "ok": self.okClicked,
-                               "cancel": self.exit,
-                               "left": self.left,
-                               "right": self.right,
-                               "up": self.up,
-                               "down": self.down,
-                               "red": self.backClicked,
-                               "green": self.ok
-                       }, -2)
-               
-               self.onLayoutFinish.append(self.buildVirtualKeyBoard)
-       
+                       self.lang = 'en_EN'
+                       self.nextLang = 'de_DE'         
+               self["country"].setText(self.lang)
                self.max_key=47+len(self.keys_list[4])
 
        def buildVirtualKeyBoard(self, selectedKey=0):
@@ -192,7 +247,6 @@ class VirtualKeyBoard(Screen):
                                selectedKey -= 12
                
                self["list"].setList(list)
-
        
        def backClicked(self):
                self.text = self["text"].getText()[:-1]
@@ -219,7 +273,7 @@ class VirtualKeyBoard(Screen):
                if text is None:
                        return
 
-               text = text.encode("utf-8")
+               text = text.encode("UTF-8")
 
                if text == "EXIT":
                        self.close(None)
@@ -312,3 +366,30 @@ class VirtualKeyBoard(Screen):
 
        def showActiveKey(self):
                self.buildVirtualKeyBoard(self.selectedKey)
+
+       def inShiftKeyList(self,key):
+               for KeyList in self.shiftkeys_list:
+                       for char in KeyList:
+                               if char == key:
+                                       return True
+               return False
+
+       def keyGotAscii(self):
+               char = str(unichr(getPrevAsciiCode()).encode('utf-8'))
+               if self.inShiftKeyList(char):
+                       self.shiftMode = True
+                       list = self.shiftkeys_list
+               else:
+                       self.shiftMode = False
+                       list = self.keys_list   
+
+               selkey = 0
+               for keylist in list:
+                       for key in keylist:
+                               if key == char:
+                                       self.selectedKey = selkey
+                                       self.okClicked()
+                                       self.showActiveKey()
+                                       return
+                               else:
+                                       selkey += 1
index a752d31..61e1d5e 100755 (executable)
@@ -10,7 +10,7 @@ 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 enigma import eTimer, eEnv
 
 from xml.sax import make_parser
 from xml.sax.handler import ContentHandler
@@ -178,7 +178,7 @@ class Wizard(Screen):
                parser.setContentHandler(wizardHandler)
                for xmlfile in self.xmlfile:
                        if xmlfile[0] != '/':
-                               parser.parse('/usr/share/enigma2/' + xmlfile)
+                               parser.parse(eEnv.resolve('${datadir}/enigma2/') + xmlfile)
                        else:
                                parser.parse(xmlfile)
 
index 8ed2c8a..f0ef0de 100755 (executable)
@@ -3,6 +3,7 @@
 from os import path as os_path, mkdir, rmdir, system, walk, stat as os_stat, listdir, readlink, makedirs, error as os_error, symlink, access, F_OK, R_OK, W_OK
 from stat import S_IMODE
 from re import compile
+from enigma import eEnv
 
 try:
        from os import chmod
@@ -39,26 +40,26 @@ PATH_CREATE = 0
 PATH_DONTCREATE = 1
 PATH_FALLBACK = 2
 defaultPaths = {
-               SCOPE_TRANSPONDERDATA: ("/etc/", PATH_DONTCREATE),
-               SCOPE_SYSETC: ("/etc/", PATH_DONTCREATE),
-               SCOPE_FONTS: ("/usr/share/fonts/", PATH_DONTCREATE),
-               SCOPE_CONFIG: ("/etc/enigma2/", PATH_CREATE),
-               SCOPE_PLUGINS: ("/usr/lib/enigma2/python/Plugins/", PATH_CREATE),
+               SCOPE_TRANSPONDERDATA: (eEnv.resolve("${sysconfdir}/"), PATH_DONTCREATE),
+               SCOPE_SYSETC: (eEnv.resolve("${sysconfdir}/"), PATH_DONTCREATE),
+               SCOPE_FONTS: (eEnv.resolve("${datadir}/fonts/"), PATH_DONTCREATE),
+               SCOPE_CONFIG: (eEnv.resolve("${sysconfdir}/enigma2/"), PATH_CREATE),
+               SCOPE_PLUGINS: (eEnv.resolve("${libdir}/enigma2/python/Plugins/"), PATH_CREATE),
 
-               SCOPE_LANGUAGE: ("/usr/share/enigma2/po/", PATH_DONTCREATE),
+               SCOPE_LANGUAGE: (eEnv.resolve("${datadir}/enigma2/po/"), PATH_DONTCREATE),
 
-               SCOPE_SKIN: ("/usr/share/enigma2/", PATH_DONTCREATE),
-               SCOPE_SKIN_IMAGE: ("/usr/share/enigma2/", PATH_DONTCREATE),
+               SCOPE_SKIN: (eEnv.resolve("${datadir}/enigma2/"), PATH_DONTCREATE),
+               SCOPE_SKIN_IMAGE: (eEnv.resolve("${datadir}/enigma2/"), PATH_DONTCREATE),
                SCOPE_HDD: ("/hdd/movie/", PATH_DONTCREATE),
                SCOPE_MEDIA: ("/media/", PATH_DONTCREATE),
-               SCOPE_PLAYLIST: ("/etc/enigma2/playlist/", PATH_CREATE),
+               SCOPE_PLAYLIST: (eEnv.resolve("${sysconfdir}/enigma2/playlist/"), PATH_CREATE),
                
                SCOPE_USERETC: ("", PATH_DONTCREATE), # user home directory
                
-               SCOPE_DEFAULTDIR: ("/usr/share/enigma2/defaults/", PATH_CREATE),
-               SCOPE_DEFAULTPARTITION: ("/dev/mtdblock/6", PATH_DONTCREATE),
-               SCOPE_DEFAULTPARTITIONMOUNTDIR: ("/usr/share/enigma2/dealer", PATH_CREATE),
-               SCOPE_METADIR: ("/usr/share/meta", PATH_CREATE),
+               SCOPE_DEFAULTDIR: (eEnv.resolve("${datadir}/enigma2/defaults/"), PATH_CREATE),
+               SCOPE_DEFAULTPARTITION: ("/dev/mtdblock6", PATH_DONTCREATE),
+               SCOPE_DEFAULTPARTITIONMOUNTDIR: (eEnv.resolve("${datadir}/enigma2/dealer"), PATH_CREATE),
+               SCOPE_METADIR: (eEnv.resolve("${datadir}/meta"), PATH_CREATE),
        }
 
 FILE_COPY = 0 # copy files from fallback dir to the basedir
@@ -67,7 +68,7 @@ PATH_COPY = 2 # copy the complete fallback dir to the basedir
 PATH_MOVE = 3 # move the fallback dir to the basedir (can be used for changes in paths)
 fallbackPaths = {
                SCOPE_CONFIG: [("/home/root/", FILE_MOVE),
-                                          ("/usr/share/enigma2/defaults/", FILE_COPY)],
+                                          (eEnv.resolve("${datadir}/enigma2/defaults/"), FILE_COPY)],
                SCOPE_HDD: [("/hdd/movies", PATH_MOVE)]
        }
 
@@ -117,7 +118,11 @@ def resolveFilename(scope, base = "", path_prefix = None):
 
        if flags == PATH_CREATE:
                if not pathExists(path):
-                       mkdir(path)
+                       try:
+                               mkdir(path)
+                       except OSError:
+                               print "resolveFilename: Couldn't create %s" % path
+                               return None
 
        fallbackPath = fallbackPaths.get(scope)
 
@@ -223,12 +228,13 @@ def InitFallbackFiles():
 # returns a list of tuples containing pathname and filename matching the given pattern
 # example-pattern: match all txt-files: ".*\.txt$"
 def crawlDirectory(directory, pattern):
-       expression = compile(pattern)
        list = []
-       for root, dirs, files in walk(directory):
-               for file in files:
-                       if expression.match(file) is not None:
-                               list.append((root, file))
+       if directory:
+               expression = compile(pattern)
+               for root, dirs, files in walk(directory):
+                       for file in files:
+                               if expression.match(file) is not None:
+                                       list.append((root, file))
        return list
 
 def copyfile(src, dst):
index da090b1..252e174 100644 (file)
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# -*- coding: UTF-8 -*-
 from enigma import eTimer
 from Components.Language import language
 
@@ -31,19 +31,19 @@ class NumericalTextInput:
                        return
 
                if self.lang == 'de_DE':
-                       self.mapping.append (u".,?'+\"0-()@/:_$!=") # 0
-                       self.mapping.append (u" 1") # 1
-                       self.mapping.append (u"aäbc2AÄBC") # 2
+                       self.mapping.append (u"0,?!&@=*'+\"()$~") # 0
+                       self.mapping.append (u" 1.:/-_") # 1
+                       self.mapping.append (u"abcä2ABCÄ") # 2
                        self.mapping.append (u"def3DEF") # 3
                        self.mapping.append (u"ghi4GHI") # 4
                        self.mapping.append (u"jkl5JKL") # 5
                        self.mapping.append (u"mnoö6MNOÖ") # 6
                        self.mapping.append (u"pqrsß7PQRSß") # 7
-                       self.mapping.append (u"tuüv8TUÜV") # 8
+                       self.mapping.append (u"tuvü8TUVÜ") # 8
                        self.mapping.append (u"wxyz9WXYZ") # 9
                elif self.lang == 'es_ES':
-                       self.mapping.append (u".,?'+\"0-()@/:_$!=") # 0
-                       self.mapping.append (u" 1") # 1
+                       self.mapping.append (u"0,?!&@=*'+\"()$~") # 0
+                       self.mapping.append (u" 1.:/-_") # 1
                        self.mapping.append (u"abcáà2ABCÁÀ") # 2
                        self.mapping.append (u"deéèf3DEFÉÈ") # 3
                        self.mapping.append (u"ghiíì4GHIÍÌ") # 4
@@ -53,8 +53,8 @@ class NumericalTextInput:
                        self.mapping.append (u"tuvúù8TUVÚÙ") # 8
                        self.mapping.append (u"wxyz9WXYZ") # 9
                if self.lang in ('sv_SE', 'fi_FI'):
-                       self.mapping.append (u".,?'+\"0-()@/:_$!=") # 0
-                       self.mapping.append (u" 1") # 1
+                       self.mapping.append (u"0,?!&@=*'+\"()$~") # 0
+                       self.mapping.append (u" 1.:/-_") # 1
                        self.mapping.append (u"abcåä2ABCÅÄ") # 2
                        self.mapping.append (u"defé3DEFÉ") # 3
                        self.mapping.append (u"ghi4GHI") # 4
@@ -63,9 +63,20 @@ class NumericalTextInput:
                        self.mapping.append (u"pqrs7PQRS") # 7
                        self.mapping.append (u"tuv8TUV") # 8
                        self.mapping.append (u"wxyz9WXYZ") # 9
+               elif self.lang in ('cs_CZ', 'sk_SK'):
+                       self.mapping.append (u"0,?'+\"()@$!=&*") # 0
+                       self.mapping.append (u" 1.:/-_") # 1
+                       self.mapping.append (u"abc2áäčABCÁÄČ") # 2
+                       self.mapping.append (u"def3ďéěDEFĎÉĚ") # 3
+                       self.mapping.append (u"ghi4íGHIÍ") # 4
+                       self.mapping.append (u"jkl5ľĺJKLĽĹ") # 5
+                       self.mapping.append (u"mno6ňóöôMNOŇÓÖÔ") # 6
+                       self.mapping.append (u"pqrs7řŕšPQRSŘŔŠ") # 7
+                       self.mapping.append (u"tuv8ťúůüTUVŤÚŮÜ") # 8
+                       self.mapping.append (u"wxyz9ýžWXYZÝŽ") # 9
                else:
-                       self.mapping.append (u".,?'+\"0-()@/:_$!=") # 0
-                       self.mapping.append (u" 1") # 1
+                       self.mapping.append (u"0,?!&@=*'+\"()$~") # 0
+                       self.mapping.append (u" 1.:/-_") # 1
                        self.mapping.append (u"abc2ABC") # 2
                        self.mapping.append (u"def3DEF") # 3
                        self.mapping.append (u"ghi4GHI") # 4
@@ -76,7 +87,8 @@ class NumericalTextInput:
                        self.mapping.append (u"wxyz9WXYZ") # 9
 
        def setUseableChars(self, useable):
-               self.useableChars = useable
+               self.useableChars = unicode(useable)
+               
 
        def getKey(self, num):
                cnt=0
index 6868929..0b8b96a 100644 (file)
@@ -1,4 +1,5 @@
 from enigma import eDVBFrontendParametersSatellite, eDVBFrontendParametersCable, eDVBFrontendParametersTerrestrial
+from Components.NimManager import nimmanager
 
 def ConvertToHumanReadable(tp, type = None):
        ret = { }
@@ -27,6 +28,7 @@ def ConvertToHumanReadable(tp, type = None):
                        eDVBFrontendParametersSatellite.Modulation_QPSK : "QPSK",
                        eDVBFrontendParametersSatellite.Modulation_QAM16 : "QAM16",
                        eDVBFrontendParametersSatellite.Modulation_8PSK : "8PSK"}[tp["modulation"]]
+               ret["orbital_position"] = nimmanager.getSatName(int(tp["orbital_position"]))
                ret["polarization"] = {
                        eDVBFrontendParametersSatellite.Polarisation_Horizontal : _("Horizontal"),
                        eDVBFrontendParametersSatellite.Polarisation_Vertical : _("Vertical"),
index ad76198..374749a 100644 (file)
@@ -3,11 +3,6 @@
 
 #include <libsig_comp.h>
 
-               /* avoid warnigs :) */
-#include <features.h>
-#undef _POSIX_C_SOURCE
-#define _POSIX_C_SOURCE 200112L
-
 #include <lib/python/python.h>
 
 class PSignal
@@ -85,4 +80,23 @@ public:
        }
 };
 
+template <class R, class V0, class V1, class V2>
+class PSignal3: public PSignal, public Signal3<R,V0,V1,V2>
+{
+public:
+       R operator()(V0 a0, V1 a1, V2 a2)
+       {
+               if (m_list)
+               {
+                       PyObject *pArgs = PyTuple_New(3);
+                       PyTuple_SET_ITEM(pArgs, 0, PyFrom(a0));
+                       PyTuple_SET_ITEM(pArgs, 1, PyFrom(a1));
+                       PyTuple_SET_ITEM(pArgs, 2, PyFrom(a2));
+                       callPython(pArgs);
+                       Org_Py_DECREF(pArgs);
+               }
+               return Signal3<R,V0,V1,V2>::operator()(a0, a1, a2);
+       }
+};
+
 #endif
index 19fb925..7c99927 100644 (file)
@@ -38,6 +38,7 @@ is usually caused by not marking PSignals as immutable.
 #define SWIG_COMPILE
 #include <lib/base/ebase.h>
 #include <lib/base/smartptr.h>
+#include <lib/base/eenv.h>
 #include <lib/base/eerror.h>
 #include <lib/base/etpm.h>
 #include <lib/base/nconfig.h>
@@ -50,7 +51,7 @@ is usually caused by not marking PSignals as immutable.
 #include <lib/gdi/fb.h>
 #include <lib/gdi/font.h>
 #include <lib/gdi/gpixmap.h>
-#include <lib/gdi/gfbdc.h>
+#include <lib/gdi/gmaindc.h>
 #include <lib/gui/ewidget.h>
 #include <lib/gui/elabel.h>
 #include <lib/gui/einput.h>
@@ -133,6 +134,7 @@ typedef long time_t;
 %include "std_string.i"
 %include <lib/python/swig.h>
 %include <lib/base/object.h>
+%include <lib/base/eenv.h>
 %include <lib/base/eerror.h>
 
 %immutable eSocketNotifier::activated;
@@ -164,7 +166,7 @@ typedef long time_t;
 %include <lib/gdi/fb.h>
 %include <lib/gdi/font.h>
 %include <lib/gdi/gpixmap.h>
-%include <lib/gdi/gfbdc.h>
+%include <lib/gdi/gmaindc.h>
 %include <lib/gdi/epoint.h>
 %include <lib/gdi/erect.h>
 %include <lib/gdi/esize.h>
index 18fdac7..f5b6e4d 100644 (file)
@@ -4,7 +4,6 @@
        #define __lib_python_python_class_h
 #endif
 
-#include <Python.h>
 #include <string>
 #include <lib/base/object.h>
 
index ed09d73..9f956b6 100644 (file)
@@ -1,9 +1,39 @@
-INCLUDES = \
-       -I$(top_srcdir)/include
+AM_CPPFLAGS = \
+       -I$(top_srcdir) \
+       -I$(top_srcdir)/include \
+       -include Python.h \
+       -include $(top_builddir)/enigma2_config.h
+
+AM_CXXFLAGS = \
+       $(LIBXINE_CFLAGS)
 
 noinst_LIBRARIES = libenigma_service.a
 
 libenigma_service_a_SOURCES = \
-       listboxservice.cpp service.cpp servicemp3.cpp servicedvb.cpp servicefs.cpp \
-       event.cpp servicedvbrecord.cpp
-       
+       event.cpp \
+       listboxservice.cpp \
+       service.cpp \
+       servicedvb.cpp \
+       servicedvbrecord.cpp \
+       servicefs.cpp \
+       servicemp3.cpp \
+       servicem2ts.cpp
+
+serviceincludedir = $(pkgincludedir)/lib/service
+serviceinclude_HEADERS = \
+       event.h \
+       iservice.h \
+       listboxservice.h \
+       service.h \
+       servicedvb.h \
+       servicedvbrecord.h \
+       servicefs.h \
+       servicemp3.h \
+       servicem2ts.h
+
+if HAVE_LIBXINE
+libenigma_service_a_SOURCES += \
+       servicexine.cpp
+serviceinclude_HEADERS += \
+       servicexine.h
+endif
index 2ba7cb4..7f58249 100644 (file)
@@ -289,6 +289,7 @@ public:
                sFileSize,
 
                sCAIDs,
+               sCAIDPIDs,
                sVideoType,             /* MPEG2 MPEG4 */
 
                sTags,                          /* space seperated list of tags */
index eb2757a..8c674c5 100644 (file)
@@ -201,6 +201,25 @@ RESULT eServiceCenter::removeServiceFactory(int id)
        return 0;
 }
 
+RESULT eServiceCenter::addFactoryExtension(int id, const char *extension)
+{
+       std::map<int, std::list<std::string> >::iterator it = extensions.find(id);
+       if (it == extensions.end())
+               return -1;
+       it->second.push_back(extension);
+       return 0;
+}
+
+RESULT eServiceCenter::removeFactoryExtension(int id, const char *extension)
+{
+       std::map<int, std::list<std::string> >::iterator it = extensions.find(id);
+       if (it == extensions.end())
+               return -1;
+       it->second.remove(extension);
+       return 0;
+}
+
+
 int eServiceCenter::getServiceTypeForExtension(const char *str)
 {
        for (std::map<int, std::list<std::string> >::iterator sit(extensions.begin()); sit != extensions.end(); ++sit)
index 6f6ab98..ffc7d27 100644 (file)
@@ -40,6 +40,8 @@ public:
        static RESULT getPrivInstance(ePtr<eServiceCenter> &ptr) { ptr = instance; return 0; }
        RESULT addServiceFactory(int id, iServiceHandler *hnd, std::list<std::string> &extensions);
        RESULT removeServiceFactory(int id);
+       RESULT addFactoryExtension(int id, const char *extension);
+       RESULT removeFactoryExtension(int id, const char *extension);
 #endif
        static SWIG_VOID(RESULT) getInstance(ePtr<iServiceHandler> &SWIG_NAMED_OUTPUT(ptr)) { ptr = instance; return 0; }
 };
index e498dd4..8650989 100644 (file)
@@ -309,7 +309,9 @@ eStaticServiceDVBPVRInformation::eStaticServiceDVBPVRInformation(const eServiceR
 RESULT eStaticServiceDVBPVRInformation::getName(const eServiceReference &ref, std::string &name)
 {
        ASSERT(ref == m_ref);
-       if (m_parser.m_name.size())
+       if (!ref.name.empty())
+               name = ref.name;
+       else if (!m_parser.m_name.empty())
                name = m_parser.m_name;
        else
        {
@@ -503,18 +505,19 @@ RESULT eDVBPVRServiceOfflineOperations::reindex()
        int err = f.open(m_ref.path.c_str(), 0);
        if (err < 0)
                return -1;
-       
+
+       off_t offset = 0;
        off_t length = f.length();
        unsigned char buffer[188*256*4];
        while (1)
        {
-               off_t offset = f.lseek(0, SEEK_CUR);
                eDebug("at %08llx / %08llx (%d %%)", offset, length, (int)(offset * 100 / length));
-               int r = f.read(buffer, sizeof(buffer));
+               int r = f.read(offset, buffer, sizeof(buffer));
                if (!r)
                        break;
                if (r < 0)
                        return r;
+               offset += r;
                parser.parseData(offset, buffer, r);
        }
        
@@ -902,7 +905,7 @@ RESULT eServiceFactoryDVB::lookupService(ePtr<eDVBService> &service, const eServ
                /* we are sure to have a ..DVB reference as the info() call was forwarded here according to it's ID. */
                if ((err = db->getService((eServiceReferenceDVB&)ref, service)) != 0)
                {
-                       eDebug("getService failed!");
+//                     eDebug("getService failed!");
                        return err;
                }
        }
@@ -1093,7 +1096,8 @@ void eDVBServicePlay::serviceEventTimeshift(int event)
 
                        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 */
+                       ePtr<iTsSource> source = createTsSource(r);
+                       m_service_handler_timeshift.tuneExt(r, 1, source, r.path.c_str(), m_cue, 0, m_dvb_service); /* use the decoder demux for everything */
 
                        m_event((iPlayableService*)this, evUser+1);
                }
@@ -1122,7 +1126,8 @@ void eDVBServicePlay::serviceEventTimeshift(int event)
                                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 */
+                               ePtr<iTsSource> source = createTsSource(r);
+                               m_service_handler_timeshift.tuneExt(r, 1, source, m_timeshift_file_next.c_str(), m_cue, 0, m_dvb_service); /* use the decoder demux for everything */
 
                                m_event((iPlayableService*)this, evUser+1);
                        }
@@ -1152,7 +1157,8 @@ RESULT eDVBServicePlay::start()
                m_event(this, evStart);
 
        m_first_program_info = 1;
-       m_service_handler.tune(service, m_is_pvr, m_cue, false, m_dvb_service);
+       ePtr<iTsSource> source = createTsSource(service);
+       m_service_handler.tuneExt(service, m_is_pvr, source, service.path.c_str(), m_cue, false, m_dvb_service);
 
        if (m_is_pvr)
        {
@@ -1585,7 +1591,7 @@ int eDVBServicePlay::getInfo(int w)
 {
        eDVBServicePMTHandler::program program;
 
-       if (w == sCAIDs)
+       if (w == sCAIDs || w == sCAIDPIDs)
                return resIsPyObject;
 
        eDVBServicePMTHandler &h = m_timeshift_active ? m_service_handler_timeshift : m_service_handler;
@@ -1726,6 +1732,8 @@ PyObject *eDVBServicePlay::getInfoObject(int w)
        {
        case sCAIDs:
                return m_service_handler.getCaIds();
+       case sCAIDPIDs:
+               return m_service_handler.getCaIds(true);
        case sTransponderData:
                return eStaticServiceDVBInformation().getInfoObject(m_reference, w);
        default:
@@ -1793,6 +1801,8 @@ RESULT eDVBServicePlay::getTrackInfo(struct iAudioTrackInfo &info, unsigned int
                info.m_description = "AAC-HE";
        else  if (program.audioStreams[i].type == eDVBServicePMTHandler::audioStream::atDTS)
                info.m_description = "DTS";
+       else  if (program.audioStreams[i].type == eDVBServicePMTHandler::audioStream::atDTSHD)
+               info.m_description = "DTS-HD";
        else
                info.m_description = "???";
 
@@ -2356,6 +2366,13 @@ void eDVBServicePlay::resetTimeshift(int start)
                m_timeshift_active = 0;
 }
 
+ePtr<iTsSource> eDVBServicePlay::createTsSource(eServiceReferenceDVB &ref)
+{
+       eRawFile *f = new eRawFile();
+       f->open(ref.path.c_str());
+       return ePtr<iTsSource>(f);
+}
+
 void eDVBServicePlay::switchToTimeshift()
 {
        if (m_timeshift_active)
@@ -2367,7 +2384,9 @@ void eDVBServicePlay::switchToTimeshift()
        r.path = m_timeshift_file;
 
        m_cue->seekTo(0, -1000);
-       m_service_handler_timeshift.tune(r, 1, m_cue, 0, m_dvb_service); /* use the decoder demux for everything */
+
+       ePtr<iTsSource> source = createTsSource(r);
+       m_service_handler_timeshift.tuneExt(r, 1, source, m_timeshift_file.c_str(), m_cue, 0, m_dvb_service); /* use the decoder demux for everything */
 
        eDebug("eDVBServicePlay::switchToTimeshift, in pause mode now.");
        pause();
@@ -2386,7 +2405,7 @@ void eDVBServicePlay::updateDecoder(bool sendSeekableStateChanged)
                eDebug("getting program info failed.");
        else
        {
-               eDebugNoNewLine("have %d video stream(s)", program.videoStreams.size());
+               eDebugNoNewLine("have %zd video stream(s)", program.videoStreams.size());
                if (!program.videoStreams.empty())
                {
                        eDebugNoNewLine(" (");
@@ -2405,7 +2424,7 @@ void eDVBServicePlay::updateDecoder(bool sendSeekableStateChanged)
                        }
                        eDebugNoNewLine(")");
                }
-               eDebugNoNewLine(", and %d audio stream(s)", program.audioStreams.size());
+               eDebugNoNewLine(", and %zd audio stream(s)", program.audioStreams.size());
                if (!program.audioStreams.empty())
                {
                        eDebugNoNewLine(" (");
@@ -2582,7 +2601,7 @@ void eDVBServicePlay::loadCuesheet()
                        m_cue_entries.insert(cueEntry(where, what));
                }
                fclose(f);
-               eDebug("%d entries", m_cue_entries.size());
+               eDebug("%zd entries", m_cue_entries.size());
        } else
                eDebug("cutfile not found!");
        
index dafaf35..3efc259 100644 (file)
@@ -185,7 +185,7 @@ public:
        RESULT stream(ePtr<iStreamableService> &ptr);
        PyObject *getStreamingData();
 
-private:
+protected:
        friend class eServiceFactoryDVB;
        eServiceReference m_reference;
        
@@ -289,6 +289,8 @@ private:
 
        ePtr<eConnection> m_video_event_connection;
        void video_event(struct iTSMPEGDecoder::videoEvent);
+
+       virtual ePtr<iTsSource> createTsSource(eServiceReferenceDVB &ref);
 };
 
 class eStaticServiceDVBBouquetInformation: public iStaticServiceInformation
index 419c26b..08cd247 100644 (file)
@@ -313,7 +313,7 @@ int eDVBServiceRecord::doRecord()
 
                        int timing_pid = -1, timing_pid_type = -1;
 
-                       eDebugNoNewLine("RECORD: have %d video stream(s)", program.videoStreams.size());
+                       eDebugNoNewLine("RECORD: have %zd video stream(s)", program.videoStreams.size());
                        if (!program.videoStreams.empty())
                        {
                                eDebugNoNewLine(" (");
@@ -335,7 +335,7 @@ int eDVBServiceRecord::doRecord()
                                }
                                eDebugNoNewLine(")");
                        }
-                       eDebugNoNewLine(", and %d audio stream(s)", program.audioStreams.size());
+                       eDebugNoNewLine(", and %zd audio stream(s)", program.audioStreams.size());
                        if (!program.audioStreams.empty())
                        {
                                eDebugNoNewLine(" (");
diff --git a/lib/service/servicem2ts.cpp b/lib/service/servicem2ts.cpp
new file mode 100644 (file)
index 0000000..e79907d
--- /dev/null
@@ -0,0 +1,380 @@
+#include <lib/base/init_num.h>
+#include <lib/base/init.h>
+#include <lib/dvb/metaparser.h>
+#include <lib/service/servicem2ts.h>
+
+DEFINE_REF(eServiceFactoryM2TS)
+
+class eM2TSFile: public iTsSource
+{
+       DECLARE_REF(eM2TSFile);
+       eSingleLock m_lock;
+public:
+       eM2TSFile(const char *filename, bool cached=false);
+       ~eM2TSFile();
+
+       // iTsSource
+       off_t lseek(off_t offset, int whence);
+       ssize_t read(off_t offset, void *buf, size_t count);
+       off_t length();
+       int valid();
+private:
+       int m_sync_offset;
+       int m_fd;     /* for uncached */
+       FILE *m_file; /* for cached */
+       off_t m_current_offset, m_length;
+       bool m_cached;
+       off_t lseek_internal(off_t offset, int whence);
+};
+
+class eStaticServiceM2TSInformation: public iStaticServiceInformation
+{
+       DECLARE_REF(eStaticServiceM2TSInformation);
+       eServiceReference m_ref;
+       eDVBMetaParser m_parser;
+public:
+       eStaticServiceM2TSInformation(const eServiceReference &ref);
+       RESULT getName(const eServiceReference &ref, std::string &name);
+       int getLength(const eServiceReference &ref);
+       RESULT getEvent(const eServiceReference &ref, ePtr<eServiceEvent> &SWIG_OUTPUT, time_t start_time);
+       int isPlayable(const eServiceReference &ref, const eServiceReference &ignore) { return 1; }
+       int getInfo(const eServiceReference &ref, int w);
+       std::string getInfoString(const eServiceReference &ref,int w);
+       PyObject *getInfoObject(const eServiceReference &r, int what);
+};
+
+DEFINE_REF(eStaticServiceM2TSInformation);
+
+eStaticServiceM2TSInformation::eStaticServiceM2TSInformation(const eServiceReference &ref)
+{
+       m_ref = ref;
+       m_parser.parseFile(ref.path);
+}
+
+RESULT eStaticServiceM2TSInformation::getName(const eServiceReference &ref, std::string &name)
+{
+       ASSERT(ref == m_ref);
+       if (m_parser.m_name.size())
+               name = m_parser.m_name;
+       else
+       {
+               name = ref.path;
+               size_t n = name.rfind('/');
+               if (n != std::string::npos)
+                       name = name.substr(n + 1);
+       }
+       return 0;
+}
+
+int eStaticServiceM2TSInformation::getLength(const eServiceReference &ref)
+{
+       ASSERT(ref == m_ref);
+       
+       eDVBTSTools tstools;
+       
+       struct stat s;
+       stat(ref.path.c_str(), &s);
+
+       eM2TSFile *file = new eM2TSFile(ref.path.c_str());
+       ePtr<iTsSource> source = file;
+
+       if (!source->valid())
+               return 0;
+
+       tstools.setSource(source);
+
+                       /* check if cached data is still valid */
+       if (m_parser.m_data_ok && (s.st_size == m_parser.m_filesize) && (m_parser.m_length))
+               return m_parser.m_length / 90000;
+
+       /* open again, this time with stream info */
+       tstools.setSource(source, ref.path.c_str());
+
+                       /* otherwise, re-calc length and update meta file */
+       pts_t len;
+       if (tstools.calcLen(len))
+               return 0;
+
+       m_parser.m_length = len;
+       m_parser.m_filesize = s.st_size;
+       m_parser.updateMeta(ref.path);
+       return m_parser.m_length / 90000;
+}
+
+int eStaticServiceM2TSInformation::getInfo(const eServiceReference &ref, int w)
+{
+       switch (w)
+       {
+       case iServiceInformation::sDescription:
+               return iServiceInformation::resIsString;
+       case iServiceInformation::sServiceref:
+               return iServiceInformation::resIsString;
+       case iServiceInformation::sFileSize:
+               return m_parser.m_filesize;
+       case iServiceInformation::sTimeCreate:
+               if (m_parser.m_time_create)
+                       return m_parser.m_time_create;
+               else
+                       return iServiceInformation::resNA;
+       default:
+               return iServiceInformation::resNA;
+       }
+}
+
+std::string eStaticServiceM2TSInformation::getInfoString(const eServiceReference &ref,int w)
+{
+       switch (w)
+       {
+       case iServiceInformation::sDescription:
+               return m_parser.m_description;
+       case iServiceInformation::sServiceref:
+               return m_parser.m_ref.toString();
+       case iServiceInformation::sTags:
+               return m_parser.m_tags;
+       default:
+               return "";
+       }
+}
+
+PyObject *eStaticServiceM2TSInformation::getInfoObject(const eServiceReference &r, int what)
+{
+       switch (what)
+       {
+       case iServiceInformation::sFileSize:
+               return PyLong_FromLongLong(m_parser.m_filesize);
+       default:
+               Py_RETURN_NONE;
+       }
+}
+
+RESULT eStaticServiceM2TSInformation::getEvent(const eServiceReference &ref, ePtr<eServiceEvent> &evt, time_t start_time)
+{
+       if (!ref.path.empty())
+       {
+               ePtr<eServiceEvent> event = new eServiceEvent;
+               std::string filename = ref.path;
+               filename.erase(filename.length()-4, 2);
+               filename+="eit";
+               if (!event->parseFrom(filename, (m_parser.m_ref.getTransportStreamID().get()<<16)|m_parser.m_ref.getOriginalNetworkID().get()))
+               {
+                       evt = event;
+                       return 0;
+               }
+       }
+       evt = 0;
+       return -1;
+}
+
+DEFINE_REF(eM2TSFile);
+
+eM2TSFile::eM2TSFile(const char *filename, bool cached)
+       :m_lock(false), m_sync_offset(0), m_fd(-1), m_file(NULL), m_current_offset(0), m_length(0), m_cached(cached)
+{
+       if (!m_cached)
+               m_fd = ::open(filename, O_RDONLY | O_LARGEFILE);
+       else
+               m_file = ::fopen64(filename, "rb");
+       if (valid())
+               m_current_offset = m_length = lseek_internal(0, SEEK_END);
+}
+
+eM2TSFile::~eM2TSFile()
+{
+       if (m_cached)
+       {
+               if (m_file)
+               {
+                       ::fclose(m_file);
+                       m_file = 0;
+               }
+       }
+       else
+       {
+               if (m_fd >= 0)
+                       ::close(m_fd);
+               m_fd = -1;
+       }
+}
+
+off_t eM2TSFile::lseek(off_t offset, int whence)
+{
+       eSingleLocker l(m_lock);
+
+       offset = (offset % 188) + (offset * 192) / 188;
+
+       if (offset != m_current_offset)
+               m_current_offset = lseek_internal(offset, whence);
+
+       return m_current_offset;
+}
+
+off_t eM2TSFile::lseek_internal(off_t offset, int whence)
+{
+       off_t ret;
+
+       if (!m_cached)
+               ret = ::lseek(m_fd, offset, whence);
+       else
+       {
+               if (::fseeko(m_file, offset, whence) < 0)
+                       perror("fseeko");
+               ret = ::ftello(m_file);
+       }
+       return ret <= 0 ? ret : (ret % 192) + (ret*188) / 192;
+}
+
+ssize_t eM2TSFile::read(off_t offset, void *b, size_t count)
+{
+       eSingleLocker l(m_lock);
+       unsigned char tmp[192*3];
+       unsigned char *buf = (unsigned char*)b;
+
+       size_t rd=0;
+       offset = (offset % 188) + (offset * 192) / 188;
+
+sync:
+       if ((offset+m_sync_offset) != m_current_offset)
+       {
+//             eDebug("seekTo %lld", offset+m_sync_offset);
+               m_current_offset = lseek_internal(offset+m_sync_offset, SEEK_SET);
+               if (m_current_offset < 0)
+                       return m_current_offset;
+       }
+
+       while (rd < count) {
+               size_t ret;
+               if (!m_cached)
+                       ret = ::read(m_fd, tmp, 192);
+               else
+                       ret = ::fread(tmp, 1, 192, m_file);
+               if (ret < 0 || ret < 192)
+                       return rd ? rd : ret;
+
+               if (tmp[4] != 0x47)
+               {
+                       if (rd > 0) {
+                               eDebug("short read at pos %lld async!!", m_current_offset);
+                               return rd;
+                       }
+                       else {
+                               int x=0;
+                               if (!m_cached)
+                                       ret = ::read(m_fd, tmp+192, 384);
+                               else
+                                       ret = ::fread(tmp+192, 1, 384, m_file);
+
+#if 0
+                               eDebugNoNewLine("m2ts out of sync at pos %lld, real %lld:", offset + m_sync_offset, m_current_offset);
+                               for (; x < 192; ++x)
+                                       eDebugNoNewLine(" %02x", tmp[x]);
+                               eDebug("");
+                               x=0;
+#else
+                               eDebug("m2ts out of sync at pos %lld, real %lld", offset + m_sync_offset, m_current_offset);
+#endif
+                               for (; x < 192; ++x)
+                               {
+                                       if (tmp[x] == 0x47 && tmp[x+192] == 0x47)
+                                       {
+                                               int add_offs = (x - 4);
+                                               eDebug("sync found at pos %d, sync_offset is now %d, old was %d", x, add_offs + m_sync_offset, m_sync_offset);
+                                               m_sync_offset += add_offs;
+                                               goto sync;
+                                       }
+                               }
+                       }
+               }
+
+               memcpy(buf+rd, tmp+4, 188);
+
+               rd += 188;
+               m_current_offset += 188;
+       }
+
+       m_sync_offset %= 188;
+
+       return rd;
+}
+
+int eM2TSFile::valid()
+{
+       if (!m_cached)
+               return m_fd != -1;
+       else
+               return !!m_file;
+}
+
+off_t eM2TSFile::length()
+{
+       return m_length;
+}
+
+eServiceFactoryM2TS::eServiceFactoryM2TS()
+{
+       ePtr<eServiceCenter> sc;
+       eServiceCenter::getPrivInstance(sc);
+       if (sc)
+       {
+               std::list<std::string> extensions;
+               extensions.push_back("m2ts");
+               extensions.push_back("mts");
+               sc->addServiceFactory(eServiceFactoryM2TS::id, this, extensions);
+       }
+}
+
+eServiceFactoryM2TS::~eServiceFactoryM2TS()
+{
+       ePtr<eServiceCenter> sc;
+       
+       eServiceCenter::getPrivInstance(sc);
+       if (sc)
+               sc->removeServiceFactory(eServiceFactoryM2TS::id);
+}
+
+RESULT eServiceFactoryM2TS::play(const eServiceReference &ref, ePtr<iPlayableService> &ptr)
+{
+       ptr = new eServiceM2TS(ref);
+       return 0;
+}
+
+RESULT eServiceFactoryM2TS::record(const eServiceReference &ref, ePtr<iRecordableService> &ptr)
+{
+       ptr=0;
+       return -1;
+}
+
+RESULT eServiceFactoryM2TS::list(const eServiceReference &ref, ePtr<iListableService> &ptr)
+{
+       ptr=0;
+       return -1;
+}
+
+RESULT eServiceFactoryM2TS::info(const eServiceReference &ref, ePtr<iStaticServiceInformation> &ptr)
+{
+       ptr=new eStaticServiceM2TSInformation(ref);
+       return 0;
+}
+
+RESULT eServiceFactoryM2TS::offlineOperations(const eServiceReference &ref, ePtr<iServiceOfflineOperations> &ptr)
+{
+       ptr = 0;
+       return -1;
+}
+
+eServiceM2TS::eServiceM2TS(const eServiceReference &ref)
+       :eDVBServicePlay(ref, NULL)
+{
+}
+
+ePtr<iTsSource> eServiceM2TS::createTsSource(eServiceReferenceDVB &ref)
+{
+       ePtr<iTsSource> source = new eM2TSFile(ref.path.c_str());
+       return source;
+}
+
+RESULT eServiceM2TS::isCurrentlySeekable()
+{
+       return 1; // for fast winding we need index files... so only skip forward/backward yet
+}
+
+eAutoInitPtr<eServiceFactoryM2TS> init_eServiceFactoryM2TS(eAutoInitNumbers::service+1, "eServiceFactoryM2TS");
diff --git a/lib/service/servicem2ts.h b/lib/service/servicem2ts.h
new file mode 100644 (file)
index 0000000..bfa4f7d
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef __servicem2ts_h
+#define __servicem2ts_h
+
+#include <lib/service/servicedvb.h>
+
+class eServiceFactoryM2TS: public iServiceHandler
+{
+       DECLARE_REF(eServiceFactoryM2TS);
+public:
+       eServiceFactoryM2TS();
+       virtual ~eServiceFactoryM2TS();
+       enum { id = 0x3 };
+
+               // iServiceHandler
+       RESULT play(const eServiceReference &, ePtr<iPlayableService> &ptr);
+       RESULT record(const eServiceReference &, ePtr<iRecordableService> &ptr);
+       RESULT list(const eServiceReference &, ePtr<iListableService> &ptr);
+       RESULT info(const eServiceReference &, ePtr<iStaticServiceInformation> &ptr);
+       RESULT offlineOperations(const eServiceReference &, ePtr<iServiceOfflineOperations> &ptr);
+};
+
+class eServiceM2TS: public eDVBServicePlay
+{
+       friend class eServiceFactoryM2TS;
+protected:
+       eServiceM2TS(const eServiceReference &ref);
+       ePtr<iTsSource> createTsSource(eServiceReferenceDVB &ref);
+
+       // iSeekableService
+       RESULT isCurrentlySeekable();
+};
+
+#endif
index 1fb1e44..be55d0c 100644 (file)
@@ -1,5 +1,3 @@
-#ifdef HAVE_GSTREAMER
-
        /* 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>
@@ -13,6 +11,7 @@
 #include <lib/gui/esubtitle.h>
 #include <lib/service/servicemp3.h>
 #include <lib/service/service.h>
+#include <lib/gdi/gpixmap.h>
 
 #include <string>
 
@@ -227,6 +226,10 @@ eServiceMP3::eServiceMP3(eServiceReference ref)
        m_currentTrickRatio = 0;
        m_subs_to_pull = 0;
        m_buffer_size = 1*1024*1024;
+       m_prev_decoder_time = -1;
+       m_decoder_time_valid_state = 0;
+       m_errorInfo.missing_codec = "";
+
        CONNECT(m_seekTimeout->timeout, eServiceMP3::seekTimeoutCB);
        CONNECT(m_subtitle_sync_timer->timeout, eServiceMP3::pushSubtitles);
        CONNECT(m_pump.recv_msg, eServiceMP3::gstPoll);
@@ -325,11 +328,11 @@ eServiceMP3::eServiceMP3(eServiceReference ref)
 
        m_gst_playbin = gst_element_factory_make("playbin2", "playbin");
        if (!m_gst_playbin)
-               m_error_message = "failed to create GStreamer pipeline!\n";
+               m_errorInfo.error_message = "failed to create GStreamer pipeline!\n";
 
        g_object_set (G_OBJECT (m_gst_playbin), "uri", uri, NULL);
 
-       int flags = 0x47; // ( == GST_PLAY_FLAG_VIDEO | GST_PLAY_FLAG_AUDIO | GST_PLAY_FLAG_NATIVE_VIDEO | GST_PLAY_FLAG_TEXT )
+       int flags = 0x47; // ( GST_PLAY_FLAG_VIDEO | GST_PLAY_FLAG_AUDIO | GST_PLAY_FLAG_NATIVE_VIDEO | GST_PLAY_FLAG_TEXT );
        g_object_set (G_OBJECT (m_gst_playbin), "flags", flags, NULL);
 
        g_free(uri);
@@ -340,8 +343,9 @@ eServiceMP3::eServiceMP3(eServiceReference ref)
        else
        {
                m_subs_to_pull_handler_id = g_signal_connect (subsink, "new-buffer", G_CALLBACK (gstCBsubtitleAvail), this);
-               g_object_set (G_OBJECT (subsink), "caps", gst_caps_from_string("text/plain; text/x-plain; text/x-pango-markup"), NULL);
+               g_object_set (G_OBJECT (subsink), "caps", gst_caps_from_string("text/plain; text/x-plain; text/x-pango-markup; video/x-dvd-subpicture; subpicture/x-pgs"), NULL);
                g_object_set (G_OBJECT (m_gst_playbin), "text-sink", subsink, NULL);
+               
        }
 
        if ( m_gst_playbin )
@@ -356,10 +360,6 @@ eServiceMP3::eServiceMP3(eServiceReference ref)
                {
                        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");
-                       m_subtitleStreams.push_back(subs);
                }
                if ( m_sourceinfo.is_streaming )
                {
@@ -372,7 +372,7 @@ eServiceMP3::eServiceMP3(eServiceReference ref)
                if (m_gst_playbin)
                        gst_object_unref(GST_OBJECT(m_gst_playbin));
 
-               eDebug("eServiceMP3::sorry, can't play: %s",m_error_message.c_str());
+               eDebug("eServiceMP3::sorry, can't play: %s",m_errorInfo.error_message.c_str());
                m_gst_playbin = 0;
        }
 
@@ -382,12 +382,12 @@ eServiceMP3::eServiceMP3(eServiceReference ref)
 eServiceMP3::~eServiceMP3()
 {
        // disconnect subtitle callback
-       GstElement *sink;
-       g_object_get (G_OBJECT (m_gst_playbin), "text-sink", &sink, NULL);
-       if (sink)
+       GstElement *appsink = gst_bin_get_by_name(GST_BIN(m_gst_playbin), "subtitle_sink");
+
+       if (appsink)
        {
-               g_signal_handler_disconnect (sink, m_subs_to_pull_handler_id);
-               gst_object_unref(sink);
+               g_signal_handler_disconnect (appsink, m_subs_to_pull_handler_id);
+               gst_object_unref(appsink);
        }
 
        delete m_subtitle_widget;
@@ -444,6 +444,8 @@ RESULT eServiceMP3::stop()
 
        if (m_state == stStopped)
                return -1;
+       
+       //GST_DEBUG_BIN_TO_DOT_FILE(GST_BIN(m_gst_playbin),GST_DEBUG_GRAPH_SHOW_ALL,"e2-playbin");
 
        eDebug("eServiceMP3::stop %s", m_ref.path.c_str());
        gst_element_set_state(m_gst_playbin, GST_STATE_NULL);
@@ -570,6 +572,8 @@ RESULT eServiceMP3::seekTo(pts_t to)
                if (!(ret = seekToImpl(to)))
                {
                        m_subtitle_pages.clear();
+                       m_prev_decoder_time = -1;
+                       m_decoder_time_valid_state = 0;
                        m_subs_to_pull = 0;
                }
        }
@@ -671,6 +675,7 @@ RESULT eServiceMP3::getPlayPosition(pts_t &pts)
 
        /* pos is in nanoseconds. we have 90 000 pts per second. */
        pts = pos / 11111;
+//     eDebug("gst_element_query_position %lld pts (%lld ms)", pts, pos/1000000);
        return 0;
 }
 
@@ -931,7 +936,7 @@ std::string eServiceMP3::getInfoString(int w)
                tag = "channel-mode";
                break;
        case sUser+12:
-               return m_error_message;
+               return m_errorInfo.error_message;
        default:
                return "";
        }
@@ -1113,24 +1118,66 @@ RESULT eServiceMP3::getTrackInfo(struct iAudioTrackInfo &info, unsigned int i)
        return 0;
 }
 
+subtype_t getSubtitleType(GstPad* pad, gchar *g_codec=NULL)
+{
+       subtype_t type = stUnknown;
+       GstCaps* caps = gst_pad_get_negotiated_caps(pad);
+
+       if ( caps )
+       {
+               GstStructure* str = gst_caps_get_structure(caps, 0);
+               const gchar *g_type = gst_structure_get_name(str);
+               eDebug("getSubtitleType::subtitle probe caps type=%s", g_type);
+
+               if ( !strcmp(g_type, "video/x-dvd-subpicture") )
+                       type = stVOB;
+               else if ( !strcmp(g_type, "text/x-pango-markup") )
+                       type = stSSA;
+               else if ( !strcmp(g_type, "text/plain") )
+                       type = stPlainText;
+               else if ( !strcmp(g_type, "subpicture/x-pgs") )
+                       type = stPGS;
+               else
+                       eDebug("getSubtitleType::unsupported subtitle caps %s (%s)", g_type, g_codec);
+       }
+       else if ( g_codec )
+       {
+               eDebug("getSubtitleType::subtitle probe codec tag=%s", g_codec);
+               if ( !strcmp(g_codec, "VOB") )
+                       type = stVOB;
+               else if ( !strcmp(g_codec, "SubStation Alpha") || !strcmp(g_codec, "SSA") )
+                       type = stSSA;
+               else if ( !strcmp(g_codec, "ASS") )
+                       type = stASS;
+               else if ( !strcmp(g_codec, "UTF-8 plain text") )
+                       type = stPlainText;
+               else
+                       eDebug("getSubtitleType::unsupported subtitle codec %s", g_codec);
+       }
+       else
+               eDebug("getSubtitleType::unidentifiable subtitle stream!");
+
+       return type;
+}
+
 void eServiceMP3::gstBusCall(GstBus *bus, GstMessage *msg)
 {
        if (!msg)
                return;
        gchar *sourceName;
        GstObject *source;
-
        source = GST_MESSAGE_SRC(msg);
+       if (!GST_IS_OBJECT(source))
+               return;
        sourceName = gst_object_get_name(source);
 #if 0
+       gchar *string;
        if (gst_message_get_structure(msg))
-       {
-               gchar *string = gst_structure_to_string(gst_message_get_structure(msg));
-               eDebug("eServiceMP3::gst_message from %s: %s", sourceName, string);
-               g_free(string);
-       }
+               string = gst_structure_to_string(gst_message_get_structure(msg));
        else
-               eDebug("eServiceMP3::gst_message from %s: %s (without structure)", sourceName, GST_MESSAGE_TYPE_NAME(msg));
+               string = g_strdup(GST_MESSAGE_TYPE_NAME(msg));
+       eDebug("eTsRemoteSource::gst_message from %s: %s", sourceName, string);
+       g_free(string);
 #endif
        switch (GST_MESSAGE_TYPE (msg))
        {
@@ -1159,16 +1206,15 @@ void eServiceMP3::gstBusCall(GstBus *bus, GstMessage *msg)
                                }       break;
                                case GST_STATE_CHANGE_READY_TO_PAUSED:
                                {
-                                       GstElement *sink;
-                                       g_object_get (G_OBJECT (m_gst_playbin), "text-sink", &sink, NULL);
-                                       if (sink)
-                                       {
-                                               g_object_set (G_OBJECT (sink), "max-buffers", 2, NULL);
-                                               g_object_set (G_OBJECT (sink), "sync", FALSE, NULL);
-                                               g_object_set (G_OBJECT (sink), "async", FALSE, NULL);
-                                               g_object_set (G_OBJECT (sink), "emit-signals", TRUE, NULL);
-                                               gst_object_unref(sink);
-                                       }
+                                       GstElement *appsink = gst_bin_get_by_name(GST_BIN(m_gst_playbin), "subtitle_sink");
+                                       if (appsink)
+                                       {
+                                               g_object_set (G_OBJECT (appsink), "max-buffers", 2, NULL);
+                                               g_object_set (G_OBJECT (appsink), "sync", FALSE, NULL);
+                                               g_object_set (G_OBJECT (appsink), "emit-signals", TRUE, NULL);
+                                               eDebug("eServiceMP3::appsink properties set!");
+                                               gst_object_unref(appsink);
+                                       }
                                        setAC3Delay(ac3_delay);
                                        setPCMDelay(pcm_delay);
                                }       break;
@@ -1285,7 +1331,6 @@ void eServiceMP3::gstBusCall(GstBus *bus, GstMessage *msg)
                                        continue;
                                GstStructure* str = gst_caps_get_structure(caps, 0);
                                const gchar *g_type = gst_structure_get_name(str);
-                               eDebug("AUDIO STRUCT=%s", g_type);
                                audio.type = gstCheckAudioPad(str);
                                g_codec = g_strdup(g_type);
                                g_lang = g_strdup_printf ("und");
@@ -1306,65 +1351,85 @@ void eServiceMP3::gstBusCall(GstBus *bus, GstMessage *msg)
                        }
 
                        for (i = 0; i < n_text; i++)
-                       {       
-                               gchar *g_lang;
-//                             gchar *g_type;
-//                             GstPad* pad = 0;
-//                             g_signal_emit_by_name (m_gst_playbin, "get-text-pad", i, &pad);
-//                             GstCaps* caps = gst_pad_get_negotiated_caps(pad);
-//                             GstStructure* str = gst_caps_get_structure(caps, 0);
-//                             g_type = gst_structure_get_name(str);
-//                             g_signal_emit_by_name (m_gst_playbin, "get-text-tags", i, &tags);
+                       {
+                               gchar *g_codec = NULL, *g_lang = NULL;
+                               g_signal_emit_by_name (m_gst_playbin, "get-text-tags", i, &tags);
                                subtitleStream subs;
-                               subs.type = stPlainText;
+//                             int ret;
+
                                g_lang = g_strdup_printf ("und");
                                if ( tags && gst_is_tag_list(tags) )
+                               {
                                        gst_tag_list_get_string(tags, GST_TAG_LANGUAGE_CODE, &g_lang);
+                                       gst_tag_list_get_string(tags, GST_TAG_SUBTITLE_CODEC, &g_codec);
+                                       gst_tag_list_free(tags);
+                               }
+
                                subs.language_code = std::string(g_lang);
-                               eDebug("eServiceMP3::subtitle stream=%i language=%s"/* type=%s*/, i, g_lang/*, g_type*/);
+                               eDebug("eServiceMP3::subtitle stream=%i language=%s codec=%s", i, g_lang, g_codec);
+                               
+                               GstPad* pad = 0;
+                               g_signal_emit_by_name (m_gst_playbin, "get-text-pad", i, &pad);
+                               if ( pad )
+                                       g_signal_connect (G_OBJECT (pad), "notify::caps", G_CALLBACK (gstTextpadHasCAPS), this);
+                               subs.type = getSubtitleType(pad, g_codec);
+
                                m_subtitleStreams.push_back(subs);
                                g_free (g_lang);
-//                             g_free (g_type);
                        }
                        m_event((iPlayableService*)this, evUpdatedEventInfo);
+
+                       if ( m_errorInfo.missing_codec != "" )
+                       {
+                               if ( m_errorInfo.missing_codec.find("video/") == 0 || ( m_errorInfo.missing_codec.find("audio/") == 0 && getNumberOfTracks() == 0 ) )
+                                       m_event((iPlayableService*)this, evUser+12);
+                       }
                        break;
                }
                case GST_MESSAGE_ELEMENT:
                {
-                       if ( gst_is_missing_plugin_message(msg) )
+                       if (const GstStructure *msgstruct = gst_message_get_structure(msg))
                        {
-                               gchar *description = gst_missing_plugin_message_get_description(msg);
-                               if ( description )
+                               if ( gst_is_missing_plugin_message(msg) )
                                {
-                                       m_error_message = "GStreamer plugin " + (std::string)description + " not available!\n";
-                                       g_free(description);
-                                       m_event((iPlayableService*)this, evUser+12);
-                               }
-                       }
-                       else if (const GstStructure *msgstruct = gst_message_get_structure(msg))
-                       {
-                               const gchar *eventname = gst_structure_get_name(msgstruct);
-                               if ( eventname )
-                               {
-                                       if (!strcmp(eventname, "eventSizeChanged") || !strcmp(eventname, "eventSizeAvail"))
-                                       {
-                                               gst_structure_get_int (msgstruct, "aspect_ratio", &m_aspect);
-                                               gst_structure_get_int (msgstruct, "width", &m_width);
-                                               gst_structure_get_int (msgstruct, "height", &m_height);
-                                               if (strstr(eventname, "Changed"))
-                                                       m_event((iPlayableService*)this, evVideoSizeChanged);
-                                       }
-                                       else if (!strcmp(eventname, "eventFrameRateChanged") || !strcmp(eventname, "eventFrameRateAvail"))
+                                       GstCaps *caps;
+                                       gst_structure_get (msgstruct, "detail", GST_TYPE_CAPS, &caps, NULL); 
+                                       std::string codec = (const char*) gst_caps_to_string(caps);
+                                       gchar *description = gst_missing_plugin_message_get_description(msg);
+                                       if ( description )
                                        {
-                                               gst_structure_get_int (msgstruct, "frame_rate", &m_framerate);
-                                               if (strstr(eventname, "Changed"))
-                                                       m_event((iPlayableService*)this, evVideoFramerateChanged);
+                                               eDebug("eServiceMP3::m_errorInfo.missing_codec = %s", codec.c_str());
+                                               m_errorInfo.error_message = "GStreamer plugin " + (std::string)description + " not available!\n";
+                                               m_errorInfo.missing_codec = codec.substr(0,(codec.find_first_of(',')));
+                                               g_free(description);
                                        }
-                                       else if (!strcmp(eventname, "eventProgressiveChanged") || !strcmp(eventname, "eventProgressiveAvail"))
+                                       gst_caps_unref(caps);
+                               }
+                               else
+                               {
+                                       const gchar *eventname = gst_structure_get_name(msgstruct);
+                                       if ( eventname )
                                        {
-                                               gst_structure_get_int (msgstruct, "progressive", &m_progressive);
-                                               if (strstr(eventname, "Changed"))
-                                                       m_event((iPlayableService*)this, evVideoProgressiveChanged);
+                                               if (!strcmp(eventname, "eventSizeChanged") || !strcmp(eventname, "eventSizeAvail"))
+                                               {
+                                                       gst_structure_get_int (msgstruct, "aspect_ratio", &m_aspect);
+                                                       gst_structure_get_int (msgstruct, "width", &m_width);
+                                                       gst_structure_get_int (msgstruct, "height", &m_height);
+                                                       if (strstr(eventname, "Changed"))
+                                                               m_event((iPlayableService*)this, evVideoSizeChanged);
+                                               }
+                                               else if (!strcmp(eventname, "eventFrameRateChanged") || !strcmp(eventname, "eventFrameRateAvail"))
+                                               {
+                                                       gst_structure_get_int (msgstruct, "frame_rate", &m_framerate);
+                                                       if (strstr(eventname, "Changed"))
+                                                               m_event((iPlayableService*)this, evVideoFramerateChanged);
+                                               }
+                                               else if (!strcmp(eventname, "eventProgressiveChanged") || !strcmp(eventname, "eventProgressiveAvail"))
+                                               {
+                                                       gst_structure_get_int (msgstruct, "progressive", &m_progressive);
+                                                       if (strstr(eventname, "Changed"))
+                                                               m_event((iPlayableService*)this, evVideoProgressiveChanged);
+                                               }
                                        }
                                }
                        }
@@ -1417,7 +1482,7 @@ void eServiceMP3::gstBusCall(GstBus *bus, GstMessage *msg)
 GstBusSyncReply eServiceMP3::gstBusSyncHandler(GstBus *bus, GstMessage *message, gpointer user_data)
 {
        eServiceMP3 *_this = (eServiceMP3*)user_data;
-       _this->m_pump.send(1);
+       _this->m_pump.send(Message(1));
                /* wake */
        return GST_BUS_PASS;
 }
@@ -1471,43 +1536,103 @@ audiotype_t eServiceMP3::gstCheckAudioPad(GstStructure* structure)
        return atUnknown;
 }
 
-void eServiceMP3::gstPoll(const int &msg)
+void eServiceMP3::gstPoll(const Message &msg)
 {
-               /* ok, we have a serious problem here. gstBusSyncHandler sends 
-                  us the wakup signal, but likely before it was posted.
-                  the usleep, an EVIL HACK (DON'T DO THAT!!!) works around this.
-                  
-                  I need to understand the API a bit more to make this work 
-                  proplerly. */
-       if (msg == 1)
+       if (msg.type == 1)
        {
                GstBus *bus = gst_pipeline_get_bus (GST_PIPELINE (m_gst_playbin));
                GstMessage *message;
-               usleep(1);
-               while ((message = gst_bus_pop (bus)))
+               while ((message = gst_bus_pop(bus)))
                {
                        gstBusCall(bus, message);
                        gst_message_unref (message);
                }
        }
-       else
+       else if (msg.type == 2)
                pullSubtitle();
+       else if (msg.type == 3)
+               gstTextpadHasCAPS_synced(msg.d.pad);
+       else
+               eDebug("gstPoll unhandled Message %d\n", msg.type);
 }
 
 eAutoInitPtr<eServiceFactoryMP3> init_eServiceFactoryMP3(eAutoInitNumbers::service+1, "eServiceFactoryMP3");
 
 void eServiceMP3::gstCBsubtitleAvail(GstElement *appsink, gpointer user_data)
 {
-       eServiceMP3 *_this = (eServiceMP3*)user_data;
+       eServiceMP3 *_this = (eServiceMP3*)user_data;   
        eSingleLocker l(_this->m_subs_to_pull_lock);
        ++_this->m_subs_to_pull;
-       _this->m_pump.send(2);
+       _this->m_pump.send(Message(2));
+}
+
+void eServiceMP3::gstTextpadHasCAPS(GstPad *pad, GParamSpec * unused, gpointer user_data)
+{
+       eServiceMP3 *_this = (eServiceMP3*)user_data;
+
+       gst_object_ref (pad);
+
+       _this->m_pump.send(Message(3, pad));
+}
+
+// after messagepump
+void eServiceMP3::gstTextpadHasCAPS_synced(GstPad *pad)
+{
+       GstCaps *caps;
+
+       g_object_get (G_OBJECT (pad), "caps", &caps, NULL);
+
+       eDebug("gstTextpadHasCAPS:: signal::caps = %s", gst_caps_to_string(caps));
+
+       if (caps)
+       {
+               subtitleStream subs;
+
+//             eDebug("gstGhostpadHasCAPS_synced %p %d", pad, m_subtitleStreams.size());
+
+               if (!m_subtitleStreams.empty())
+                       subs = m_subtitleStreams[m_currentSubtitleStream];
+               else {
+                       subs.type = stUnknown;
+                       subs.pad = pad;
+               }
+
+               if ( subs.type == stUnknown )
+               {
+                       GstTagList *tags;
+//                     eDebug("gstGhostpadHasCAPS::m_subtitleStreams[%i].type == stUnknown...", m_currentSubtitleStream);
+
+                       gchar *g_lang;
+                       g_signal_emit_by_name (m_gst_playbin, "get-text-tags", m_currentSubtitleStream, &tags);
+
+                       g_lang = g_strdup_printf ("und");
+                       if ( tags && gst_is_tag_list(tags) )
+                               gst_tag_list_get_string(tags, GST_TAG_LANGUAGE_CODE, &g_lang);
+
+                       subs.language_code = std::string(g_lang);
+                       subs.type = getSubtitleType(pad);
+
+                       if (!m_subtitleStreams.empty())
+                               m_subtitleStreams[m_currentSubtitleStream] = subs;
+                       else
+                               m_subtitleStreams.push_back(subs);
+
+                       g_free (g_lang);
+               }
+
+//             eDebug("gstGhostpadHasCAPS:: m_gst_prev_subtitle_caps=%s equal=%i",gst_caps_to_string(m_gst_prev_subtitle_caps),gst_caps_is_equal(m_gst_prev_subtitle_caps, caps));
+
+               gst_caps_unref (caps);
+       }
+
+       gst_object_unref (pad);
 }
 
 void eServiceMP3::pullSubtitle()
 {
        GstElement *sink;
        g_object_get (G_OBJECT (m_gst_playbin), "text-sink", &sink, NULL);
+       
        if (sink)
        {
                while (m_subs_to_pull && m_subtitle_pages.size() < 2)
@@ -1523,17 +1648,31 @@ void eServiceMP3::pullSubtitle()
                                gint64 buf_pos = GST_BUFFER_TIMESTAMP(buffer);
                                gint64 duration_ns = GST_BUFFER_DURATION(buffer);
                                size_t len = GST_BUFFER_SIZE(buffer);
-                               unsigned char line[len+1];
-                               memcpy(line, GST_BUFFER_DATA(buffer), len);
-                               line[len] = 0;
-                               eDebug("got new subtitle @ buf_pos = %lld ns (in pts=%lld): '%s' ", buf_pos, buf_pos/11111, line);
-                               ePangoSubtitlePage page;
-                               gRGB rgbcol(0xD0,0xD0,0xD0);
-                               page.m_elements.push_back(ePangoSubtitlePageElement(rgbcol, (const char*)line));
-                               page.show_pts = buf_pos / 11111L;
-                               page.m_timeout = duration_ns / 1000000;
-                               m_subtitle_pages.push_back(page);
-                               pushSubtitles();
+                               eDebug("pullSubtitle m_subtitleStreams[m_currentSubtitleStream].type=%i",m_subtitleStreams[m_currentSubtitleStream].type);
+                               
+                               if ( m_subtitleStreams[m_currentSubtitleStream].type )
+                               {
+                                       if ( m_subtitleStreams[m_currentSubtitleStream].type < stVOB )
+                                       {
+                                               unsigned char line[len+1];
+                                               SubtitlePage page;
+                                               memcpy(line, GST_BUFFER_DATA(buffer), len);
+                                               line[len] = 0;
+                                               eDebug("got new text subtitle @ buf_pos = %lld ns (in pts=%lld): '%s' ", buf_pos, buf_pos/11111, line);
+                                               gRGB rgbcol(0xD0,0xD0,0xD0);
+                                               page.type = SubtitlePage::Pango;
+                                               page.pango_page.m_elements.push_back(ePangoSubtitlePageElement(rgbcol, (const char*)line));
+                                               page.pango_page.m_show_pts = buf_pos / 11111L;
+                                               page.pango_page.m_timeout = duration_ns / 1000000;
+                                               m_subtitle_pages.push_back(page);
+                                               if (m_subtitle_pages.size()==1)
+                                                       pushSubtitles();
+                                       }
+                                       else
+                                       {
+                                               eDebug("unsupported subpicture... ignoring");
+                                       }
+                               }
                                gst_buffer_unref(buffer);
                        }
                }
@@ -1545,45 +1684,56 @@ void eServiceMP3::pullSubtitle()
 
 void eServiceMP3::pushSubtitles()
 {
-       ePangoSubtitlePage page;
-       pts_t running_pts;
        while ( !m_subtitle_pages.empty() )
        {
+               SubtitlePage &frontpage = m_subtitle_pages.front();
+               pts_t running_pts;
+               gint64 diff_ms = 0;
+               gint64 show_pts = 0;
+
                getPlayPosition(running_pts);
-               page = m_subtitle_pages.front();
-               gint64 diff_ms = ( page.show_pts - running_pts ) / 90;
-               eDebug("eServiceMP3::pushSubtitles show_pts = %lld  running_pts = %lld  diff = %lld", page.show_pts, running_pts, diff_ms);
-               if (diff_ms < -100)
-               {
-                       GstFormat fmt = GST_FORMAT_TIME;
-                       gint64 now;
-                       if (gst_element_query_position(m_gst_playbin, &fmt, &now) != -1)
-                       {
-                               now /= 11111;
-                               diff_ms = abs((now - running_pts) / 90);
-                               eDebug("diff < -100ms check decoder/pipeline diff: decoder: %lld, pipeline: %lld, diff: %lld", running_pts, now, diff_ms);
-                               if (diff_ms > 100000)
-                               {
-                                       eDebug("high decoder/pipeline difference.. assume decoder has now started yet.. check again in 1sec");
-                                       m_subtitle_sync_timer->start(1000, true);
-                                       break;
-                               }
+
+               if (m_decoder_time_valid_state < 4) {
+                       ++m_decoder_time_valid_state;
+                       if (m_prev_decoder_time == running_pts)
+                               m_decoder_time_valid_state = 0;
+                       if (m_decoder_time_valid_state < 4) {
+//                             if (m_decoder_time_valid_state)
+//                                     eDebug("%d: decoder time not valid! prev %lld, now %lld\n", m_decoder_time_valid_state, m_prev_decoder_time/90, running_pts/90);
+//                             else
+//                                     eDebug("%d: decoder time not valid! now %lld\n", m_decoder_time_valid_state, running_pts/90);
+                               m_subtitle_sync_timer->start(25, true);
+                               m_prev_decoder_time = running_pts;
+                               break;
                        }
-                       else
-                               eDebug("query position for decoder/pipeline check failed!");
-                       eDebug("subtitle to late... drop");
+               }
+
+               if (frontpage.type == SubtitlePage::Pango)
+                       show_pts = frontpage.pango_page.m_show_pts;
+
+               diff_ms = ( show_pts - running_pts ) / 90;
+               eDebug("check subtitle: decoder: %lld, show_pts: %lld, diff: %lld ms", running_pts/90, show_pts/90, diff_ms);
+
+               if ( diff_ms < -100 )
+               {
+                       eDebug("subtitle too late... drop");
                        m_subtitle_pages.pop_front();
                }
                else if ( diff_ms > 20 )
                {
-//                     eDebug("start recheck timer");
-                       m_subtitle_sync_timer->start(diff_ms > 1000 ? 1000 : diff_ms, true);
+                       eDebug("start timer");
+                       m_subtitle_sync_timer->start(diff_ms, true);
                        break;
                }
                else // immediate show
                {
-                       if (m_subtitle_widget)
-                               m_subtitle_widget->setPage(page);
+                       if ( m_subtitle_widget )
+                       {
+                               eDebug("show!\n");
+                               if ( frontpage.type == SubtitlePage::Pango)
+                                       m_subtitle_widget->setPage(frontpage.pango_page);
+                               m_subtitle_widget->show();
+                       }
                        m_subtitle_pages.pop_front();
                }
        }
@@ -1591,12 +1741,20 @@ void eServiceMP3::pushSubtitles()
                pullSubtitle();
 }
 
+
 RESULT eServiceMP3::enableSubtitles(eWidget *parent, ePyObject tuple)
 {
+       eDebug ("eServiceMP3::enableSubtitles m_currentSubtitleStream=%i this=%p",m_currentSubtitleStream, this);
        ePyObject entry;
        int tuplesize = PyTuple_Size(tuple);
        int pid, type;
        gint text_pid = 0;
+       eSingleLocker l(m_subs_to_pull_lock);
+
+//     GstPad *pad = 0;
+//     g_signal_emit_by_name (m_gst_playbin, "get-text-pad", m_currentSubtitleStream, &pad);
+//     gst_element_get_static_pad(m_gst_subtitlebin, "sink");
+//     gulong subprobe_handler_id = gst_pad_add_buffer_probe (pad, G_CALLBACK (gstCBsubtitleDrop), NULL);
 
        if (!PyTuple_Check(tuple))
                goto error_out;
@@ -1613,10 +1771,11 @@ RESULT eServiceMP3::enableSubtitles(eWidget *parent, ePyObject tuple)
 
        if (m_currentSubtitleStream != pid)
        {
-               eSingleLocker l(m_subs_to_pull_lock);
                g_object_set (G_OBJECT (m_gst_playbin), "current-text", pid, NULL);
+               eDebug ("eServiceMP3::enableSubtitles g_object_set current-text = %i", pid);
                m_currentSubtitleStream = pid;
                m_subs_to_pull = 0;
+               m_prev_decoder_time = -1;
                m_subtitle_pages.clear();
        }
 
@@ -1627,6 +1786,9 @@ RESULT eServiceMP3::enableSubtitles(eWidget *parent, ePyObject tuple)
        g_object_get (G_OBJECT (m_gst_playbin), "current-text", &text_pid, NULL);
 
        eDebug ("eServiceMP3::switched to subtitle stream %i", text_pid);
+//     gst_pad_remove_buffer_probe (pad, subprobe_handler_id);
+
+       m_event((iPlayableService*)this, evUpdatedInfo);
 
        return 0;
 
@@ -1653,26 +1815,35 @@ PyObject *eServiceMP3::getCachedSubtitle()
 
 PyObject *eServiceMP3::getSubtitleList()
 {
-       eDebug("eServiceMP3::getSubtitleList");
-
+//     eDebug("eServiceMP3::getSubtitleList");
        ePyObject l = PyList_New(0);
-       int stream_count[sizeof(subtype_t)];
-       for ( unsigned int i = 0; i < sizeof(subtype_t); i++ )
-               stream_count[i] = 0;
-
+       int stream_idx = 0;
+       
        for (std::vector<subtitleStream>::iterator IterSubtitleStream(m_subtitleStreams.begin()); IterSubtitleStream != m_subtitleStreams.end(); ++IterSubtitleStream)
        {
                subtype_t type = IterSubtitleStream->type;
-               ePyObject tuple = PyTuple_New(5);
-               PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong(2));
-               PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong(stream_count[type]));
-               PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong(int(type)));
-               PyTuple_SET_ITEM(tuple, 3, PyInt_FromLong(0));
-               PyTuple_SET_ITEM(tuple, 4, PyString_FromString((IterSubtitleStream->language_code).c_str()));
-               PyList_Append(l, tuple);
-               Py_DECREF(tuple);
-               stream_count[type]++;
+               switch(type)
+               {
+               case stUnknown:
+               case stVOB:
+               case stPGS:
+                       break;
+               default:
+               {
+                       ePyObject tuple = PyTuple_New(5);
+//                     eDebug("eServiceMP3::getSubtitleList idx=%i type=%i, code=%s", stream_idx, int(type), (IterSubtitleStream->language_code).c_str());
+                       PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong(2));
+                       PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong(stream_idx));
+                       PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong(int(type)));
+                       PyTuple_SET_ITEM(tuple, 3, PyInt_FromLong(0));
+                       PyTuple_SET_ITEM(tuple, 4, PyString_FromString((IterSubtitleStream->language_code).c_str()));
+                       PyList_Append(l, tuple);
+                       Py_DECREF(tuple);
+               }
+               }
+               stream_idx++;
        }
+       eDebug("eServiceMP3::getSubtitleList finished");
        return l;
 }
 
@@ -1791,6 +1962,3 @@ void eServiceMP3::setPCMDelay(int delay)
        }
 }
 
-#else
-#warning gstreamer not available, not building media player
-#endif
index 01f7cf7..f3cc6dd 100644 (file)
@@ -1,7 +1,6 @@
 #ifndef __servicemp3_h
 #define __servicemp3_h
 
-#ifdef HAVE_GSTREAMER
 #include <lib/base/message.h>
 #include <lib/service/iservice.h>
 #include <lib/dvb/pmt.h>
@@ -47,7 +46,7 @@ public:
 typedef struct _GstElement GstElement;
 
 typedef enum { atUnknown, atMPEG, atMP3, atAC3, atDTS, atAAC, atPCM, atOGG, atFLAC } audiotype_t;
-typedef enum { stPlainText, stSSA, stSRT } subtype_t;
+typedef enum { stUnknown, stPlainText, stSSA, stASS, stSRT, stVOB, stPGS } subtype_t;
 typedef enum { ctNone, ctMPEGTS, ctMPEGPS, ctMKV, ctAVI, ctMP4, ctVCD, ctCDA } containertype_t;
 
 class eServiceMP3: public iPlayableService, public iPauseableService,
@@ -168,12 +167,18 @@ public:
                int bufferPercent;
                int avgInRate;
                int avgOutRate;
-               long long bufferingLeft;
+               int64_t bufferingLeft;
                bufferInfo()
                        :bufferPercent(0), avgInRate(0), avgOutRate(0), bufferingLeft(-1)
                {
                }
        };
+       struct errorInfo
+       {
+               std::string error_message;
+               std::string missing_codec;
+       };
+
 private:
        static int pcm_delay;
        static int ac3_delay;
@@ -190,35 +195,68 @@ private:
        eServiceReference m_ref;
        int m_buffer_size;
        bufferInfo m_bufferInfo;
+       errorInfo m_errorInfo;
        eServiceMP3(eServiceReference ref);
        Signal2<void,iPlayableService*,int> m_event;
        enum
        {
                stIdle, stRunning, stStopped,
+        };
+        int m_state;
+        GstElement *m_gst_playbin;
+        GstTagList *m_stream_tags;
+
+        struct Message
+        {
+                Message()
+                        :type(-1)
+                {}
+                Message(int type)
+                        :type(type)
+                {}
+                Message(int type, GstPad *pad)
+                        :type(type)
+                {
+                        d.pad=pad;
+                }
+
+                int type;
+                union {
+                        GstPad *pad; // for msg type 3
+                } d;
+        };
+
+        eFixedMessagePump<Message> m_pump;
+
+        audiotype_t gstCheckAudioPad(GstStructure* structure);
+        void gstBusCall(GstBus *bus, GstMessage *msg);
+        static GstBusSyncReply gstBusSyncHandler(GstBus *bus, GstMessage *message, gpointer user_data);
+       static void gstTextpadHasCAPS(GstPad *pad, GParamSpec * unused, gpointer user_data);
+       void gstTextpadHasCAPS_synced(GstPad *pad);
+        static void gstCBsubtitleAvail(GstElement *element, gpointer user_data);
+        GstPad* gstCreateSubtitleSink(eServiceMP3* _this, subtype_t type);
+       void gstPoll(const Message&);
+        static void gstHTTPSourceSetAgent(GObject *source, GParamSpec *unused, gpointer user_data);
+
+       struct SubtitlePage
+       {
+               enum { Unknown, Pango, Vob } type;
+               ePangoSubtitlePage pango_page;
+               eVobSubtitlePage vob_page;
        };
-       int m_state;
-       GstElement *m_gst_playbin;
-       GstTagList *m_stream_tags;
-       eFixedMessagePump<int> m_pump;
-       std::string m_error_message;
-
-       audiotype_t gstCheckAudioPad(GstStructure* structure);
-       void gstBusCall(GstBus *bus, GstMessage *msg);
-       static GstBusSyncReply gstBusSyncHandler(GstBus *bus, GstMessage *message, gpointer user_data);
-       static void gstCBsubtitleAvail(GstElement *element, gpointer user_data);
-       GstPad* gstCreateSubtitleSink(eServiceMP3* _this, subtype_t type);
-       void gstPoll(const int&);
-       static void gstHTTPSourceSetAgent(GObject *source, GParamSpec *unused, gpointer user_data);
-
-       std::list<ePangoSubtitlePage> m_subtitle_pages;
-       ePtr<eTimer> m_subtitle_sync_timer;
-       
-       ePtr<eTimer> m_streamingsrc_timeout;
-       void pushSubtitles();
-       void pullSubtitle();
-       void sourceTimeout();
-       int m_subs_to_pull;
-       sourceStream m_sourceinfo;
+
+        std::list<SubtitlePage> m_subtitle_pages;
+        ePtr<eTimer> m_subtitle_sync_timer;
+        
+        ePtr<eTimer> m_streamingsrc_timeout;
+        pts_t m_prev_decoder_time;
+        int m_decoder_time_valid_state;
+
+        void pushSubtitles();
+        void pullSubtitle();
+        void sourceTimeout();
+        int m_subs_to_pull;
+        sourceStream m_sourceinfo;
        eSingleLock m_subs_to_pull_lock;
        gulong m_subs_to_pull_handler_id;
 
@@ -228,6 +266,5 @@ private:
        std::string m_useragent;
        RESULT trickSeek(gdouble ratio);
 };
-#endif
 
 #endif
diff --git a/m4/.gitignore b/m4/.gitignore
new file mode 100644 (file)
index 0000000..38066dd
--- /dev/null
@@ -0,0 +1,5 @@
+libtool.m4
+ltoptions.m4
+ltsugar.m4
+ltversion.m4
+lt~obsolete.m4
diff --git a/m4/ax_pkg_swig.m4 b/m4/ax_pkg_swig.m4
new file mode 100644 (file)
index 0000000..81226fb
--- /dev/null
@@ -0,0 +1,133 @@
+# ===========================================================================
+#        http://www.gnu.org/software/autoconf-archive/ax_pkg_swig.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PKG_SWIG([major.minor.micro], [action-if-found], [action-if-not-found])
+#
+# DESCRIPTION
+#
+#   This macro searches for a SWIG installation on your system. If found,
+#   then SWIG is AC_SUBST'd; if not found, then $SWIG is empty.  If SWIG is
+#   found, then SWIG_LIB is set to the SWIG library path, and AC_SUBST'd.
+#
+#   You can use the optional first argument to check if the version of the
+#   available SWIG is greater than or equal to the value of the argument. It
+#   should have the format: N[.N[.N]] (N is a number between 0 and 999. Only
+#   the first N is mandatory.) If the version argument is given (e.g.
+#   1.3.17), AX_PKG_SWIG checks that the swig package is this version number
+#   or higher.
+#
+#   As usual, action-if-found is executed if SWIG is found, otherwise
+#   action-if-not-found is executed.
+#
+#   In configure.in, use as:
+#
+#     AX_PKG_SWIG(1.3.17, [], [ AC_MSG_ERROR([SWIG is required to build..]) ])
+#     AX_SWIG_ENABLE_CXX
+#     AX_SWIG_MULTI_MODULE_SUPPORT
+#     AX_SWIG_PYTHON
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Sebastian Huber <sebastian-huber@web.de>
+#   Copyright (c) 2008 Alan W. Irwin <irwin@beluga.phys.uvic.ca>
+#   Copyright (c) 2008 Rafael Laboissiere <rafael@laboissiere.net>
+#   Copyright (c) 2008 Andrew Collier <colliera@ukzn.ac.za>
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation; either version 2 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 7
+
+AC_DEFUN([AX_PKG_SWIG],[
+        AC_PATH_PROG([SWIG],[swig])
+        if test -z "$SWIG" ; then
+                m4_ifval([$3],[$3],[:])
+        elif test -n "$1" ; then
+                AC_MSG_CHECKING([SWIG version])
+                [swig_version=`$SWIG -version 2>&1 | grep 'SWIG Version' | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`]
+                AC_MSG_RESULT([$swig_version])
+                if test -n "$swig_version" ; then
+                        # Calculate the required version number components
+                        [required=$1]
+                        [required_major=`echo $required | sed 's/[^0-9].*//'`]
+                        if test -z "$required_major" ; then
+                                [required_major=0]
+                        fi
+                        [required=`echo $required | sed 's/[0-9]*[^0-9]//'`]
+                        [required_minor=`echo $required | sed 's/[^0-9].*//'`]
+                        if test -z "$required_minor" ; then
+                                [required_minor=0]
+                        fi
+                        [required=`echo $required | sed 's/[0-9]*[^0-9]//'`]
+                        [required_patch=`echo $required | sed 's/[^0-9].*//'`]
+                        if test -z "$required_patch" ; then
+                                [required_patch=0]
+                        fi
+                        # Calculate the available version number components
+                        [available=$swig_version]
+                        [available_major=`echo $available | sed 's/[^0-9].*//'`]
+                        if test -z "$available_major" ; then
+                                [available_major=0]
+                        fi
+                        [available=`echo $available | sed 's/[0-9]*[^0-9]//'`]
+                        [available_minor=`echo $available | sed 's/[^0-9].*//'`]
+                        if test -z "$available_minor" ; then
+                                [available_minor=0]
+                        fi
+                        [available=`echo $available | sed 's/[0-9]*[^0-9]//'`]
+                        [available_patch=`echo $available | sed 's/[^0-9].*//'`]
+                        if test -z "$available_patch" ; then
+                                [available_patch=0]
+                        fi
+                        # Convert the version tuple into a single number for easier comparison.
+                        # Using base 100 should be safe since SWIG internally uses BCD values
+                        # to encode its version number.
+                        required_swig_vernum=`expr $required_major \* 10000 \
+                            \+ $required_minor \* 100 \+ $required_patch`
+                        available_swig_vernum=`expr $available_major \* 10000 \
+                            \+ $available_minor \* 100 \+ $available_patch`
+
+                        if test $available_swig_vernum -lt $required_swig_vernum; then
+                                AC_MSG_WARN([SWIG version >= $1 is required.  You have $swig_version.])
+                                SWIG=''
+                                m4_ifval([$3],[$3],[])
+                        else
+                                AC_MSG_CHECKING([for SWIG library])
+                                SWIG_LIB=`$SWIG -swiglib`
+                                AC_MSG_RESULT([$SWIG_LIB])
+                                m4_ifval([$2],[$2],[])
+                        fi
+                else
+                        AC_MSG_WARN([cannot determine SWIG version])
+                        SWIG=''
+                        m4_ifval([$3],[$3],[])
+                fi
+        fi
+        AC_SUBST([SWIG_LIB])
+])
diff --git a/m4/ax_pthread.m4 b/m4/ax_pthread.m4
new file mode 100644 (file)
index 0000000..2152a80
--- /dev/null
@@ -0,0 +1,283 @@
+# ===========================================================================
+#        http://www.gnu.org/software/autoconf-archive/ax_pthread.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+#
+# DESCRIPTION
+#
+#   This macro figures out how to build C programs using POSIX threads. It
+#   sets the PTHREAD_LIBS output variable to the threads library and linker
+#   flags, and the PTHREAD_CFLAGS output variable to any special C compiler
+#   flags that are needed. (The user can also force certain compiler
+#   flags/libs to be tested by setting these environment variables.)
+#
+#   Also sets PTHREAD_CC to any special C compiler that is needed for
+#   multi-threaded programs (defaults to the value of CC otherwise). (This
+#   is necessary on AIX to use the special cc_r compiler alias.)
+#
+#   NOTE: You are assumed to not only compile your program with these flags,
+#   but also link it with them as well. e.g. you should link with
+#   $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
+#
+#   If you are only building threads programs, you may wish to use these
+#   variables in your default LIBS, CFLAGS, and CC:
+#
+#     LIBS="$PTHREAD_LIBS $LIBS"
+#     CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+#     CC="$PTHREAD_CC"
+#
+#   In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
+#   has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
+#   (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
+#
+#   ACTION-IF-FOUND is a list of shell commands to run if a threads library
+#   is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
+#   is not found. If ACTION-IF-FOUND is not specified, the default action
+#   will define HAVE_PTHREAD.
+#
+#   Please let the authors know if this macro fails on any platform, or if
+#   you have any other suggestions or comments. This macro was based on work
+#   by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
+#   from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
+#   Alejandro Forero Cuervo to the autoconf macro repository. We are also
+#   grateful for the helpful feedback of numerous users.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
+#
+#   This program is free software: you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation, either version 3 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 11
+
+AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
+AC_DEFUN([AX_PTHREAD], [
+AC_REQUIRE([AC_CANONICAL_HOST])
+AC_LANG_SAVE
+AC_LANG_C
+ax_pthread_ok=no
+
+# We used to check for pthread.h first, but this fails if pthread.h
+# requires special compiler flags (e.g. on True64 or Sequent).
+# It gets checked for in the link test anyway.
+
+# First of all, check if the user has set any of the PTHREAD_LIBS,
+# etcetera environment variables, and if threads linking works using
+# them:
+if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
+        AC_TRY_LINK_FUNC(pthread_join, ax_pthread_ok=yes)
+        AC_MSG_RESULT($ax_pthread_ok)
+        if test x"$ax_pthread_ok" = xno; then
+                PTHREAD_LIBS=""
+                PTHREAD_CFLAGS=""
+        fi
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+fi
+
+# We must check for the threads library under a number of different
+# names; the ordering is very important because some systems
+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+# libraries is broken (non-POSIX).
+
+# Create a list of thread flags to try.  Items starting with a "-" are
+# C compiler flags, and other items are library names, except for "none"
+# which indicates that we try without any flags at all, and "pthread-config"
+# which is a program returning the flags for the Pth emulation library.
+
+ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+
+# The ordering *is* (sometimes) important.  Some notes on the
+# individual items follow:
+
+# pthreads: AIX (must check this before -lpthread)
+# none: in case threads are in libc; should be tried before -Kthread and
+#       other compiler flags to prevent continual compiler warnings
+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
+# -pthreads: Solaris/gcc
+# -mthreads: Mingw32/gcc, Lynx/gcc
+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+#      doesn't hurt to check since this sometimes defines pthreads too;
+#      also defines -D_REENTRANT)
+#      ... -mt is also the pthreads flag for HP/aCC
+# pthread: Linux, etcetera
+# --thread-safe: KAI C++
+# pthread-config: use pthread-config program (for GNU Pth library)
+
+case "${host_cpu}-${host_os}" in
+        *solaris*)
+
+        # On Solaris (at least, for some versions), libc contains stubbed
+        # (non-functional) versions of the pthreads routines, so link-based
+        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/
+        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
+        # a function called by this macro, so we could check for that, but
+        # who knows whether they'll stub that too in a future libc.)  So,
+        # we'll just look for -pthreads and -lpthread first:
+
+        ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
+        ;;
+
+       *-darwin*)
+       ax_pthread_flags="-pthread $ax_pthread_flags"
+       ;;
+esac
+
+if test x"$ax_pthread_ok" = xno; then
+for flag in $ax_pthread_flags; do
+
+        case $flag in
+                none)
+                AC_MSG_CHECKING([whether pthreads work without any flags])
+                ;;
+
+                -*)
+                AC_MSG_CHECKING([whether pthreads work with $flag])
+                PTHREAD_CFLAGS="$flag"
+                ;;
+
+               pthread-config)
+               AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no)
+               if test x"$ax_pthread_config" = xno; then continue; fi
+               PTHREAD_CFLAGS="`pthread-config --cflags`"
+               PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+               ;;
+
+                *)
+                AC_MSG_CHECKING([for the pthreads library -l$flag])
+                PTHREAD_LIBS="-l$flag"
+                ;;
+        esac
+
+        save_LIBS="$LIBS"
+        save_CFLAGS="$CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+        # Check for various functions.  We must include pthread.h,
+        # since some functions may be macros.  (On the Sequent, we
+        # need a special flag -Kthread to make this header compile.)
+        # We check for pthread_join because it is in -lpthread on IRIX
+        # while pthread_create is in libc.  We check for pthread_attr_init
+        # due to DEC craziness with -lpthreads.  We check for
+        # pthread_cleanup_push because it is one of the few pthread
+        # functions on Solaris that doesn't have a non-functional libc stub.
+        # We try pthread_create on general principles.
+        AC_TRY_LINK([#include <pthread.h>
+                    static void routine(void* a) {a=0;}
+                    static void* start_routine(void* a) {return a;}],
+                    [pthread_t th; pthread_attr_t attr;
+                     pthread_create(&th,0,start_routine,0);
+                     pthread_join(th, 0);
+                     pthread_attr_init(&attr);
+                     pthread_cleanup_push(routine, 0);
+                     pthread_cleanup_pop(0); ],
+                    [ax_pthread_ok=yes])
+
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+
+        AC_MSG_RESULT($ax_pthread_ok)
+        if test "x$ax_pthread_ok" = xyes; then
+                break;
+        fi
+
+        PTHREAD_LIBS=""
+        PTHREAD_CFLAGS=""
+done
+fi
+
+# Various other checks:
+if test "x$ax_pthread_ok" = xyes; then
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+       AC_MSG_CHECKING([for joinable pthread attribute])
+       attr_name=unknown
+       for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+           AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
+                        [attr_name=$attr; break])
+       done
+        AC_MSG_RESULT($attr_name)
+        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
+            AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
+                               [Define to necessary symbol if this constant
+                                uses a non-standard name on your system.])
+        fi
+
+        AC_MSG_CHECKING([if more special flags are required for pthreads])
+        flag=no
+        case "${host_cpu}-${host_os}" in
+            *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
+            *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
+        esac
+        AC_MSG_RESULT(${flag})
+        if test "x$flag" != xno; then
+            PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
+        fi
+
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+
+        # More AIX lossage: must compile with xlc_r or cc_r
+       if test x"$GCC" != xyes; then
+          AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
+        else
+          PTHREAD_CC=$CC
+       fi
+else
+        PTHREAD_CC="$CC"
+fi
+
+AC_SUBST(PTHREAD_LIBS)
+AC_SUBST(PTHREAD_CFLAGS)
+AC_SUBST(PTHREAD_CC)
+
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test x"$ax_pthread_ok" = xyes; then
+        ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
+        :
+else
+        ax_pthread_ok=no
+        $2
+fi
+AC_LANG_RESTORE
+])dnl AX_PTHREAD
diff --git a/m4/ax_python_devel.m4 b/m4/ax_python_devel.m4
new file mode 100644 (file)
index 0000000..a62b860
--- /dev/null
@@ -0,0 +1,325 @@
+# ===========================================================================
+#      http://www.gnu.org/software/autoconf-archive/ax_python_devel.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PYTHON_DEVEL([version])
+#
+# DESCRIPTION
+#
+#   Note: Defines as a precious variable "PYTHON_VERSION". Don't override it
+#   in your configure.ac.
+#
+#   This macro checks for Python and tries to get the include path to
+#   'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS)
+#   output variables. It also exports $(PYTHON_EXTRA_LIBS) and
+#   $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code.
+#
+#   You can search for some particular version of Python by passing a
+#   parameter to this macro, for example ">= '2.3.1'", or "== '2.4'". Please
+#   note that you *have* to pass also an operator along with the version to
+#   match, and pay special attention to the single quotes surrounding the
+#   version number. Don't use "PYTHON_VERSION" for this: that environment
+#   variable is declared as precious and thus reserved for the end-user.
+#
+#   This macro should work for all versions of Python >= 2.1.0. As an end
+#   user, you can disable the check for the python version by setting the
+#   PYTHON_NOVERSIONCHECK environment variable to something else than the
+#   empty string.
+#
+#   If you need to use this macro for an older Python version, please
+#   contact the authors. We're always open for feedback.
+#
+# LICENSE
+#
+#   Copyright (c) 2009 Sebastian Huber <sebastian-huber@web.de>
+#   Copyright (c) 2009 Alan W. Irwin <irwin@beluga.phys.uvic.ca>
+#   Copyright (c) 2009 Rafael Laboissiere <rafael@laboissiere.net>
+#   Copyright (c) 2009 Andrew Collier <colliera@ukzn.ac.za>
+#   Copyright (c) 2009 Matteo Settenvini <matteo@member.fsf.org>
+#   Copyright (c) 2009 Horst Knorr <hk_classes@knoda.org>
+#
+#   This program is free software: you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation, either version 3 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 8
+
+AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL])
+AC_DEFUN([AX_PYTHON_DEVEL],[
+       #
+       # Allow the use of a (user set) custom python version
+       #
+       AC_ARG_VAR([PYTHON_VERSION],[The installed Python
+               version to use, for example '2.3'. This string
+               will be appended to the Python interpreter
+               canonical name.])
+
+       AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]])
+       if test -z "$PYTHON"; then
+          AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path])
+          PYTHON_VERSION=""
+       fi
+
+       #
+       # Check for a version of Python >= 2.1.0
+       #
+       AC_MSG_CHECKING([for a version of Python >= '2.1.0'])
+       ac_supports_python_ver=`$PYTHON -c "import sys; \
+               ver = sys.version.split ()[[0]]; \
+               print (ver >= '2.1.0')"`
+       if test "$ac_supports_python_ver" != "True"; then
+               if test -z "$PYTHON_NOVERSIONCHECK"; then
+                       AC_MSG_RESULT([no])
+                       AC_MSG_FAILURE([
+This version of the AC@&t@_PYTHON_DEVEL macro
+doesn't work properly with versions of Python before
+2.1.0. You may need to re-run configure, setting the
+variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG,
+PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
+Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
+to something else than an empty string.
+])
+               else
+                       AC_MSG_RESULT([skip at user request])
+               fi
+       else
+               AC_MSG_RESULT([yes])
+       fi
+
+       #
+       # if the macro parameter ``version'' is set, honour it
+       #
+       if test -n "$1"; then
+               AC_MSG_CHECKING([for a version of Python $1])
+               ac_supports_python_ver=`$PYTHON -c "import sys; \
+                       ver = sys.version.split ()[[0]]; \
+                       print (ver $1)"`
+               if test "$ac_supports_python_ver" = "True"; then
+                  AC_MSG_RESULT([yes])
+               else
+                       AC_MSG_RESULT([no])
+                       AC_MSG_ERROR([this package requires Python $1.
+If you have it installed, but it isn't the default Python
+interpreter in your system path, please pass the PYTHON_VERSION
+variable to configure. See ``configure --help'' for reference.
+])
+                       PYTHON_VERSION=""
+               fi
+       fi
+
+       #
+       # Check if you have distutils, else fail
+       #
+       AC_MSG_CHECKING([for the distutils Python package])
+       ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
+       if test -z "$ac_distutils_result"; then
+               AC_MSG_RESULT([yes])
+       else
+               AC_MSG_RESULT([no])
+               AC_MSG_ERROR([cannot import Python module "distutils".
+Please check your Python installation. The error was:
+$ac_distutils_result])
+               PYTHON_VERSION=""
+       fi
+
+       #
+       # Check for Python include path
+       #
+       AC_MSG_CHECKING([for Python include path])
+       if test -z "$PYTHON_CPPFLAGS"; then
+               python_path=`$PYTHON -c "import distutils.sysconfig; \
+                       print (distutils.sysconfig.get_python_inc ());"`
+               if test -n "${python_path}"; then
+                       python_path="-I$python_path"
+               fi
+               PYTHON_CPPFLAGS=$python_path
+       fi
+       AC_MSG_RESULT([$PYTHON_CPPFLAGS])
+       AC_SUBST([PYTHON_CPPFLAGS])
+
+       #
+       # Check for Python library path
+       #
+       AC_MSG_CHECKING([for Python library path])
+       if test -z "$PYTHON_LDFLAGS"; then
+               # (makes two attempts to ensure we've got a version number
+               # from the interpreter)
+               ac_python_version=`cat<<EOD | $PYTHON -
+
+# join all versioning strings, on some systems
+# major/minor numbers could be in different list elements
+from distutils.sysconfig import *
+ret = ''
+for e in get_config_vars ('VERSION'):
+       if (e != None):
+               ret += e
+print (ret)
+EOD`
+
+               if test -z "$ac_python_version"; then
+                       if test -n "$PYTHON_VERSION"; then
+                               ac_python_version=$PYTHON_VERSION
+                       else
+                               ac_python_version=`$PYTHON -c "import sys; \
+                                       print (sys.version[[:3]])"`
+                       fi
+               fi
+
+               # Make the versioning information available to the compiler
+               AC_DEFINE_UNQUOTED([HAVE_PYTHON], ["$ac_python_version"],
+                                   [If available, contains the Python version number currently in use.])
+
+               # First, the library directory:
+               ac_python_libdir=`cat<<EOD | $PYTHON -
+
+# There should be only one
+import distutils.sysconfig
+for e in distutils.sysconfig.get_config_vars ('LIBDIR'):
+       if e != None:
+               print (e)
+               break
+EOD`
+
+               # Before checking for libpythonX.Y, we need to know
+               # the extension the OS we're on uses for libraries
+               # (we take the first one, if there's more than one fix me!):
+               ac_python_soext=`$PYTHON -c \
+                 "import distutils.sysconfig; \
+                 print (distutils.sysconfig.get_config_vars('SO')[[0]])"`
+
+               # Now, for the library:
+               ac_python_soname=`$PYTHON -c \
+                 "import distutils.sysconfig; \
+                 print (distutils.sysconfig.get_config_vars('LDLIBRARY')[[0]])"`
+
+               # Strip away extension from the end to canonicalize its name:
+               ac_python_library=`echo "$ac_python_soname" | sed "s/${ac_python_soext}$//"`
+
+               # This small piece shamelessly adapted from PostgreSQL python macro;
+               # credits goes to momjian, I think. I'd like to put the right name
+               # in the credits, if someone can point me in the right direction... ?
+               #
+               if test -n "$ac_python_libdir" -a -n "$ac_python_library" \
+                       -a x"$ac_python_library" != x"$ac_python_soname"
+               then
+                       # use the official shared library
+                       ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"`
+                       PYTHON_LDFLAGS="-L$ac_python_libdir -l$ac_python_library"
+               else
+                       # old way: use libpython from python_configdir
+                       ac_python_libdir=`$PYTHON -c \
+                         "from distutils.sysconfig import get_python_lib as f; \
+                         import os; \
+                         print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"`
+                       PYTHON_LDFLAGS="-L$ac_python_libdir -lpython$ac_python_version"
+               fi
+
+               if test -z "PYTHON_LDFLAGS"; then
+                       AC_MSG_ERROR([
+  Cannot determine location of your Python DSO. Please check it was installed with
+  dynamic libraries enabled, or try setting PYTHON_LDFLAGS by hand.
+                       ])
+               fi
+       fi
+       AC_MSG_RESULT([$PYTHON_LDFLAGS])
+       AC_SUBST([PYTHON_LDFLAGS])
+
+       #
+       # Check for site packages
+       #
+       AC_MSG_CHECKING([for Python site-packages path])
+       if test -z "$PYTHON_SITE_PKG"; then
+               PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
+                       print (distutils.sysconfig.get_python_lib(0,0));"`
+       fi
+       AC_MSG_RESULT([$PYTHON_SITE_PKG])
+       AC_SUBST([PYTHON_SITE_PKG])
+
+       #
+       # libraries which must be linked in when embedding
+       #
+       AC_MSG_CHECKING(python extra libraries)
+       if test -z "$PYTHON_EXTRA_LIBS"; then
+          PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
+                conf = distutils.sysconfig.get_config_var; \
+                print (conf('LOCALMODLIBS') + ' ' + conf('LIBS'))"`
+       fi
+       AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
+       AC_SUBST(PYTHON_EXTRA_LIBS)
+
+       #
+       # linking flags needed when embedding
+       #
+       AC_MSG_CHECKING(python extra linking flags)
+       if test -z "$PYTHON_EXTRA_LDFLAGS"; then
+               PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
+                       conf = distutils.sysconfig.get_config_var; \
+                       print (conf('LINKFORSHARED'))"`
+       fi
+       AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
+       AC_SUBST(PYTHON_EXTRA_LDFLAGS)
+
+       #
+       # final check to see if everything compiles alright
+       #
+       AC_MSG_CHECKING([consistency of all components of python development environment])
+       # save current global flags
+       ac_save_LIBS="$LIBS"
+       ac_save_CPPFLAGS="$CPPFLAGS"
+       LIBS="$ac_save_LIBS $PYTHON_LDFLAGS $PYTHON_EXTRA_LDFLAGS $PYTHON_EXTRA_LIBS"
+       CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
+       AC_LANG_PUSH([C])
+       AC_LINK_IFELSE([
+               AC_LANG_PROGRAM([[#include <Python.h>]],
+                               [[Py_Initialize();]])
+               ],[pythonexists=yes],[pythonexists=no])
+       AC_LANG_POP([C])
+       # turn back to default flags
+       CPPFLAGS="$ac_save_CPPFLAGS"
+       LIBS="$ac_save_LIBS"
+
+       AC_MSG_RESULT([$pythonexists])
+
+        if test ! "x$pythonexists" = "xyes"; then
+          AC_MSG_FAILURE([
+  Could not link test program to Python. Maybe the main Python library has been
+  installed in some non-standard library path. If so, pass it to configure,
+  via the LDFLAGS environment variable.
+  Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib"
+  ============================================================================
+   ERROR!
+   You probably have to install the development version of the Python package
+   for your distribution.  The exact name of this package varies among them.
+  ============================================================================
+          ])
+         PYTHON_VERSION=""
+       fi
+
+       #
+       # all done!
+       #
+])
diff --git a/m4/ax_swig_enable_cxx.m4 b/m4/ax_swig_enable_cxx.m4
new file mode 100644 (file)
index 0000000..348c15d
--- /dev/null
@@ -0,0 +1,53 @@
+# ===========================================================================
+#    http://www.gnu.org/software/autoconf-archive/ax_swig_enable_cxx.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_SWIG_ENABLE_CXX
+#
+# DESCRIPTION
+#
+#   Enable SWIG C++ support. This affects all invocations of $(SWIG).
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Sebastian Huber <sebastian-huber@web.de>
+#   Copyright (c) 2008 Alan W. Irwin <irwin@beluga.phys.uvic.ca>
+#   Copyright (c) 2008 Rafael Laboissiere <rafael@laboissiere.net>
+#   Copyright (c) 2008 Andrew Collier <colliera@ukzn.ac.za>
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation; either version 2 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 6
+
+AU_ALIAS([SWIG_ENABLE_CXX], [AX_SWIG_ENABLE_CXX])
+AC_DEFUN([AX_SWIG_ENABLE_CXX],[
+        AC_REQUIRE([AX_PKG_SWIG])
+        AC_REQUIRE([AC_PROG_CXX])
+        SWIG="$SWIG -c++"
+])
diff --git a/m4/ax_swig_python.m4 b/m4/ax_swig_python.m4
new file mode 100644 (file)
index 0000000..8fd3df5
--- /dev/null
@@ -0,0 +1,64 @@
+# ===========================================================================
+#      http://www.gnu.org/software/autoconf-archive/ax_swig_python.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_SWIG_PYTHON([use-shadow-classes = {no, yes}])
+#
+# DESCRIPTION
+#
+#   Checks for Python and provides the $(AX_SWIG_PYTHON_CPPFLAGS), and
+#   $(AX_SWIG_PYTHON_OPT) output variables.
+#
+#   $(AX_SWIG_PYTHON_OPT) contains all necessary SWIG options to generate
+#   code for Python. Shadow classes are enabled unless the value of the
+#   optional first argument is exactly 'no'. If you need multi module
+#   support (provided by the AX_SWIG_MULTI_MODULE_SUPPORT macro) use
+#   $(AX_SWIG_PYTHON_LIBS) to link against the appropriate library. It
+#   contains the SWIG Python runtime library that is needed by the type
+#   check system for example.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Sebastian Huber <sebastian-huber@web.de>
+#   Copyright (c) 2008 Alan W. Irwin <irwin@beluga.phys.uvic.ca>
+#   Copyright (c) 2008 Rafael Laboissiere <rafael@laboissiere.net>
+#   Copyright (c) 2008 Andrew Collier <colliera@ukzn.ac.za>
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation; either version 2 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 7
+
+AU_ALIAS([SWIG_PYTHON], [AX_SWIG_PYTHON])
+AC_DEFUN([AX_SWIG_PYTHON],[
+        AC_REQUIRE([AX_PKG_SWIG])
+        AC_REQUIRE([AX_PYTHON_DEVEL])
+        test "x$1" != "xno" || swig_shadow=" -noproxy"
+        AC_SUBST([AX_SWIG_PYTHON_OPT],[-python$swig_shadow])
+        AC_SUBST([AX_SWIG_PYTHON_CPPFLAGS],[$PYTHON_CPPFLAGS])
+])
diff --git a/m4/tuxbox.m4 b/m4/tuxbox.m4
new file mode 100644 (file)
index 0000000..985f757
--- /dev/null
@@ -0,0 +1,36 @@
+AC_DEFUN([TUXBOX_APPS_DVB],[
+AC_ARG_WITH(dvbincludes,
+       [  --with-dvbincludes=PATH  path for dvb includes [[NONE]]],
+       [DVBINCLUDES="$withval"],[DVBINCLUDES=""])
+
+if test "$DVBINCLUDES"; then
+       CPPFLAGS="$CPPFLAGS -I$DVBINCLUDES"
+fi
+
+AC_CHECK_HEADERS(ost/dmx.h,[
+       DVB_API_VERSION=1
+       AC_MSG_NOTICE([found dvb version 1])
+])
+
+if test -z "$DVB_API_VERSION"; then
+AC_CHECK_HEADERS(linux/dvb/version.h,[
+       AC_LANG_PREPROC_REQUIRE()
+       AC_REQUIRE([AC_PROG_EGREP])
+       AC_LANG_CONFTEST([AC_LANG_SOURCE([[
+#include <linux/dvb/version.h>
+version DVB_API_VERSION
+       ]])])
+       DVB_API_VERSION=`(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | $EGREP "^version" | sed "s,version\ ,,"`
+       rm -f conftest*
+
+       AC_MSG_NOTICE([found dvb version $DVB_API_VERSION])
+])
+fi
+
+if test "$DVB_API_VERSION"; then
+       AC_DEFINE(HAVE_DVB,1,[Define to 1 if you have the dvb includes])
+       AC_DEFINE_UNQUOTED(HAVE_DVB_API_VERSION,$DVB_API_VERSION,[Define to the version of the dvb api])
+else
+       AC_MSG_ERROR([can't find dvb headers])
+fi
+])
index c143770..aa0b008 100644 (file)
@@ -1 +1,2 @@
-entries
+enigma2
+version.h
index 4f26387..a65b4ac 100644 (file)
@@ -1,43 +1,30 @@
-INCLUDES = \
-       -I$(top_srcdir)/include
+AM_CPPFLAGS = \
+       -I$(top_srcdir) \
+       -I$(top_srcdir)/include \
+       -include Python.h \
+       -include $(top_builddir)/enigma2_config.h
+
+AM_CXXFLAGS = \
+       $(LIBSDL_CFLAGS)
 
 bin_PROGRAMS = enigma2
 
 enigma2_SOURCES = \
-       enigma.cpp bsod.cpp
-
-CLEANFILES = version.h
-
-bsod.o: version.h
-
-enigma.o: version.h
-
-# when there is no ../CVS/Entries, don't worry.
-../CVS/Entries:
-
-../CVS/Root:
+       bsod.cpp \
+       bsod.h \
+       enigma.cpp \
+       xmlgenerator.cpp \
+       xmlgenerator.h \
+       version_info.cpp \
+       version_info.h \
+       version.h
 
-.PHONY: .svn/entries
-
-entries: .svn/entries
-       @if [ ! -f entries ]; then touch entries; fi
-       @if [ -f .svn/entries ] && ! diff -q entries .svn/entries 2>/dev/null; then     \
-               cp --no-preserve=mode .svn/entries entries;                             \
-       fi;
-
-version.h: entries
-       > version.h
-       @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;
+EXTRA_DIST = \
+       enigma-dvbtest.cpp \
+       enigma-gdi.cpp \
+       enigma-gui.cpp \
+       enigma-playlist.cpp \
+       enigma-scan.cpp
 
 enigma2_LDADD_WHOLE = \
        $(top_builddir)/lib/actions/libenigma_actions.a \
@@ -54,23 +41,41 @@ enigma2_LDADD_WHOLE = \
        $(top_builddir)/lib/service/libenigma_service.a
 
 enigma2_LDADD = \
-       @FREETYPE_LIBS@ \
-       @ID3TAG_LIBS@ \
-       @MAD_LIBS@ \
-       @PNG_LIBS@ \
-       @SDL_LIBS@ \
-       @SIGC_LIBS@ \
-       @DVBSI_LIBS@ \
-       @FRIBIDI_LIBS@ \
-       @GSTREAMER_LIBS@ \
-       @GSTREAMERPBUTILS_LIBS@ \
-       @JPEG_LIBS@ \
-       @LIBUNGIF_LIBS@ \
-       @XML2_LIBS@ \
-       @XMLCCWRAP_LIBS@ \
-       -ldl -lpthread -lcrypt -lresolv -lrt
+       @BASE_LIBS@ \
+       @LIBGIF_LIBS@ \
+       @LIBJPEG_LIBS@ \
+       @LIBSDL_LIBS@ \
+       @LIBXINE_LIBS@ \
+       @LIBXMLCCWRAP_LIBS@ \
+       @PTHREAD_LIBS@ \
+       @PYTHON_LDFLAGS@
+
+enigma2_LDFLAGS = -Wl,--export-dynamic
+
+if HAVE_GIT_DIR
+GIT_DIR = $(top_srcdir)/.git
+GIT = git --git-dir=$(GIT_DIR)
+
+if HAVE_FAKE_GIT_DIR
+ENIGMA2_COMMIT_DATE = `grep '^CommitDate:' $(GIT_DIR)/last_commit_info | cut -d' ' -f2`
+ENIGMA2_BRANCH = `cat $(GIT_DIR)/branch`
+else
+ENIGMA2_COMMIT_DATE = `$(GIT) log --no-color -n 1 --pretty=format:%cd --date=short`
+ENIGMA2_BRANCH = `$(GIT) branch --no-color 2>/dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
+ENIGMA2_REV = `$(GIT) describe --abbrev=7 --always --long --tags`
+endif
+endif
+
+BUILT_SOURCES = version-intermediate.h
+.INTERMEDIATE: version-intermediate.h
+.PHONY: version-intermediate.h
+version-intermediate.h:
+       $(AM_V_GEN)touch $@
+       -$(AM_V_at)[ -n "$(ENIGMA2_COMMIT_DATE)" ] && echo "#define ENIGMA2_COMMIT_DATE \"$(ENIGMA2_COMMIT_DATE)\"" >> $@
+       -$(AM_V_at)[ -n "$(ENIGMA2_BRANCH)" ] && echo "#define ENIGMA2_BRANCH \"$(ENIGMA2_BRANCH)\"" >> $@
+       -$(AM_V_at)[ -n "$(ENIGMA2_REV)" ] && echo "#define ENIGMA2_REV \"$(ENIGMA2_REV)\"" >> $@
+       $(AM_V_at)([ -f version.h ] && diff -q version.h $@ >/dev/null) || $(INSTALL_HEADER) $@ version.h
 
 enigma2$(EXEEXT): $(enigma2_OBJECTS) $(enigma2_DEPENDENCIES) $(enigma2_LDADD_WHOLE)
-#      @rm -f enigma2$(EXEEXT)
-       $(CXXLINK) $(enigma2_LDFLAGS) $(enigma2_OBJECTS) -Wl,--export-dynamic -Wl,--whole-archive $(enigma2_LDADD_WHOLE) -Wl,--no-whole-archive $(enigma2_LDADD) $(LIBS)
-#      g++ -o enigma2$(EXEEXT) $(enigma2_LDFLAGS) $(enigma2_OBJECTS) -Wl,--export-dynamic -Wl,--whole-archive $(enigma2_LDADD_WHOLE) -Wl,--no-whole-archive $(enigma2_LDADD) $(LIBS)
+       $(AM_V_CXXLD)$(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ $(enigma2_LDFLAGS) $(enigma2_OBJECTS) \
+               -Wl,--whole-archive $(enigma2_LDADD_WHOLE) -Wl,--no-whole-archive $(enigma2_LDADD) $(LIBS)
old mode 100755 (executable)
new mode 100644 (file)
index 68b5d57..a119432
@@ -1,47 +1,52 @@
-#include <string.h>
-#include <signal.h>
-#include <asm/ptrace.h>
-
+#include <csignal>
+#include <fstream>
+#include <sstream>
+#include <lib/base/eenv.h>
 #include <lib/base/eerror.h>
-#include <lib/base/smartptr.h>
 #include <lib/base/nconfig.h>
-#include <lib/gdi/grc.h>
-#include <lib/gdi/gfbdc.h>
-#ifdef WITH_SDL
-#include <lib/gdi/sdl.h>
+#include <lib/gdi/gmaindc.h>
+
+#if defined(__MIPSEL__)
+#include <asm/ptrace.h>
+#else
+#warning "no oops support!"
+#define NO_OOPS_SUPPORT
 #endif
 
-#include "version.h"
+#include "xmlgenerator.h"
+#include "version_info.h"
 
 /************************************************/
 
 #define CRASH_EMAILADDR "crashlog@dream-multimedia-tv.de"
-#define STDBUFFER_SIZE 512
+#define INFOFILE "/maintainer.info"
+
 #define RINGBUFFER_SIZE 16384
 static char ringbuffer[RINGBUFFER_SIZE];
-static int ringbuffer_head;
+static unsigned int ringbuffer_head;
 
-static void addToLogbuffer(const char *data, int len)
+static void addToLogbuffer(const char *data, unsigned int len)
 {
        while (len)
        {
-               int remaining = RINGBUFFER_SIZE - ringbuffer_head;
-       
+               unsigned int remaining = RINGBUFFER_SIZE - ringbuffer_head;
+
                if (remaining > len)
                        remaining = len;
-       
+
                memcpy(ringbuffer + ringbuffer_head, data, remaining);
                len -= remaining;
                data += remaining;
                ringbuffer_head += remaining;
-               if (ringbuffer_head >= RINGBUFFER_SIZE)
+               ASSERT(ringbuffer_head <= RINGBUFFER_SIZE);
+               if (ringbuffer_head == RINGBUFFER_SIZE)
                        ringbuffer_head = 0;
        }
 }
 
-static std::string getLogBuffer()
+static const std::string getLogBuffer()
 {
-       int begin = ringbuffer_head;
+       unsigned int begin = ringbuffer_head;
        while (ringbuffer[begin] == 0)
        {
                ++begin;
@@ -50,12 +55,11 @@ static std::string getLogBuffer()
                if (begin == ringbuffer_head)
                        return "";
        }
+
        if (begin < ringbuffer_head)
                return std::string(ringbuffer + begin, ringbuffer_head - begin);
        else
-       {
                return std::string(ringbuffer + begin, RINGBUFFER_SIZE - begin) + std::string(ringbuffer, ringbuffer_head);
-       }
 }
 
 static void addToLogbuffer(int level, const std::string &log)
@@ -63,122 +67,67 @@ static void addToLogbuffer(int level, const std::string &log)
        addToLogbuffer(log.c_str(), log.size());
 }
 
-static std::string getConfigFileValue(const char *entry)
+static const std::string getConfigString(const std::string &key, const std::string &defaultValue)
 {
-       std::string configfile = "/etc/enigma2/settings";
-       std::string configvalue;
-       if (entry)
-       {
-               ePythonConfigQuery::getConfigValue(entry, configvalue);
-               if (configvalue != "") //we get at least the default value if python is still alive
-               {
-                       return configvalue;
-               }
-               else // get value from enigma2 settings file
-               {
-                       FILE *f = fopen(configfile.c_str(), "r");
-                       if (!f)
-                       {
-                               return "Error";
-                       }
-                       while (1)
-                       {
-                               char line[1024];
-                               if (!fgets(line, 1024, f))
-                                       break;
-                               if (!strncmp(line, entry, strlen(entry) ))
-                               {
-                                       if (strlen(line) && line[strlen(line)-1] == '\r')
-                                               line[strlen(line)-1] = 0;
-                                       if (strlen(line) && line[strlen(line)-1] == '\n')
-                                               line[strlen(line)-1] = 0;
-                                       std::string tmp = line;
-                                       int posEqual = tmp.find("=", 0);
-                                       configvalue = tmp.substr(posEqual+1);
-                               }
-                       }
-                       fclose(f);
-                       return configvalue;
-               }
-       }
-}
+       std::string value;
 
-static std::string getFileContent(const char *file)
-{
-       std::string filecontent;
+       ePythonConfigQuery::getConfigValue(key.c_str(), value);
+       //we get at least the default value if python is still alive
+       if (!value.empty())
+               return value;
 
-       if (file)
-       {
-               FILE *f = fopen(file, "r");
-               if (!f)
-               {
-                       return "Error";
-               }
-               while (1)
-               {
-                       char line[1024];
-                       if (!fgets(line, 1024, f))
+       value = defaultValue;
+
+       // get value from enigma2 settings file
+       std::ifstream in(eEnv::resolve("${sysconfdir}/enigma2/settings").c_str());
+       if (in.good()) {
+               do {
+                       std::string line;
+                       std::getline(in, line);
+                       size_t size = key.size();
+                       if (!key.compare(0, size, line) && line[size] == '=') {
+                               value = line.substr(size + 1);
                                break;
-                       std::string tmp = line;
-                       std::string password;
-                       int pwdpos = tmp.find(".password=", 0);
-                       if( pwdpos != std::string::npos)
-                       {
-                               filecontent += tmp.substr(0,pwdpos +10);
-                               for ( int pos = pwdpos +10; pos < tmp.length()-1; ++pos )
-                               {
-                                       filecontent += "X";
-                               }
-                               filecontent += "\n";
                        }
-                       else {
-                               filecontent += line;
-                       }
-               }
-               fclose(f);
+               } while (in.good());
+               in.close();
        }
-       return filecontent;
-}
 
-static std::string execCommand(char* cmd) {
-       FILE* pipe = popen(cmd, "r");
-       if (!pipe)
-               return "Error";
-       char buffer[STDBUFFER_SIZE];
-       std::string result = "";
-       while(!feof(pipe))
-       {
-               if(!fgets(buffer,STDBUFFER_SIZE, pipe))
-                       break;
-               result += buffer;
-       }
-       pclose(pipe);
-       return result;
+       return value;
 }
 
-extern std::string execCommand();
-extern std::string getConfigFileValue();
-extern std::string getFileContent();
-extern std::string getLogBuffer();
+static bool getConfigBool(const std::string &key, bool defaultValue)
+{
+       std::string value = getConfigString(key, defaultValue ? "true" : "false");
+       const char *cvalue = value.c_str();
 
-#define INFOFILE "/maintainer.info"
+       if (!strcasecmp(cvalue, "true"))
+               return true;
+       if (!strcasecmp(cvalue, "false"))
+               return false;
+
+       return defaultValue;
+}
 
 void bsodFatal(const char *component)
 {
-       char logfile[128];
-       sprintf(logfile, "/media/hdd/enigma2_crash_%u.log", (unsigned int)time(0));
-       FILE *f = fopen(logfile, "wb");
+       std::ostringstream os;
+       os << time(0);
+
+       std::string logfile("/media/hdd/enigma2_crash_" + os.str() + ".log");
+
+       FILE *f = fopen(logfile.c_str(), "wb");
        
        std::string lines = getLogBuffer();
        
                /* find python-tracebacks, and extract "  File "-strings */
        size_t start = 0;
        
-       char crash_emailaddr[256] = CRASH_EMAILADDR;
-       char crash_component[256] = "enigma2";
+       std::string crash_emailaddr = CRASH_EMAILADDR;
+       std::string crash_component = "enigma2";
 
        if (component)
-               snprintf(crash_component, 256, component);
+               crash_component = component;
        else
        {
                while ((start = lines.find("\n  File \"", start)) != std::string::npos)
@@ -195,21 +144,12 @@ void bsodFatal(const char *component)
 
                        if (end == std::string::npos)
                                break;
-                       if (end - start >= (256 - strlen(INFOFILE)))
-                               continue;
-                       char filename[256];
-                       snprintf(filename, 256, "%s%s", lines.substr(start, end - start).c_str(), INFOFILE);
-                       FILE *cf = fopen(filename, "r");
-                       if (cf)
-                       {
-                               fgets(crash_emailaddr, sizeof crash_emailaddr, cf);
-                               if (*crash_emailaddr && crash_emailaddr[strlen(crash_emailaddr)-1] == '\n')
-                                       crash_emailaddr[strlen(crash_emailaddr)-1] = 0;
-
-                               fgets(crash_component, sizeof crash_component, cf);
-                               if (*crash_component && crash_component[strlen(crash_component)-1] == '\n')
-                                       crash_component[strlen(crash_component)-1] = 0;
-                               fclose(cf);
+
+                       std::string filename(lines.substr(start, end - start) + INFOFILE);
+                       std::ifstream in(filename.c_str());
+                       if (in.good()) {
+                               std::getline(in, crash_emailaddr) && std::getline(in, crash_component);
+                               in.close();
                        }
                }
        }
@@ -217,207 +157,109 @@ void bsodFatal(const char *component)
        if (f)
        {
                time_t t = time(0);
-               char crashtime[STDBUFFER_SIZE];
-               sprintf(crashtime, "%s",ctime(&t));
-               if (strlen(crashtime) && crashtime[strlen(crashtime)-1] == '\n')
-                               crashtime[strlen(crashtime)-1] = 0;
-               fprintf(f, "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n<opendreambox>\n");
-               fprintf(f, "\t<enigma2>\n");
-               fprintf(f, "\t\t<crashdate>%s</crashdate>\n", crashtime);
-#ifdef ENIGMA2_CHECKOUT_TAG
-               fprintf(f, "\t\t<checkouttag>" ENIGMA2_CHECKOUT_TAG "</checkouttag>\n");
-#else
-               fprintf(f, "\t\t<compiledate>" __DATE__ "</compiledate>\n");
-#endif
-#ifdef ENIGMA2_CHECKOUT_ROOT
-               fprintf(f, "\t\t<checkoutroot>" ENIGMA2_CHECKOUT_ROOT "</checkoutroot>\n");
-#endif
-               fprintf(f, "\t\t<contactemail>%s</contactemail>\n", crash_emailaddr);
-               fprintf(f, "\t\t<!-- Please email this crashlog to above address -->\n");
-               std::string activeSkin = getConfigFileValue("config.skin.primary_skin");
-               if (activeSkin != "Error")
-               {
-                       if (activeSkin == "")
-                               activeSkin = "Default Skin";
-                       fprintf(f, "\t\t<skin>%s</skin>\n", activeSkin.c_str());
-               }
-               fprintf(f, "\t</enigma2>\n");
+               struct tm tm;
+               char tm_str[32];
 
-               fprintf(f, "\t<image>\n");
-               std::string model = getFileContent("/proc/stb/info/model");
-               if (model != "Error")
-               {
-                       char modelname[STDBUFFER_SIZE];
-                       sprintf(modelname, "%s",model.c_str());
-                       if (strlen(modelname) && modelname[strlen(modelname)-1] == '\n')
-                               modelname[strlen(modelname)-1] = 0;
-                       fprintf(f, "\t\t<dreamboxmodel>%s</dreamboxmodel>\n", modelname);
-               }
-               std::string kernel = getFileContent("/proc/cmdline");
-               if (kernel != "Error")
-               {
-                       char kernelcmd[STDBUFFER_SIZE];
-                       sprintf(kernelcmd, "%s",kernel.c_str());
-                       if (strlen(kernelcmd) && kernelcmd[strlen(kernelcmd)-1] == '\n')
-                               kernelcmd[strlen(kernelcmd)-1] = 0;
-                       fprintf(f, "\t\t<kernelcmdline>%s</kernelcmdline>\n", kernelcmd);
-               }
-               std::string sendAnonCrashlog = getConfigFileValue("config.plugins.crashlogautosubmit.sendAnonCrashlog");
-               if (sendAnonCrashlog == "False" || sendAnonCrashlog == "false") // defaults to true... default anonymized crashlogs
-               {
-                       std::string ca = getFileContent("/proc/stb/info/ca");
-                       if (ca != "Error")
-                       {
-                               char dreamboxca[STDBUFFER_SIZE];
-                               sprintf(dreamboxca, "%s",ca.c_str());
-                               if (strlen(dreamboxca) && dreamboxca[strlen(dreamboxca)-1] == '\n')
-                                       dreamboxca[strlen(dreamboxca)-1] = 0;
-                               fprintf(f, "\t\t<dreamboxca>\n\t\t<![CDATA[\n%s\n\t\t]]>\n\t\t</dreamboxca>\n", dreamboxca);
-                       }
-                       std::string settings = getFileContent("/etc/enigma2/settings");
-                       if (settings != "Error")
-                       {
-                               fprintf(f, "\t\t<enigma2settings>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</enigma2settings>\n", settings.c_str());
-                       }
-               }
-               std::string addNetwork = getConfigFileValue("config.plugins.crashlogautosubmit.addNetwork");
-               if (addNetwork == "True" || addNetwork == "true")
-               {
-                       std::string nwinterfaces = getFileContent("/etc/network/interfaces");
-                       if (nwinterfaces != "Error")
-                       {
-                               fprintf(f, "\t\t<networkinterfaces>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</networkinterfaces>\n", nwinterfaces.c_str());
-                       }
-                       std::string dns = getFileContent("/etc/resolv.conf");
-                       if (dns != "Error")
-                       {
-                               fprintf(f, "\t\t<dns>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</dns>\n", dns.c_str());
-                       }
-                       std::string defaultgw = getFileContent("/etc/default_gw");
-                       if (defaultgw != "Error")
-                       {
-                               char gateway[STDBUFFER_SIZE];
-                               sprintf(gateway, "%s",defaultgw.c_str());
-                               if (strlen(gateway) && gateway[strlen(gateway)-1] == '\n')
-                                       gateway[strlen(gateway)-1] = 0;
-                               fprintf(f, "\t\t<defaultgateway>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</defaultgateway>\n", gateway);
-                       }
-               }
-               std::string addWlan = getConfigFileValue("config.plugins.crashlogautosubmit.addWlan");
-               if (addWlan == "True" || addWlan == "true")
-               {
-                       std::string wpasupplicant = getFileContent("/etc/wpa_supplicant.conf");
-                       if (wpasupplicant != "Error")
-                       {
-                               fprintf(f, "\t\t<wpasupplicant>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</wpasupplicant>\n", wpasupplicant.c_str());
-                       }
-               }
-               std::string imageversion = getFileContent("/etc/image-version");
-               if (imageversion != "Error")
-               {
-                       fprintf(f, "\t\t<imageversion>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</imageversion>\n", imageversion.c_str());
+               localtime_r(&t, &tm);
+               strftime(tm_str, sizeof(tm_str), "%a %b %_d %T %Y", &tm);
+
+               XmlGenerator xml(f);
+
+               xml.open("opendreambox");
+
+               xml.open("enigma2");
+               xml.string("crashdate", tm_str);
+               xml.string("compiledate", __DATE__);
+               xml.string("contactemail", crash_emailaddr);
+               xml.comment("Please email this crashlog to above address");
+
+               xml.string("skin", getConfigString("config.skin.primary_skin", "Default Skin"));
+               xml.string("sourcedate", enigma2_date);
+               xml.string("branch", enigma2_branch);
+               xml.string("rev", enigma2_rev);
+               xml.string("version", PACKAGE_VERSION);
+               xml.close();
+
+               xml.open("image");
+               xml.stringFromFile("dreamboxmodel", "/proc/stb/info/model");
+               xml.stringFromFile("kernelcmdline", "/proc/cmdline");
+               xml.stringFromFile("nimsockets", "/proc/bus/nim_sockets");
+               if (!getConfigBool("config.plugins.crashlogautosubmit.sendAnonCrashlog", true)) {
+                       xml.cDataFromFile("dreamboxca", "/proc/stb/info/ca");
+                       xml.cDataFromFile("enigma2settings", eEnv::resolve("${sysconfdir}/enigma2/settings"), ".password=");
                }
-               std::string imageissue = getFileContent("/etc/issue.net");
-               if (imageissue != "Error")
-               {
-                       fprintf(f, "\t\t<imageissue>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</imageissue>\n", imageissue.c_str());
+               if (getConfigBool("config.plugins.crashlogautosubmit.addNetwork", false)) {
+                       xml.cDataFromFile("networkinterfaces", "/etc/network/interfaces");
+                       xml.cDataFromFile("dns", "/etc/resolv.conf");
+                       xml.cDataFromFile("defaultgateway", "/etc/default_gw");
                }
-               fprintf(f, "\t</image>\n");
-
-               fprintf(f, "\t<software>\n");
-               std::string installedplugins = execCommand("ipkg list_installed | grep enigma2");
-               fprintf(f, "\t\t<enigma2software>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</enigma2software>\n", installedplugins.c_str());
-               std::string dreambox = execCommand("ipkg list_installed | grep dream");
-               fprintf(f, "\t\t<dreamboxsoftware>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</dreamboxsoftware>\n", dreambox.c_str());
-               std::string gstreamer = execCommand("ipkg list_installed | grep gst");
-               fprintf(f, "\t\t<gstreamersoftware>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</gstreamersoftware>\n", gstreamer.c_str());
-               fprintf(f, "\t</software>\n");
-
-               fprintf(f, "\t<crashlogs>\n");
-               std::string buffer = getLogBuffer();
-               fprintf(f, "\t\t<enigma2crashlog>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</enigma2crashlog>\n", buffer.c_str());
-               std::string pythonmd5 = execCommand("find /usr/lib/enigma2/python/ -name \"*.py\" | xargs md5sum");
-               fprintf(f, "\t\t<pythonMD5sum>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</pythonMD5sum>\n", pythonmd5.c_str());
-               fprintf(f, "\t</crashlogs>\n");
-
-               fprintf(f, "\n</opendreambox>\n");
+               if (getConfigBool("config.plugins.crashlogautosubmit.addWlan", false))
+                       xml.cDataFromFile("wpasupplicant", "/etc/wpa_supplicant.conf");
+               xml.cDataFromFile("imageversion", "/etc/image-version");
+               xml.cDataFromFile("imageissue", "/etc/issue.net");
+               xml.close();
+
+               xml.open("software");
+               xml.cDataFromCmd("enigma2software", "opkg list_installed | grep enigma2");
+               xml.cDataFromCmd("dreamboxsoftware", "opkg list_installed | grep dream");
+               xml.cDataFromCmd("gstreamersoftware", "opkg list_installed | grep gst");
+               xml.close();
+
+               xml.open("crashlogs");
+               xml.cDataFromString("enigma2crashlog", getLogBuffer());
+               xml.cDataFromCmd("pythonMD5sum", "find " + eEnv::resolve("${libdir}/enigma2/python/") + " -name \"*.py\" | xargs md5sum");
+               xml.close();
+
+               xml.close();
+
                fclose(f);
-               
        }
-       
-#ifdef WITH_SDL
-       ePtr<gSDLDC> my_dc;
-       gSDLDC::getInstance(my_dc);
-#else
-       ePtr<gFBDC> my_dc;
-       gFBDC::getInstance(my_dc);
-#endif
-       
-       {
-               gPainter p(my_dc);
-               p.resetOffset();
-               p.resetClip(eRect(ePoint(0, 0), my_dc->size()));
-#ifdef ENIGMA2_CHECKOUT_TAG
-               if (ENIGMA2_CHECKOUT_TAG[0] == 'T') /* tagged checkout (release) */
-                       p.setBackgroundColor(gRGB(0x0000C0));
-               else if (ENIGMA2_CHECKOUT_TAG[0] == 'D') /* dated checkout (daily experimental build) */
-               {
-                       srand(time(0));
-                       int r = rand();
-                       unsigned int col = 0;
-                       if (r & 1)
-                               col |= 0x800000;
-                       if (r & 2)
-                               col |= 0x008000;
-                       if (r & 4)
-                               col |= 0x0000c0;
-                       p.setBackgroundColor(gRGB(col));
-               }
-#else
-                       p.setBackgroundColor(gRGB(0x008000));
-#endif
 
-               p.setForegroundColor(gRGB(0xFFFFFF));
-       
-               ePtr<gFont> font = new gFont("Regular", 20);
-               p.setFont(font);
-               p.clear();
-       
-               eRect usable_area = eRect(100, 70, my_dc->size().width() - 150, 100);
-               
-               char text[512];
-               snprintf(text, 512, "We are really sorry. Your Dreambox encountered "
-                       "a software problem, and needs to be restarted. "
-                       "Please send the logfile created in /hdd/ to %s.\n"
-                       "Your Dreambox restarts in 10 seconds!\n"
-                       "Component: %s",
-                       crash_emailaddr, crash_component);
-       
-               p.renderText(usable_area, text, gPainter::RT_WRAP|gPainter::RT_HALIGN_LEFT);
-       
-               usable_area = eRect(100, 170, my_dc->size().width() - 180, my_dc->size().height() - 20);
+       ePtr<gMainDC> my_dc;
+       gMainDC::getInstance(my_dc);
        
-               int i;
+       gPainter p(my_dc);
+       p.resetOffset();
+       p.resetClip(eRect(ePoint(0, 0), my_dc->size()));
+       p.setBackgroundColor(gRGB(0x008000));
+       p.setForegroundColor(gRGB(0xFFFFFF));
+
+       ePtr<gFont> font = new gFont("Regular", 20);
+       p.setFont(font);
+       p.clear();
+
+       eRect usable_area = eRect(100, 70, my_dc->size().width() - 150, 100);
        
-               size_t start = std::string::npos + 1;
-               for (i=0; i<20; ++i)
+       std::string text("We are really sorry. Your Dreambox encountered "
+               "a software problem, and needs to be restarted. "
+               "Please send the logfile created in /hdd/ to " + crash_emailaddr + ".\n"
+               "Your Dreambox restarts in 10 seconds!\n"
+               "Component: " + crash_component);
+
+       p.renderText(usable_area, text.c_str(), gPainter::RT_WRAP|gPainter::RT_HALIGN_LEFT);
+
+       usable_area = eRect(100, 170, my_dc->size().width() - 180, my_dc->size().height() - 20);
+
+       int i;
+
+       start = std::string::npos + 1;
+       for (i=0; i<20; ++i)
+       {
+               start = lines.rfind('\n', start - 1);
+               if (start == std::string::npos)
                {
-                       start = lines.rfind('\n', start - 1);
-                       if (start == std::string::npos)
-                       {
-                               start = 0;
-                               break;
-                       }
+                       start = 0;
+                       break;
                }
-       
-               font = new gFont("Regular", 14);
-               p.setFont(font);
-       
-               p.renderText(usable_area, 
-                       lines.substr(start), gPainter::RT_HALIGN_LEFT);
-               sleep(10);
        }
 
+       font = new gFont("Regular", 14);
+       p.setFont(font);
+
+       p.renderText(usable_area, 
+               lines.substr(start), gPainter::RT_HALIGN_LEFT);
+       sleep(10);
+
        raise(SIGKILL);
 }
 
@@ -444,16 +286,13 @@ void oops(const mcontext_t &context, int dumpcode)
                eDebug(" (end)");
        }
 }
-#else
-#warning "no oops support!"
-#define NO_OOPS_SUPPORT
 #endif
 
 void handleFatalSignal(int signum, siginfo_t *si, void *ctx)
 {
+#ifndef NO_OOPS_SUPPORT
        ucontext_t *uc = (ucontext_t*)ctx;
 
-#ifndef NO_OOPS_SUPPORT
        oops(uc->uc_mcontext, signum == SIGSEGV || signum == SIGABRT);
 #endif
        eDebug("-------");
@@ -463,7 +302,6 @@ void handleFatalSignal(int signum, siginfo_t *si, void *ctx)
 void bsodCatchSignals()
 {
        struct sigaction act;
-       act.sa_handler = SIG_DFL;
        act.sa_sigaction = handleFatalSignal;
        act.sa_flags = SA_RESTART | SA_SIGINFO;
        if (sigemptyset(&act.sa_mask) == -1)
index 144e2d3..f21c870 100644 (file)
@@ -1,6 +1,7 @@
 #include <stdio.h>
 #include <libsig_comp.h>
 #include <lib/base/ebase.h>
+#include <lib/base/eenv.h>
 #include <lib/base/eerror.h>
 #include <lib/base/init.h>
 #include <lib/base/init_num.h>
@@ -8,7 +9,7 @@
 #include <unistd.h>
 
 #include <lib/gdi/grc.h>
-#include <lib/gdi/gfbdc.h>
+#include <lib/gdi/gmaindc.h>
 #include <lib/gdi/font.h> 
 
 #include <lib/gui/ewidget.h>
@@ -52,8 +53,8 @@ int main()
        eInit init;
 
        init.setRunlevel(eAutoInitNumbers::main);
-       ePtr<gFBDC> my_dc;
-       gFBDC::getInstance(my_dc);
+       ePtr<gMainDC> my_dc;
+       gMainDC::getInstance(my_dc);
 
        gPainter p(my_dc);
        
@@ -67,7 +68,7 @@ int main()
                pal[a | 0x10] = (0x111111 * a) | 0xFF;
        p.setPalette(pal, 0, 256);
 
-       fontRenderClass::getInstance()->AddFont(FONTDIR "/arial.ttf", "Regular", 100);
+       fontRenderClass::getInstance()->AddFont(eEnv::resolve("${datadir}/fonts/arial.ttf"), "Regular", 100);
 
        p.resetClip(gRegion(eRect(0, 0, 720, 576)));
        
index e53fcca..f3d1b17 100644 (file)
@@ -8,7 +8,7 @@
 #include <unistd.h>
 
 #include <lib/gdi/grc.h>
-#include <lib/gdi/gfbdc.h>
+#include <lib/gdi/gmaindc.h>
 #include <lib/gdi/font.h> 
 
 #include <lib/gui/ewidget.h>
@@ -52,8 +52,8 @@ int main()
        eInit init;
 
        init.setRunlevel(eAutoInitNumbers::main);
-       ePtr<gFBDC> my_dc;
-       gFBDC::getInstance(my_dc);
+       ePtr<gMainDC> my_dc;
+       gMainDC::getInstance(my_dc);
 
        gPainter p(my_dc);
        
@@ -67,7 +67,7 @@ int main()
                pal[a | 0x10] = (0x111111 * a) | 0xFF;
        p.setPalette(pal, 0, 256);
 
-       fontRenderClass::getInstance()->AddFont(FONTDIR "/arial.ttf", "Regular", 100);
+       fontRenderClass::getInstance()->AddFont(eEnv::resolve("${datadir}/fonts/arial.ttf"), "Regular", 100);
 
        eWidgetDesktop dsk(eSize(720, 576));
        dsk.setDC(my_dc);
index b8554d5..91645d8 100644 (file)
@@ -9,15 +9,13 @@
 #include <lib/driver/rc.h>
 #include <lib/base/ioprio.h>
 #include <lib/base/ebase.h>
+#include <lib/base/eenv.h>
 #include <lib/base/eerror.h>
 #include <lib/base/init.h>
 #include <lib/base/init_num.h>
-#include <lib/gdi/gfbdc.h>
+#include <lib/gdi/gmaindc.h>
 #include <lib/gdi/glcddc.h>
 #include <lib/gdi/grc.h>
-#ifdef WITH_SDL
-#include <lib/gdi/sdl.h>
-#endif
 #include <lib/gdi/epng.h>
 #include <lib/gdi/font.h>
 #include <lib/gui/ebutton.h>
 #include <lib/python/python.h>
 
 #include "bsod.h"
+#include "version_info.h"
 
-#ifdef HAVE_GSTREAMER
 #include <gst/gst.h>
-#endif
 
 #ifdef OBJECT_DEBUG
 int object_total_remaining;
@@ -135,12 +132,10 @@ int main(int argc, char **argv)
        atexit(object_dump);
 #endif
 
-#ifdef HAVE_GSTREAMER
        gst_init(&argc, &argv);
-#endif
 
        // set pythonpath if unset
-       setenv("PYTHONPATH", LIBDIR "/enigma2/python", 0);
+       setenv("PYTHONPATH", eEnv::resolve("${libdir}/enigma2/python").c_str(), 0);
        printf("PYTHONPATH: %s\n", getenv("PYTHONPATH"));
        
        bsodLogInit();
@@ -149,15 +144,10 @@ int main(int argc, char **argv)
        eMain main;
 
 #if 1
-#ifdef WITH_SDL
-       ePtr<gSDLDC> my_dc;
-       gSDLDC::getInstance(my_dc);
-#else
-       ePtr<gFBDC> my_dc;
-       gFBDC::getInstance(my_dc);
+       ePtr<gMainDC> my_dc;
+       gMainDC::getInstance(my_dc);
        
-       int double_buffer = my_dc->haveDoubleBuffering();
-#endif
+       //int double_buffer = my_dc->haveDoubleBuffering();
 
        ePtr<gLCDDC> my_lcd_dc;
        gLCDDC::getInstance(my_lcd_dc);
@@ -190,7 +180,7 @@ int main(int argc, char **argv)
        dsk_lcd.setDC(my_lcd_dc);
 
        ePtr<gPixmap> m_pm;
-       loadPNG(m_pm, DATADIR "/enigma2/skin_default/pal.png");
+       loadPNG(m_pm, eEnv::resolve("${datadir}/enigma2/skin_default/pal.png").c_str());
        if (!m_pm)
        {
                eFatal("pal.png not found!");
@@ -213,14 +203,16 @@ int main(int argc, char **argv)
                ePtr<gPixmap> wait[MAX_SPINNER];
                for (i=0; i<MAX_SPINNER; ++i)
                {
-                       char filename[strlen(DATADIR) + 41];
-                       sprintf(filename, DATADIR "/enigma2/skin_default/spinner/wait%d.png", i + 1);
-                       loadPNG(wait[i], filename);
+                       char filename[64];
+                       std::string rfilename;
+                       snprintf(filename, sizeof(filename), "${datadir}/enigma2/skin_default/spinner/wait%d.png", i + 1);
+                       rfilename = eEnv::resolve(filename);
+                       loadPNG(wait[i], rfilename.c_str());
                        
                        if (!wait[i])
                        {
                                if (!i)
-                                       eDebug("failed to load %s! (%m)", filename);
+                                       eDebug("failed to load %s! (%m)", rfilename.c_str());
                                else
                                        eDebug("found %d spinner!\n", i);
                                break;
@@ -243,7 +235,7 @@ int main(int argc, char **argv)
        setIoPrio(IOPRIO_CLASS_BE, 3);
 
 //     python.execute("mytest", "__main__");
-       python.execFile("/usr/lib/enigma2/python/mytest.py");
+       python.execFile(eEnv::resolve("${libdir}/enigma2/python/mytest.py").c_str());
 
        extern void setFullsize(); // definend in lib/gui/evideo.cpp
        setFullsize();
@@ -259,8 +251,9 @@ int main(int argc, char **argv)
 
        {
                gPainter p(my_lcd_dc);
-               p.resetClip(eRect(0, 0, 132, 64));
+               p.resetClip(eRect(ePoint(0, 0), my_lcd_dc->size()));
                p.clear();
+               p.flush();
        }
 
        return exit_code;
@@ -276,11 +269,6 @@ eApplication *getApplication()
        return eApp;
 }
 
-void runMainloop()
-{
-       eApp->runLoop();
-}
-
 void quitMainloop(int exitCode)
 {
        FILE *f = fopen("/proc/stb/fp/was_timer_wakeup", "w");
@@ -305,22 +293,30 @@ void quitMainloop(int exitCode)
        eApp->quit(0);
 }
 
-#include "version.h"
+static void sigterm_handler(int num)
+{
+       quitMainloop(128 + num);
+}
+
+void runMainloop()
+{
+       struct sigaction act;
+
+       act.sa_handler = sigterm_handler;
+       act.sa_flags = SA_RESTART;
+
+       if (sigemptyset(&act.sa_mask) == -1)
+               perror("sigemptyset");
+       if (sigaction(SIGTERM, &act, 0) == -1)
+               perror("SIGTERM");
+
+       eApp->runLoop();
+}
 
 const char *getEnigmaVersionString()
 {
-       std::string date =
-#ifdef ENIGMA2_LAST_CHANGE_DATE
-               ENIGMA2_LAST_CHANGE_DATE;
-#else
-               __DATE__;
-#endif
-       std::string branch =
-#ifdef ENIGMA2_BRANCH
-               ENIGMA2_BRANCH;
-#else
-               "HEAD";
-#endif
+       std::string date = enigma2_date;
+       std::string branch = enigma2_branch;
        return std::string(date + '-' + branch).c_str();
 }
 
diff --git a/main/version_info.cpp b/main/version_info.cpp
new file mode 100644 (file)
index 0000000..f639eb8
--- /dev/null
@@ -0,0 +1,18 @@
+#include "version_info.h"
+#include "version.h"
+
+#ifndef ENIGMA2_COMMIT_DATE
+#define ENIGMA2_COMMIT_DATE __DATE__
+#endif
+const char *enigma2_date = ENIGMA2_COMMIT_DATE;
+
+#ifndef ENIGMA2_BRANCH
+#define ENIGMA2_BRANCH "(no branch)"
+#endif
+const char *enigma2_branch = ENIGMA2_BRANCH;
+
+#ifndef ENIGMA2_REV
+#define ENIGMA2_REV ""
+#endif
+const char *enigma2_rev = ENIGMA2_REV;
+
diff --git a/main/version_info.h b/main/version_info.h
new file mode 100644 (file)
index 0000000..f93cf01
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef __main_version_info_h__
+#define __main_version_info_h__
+
+extern const char *enigma2_date;
+extern const char *enigma2_branch;
+extern const char *enigma2_rev;
+
+#endif
diff --git a/main/xmlgenerator.cpp b/main/xmlgenerator.cpp
new file mode 100644 (file)
index 0000000..eb4f157
--- /dev/null
@@ -0,0 +1,188 @@
+#include <fstream>
+#include <lib/base/eerror.h>
+#include "xmlgenerator.h"
+
+XmlGenerator::XmlGenerator(FILE *f) : m_file(f), m_indent(true), m_level(0)
+{
+       ::fprintf(m_file, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
+}
+
+XmlGenerator::~XmlGenerator()
+{
+}
+
+void XmlGenerator::vprint(const char *fmt, va_list ap, bool newline)
+{
+       unsigned int i;
+
+       if (m_indent)
+               for (i = 0; i < m_level; i++)
+                       ::fprintf(m_file, "\t");
+
+       ::vfprintf(m_file, fmt, ap);
+
+       if (newline)
+               ::fprintf(m_file, "\n");
+}
+
+void XmlGenerator::print(const char *fmt, ...)
+{
+       va_list ap;
+
+       ::va_start(ap, fmt);
+       vprint(fmt, ap, false);
+       ::va_end(ap);
+}
+
+void XmlGenerator::printLn(const char *fmt, ...)
+{
+       va_list ap;
+
+       ::va_start(ap, fmt);
+       vprint(fmt, ap, true);
+       ::va_end(ap);
+}
+
+void XmlGenerator::open(const std::string &tag, bool newline)
+{
+       if (newline) {
+               printLn("<%s>", tag.c_str());
+       } else {
+               print("<%s>", tag.c_str());
+               m_indent = false;
+       }
+
+       m_tags.push(tag);
+       m_level++;
+}
+
+void XmlGenerator::open(const std::string &tag)
+{
+       open(tag, true);
+}
+
+void XmlGenerator::close()
+{
+       ASSERT(!m_tags.empty());
+       ASSERT(m_level > 0);
+       m_level--;
+
+       printLn("</%s>", m_tags.top().c_str());
+       m_indent = true;
+
+       m_tags.pop();
+}
+
+void XmlGenerator::comment(const std::string &str)
+{
+       printLn("<!-- %s -->", str.c_str());
+}
+
+void XmlGenerator::commentFromErrno(const std::string &tag)
+{
+       open(tag);
+       comment(strerror(errno));
+       close();
+}
+
+std::string XmlGenerator::cDataEscape(const std::string &str)
+{
+       const std::string search = "]]>";
+       const std::string replace = "]]]]><![CDATA[>";
+       std::string ret;
+       size_t pos = 0, opos;
+
+       for (;;) {
+               opos = pos;
+               pos = str.find(search, opos);
+               if (pos == std::string::npos)
+                       break;
+               ret.append(str, opos, pos - opos);
+               ret.append(replace);
+               pos += search.size();
+       }
+
+       ret.append(str, opos, std::string::npos);
+       return ret;
+}
+
+void XmlGenerator::cDataFromCmd(const std::string &tag, const std::string &cmd)
+{
+       FILE *pipe = ::popen(cmd.c_str(), "re");
+
+       if (pipe == 0) {
+               commentFromErrno(tag);
+               return;
+       }
+
+       std::string result;
+       char *lineptr = NULL;
+       size_t n = 0;
+
+       for (;;) {
+               ssize_t ret = ::getline(&lineptr, &n, pipe);
+               if (ret < 0)
+                       break;
+               result.append(lineptr, ret);
+       }
+
+       if (lineptr)
+               ::free(lineptr);
+
+       ::pclose(pipe);
+       cDataFromString(tag, result);
+}
+
+void XmlGenerator::cDataFromFile(const std::string &tag, const std::string &filename, const char *filter)
+{
+       std::ifstream in(filename.c_str());
+       std::string line;
+       std::string content;
+
+       if (!in.good()) {
+               commentFromErrno(tag);
+               return;
+       }
+
+       while (std::getline(in, line))
+               if (!filter || !line.find(filter))
+                       content += line + '\n';
+
+       in.close();
+       cDataFromString(tag, content);
+}
+
+void XmlGenerator::cDataFromString(const std::string &tag, const std::string &str)
+{
+       bool indent = false;
+
+       open(tag);
+       printLn("<![CDATA[");
+       std::swap(m_indent, indent);
+       print("%s", cDataEscape(str).c_str());
+       printLn("]]>");
+       std::swap(m_indent, indent);
+       close();
+}
+
+void XmlGenerator::string(const std::string &tag, const std::string &str)
+{
+       open(tag, false);
+       print("%s", str.c_str());
+       close();
+}
+
+void XmlGenerator::stringFromFile(const std::string &tag, const std::string &filename)
+{
+       std::ifstream in(filename.c_str());
+       std::string line;
+
+       if (!in.good()) {
+               commentFromErrno(tag);
+               return;
+       }
+
+       std::getline(in, line);
+       in.close();
+       string(tag, line);
+}
diff --git a/main/xmlgenerator.h b/main/xmlgenerator.h
new file mode 100644 (file)
index 0000000..0dbb262
--- /dev/null
@@ -0,0 +1,43 @@
+#ifndef _main_xmlgenerator_h__
+#define _main_xmlgenerator_h__
+
+#include <cstdarg>
+#include <cstdio>
+#include <stack>
+#include <string>
+
+class XmlGenerator
+{
+private:
+       FILE *m_file;
+       bool m_indent;
+       unsigned int m_level;
+       std::stack<std::string> m_tags;
+
+       void vprint(const char *fmt, va_list ap, bool newline);
+       void __attribute__ ((__format__(__printf__, 2, 3))) print(const char *fmt, ...);
+       void __attribute__ ((__format__(__printf__, 2, 3))) printLn(const char *fmt, ...);
+
+       void open(const std::string &tag, bool newline);
+       void commentFromErrno(const std::string &tag);
+
+       std::string cDataEscape(const std::string &str);
+
+public:
+       XmlGenerator(FILE *f);
+       ~XmlGenerator();
+
+       void open(const std::string &tag);
+       void close();
+
+       void comment(const std::string &str);
+
+       void cDataFromCmd(const std::string &tag, const std::string &cmd);
+       void cDataFromFile(const std::string &tag, const std::string &filename, const char *filter = 0);
+       void cDataFromString(const std::string &tag, const std::string &str);
+
+       void string(const std::string &tag, const std::string &str);
+       void stringFromFile(const std::string &tag, const std::string &filename);
+};
+
+#endif
index a3cfb5a..99695e0 100755 (executable)
--- a/mytest.py
+++ b/mytest.py
@@ -10,7 +10,8 @@ from Tools.Profile import profile, profile_final
 profile("PYTHON_START")
 
 from enigma import runMainloop, eDVBDB, eTimer, quitMainloop, \
-       getDesktop, ePythonConfigQuery, eAVSwitch, eServiceEvent
+       getDesktop, ePythonConfigQuery, eAVSwitch, eServiceEvent, \
+       eEPGCache
 from tools import *
 
 profile("LANGUAGE")
@@ -55,6 +56,11 @@ config.misc.isNextRecordTimerAfterEventActionAuto = ConfigYesNo(default=False)
 config.misc.useTransponderTime = ConfigYesNo(default=True)
 config.misc.startCounter = ConfigInteger(default=0) # number of e2 starts...
 config.misc.standbyCounter = NoSave(ConfigInteger(default=0)) # number of standby
+config.misc.epgcache_filename = ConfigText(default = "/hdd/epg.dat")
+
+def setEPGCachePath(configElement):
+       eEPGCache.getInstance().setCacheFile(configElement.value)
+
 
 #demo code for use of standby enter leave callbacks
 #def leaveStandby():
@@ -208,6 +214,7 @@ class Session:
                        self.summary.show()
                        c.addSummary(self.summary)
 
+               c.saveKeyboardMode()
                c.execBegin()
 
                # when execBegin opened a new dialog, don't bother showing the old one.
@@ -219,6 +226,7 @@ class Session:
                self.in_exec = False
 
                self.current_dialog.execEnd()
+               self.current_dialog.restoreKeyboardMode()
                self.current_dialog.hide()
 
                if last:
@@ -472,6 +480,8 @@ def runScreenTest():
                else:
                        session.open(screen, *args)
 
+       config.misc.epgcache_filename.addNotifier(setEPGCachePath)
+
        runNextScreen(session, screensToRun)
 
        profile("Init:VolumeControl")
diff --git a/po/.gitignore b/po/.gitignore
new file mode 100644 (file)
index 0000000..6e85d37
--- /dev/null
@@ -0,0 +1,2 @@
+*.mo
+*.pot
diff --git a/po/LINGUAS b/po/LINGUAS
deleted file mode 100644 (file)
index 6b09e26..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ar ca cs da de el en es et fi fr fy hr hu is it lt lv nl no pl pt ru sv sk sl sr tr uk
old mode 100755 (executable)
new mode 100644 (file)
index ba04440..e7318f7
@@ -1,60 +1,45 @@
-DOMAIN=enigma2
-#GETTEXT=./pygettext.py
-GETTEXT=xgettext
+dist_noinst_SCRIPTS = xml2po.py
 
-#MSGFMT = ./msgfmt.py
-MSGFMT = msgfmt
+LANGS = ar ca cs da de el en es et fi fr fy hr hu is it lt lv nl no pl pt ru sv sk sl sr tr uk
+LANGMO = $(LANGS:=.mo)
+LANGPO = $(LANGS:=.po)
 
-LANGS := $(shell cat $(srcdir)/LINGUAS)
-LANGPO := $(foreach LANG, $(LANGS),$(LANG).po)
-LANGMO := $(foreach LANG, $(LANGS),$(LANG).mo)
+EXTRA_DIST = $(LANGPO)
 
-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
+if UPDATE_PO
+# the TRANSLATORS: allows putting translation comments before the to-be-translated line.
+enigma2-py.pot: $(top_srcdir)/*.py $(top_srcdir)/lib/python/*/*.py $(top_srcdir)/lib/python/Plugins/*/*/*.py
+       $(XGETTEXT) -L Python --from-code=UTF-8 --add-comments="TRANSLATORS:" -d @PACKAGE_NAME@ -s -o $@ $^
 
-merge:
-       for lang in $(LANGS); do \
-               msgmerge --no-location -s -N -U $$lang.po enigma2.pot; \
-       done
+enigma2-xml.pot: $(srcdir)/xml2po.py $(top_srcdir)/data/*.xml $(top_srcdir)/lib/python/Plugins/SystemPlugins/*/*.xml
+       $(PYTHON) $^ > $@
 
+enigma2.pot: enigma2-py.pot enigma2-xml.pot
+       cat $^ | $(MSGUNIQ) --no-location -o $@ -
 
-# the TRANSLATORS: allows putting translation comments before the to-be-translated line.
-enigma2.pot:
-       $(GETTEXT) -L python --add-comments="TRANSLATORS:" -d enigma2 -s -o enigma2.pot ../lib/python/Screens/*.py ../lib/python/Components/*.py \
-                       ../lib/python/Tools/*.py \
-                       ../*.py \
-                       ../lib/python/Plugins/*/*/*.py
-
-       ./xml2po.py     ../data/ >> enigma2.pot
-       ./xml2po.py     ../lib/python/Plugins/SystemPlugins/Videomode/ >> enigma2.pot
-       ./xml2po.py     ../lib/python/Plugins/SystemPlugins/SoftwareManager/ >> enigma2.pot
-       ./xml2po.py     ../lib/python/Plugins/SystemPlugins/CleanupWizard/ >> enigma2.pot
-       ./xml2po.py     ../lib/python/Plugins/SystemPlugins/NetworkWizard/ >> enigma2.pot
-       msguniq --no-location -o enigma2uniq.pot enigma2.pot
-       $(RM) enigma2.pot
-       mv enigma2uniq.pot enigma2.pot
-
-%.mo: %.po
-       $(MSGFMT) -o $@ $<
+%.po: enigma2.pot
+       if [ -f $@ ]; then \
+               $(MSGMERGE) --backup=none --no-location -s -N -U $@ $< && touch $@; \
+       else \
+               $(MSGINIT) -l $@ -o $@ -i $< --no-translator; \
+       fi
+endif
 
-%.po:
-       msginit -l $@ -o $@ -i enigma2.pot --no-translator
+.po.mo:
+       $(MSGFMT) -o $@ $<
 
-CLEANFILES = $(foreach LANG, $(LANGS),$(LANG).mo)
+BUILT_SOURCES = $(LANGMO)
+CLEANFILES = $(LANGMO) enigma2-py.pot enigma2-xml.pot enigma2.pot
 
-cleanall:
-       $(RM) enigma2.pot
+dist-hook: $(LANGPO)
 
-clean-local:
-       $(RM) -r $(LANGS)
+install-data-local: $(LANGMO)
+       for lang in $(LANGS); do \
+               $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/po/$$lang/LC_MESSAGES; \
+               $(INSTALL_DATA) $$lang.mo $(DESTDIR)$(pkgdatadir)/po/$$lang/LC_MESSAGES/@PACKAGE_NAME@.mo; \
+       done
 
-install-data-am: default
+uninstall-local:
        for lang in $(LANGS); do \
-               mkdir -p $(DESTDIR)$(pkgdatadir)/po/$$lang/LC_MESSAGES; \
-               cp $$lang.mo $(DESTDIR)$(pkgdatadir)/po/$$lang/LC_MESSAGES/$(DOMAIN).mo; \
+               $(RM) $(DESTDIR)$(pkgdatadir)/po/$$lang/LC_MESSAGES/@PACKAGE_NAME@.mo; \
        done
diff --git a/po/enigma2.pot b/po/enigma2.pot
deleted file mode 100755 (executable)
index 2e9f148..0000000
+++ /dev/null
@@ -1,13646 +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.
-#
-#: ../enigma2_experimental/lib/python/Screens/About.py:63
-#: ../enigma2_master/lib/python/Screens/About.py:63
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-11-01 13:01+0000\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"
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:148
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:148
-msgid ""
-"\n"
-"Advanced options and settings."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:233
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:560
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1171
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1688
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:233
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:560
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1171
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1687
-msgid ""
-"\n"
-"After pressing OK, please wait!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:131
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:131
-msgid ""
-"\n"
-"Backup your Dreambox settings."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:155
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:155
-msgid ""
-"\n"
-"Edit the upgrade source address."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:128
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:128
-msgid ""
-"\n"
-"Manage extensions or plugins for your Dreambox"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:129
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:129
-msgid ""
-"\n"
-"Online update of your Dreambox software."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:121
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:121
-msgid ""
-"\n"
-"Press OK on your remote control to continue."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:132
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:132
-msgid ""
-"\n"
-"Restore your Dreambox settings."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:130
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:130
-msgid ""
-"\n"
-"Restore your Dreambox with a new firmware."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:150
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:150
-msgid ""
-"\n"
-"Restore your backups by date."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:133
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:133
-msgid ""
-"\n"
-"Scan for local extensions and install them."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:151
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:151
-msgid ""
-"\n"
-"Select your backup device.\n"
-"Current device: "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:256
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:256
-msgid ""
-"\n"
-"System will restart after the restore!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:154
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:154
-msgid ""
-"\n"
-"View, install and remove available or installed packages."
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3setup.py:65
-msgid " "
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:314
-msgid " Results"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:876
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:876
-msgid " extensions."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InputDeviceSetup.py:225
-#: ../enigma2_master/lib/python/Screens/InputDeviceSetup.py:225
-msgid " ms"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:676
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:688
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:676
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:688
-msgid " packages selected."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:204
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:209
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:630
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:674
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:685
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:204
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:209
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:630
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:674
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:685
-msgid " updates available."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:359
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:359
-msgid " wireless networks found!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1280
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1281
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1430
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1432
-#: ../enigma2_master/lib/python/Components/NimManager.py:1280
-#: ../enigma2_master/lib/python/Components/NimManager.py:1281
-#: ../enigma2_master/lib/python/Components/NimManager.py:1430
-#: ../enigma2_master/lib/python/Components/NimManager.py:1432
-msgid "%H:%M"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Standby.py:125
-#: ../enigma2_master/lib/python/Screens/Standby.py:125
-#, python-format
-msgid "%d jobs are running in the background!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/EventView.py:150
-#: ../enigma2_master/lib/python/Screens/EventView.py:150
-#, python-format
-msgid "%d min"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/ServiceScan.py:33
-#: ../enigma2_experimental/lib/python/Components/ServiceScan.py:96
-#: ../enigma2_experimental/lib/python/Components/ServiceScan.py:98
-#: ../enigma2_master/lib/python/Components/ServiceScan.py:33
-#: ../enigma2_master/lib/python/Components/ServiceScan.py:96
-#: ../enigma2_master/lib/python/Components/ServiceScan.py:98
-#, python-format
-msgid "%d services found!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimeDateInput.py:40
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:111
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:122
-#: ../enigma2_master/lib/python/Screens/TimeDateInput.py:40
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:111
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:122
-msgid "%d.%B %Y"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:58
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:140
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:227
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:231
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:232
-#, python-format
-msgid "%i ms"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/About.py:38
-#: ../enigma2_master/lib/python/Screens/About.py:38
-#, python-format
-msgid ""
-"%s\n"
-"(%s, %d MB free)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/PluginBrowser.py:54
-#: ../enigma2_master/lib/python/Screens/PluginBrowser.py:54
-#, python-format
-msgid "%s (%s)\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:37
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:39
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:45
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:47
-#: ../enigma2_master/lib/python/Components/TimerList.py:37
-#: ../enigma2_master/lib/python/Components/TimerList.py:39
-#: ../enigma2_master/lib/python/Components/TimerList.py:45
-#: ../enigma2_master/lib/python/Components/TimerList.py:47
-msgid "(ZAP)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:585
-#: ../enigma2_master/lib/python/Components/NimManager.py:585
-msgid "(empty)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:347
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:347
-msgid "(show optional DVD audio menu)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:65
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:65
-msgid "* Only available if more than one interface is active."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:357
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:357
-msgid "1 wireless network found!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1175
-#: ../enigma2_master/lib/python/Components/NimManager.py:1175
-msgid "1.0"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1175
-#: ../enigma2_master/lib/python/Components/NimManager.py:1175
-msgid "1.1"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1174
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1175
-#: ../enigma2_master/lib/python/Components/NimManager.py:1174
-#: ../enigma2_master/lib/python/Components/NimManager.py:1175
-msgid "1.2"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1171
-#: ../enigma2_master/lib/python/Components/NimManager.py:1171
-msgid "13 V"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:91
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:91
-msgid "16:10"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:83
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:83
-msgid "16:10 Letterbox"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:84
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:84
-msgid "16:10 PanScan"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:81
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:90
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:15
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:81
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:90
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:15
-msgid "16:9"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:85
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:85
-msgid "16:9 Letterbox"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:82
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:82
-msgid "16:9 always"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1171
-#: ../enigma2_master/lib/python/Components/NimManager.py:1171
-msgid "18 V"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/ParentalControl.py:29
-#: ../enigma2_experimental/lib/python/Components/ParentalControl.py:30
-#: ../enigma2_master/lib/python/Components/ParentalControl.py:29
-#: ../enigma2_master/lib/python/Components/ParentalControl.py:30
-msgid "30 minutes"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:89
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:15
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:89
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:15
-msgid "4:3"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:79
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:79
-msgid "4:3 Letterbox"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:80
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:80
-msgid "4:3 PanScan"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/ParentalControl.py:29
-#: ../enigma2_experimental/lib/python/Components/ParentalControl.py:30
-#: ../enigma2_master/lib/python/Components/ParentalControl.py:29
-#: ../enigma2_master/lib/python/Components/ParentalControl.py:30
-msgid "5 minutes"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/ParentalControl.py:29
-#: ../enigma2_experimental/lib/python/Components/ParentalControl.py:30
-#: ../enigma2_master/lib/python/Components/ParentalControl.py:29
-#: ../enigma2_master/lib/python/Components/ParentalControl.py:30
-msgid "60 minutes"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/RecordPaths.py:54
-#: ../enigma2_master/lib/python/Screens/RecordPaths.py:54
-msgid "<Current movielist location>"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/RecordPaths.py:54
-#: ../enigma2_master/lib/python/Screens/RecordPaths.py:54
-msgid "<Default movie location>"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/RecordPaths.py:54
-#: ../enigma2_master/lib/python/Screens/RecordPaths.py:54
-msgid "<Last timer location>"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/AudioSelection.py:90
-#: ../enigma2_experimental/lib/python/Screens/AudioSelection.py:105
-#: ../enigma2_experimental/lib/python/Screens/AudioSelection.py:137
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:64
-#: ../enigma2_master/lib/python/Screens/AudioSelection.py:90
-#: ../enigma2_master/lib/python/Screens/AudioSelection.py:105
-#: ../enigma2_master/lib/python/Screens/AudioSelection.py:137
-#: ../enigma2_master/lib/python/Components/TimerList.py:64
-msgid "<unknown>"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Menu.py:155
-#: ../enigma2_experimental/lib/python/Screens/Menu.py:158
-#: ../enigma2_master/lib/python/Screens/Menu.py:155
-#: ../enigma2_master/lib/python/Screens/Menu.py:158
-msgid "??"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1173
-#: ../enigma2_master/lib/python/Components/NimManager.py:1173
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "A"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ipkg.py:115
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1406
-#: ../enigma2_master/lib/python/Screens/Ipkg.py:115
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1406
-#, python-format
-msgid ""
-"A configuration file (%s) was modified since Installation.\n"
-"Do you want to keep your version?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/DemoPlugins/TPMDemo/plugin.py:85
-#: ../enigma2_experimental/lib/python/Plugins/DemoPlugins/TPMDemo/plugin.py:86
-#: ../enigma2_master/lib/python/Plugins/DemoPlugins/TPMDemo/plugin.py:85
-#: ../enigma2_master/lib/python/Plugins/DemoPlugins/TPMDemo/plugin.py:86
-msgid "A demo plugin for TPM usage."
-msgstr ""
-
-#: ../enigma2_experimental/RecordTimer.py:300
-#: ../enigma2_master/RecordTimer.py:300
-msgid ""
-"A finished record timer wants to set your\n"
-"Dreambox to standby. Do that now?"
-msgstr ""
-
-#: ../enigma2_experimental/RecordTimer.py:306
-#: ../enigma2_master/RecordTimer.py:306
-msgid ""
-"A finished record timer wants to shut down\n"
-"your Dreambox. Shutdown now?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py:96
-#: ../enigma2_master/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py:96
-msgid "A graphical EPG for all services of an specific bouquet"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:267
-msgid ""
-"A mount entry with this name already exists!\n"
-"Update existing entry and continue?\n"
-msgstr ""
-
-#: ../enigma2_experimental/RecordTimer.py:381
-#: ../enigma2_master/RecordTimer.py:381
-#, python-format
-msgid ""
-"A record has been started:\n"
-"%s"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1648
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1648
-msgid ""
-"A recording is currently running.\n"
-"What do you want to do?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:589
-#: ../enigma2_master/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 ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:264
-#: ../enigma2_master/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 ""
-
-#: ../enigma2_experimental/lib/python/Components/Task.py:389
-#: ../enigma2_master/lib/python/Components/Task.py:389
-#, python-format
-msgid "A required tool (%s) was not found."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:212
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:212
-msgid "A search for available updates is currently in progress."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:582
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:582
-msgid ""
-"A second configured interface has been found.\n"
-"\n"
-"Do you want to disable the second network interface?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TaskView.py:128
-#: ../enigma2_experimental/SleepTimer.py:34
-#: ../enigma2_master/lib/python/Screens/TaskView.py:128
-#: ../enigma2_master/SleepTimer.py:34
-msgid ""
-"A sleep timer wants to set your\n"
-"Dreambox to standby. Do that now?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TaskView.py:125
-#: ../enigma2_experimental/SleepTimer.py:29
-#: ../enigma2_master/lib/python/Screens/TaskView.py:125
-#: ../enigma2_master/SleepTimer.py:29
-msgid ""
-"A sleep timer wants to shut down\n"
-"your Dreambox. Shutdown now?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1076
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1076
-msgid "A small overview of the available icon states and actions."
-msgstr ""
-
-#: ../enigma2_experimental/RecordTimer.py:250
-#: ../enigma2_master/RecordTimer.py:250
-msgid ""
-"A timer failed to record!\n"
-"Disable TV and try again?\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:18
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:221
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:18
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:221
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "A/V Settings"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1149
-#: ../enigma2_master/lib/python/Components/NimManager.py:1149
-msgid "AA"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1149
-#: ../enigma2_master/lib/python/Components/NimManager.py:1149
-msgid "AB"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:98
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:98
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "AC3 default"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/AudioSelection.py:75
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:100
-#: ../enigma2_master/lib/python/Screens/AudioSelection.py:75
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:100
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "AC3 downmix"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/Modem/plugin.py:270
-#: ../enigma2_master/lib/python/Plugins/Extensions/Modem/plugin.py:270
-msgid "Abort"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:81
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:81
-msgid "About..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:258
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:76
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:258
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:76
-msgid "Accesspoint:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:76
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:78
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:76
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:78
-msgid "Action:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:137
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1432
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:137
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1432
-msgid "Activate Picture in Picture"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:176
-msgid "Active"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountView.py:61
-msgid ""
-"Active/\n"
-"Inactive"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:885
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:885
-msgid "Adapter settings"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:240
-#: ../enigma2_experimental/lib/python/Screens/TimerEdit.py:44
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:187
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:240
-#: ../enigma2_master/lib/python/Screens/TimerEdit.py:44
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:187
-#: ../enigma2_plugins/autotimer/src/AutoTimerOverview.py:76
-msgid "Add"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:199
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:199
-msgid "Add Bookmark"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:126
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:126
-msgid "Add WLAN configuration?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:178
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:178
-msgid "Add a mark"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountManager.py:73
-msgid "Add a new NFS or CIFS mount point to your Dreambox."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:62
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:193
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:62
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:193
-msgid "Add a new title"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:125
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:125
-msgid "Add network configuration?"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerOverview.py:103
-msgid "Add new AutoTimer"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountManager.py:73
-msgid "Add new network mount point"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/EpgSelection.py:75
-#: ../enigma2_experimental/lib/python/Screens/EpgSelection.py:222
-#: ../enigma2_experimental/lib/python/Screens/EpgSelection.py:257
-#: ../enigma2_experimental/lib/python/Screens/EpgSelection.py:373
-#: ../enigma2_experimental/lib/python/Screens/EventView.py:40
-#: ../enigma2_experimental/lib/python/Screens/EventView.py:71
-#: ../enigma2_experimental/lib/python/Screens/EventView.py:107
-#: ../enigma2_experimental/lib/python/Screens/EventView.py:167
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:576
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:611
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:662
-#: ../enigma2_master/lib/python/Screens/EpgSelection.py:75
-#: ../enigma2_master/lib/python/Screens/EpgSelection.py:222
-#: ../enigma2_master/lib/python/Screens/EpgSelection.py:257
-#: ../enigma2_master/lib/python/Screens/EpgSelection.py:373
-#: ../enigma2_master/lib/python/Screens/EventView.py:40
-#: ../enigma2_master/lib/python/Screens/EventView.py:71
-#: ../enigma2_master/lib/python/Screens/EventView.py:107
-#: ../enigma2_master/lib/python/Screens/EventView.py:167
-#: ../enigma2_master/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:576
-#: ../enigma2_master/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:611
-#: ../enigma2_master/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:662
-msgid "Add timer"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerSettings.py:44
-msgid "Add timer as disabled on conflict"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:62
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:80
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:62
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:80
-msgid "Add title"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1760
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1760
-msgid "Add to bouquet"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1762
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1762
-msgid "Add to favourites"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:464
-msgid "Add zap timer instead of record timer?"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:1103
-#: ../enigma2_plugins/mytube/src/plugin.py:1341
-msgid "Added: "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:179
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:179
-msgid ""
-"Adds enigma2 settings and dreambox model informations like SN, rev... if "
-"enabled."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:182
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:182
-msgid "Adds network configuration if enabled."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:185
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:185
-msgid "Adds wlan configuration if enabled."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoTune/VideoFinetune.py:205
-#: ../enigma2_master/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 ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:88
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:148
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:88
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:148
-msgid "Advanced Options"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:163
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:163
-msgid "Advanced Software"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:167
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:167
-msgid "Advanced Software Plugin"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:397
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:397
-msgid "Advanced Video Enhancement Setup"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:230
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:230
-msgid "Advanced Video Setup"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:150
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:150
-msgid "Advanced restore"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TaskView.py:59
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:195
-#: ../enigma2_master/lib/python/Screens/TaskView.py:59
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:195
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:528
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:173
-msgid "After event"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:129
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:129
-msgid "Album"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:708
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:850
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:207
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:526
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:708
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:850
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:207
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:526
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:180
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:200
-#: ../enigma2_plugins/mytube/src/plugin.py:71
-#: ../enigma2_plugins/mytube/src/plugin.py:91
-msgid "All"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1168
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1169
-#: ../enigma2_master/lib/python/Components/NimManager.py:1168
-#: ../enigma2_master/lib/python/Components/NimManager.py:1169
-msgid "All Satellites"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:168
-#: ../enigma2_plugins/mytube/src/plugin.py:59
-msgid "All Time"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/plugin.py:22
-msgid "All non-repeating timers"
-msgstr ""
-
-#: ../enigma2_plugins/webinterface/src/WebIfConfig.py:62
-msgid "Allow zapping via Webinterface"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:53
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:53
-msgid "Always ask"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:21
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:21
-msgid "Always ask before sending"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:546
-msgid "Ammount of recordings left"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:389
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:389
-msgid "An empty filename is illegal."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:480
-msgid "An error occured."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Task.py:347
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:180
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/Process.py:300
-#: ../enigma2_master/lib/python/Components/Task.py:347
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:180
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/Process.py:300
-msgid "An unknown error occured!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:124
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:124
-msgid "Anonymize crashlog?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:18
-#: ../enigma2_master/lib/python/Components/Language.py:18
-msgid "Arabic"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:568
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:568
-msgid ""
-"Are you sure you want to activate this network configuration?\n"
-"\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:271
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:271
-msgid ""
-"Are you sure you want to delete\n"
-"following backup:\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Wizard.py:300
-#: ../enigma2_master/lib/python/Screens/Wizard.py:300
-msgid "Are you sure you want to exit this wizard?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:815
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:815
-msgid ""
-"Are you sure you want to restart your network interfaces?\n"
-"\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:256
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:256
-msgid ""
-"Are you sure you want to restore\n"
-"following backup:\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:242
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:242
-msgid ""
-"Are you sure you want to restore your Enigma2 backup?\n"
-"Enigma2 will restart after the restore"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:269
-msgid ""
-"Are you sure you want to save this network mount?\n"
-"\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:125
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:125
-msgid "Artist"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:228
-#: ../enigma2_plugins/mytube/src/plugin.py:119
-msgid "Ascending"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:90
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:92
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:90
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:92
-msgid "Ask before shutdown:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:41
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:43
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:45
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:41
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:43
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:45
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:249
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:252
-#: ../enigma2_plugins/mytube/src/plugin.py:139
-#: ../enigma2_plugins/mytube/src/plugin.py:142
-msgid "Ask user"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:90
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:78
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:90
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:78
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Aspect Ratio"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Network.py:348
-#: ../enigma2_master/lib/python/Components/Network.py:348
-msgid "Atheros"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1672
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1672
-msgid "Audio Options..."
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/plugin.py:36
-msgid "Audio Sync"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/plugin.py:35
-msgid "Audio Sync Setup"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:201
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:208
-#: ../enigma2_plugins/mytube/src/plugin.py:92
-#: ../enigma2_plugins/mytube/src/plugin.py:99
-msgid "Australia"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1211
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1211
-#: ../enigma2_plugins/mytube/src/plugin.py:1338
-msgid "Author: "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:151
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:151
-msgid "Authoring mode"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ci.py:25
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:572
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:580
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:607
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:614
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:622
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:637
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:650
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:657
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:662
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:666
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:672
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:678
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1146
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:10
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:15
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:26
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:44
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:50
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:57
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:62
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:72
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:77
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:84
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:91
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:96
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:100
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:106
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:112
-#: ../enigma2_master/lib/python/Screens/Ci.py:25
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:572
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:580
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:607
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:614
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:622
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:637
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:650
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:657
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:662
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:666
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:672
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:678
-#: ../enigma2_master/lib/python/Components/NimManager.py:1146
-#: ../enigma2_master/lib/python/Tools/Transponder.py:10
-#: ../enigma2_master/lib/python/Tools/Transponder.py:15
-#: ../enigma2_master/lib/python/Tools/Transponder.py:26
-#: ../enigma2_master/lib/python/Tools/Transponder.py:44
-#: ../enigma2_master/lib/python/Tools/Transponder.py:50
-#: ../enigma2_master/lib/python/Tools/Transponder.py:57
-#: ../enigma2_master/lib/python/Tools/Transponder.py:62
-#: ../enigma2_master/lib/python/Tools/Transponder.py:72
-#: ../enigma2_master/lib/python/Tools/Transponder.py:77
-#: ../enigma2_master/lib/python/Tools/Transponder.py:84
-#: ../enigma2_master/lib/python/Tools/Transponder.py:91
-#: ../enigma2_master/lib/python/Tools/Transponder.py:96
-#: ../enigma2_master/lib/python/Tools/Transponder.py:100
-#: ../enigma2_master/lib/python/Tools/Transponder.py:106
-#: ../enigma2_master/lib/python/Tools/Transponder.py:112
-msgid "Auto"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:96
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:96
-msgid "Auto chapter split every ? minutes (0=never)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:97
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:97
-msgid "Auto flesh"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:95
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:95
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Auto scart switching"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:373
-msgid "AutoTimer Editor"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:790
-msgid "AutoTimer Filters"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:994
-msgid "AutoTimer Services"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerSettings.py:33
-msgid "AutoTimer Settings"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerOverview.py:110
-msgid "AutoTimer overview"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:92
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:92
-msgid "Automatic"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:933
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:933
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Automatic Scan"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:182
-#: ../enigma2_plugins/mytube/src/plugin.py:73
-msgid "Autos & Vehicles"
-msgstr ""
-
-#: ../enigma2_plugins/webinterface/src/WebIfConfig.py:63
-msgid "Autowrite timer"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-msgid "Available format variables"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1173
-#: ../enigma2_master/lib/python/Components/NimManager.py:1173
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "B"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1149
-#: ../enigma2_master/lib/python/Components/NimManager.py:1149
-msgid "BA"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1149
-#: ../enigma2_master/lib/python/Components/NimManager.py:1149
-msgid "BB"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1270
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1275
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1280
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1285
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1290
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:507
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:658
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1270
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1275
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1280
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1285
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1290
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:507
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:658
-msgid "Back"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TaskView.py:32
-#: ../enigma2_master/lib/python/Screens/TaskView.py:32
-msgid "Background"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:305
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:305
-msgid "Backup done."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:307
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:307
-msgid "Backup failed."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:66
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:81
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:83
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:66
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:81
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:83
-msgid "Backup is running..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:131
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:131
-msgid "Backup system settings"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1172
-#: ../enigma2_master/lib/python/Components/NimManager.py:1172
-msgid "Band"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:411
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:140
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:411
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:140
-msgid "Bandwidth"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:537
-msgid "Begin of \"after event\" timespan"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:509
-#: ../enigma2_plugins/autotimer/src/AutoTimerWizard.py:78
-msgid "Begin of timespan"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:50
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:344
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:97
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:50
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:344
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:97
-msgid "Begin time"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:262
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:80
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:262
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:80
-msgid "Bitrate:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:101
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:101
-msgid "Block noise reduction"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:99
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:99
-msgid "Blue boost"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:71
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:71
-msgid "Bookmarks"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:1005
-msgid "Bouquets"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:202
-#: ../enigma2_plugins/mytube/src/plugin.py:93
-msgid "Brazil"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:92
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoTune/VideoFinetune.py:85
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:92
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoTune/VideoFinetune.py:85
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Brightness"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/NetworkBrowser.py:157
-msgid "Browse network neighbourhood"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:35
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/Process.py:894
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/Process.py:935
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/Process.py:956
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:66
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:122
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:35
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/Process.py:894
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/Process.py:935
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/Process.py:956
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:66
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:122
-msgid "Burn DVD"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:125
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:125
-msgid "Burn existing image to DVD"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/plugin.py:15
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/plugin.py:15
-msgid "Burn to DVD"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/HarddiskSetup.py:49
-#: ../enigma2_master/lib/python/Screens/HarddiskSetup.py:49
-msgid "Bus: "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1078
-#: ../enigma2_master/lib/python/Components/NimManager.py:1078
-msgid "C-Band"
-msgstr ""
-
-#: ../enigma2_plugins/cdinfo/src/plugin.py:73
-msgid "CDInfo"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:71
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:166
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:71
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:166
-msgid "CI assignment"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:98
-msgid "CIFS share"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:71
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:71
-msgid "CVBS"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:965
-#: ../enigma2_experimental/lib/python/Components/ServiceScan.py:69
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:48
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:476
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:965
-#: ../enigma2_master/lib/python/Components/ServiceScan.py:69
-#: ../enigma2_master/lib/python/Tools/Transponder.py:48
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:476
-msgid "Cable"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:179
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:179
-msgid "Cache Thumbnails"
-msgstr ""
-
-#: ../enigma2_plugins/genuinedreambox/src/plugin.py:108
-msgid "Can't connect to server. Please check your network!"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:203
-#: ../enigma2_plugins/mytube/src/plugin.py:94
-msgid "Canada"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InputDeviceSetup.py:171
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:94
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:128
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:239
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:375
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:57
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:334
-#: ../enigma2_experimental/lib/python/Screens/RecordPaths.py:24
-#: ../enigma2_experimental/lib/python/Screens/Setup.py:84
-#: ../enigma2_experimental/lib/python/Screens/TimeDateInput.py:14
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:31
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:60
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:108
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:41
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:52
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/settings.py:27
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/settings.py:69
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:164
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:367
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:582
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:293
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:561
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:717
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:115
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:205
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:351
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:977
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1552
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py:102
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:47
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:302
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:36
-#: ../enigma2_master/lib/python/Screens/InputDeviceSetup.py:171
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:94
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:128
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:239
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:375
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:57
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:334
-#: ../enigma2_master/lib/python/Screens/RecordPaths.py:24
-#: ../enigma2_master/lib/python/Screens/Setup.py:84
-#: ../enigma2_master/lib/python/Screens/TimeDateInput.py:14
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:31
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:60
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:108
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:41
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:52
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/settings.py:27
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/settings.py:69
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:164
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:367
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:582
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:293
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:561
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:717
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:115
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:205
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:351
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:977
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1552
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py:102
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:47
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:302
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:36
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:66
-#: ../enigma2_plugins/ac3lipsync/src/AC3setup.py:63
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:393
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:811
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:1014
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:44
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:118
-#: ../enigma2_plugins/autotimer/src/AutoTimerPreview.py:59
-#: ../enigma2_plugins/autotimer/src/AutoTimerSettings.py:54
-#: ../enigma2_plugins/cdinfo/src/plugin.py:56
-#: ../enigma2_plugins/genuinedreambox/src/plugin.py:81
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:65
-#: ../enigma2_plugins/networkbrowser/src/NetworkBrowser.py:498
-#: ../enigma2_plugins/webinterface/src/WebIfConfig.py:34
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Cancel"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/HarddiskSetup.py:48
-#: ../enigma2_master/lib/python/Screens/HarddiskSetup.py:48
-msgid "Capacity: "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Harddisk.py:437
-#: ../enigma2_master/lib/python/Components/Harddisk.py:437
-msgid "Card"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:19
-#: ../enigma2_master/lib/python/Components/Language.py:19
-msgid "Catalan"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/MovableScreen.py:32
-msgid "Center screen at the lower border"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/MovableScreen.py:26
-msgid "Center screen at the upper border"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:76
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:77
-msgid "Change active delay"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:469
-msgid "Change default recording offset?"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountManager.py:76
-msgid "Change hostname"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:198
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:311
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:198
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:311
-msgid "Change pin code"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:90
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:90
-msgid "Change service PIN"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:87
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:87
-msgid "Change service PINs"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:81
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:81
-msgid "Change setup PIN"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:315
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:315
-msgid "Change step size"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountManager.py:76
-msgid "Change the hostname of your Dreambox."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:756
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:756
-msgid "Changelog"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/AudioSelection.py:83
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:261
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:273
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:284
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:185
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:21
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:97
-#: ../enigma2_master/lib/python/Screens/AudioSelection.py:83
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:261
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:273
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:284
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:185
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:21
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:97
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Channel"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:85
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Channel Selection"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:61
-msgid "Channel audio:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEdit.py:333
-#: ../enigma2_master/lib/python/Screens/TimerEdit.py:333
-msgid "Channel not in services list"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:187
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:187
-msgid "Channel:"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:1004
-msgid "Channels"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:429
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:429
-msgid "Chap."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:430
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:430
-msgid "Chapter"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:165
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:165
-msgid "Chapter:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/HarddiskSetup.py:55
-#: ../enigma2_master/lib/python/Screens/HarddiskSetup.py:55
-msgid "Check"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/HarddiskSetup.py:29
-#: ../enigma2_master/lib/python/Screens/HarddiskSetup.py:29
-msgid "Checking Filesystem..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:224
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:224
-msgid "Choose a wireless network"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:152
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:152
-msgid "Choose backup files"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:151
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:151
-msgid "Choose backup location"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:735
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:735
-msgid "Choose image to download"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:231
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:231
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:331
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:459
-msgid "Choose target folder"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:155
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:155
-msgid "Choose upgrade source"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:33
-#: ../enigma2_master/lib/python/Tools/Transponder.py:33
-msgid "Circular left"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:34
-#: ../enigma2_master/lib/python/Tools/Transponder.py:34
-msgid "Circular right"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/plugin.py:27
-msgid "Classic"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEdit.py:167
-#: ../enigma2_master/lib/python/Screens/TimerEdit.py:167
-msgid "Cleanup"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:43
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:133
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:43
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:133
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/
-msgid "Cleanup Wizard"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:63
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:125
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:129
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:63
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:125
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:129
-msgid "Cleanup Wizard settings"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:129
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:129
-msgid "CleanupWizard"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:419
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:924
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:419
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:924
-msgid "Clear before scan"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:438
-msgid "Clear history on Exit:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:414
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:414
-msgid "Clear log"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InputDeviceSetup.py:49
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:39
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:696
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1098
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1356
-#: ../enigma2_experimental/lib/python/Screens/TaskView.py:51
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:186
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:60
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:235
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:57
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:33
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:417
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:525
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:78
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:399
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:495
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:30
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:171
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:471
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:553
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:680
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1075
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1154
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1465
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1676
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1972
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:95
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:205
-#: ../enigma2_master/lib/python/Screens/InputDeviceSetup.py:49
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:39
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:696
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1098
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1356
-#: ../enigma2_master/lib/python/Screens/TaskView.py:51
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:186
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:60
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:235
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:57
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:33
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:417
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:525
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:78
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:399
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:495
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:30
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:171
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:471
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:553
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:680
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1075
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1154
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1465
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1676
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1944
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:95
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:205
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:398
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:562
-#: ../enigma2_plugins/mytube/src/plugin.py:281
-#: ../enigma2_plugins/mytube/src/plugin.py:1280
-#: ../enigma2_plugins/mytube/src/plugin.py:1466
-#: ../enigma2_plugins/networkbrowser/src/MountManager.py:54
-#: ../enigma2_plugins/networkbrowser/src/MountView.py:63
-#: ../enigma2_plugins/networkbrowser/src/NetworkBrowser.py:107
-#: ../enigma2_plugins/networkbrowser/src/UserDialog.py:91
-#: ../enigma2_plugins/networkbrowser/src/UserManager.py:50
-msgid "Close"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerOverview.py:89
-msgid "Close and forget changes"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerOverview.py:101
-msgid "Close and save changes"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:191
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:191
-msgid "Close title selection"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:412
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:412
-msgid "Code rate high"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:413
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:413
-msgid "Code rate low"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:147
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:147
-msgid "Coderate HP"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:146
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:146
-msgid "Coderate LP"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:150
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:150
-msgid "Collection name"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:139
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:65
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:139
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:65
-msgid "Collection settings"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:91
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:91
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Color Format"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:189
-#: ../enigma2_plugins/mytube/src/plugin.py:80
-msgid "Comedy"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:315
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:327
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:315
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:327
-msgid "Command order"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:311
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:311
-msgid "Committed DiSEqC command"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:634
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:634
-msgid "Common Interface Assignment"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:860
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:860
-msgid "CommonInterface"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:874
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:874
-msgid "Communication"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Harddisk.py:438
-#: ../enigma2_master/lib/python/Components/Harddisk.py:438
-msgid "Compact Flash"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:535
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:536
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:592
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:535
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:536
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:592
-msgid "Complete"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:34
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:34
-msgid "Complex (allows mixing audio tracks and aspects)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:106
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:160
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:194
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:258
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:361
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:106
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:160
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:194
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:258
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:361
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Configuration Mode"
-msgstr ""
-
-#: ../enigma2_plugins/webinterface/src/plugin.py:540
-msgid "Configuration for the Webinterface"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerSettings.py:71
-msgid "Configure AutoTimer behavior"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:406
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:406
-msgid "Configure your internal LAN"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:405
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:405
-msgid "Configure your wireless LAN again"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ipkg.py:106
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1397
-#: ../enigma2_master/lib/python/Screens/Ipkg.py:106
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1397
-msgid "Configuring"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEdit.py:329
-#: ../enigma2_master/lib/python/Screens/TimerEdit.py:329
-msgid "Conflicting timer"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/Modem/plugin.py:274
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:206
-#: ../enigma2_master/lib/python/Plugins/Extensions/Modem/plugin.py:274
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:206
-msgid "Connect"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:466
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:466
-msgid "Connect to a Wireless Network"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:142
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:299
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:142
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:299
-msgid "Connected to"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/Modem/plugin.py:163
-#: ../enigma2_master/lib/python/Plugins/Extensions/Modem/plugin.py:163
-msgid "Connected!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:148
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:148
-msgid "Constellation"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/Process.py:294
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/Process.py:294
-msgid "Content does not fit on DVD!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:612
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:612
-msgid "Continue"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:525
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:525
-msgid "Continue playing"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:89
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoTune/VideoFinetune.py:145
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:89
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoTune/VideoFinetune.py:145
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Contrast"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:646
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:646
-msgid "Could not connect to Dreambox .NFI Image Feed Server:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/Process.py:293
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/Process.py:293
-msgid "Could not load Medium! No disc inserted?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:222
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:222
-msgid "Could not open Picture in Picture"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1555
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1555
-#, python-format
-msgid "Couldn't record due to conflicting timer %s"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:420
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:420
-msgid "Crashlog settings"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:425
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:425
-msgid "CrashlogAutoSubmit"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:425
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:425
-msgid "CrashlogAutoSubmit settings"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:91
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:91
-msgid "CrashlogAutoSubmit settings..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:339
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:339
-msgid ""
-"Crashlogs found!\n"
-"Send them to Dream Multimedia?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:35
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/Process.py:900
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/Process.py:941
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:124
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:35
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/Process.py:900
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/Process.py:941
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:124
-msgid "Create DVD-ISO"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerOverview.py:220
-msgid "Create a new timer using the classic editor"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerOverview.py:222
-msgid "Create a new timer using the wizard"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Harddisk.py:236
-#: ../enigma2_master/lib/python/Components/Harddisk.py:236
-msgid "Create movie folder failed"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:250
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:250
-#, python-format
-msgid "Creating directory %s failed."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Harddisk.py:236
-#: ../enigma2_master/lib/python/Components/Harddisk.py:236
-msgid "Creating partition failed"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:20
-#: ../enigma2_master/lib/python/Components/Language.py:20
-msgid "Croatian"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:986
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:986
-msgid "Current Transponder"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InputDeviceSetup.py:223
-#: ../enigma2_master/lib/python/Screens/InputDeviceSetup.py:223
-msgid "Current device: "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:362
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:362
-msgid "Current settings:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InputDeviceSetup.py:225
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:113
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:330
-#: ../enigma2_master/lib/python/Screens/InputDeviceSetup.py:225
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:113
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:330
-msgid "Current value: "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/FrontprocessorUpgrade/plugin.py:35
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/FrontprocessorUpgrade/plugin.py:35
-msgid "Current version:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:738
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:738
-msgid "Currently installed image"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:287
-#, python-format
-msgid "Custom (%s)"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:554
-msgid "Custom location"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:513
-msgid "Custom offset"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:84
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:84
-msgid "Cut"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:409
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:409
-msgid "Cutlist editor..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:21
-#: ../enigma2_master/lib/python/Components/Language.py:21
-msgid "Czech"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:204
-#: ../enigma2_plugins/mytube/src/plugin.py:95
-msgid "Czech Republic"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1335
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1335
-msgid "DHCP"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:322
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:322
-msgid "DUAL LAYER DVD"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:566
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:566
-msgid "DVB-S"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:567
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:567
-msgid "DVB-S2"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:65
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:57
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:65
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:57
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "DVD File Browser"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:715
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:715
-msgid "DVD Player"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:102
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:102
-msgid "DVD Titlelist"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:58
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:163
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:119
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:58
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:163
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:119
-msgid "DVD media toolbox"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:22
-#: ../enigma2_master/lib/python/Components/Language.py:22
-msgid "Danish"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimeDateInput.py:46
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:171
-#: ../enigma2_master/lib/python/Screens/TimeDateInput.py:46
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:171
-msgid "Date"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:93
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:93
-msgid "Decide if you want to enable or disable the Cleanup Wizard."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:162
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:162
-msgid "Decide what should be done when crashlogs are found."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:165
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:165
-msgid "Decide what should happen to the crashlogs after submission."
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:79
-msgid "Decrease delay"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:83
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:85
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:87
-#, python-format
-msgid "Decrease delay by %i ms (can be set)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:82
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:82
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Deep Standby"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:118
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:50
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:118
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:50
-msgid "Default"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:862
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:862
-msgid "Default Settings"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/RecordPaths.py:91
-#: ../enigma2_experimental/lib/python/Screens/RecordPaths.py:109
-#: ../enigma2_master/lib/python/Screens/RecordPaths.py:91
-#: ../enigma2_master/lib/python/Screens/RecordPaths.py:109
-msgid "Default movie location"
-msgstr ""
-
-#: ../enigma2_plugins/cdinfo/src/plugin.py:58
-msgid "Defaults"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:241
-#: ../enigma2_experimental/lib/python/Screens/TimerEdit.py:133
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:120
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:207
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:241
-#: ../enigma2_master/lib/python/Screens/TimerEdit.py:133
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:120
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:207
-#: ../enigma2_plugins/autotimer/src/AutoTimerOverview.py:75
-#: ../enigma2_plugins/networkbrowser/src/UserManager.py:52
-msgid "Delete"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:23
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:23
-msgid "Delete crashlogs"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:411
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:502
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:411
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:502
-msgid "Delete entry"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:145
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:663
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:722
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:145
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:663
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:722
-msgid "Delete failed!"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountView.py:64
-msgid "Delete mount"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:401
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:401
-#, python-format
-msgid ""
-"Delete no more configured satellite\n"
-"%s?"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:229
-#: ../enigma2_plugins/mytube/src/plugin.py:120
-msgid "Descending"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:142
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:20
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:81
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:97
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:142
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:20
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:81
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:97
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:493
-#: ../enigma2_plugins/autotimer/src/AutoTimerWizard.py:86
-msgid "Description"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:153
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:153
-msgid "Deselect"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1178
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1178
-msgid "Details for plugin: "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/About.py:34
-#: ../enigma2_master/lib/python/Screens/About.py:34
-msgid "Detected HDD:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/About.py:17
-#: ../enigma2_master/lib/python/Screens/About.py:17
-msgid "Detected NIMs:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:515
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1156
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:515
-#: ../enigma2_master/lib/python/Components/NimManager.py:1156
-msgid "DiSEqC A/B"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:515
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1156
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:515
-#: ../enigma2_master/lib/python/Components/NimManager.py:1156
-msgid "DiSEqC A/B/C/D"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:307
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:307
-msgid "DiSEqC mode"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:330
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:330
-msgid "DiSEqC repeats"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:568
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:568
-msgid "DiSEqC-Tester settings"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/Modem/plugin.py:189
-#: ../enigma2_master/lib/python/Plugins/Extensions/Modem/plugin.py:189
-msgid "Dialing:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:103
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:103
-msgid "Digital contour removal"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountView.py:85
-msgid "Dir:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:33
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:33
-msgid "Direct playback of linked titles without menu"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:388
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:388
-#, python-format
-msgid "Directory %s nonexistent."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/settings.py:43
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/settings.py:43
-msgid "Directory browser"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEdit.py:146
-#: ../enigma2_experimental/lib/python/Screens/TimerEdit.py:416
-#: ../enigma2_experimental/lib/python/Screens/TimerEdit.py:436
-#: ../enigma2_master/lib/python/Screens/TimerEdit.py:146
-#: ../enigma2_master/lib/python/Screens/TimerEdit.py:416
-#: ../enigma2_master/lib/python/Screens/TimerEdit.py:436
-msgid "Disable"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1430
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1430
-msgid "Disable Picture in Picture"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:21
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:21
-msgid "Disable crashlog reporting"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:78
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:78
-msgid "Disable timer"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:32
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:105
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:471
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:32
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:105
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:471
-msgid "Disabled"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:75
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:80
-msgid "Discard changes and close plugin"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/MovableScreen.py:18
-#: ../enigma2_plugins/ac3lipsync/src/MovableScreen.py:23
-msgid "Discard changes and close screen"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/Modem/plugin.py:268
-#: ../enigma2_master/lib/python/Plugins/Extensions/Modem/plugin.py:268
-msgid "Disconnect"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:86
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:86
-msgid "Display 16:9 content as"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:82
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:82
-msgid "Display 4:3 content as"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:83
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:83
-msgid "Display >16:9 content as"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:870
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:870
-msgid "Display and Userinterface"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:419
-msgid "Display search results by:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/PluginBrowser.py:153
-#: ../enigma2_master/lib/python/Screens/PluginBrowser.py:153
-#, python-format
-msgid ""
-"Do you really want to REMOVE\n"
-"the plugin \"%s\"?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/HarddiskSetup.py:84
-#: ../enigma2_master/lib/python/Screens/HarddiskSetup.py:84
-msgid ""
-"Do you really want to check the filesystem?\n"
-"This could take lots of time!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/EpgSelection.py:236
-#: ../enigma2_experimental/lib/python/Screens/EventView.py:86
-#: ../enigma2_experimental/lib/python/Screens/InfoBar.py:204
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:128
-#: ../enigma2_experimental/lib/python/Screens/TimerEdit.py:205
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:590
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:655
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:708
-#: ../enigma2_master/lib/python/Screens/EpgSelection.py:236
-#: ../enigma2_master/lib/python/Screens/EventView.py:86
-#: ../enigma2_master/lib/python/Screens/InfoBar.py:204
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:128
-#: ../enigma2_master/lib/python/Screens/TimerEdit.py:205
-#: ../enigma2_master/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:590
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:655
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:708
-#: ../enigma2_plugins/autotimer/src/AutoTimerOverview.py:183
-#, python-format
-msgid "Do you really want to delete %s?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/PluginBrowser.py:151
-#: ../enigma2_master/lib/python/Screens/PluginBrowser.py:151
-#, python-format
-msgid ""
-"Do you really want to download\n"
-"the plugin \"%s\"?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:376
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:376
-msgid "Do you really want to exit?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/HarddiskSetup.py:82
-#: ../enigma2_master/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 ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:269
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:269
-#, python-format
-msgid "Do you really want to remove directory %s from the disk?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:224
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:224
-#, python-format
-msgid "Do you really want to remove your bookmark of %s?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/Process.py:434
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:255
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/Process.py:434
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:255
-msgid "Do you want to burn this collection to DVD medium?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:560
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:560
-#, python-format
-msgid "Do you want to download the image to %s ?"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/NetworkBrowser.py:391
-#: ../enigma2_plugins/networkbrowser/src/NetworkBrowser.py:393
-#: ../enigma2_plugins/networkbrowser/src/NetworkBrowser.py:406
-msgid "Do you want to enter a username and password for this host?\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1280
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1789
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1280
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1787
-msgid "Do you want to install the package:\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:608
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:608
-msgid "Do you want to play DVD in drive?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/Process.py:418
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/Process.py:418
-msgid "Do you want to preview this DVD before burning?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:921
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1287
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1302
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1440
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1796
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1818
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:921
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1287
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1302
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1440
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1794
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1816
-msgid "Do you want to reboot your Dreambox?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1273
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1781
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1273
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1779
-msgid "Do you want to remove the package:\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:239
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:239
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-msgid "Do you want to restore your settings?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1912
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1912
-msgid "Do you want to resume this playback?"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:757
-msgid "Do you want to see more entries?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:168
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:168
-msgid ""
-"Do you want to submit your email address and name so that we can contact you "
-"if needed?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:233
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:233
-msgid "Do you want to update your Dreambox?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:37
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:136
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:37
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:136
-msgid ""
-"Do you want to update your Dreambox?\n"
-"After pressing OK, please wait!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1785
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1783
-msgid "Do you want to upgrade the package:\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:21
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:21
-msgid "Don't ask, just send"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEdit.py:102
-#: ../enigma2_master/lib/python/Screens/TimerEdit.py:102
-msgid "Don't stop current event but disable coming events"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1420
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1420
-#, python-format
-msgid "Done - Installed or upgraded %d packages"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ipkg.py:58
-#: ../enigma2_master/lib/python/Screens/Ipkg.py:58
-#, python-format
-msgid "Done - Installed, upgraded or removed %d packages with %d errors"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:499
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:508
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:499
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:508
-msgid "Download"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:523
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:724
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:731
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:523
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:724
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:731
-#, python-format
-msgid "Download %s from Server"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:31
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:812
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/plugin.py:20
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/plugin.py:24
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:31
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:812
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/plugin.py:20
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/plugin.py:24
-msgid "Download .NFI-Files for USB-Flasher"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/PluginBrowser.py:76
-#: ../enigma2_master/lib/python/Screens/PluginBrowser.py:76
-msgid "Download Plugins"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:538
-msgid "Download Video"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:435
-msgid "Download location"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/PluginBrowser.py:164
-#: ../enigma2_master/lib/python/Screens/PluginBrowser.py:164
-msgid "Downloadable new plugins"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ipkg.py:83
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:73
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:101
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1374
-#: ../enigma2_master/lib/python/Screens/Ipkg.py:83
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:73
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:101
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1374
-msgid "Downloading"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/PluginBrowser.py:122
-#: ../enigma2_master/lib/python/Screens/PluginBrowser.py:122
-msgid "Downloading plugin information. Please wait..."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:1309
-msgid "Downloading screenshots. Please wait..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:33
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:33
-msgid "Dreambox format data DVD (HDTV compatible)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1006
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1006
-msgid "Dreambox software because updates are available."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:1103
-#: ../enigma2_plugins/mytube/src/plugin.py:1335
-msgid "Duration: "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:23
-#: ../enigma2_master/lib/python/Components/Language.py:23
-msgid "Dutch"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:100
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:100
-msgid "Dynamic contrast"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:973
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:397
-#: ../enigma2_experimental/lib/python/Components/ServiceScan.py:51
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:484
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:973
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:397
-#: ../enigma2_master/lib/python/Components/ServiceScan.py:51
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:484
-msgid "E"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:498
-msgid "EPG encoding"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/ServiceScan.py:101
-#: ../enigma2_master/lib/python/Components/ServiceScan.py:101
-#, python-format
-msgid "ERROR - failed to scan (%s)!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1163
-#: ../enigma2_master/lib/python/Components/NimManager.py:1163
-msgid "East"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEdit.py:424
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:34
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1466
-#: ../enigma2_master/lib/python/Screens/TimerEdit.py:424
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:34
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1466
-msgid "Edit"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:421
-msgid "Edit AutoTimer"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:832
-msgid "Edit AutoTimer filters"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:1035
-msgid "Edit AutoTimer services"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:376
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:376
-msgid "Edit DNS"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/plugin.py:158
-#: ../enigma2_plugins/autotimer/src/plugin.py:163
-msgid "Edit Timers and scan for new Events"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:43
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:43
-msgid "Edit Title"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:99
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:99
-msgid "Edit bouquets list"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:128
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:128
-msgid "Edit chapters of current title"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerOverview.py:216
-msgid "Edit new timer defaults"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerOverview.py:88
-msgid "Edit selected AutoTimer"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:96
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:96
-msgid "Edit services list"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1353
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:510
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/settings.py:66
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1353
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:510
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/settings.py:66
-msgid "Edit settings"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:850
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:850
-msgid "Edit the Nameserver configuration of your Dreambox.\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:846
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:846
-msgid "Edit the network configuration of your Dreambox.\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:188
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:188
-msgid "Edit title"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1591
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1591
-msgid "Edit upgrade source url."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:1057
-msgid "Editing"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerSettings.py:45
-msgid "Editor for new AutoTimers"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:193
-#: ../enigma2_plugins/mytube/src/plugin.py:84
-msgid "Education"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:872
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:872
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Electronic Program Guide"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEdit.py:138
-#: ../enigma2_experimental/lib/python/Screens/TimerEdit.py:408
-#: ../enigma2_experimental/lib/python/Screens/TimerEdit.py:428
-#: ../enigma2_master/lib/python/Screens/TimerEdit.py:138
-#: ../enigma2_master/lib/python/Screens/TimerEdit.py:408
-#: ../enigma2_master/lib/python/Screens/TimerEdit.py:428
-msgid "Enable"
-msgstr ""
-
-#: ../enigma2_plugins/webinterface/src/WebIfConfig.py:61
-msgid "Enable /media"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:199
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:199
-msgid "Enable 5V for active antenna"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:75
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:75
-msgid "Enable Cleanup Wizard?"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:876
-msgid "Enable Filtering"
-msgstr ""
-
-#: ../enigma2_plugins/webinterface/src/WebIfConfig.py:65
-msgid "Enable HTTP Access"
-msgstr ""
-
-#: ../enigma2_plugins/webinterface/src/WebIfConfig.py:71
-msgid "Enable HTTP Authentication"
-msgstr ""
-
-#: ../enigma2_plugins/webinterface/src/WebIfConfig.py:76
-msgid "Enable HTTPS Access"
-msgstr ""
-
-#: ../enigma2_plugins/webinterface/src/WebIfConfig.py:81
-msgid "Enable HTTPS Authentication"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:1056
-msgid "Enable Service Restriction"
-msgstr ""
-
-#: ../enigma2_plugins/webinterface/src/WebIfConfig.py:87
-msgid "Enable Streaming Authentication"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:73
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:73
-msgid "Enable parental control"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerSettings.py:41
-msgid ""
-"Enable this to be able to access the AutoTimer Overview from within the "
-"extension menu."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:76
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:76
-msgid "Enable timer"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:30
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:109
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:475
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:30
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:109
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:475
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:492
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:128
-#: ../enigma2_plugins/autotimer/src/AutoTimerWizard.py:85
-msgid "Enabled"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:461
-msgid ""
-"Encoding the channel uses for it's EPG data. You only need to change this if "
-"you're searching for special characters like the german umlauts."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:276
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:276
-msgid "Encrypted: "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:522
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:522
-msgid "Encryption"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:530
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:533
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:530
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:533
-msgid "Encryption Key"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:529
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:529
-msgid "Encryption Keytype"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:526
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:526
-msgid "Encryption Type"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:263
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:81
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:263
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:81
-msgid "Encryption:"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:538
-msgid "End of \"after event\" timespan"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:510
-#: ../enigma2_plugins/autotimer/src/AutoTimerWizard.py:79
-msgid "End of timespan"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:51
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:345
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:51
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:345
-msgid "End time"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:181
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:181
-msgid "EndTime"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:16
-#: ../enigma2_master/lib/python/Components/Language.py:16
-msgid "English"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:80
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:80
-msgid ""
-"Enigma2 Skinselector\n"
-"\n"
-"If you experience any problems please contact\n"
-"stephan@reichholf.net\n"
-"\n"
-"© 2006 - Stephan Reichholf"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/NetworkBrowser.py:526
-msgid "Enter IP to scan..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:379
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:379
-msgid "Enter main menu..."
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountManager.py:108
-msgid "Enter new hostname for your Dreambox"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:215
-msgid "Enter options:"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:219
-#: ../enigma2_plugins/networkbrowser/src/UserDialog.py:141
-msgid "Enter password:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:19
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:19
-msgid "Enter pin code"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:213
-msgid "Enter share directory:"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:211
-msgid "Enter share name:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:198
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:198
-msgid "Enter the service pin"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/UserDialog.py:94
-msgid "Enter user and password for host: "
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:217
-#: ../enigma2_plugins/networkbrowser/src/UserDialog.py:139
-msgid "Enter username:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:171
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:171
-msgid "Enter your email address so that we can contact you if needed."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:577
-msgid "Enter your search term(s)"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:192
-#: ../enigma2_plugins/mytube/src/plugin.py:83
-msgid "Entertainment"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Task.py:284
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:224
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:614
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1430
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1756
-#: ../enigma2_master/lib/python/Components/Task.py:284
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:224
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:614
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1430
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1754
-msgid "Error"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/TuxboxPlugins/pluginrunner.py:34
-#: ../enigma2_master/lib/python/Plugins/Extensions/TuxboxPlugins/pluginrunner.py:34
-msgid "Error executing plugin"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Task.py:282
-#: ../enigma2_master/lib/python/Components/Task.py:282
-#, python-format
-msgid ""
-"Error: %s\n"
-"Retry?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:24
-#: ../enigma2_master/lib/python/Components/Language.py:24
-msgid "Estonian"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Harddisk.py:236
-#: ../enigma2_master/lib/python/Components/Harddisk.py:236
-msgid "Everything is fine"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:143
-msgid "Exact match"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:312
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:315
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:312
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:315
-msgid "Exceeds dual layer medium!"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:885
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:902
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:927
-msgid "Exclude"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:532
-msgid "Execute \"after event\" during timespan"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Console.py:43
-#: ../enigma2_master/lib/python/Screens/Console.py:43
-msgid "Execution Progress:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Console.py:55
-#: ../enigma2_master/lib/python/Screens/Console.py:55
-msgid "Execution finished!!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:91
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:91
-msgid "Exif"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:32
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:130
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:525
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:32
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:130
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:525
-msgid "Exit"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:180
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:180
-msgid "Exit editor"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InputDeviceSetup.py:60
-#: ../enigma2_experimental/lib/python/Screens/InputDeviceSetup.py:66
-#: ../enigma2_master/lib/python/Screens/InputDeviceSetup.py:60
-#: ../enigma2_master/lib/python/Screens/InputDeviceSetup.py:66
-msgid "Exit input device selection."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:159
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:407
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:159
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:407
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/
-msgid "Exit network wizard"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:65
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:71
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:65
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:71
-msgid "Exit the cleanup wizard"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:50
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:50
-#: ../enigma2_plugins/networkbrowser/src/NetworkBrowser.py:110
-msgid "Expert"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:908
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:908
-msgid "Extended Networksetup Plugin..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:904
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:904
-msgid "Extended Setup..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:141
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:141
-msgid "Extended Software"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:145
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:145
-msgid "Extended Software Plugin"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:574
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:574
-msgid "Extensions management"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:377
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:379
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:406
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:145
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:447
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:449
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:85
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:87
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:377
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:379
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:406
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:145
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:447
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:449
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:85
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:87
-msgid "FEC"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Task.py:42
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/Process.py:458
-#: ../enigma2_master/lib/python/Components/Task.py:42
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/Process.py:458
-msgid "Failed"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Sensors.py:70
-#: ../enigma2_master/lib/python/Components/Sensors.py:70
-#, python-format
-msgid "Fan %d"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py:127
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py:127
-#, python-format
-msgid "Fan %d PWM"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py:126
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py:126
-#, python-format
-msgid "Fan %d Voltage"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1165
-#: ../enigma2_master/lib/python/Components/NimManager.py:1165
-msgid "Fast"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:312
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:312
-msgid "Fast DiSEqC"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1165
-#: ../enigma2_master/lib/python/Components/NimManager.py:1165
-msgid "Fast epoch"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:711
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:528
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:711
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:528
-msgid "Favourites"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:417
-#: ../enigma2_plugins/mytube/src/plugin.py:476
-msgid "Fetching feed entries"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:478
-msgid "Fetching search entries"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Harddisk.py:236
-#: ../enigma2_master/lib/python/Components/Harddisk.py:236
-msgid "Filesystem contains uncorrectable errors"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:181
-#: ../enigma2_plugins/mytube/src/plugin.py:72
-msgid "Film & Animation"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:877
-msgid "Filter"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Task.py:42
-#: ../enigma2_master/lib/python/Components/Task.py:42
-msgid "Finished"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:218
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:218
-msgid "Finished configuring your network"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:975
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:975
-#: ../enigma2_plugins/networkbrowser/src/MountManager.py:132
-msgid "Finished restarting your network"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:25
-#: ../enigma2_master/lib/python/Components/Language.py:25
-msgid "Finnish"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:167
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:167
-msgid "Flash"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:211
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:211
-msgid "Flashing failed"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:979
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:979
-msgid "Following tasks will be done after you press OK!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:135
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:135
-msgid "Format"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerResource.py:18
-#: ../enigma2_plugins/autotimer/src/plugin.py:116
-#, python-format
-msgid ""
-"Found a total of %d matching Events.\n"
-"%d Timer were added and %d modified."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:181
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:181
-msgid "Frame size in full view"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:205
-#: ../enigma2_plugins/mytube/src/plugin.py:96
-msgid "France"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:26
-#: ../enigma2_master/lib/python/Components/Language.py:26
-msgid "French"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:263
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:277
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:288
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:372
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:402
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:409
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:138
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:442
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:80
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:263
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:277
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:288
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:372
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:402
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:409
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:138
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:442
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:80
-msgid "Frequency"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1458
-#: ../enigma2_master/lib/python/Components/NimManager.py:1458
-msgid "Frequency bands"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:182
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:182
-msgid "Frequency scan step size(khz)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1458
-#: ../enigma2_master/lib/python/Components/NimManager.py:1458
-msgid "Frequency steps"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/EpgSelection.py:326
-#: ../enigma2_experimental/lib/python/Components/EpgList.py:38
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:24
-#: ../enigma2_experimental/lib/python/Tools/FuzzyDate.py:13
-#: ../enigma2_master/lib/python/Screens/EpgSelection.py:326
-#: ../enigma2_master/lib/python/Components/EpgList.py:38
-#: ../enigma2_master/lib/python/Components/TimerList.py:24
-#: ../enigma2_master/lib/python/Tools/FuzzyDate.py:13
-msgid "Fri"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:124
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:167
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:124
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:167
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:48
-msgid "Friday"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:44
-#: ../enigma2_master/lib/python/Components/Language.py:44
-msgid "Frisian"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/About.py:23
-#: ../enigma2_master/lib/python/Screens/About.py:23
-#, python-format
-msgid "Frontprocessor version: %d"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Harddisk.py:236
-#: ../enigma2_master/lib/python/Components/Harddisk.py:236
-msgid "Fsck failed"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:102
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:102
-msgid ""
-"GUI needs a restart to apply a new skin\n"
-"Do you want to Restart the GUI now?"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:188
-#: ../enigma2_plugins/mytube/src/plugin.py:79
-msgid "Gaming"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:366
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:401
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:404
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:502
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:366
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:401
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:404
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:502
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Gateway"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:102
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:102
-msgid "General AC3 Delay"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:103
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:103
-msgid "General PCM Delay"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:133
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:133
-msgid "Genre"
-msgstr ""
-
-#: ../enigma2_plugins/genuinedreambox/src/plugin.py:71
-msgid "Genuine Dreambox"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:398
-#: ../enigma2_plugins/mytube/src/plugin.py:422
-#: ../enigma2_plugins/mytube/src/plugin.py:464
-msgid "Genuine Dreambox validation failed!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:17
-#: ../enigma2_master/lib/python/Components/Language.py:17
-msgid "German"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:206
-#: ../enigma2_plugins/mytube/src/plugin.py:97
-msgid "Germany"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:731
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:731
-msgid "Get latest experimental image"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:724
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:724
-msgid "Get latest release image"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/PluginBrowser.py:124
-#: ../enigma2_master/lib/python/Screens/PluginBrowser.py:124
-msgid "Getting plugin information. Please wait..."
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:54
-msgid "Global delay"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:195
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:253
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:195
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:253
-msgid "Goto 0"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:250
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:250
-msgid "Goto position"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py:95
-#: ../enigma2_master/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py:95
-msgid "Graphical Multi EPG"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:207
-#: ../enigma2_plugins/mytube/src/plugin.py:98
-msgid "Great Britain"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:27
-#: ../enigma2_master/lib/python/Components/Language.py:27
-msgid "Greek"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:98
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:98
-msgid "Green boost"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:150
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:150
-msgid "Guard Interval"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:416
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:416
-msgid "Guard interval mode"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerSettings.py:43
-msgid "Guess existing timer based on begin/end"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:237
-#: ../enigma2_plugins/mytube/src/plugin.py:128
-#: ../enigma2_plugins/mytube/src/plugin.py:790
-msgid "HD videos"
-msgstr ""
-
-#: ../enigma2_plugins/webinterface/src/WebIfConfig.py:70
-msgid "HTTP Port"
-msgstr ""
-
-#: ../enigma2_plugins/webinterface/src/WebIfConfig.py:80
-msgid "HTTPS Port"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Harddisk.py:436
-#: ../enigma2_master/lib/python/Components/Harddisk.py:436
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Harddisk"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:1484
-msgid "Help"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:517
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:517
-msgid "Hidden network SSID"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:75
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:77
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:83
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:85
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:430
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:432
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:438
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:440
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:75
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:77
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:83
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:85
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:430
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:432
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:438
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:440
-msgid "Hidden networkname"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:151
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:151
-msgid "Hierarchy Information"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:417
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:417
-msgid "Hierarchy mode"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ci.py:335
-#: ../enigma2_master/lib/python/Screens/Ci.py:335
-msgid "High bitrate support"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:283
-msgid "History"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:209
-#: ../enigma2_plugins/mytube/src/plugin.py:100
-msgid "Holland"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:210
-#: ../enigma2_plugins/mytube/src/plugin.py:101
-msgid "Hong Kong"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:31
-#: ../enigma2_master/lib/python/Tools/Transponder.py:31
-msgid "Horizontal"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1624
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1624
-msgid "How many minutes do you want to record?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:119
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:119
-msgid "How to handle found crashlogs?"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:194
-#: ../enigma2_plugins/mytube/src/plugin.py:85
-msgid "Howto & Style"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:91
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:91
-msgid "Hue"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:28
-#: ../enigma2_master/lib/python/Components/Language.py:28
-msgid "Hungarian"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:364
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:497
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1341
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:364
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:497
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1341
-#: ../enigma2_plugins/networkbrowser/src/NetworkBrowser.py:514
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "IP Address"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountView.py:84
-msgid "IP:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/Process.py:299
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/Process.py:299
-msgid "ISO file is too large for this filesystem!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:154
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:154
-msgid "ISO path"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:31
-#: ../enigma2_master/lib/python/Components/Language.py:31
-msgid "Icelandic"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerSettings.py:43
-#, python-format
-msgid ""
-"If this is enabled an existing timer will also be considered recording an "
-"event if it records at least 80% of the it."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Scart.py:30
-#: ../enigma2_experimental/lib/python/Screens/Scart.py:32
-#: ../enigma2_master/lib/python/Screens/Scart.py:30
-#: ../enigma2_master/lib/python/Screens/Scart.py:32
-msgid ""
-"If you see this, something is wrong with\n"
-"your scart connection. Press OK to return."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoTune/VideoFinetune.py:87
-#: ../enigma2_master/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 ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:220
-msgid "Import AutoTimer"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerOverview.py:213
-msgid "Import existing Timer"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerOverview.py:214
-msgid "Import from EPG"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Task.py:42
-#: ../enigma2_master/lib/python/Components/Task.py:42
-msgid "In Progress"
-msgstr ""
-
-#: ../enigma2_experimental/RecordTimer.py:253
-#: ../enigma2_master/RecordTimer.py:253
-msgid ""
-"In order to record a timer, the TV was switched to the recording service!\n"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:890
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:907
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:928
-msgid "Include"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:121
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:121
-msgid "Include your email and name (optional) in the mail?"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:78
-msgid "Increase delay"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:84
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:86
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:88
-#, python-format
-msgid "Increase delay by %i ms (can be set)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:303
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:303
-msgid "Increased voltage"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:211
-#: ../enigma2_plugins/mytube/src/plugin.py:102
-msgid "India"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:250
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:250
-msgid "Info"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ci.py:322
-#: ../enigma2_master/lib/python/Screens/Ci.py:322
-msgid "Init"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/RecordPaths.py:125
-#: ../enigma2_master/lib/python/Screens/RecordPaths.py:125
-msgid "Initial location in new timers"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/HarddiskSetup.py:53
-#: ../enigma2_master/lib/python/Screens/HarddiskSetup.py:53
-msgid "Initialize"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/HarddiskSetup.py:26
-#: ../enigma2_master/lib/python/Screens/HarddiskSetup.py:26
-msgid "Initializing Harddisk..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InputBox.py:11
-#: ../enigma2_master/lib/python/Screens/InputBox.py:11
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Input"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InputDeviceSetup.py:154
-#: ../enigma2_master/lib/python/Screens/InputDeviceSetup.py:154
-msgid "Input device setup"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:662
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1215
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1973
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:662
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1215
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1945
-msgid "Install"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:2006
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1978
-msgid "Install extensions."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:133
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:133
-msgid "Install local extension"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:921
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:921
-msgid "Install or remove finished."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/DefaultWizard.py:107
-#: ../enigma2_master/lib/python/Screens/DefaultWizard.py:107
-msgid "Install settings, skins, software..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1287
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1287
-msgid "Installation finished."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ipkg.py:94
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1018
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1385
-#: ../enigma2_master/lib/python/Screens/Ipkg.py:94
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1018
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1385
-msgid "Installing"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1490
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1490
-msgid "Instant Record..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/RecordPaths.py:95
-#: ../enigma2_master/lib/python/Screens/RecordPaths.py:95
-msgid "Instant record location"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:276
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:276
-msgid "Interface: "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:49
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:49
-msgid "Intermediate"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Harddisk.py:443
-#: ../enigma2_master/lib/python/Components/Harddisk.py:443
-msgid "Internal Flash"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Network.py:340
-#: ../enigma2_master/lib/python/Components/Network.py:340
-msgid "Internal LAN adapter."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:401
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:401
-msgid "Invalid Location"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:275
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:275
-#, python-format
-msgid "Invalid directory selected: %s"
-msgstr ""
-
-#: ../enigma2_plugins/genuinedreambox/src/plugin.py:304
-msgid "Invalid response from Security service pls restart again"
-msgstr ""
-
-#: ../enigma2_plugins/genuinedreambox/src/plugin.py:132
-msgid "Invalid response from server."
-msgstr ""
-
-#: ../enigma2_plugins/genuinedreambox/src/plugin.py:177
-#, python-format
-msgid "Invalid response from server. Please report: %s"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:212
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:266
-msgid "Invalid selection"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:373
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:403
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:410
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:142
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:443
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:81
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:373
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:403
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:410
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:142
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:443
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:81
-msgid "Inversion"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:2025
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1997
-msgid "Ipkg"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:212
-#: ../enigma2_plugins/mytube/src/plugin.py:103
-msgid "Ireland"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:145
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:145
-msgid "Is this videomode ok?"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:213
-#: ../enigma2_plugins/mytube/src/plugin.py:104
-msgid "Israel"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:32
-#: ../enigma2_master/lib/python/Components/Language.py:32
-msgid "Italian"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:214
-#: ../enigma2_plugins/mytube/src/plugin.py:105
-msgid "Italy"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:215
-#: ../enigma2_plugins/mytube/src/plugin.py:106
-msgid "Japan"
-msgstr ""
-
-#. TRANSLATORS: (aspect ratio policy: display as fullscreen, even if this breaks the aspect)
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:100
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:110
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:100
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:110
-msgid "Just Scale"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:264
-#, python-format
-msgid "Key %(Key)s successfully set to %(delay)i ms"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:247
-#, python-format
-msgid "Key %(key)s (current value: %(value)i ms)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1319
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1319
-msgid "LAN Adapter"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Network.py:326
-#: ../enigma2_experimental/lib/python/Components/Network.py:329
-#: ../enigma2_master/lib/python/Components/Network.py:326
-#: ../enigma2_master/lib/python/Components/Network.py:329
-msgid "LAN connection"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:244
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:244
-msgid "LNB"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:249
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:249
-msgid "LOF"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:253
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:265
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:253
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:265
-msgid "LOF/H"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:252
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:264
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:252
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:264
-msgid "LOF/L"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:97
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:161
-#: ../enigma2_master/lib/python/Components/Language.py:97
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:161
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Language selection"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:49
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:49
-msgid "Last config"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:116
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:116
-msgid "Last speed"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:40
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:334
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:40
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:334
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Latitude"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:30
-#: ../enigma2_master/lib/python/Components/Language.py:30
-msgid "Latvian"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:532
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:532
-msgid "Leave DVD Player?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/VideoEnhancement.py:149
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/VideoEnhancement.py:149
-msgid "Left"
-msgstr ""
-
-#. TRANSLATORS: (aspect ratio policy: black bars on top/bottom) in doubt, keep english term.
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:96
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:96
-msgid "Letterbox"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:245
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:245
-msgid "Limit east"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:244
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:244
-msgid "Limit west"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:243
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:243
-msgid "Limits off"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:246
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:246
-msgid "Limits on"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:260
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:78
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:260
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:78
-msgid "Link Quality:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:867
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:146
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:867
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:146
-msgid "Link:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:33
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:33
-msgid "Linked titles with a DVD menu"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/config.py:1138
-#: ../enigma2_experimental/lib/python/Components/FileList.py:177
-#: ../enigma2_experimental/lib/python/Components/FileList.py:397
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:561
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:717
-#: ../enigma2_master/lib/python/Components/config.py:1138
-#: ../enigma2_master/lib/python/Components/FileList.py:177
-#: ../enigma2_master/lib/python/Components/FileList.py:397
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:561
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:717
-msgid "List of Storage Devices"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:29
-#: ../enigma2_master/lib/python/Components/Language.py:29
-msgid "Lithuanian"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:110
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:110
-msgid "Load"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:423
-msgid "Load feed on startup:"
-msgstr ""
-
-#: ../enigma2_plugins/webinterface/src/WebIfConfig.py:64
-msgid "Load movie-length"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1328
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1328
-msgid "Local Network"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:178
-msgid "Local share name"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:188
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:188
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:191
-msgid "Location"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/RecordPaths.py:133
-#: ../enigma2_master/lib/python/Screens/RecordPaths.py:133
-msgid "Location for instant recordings"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:606
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:606
-msgid "Log results to harddisk"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/HelpMenu.py:38
-#: ../enigma2_master/lib/python/Screens/HelpMenu.py:38
-msgid "Long Keypress"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/RecordingConfig.py:14
-#: ../enigma2_master/lib/python/Components/RecordingConfig.py:14
-msgid "Long filenames"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:38
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:332
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:38
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:332
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Longitude"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:476
-msgid "Lower bound of timespan."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:467
-msgid ""
-"Lower bound of timespan. Nothing before this time will be matched. Offsets "
-"are not taken into account!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Harddisk.py:439
-#: ../enigma2_master/lib/python/Components/Harddisk.py:439
-msgid "MMC Card"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:175
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:175
-msgid "Make this mark an 'in' point"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:176
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:176
-msgid "Make this mark an 'out' point"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:177
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:177
-msgid "Make this mark just a mark"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/PluginBrowser.py:70
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:128
-#: ../enigma2_master/lib/python/Screens/PluginBrowser.py:70
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:128
-msgid "Manage extensions"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/plugin.py:33
-msgid "Manage network shares"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/plugin.py:33
-msgid "Manage your network shares..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:2024
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:2028
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1996
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:2000
-msgid "Manage your receiver's software"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:469
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:140
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:469
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:140
-msgid "Manual transponder"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:271
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:282
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:271
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:282
-msgid "Manufacturer"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:155
-#, python-format
-msgid "Match Timespan: %02d:%02d - %02d:%02d"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:494
-#: ../enigma2_plugins/autotimer/src/AutoTimerWizard.py:87
-msgid "Match title"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:137
-#, python-format
-msgid "Match title: %s"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:276
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:276
-msgid "Max. Bitrate: "
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:526
-msgid "Maximum duration (in m)"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:473
-msgid ""
-"Maximum event duration to match. If an event is longer than this ammount of "
-"time (without offset) it won't be matched."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:964
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:964
-msgid "Media player"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:149
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:179
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/Process.py:292
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:149
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:179
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/Process.py:292
-msgid "Medium is not a writeable DVD!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/Process.py:297
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/Process.py:297
-msgid "Medium is not empty!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/AudioSelection.py:168
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:156
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:158
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:159
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:160
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:161
-#: ../enigma2_master/lib/python/Screens/AudioSelection.py:168
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:156
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:158
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:159
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:160
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:161
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:205
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Menu"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:216
-#: ../enigma2_plugins/mytube/src/plugin.py:107
-msgid "Mexico"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Harddisk.py:236
-#: ../enigma2_master/lib/python/Components/Harddisk.py:236
-msgid "Mkfs failed"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:110
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:62
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:110
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:62
-msgid "Mode"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/HarddiskSetup.py:47
-#: ../enigma2_master/lib/python/Screens/HarddiskSetup.py:47
-msgid "Model: "
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerSettings.py:42
-msgid "Modify existing timers"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:380
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:405
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:414
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:136
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:450
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:88
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:380
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:405
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:414
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:136
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:450
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:88
-msgid "Modulation"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/EpgSelection.py:326
-#: ../enigma2_experimental/lib/python/Components/EpgList.py:38
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:24
-#: ../enigma2_experimental/lib/python/Tools/FuzzyDate.py:13
-#: ../enigma2_master/lib/python/Screens/EpgSelection.py:326
-#: ../enigma2_master/lib/python/Components/EpgList.py:38
-#: ../enigma2_master/lib/python/Components/TimerList.py:24
-#: ../enigma2_master/lib/python/Tools/FuzzyDate.py:13
-msgid "Mon"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:109
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:109
-msgid "Mon-Fri"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:124
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:163
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:124
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:163
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:44
-msgid "Monday"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:285
-msgid "Monthly"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:968
-msgid "More video entries."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:102
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:102
-msgid "Mosquito noise reduction"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:241
-#: ../enigma2_plugins/mytube/src/plugin.py:132
-#: ../enigma2_plugins/mytube/src/plugin.py:797
-msgid "Most discussed"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:243
-#: ../enigma2_plugins/mytube/src/plugin.py:134
-#: ../enigma2_plugins/mytube/src/plugin.py:798
-msgid "Most linked"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:795
-msgid "Most popular"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:245
-#: ../enigma2_plugins/mytube/src/plugin.py:136
-#: ../enigma2_plugins/mytube/src/plugin.py:796
-msgid "Most recent"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:244
-#: ../enigma2_plugins/mytube/src/plugin.py:135
-#: ../enigma2_plugins/mytube/src/plugin.py:800
-msgid "Most responded"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:238
-#: ../enigma2_plugins/mytube/src/plugin.py:129
-#: ../enigma2_plugins/mytube/src/plugin.py:794
-msgid "Most viewed"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Harddisk.py:236
-#: ../enigma2_master/lib/python/Components/Harddisk.py:236
-msgid "Mount failed"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountView.py:60
-msgid "Mount informations"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:192
-msgid "Mount options"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:180
-msgid "Mount type"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountManager.py:64
-#: ../enigma2_plugins/networkbrowser/src/plugin.py:33
-msgid "MountManager"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountView.py:59
-msgid ""
-"Mounted/\n"
-"Unmounted"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountManager.py:74
-msgid "Mountpoints management"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:69
-msgid "Mounts editor"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/NetworkBrowser.py:108
-msgid "Mounts management"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1438
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1438
-msgid "Move Picture in Picture"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:236
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:236
-msgid "Move east"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:202
-msgid "Move plugin screen"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/MovableScreen.py:22
-msgid "Move screen down"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/MovableScreen.py:29
-msgid "Move screen to the center of your TV"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/MovableScreen.py:19
-msgid "Move screen to the left"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/MovableScreen.py:31
-msgid "Move screen to the lower left corner"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/MovableScreen.py:33
-msgid "Move screen to the lower right corner"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/MovableScreen.py:28
-msgid "Move screen to the middle of the left border"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/MovableScreen.py:30
-msgid "Move screen to the middle of the right border"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/MovableScreen.py:20
-msgid "Move screen to the right"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/MovableScreen.py:25
-msgid "Move screen to the upper left corner"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/MovableScreen.py:27
-msgid "Move screen to the upper right corner"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/MovableScreen.py:21
-msgid "Move screen up"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:233
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:233
-msgid "Move west"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/RecordPaths.py:98
-#: ../enigma2_experimental/lib/python/Screens/RecordPaths.py:111
-#: ../enigma2_master/lib/python/Screens/RecordPaths.py:98
-#: ../enigma2_master/lib/python/Screens/RecordPaths.py:111
-msgid "Movie location"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/EventView.py:213
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:601
-#: ../enigma2_master/lib/python/Screens/EventView.py:213
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:601
-msgid "Multi EPG"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:868
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:868
-msgid "Multimedia"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ci.py:333
-#: ../enigma2_master/lib/python/Screens/Ci.py:333
-msgid "Multiple service support"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:534
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:534
-msgid "Multisat"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:183
-#: ../enigma2_plugins/mytube/src/plugin.py:74
-msgid "Music"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:1797
-msgid "My TubePlayer"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:525
-#: ../enigma2_plugins/mytube/src/plugin.py:531
-msgid "MyTube Settings"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:434
-msgid "MyTubePlayer"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:504
-#: ../enigma2_plugins/mytube/src/plugin.py:506
-#: ../enigma2_plugins/mytube/src/plugin.py:513
-msgid "MyTubePlayer Help"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:575
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:591
-msgid "MyTubePlayer active video downloads"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:412
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:415
-msgid "MyTubePlayer settings"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:1350
-msgid "MyTubeVideoInfoScreen"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:1493
-msgid "MyTubeVideohelpScreen"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:387
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:391
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:394
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:398
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:402
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:733
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:741
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:887
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:234
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:387
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:391
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:394
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:398
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:402
-#: ../enigma2_master/lib/python/Components/NimManager.py:733
-#: ../enigma2_master/lib/python/Components/NimManager.py:741
-#: ../enigma2_master/lib/python/Components/NimManager.py:887
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:234
-msgid "N/A"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/plugin.py:19
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/plugin.py:23
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/plugin.py:19
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/plugin.py:23
-msgid "NFI Image Flashing"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:202
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:202
-msgid "NFI image flashing completed. Press Yellow to Reboot!"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:97
-msgid "NFS share"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:112
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:112
-msgid "NTSC"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:141
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:141
-msgid "Name"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1347
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1347
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Nameserver"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:277
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:277
-#, python-format
-msgid "Nameserver %d"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:886
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:886
-msgid "Nameserver settings"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:365
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:498
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:365
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:498
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Netmask"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:858
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:858
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Network"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Harddisk.py:440
-#: ../enigma2_master/lib/python/Components/Harddisk.py:440
-msgid "Network Mount"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:515
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:520
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:515
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:520
-msgid "Network SSID"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/plugin.py:12
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/plugin.py:21
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/plugin.py:12
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/plugin.py:21
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/
-msgid "Network Wizard"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:418
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:418
-msgid "Network scan"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:887
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:887
-msgid "Network test"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1305
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1305
-msgid "Network test: "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:372
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:865
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:144
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:372
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:865
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:144
-msgid "Network:"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/plugin.py:32
-msgid "NetworkBrowser"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:150
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:913
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:150
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:913
-msgid "NetworkWizard"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:285
-msgid "Never"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:957
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:957
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:814
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:1017
-msgid "New"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:320
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:320
-msgid "New PIN"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:217
-#: ../enigma2_plugins/mytube/src/plugin.py:108
-msgid "New Zealand"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/FrontprocessorUpgrade/plugin.py:36
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/FrontprocessorUpgrade/plugin.py:36
-msgid "New version:"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:191
-#: ../enigma2_plugins/mytube/src/plugin.py:82
-msgid "News & Politics"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/EpgSelection.py:61
-#: ../enigma2_master/lib/python/Screens/EpgSelection.py:61
-msgid "Next"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ci.py:25
-#: ../enigma2_experimental/lib/python/Screens/Ci.py:27
-#: ../enigma2_experimental/lib/python/Screens/InfoBar.py:169
-#: ../enigma2_experimental/lib/python/Screens/InfoBar.py:176
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:401
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:272
-#: ../enigma2_master/lib/python/Screens/Ci.py:25
-#: ../enigma2_master/lib/python/Screens/Ci.py:27
-#: ../enigma2_master/lib/python/Screens/InfoBar.py:169
-#: ../enigma2_master/lib/python/Screens/InfoBar.py:176
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:401
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:272
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:292
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:176
-#: ../enigma2_plugins/mytube/src/plugin.py:67
-#: ../enigma2_plugins/mytube/src/plugin.py:620
-#: ../enigma2_plugins/mytube/src/plugin.py:626 ../enigma2_experimental/data/
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/
-#: ../enigma2_master/data/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/
-#: ../enigma2_plugins/autotimer/src/
-msgid "No"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/Process.py:296
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/Process.py:296
-msgid "No (supported) DVDROM found!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:70
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:425
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:454
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:70
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:425
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:454
-msgid "No Connection"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1643
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1643
-msgid "No HDD found or HDD not initialized!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:454
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:454
-msgid "No Networks found"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:2216
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:2216
-msgid ""
-"No data on transponder!\n"
-"(Timeout reading PAT)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1209
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1209
-msgid "No description available."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:180
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:180
-msgid "No details for this image file"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaScanner/plugin.py:29
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaScanner/plugin.py:29
-msgid "No displayable files on this medium found!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1530
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1530
-msgid "No event info found, recording indefinitely."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:950
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:986
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:950
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:986
-msgid ""
-"No fast winding possible yet.. but you can use the number buttons to skip "
-"forward/backward!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:2214
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:2214
-msgid "No free tuner!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:214
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:640
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:214
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:640
-msgid "No network connection available."
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/NetworkBrowser.py:193
-msgid "No network devices found!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:338
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:346
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:338
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:346
-msgid "No networks found"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1427
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1427
-msgid ""
-"No packages were upgraded yet. So you can check your network and try again."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:1751
-msgid "No playable video found! Stop playing this movie?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:586
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:586
-msgid "No positioner capable frontend found."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:261
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:261
-msgid "No satellite frontend found!!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:431
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:431
-msgid "No tags are set on these movies."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:401
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:401
-msgid "No to all"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:601
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:601
-msgid "No tuner is configured for use with a diseqc positioner!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:744
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:744
-msgid ""
-"No tuner is enabled!\n"
-"Please setup your tuner settings before you start a service scan."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:159
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:159
-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 ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:157
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:157
-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 ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:483
-msgid "No videos to display"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:355
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:355
-msgid "No wireless networks found! Please refresh."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:33
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:33
-msgid ""
-"No working local network adapter found.\n"
-"Please verify that you have attached a network cable and your network is "
-"configured correctly."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:32
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:32
-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 ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:706
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:706
-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 ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:1744
-msgid "No, but play video again"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBar.py:177
-#: ../enigma2_master/lib/python/Screens/InfoBar.py:177
-msgid "No, but restart from begin"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:621
-msgid "No, but switch to video entries."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:627
-msgid "No, but switch to video search."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:52
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:52
-msgid "No, never"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:278
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:278
-msgid "No, not now"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:279
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:279
-msgid "No, send them never"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:586
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:629
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:674
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1149
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1152
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1173
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1175
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1181
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:14
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:61
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:107
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:586
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:629
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:674
-#: ../enigma2_master/lib/python/Components/NimManager.py:1149
-#: ../enigma2_master/lib/python/Components/NimManager.py:1152
-#: ../enigma2_master/lib/python/Components/NimManager.py:1173
-#: ../enigma2_master/lib/python/Components/NimManager.py:1175
-#: ../enigma2_master/lib/python/Components/NimManager.py:1181
-#: ../enigma2_master/lib/python/Tools/Transponder.py:14
-#: ../enigma2_master/lib/python/Tools/Transponder.py:61
-#: ../enigma2_master/lib/python/Tools/Transponder.py:107
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:316
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:339
-#: ../enigma2_plugins/autotimer/src/plugin.py:20
-msgid "None"
-msgstr ""
-
-#. TRANSLATORS: (aspect ratio policy: display as fullscreen, with stretching the left/right)
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:108
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:108
-msgid "Nonlinear"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:195
-#: ../enigma2_plugins/mytube/src/plugin.py:86
-msgid "Nonprofits & Activism"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1164
-#: ../enigma2_master/lib/python/Components/NimManager.py:1164
-msgid "North"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:33
-#: ../enigma2_master/lib/python/Components/Language.py:33
-msgid "Norwegian"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Task.py:368
-#: ../enigma2_master/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 ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:485
-msgid "Not fetching feed entries"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:321
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:859
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:861
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:1009
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:1011
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/plugin.py:90
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:321
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:859
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:861
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:1009
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:1011
-#: ../enigma2_master/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 ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoTune/VideoFinetune.py:147
-#: ../enigma2_master/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 ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:479
-msgid "Number of scheduled recordings left."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InputDeviceSetup.py:172
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:91
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:58
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:335
-#: ../enigma2_experimental/lib/python/Screens/Setup.py:85
-#: ../enigma2_experimental/lib/python/Screens/TimeDateInput.py:13
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:30
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:61
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:109
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:221
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:42
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:53
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:165
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:583
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:352
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py:103
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:48
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:303
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:37
-#: ../enigma2_master/lib/python/Screens/InputDeviceSetup.py:172
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:91
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:58
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:335
-#: ../enigma2_master/lib/python/Screens/Setup.py:85
-#: ../enigma2_master/lib/python/Screens/TimeDateInput.py:13
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:30
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:61
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:109
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:221
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:42
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:53
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:165
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:583
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:352
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py:103
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:48
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:303
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:37
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:67
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:394
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:1015
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:45
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:119
-#: ../enigma2_plugins/autotimer/src/AutoTimerSettings.py:53
-#: ../enigma2_plugins/cdinfo/src/plugin.py:57
-#: ../enigma2_plugins/webinterface/src/WebIfConfig.py:35
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "OK"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:70
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:70
-msgid "OK, remove another extensions"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:64
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:64
-msgid "OK, remove some extensions"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:107
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:107
-msgid "OSD visibility"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1172
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:12
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:46
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:59
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:114
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/VideoEnhancement.py:148
-#: ../enigma2_master/lib/python/Components/NimManager.py:1172
-#: ../enigma2_master/lib/python/Tools/Transponder.py:12
-#: ../enigma2_master/lib/python/Tools/Transponder.py:46
-#: ../enigma2_master/lib/python/Tools/Transponder.py:59
-#: ../enigma2_master/lib/python/Tools/Transponder.py:114
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/VideoEnhancement.py:148
-msgid "Off"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:519
-msgid "Offset after recording (in m)"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:518
-msgid "Offset before recording (in m)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1172
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:11
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:45
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:58
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:113
-#: ../enigma2_master/lib/python/Components/NimManager.py:1172
-#: ../enigma2_master/lib/python/Tools/Transponder.py:11
-#: ../enigma2_master/lib/python/Tools/Transponder.py:45
-#: ../enigma2_master/lib/python/Tools/Transponder.py:58
-#: ../enigma2_master/lib/python/Tools/Transponder.py:113
-msgid "On"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:294
-msgid "On any service"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:293
-msgid "On same service"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1181
-#: ../enigma2_master/lib/python/Components/NimManager.py:1181
-msgid "One"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/plugin.py:21
-msgid "Only AutoTimers created during this session"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:420
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:420
-msgid "Only Free scan"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:978
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:978
-msgid "Only extensions."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:503
-#: ../enigma2_plugins/autotimer/src/AutoTimerWizard.py:72
-msgid "Only match during timespan"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:164
-#, python-format
-msgid "Only on Service: %s"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerOverview.py:95
-msgid "Open Context Menu"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:73
-msgid "Open plugin menu"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:175
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:175
-msgid "Optionally enter your name if you want to."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:137
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:137
-msgid "Orbital Position"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3setup.py:42
-msgid "Outer Bound (+/-)"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:502
-msgid "Override found with alternative service"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:365
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:365
-msgid "Overwrite configuration files ?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:376
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:376
-msgid "Overwrite configuration files during software upgrade?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:112
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:112
-msgid "PAL"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:85
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:85
-msgid "PIDs"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:610
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1357
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1752
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:610
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1357
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1750
-msgid "Package list update"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:154
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:154
-msgid "Packet management"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1744
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1742
-msgid "Packet manager"
-msgstr ""
-
-#. TRANSLATORS: (aspect ratio policy: cropped content on left/right) in doubt, keep english term
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:98
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:106
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:98
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:106
-msgid "Pan&Scan"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/FileList.py:179
-#: ../enigma2_experimental/lib/python/Components/FileList.py:399
-#: ../enigma2_master/lib/python/Components/FileList.py:179
-#: ../enigma2_master/lib/python/Components/FileList.py:399
-msgid "Parent Directory"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/ParentalControl.py:111
-#: ../enigma2_master/lib/python/Components/ParentalControl.py:111
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Parental control"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:45
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:45
-msgid "Parental control setup"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:85
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:85
-msgid "Parental control type"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/Modem/plugin.py:113
-#: ../enigma2_master/lib/python/Plugins/Extensions/Modem/plugin.py:113
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:197
-#: ../enigma2_plugins/networkbrowser/src/UserDialog.py:130
-msgid "Password"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:45
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:45
-msgid "Pause movie at end"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:190
-#: ../enigma2_plugins/mytube/src/plugin.py:81
-msgid "People & Blogs"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:184
-#: ../enigma2_plugins/mytube/src/plugin.py:75
-msgid "Pets & Animals"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/Modem/plugin.py:114
-#: ../enigma2_master/lib/python/Plugins/Extensions/Modem/plugin.py:114
-msgid "Phone number"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:125
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:628
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:629
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:125
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:628
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:629
-msgid "PicturePlayer"
-msgstr ""
-
-#. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:104
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:104
-msgid "Pillarbox"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:383
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:143
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:453
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:91
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:383
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:143
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:453
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:91
-msgid "Pilot"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:114
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:114
-msgid "Play"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:490
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:1034
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:490
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:1034
-msgid "Play Audio-CD..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:531
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:756
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:531
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:756
-msgid "Play DVD"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:1022
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:1022
-msgid "Play Music..."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:1798
-msgid "Play YouTube movies"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:249
-#: ../enigma2_plugins/mytube/src/plugin.py:139
-msgid "Play next video"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBar.py:45
-#: ../enigma2_master/lib/python/Screens/InfoBar.py:45
-msgid "Play recorded movies..."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:249
-#: ../enigma2_plugins/mytube/src/plugin.py:139
-msgid "Play video again"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Harddisk.py:236
-#: ../enigma2_master/lib/python/Components/Harddisk.py:236
-msgid "Please Reboot"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaScanner/plugin.py:48
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaScanner/plugin.py:48
-msgid "Please Select Medium to be Scanned"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:299
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:299
-msgid "Please add titles to the compilation."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1609
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1609
-msgid "Please change recording endtime"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:646
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:646
-msgid "Please check your network settings!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:602
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1359
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:602
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1359
-msgid "Please choose an extension..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/DefaultWizard.py:95
-#: ../enigma2_master/lib/python/Screens/DefaultWizard.py:95
-msgid "Please choose he package..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/plugin.py:56
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/plugin.py:56
-msgid "Please do not change any values unless you know what you are doing!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:186
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:186
-msgid "Please enter a name for the new bouquet"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:260
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:260
-msgid "Please enter a name for the new marker"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:377
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:377
-msgid "Please enter a new filename"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:608
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:608
-msgid "Please enter filename (empty = use current date)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:239
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:239
-msgid "Please enter name of the new directory"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:25
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:25
-msgid "Please enter the correct pin code"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:348
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:348
-msgid "Please enter the old PIN code"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:103
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:103
-msgid "Please enter your email address here:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:105
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:105
-msgid "Please enter your name here (optional):"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:485
-msgid "Please enter your search term."
-msgstr ""
-
-#: ../enigma2_experimental/RecordTimer.py:383
-#: ../enigma2_master/RecordTimer.py:383
-msgid ""
-"Please note that the previously selected media could not be accessed and "
-"therefore the default directory is being used instead."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:283
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:264
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:283
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:264
-msgid "Please press OK to continue."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:21
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:21
-msgid "Please press OK!"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:299
-msgid "Please provide a Text to match"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:650
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:650
-msgid "Please select a playlist to delete..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:629
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:629
-msgid "Please select a playlist..."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:483
-msgid "Please select a standard feed or try searching for videos."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:350
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:350
-msgid "Please select a subservice to record..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1769
-#: ../enigma2_experimental/lib/python/Screens/SubservicesQuickzap.py:116
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1769
-#: ../enigma2_master/lib/python/Screens/SubservicesQuickzap.py:116
-msgid "Please select a subservice..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:103
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:103
-msgid "Please select an NFI file and press green key to flash!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:143
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:151
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:143
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:151
-msgid "Please select an option below."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:268
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:268
-msgid "Please select medium to use as backup location"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:428
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:428
-msgid "Please select tag to filter..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:373
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:373
-msgid "Please select the movie path..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/PiPSetup.py:34
-#: ../enigma2_master/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 ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:96
-#: ../enigma2_master/lib/python/Components/Language.py:96
-msgid ""
-"Please use the UP and DOWN keys to select your language. Afterwards press "
-"the OK button."
-msgstr ""
-
-#: ../enigma2_plugins/genuinedreambox/src/plugin.py:137
-msgid "Please wait (Step 2)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:617
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:617
-msgid "Please wait for activation of your network configuration..."
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:326
-msgid "Please wait for activation of your network mount..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:160
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:160
-msgid "Please wait while removing selected package..."
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountView.py:113
-msgid "Please wait while removing your network mount..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:236
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:236
-msgid "Please wait while scanning is in progress..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:93
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:93
-msgid "Please wait while searching for removable packages..."
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:289
-msgid "Please wait while updating your network mount..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:205
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:205
-msgid "Please wait while we configure your network..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:185
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:185
-msgid "Please wait while we prepare your network interfaces..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:228
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:274
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:228
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:274
-msgid "Please wait while we test your network..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:962
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:962
-#: ../enigma2_plugins/networkbrowser/src/MountManager.py:119
-msgid "Please wait while your network is restarting..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1199
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1222
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1229
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:138
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:139
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:140
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:141
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:142
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:143
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1199
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1222
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1229
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:138
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:139
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:140
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:141
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:142
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:143
-msgid "Please wait..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:185
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:67
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:404
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:185
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:67
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:404
-msgid "Please wait... Loading list..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:985
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:985
-msgid "Plugin manager activity information"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1082
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1082
-msgid "Plugin manager help"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3setup.py:60
-#, python-format
-msgid "Plugin: %(plugin)s , Version: %(version)s"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:218
-#: ../enigma2_plugins/mytube/src/plugin.py:109
-msgid "Poland"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:375
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:445
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:83
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:375
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:445
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:83
-msgid "Polarity"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:141
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1171
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:141
-#: ../enigma2_master/lib/python/Components/NimManager.py:1171
-msgid "Polarization"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:34
-#: ../enigma2_master/lib/python/Components/Language.py:34
-msgid "Polish"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerSettings.py:40
-msgid "Poll Interval (in h)"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerSettings.py:39
-msgid "Poll automatically"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:25
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:25
-msgid "Port A"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:28
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:28
-msgid "Port B"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:30
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:30
-msgid "Port C"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:31
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:31
-msgid "Port D"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:35
-#: ../enigma2_master/lib/python/Components/Language.py:35
-msgid "Portuguese"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:535
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1157
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:535
-#: ../enigma2_master/lib/python/Components/NimManager.py:1157
-msgid "Positioner"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:192
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:192
-msgid "Positioner fine movement"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:191
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:191
-msgid "Positioner movement"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:605
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:611
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:605
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:611
-msgid "Positioner setup"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:194
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:194
-msgid "Positioner storage"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:474
-msgid ""
-"Power state to change to after recordings. Select \"standard\" to not change "
-"the default behavior of enigma2 or values changed by yourself."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:46
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:340
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:46
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:340
-msgid "Power threshold in mA"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:470
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:140
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:470
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:140
-msgid "Predefined transponder"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:736
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:736
-msgid "Prepare another USB stick for image flashing"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ipkg.py:21
-#: ../enigma2_master/lib/python/Screens/Ipkg.py:21
-msgid "Preparing... Please wait"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:123
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:123
-msgid "Press INFO on your remote control for additional information."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:122
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:122
-msgid "Press MENU on your remote control for additional options."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:34
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:330
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:704
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1342
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:34
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:330
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:704
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1342
-msgid "Press OK on your remote control to continue."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:31
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:31
-msgid "Press OK to activate the selected skin."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:243
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:374
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:243
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:374
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:64
-msgid "Press OK to activate the settings."
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/NetworkBrowser.py:364
-msgid "Press OK to collapse this host"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/UserManager.py:51
-msgid "Press OK to edit selected settings."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InputDeviceSetup.py:47
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:35
-#: ../enigma2_master/lib/python/Screens/InputDeviceSetup.py:47
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:35
-#: ../enigma2_plugins/networkbrowser/src/MountView.py:62
-msgid "Press OK to edit the settings."
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/NetworkBrowser.py:366
-msgid "Press OK to expand this host"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:560
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:560
-#, python-format
-msgid "Press OK to get further details for %s"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/NetworkBrowser.py:360
-msgid "Press OK to mount this share!"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/NetworkBrowser.py:111
-msgid "Press OK to mount!"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/UserDialog.py:90
-msgid "Press OK to save settings."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:934
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:934
-msgid "Press OK to scan"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:421
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:529
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:421
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:529
-msgid "Press OK to select a Provider."
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountManager.py:55
-msgid "Press OK to select."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:369
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:369
-msgid "Press OK to select/deselect a CAId."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:319
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:319
-msgid "Press OK to start the scan"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1974
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1946
-msgid "Press OK to toggle the selection."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:36
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:36
-msgid "Press yellow to set this interface as default interface."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/EpgSelection.py:60
-#: ../enigma2_master/lib/python/Screens/EpgSelection.py:60
-msgid "Prev"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerOverview.py:212
-msgid "Preview"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerPreview.py:76
-msgid "Preview AutoTimer"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:127
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:127
-msgid "Preview menu"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:358
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:358
-msgid "Primary DNS"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:248
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:248
-msgid "Priority"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:689
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:689
-msgid "Process"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:63
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:72
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:63
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:72
-msgid "Properties of current title"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:83
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:83
-msgid "Protect services"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:79
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:79
-msgid "Protect setup"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:710
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:846
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1460
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:710
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:846
-#: ../enigma2_master/lib/python/Components/NimManager.py:1460
-msgid "Provider"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:166
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:166
-msgid "Provider to scan"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:955
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:470
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:955
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:470
-msgid "Providers"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:163
-#: ../enigma2_plugins/mytube/src/plugin.py:54
-msgid "Published"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/SocketMMI/plugin.py:25
-#: ../enigma2_master/lib/python/Plugins/Extensions/SocketMMI/plugin.py:25
-msgid "Python frontend for /tmp/mmi.socket"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:592
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:592
-msgid "Quick"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1760
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1762
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1765
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1760
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1762
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1765
-msgid "Quickzap"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:71
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:71
-msgid "RGB"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Network.py:352
-#: ../enigma2_experimental/lib/python/Components/Network.py:354
-#: ../enigma2_master/lib/python/Components/Network.py:352
-#: ../enigma2_master/lib/python/Components/Network.py:354
-msgid "Ralink"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Harddisk.py:441
-#: ../enigma2_master/lib/python/Components/Harddisk.py:441
-msgid "Ram Disk"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:592
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:592
-msgid "Random"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:164
-#: ../enigma2_plugins/mytube/src/plugin.py:55
-msgid "Rating"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:1103
-msgid "Ratings: "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InputDeviceSetup.py:263
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:652
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:440
-#: ../enigma2_experimental/lib/python/Components/ConfigList.py:237
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:222
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:408
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:174
-#: ../enigma2_master/lib/python/Screens/InputDeviceSetup.py:263
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:652
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:440
-#: ../enigma2_master/lib/python/Components/ConfigList.py:237
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:222
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:408
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:174
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:627
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:957
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:1127
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:226
-#: ../enigma2_plugins/autotimer/src/AutoTimerOverview.py:197
-msgid "Really close without saving settings?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEdit.py:192
-#: ../enigma2_master/lib/python/Screens/TimerEdit.py:192
-msgid "Really delete done timers?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/SubservicesQuickzap.py:127
-#: ../enigma2_master/lib/python/Screens/SubservicesQuickzap.py:127
-msgid "Really exit the subservices quickzap?"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:629
-msgid "Really quit MyTube Player?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Standby.py:130
-#: ../enigma2_master/lib/python/Screens/Standby.py:130
-msgid "Really reboot now?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Standby.py:134
-#: ../enigma2_master/lib/python/Screens/Standby.py:134
-msgid "Really restart now?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Standby.py:128
-#: ../enigma2_master/lib/python/Screens/Standby.py:128
-msgid "Really shutdown now?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:223
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:223
-msgid "Reboot"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:240
-#: ../enigma2_plugins/mytube/src/plugin.py:131
-#: ../enigma2_plugins/mytube/src/plugin.py:799
-msgid "Recently featured"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Record"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:541
-msgid "Record a maximum of x times"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:1066
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:1119
-msgid "Record on"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1553
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1553
-#, python-format
-msgid "Record time limited due to conflicting timer %s"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:357
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:357
-msgid "Recorded files..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/EventView.py:117
-#: ../enigma2_master/lib/python/Screens/EventView.py:117
-msgid "Recording"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Standby.py:119
-#: ../enigma2_master/lib/python/Screens/Standby.py:119
-msgid "Recording(s) are in progress or coming up in few seconds!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:856
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:856
-msgid "Recordings"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:321
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:321
-msgid "Reenter new PIN"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:66
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:66
-msgid "Refresh Rate"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:976
-msgid "Related video entries."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:161
-#: ../enigma2_plugins/mytube/src/plugin.py:52
-msgid "Relevance"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1677
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1677
-msgid "Reload"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:102
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:102
-msgid "Reload Black-/Whitelists"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:93
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:93
-msgid "Remember service PIN"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:95
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:95
-msgid "Remember service PIN cancel"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1219
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1219
-msgid "Remove"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:93
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:206
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:93
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:206
-msgid "Remove Bookmark"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/PluginBrowser.py:75
-#: ../enigma2_master/lib/python/Screens/PluginBrowser.py:75
-msgid "Remove Plugins"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:179
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:179
-msgid "Remove a mark"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:64
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:64
-msgid "Remove currently selected title"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1302
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1796
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1302
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1794
-msgid "Remove finished."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/PluginBrowser.py:166
-#: ../enigma2_master/lib/python/Screens/PluginBrowser.py:166
-msgid "Remove plugins"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerOverview.py:102
-msgid "Remove selected AutoTimer"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/EpgSelection.py:254
-#: ../enigma2_experimental/lib/python/Screens/EpgSelection.py:370
-#: ../enigma2_experimental/lib/python/Screens/EventView.py:104
-#: ../enigma2_experimental/lib/python/Screens/EventView.py:164
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:608
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:659
-#: ../enigma2_master/lib/python/Screens/EpgSelection.py:254
-#: ../enigma2_master/lib/python/Screens/EpgSelection.py:370
-#: ../enigma2_master/lib/python/Screens/EventView.py:104
-#: ../enigma2_master/lib/python/Screens/EventView.py:164
-#: ../enigma2_master/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:608
-#: ../enigma2_master/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:659
-msgid "Remove timer"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:64
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:293
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:64
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:293
-msgid "Remove title"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ipkg.py:100
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1020
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1391
-#: ../enigma2_master/lib/python/Screens/Ipkg.py:100
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1020
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1391
-msgid "Removing"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:285
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:285
-#, python-format
-msgid "Removing directory %s failed. (Maybe not empty.)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:92
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:92
-msgid "Rename"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:23
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:23
-msgid "Rename crashlogs"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:145
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:145
-msgid "Repeat Type"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEdit.py:104
-#: ../enigma2_master/lib/python/Screens/TimerEdit.py:104
-msgid "Repeating event currently recording... What do you want to do?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:151
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:151
-msgid "Repeats"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:549
-msgid "Require description to be unique"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:322
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:332
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:322
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:332
-msgid "Required medium type:"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/NetworkBrowser.py:109
-msgid "Rescan"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ci.py:321
-#: ../enigma2_master/lib/python/Screens/Ci.py:321
-msgid "Reset"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:129
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:129
-msgid "Reset and renumerate title names"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:547
-msgid "Reset count"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/MovableScreen.py:34
-msgid "Reset saved position"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:250
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:250
-msgid "Reset video enhancement settings to system defaults?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:213
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:213
-msgid "Reset video enhancement settings to your last configuration?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:64
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:64
-msgid "Resolution"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:984
-msgid "Response video entries."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:103
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:103
-msgid "Restart GUI now?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:888
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:888
-msgid "Restart network"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1299
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1422
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1299
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1422
-msgid "Restart test"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:856
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:856
-msgid "Restart your network connection and interfaces.\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:206
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:206
-msgid "Restore"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:237
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:237
-msgid "Restore backups"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:217
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:312
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:320
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:322
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:217
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:312
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:320
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:322
-msgid "Restore is running..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:264
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:264
-msgid "Restore running"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:132
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:132
-msgid "Restore system settings"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:475
-msgid "Restrict \"after event\" to a certain timespan?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:41
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:41
-msgid "Resume from last position"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1912
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1912
-#, python-format
-msgid "Resume position at %s"
-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.)
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1921
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1921
-msgid "Resuming playback"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:527
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:527
-msgid "Return to file browser"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:43
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:45
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:43
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:45
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:249
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:252
-#: ../enigma2_plugins/mytube/src/plugin.py:139
-#: ../enigma2_plugins/mytube/src/plugin.py:142
-msgid "Return to movie list"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:43
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:45
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:43
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:45
-msgid "Return to previous service"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/VideoEnhancement.py:150
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/VideoEnhancement.py:150
-msgid "Right"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:382
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:144
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:452
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:90
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:382
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:144
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:452
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:90
-msgid "Rolloff"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:47
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:341
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:47
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:341
-msgid "Rotor turning speed"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/AudioSelection.py:95
-#: ../enigma2_experimental/lib/python/Screens/AudioSelection.py:141
-#: ../enigma2_master/lib/python/Screens/AudioSelection.py:95
-#: ../enigma2_master/lib/python/Screens/AudioSelection.py:141
-msgid "Running"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:219
-#: ../enigma2_plugins/mytube/src/plugin.py:110
-msgid "Russia"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:36
-#: ../enigma2_master/lib/python/Components/Language.py:36
-msgid "Russian"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:71
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:71
-msgid "S-Video"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:332
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:332
-msgid "SINGLE LAYER DVD"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:259
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:77
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:259
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:77
-msgid "SSID:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/EpgSelection.py:326
-#: ../enigma2_experimental/lib/python/Components/EpgList.py:38
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:24
-#: ../enigma2_experimental/lib/python/Tools/FuzzyDate.py:13
-#: ../enigma2_master/lib/python/Screens/EpgSelection.py:326
-#: ../enigma2_master/lib/python/Components/EpgList.py:38
-#: ../enigma2_master/lib/python/Components/TimerList.py:24
-#: ../enigma2_master/lib/python/Tools/FuzzyDate.py:13
-msgid "Sat"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:22
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:147
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:363
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:371
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:387
-#: ../enigma2_experimental/lib/python/Components/ServiceScan.py:40
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:8
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:430
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:67
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:22
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:147
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:363
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:371
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:387
-#: ../enigma2_master/lib/python/Components/ServiceScan.py:40
-#: ../enigma2_master/lib/python/Tools/Transponder.py:8
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:430
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:67
-msgid "Satellite"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/plugin.py:68
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/plugin.py:74
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/plugin.py:68
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/plugin.py:74
-msgid "Satellite Equipment Setup"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:864
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:864
-msgid "Satellite equipment"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:709
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:848
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:709
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:848
-msgid "Satellites"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:273
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:279
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:273
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:279
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Satfinder"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:516
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:516
-msgid "Sats"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:90
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:90
-msgid "Saturation"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:124
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:168
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:124
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:168
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:49
-msgid "Saturday"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/RecordPaths.py:25
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:112
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:221
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:224
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/settings.py:70
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:58
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:368
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:79
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:116
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1553
-#: ../enigma2_master/lib/python/Screens/RecordPaths.py:25
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:112
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:221
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:224
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/settings.py:70
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:58
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:368
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:79
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:116
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1553
-#: ../enigma2_plugins/ac3lipsync/src/AC3setup.py:64
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:812
-#: ../enigma2_plugins/autotimer/src/AutoTimerOverview.py:74
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:399
-msgid "Save"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:608
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:608
-msgid "Save Playlist"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:82
-msgid "Save current delay to key"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:68
-msgid "Save to key"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:74
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:81
-msgid "Save values and close plugin"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/MovableScreen.py:17
-#: ../enigma2_plugins/ac3lipsync/src/MovableScreen.py:24
-msgid "Save values and close screen"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:93
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:110
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:93
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:110
-msgid "Scaler sharpness"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:178
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:178
-msgid "Scaling Mode"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:930
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:930
-msgid "Scan "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaScanner/plugin.py:94
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaScanner/plugin.py:94
-msgid "Scan Files..."
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/NetworkBrowser.py:499
-msgid "Scan NFS share"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:186
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:186
-msgid "Scan QAM128"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:183
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:183
-msgid "Scan QAM16"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:187
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:187
-msgid "Scan QAM256"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:184
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:184
-msgid "Scan QAM32"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:185
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:185
-msgid "Scan QAM64"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:189
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:189
-msgid "Scan SR6875"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:188
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:188
-msgid "Scan SR6900"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:897
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:897
-msgid "Scan Wireless Networks"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:190
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:191
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:190
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:191
-msgid "Scan additional SR"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:175
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:175
-msgid "Scan band EU HYPER"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:170
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:170
-msgid "Scan band EU MID"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:174
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:174
-msgid "Scan band EU SUPER"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:172
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:172
-msgid "Scan band EU UHF IV"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:173
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:173
-msgid "Scan band EU UHF V"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:169
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:169
-msgid "Scan band EU VHF I"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:171
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:171
-msgid "Scan band EU VHF III"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:178
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:178
-msgid "Scan band US HIGH"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:180
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:180
-msgid "Scan band US HYPER"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:176
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:176
-msgid "Scan band US LOW"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:177
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:177
-msgid "Scan band US MID"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:179
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:179
-msgid "Scan band US SUPER"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/NetworkBrowser.py:500
-msgid "Scan range"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:852
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:852
-msgid ""
-"Scan your network for wireless access points and connect to them using your "
-"selected wireless device.\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/plugin.py:137
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/plugin.py:137
-msgid ""
-"Scans default lamedbs sorted by satellite with a connected dish positioner"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:196
-#: ../enigma2_plugins/mytube/src/plugin.py:87
-msgid "Science & Technology"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:438
-msgid "Search Term(s)"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:421
-msgid "Search category:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:235
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:235
-msgid "Search east"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/plugin.py:32
-msgid "Search for network shares"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/plugin.py:32
-msgid "Search for network shares..."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:422
-msgid "Search region:"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:420
-msgid "Search restricted content:"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:500
-msgid "Search strictness"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:499
-msgid "Search type"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:234
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:234
-msgid "Search west"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:607
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:607
-msgid "Searching for available updates. Please wait..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:610
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:610
-msgid "Searching for new installed or removed packages. Please wait..."
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/NetworkBrowser.py:189
-msgid "Searching your network. Please wait..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:359
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:359
-msgid "Secondary DNS"
-msgstr ""
-
-#: ../enigma2_plugins/genuinedreambox/src/plugin.py:160
-msgid "Security service not running."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InputDeviceSetup.py:50
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:40
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:155
-#: ../enigma2_master/lib/python/Screens/InputDeviceSetup.py:50
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:40
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:155
-msgid "Select"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:462
-msgid ""
-"Select \"exact match\" to enforce \"Match title\" to match exactly or "
-"\"partial match\" if you only want to search for a part of the event title."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:51
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:51
-msgid "Select Location"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:59
-msgid "Select a timer to import"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/AudioSelection.py:71
-#: ../enigma2_master/lib/python/Screens/AudioSelection.py:71
-msgid "Select audio track"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:1103
-msgid "Select bouquet to record on"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:225
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:272
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:225
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:272
-msgid "Select channel to record from"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:1097
-msgid "Select channel to record on"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:735
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:735
-msgid "Select desired image from feed list"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:152
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:152
-msgid "Select files for backup."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:148
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:148
-msgid "Select files/folders to backup"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InputDeviceSetup.py:78
-#: ../enigma2_master/lib/python/Screens/InputDeviceSetup.py:78
-msgid "Select input device"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InputDeviceSetup.py:61
-#: ../enigma2_experimental/lib/python/Screens/InputDeviceSetup.py:67
-#: ../enigma2_master/lib/python/Screens/InputDeviceSetup.py:61
-#: ../enigma2_master/lib/python/Screens/InputDeviceSetup.py:67
-msgid "Select input device."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:802
-msgid "Select new feed to view."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:428
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:428
-msgid "Select provider to add..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:533
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:533
-msgid "Select service to add..."
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:241
-#, python-format
-msgid "Select the key you want to set to %i ms"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:483
-msgid "Select the location to save the recording to."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:925
-msgid "Select type of Filter"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1495
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1495
-msgid "Select upgrade source to edit."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:463
-msgid "Select whether or not you want to enforce case correctness."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:528
-#: ../enigma2_plugins/mytube/src/plugin.py:543
-msgid "Select your choice."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:23
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:23
-msgid "Send DiSEqC"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:34
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:34
-msgid "Send DiSEqC only on satellite change"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:33
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:33
-msgid "Seperate titles with a main menu"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:313
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:313
-msgid "Sequence repeat"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:37
-#: ../enigma2_master/lib/python/Components/Language.py:37
-msgid "Serbian"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:182
-msgid "Server IP"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:184
-msgid "Server share"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:53
-msgid "Service delay"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1793
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1793
-msgid "Service has been added to the favourites."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1799
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1799
-msgid "Service has been added to the selected bouquet."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:2218
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:2218
-msgid ""
-"Service invalid!\n"
-"(Timeout reading PMT)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:2217
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:2217
-msgid ""
-"Service not found!\n"
-"(SID not found in PAT)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:2223
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:2223
-msgid ""
-"Service unavailable!\n"
-"Check tuner configuration!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:84
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:84
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Serviceinfo"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:959
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:959
-msgid "Services"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:178
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:178
-msgid "Set End Time"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:33
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:33
-msgid "Set Voltage and 22KHz"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:95
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:95
-msgid "Set available internal memory threshold for the warning."
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:89
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:90
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:91
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:92
-#, python-format
-msgid "Set delay to %i ms (can be set)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:65
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:65
-msgid "Set interface as default Interface"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:193
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:193
-msgid "Set limits"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:522
-msgid "Set maximum duration"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:458
-msgid "Set this NO to disable this AutoTimer."
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3main.py:252
-msgid "Setting key canceled"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:65
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:82
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:153
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:65
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:82
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:153
-msgid "Settings"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:63
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:63
-#: ../enigma2_plugins/autotimer/src/AutoTimerOverview.py:215
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Setup"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/plugin.py:35
-msgid "Setup for the Audio Sync Plugin"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:151
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:151
-#, python-format
-msgid ""
-"Shall the USB stick wizard proceed and program the image file %s into flash "
-"memory?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:96
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:96
-msgid "Sharpness"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:187
-#: ../enigma2_plugins/mytube/src/plugin.py:78
-msgid "Short Movies"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/RecordingConfig.py:13
-#: ../enigma2_master/lib/python/Components/RecordingConfig.py:13
-msgid "Short filenames"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:466
-msgid "Should this AutoTimer be restricted to a timespan?"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:472
-msgid "Should this AutoTimer only match up to a certain event duration?"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:482
-msgid ""
-"Should timers created by this AutoTimer be recorded to a custom location?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1322
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1332
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1338
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1344
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1350
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1322
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1332
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1338
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1344
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1350
-msgid "Show Info"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:899
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:899
-msgid "Show WLAN Status"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerSettings.py:41
-msgid "Show in extension menu"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:255
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:255
-msgid "Show services beginning with"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBar.py:46
-#: ../enigma2_master/lib/python/Screens/InfoBar.py:46
-msgid "Show the radio player..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBar.py:47
-#: ../enigma2_master/lib/python/Screens/InfoBar.py:47
-msgid "Show the tv player..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:854
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:854
-msgid "Shows the state of your wireless LAN connection.\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:84
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:84
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Shutdown"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:43
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:43
-msgid "Shutdown Dreambox after"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:261
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:79
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:261
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:79
-msgid "Signal Strength:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:276
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:276
-msgid "Signal: "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/EventView.py:192
-#: ../enigma2_master/lib/python/Screens/EventView.py:192
-msgid "Similar"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/EventView.py:186
-#: ../enigma2_master/lib/python/Screens/EventView.py:186
-msgid "Similar broadcasts:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:48
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:48
-msgid "Simple"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:34
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:34
-msgid "Simple titleset (compatibility for legacy players)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:515
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1155
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:515
-#: ../enigma2_master/lib/python/Components/NimManager.py:1155
-msgid "Single"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/EventView.py:212
-#: ../enigma2_master/lib/python/Screens/EventView.py:212
-msgid "Single EPG"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:534
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:534
-msgid "Single satellite"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:534
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:535
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:536
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:534
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:535
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:536
-msgid "Single transponder"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:115
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:115
-msgid "Singlestep (GOP)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:128
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:128
-msgid "Skin"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:854
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:854
-msgid "Skins"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:85
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:87
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:85
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:87
-msgid "Sleep timer action:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:177
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:177
-msgid "Slideshow Interval (sec.)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ci.py:300
-#: ../enigma2_experimental/lib/python/Screens/Ci.py:304
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:55
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:57
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:59
-#: ../enigma2_master/lib/python/Screens/Ci.py:300
-#: ../enigma2_master/lib/python/Screens/Ci.py:304
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:55
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:57
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:59
-#, python-format
-msgid "Slot %d"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:38
-#: ../enigma2_master/lib/python/Components/Language.py:38
-msgid "Slovakian"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:39
-#: ../enigma2_master/lib/python/Components/Language.py:39
-msgid "Slovenian"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1165
-#: ../enigma2_master/lib/python/Components/NimManager.py:1165
-msgid "Slow"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:866
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:866
-msgid "Software"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:193
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:2017
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:2024
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:2028
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:193
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1989
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1996
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:2000
-msgid "Software management"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:339
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:339
-msgid "Software manager setup"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:130
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:130
-msgid "Software restore"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:129
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:129
-msgid "Software update"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:480
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:480
-msgid "Softwaremanager information"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/PluginBrowser.py:52
-#: ../enigma2_master/lib/python/Screens/PluginBrowser.py:52
-msgid "Some plugins are not available:\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:250
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:250
-msgid "Sorry MediaScanner is not installed!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:244
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:244
-msgid "Sorry no backups found!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:86
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:88
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:86
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py:88
-msgid ""
-"Sorry your backup destination is not writeable.\n"
-"Please choose an other one."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:755
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:755
-msgid "Sorry, no Details available!"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:722
-msgid "Sorry, video is not available!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:301
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:301
-msgid ""
-"Sorry, your backup destination is not writeable.\n"
-"\n"
-"Please choose another one."
-msgstr ""
-
-#. TRANSLATORS: This must fit into the header button in the EPG-List
-#: ../enigma2_experimental/lib/python/Screens/EpgSelection.py:213
-#: ../enigma2_master/lib/python/Screens/EpgSelection.py:213
-msgid "Sort A-Z"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerPreview.py:82
-msgid "Sort AutoTimer"
-msgstr ""
-
-#. TRANSLATORS: This must fit into the header button in the EPG-List
-#: ../enigma2_experimental/lib/python/Screens/EpgSelection.py:210
-#: ../enigma2_master/lib/python/Screens/EpgSelection.py:210
-#: ../enigma2_plugins/autotimer/src/AutoTimerPreview.py:80
-msgid "Sort Time"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1164
-#: ../enigma2_master/lib/python/Components/NimManager.py:1164
-msgid "South"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:220
-#: ../enigma2_plugins/mytube/src/plugin.py:111
-msgid "South Korea"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:221
-#: ../enigma2_plugins/mytube/src/plugin.py:112
-msgid "Spain"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:40
-#: ../enigma2_master/lib/python/Components/Language.py:40
-msgid "Spanish"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:94
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:94
-msgid "Split preview mode"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:185
-#: ../enigma2_plugins/mytube/src/plugin.py:76
-msgid "Sports"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:87
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:55
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:60
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:87
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:55
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:60
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Standby"
-msgstr ""
-
-#: ../enigma2_experimental/mytest.py:384 ../enigma2_master/mytest.py:384
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Standby / Restart"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py:129
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py:129
-#, python-format
-msgid "Standby Fan %d PWM"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py:128
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py:128
-#, python-format
-msgid "Standby Fan %d Voltage"
-msgstr ""
-
-#: ../enigma2_plugins/webinterface/src/WebIfConfig.py:60
-msgid "Start Webinterface"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:41
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:41
-msgid "Start from the beginning"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1659
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1659
-msgid "Start recording?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1357
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1357
-msgid "Start test"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:426
-msgid "Start with following feed:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:175
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:175
-msgid "StartTime"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:153
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:153
-msgid "Starting on"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:282
-msgid "Std. Feeds"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:240
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:240
-msgid "Step east"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3setup.py:43
-msgid "Step in ms for arrow keys"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3setup.py:48
-#: ../enigma2_plugins/ac3lipsync/src/AC3setup.py:49
-#: ../enigma2_plugins/ac3lipsync/src/AC3setup.py:50
-#, python-format
-msgid "Step in ms for key %i"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3setup.py:45
-#: ../enigma2_plugins/ac3lipsync/src/AC3setup.py:46
-#: ../enigma2_plugins/ac3lipsync/src/AC3setup.py:47
-#, python-format
-msgid "Step in ms for keys '%s'"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:239
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:239
-msgid "Step west"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:228
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:229
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:230
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:231
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:228
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:229
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:230
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:231
-msgid "Stop"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1233
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1233
-msgid "Stop Timeshift?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEdit.py:101
-#: ../enigma2_master/lib/python/Screens/TimerEdit.py:101
-msgid "Stop current event and disable coming events"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEdit.py:100
-#: ../enigma2_master/lib/python/Screens/TimerEdit.py:100
-msgid "Stop current event but not coming events"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBar.py:181
-#: ../enigma2_master/lib/python/Screens/InfoBar.py:181
-#: ../enigma2_plugins/mytube/src/plugin.py:1749
-msgid "Stop playing this movie?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1186
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1358
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1186
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1358
-msgid "Stop test"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:597
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:597
-msgid "Stop testing plane after # failed transponders"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:601
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:601
-msgid "Stop testing plane after # successful transponders"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:249
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:249
-msgid "Store position"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:355
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:355
-msgid "Stored position"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1686
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1686
-msgid "Subservice list..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/AudioSelection.py:118
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:173
-#: ../enigma2_master/lib/python/Screens/AudioSelection.py:118
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:173
-msgid "Subtitle selection"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/AudioSelection.py:52
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:159
-#: ../enigma2_master/lib/python/Screens/AudioSelection.py:52
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:159
-msgid "Subtitles"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/EpgSelection.py:326
-#: ../enigma2_experimental/lib/python/Components/EpgList.py:38
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:24
-#: ../enigma2_experimental/lib/python/Tools/FuzzyDate.py:13
-#: ../enigma2_master/lib/python/Screens/EpgSelection.py:326
-#: ../enigma2_master/lib/python/Components/EpgList.py:38
-#: ../enigma2_master/lib/python/Components/TimerList.py:24
-#: ../enigma2_master/lib/python/Tools/FuzzyDate.py:13
-msgid "Sun"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:124
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:169
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:124
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:169
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:50
-msgid "Sunday"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1435
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1435
-msgid "Swap Services"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:222
-#: ../enigma2_plugins/mytube/src/plugin.py:113
-msgid "Sweden"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:41
-#: ../enigma2_master/lib/python/Components/Language.py:41
-msgid "Swedish"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1691
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1691
-msgid "Switch to next subservice"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1692
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1692
-msgid "Switch to previous subservice"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:550
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:550
-msgid "Switchable tuner types:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:374
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:404
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:444
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:82
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:374
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:404
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:444
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:82
-msgid "Symbol Rate"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:139
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:139
-msgid "Symbolrate"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:366
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:135
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:437
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:75
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:852
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:366
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:135
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:437
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:75
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:852
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "System"
-msgstr ""
-
-#. TRANSLATORS: Add here whatever should be shown in the "translator" about screen, up to 6 lines (use \n for newline)
-#: ../enigma2_experimental/lib/python/Screens/About.py:58
-#: ../enigma2_master/lib/python/Screens/About.py:58
-msgid "TRANSLATOR_INFO"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/Process.py:298
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/Process.py:298
-msgid "TS file is too large for ISO9660 level 1!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:295
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:295
-msgid "Table of content for collection"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:322
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:322
-msgid "Tag 1"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:327
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:327
-msgid "Tag 2"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:334
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:189
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:334
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:189
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:556
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:200
-msgid "Tags"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:484
-msgid "Tags the Timer/Recording will have."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:1347
-msgid "Tags: "
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:223
-#: ../enigma2_plugins/mytube/src/plugin.py:114
-msgid "Taiwan"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py:166
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py:169
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py:166
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py:169
-msgid "Temperature and Fan control"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:967
-#: ../enigma2_experimental/lib/python/Components/ServiceScan.py:81
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:70
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:478
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:967
-#: ../enigma2_master/lib/python/Components/ServiceScan.py:81
-#: ../enigma2_master/lib/python/Tools/Transponder.py:70
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:478
-msgid "Terrestrial"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:198
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:198
-msgid "Terrestrial provider"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:682
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:682
-msgid "Test DiSEqC settings"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:593
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:593
-msgid "Test Type"
-msgstr ""
-
-#: ../enigma2_plugins/genuinedreambox/src/plugin.py:80
-msgid "Test again"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:848
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:848
-msgid "Test the network configuration of your Dreambox.\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/DemoPlugins/TestPlugin/plugin.py:47
-#: ../enigma2_master/lib/python/Plugins/DemoPlugins/TestPlugin/plugin.py:47
-msgid "Test-Messagebox?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:353
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:353
-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 ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:225
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:225
-msgid ""
-"The NetworkWizard extension is not installed!\n"
-"Please install it."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:367
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:367
-msgid "The PIN code has been changed successfully."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:369
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:369
-msgid "The PIN codes you entered are different."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/PluginBrowser.py:95
-#: ../enigma2_master/lib/python/Screens/PluginBrowser.py:95
-msgid ""
-"The Softwaremanagement extension is not installed!\n"
-"Please install it."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:601
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:601
-msgid ""
-"The USB stick was prepared to be bootable.\n"
-"Now you can download an NFI image file!"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:480
-msgid ""
-"The counter can automatically be reset to the limit at certain intervals."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/RecordPaths.py:48
-#: ../enigma2_master/lib/python/Screens/RecordPaths.py:48
-#, python-format
-msgid ""
-"The directory %s is not writable.\n"
-"Make sure you select a writable directory instead."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerSettings.py:45
-msgid ""
-"The editor to be used for new AutoTimers. This can either be the Wizard or "
-"the classic editor."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:716
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:716
-#, 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 ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaScanner/plugin.py:35
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaScanner/plugin.py:35
-msgid "The following files were found..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:283
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:283
-msgid "The installation of the default services lists is finished."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/DefaultWizard.py:40
-#: ../enigma2_master/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 ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:644
-msgid "The match attribute is mandatory."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:27
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:27
-msgid "The md5sum validation failed, the file may be corrupted!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:149
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:149
-msgid "The package:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:258
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:258
-#, python-format
-msgid "The path %s already exists."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:205
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:37
-#: ../enigma2_experimental/lib/python/Components/ParentalControl.py:238
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:205
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:37
-#: ../enigma2_master/lib/python/Components/ParentalControl.py:238
-msgid "The pin code you entered is wrong."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:528
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:528
-#, python-format
-msgid "The results have been written to %s."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:107
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:107
-msgid "The sleep timer has been activated."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:110
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:110
-msgid "The sleep timer has been disabled."
-msgstr ""
-
-#: ../enigma2_experimental/RecordTimer.py:501
-#: ../enigma2_master/RecordTimer.py:501
-msgid "The timer file (timers.xml) is corrupt and could not be loaded."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:750
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:777
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:798
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:924
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:750
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:777
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:798
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:924
-msgid ""
-"The wireless LAN plugin is not installed!\n"
-"Please install it."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:614
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:614
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-msgid ""
-"The wizard can backup your current settings. Do you want to do a backup now?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:207
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:207
-#, python-format
-msgid ""
-"The wizard found a configuration backup. Do you want to restore your old "
-"settings from %s?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:204
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:209
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:630
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:674
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:685
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:204
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:209
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:630
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:674
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:685
-msgid "There are at least "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:678
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:691
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:678
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:691
-msgid "There are currently no outstanding actions."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:632
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:632
-msgid "There are no updates available."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:142
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:150
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:142
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:150
-msgid "There are now "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:364
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:364
-msgid ""
-"There might not be enough Space on the selected Partition.\n"
-"Do you really want to continue?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:614
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1756
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:614
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1754
-msgid "There was an error downloading the packetlist. Please try again."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:480
-msgid "There was an error getting the feed entries. Please try again."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:141
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:141
-msgid "There was an error. The package:"
-msgstr ""
-
-#: ../enigma2_plugins/genuinedreambox/src/plugin.py:130
-msgid ""
-"There's a certificate update available for your dreambox. Would you like to "
-"apply this update now?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:178
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:178
-msgid ""
-"This DVD RW medium is already formatted - reformatting will erase all "
-"content on the disc."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:280
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:286
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:280
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:286
-#, python-format
-msgid "This Dreambox can't decode %s streams!"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:169
-#: ../enigma2_plugins/mytube/src/plugin.py:60
-msgid "This Month"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:170
-#: ../enigma2_plugins/mytube/src/plugin.py:61
-msgid "This Week"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:459
-msgid ""
-"This is a name you can give the AutoTimer. It will be shown in the Overview "
-"and the Preview."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerSettings.py:40
-msgid ""
-"This is the delay in hours that the AutoTimer will wait after a search to "
-"search the EPG again."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:1488
-msgid "This is the help screen. Feed me with something to display."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:460
-msgid ""
-"This is what will be looked for in event titles. Note that looking for e.g. "
-"german umlauts can be tricky as you have to know the encoding the channel "
-"uses."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:693
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:693
-msgid ""
-"This plugin creates a USB stick which can be used to update the firmware of "
-"your Dreambox without the need for a network or WLAN connection.\n"
-"First, a USB stick needs to be prepared so that it becomes bootable.\n"
-"In the next step, an NFI image file can be downloaded from the update server "
-"and saved on the USB stick.\n"
-"If you already have a prepared bootable USB stick, please insert it now. "
-"Otherwise plug in a USB stick with a minimum size of 64 MB!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1101
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1101
-msgid "This plugin is installed."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1103
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1103
-msgid "This plugin is not installed."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1105
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1105
-msgid "This plugin will be installed."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1107
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1107
-msgid "This plugin will be removed."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerSettings.py:42
-msgid "This setting controls the behavior when a timer matches a found event."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1287
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1287
-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 ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1272
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1272
-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 ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1282
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1282
-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 ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1277
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1277
-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 ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1267
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1267
-msgid "This test detects your configured LAN-Adapter."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerSettings.py:44
-msgid ""
-"This toggles the behavior on timer conflicts. If an AutoTimer matches an "
-"event that conflicts with an existing timer it will not ignore this event "
-"but add it disabled."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1181
-#: ../enigma2_master/lib/python/Components/NimManager.py:1181
-msgid "Three"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:254
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:266
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:254
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:266
-msgid "Threshold"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/EpgSelection.py:326
-#: ../enigma2_experimental/lib/python/Components/EpgList.py:38
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:24
-#: ../enigma2_experimental/lib/python/Tools/FuzzyDate.py:13
-#: ../enigma2_master/lib/python/Screens/EpgSelection.py:326
-#: ../enigma2_master/lib/python/Components/EpgList.py:38
-#: ../enigma2_master/lib/python/Components/TimerList.py:24
-#: ../enigma2_master/lib/python/Tools/FuzzyDate.py:13
-msgid "Thu"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:61
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:61
-msgid "Thumbnails"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:124
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:166
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:124
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:166
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:47
-msgid "Thursday"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimeDateInput.py:47
-#: ../enigma2_master/lib/python/Screens/TimeDateInput.py:47
-msgid "Time"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:471
-msgid "Time in minutes to append to recording."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:470
-msgid "Time in minutes to prepend to recording."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:143
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:143
-msgid "Timer Type"
-msgstr ""
-
-#: ../enigma2_experimental/RecordTimer.py:523
-#: ../enigma2_master/RecordTimer.py:523
-msgid ""
-"Timer overlap in timers.xml detected!\n"
-"Please recheck it!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/RecordPaths.py:93
-#: ../enigma2_master/lib/python/Screens/RecordPaths.py:93
-msgid "Timer record location"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:30
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:32
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:30
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:32
-msgid "Timer status:"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:501
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:182
-#: ../enigma2_plugins/autotimer/src/AutoTimerWizard.py:88
-msgid "Timer type"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/RecordPaths.py:100
-#: ../enigma2_master/lib/python/Screens/RecordPaths.py:100
-msgid "Timeshift location"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1203
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1203
-msgid "Timeshift not possible!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:19
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:158
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:80
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:97
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:431
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:127
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:19
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:158
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:80
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:97
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:431
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:127
-msgid "Title"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:63
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:294
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:63
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:294
-msgid "Title properties"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:171
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:171
-msgid "Titleset mode"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:634
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:634
-msgid ""
-"To update your Dreambox firmware, please follow these steps:\n"
-"1) Turn off your box with the rear power switch and make sure the bootable "
-"USB stick is plugged in.\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 ""
-
-#: ../enigma2_experimental/lib/python/Screens/EpgSelection.py:336
-#: ../enigma2_experimental/lib/python/Tools/FuzzyDate.py:10
-#: ../enigma2_master/lib/python/Screens/EpgSelection.py:336
-#: ../enigma2_master/lib/python/Tools/FuzzyDate.py:10
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:171
-#: ../enigma2_plugins/mytube/src/plugin.py:62
-msgid "Today"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:158
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:158
-msgid "Tone Amplitude"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:304
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:304
-msgid "Tone mode"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:310
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:310
-msgid "Toneburst"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:515
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1155
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:515
-#: ../enigma2_master/lib/python/Components/NimManager.py:1155
-msgid "Toneburst A/B"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:242
-#: ../enigma2_plugins/mytube/src/plugin.py:133
-#: ../enigma2_plugins/mytube/src/plugin.py:793
-msgid "Top favorites"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:239
-#: ../enigma2_plugins/mytube/src/plugin.py:130
-#: ../enigma2_plugins/mytube/src/plugin.py:792
-msgid "Top rated"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:79
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:79
-msgid "Track"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:149
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:149
-msgid "Transmission Mode"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:415
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:415
-msgid "Transmission mode"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:86
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:455
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:93
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:86
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:455
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:93
-msgid "Transponder"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:134
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:134
-msgid "Transponder Type"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:186
-#: ../enigma2_plugins/mytube/src/plugin.py:77
-msgid "Travel & Events"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InputBox.py:175
-#: ../enigma2_master/lib/python/Screens/InputBox.py:175
-msgid "Tries left:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:159
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:159
-msgid "Try to find used Transponders in cable network.. please wait..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:261
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:261
-msgid "Try to find used transponders in cable network.. please wait..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1752
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1750
-msgid "Trying to download a new packetlist. Please wait..."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:417
-#: ../enigma2_plugins/mytube/src/plugin.py:476
-msgid "Trying to download the Youtube feed entries. Please wait..."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:478
-msgid "Trying to download the Youtube search results. Please wait..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/EpgSelection.py:326
-#: ../enigma2_experimental/lib/python/Components/EpgList.py:38
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:24
-#: ../enigma2_experimental/lib/python/Tools/FuzzyDate.py:13
-#: ../enigma2_master/lib/python/Screens/EpgSelection.py:326
-#: ../enigma2_master/lib/python/Components/EpgList.py:38
-#: ../enigma2_master/lib/python/Components/TimerList.py:24
-#: ../enigma2_master/lib/python/Tools/FuzzyDate.py:13
-msgid "Tue"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:124
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:164
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:124
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:164
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:45
-msgid "Tuesday"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:190
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:222
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:428
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:65
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:190
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:222
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:428
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:65
-msgid "Tune"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:2215
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:2215
-msgid "Tune failed!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:124
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:133
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:510
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:341
-#: ../enigma2_experimental/lib/python/Components/ServiceScan.py:137
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:124
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:133
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:510
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:341
-#: ../enigma2_master/lib/python/Components/ServiceScan.py:137
-msgid "Tuner"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:528
-#: ../enigma2_master/lib/python/Components/NimManager.py:528
-msgid "Tuner "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ServiceInfo.py:87
-#: ../enigma2_master/lib/python/Screens/ServiceInfo.py:87
-msgid "Tuner status"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:102
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:102
-msgid "Tuner type"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:42
-#: ../enigma2_master/lib/python/Components/Language.py:42
-msgid "Turkish"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1181
-#: ../enigma2_master/lib/python/Components/NimManager.py:1181
-msgid "Two"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:272
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:283
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:272
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:283
-msgid "Type"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:352
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:355
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:358
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:352
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:355
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:358
-msgid "Type of scan"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:537
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1159
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:537
-#: ../enigma2_master/lib/python/Components/NimManager.py:1159
-msgid "USALS"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Harddisk.py:442
-#: ../enigma2_master/lib/python/Components/Harddisk.py:442
-msgid "USB Stick"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:118
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:736
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:118
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:736
-msgid "USB stick wizard"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Language.py:43
-#: ../enigma2_master/lib/python/Components/Language.py:43
-msgid "Ukrainian"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/HarddiskSetup.py:75
-#: ../enigma2_master/lib/python/Screens/HarddiskSetup.py:75
-msgid ""
-"Unable to complete filesystem check.\n"
-"Error: "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/HarddiskSetup.py:73
-#: ../enigma2_master/lib/python/Screens/HarddiskSetup.py:73
-msgid ""
-"Unable to initialize harddisk.\n"
-"Error: "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:328
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:328
-msgid "Uncommitted DiSEqC command"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:668
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:668
-msgid "Undo install"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:666
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:666
-msgid "Undo uninstall"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1077
-#: ../enigma2_master/lib/python/Components/NimManager.py:1077
-msgid "Unicable"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1138
-#: ../enigma2_master/lib/python/Components/NimManager.py:1138
-msgid "Unicable LNB"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1139
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1196
-#: ../enigma2_master/lib/python/Components/NimManager.py:1139
-#: ../enigma2_master/lib/python/Components/NimManager.py:1196
-msgid "Unicable Martix"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:660
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:660
-msgid "Uninstall"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:224
-#: ../enigma2_plugins/mytube/src/plugin.py:115
-msgid "United States"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1076
-#: ../enigma2_master/lib/python/Components/NimManager.py:1076
-msgid "Universal LNB"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Network.py:358
-#: ../enigma2_master/lib/python/Components/Network.py:358
-msgid "Unknown network adapter."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerSettings.py:39
-msgid ""
-"Unless this is enabled AutoTimer will NOT automatically look for events "
-"matching your AutoTimers but only when you leave the GUI with the green "
-"button."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Harddisk.py:236
-#: ../enigma2_master/lib/python/Components/Harddisk.py:236
-msgid "Unmount failed"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:459
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:469
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:459
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py:469
-msgid "Unsupported"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:33
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:686
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:33
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:686
-msgid "Update"
-msgstr ""
-
-#: ../enigma2_plugins/genuinedreambox/src/plugin.py:167
-msgid "Update done..."
-msgstr ""
-
-#: ../enigma2_plugins/genuinedreambox/src/plugin.py:170
-msgid ""
-"Update done... The genuine dreambox test will now be rerun and should not "
-"ask you to update again."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:638
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:638
-msgid "Updatefeed not available."
-msgstr ""
-
-#: ../enigma2_plugins/genuinedreambox/src/plugin.py:150
-msgid ""
-"Updating failed. Nothing is broken, just the update couldn't be applied."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:46
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:145
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:46
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:145
-msgid "Updating finished. Here is the result:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:607
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:607
-msgid "Updating software catalog"
-msgstr ""
-
-#: ../enigma2_plugins/genuinedreambox/src/plugin.py:118
-msgid "Updating, please wait..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:52
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:151
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:52
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:151
-msgid "Updating... Please wait... This can take some minutes..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1440
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1818
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1440
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1816
-msgid "Upgrade finished."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ipkg.py:88
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1022
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1379
-#: ../enigma2_master/lib/python/Screens/Ipkg.py:88
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1022
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1379
-msgid "Upgrading"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1338
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1338
-msgid "Upgrading Dreambox... Please wait"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:477
-msgid "Upper bound of timespan."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:468
-msgid ""
-"Upper bound of timespan. Nothing after this time will be matched. Offsets "
-"are not taken into account!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/settings.py:28
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:319
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/settings.py:28
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:319
-msgid "Use"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:494
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:494
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Use DHCP"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:490
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:490
-msgid "Use Interface"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:43
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:337
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:43
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:337
-msgid "Use Power Measurement"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:552
-msgid "Use a custom location"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:499
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:499
-msgid "Use a gateway"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:60
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:60
-msgid "Use the Networkwizard to configure selected network adapter"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:858
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:858
-msgid "Use the Networkwizard to configure your Network\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InputDeviceSetup.py:252
-#: ../enigma2_master/lib/python/Screens/InputDeviceSetup.py:252
-msgid "Use this input device settings?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:397
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:397
-msgid "Use this settings?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:164
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:164
-msgid "Use this video enhancement settings?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:93
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:93
-msgid "Use time of currently running service"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:352
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:352
-msgid "Use usals for this sat"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:163
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:163
-msgid "Used service scan type"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1079
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1140
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1196
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1198
-#: ../enigma2_master/lib/python/Components/NimManager.py:1079
-#: ../enigma2_master/lib/python/Components/NimManager.py:1140
-#: ../enigma2_master/lib/python/Components/NimManager.py:1196
-#: ../enigma2_master/lib/python/Components/NimManager.py:1198
-msgid "User defined"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountManager.py:75
-msgid "User management"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/UserManager.py:60
-msgid "Usermanager"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/Modem/plugin.py:112
-#: ../enigma2_master/lib/python/Plugins/Extensions/Modem/plugin.py:112
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:195
-#: ../enigma2_plugins/networkbrowser/src/UserDialog.py:128
-msgid "Username"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:173
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:173
-msgid "VMGM (intro trailer)"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:398
-#: ../enigma2_plugins/mytube/src/plugin.py:422
-#: ../enigma2_plugins/mytube/src/plugin.py:464
-msgid ""
-"Verify your Dreambox authenticity by running the genuine dreambox plugin!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Tools/Transponder.py:32
-#: ../enigma2_master/lib/python/Tools/Transponder.py:32
-msgid "Vertical"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoTune/plugin.py:33
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoTune/plugin.py:37
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoTune/plugin.py:33
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoTune/plugin.py:37
-msgid "Video Fine-Tuning"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoTune/plugin.py:38
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoTune/plugin.py:38
-msgid "Video Fine-Tuning Wizard"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:56
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:56
-msgid "Video Output"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:230
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:230
-msgid "Video Setup"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:233
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:233
-msgid "Video Wizard"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:310
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:310
-msgid "Video enhancement preview"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:392
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:392
-msgid "Video enhancement settings"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:58
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:58
-msgid "Video enhancement setup"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:428
-msgid "Videobrowser exit behavior:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:397
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoEnhancement/plugin.py:397
-msgid "Videoenhancement Setup"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:427
-msgid "Videoplayer stop/exit behavior:"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:162
-#: ../enigma2_plugins/mytube/src/plugin.py:53
-msgid "View Count"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:1003
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:1003
-msgid "View Movies..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:622
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:622
-msgid "View Photos..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:1427
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:1427
-msgid "View Rass interactive..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:1013
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:1013
-msgid "View Video CD..."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:539
-msgid "View active downloads"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:671
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:671
-msgid "View details"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:876
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:876
-msgid "View list of available "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:860
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:860
-msgid "View list of available CommonInterface extensions"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:870
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:870
-msgid "View list of available Display and Userinterface extensions."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:872
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:872
-msgid "View list of available EPG extensions."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:864
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:864
-msgid "View list of available Satellite equipment extensions."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:874
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:874
-msgid "View list of available communication extensions."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:862
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:862
-msgid "View list of available default settings"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:868
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:868
-msgid "View list of available multimedia extensions."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:858
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:858
-msgid "View list of available networking extensions"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:856
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:856
-msgid "View list of available recording extensions"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:854
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:854
-msgid "View list of available skins"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:866
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:866
-msgid "View list of available software extensions"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:852
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:852
-msgid "View list of available system extensions"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:533
-msgid "View related videos"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:534
-msgid "View response videos"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:2128
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:2128
-msgid "View teletext..."
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountManager.py:74
-msgid "View, edit or delete mountpoints on your Dreambox."
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountManager.py:75
-msgid "View, edit or delete usernames and passwords for your network."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:1103
-#: ../enigma2_plugins/mytube/src/plugin.py:1344
-msgid "Views: "
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:302
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:302
-msgid "Voltage mode"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:971
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:395
-#: ../enigma2_experimental/lib/python/Components/ServiceScan.py:49
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:482
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:971
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:395
-#: ../enigma2_master/lib/python/Components/ServiceScan.py:49
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:482
-msgid "W"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:431
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:431
-msgid "WEP"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Network.py:348
-#: ../enigma2_experimental/lib/python/Components/Network.py:350
-#: ../enigma2_experimental/lib/python/Components/Network.py:352
-#: ../enigma2_experimental/lib/python/Components/Network.py:354
-#: ../enigma2_experimental/lib/python/Components/Network.py:356
-#: ../enigma2_master/lib/python/Components/Network.py:348
-#: ../enigma2_master/lib/python/Components/Network.py:350
-#: ../enigma2_master/lib/python/Components/Network.py:352
-#: ../enigma2_master/lib/python/Components/Network.py:354
-#: ../enigma2_master/lib/python/Components/Network.py:356
-msgid "WLAN adapter."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Network.py:333
-#: ../enigma2_experimental/lib/python/Components/Network.py:336
-#: ../enigma2_master/lib/python/Components/Network.py:333
-#: ../enigma2_master/lib/python/Components/Network.py:336
-msgid "WLAN connection"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:432
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:432
-msgid "WPA"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:434
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:434
-msgid "WPA or WPA2"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:433
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:433
-msgid "WPA2"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:93
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/plugin.py:93
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "WSS on 4:3"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/AC3setup.py:44
-msgid "Wait time in ms before activation:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Task.py:42
-#: ../enigma2_master/lib/python/Components/Task.py:42
-msgid "Waiting"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:76
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/plugin.py:76
-msgid "Warn if free space drops below (kB):"
-msgstr ""
-
-#: ../enigma2_plugins/webinterface/src/plugin.py:540
-msgid "Webinterface"
-msgstr ""
-
-#: ../enigma2_plugins/webinterface/src/WebIfConfig.py:93
-msgid "Webinterface: Main Setup"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/EpgSelection.py:326
-#: ../enigma2_experimental/lib/python/Components/EpgList.py:38
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:24
-#: ../enigma2_experimental/lib/python/Tools/FuzzyDate.py:13
-#: ../enigma2_master/lib/python/Screens/EpgSelection.py:326
-#: ../enigma2_master/lib/python/Components/EpgList.py:38
-#: ../enigma2_master/lib/python/Components/TimerList.py:24
-#: ../enigma2_master/lib/python/Tools/FuzzyDate.py:13
-msgid "Wed"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:124
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:165
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:124
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:165
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:46
-msgid "Wednesday"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:160
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:160
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:52
-msgid "Weekday"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:51
-msgid "Weekend"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:285
-msgid "Weekly (Monday)"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:285
-msgid "Weekly (Sunday)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:207
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:207
-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 ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:272
-msgid ""
-"Welcome to the MyTube Youtube Player.\n"
-"\n"
-"Use the Bouqet+ button to navigate to the search field and the Bouqet- to "
-"navigate to the video entries.\n"
-"\n"
-"To play a movie just press OK on your remote control.\n"
-"\n"
-"Press info to see the movie description.\n"
-"\n"
-"Press the Menu button for additional options.\n"
-"\n"
-"The Help button shows this help again."
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:271
-msgid ""
-"Welcome to the MyTube Youtube Player.\n"
-"\n"
-"While entering your search term(s) you will get suggestions displayed "
-"matching your search term.\n"
-"\n"
-"To select a suggestion press DOWN on your remote, select the desired result "
-"and press OK on your remote to start the search.\n"
-"\n"
-"Press exit to get back to the input field."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1163
-#: ../enigma2_master/lib/python/Components/NimManager.py:1163
-msgid "West"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:120
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:120
-msgid "What to do with submitted crashlogs?"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:481
-msgid ""
-"When this option is enabled the AutoTimer won't match events where another "
-"timer with the same description already exists in the timer list."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/FactoryReset.py:5
-#: ../enigma2_master/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 ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:522
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:522
-msgid "Where to save temporary timeshift recordings?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:466
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:466
-msgid "Wireless LAN"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1326
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1326
-msgid "Wireless Network"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:116
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:116
-msgid "Wireless Network State"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:465
-msgid ""
-"With this option enabled the channel to record on can be changed to a "
-"alternative service it is restricted to."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:478
-msgid ""
-"With this option you can restrict the AutoTimer to a certain ammount of "
-"scheduled recordings. Set this to 0 to disable this functionality."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/plugin.py:28
-msgid "Wizard"
-msgstr ""
-
-#: ../enigma2_experimental/RecordTimer.py:376
-#: ../enigma2_master/RecordTimer.py:376
-msgid "Write error while recording. Disk full?\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/Process.py:295
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/Process.py:295
-msgid "Write failed!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:75
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:75
-msgid "YPbPr"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:131
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:131
-msgid "Year"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ci.py:25
-#: ../enigma2_experimental/lib/python/Screens/Ci.py:27
-#: ../enigma2_experimental/lib/python/Screens/InfoBar.py:168
-#: ../enigma2_experimental/lib/python/Screens/InfoBar.py:173
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:401
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:276
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:561
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:717
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:272
-#: ../enigma2_master/lib/python/Screens/Ci.py:25
-#: ../enigma2_master/lib/python/Screens/Ci.py:27
-#: ../enigma2_master/lib/python/Screens/InfoBar.py:168
-#: ../enigma2_master/lib/python/Screens/InfoBar.py:173
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:401
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:276
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:561
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:717
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:272
-#: ../enigma2_plugins/mytube/src/MyTubeSearch.py:175
-#: ../enigma2_plugins/mytube/src/plugin.py:66
-#: ../enigma2_plugins/mytube/src/plugin.py:619
-#: ../enigma2_plugins/mytube/src/plugin.py:625
-#: ../enigma2_plugins/mytube/src/plugin.py:1743 ../enigma2_experimental/data/
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/
-#: ../enigma2_master/data/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/
-#: ../enigma2_plugins/autotimer/src/
-msgid "Yes"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:401
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:401
-msgid "Yes to all"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:51
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:51
-msgid "Yes, always"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBar.py:175
-#: ../enigma2_master/lib/python/Screens/InfoBar.py:175
-msgid "Yes, and delete this movie"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:277
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:277
-msgid "Yes, and don't ask again"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:1745
-msgid "Yes, but play next video"
-msgstr ""
-
-#: ../enigma2_plugins/mytube/src/plugin.py:1746
-msgid "Yes, but play previous video"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBar.py:174
-#: ../enigma2_master/lib/python/Screens/InfoBar.py:174
-msgid "Yes, returning to movie list"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1105
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1105
-msgid "You can cancel the installation."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1107
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1107
-msgid "You can cancel the removal."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1103
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1103
-msgid "You can install this plugin."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:215
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:215
-msgid "You can only burn Dreambox recordings!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1101
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1101
-msgid "You can remove this plugin."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBar.py:211
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:130
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:710
-#: ../enigma2_master/lib/python/Screens/InfoBar.py:211
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:130
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:710
-msgid "You cannot delete this!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:282
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:282
-msgid "You didn't select a channel to record from."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:653
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:241
-#, python-format
-msgid ""
-"You entered \"%s\" as Text to match.\n"
-"Do you want to remove trailing whitespaces?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:715
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:715
-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 ""
-
-#: ../enigma2_experimental/lib/python/Screens/InputBox.py:104
-#: ../enigma2_master/lib/python/Screens/InputBox.py:104
-#, python-format
-msgid "You have to wait %s!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:257
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:257
-msgid ""
-"Your Dreambox is now ready to use.\n"
-"\n"
-"Your internet connection is working now.\n"
-"\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:705
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:705
-msgid "Your Dreambox will restart after pressing OK on your remote control."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:325
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:325
-msgid ""
-"Your collection exceeds the size of a single layer medium, you will need a "
-"blank dual layer DVD!"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/plugin.py:87
-#, python-format
-msgid ""
-"Your config file is not well-formed:\n"
-"%s"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:239
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:376
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:239
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:376
-msgid "Your current collection will get lost!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1429
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1429
-msgid ""
-"Your dreambox isn't connected to the internet properly. Please check it and "
-"try again."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:122
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:122
-msgid "Your email address:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/FrontprocessorUpgrade/plugin.py:34
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/FrontprocessorUpgrade/plugin.py:34
-msgid ""
-"Your frontprocessor firmware must be upgraded.\n"
-"Press OK to start upgrade."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:123
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py:123
-msgid "Your name (optional):"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:632
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:634
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:632
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:634
-msgid "Your network configuration has been activated."
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:339
-msgid "Your network mount has been activated."
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountView.py:128
-msgid "Your network mount has been removed."
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:301
-msgid "Your network mount has been updated."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ServiceStopScreen.py:33
-#: ../enigma2_master/lib/python/Screens/ServiceStopScreen.py:33
-msgid "Zap back to previously tuned service?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:158
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:158
-msgid "Zap back to service before positioner setup?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:217
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:217
-msgid "Zap back to service before satfinder?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:406
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:442
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:463
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:406
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:442
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:463
-msgid "Zap back to service before tuner setup?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/Network.py:350
-#: ../enigma2_master/lib/python/Components/Network.py:350
-msgid "Zydas"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:565
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:565
-msgid "[alternative edit]"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:569
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:569
-msgid "[bouquet edit]"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:571
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:571
-msgid "[favourite edit]"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:663
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:663
-msgid "[move mode]"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:645
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:645
-msgid "a gui to assign services/providers to common interface modules"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:641
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:641
-msgid "a gui to assign services/providers/caids to common interface modules"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:171
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:171
-msgid "abort alternatives edit"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:165
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:165
-msgid "abort bouquet edit"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:168
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:168
-msgid "abort favourites edit"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:55
-#: ../enigma2_master/lib/python/Components/TimerList.py:55
-msgid "about to start"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:249
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:249
-msgid "activate current configuration"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:338
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:338
-msgid "activate network adapter configuration"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/plugin.py:164
-#: ../enigma2_plugins/autotimer/src/plugin.py:165
-msgid "add AutoTimer..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:122
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:122
-msgid "add Provider"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:121
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:121
-msgid "add Service"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:255
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:255
-msgid "add a nameserver entry"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:158
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:158
-msgid "add alternatives"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:408
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:408
-msgid "add bookmark"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:140
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:140
-msgid "add bouquet"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:493
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:493
-msgid "add directory to playlist"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:154
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:154
-msgid "add file to playlist"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:495
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:495
-msgid "add files to playlist"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:427
-msgid "add filters"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:148
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:148
-msgid "add marker"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1652
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1662
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1652
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1662
-msgid "add recording (enter recording duration)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1653
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1663
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1653
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1663
-msgid "add recording (enter recording endtime)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1651
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1661
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1651
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1661
-msgid "add recording (indefinitely)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1650
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1660
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1650
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1660
-msgid "add recording (stop after current event)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:120
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:120
-msgid "add service to bouquet"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:123
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:123
-msgid "add service to favourites"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:433
-msgid "add services"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:110
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:110
-msgid "add to parental protection"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:63
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:543
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1434
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:63
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:543
-#: ../enigma2_master/lib/python/Components/NimManager.py:1434
-msgid "advanced"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:75
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:75
-msgid "alphabetic sort"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:124
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:124
-msgid "assigned CAIds:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:126
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:126
-msgid "assigned Services/Provider:"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:87
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:87
-#, python-format
-msgid "audio track (%s) format"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:88
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:88
-#, python-format
-msgid "audio track (%s) language"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/AudioSelection.py:52
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_master/lib/python/Screens/AudioSelection.py:52
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-msgid "audio tracks"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:102
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:102
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:241
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:29
-msgid "auto"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:142
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:150
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:142
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:150
-msgid "available"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:173
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:56
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:173
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:56
-msgid "back"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:160
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:160
-msgid "background image"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:183
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:183
-msgid "backgroundcolor"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:23
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:23
-msgid "better"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:28
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:28
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
-msgid "black"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/ParentalControl.py:33
-#: ../enigma2_master/lib/python/Components/ParentalControl.py:33
-msgid "blacklist"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:28
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:28
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
-msgid "blue"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:85
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:85
-#, python-format
-msgid "burn audio track (%s)"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:181
-msgid "case-insensitive search"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:181
-msgid "case-sensitive search"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1654
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1654
-msgid "change recording (duration)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1655
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1655
-msgid "change recording (endtime)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:101
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:101
-msgid "chapters"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:577
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:577
-msgid "circular left"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:578
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:578
-msgid "circular right"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:171
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:501
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:171
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:501
-msgid "clear playlist"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/ParentalControl.py:28
-#: ../enigma2_master/lib/python/Components/ParentalControl.py:28
-msgid "complex"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1395
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1409
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1395
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1409
-msgid "confirmed"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1384
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1440
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:295
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1384
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1440
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:295
-msgid "connected"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:756
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:504
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:756
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:504
-msgid "continue"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:129
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:129
-msgid "copy to bouquets"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:141
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:141
-msgid "could not be removed"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:412
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:412
-msgid "create directory"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:103
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:103
-#, python-format
-msgid "currently installed image: %s"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:109
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:109
-msgid "daily"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-msgid "day"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:813
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:1016
-msgid "delete"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:69
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:71
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:69
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:71
-msgid "delete cut"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:498
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:498
-msgid "delete file"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:170
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:170
-msgid "delete playlist entry"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:509
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:509
-msgid "delete saved playlist"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:69
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:69
-msgid "delete..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1207
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1207
-msgid "description"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/config.py:449
-#: ../enigma2_master/lib/python/Components/config.py:449
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:128
-msgid "disable"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:160
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:160
-msgid "disable move mode"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1213
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1501
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:69
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1213
-#: ../enigma2_master/lib/python/Components/NimManager.py:1501
-#: ../enigma2_master/lib/python/Components/TimerList.py:69
-msgid "disabled"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1369
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1388
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1435
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1369
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1388
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1435
-msgid "disconnected"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:28
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:28
-msgid "do not change"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1656
-#: ../enigma2_experimental/lib/python/Screens/TaskView.py:51
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:102
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1656
-#: ../enigma2_master/lib/python/Screens/TaskView.py:51
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:102
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:238
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:26
-msgid "do nothing"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1664
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1664
-msgid "don't record"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:62
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:66
-#: ../enigma2_master/lib/python/Components/TimerList.py:62
-#: ../enigma2_master/lib/python/Components/TimerList.py:66
-msgid "done!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:154
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:154
-msgid "edit alternatives"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:425
-msgid "edit filters"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:431
-msgid "edit services"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:576
-#: ../enigma2_master/lib/python/Components/NimManager.py:576
-msgid "empty"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/config.py:449
-#: ../enigma2_master/lib/python/Components/config.py:449
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:128
-msgid "enable"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:150
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:150
-msgid "enable bouquet edit"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:152
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:152
-msgid "enable favourite edit"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:146
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:146
-msgid "enable move mode"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1209
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:548
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1448
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1488
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1209
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:548
-#: ../enigma2_master/lib/python/Components/NimManager.py:1448
-#: ../enigma2_master/lib/python/Components/NimManager.py:1488
-msgid "enabled"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:170
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:170
-msgid "end alternatives edit"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:164
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:164
-msgid "end bouquet edit"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:64
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:66
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:64
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:66
-msgid "end cut here"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:167
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:167
-msgid "end favourites edit"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:463
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:319
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:368
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:294
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:340
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:365
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:463
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:319
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:368
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:294
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:340
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:365
-msgid "enter hidden network SSID"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:68
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:508
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1436
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:68
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:508
-#: ../enigma2_master/lib/python/Components/NimManager.py:1436
-msgid "equal to"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:180
-msgid "exact match"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:346
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:346
-msgid "exit DVD player or return to file browser"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:155
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:155
-msgid "exit mediaplayer"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:237
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:237
-msgid "exit movielist"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:248
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:254
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:248
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:254
-msgid "exit nameserver configuration"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:337
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:343
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:337
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:343
-msgid "exit network adapter configuration"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:52
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:58
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:52
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:58
-msgid "exit network interface list"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:718
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:724
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:718
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:724
-msgid "exit networkadapter setup menu"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:628
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:628
-msgid "fileformats (BMP, PNG, JPG, GIF)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:237
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:237
-msgid "filename"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/VideoTune/plugin.py:37
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/VideoTune/plugin.py:37
-msgid "fine-tune your display"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:342
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:342
-msgid "forward to the next chapter"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:322
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:332
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:322
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:332
-msgid "free"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/DiskInfo.py:30
-#: ../enigma2_master/lib/python/Components/DiskInfo.py:30
-msgid "free diskspace"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TaskView.py:48
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:99
-#: ../enigma2_master/lib/python/Screens/TaskView.py:48
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:99
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:240
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:27
-msgid "go to deep standby"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TaskView.py:51
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:102
-#: ../enigma2_master/lib/python/Screens/TaskView.py:51
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:102
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:239
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:28
-msgid "go to standby"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:83
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:83
-msgid "grab this frame as bitmap"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:28
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:28
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
-msgid "green"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBar.py:63
-#: ../enigma2_master/lib/python/Screens/InfoBar.py:63
-msgid "hear radio..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:85
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:85
-msgid "hide extended description"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:505
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:505
-msgid "hide player"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:575
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:575
-msgid "horizontal"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:25
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:25
-msgid "hour"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:25
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:26
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:25
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:26
-msgid "hours"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:54
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:59
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:54
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:59
-msgid "immediate shutdown"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:796
-msgid "in Description"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:795
-msgid "in Shortdescription"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:794
-msgid "in Title"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ci.py:327
-#: ../enigma2_experimental/lib/python/Screens/Ci.py:351
-#: ../enigma2_master/lib/python/Screens/Ci.py:327
-#: ../enigma2_master/lib/python/Screens/Ci.py:351
-msgid "init module"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:57
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:57
-msgid "init modules"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:79
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:79
-msgid "insert mark here"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:345
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:345
-msgid "jump back to the previous title"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:344
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:344
-msgid "jump forward to the next title"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:166
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:166
-msgid "jump to listbegin"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:167
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:167
-msgid "jump to listend"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1883
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1883
-msgid "jump to next marked position"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1882
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1882
-msgid "jump to previous marked position"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBar.py:141
-#: ../enigma2_master/lib/python/Screens/InfoBar.py:141
-msgid "leave movie player..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/AudioSelection.py:80
-#: ../enigma2_master/lib/python/Screens/AudioSelection.py:80
-msgid "left"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-msgid "length"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:490
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:490
-msgid "list of EPG views..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:80
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:80
-msgid "list style compact"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:79
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:79
-msgid "list style compact with description"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:78
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:78
-msgid "list style default"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:81
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:81
-msgid "list style single line"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:506
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:506
-msgid "load playlist"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/TunerInfo.py:77
-#: ../enigma2_master/lib/python/Components/TunerInfo.py:77
-msgid "locked"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:72
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:507
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1439
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:72
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:507
-#: ../enigma2_master/lib/python/Components/NimManager.py:1439
-msgid "loopthrough to"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:539
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1159
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:539
-#: ../enigma2_master/lib/python/Components/NimManager.py:1159
-msgid "manual"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:147
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:223
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:181
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:71
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:165
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:147
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:223
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:181
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/TitleList.py:71
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:165
-msgid "menu"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:860
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:860
-msgid "menulist"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:39
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:41
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:47
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:49
-#: ../enigma2_master/lib/python/Components/TimerList.py:39
-#: ../enigma2_master/lib/python/Components/TimerList.py:41
-#: ../enigma2_master/lib/python/Components/TimerList.py:47
-#: ../enigma2_master/lib/python/Components/TimerList.py:49
-#: ../enigma2_plugins/autotimer/src/AutoTimerPreview.py:52
-msgid "mins"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:23
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:23
-msgid "minute"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InputBox.py:104
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:44
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:23
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:24
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:25
-#: ../enigma2_master/lib/python/Screens/InputBox.py:104
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:44
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:23
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:24
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:25
-msgid "minutes"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:117
-msgid "month"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:32
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:32
-msgid "move PiP to main picture"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:713
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:713
-msgid "move down to last entry"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:711
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:711
-msgid "move down to next entry"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:712
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:712
-msgid "move up to first entry"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:710
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:710
-msgid "move up to previous entry"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1138
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1139
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1140
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1138
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1139
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1140
-msgid "movie list"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/AVSwitch.py:112
-#: ../enigma2_master/lib/python/Components/AVSwitch.py:112
-msgid "multinorm"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/ParentalControl.py:29
-#: ../enigma2_experimental/lib/python/Components/ParentalControl.py:30
-#: ../enigma2_master/lib/python/Components/ParentalControl.py:29
-#: ../enigma2_master/lib/python/Components/ParentalControl.py:30
-msgid "never"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:299
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:299
-msgid "next channel"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:301
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:301
-msgid "next channel in history"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MessageBox.py:44
-#: ../enigma2_experimental/lib/python/Screens/MessageBox.py:46
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:537
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:923
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:92
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:114
-#: ../enigma2_experimental/lib/python/Components/config.py:439
-#: ../enigma2_master/lib/python/Screens/MessageBox.py:44
-#: ../enigma2_master/lib/python/Screens/MessageBox.py:46
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:537
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:923
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:92
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:114
-#: ../enigma2_master/lib/python/Components/config.py:439
-msgid "no"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:231
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:234
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:231
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:234
-msgid "no CAId selected"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:62
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:62
-msgid "no CI slots found"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/HarddiskSetup.py:100
-#: ../enigma2_master/lib/python/Screens/HarddiskSetup.py:100
-msgid "no HDD found"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:189
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:189
-msgid "no Services/Providers selected"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ci.py:325
-#: ../enigma2_experimental/lib/python/Screens/Ci.py:349
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:55
-#: ../enigma2_master/lib/python/Screens/Ci.py:325
-#: ../enigma2_master/lib/python/Screens/Ci.py:349
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:55
-msgid "no module found"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:22
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:22
-msgid "no standby"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:15
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:15
-msgid "no timeout"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/About.py:40
-#: ../enigma2_master/lib/python/Screens/About.py:40
-msgid "none"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:61
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:512
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:61
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:512
-msgid "not configured"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/TunerInfo.py:79
-#: ../enigma2_master/lib/python/Components/TunerInfo.py:79
-msgid "not locked"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:587
-#: ../enigma2_master/lib/python/Components/NimManager.py:587
-msgid "not supported"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1219
-#: ../enigma2_master/lib/python/Components/NimManager.py:1219
-msgid "not used"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:546
-#: ../enigma2_experimental/lib/python/Components/FileList.py:200
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1161
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1433
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1449
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1489
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:546
-#: ../enigma2_master/lib/python/Components/FileList.py:200
-#: ../enigma2_master/lib/python/Components/NimManager.py:1161
-#: ../enigma2_master/lib/python/Components/NimManager.py:1433
-#: ../enigma2_master/lib/python/Components/NimManager.py:1449
-#: ../enigma2_master/lib/python/Components/NimManager.py:1489
-msgid "nothing connected"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:140
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:140
-msgid "of a DUAL layer medium used."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:143
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:143
-msgid "of a SINGLE layer medium used."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:570
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:605
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:612
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:635
-#: ../enigma2_experimental/lib/python/Components/config.py:444
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:28
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:570
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:605
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:612
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:635
-#: ../enigma2_master/lib/python/Components/config.py:444
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:28
-msgid "off"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:571
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:606
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:613
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:636
-#: ../enigma2_experimental/lib/python/Components/config.py:444
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:28
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:571
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:606
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:613
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:636
-#: ../enigma2_master/lib/python/Components/config.py:444
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:28
-msgid "on"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:146
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:146
-msgid "on READ ONLY medium."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:797
-msgid "on Weekday"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:103
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:103
-msgid "once"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:344
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:344
-msgid "open nameserver configuration"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:302
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:302
-msgid "open servicelist"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:297
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:297
-msgid "open servicelist(down)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:296
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:296
-msgid "open servicelist(up)"
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:180
-msgid "partial match"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/ServiceScan.py:137
-#: ../enigma2_master/lib/python/Components/ServiceScan.py:137
-msgid "pass"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:755
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:161
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:755
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:161
-msgid "pause"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:160
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:160
-msgid "play entry"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:164
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:164
-msgid "play from next mark or playlist entry"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:163
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:163
-msgid "play from previous mark or playlist entry"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ci.py:93
-#: ../enigma2_master/lib/python/Screens/Ci.py:93
-msgid "please press OK when ready"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/Process.py:462
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:473
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/Process.py:462
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:473
-msgid "please wait, loading picture..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:298
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:298
-msgid "previous channel"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:300
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:300
-msgid "previous channel in history"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:97
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:97
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:187
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:182
-msgid "record"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:60
-#: ../enigma2_master/lib/python/Components/TimerList.py:60
-msgid "recording..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:28
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:28
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
-msgid "red"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:256
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:256
-msgid "remove a nameserver entry"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:74
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:74
-msgid "remove after this position"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:156
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:156
-msgid "remove all alternatives"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:131
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:131
-msgid "remove all new found flags"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:73
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:73
-msgid "remove before this position"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:418
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:418
-msgid "remove bookmark"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:413
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:413
-msgid "remove directory"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:133
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:141
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:133
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:141
-msgid "remove entry"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:112
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:112
-msgid "remove from parental protection"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:135
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:135
-msgid "remove new found flag"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:126
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:126
-msgid "remove selected satellite"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:81
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:81
-msgid "remove this mark"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/settings.py:92
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/settings.py:92
-msgid "repeat playlist"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:103
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:103
-msgid "repeated"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:343
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:343
-msgid "rewind to the previous chapter"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/AudioSelection.py:80
-#: ../enigma2_master/lib/python/Screens/AudioSelection.py:80
-msgid "right"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/settings.py:94
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/settings.py:94
-msgid "save last directory on exit"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:508
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:508
-msgid "save playlist"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/settings.py:93
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/settings.py:93
-msgid "save playlist on exit"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/ServiceScan.py:96
-#: ../enigma2_experimental/lib/python/Components/ServiceScan.py:98
-#: ../enigma2_master/lib/python/Components/ServiceScan.py:96
-#: ../enigma2_master/lib/python/Components/ServiceScan.py:98
-msgid "scan done!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/ServiceScan.py:33
-#: ../enigma2_master/lib/python/Components/ServiceScan.py:33
-#, python-format
-msgid "scan in progress - %d%% done!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ServiceScan.py:48
-#: ../enigma2_master/lib/python/Screens/ServiceScan.py:48
-msgid "scan state"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:15
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:15
-msgid "second"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:70
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:509
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1437
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:70
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:509
-#: ../enigma2_master/lib/python/Components/NimManager.py:1437
-msgid "second cable of motorized LNB"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InputBox.py:104
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:15
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:16
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:17
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:22
-#: ../enigma2_master/lib/python/Screens/InputBox.py:104
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:15
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:16
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:17
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:22
-msgid "seconds"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:127
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:127
-msgid "select"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:123
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:123
-msgid "select CAId"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:381
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py:381
-msgid "select CAId's"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:53
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:59
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:53
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:59
-msgid "select interface"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:719
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:719
-msgid "select menu entry"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:238
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:238
-msgid "select movie"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:217
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:217
-msgid "select the movie path"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:118
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:147
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:118
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:147
-msgid "service PIN"
-msgstr ""
-
-#: ../enigma2_plugins/ac3lipsync/src/plugin.py:36
-msgid "sets the Audio Delay (LipSync)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:120
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:140
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:120
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:140
-msgid "setup PIN"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:340
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:340
-msgid "show DVD main menu"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:489
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:489
-msgid "show EPG..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:180
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:180
-msgid "show Infoline"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:229
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:229
-msgid "show all"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:155
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:155
-msgid "show alternatives"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:402
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:224
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:178
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:402
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:224
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:178
-msgid "show event details"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:87
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:87
-msgid "show extended description"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:230
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:230
-msgid "show first selected tag"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:231
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:231
-msgid "show second selected tag"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:53
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:58
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:53
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:58
-msgid "show shutdown menu"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:600
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:600
-msgid "show single service EPG..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:232
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:232
-msgid "show tag menu"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ChannelSelection.py:103
-#: ../enigma2_master/lib/python/Screens/ChannelSelection.py:103
-msgid "show transponder info"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:172
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:504
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:172
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:504
-msgid "shuffle playlist"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TaskView.py:50
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:101
-#: ../enigma2_master/lib/python/Screens/TaskView.py:50
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:101
-msgid "shut down"
-msgstr ""
-
-#: ../enigma2_experimental/SleepTimer.py:14 ../enigma2_master/SleepTimer.py:14
-msgid "shutdown"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:62
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:541
-#: ../enigma2_experimental/lib/python/Components/NimManager.py:1434
-#: ../enigma2_experimental/lib/python/Components/ParentalControl.py:28
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:23
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:62
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:541
-#: ../enigma2_master/lib/python/Components/NimManager.py:1434
-#: ../enigma2_master/lib/python/Components/ParentalControl.py:28
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:23
-msgid "simple"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:760
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:760
-msgid "skip backward"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:761
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:761
-msgid "skip backward (enter time)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:758
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:758
-msgid "skip forward"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:759
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:759
-msgid "skip forward (enter time)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:182
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:182
-msgid "slide picture in loop"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:73
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:73
-msgid "sort by date"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ParentalControlSetup.py:249
-#: ../enigma2_master/lib/python/Screens/ParentalControlSetup.py:249
-msgid "special characters"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/RecordingConfig.py:12
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:31
-#: ../enigma2_master/lib/python/Components/RecordingConfig.py:12
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:31
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:238
-msgid "standard"
-msgstr ""
-
-#: ../enigma2_experimental/SleepTimer.py:14 ../enigma2_master/SleepTimer.py:14
-msgid "standby"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:59
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/CutListEditor/plugin.py:61
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:59
-#: ../enigma2_master/lib/python/Plugins/Extensions/CutListEditor/plugin.py:61
-msgid "start cut here"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/settings.py:96
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/settings.py:96
-msgid "start directory"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1175
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1175
-msgid "start timeshift"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/AudioSelection.py:80
-#: ../enigma2_master/lib/python/Screens/AudioSelection.py:80
-msgid "stereo"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:32
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:32
-msgid "stop PiP"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:162
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:162
-msgid "stop entry"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1649
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1649
-msgid "stop recording"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1176
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1176
-msgid "stop timeshift"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/UsageConfig.py:31
-#: ../enigma2_master/lib/python/Components/UsageConfig.py:31
-msgid "swap PiP and main picture"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:141
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:407
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:141
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:407
-msgid "switch to bookmarks"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:142
-#: ../enigma2_experimental/lib/python/Screens/LocationBox.py:417
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:169
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:500
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:142
-#: ../enigma2_master/lib/python/Screens/LocationBox.py:417
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:169
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:500
-msgid "switch to filelist"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:168
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:496
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:168
-#: ../enigma2_master/lib/python/Plugins/Extensions/MediaPlayer/plugin.py:496
-msgid "switch to playlist"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:350
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:350
-msgid "switch to the next angle"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:348
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:348
-msgid "switch to the next audio track"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:349
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:349
-msgid "switch to the next subtitle language"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:156
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:156
-msgid "template file"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:184
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:184
-msgid "textcolor"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBar.py:200
-#: ../enigma2_experimental/lib/python/Screens/MovieSelection.py:121
-#: ../enigma2_master/lib/python/Screens/InfoBar.py:200
-#: ../enigma2_master/lib/python/Screens/MovieSelection.py:121
-msgid "this recording"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/ParentalControl.py:111
-#: ../enigma2_master/lib/python/Components/ParentalControl.py:111
-msgid "this service is protected by a parental control pin"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1884
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1884
-msgid "toggle a cut mark at the current position"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:341
-#: ../enigma2_master/lib/python/Plugins/Extensions/DVDPlayer/plugin.py:341
-msgid "toggle time, chapter, audio, subtitle info"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Satconfig.py:552
-#: ../enigma2_master/lib/python/Screens/Satconfig.py:552
-msgid "tuner is not supported"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:338
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:346
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:294
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:340
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:338
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py:346
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:294
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py:340
-msgid "unavailable"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1399
-#: ../enigma2_experimental/lib/python/Screens/NetworkSetup.py:1413
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1399
-#: ../enigma2_master/lib/python/Screens/NetworkSetup.py:1413
-msgid "unconfirmed"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1199
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1204
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1199
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1204
-msgid "unknown"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/EventView.py:123
-#: ../enigma2_master/lib/python/Screens/EventView.py:123
-msgid "unknown service"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/ParentalControl.py:29
-#: ../enigma2_experimental/lib/python/Components/ParentalControl.py:30
-#: ../enigma2_master/lib/python/Components/ParentalControl.py:29
-#: ../enigma2_master/lib/python/Components/ParentalControl.py:30
-msgid "until standby/restart"
-msgstr ""
-
-#: ../enigma2_plugins/networkbrowser/src/MountEdit.py:186
-msgid "use as HDD replacement"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:109
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:109
-msgid "user defined"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:576
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:576
-msgid "vertical"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBarGenerics.py:1307
-#: ../enigma2_master/lib/python/Screens/InfoBarGenerics.py:1307
-msgid "view extensions..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/InfoBar.py:62
-#: ../enigma2_master/lib/python/Screens/InfoBar.py:62
-msgid "view recordings..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/Ci.py:32
-#: ../enigma2_master/lib/python/Screens/Ci.py:32
-msgid "wait for ci..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/SocketMMI/SocketMMI.py:21
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/SocketMMI/SocketMMI.py:28
-#: ../enigma2_master/lib/python/Plugins/Extensions/SocketMMI/SocketMMI.py:21
-#: ../enigma2_master/lib/python/Plugins/Extensions/SocketMMI/SocketMMI.py:28
-msgid "wait for mmi..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:53
-#: ../enigma2_master/lib/python/Components/TimerList.py:53
-msgid "waiting"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:149
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py:149
-msgid "was removed successfully"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:109
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:109
-msgid "weekly"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/ParentalControl.py:33
-#: ../enigma2_master/lib/python/Components/ParentalControl.py:33
-msgid "whitelist"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:261
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py:261
-msgid "working"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:28
-#: ../enigma2_experimental/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:28
-#: ../enigma2_master/lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
-msgid "yellow"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/MessageBox.py:44
-#: ../enigma2_experimental/lib/python/Screens/MessageBox.py:46
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:537
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:923
-#: ../enigma2_experimental/lib/python/Screens/SleepTimerEdit.py:90
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:114
-#: ../enigma2_experimental/lib/python/Components/config.py:439
-#: ../enigma2_master/lib/python/Screens/MessageBox.py:44
-#: ../enigma2_master/lib/python/Screens/MessageBox.py:46
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:537
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:923
-#: ../enigma2_master/lib/python/Screens/SleepTimerEdit.py:90
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:114
-#: ../enigma2_master/lib/python/Components/config.py:439
-msgid "yes"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:537
-#: ../enigma2_experimental/lib/python/Screens/ScanSetup.py:923
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:537
-#: ../enigma2_master/lib/python/Screens/ScanSetup.py:923
-msgid "yes (keep feeds)"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1425
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py:1425
-msgid ""
-"your dreambox might be unusable now. Please consult the manual for further "
-"assistance before rebooting your dreambox."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Screens/TimerEntry.py:97
-#: ../enigma2_master/lib/python/Screens/TimerEntry.py:97
-#: ../enigma2_plugins/autotimer/src/AutoTimerEditor.py:187
-#: ../enigma2_plugins/autotimer/src/AutoTimerImporter.py:182
-msgid "zap"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Components/TimerList.py:58
-#: ../enigma2_master/lib/python/Components/TimerList.py:58
-msgid "zapped"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "#000000"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "#0064c7"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "#25062748"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "#389416"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "#80000000"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "#80ffffff"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "#bab329"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "#f23d21"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "#ffffff"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "#ffffffff"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "0"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "1"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "12V output"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "2"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "3"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "4"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "5"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "6"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "7"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "8"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "9"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "About"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Action on long powerbutton press"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Action on short powerbutton press"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Activate network settings"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/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 ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Alpha"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Alternative radio mode"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Alternative services tuner priority"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Audio"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "BER"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "BER:"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Behavior of 'pause' when paused"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Behavior of 0 key in PiP-mode"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Behavior when a movie is started"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Behavior when a movie is stopped"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Behavior when a movie reaches the end"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid ""
-"By pressing the OK Button on your remote control, the info bar is being "
-"displayed."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "C"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Change bouquets in quickzap"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Channellist menu"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Choose Tuner"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Choose bouquet"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Choose your Skin"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Command execution..."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Common Interface"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Composition of the recording filenames"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Continue in background"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Custom skip time for '1'/'3'-keys"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Custom skip time for '4'/'6'-keys"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Custom skip time for '7'/'9'-keys"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Customize"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "D"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Default services lists"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Delay"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "DiSEqC"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Dish"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Display Setup"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Do you want to do a service scan?"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Do you want to do another manual service scan?"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Do you want to enable the parental control feature on your dreambox?"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Do you want to install default sat lists?"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Do you want to view a tutorial?"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Downloadable plugins"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "EPG Selection"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Enable multiple bouquets"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Enter Fast Forward at speed"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Enter Rewind at speed"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Eventview"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Exit wizard"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Extensions"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Factory reset"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Fast Forward speeds"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Filesystem Check"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Finetune"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Frame repeat count during non-smooth winding"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "General AC3 delay (ms)"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "General PCM delay (ms)"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Harddisk setup"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Harddisk standby after"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Index"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "InfoBar"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Infobar timeout"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Information"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Initialization"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Input devices"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Installing Software..."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Installing default sat lists... Please wait..."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Installing defaults... Please wait..."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Installing package content... Please wait..."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Job View"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Keyboard"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Keyboard Map"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Keyboard Setup"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Keymap"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Language"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Limited character set for recording filenames"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Load Length of Movies in Movielist"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Lock:"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "MORE"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Main menu"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Mainmenu"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Manual Scan"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Margin after record"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Margin before record (minutes)"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "MediaPlayer"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Message"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Message..."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Modulator"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Movielist menu"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Mute"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "NEXT"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "NOW"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Nameserver Setup"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Network Configuration..."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Network Setup"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Network setup"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Network test..."
-msgstr ""
-
-#: ../enigma2_experimental/data/
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/data/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-msgid "No, just start my dreambox"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "No, scan later manually"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Now Playing"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "OSD Settings"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Parental control services Editor"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "PiPSetup"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Pin code needed"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid ""
-"Please be aware, that anyone can disable the parental control, if you have "
-"not set a PIN."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Please choose the default services lists you want to install."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Please set up tuner B"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Please set up tuner C"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Please set up tuner D"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Plugin browser"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Plugins"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "RC Menu"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "RF output"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Radio"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Reception Settings"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Recording paths"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Recordings always have priority"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Repeat"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Restart"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Restart GUI"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Rewind speeds"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "SNR"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "SNR:"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Sat / Dish Setup"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Seek"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Select HDD"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Select Network Adapter"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Select a movie"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Service"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Service Scan"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Service Searching"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Service scan"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Setup Mode"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Show Message when Recording starts"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Show blinking clock in display during recording"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Show event-progress in channel selection"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Show infobar on channel change"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Show infobar on event change"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Show infobar on skip forward/backward"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Show positioner movement"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Sleep Timer"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Slow Motion speeds"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Sound"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Soundcarrier"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Subservices"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "TV System"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Test mode"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/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 ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "The package doesn't contain anything."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "There are no default services lists in your image."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "There are no default settings in your image."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "This is step number 2."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Time/Date Input"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Timer"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Timer Edit"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Timer Editor"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Timer entry"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Timer log"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Timer sanity error"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Timer selection"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Timeshift"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Timezone"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Translation"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Translation:"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Tuner Slot"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Tuner configuration"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "UnhandledKey"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Use non-smooth winding at speeds above"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Use power measurement"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid ""
-"Use the left and right buttons to change an option.\n"
-"\n"
-"Please set up tuner A"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid ""
-"Use the up/down keys on your remote control to select an option. After that, "
-"press OK."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Use wizard to set up basic features"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "VCR scart"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Virtual KeyBoard"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Volume"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Welcome..."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/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 ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "What do you want to scan?"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Yes, do a manual scan now"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Yes, do an automatic scan now"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Yes, do another manual scan now"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "Yes, view the tutorial"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid ""
-"You can choose some default settings now. Please select the settings you "
-"want to be installed."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "You can choose, what you want to install..."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "You chose not to install any default services lists."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid ""
-"You chose not to install any default settings. You can however install the "
-"default settings later in the settings menu."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid ""
-"You chose not to install anything. Please press OK finish the install wizard."
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/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 ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "config menu"
-msgstr ""
-
-#: ../enigma2_experimental/data/ ../enigma2_master/data/
-msgid "help..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/
-msgid "No picture on TV? Press EXIT and retry."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/
-msgid "Refresh rate selection."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/
-msgid "Select refresh rate"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/
-msgid "Select video input with up/down buttons"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/
-msgid "Select video mode"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/
-#: ../enigma2_master/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 ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/
-#: ../enigma2_master/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 ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/Videomode/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/Videomode/
-msgid "Video mode selection."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-msgid "Exit the wizard"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-msgid "Install a new image with a USB stick"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-msgid "Install a new image with your web browser"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-msgid "No backup needed"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-msgid "No, do nothing."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-msgid "OK, guide me through the upgrade process"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-msgid "The backup failed. Please choose a different backup location."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/
-msgid "The wizard is finished now."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-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 ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-msgid "Where do you want to backup your settings?"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-msgid "Yes, backup my settings!"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-msgid "Yes, perform a shutdown now."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-msgid "Yes, restore the settings now"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-msgid ""
-"You have chosen to backup your settings. Please press OK to start the backup "
-"now."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-msgid ""
-"You have chosen to restore your settings. Enigma2 will restart after "
-"restore. Please press OK to start the restore now."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-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 ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-msgid ""
-"Your backup succeeded. We will now continue to explain the further upgrade "
-"process."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/SoftwareManager/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/SoftwareManager/
-msgid "Your dreambox is shutting down. Please stand by..."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/
-msgid "Package removal failed.\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/
-msgid "Package removed successfully.\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/
-msgid "Please select an extension to remove."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/
-msgid "Remove failed."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/
-msgid "Removed successfully."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/
-msgid "Select package"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/CleanupWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/CleanupWizard/
-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"
-"You can use this wizard to remove some extensions.\n"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/
-msgid "Configure interface"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/
-msgid "Configure nameservers"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/
-msgid "Configure your network again"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/
-msgid ""
-"Please configure or verify your Nameservers by filling out the required "
-"values.\n"
-"When you are ready press OK to continue."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/
-msgid ""
-"Please configure your internet connection by filling out the required "
-"values.\n"
-"When you are ready press OK to continue."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/
-msgid "Please follow the instructions on the TV"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/
-msgid ""
-"Please select the network interface that you want to use for your internet "
-"connection.\n"
-"\n"
-"Please press OK to continue."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/
-msgid ""
-"Please select the wireless network that you want to connect to.\n"
-"\n"
-"Please press OK to continue."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/
-msgid "Select interface"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/
-msgid "Select wireless network"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/
-msgid ""
-"Thank you for using the wizard.\n"
-"Please press OK to continue."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/
-msgid ""
-"The wireless LAN plugin is not installed!\n"
-"Please install it and choose what you want to do next."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/
-msgid ""
-"Welcome.\n"
-"\n"
-"If you want to connect your Dreambox to the Internet, this wizard will guide "
-"you through the basic network setup of your Dreambox.\n"
-"\n"
-"Press OK to start configuring your network"
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/
-msgid ""
-"Your Dreambox is now ready to use.\n"
-"\n"
-"Your internet connection is working now.\n"
-"\n"
-"Please press OK to continue."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/
-msgid ""
-"Your internet connection is not working!\n"
-"Please choose what you want to do next."
-msgstr ""
-
-#: ../enigma2_experimental/lib/python/Plugins/SystemPlugins/NetworkWizard/
-#: ../enigma2_master/lib/python/Plugins/SystemPlugins/NetworkWizard/
-msgid ""
-"Your wireless LAN internet connection could not be started!\n"
-"Have you attached your USB WLAN Stick?\n"
-"\n"
-"Please choose what you want to do next."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/
-msgid "Abort this Wizard."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/
-msgid "Create a new AutoTimer."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/
-msgid ""
-"Filters are another powerful tool when matching events. An AutoTimer can be "
-"restricted to certain Weekdays or only match an event with a text inside eg "
-"it's Description.\n"
-"Press BLUE to add a new restriction and YELLOW to remove the selected one."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/
-msgid ""
-"It's possible to restrict an AutoTimer to certain Services or Bouquets or to "
-"deny specific ones.\n"
-"An Event will only match this AutoTimer if it's on a specific and not denied "
-"Service (inside a Bouquet).\n"
-"Press BLUE to add a new restriction and YELLOW to remove the selected one."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/
-msgid "No, remove them."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/
-msgid ""
-"Thank you for using the wizard. Your new AutoTimer has been added to the "
-"List.\n"
-"Please press OK to continue."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/
-msgid ""
-"The Timer will not be added to the List.\n"
-"Please press OK to close this Wizard."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/
-msgid ""
-"The Timespan of an AutoTimer is the first 'advanced' attribute. If a "
-"timespan is specified an event will only match this AutoTimer if it lies "
-"inside of this timespan."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/
-msgid ""
-"Welcome.\n"
-"\n"
-"This Wizard will help you to create a new AutoTimer by providing "
-"descriptions for common settings."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/
-msgid "Yes, keep them."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/
-msgid ""
-"You can set the basic properties of an AutoTimer here.\n"
-"While 'Name' is just a human-readable name displayed in the Overview, 'Match "
-"in title' is what is looked for in the EPG."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/
-msgid ""
-"You did not provide a valid 'Match in title' Attribute for your new "
-"AutoTimer.\n"
-"As this is a mandatory Attribute you cannot continue without doing so."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/
-msgid ""
-"You successfully configured a new AutoTimer. Do you want to add it to the "
-"list?\n"
-"\n"
-"You can go back a step by pressing EXIT on your remote."
-msgstr ""
-
-#: ../enigma2_plugins/autotimer/src/
-msgid ""
-"Your 'Match in title' Attribute ends with a Whitespace.\n"
-"Please confirm if this was intentional, if not they will be removed."
-msgstr ""
-
-#: ../meta_skins/skin_basic-hd.xml
-msgid "BASIC-HD Skin for Dreambox Images created from Ismail Demir"
-msgstr ""
-
-#: ../meta_skins/skin_basic-hd.xml
-msgid "BASIC-HD Skin by Ismail Demir"
-msgstr ""
-
-#: ../meta_skins/skin_brushedalu-hd.xml
-msgid "A nice looking HD skin in Brushed Alu Design from Kerni."
-msgstr ""
-
-#: ../meta_skins/skin_brushedalu-hd.xml
-msgid "Kerni's BrushedAlu-HD skin"
-msgstr ""
-
-#: ../meta_skins/skin_dmm-hd.xml ../meta_skins/skin_dreammm-hd.xml
-#: ../meta_skins/skin_elgato-hd.xml ../meta_skins/skin_ultraviolet.xml
-#: ../meta_skins/skin_yads-hd.xml
-msgid "a HD skin from Kerni"
-msgstr ""
-
-#: ../meta_skins/skin_dmm-hd.xml
-msgid "Kerni's dmm-HD skin"
-msgstr ""
-
-#: ../meta_skins/skin_dreammm-hd.xml
-msgid "Kerni's DreamMM-HD skin"
-msgstr ""
-
-#: ../meta_skins/skin_dreamtv-hd.xml ../meta_skins/skin_dtv-hd-reloaded.xml
-#: ../meta_skins/skin_dtv-hd.xml
-msgid "A nice looking HD skin from Kerni"
-msgstr ""
-
-#: ../meta_skins/skin_dreamtv-hd.xml
-msgid "Kerni's dreamTV-HD skin"
-msgstr ""
-
-#: ../meta_skins/skin_dtv-hd-reloaded.xml
-msgid "Kerni's dTV-HD-Reloaded skin"
-msgstr ""
-
-#: ../meta_skins/skin_dtv-hd.xml
-msgid "Kerni's dTV-HD skin"
-msgstr ""
-
-#: ../meta_skins/skin_elgato-hd.xml
-msgid "Kerni's Elgato-HD skin"
-msgstr ""
-
-#: ../meta_skins/skin_kerni-hd1.xml
-msgid "Kerni-HD1 skin"
-msgstr ""
-
-#: ../meta_skins/skin_kerni-hd1.xml
-msgid "Kernis HD1 skin"
-msgstr ""
-
-#: ../meta_skins/skin_kerni-hd1r2.xml
-msgid "Kerni-HD1R2 skin"
-msgstr ""
-
-#: ../meta_skins/skin_kerni-hd1r2.xml
-msgid "redesigned Kerni-HD1 skin"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.blackbox.xml
-msgid "Nemesis BlackBox Skin"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.blackbox.xml
-msgid "Nemesis BlackBox Skin for the Dreambox"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.blueline.extended.xml
-msgid "Nemesis Blueline.Extended Skin for the Dreambox"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.blueline.extended.xml
-msgid "Nemesis Blueline.Extended Skin"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.blueline.single.xml
-msgid "Nemesis Blueline Single Skin"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.blueline.single.xml
-msgid "Nemesis Blueline Single Skin for the Dreambox"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.blueline.xml
-msgid "Nemesis Blueline Skin"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.blueline.xml
-msgid "Nemesis Blueline Skin for the Dreambox"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.chromeline.cobolt.xml
-msgid "Nemesis ChromeLine Cobolt Skin for the Dreambox"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.chromeline.cobolt.xml
-msgid "Nemesis ChromeLine Cobolt Skin"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.chromeline.xml
-msgid "Nemesis ChromeLine Skin"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.chromeline.xml
-msgid "Nemesis ChromeLine Skin for the Dreambox"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.flatline.blue.xml
-msgid "Nemesis Flatline Blue Skin"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.flatline.blue.xml
-msgid "Nemesis Flatline Blue Skin for the Dreambox"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.flatline.xml
-msgid "Nemesis Flatline Skin for the Dreambox"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.flatline.xml
-msgid "Nemesis Flatline Skin"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.glassline.xml
-msgid "Nemesis GlassLine Skin"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.glassline.xml
-msgid "Nemesis GlassLine Skin for the Dreambox"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.greenline.extended.xml
-msgid "Nemesis Greenline Extended Skin for the Dreambox"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.greenline.extended.xml
-msgid "Nemesis Greenline Extended Skin"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.greenline.single.xml
-msgid "Nemesis Greenline Single Skin"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.greenline.single.xml
-msgid "Nemesis Greenline Single Skin for the Dreambox"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.greenline.xml
-msgid "Nemesis Greenline Skin"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.greenline.xml
-msgid "Nemesis Greenline Skin for the Dreambox"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.greyline.extended.xml
-msgid "Nemesis Greyline Extended Skin for the Dreambox"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.greyline.extended.xml
-msgid "Nemesis Greyline Extended Skin"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.greyline.single.xml
-msgid "Nemesis Greyline Single Skin for the Dreambox"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.greyline.single.xml
-msgid "Nemesis Greyline Single Skin"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.greyline.xml
-msgid "Nemesis Greyline Skin for the Dreambox"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.greyline.xml
-msgid "Nemesis Greyline Skin"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.shadowline.xml
-msgid "Nemesis ShadowLine Skin for the Dreambox"
-msgstr ""
-
-#: ../meta_skins/skin_nemesis.shadowline.xml
-msgid "Nemesis ShadowLine Skin"
-msgstr ""
-
-#: ../meta_skins/skin_simple.xml ../meta_skins/skin_swain-hd.xml
-#: ../meta_skins/skin_swain.xml
-msgid "A nice looking skin from Kerni"
-msgstr ""
-
-#: ../meta_skins/skin_simple.xml
-msgid "Kerni's simple skin"
-msgstr ""
-
-#: ../meta_skins/skin_swain-hd.xml
-msgid "Kerni's SWAIN-HD skin"
-msgstr ""
-
-#: ../meta_skins/skin_swain.xml
-msgid "Kerni's SWAIN skin"
-msgstr ""
-
-#: ../meta_skins/skin_ultraviolet.xml
-msgid "Kerni's UltraViolet skin"
-msgstr ""
-
-#: ../meta_skins/skin_vali-xd.xml
-msgid "Vali-XD skin"
-msgstr ""
-
-#: ../meta_skins/skin_vali-xd.xml
-msgid "The skin is in KingSize-definition 1024x576"
-msgstr ""
-
-#: ../meta_skins/skin_vali.hd.nano.xml
-msgid "Vali.HD.nano skin"
-msgstr ""
-
-#: ../meta_skins/skin_vali.hd.nano.xml
-msgid "A BackToTheRoots-Skin .. or good old times."
-msgstr ""
-
-#: ../meta_skins/skin_vali.hd.nano.xml
-msgid "A BackToTheRoots-Skin ... or good old times."
-msgstr ""
-
-#: ../meta_skins/skin_yads-hd.xml
-msgid "Kerni's YADS-HD skin"
-msgstr ""
-
-#: ../meta_plugins/plugin_aihdcontrol.xml
-msgid "First generate your skin-style with the Ai.HD-Control plugin."
-msgstr ""
-
-#: ../meta_plugins/plugin_aihdcontrol.xml
-msgid "Ai.HD skin-style control plugin"
-msgstr ""
-
-#: ../meta_plugins/plugin_antiscrollbar.xml
-msgid ""
-"With AntiScrollbar you can cover up annoying ticker lines (e.g. in news "
-"channels)."
-msgstr ""
-
-#: ../meta_plugins/plugin_antiscrollbar.xml
-msgid "Overlay for scrolling bars"
-msgstr ""
-
-#: ../meta_plugins/plugin_ardmediathek.xml
-msgid "Access to the ARD-Mediathek online video database."
-msgstr ""
-
-#: ../meta_plugins/plugin_ardmediathek.xml
-msgid "Access to the ARD-Mediathek"
-msgstr ""
-
-#: ../meta_plugins/plugin_audiosync.xml
-msgid ""
-"AudoSync allows delaying the sound output (Bitstream/PCM) so that it is "
-"synchronous to the picture."
-msgstr ""
-
-#: ../meta_plugins/plugin_audiosync.xml
-msgid "Set Bitstream/PCM audio delays"
-msgstr ""
-
-#: ../meta_plugins/plugin_automatictimerlistcleanup.xml
-msgid "Cleanup timerlist automatically."
-msgstr ""
-
-#: ../meta_plugins/plugin_automatictimerlistcleanup.xml
-msgid "Cleanup timerlist automatically"
-msgstr ""
-
-#: ../meta_plugins/plugin_automaticvolumeadjustment.xml
-msgid "Automatic volume adjustment"
-msgstr ""
-
-#: ../meta_plugins/plugin_automaticvolumeadjustment.xml
-msgid "Automatic volume adjustment for ac3/dts services."
-msgstr ""
-
-#: ../meta_plugins/plugin_autoresolution.xml
-msgid "Automatically change video resolution"
-msgstr ""
-
-#: ../meta_plugins/plugin_autoresolution.xml
-msgid ""
-"Automatically changes the output resolution depending on the video "
-"resolution you are watching."
-msgstr ""
-
-#: ../meta_plugins/plugin_autotimer.xml
-msgid ""
-"AutoTimer scans the EPG and creates Timers depending on user-defined search  "
-"criteria."
-msgstr ""
-
-#: ../meta_plugins/plugin_autotimer.xml
-msgid "Automatically create timer events based on keywords"
-msgstr ""
-
-#: ../meta_plugins/plugin_babelzapper.xml
-msgid "Control your dreambox with only the MUTE button"
-msgstr ""
-
-#: ../meta_plugins/plugin_babelzapper.xml
-msgid "Control your dreambox with only the MUTE button."
-msgstr ""
-
-#: ../meta_plugins/plugin_bitrateviewer.xml
-msgid "Shows average bitrate of video and audio"
-msgstr ""
-
-#: ../meta_plugins/plugin_bonjour.xml
-msgid "Bonjour/Avahi control plugin."
-msgstr ""
-
-#: ../meta_plugins/plugin_bonjour.xml
-msgid "Bonjour/Avahi control plugin"
-msgstr ""
-
-#: ../meta_plugins/plugin_cdinfo.xml
-msgid ""
-"CDInfo enables gathering album and track details from CDDB and CD-Text when "
-"playing Audio CDs in Mediaplayer."
-msgstr ""
-
-#: ../meta_plugins/plugin_cdinfo.xml
-msgid "Get AudioCD info from CDDB and CD-Text"
-msgstr ""
-
-#: ../meta_plugins/plugin_dreamirc.xml
-msgid "IRC Client for Enigma2"
-msgstr ""
-
-#: ../meta_plugins/plugin_dreamirc.xml
-msgid "Simple IRC GroupChat client for e2 #dm8000-vip channel"
-msgstr ""
-
-#: ../meta_plugins/plugin_dvdbackup.xml
-msgid "Create a backup of your Video-DVD"
-msgstr ""
-
-#: ../meta_plugins/plugin_dvdbackup.xml
-msgid "Create a backup of your Video DVD on your DreamBox hard drive."
-msgstr ""
-
-#: ../meta_plugins/plugin_dyndns.xml
-msgid "A client for www.dyndns.org"
-msgstr ""
-
-#: ../meta_plugins/plugin_eibox.xml
-msgid "Visualization for the European Installation Bus"
-msgstr ""
-
-#: ../meta_plugins/plugin_eibox.xml
-msgid ""
-"Visualize and control your lights, dimmers, blinds, thermostats etc. through "
-"EIB/KNX. (linknx server required)"
-msgstr ""
-
-#: ../meta_plugins/plugin_elektro.xml
-msgid "Sets your Dreambox into Deep-Standby"
-msgstr ""
-
-#: ../meta_plugins/plugin_elektro.xml
-msgid ""
-"The Elektro Power Save plugin puts the box from standby to sleep mode (Deep "
-"Standby) at certain times.\n"
-"This only happens if the box is in standby and no recording is running or "
-"sheduled in the next 20 minutes.\n"
-"The box automatically wakes up for recordings or at the end of the sleep "
-"time. You therefore don't have to wait until it is on again."
-msgstr ""
-
-#: ../meta_plugins/plugin_emailclient.xml
-msgid "IMAP4 e-mail viewer for the Dreambox"
-msgstr ""
-
-#: ../meta_plugins/plugin_emailclient.xml
-msgid "Emailclient is an IMAP4 e-mail viewer for the Dreambox."
-msgstr ""
-
-#: ../meta_plugins/plugin_epgrefresh.xml
-msgid ""
-"EPGRefresh will automatically switch to user-defined channels when the box "
-"is idleing\n"
-"(in standby mode without any running recordings) to perform updates of the "
-"epg information on these channels."
-msgstr ""
-
-#: ../meta_plugins/plugin_epgrefresh.xml
-msgid "Automatically refresh EPG"
-msgstr ""
-
-#: ../meta_plugins/plugin_epgsearch.xml
-msgid "Search through the EPG"
-msgstr ""
-
-#: ../meta_plugins/plugin_epgsearch.xml
-msgid "With EPGSearch you can search through the EPG and create timers."
-msgstr ""
-
-#: ../meta_plugins/plugin_filebrowser.xml
-msgid "Manage local files"
-msgstr ""
-
-#: ../meta_plugins/plugin_filebrowser.xml
-msgid "Copy, rename, delete, move local files on your Dreambox."
-msgstr ""
-
-#: ../meta_plugins/plugin_fritzcall.xml
-msgid "Callmonitor for the Fritz!Box routers"
-msgstr ""
-
-#: ../meta_plugins/plugin_fritzcall.xml
-msgid "FritzCall shows incoming calls to your Fritz!Box on your Dreambox."
-msgstr ""
-
-#: ../meta_plugins/plugin_ftpbrowser.xml
-msgid "A basic ftp client"
-msgstr ""
-
-#: ../meta_plugins/plugin_ftpbrowser.xml
-msgid ""
-"FTPBrowser allows uploading and downloading files between your Dreambox and "
-"a server using the file transfer protocol."
-msgstr ""
-
-#: ../meta_plugins/plugin_genuinedreambox.xml
-msgid "With Genuine Dreambox you can verify the authenticity of your Dreambox."
-msgstr ""
-
-#: ../meta_plugins/plugin_genuinedreambox.xml
-msgid "Genuine Dreambox verification"
-msgstr ""
-
-#: ../meta_plugins/plugin_googlemaps.xml
-msgid "View Google maps"
-msgstr ""
-
-#: ../meta_plugins/plugin_googlemaps.xml
-msgid "View Google maps with your Dreambox."
-msgstr ""
-
-#: ../meta_plugins/plugin_growlee.xml
-msgid "redirect notifications to Growl"
-msgstr ""
-
-#: ../meta_plugins/plugin_growlee.xml
-msgid ""
-"Growlee allows your Dreambox to send short messages using the growl "
-"protocol\n"
-"like Recording started notifications to a PC running a growl client"
-msgstr ""
-
-#: ../meta_plugins/plugin_httpproxy.xml
-msgid "use your Dreambox as Web proxy."
-msgstr ""
-
-#: ../meta_plugins/plugin_httpproxy.xml
-msgid "use your Dreambox as Web proxy"
-msgstr ""
-
-#: ../meta_plugins/plugin_imdb.xml
-msgid ""
-"With IMDb you can download and displays movie information (rating, poster, "
-"cast, synopsis etc.) about the selected event."
-msgstr ""
-
-#: ../meta_plugins/plugin_imdb.xml
-msgid "Displays movie information from the InternetMovieDatabase"
-msgstr ""
-
-#: ../meta_plugins/plugin_kiddytimer.xml
-msgid "KiddyTimer allows to control your kids's daily tv usage."
-msgstr ""
-
-#: ../meta_plugins/plugin_kiddytimer.xml
-msgid "Control your kids's tv usage"
-msgstr ""
-
-#: ../meta_plugins/plugin_lastfm.xml
-msgid "Play music from Last.fm."
-msgstr ""
-
-#: ../meta_plugins/plugin_lastfm.xml
-msgid "Play music from Last.fm"
-msgstr ""
-
-#: ../meta_plugins/plugin_letterbox.xml
-msgid "Zoom into letterboxed/anamorph movies."
-msgstr ""
-
-#: ../meta_plugins/plugin_letterbox.xml
-msgid "Zoom into letterboxed/anamorph movies"
-msgstr ""
-
-#: ../meta_plugins/plugin_logomanager.xml
-msgid "Manage logos to display at boottime"
-msgstr ""
-
-#: ../meta_plugins/plugin_logomanager.xml
-msgid "Manage logos to display at boot time or while in radio mode."
-msgstr ""
-
-#: ../meta_plugins/plugin_mediadownloader.xml
-msgid "A simple downloading application for other plugins"
-msgstr ""
-
-#: ../meta_plugins/plugin_mediadownloader.xml
-msgid "To be used as simple downloading application by other Plugins."
-msgstr ""
-
-#: ../meta_plugins/plugin_merlinepg.xml
-msgid "A graphical EPG interface"
-msgstr ""
-
-#: ../meta_plugins/plugin_merlinepg.xml
-msgid "A graphical EPG interface."
-msgstr ""
-
-#: ../meta_plugins/plugin_merlinmusicplayer.xml
-msgid "Merlin Music Player and iDream"
-msgstr ""
-
-#: ../meta_plugins/plugin_merlinmusicplayer.xml
-msgid ""
-"Manage your music files in a database, play it with Merlin Music Player."
-msgstr ""
-
-#: ../meta_plugins/plugin_meteoitalia.xml
-msgid "Italian Weather forecast on Dreambox from www.google.it."
-msgstr ""
-
-#: ../meta_plugins/plugin_meteoitalia.xml
-msgid "Italian Weather forecast on Dreambox"
-msgstr ""
-
-#: ../meta_plugins/plugin_mosaic.xml
-msgid "Preview screenshots of running tv shows."
-msgstr ""
-
-#: ../meta_plugins/plugin_mosaic.xml
-msgid "Preview screenshots of running tv shows"
-msgstr ""
-
-#: ../meta_plugins/plugin_moviecut.xml
-msgid "Cut your movies"
-msgstr ""
-
-#: ../meta_plugins/plugin_moviecut.xml
-msgid "Cut your movies."
-msgstr ""
-
-#: ../meta_plugins/plugin_movielistpreview.xml
-msgid "Create preview pictures of your Movies"
-msgstr ""
-
-#: ../meta_plugins/plugin_movielistpreview.xml
-msgid ""
-"Movielist Preview creates screenshots of recordings and shows them inside "
-"the movielist."
-msgstr ""
-
-#: ../meta_plugins/plugin_movieretitle.xml
-msgid "Rename your movies"
-msgstr ""
-
-#: ../meta_plugins/plugin_movieretitle.xml
-msgid "With MovieRetitle you can rename your movies."
-msgstr ""
-
-#: ../meta_plugins/plugin_movieselectionquickbutton.xml
-msgid "assign color buttons to plugins from MOVIELIST"
-msgstr ""
-
-#: ../meta_plugins/plugin_movieselectionquickbutton.xml
-msgid "assign color buttons (red/green/yellow/blue) to plugins from MOVIELIST."
-msgstr ""
-
-#: ../meta_plugins/plugin_movietagger.xml
-msgid ""
-"MovieTagger adds tags to recorded movies to sort a large list of movies."
-msgstr ""
-
-#: ../meta_plugins/plugin_movietagger.xml
-msgid "add tags to recorded movies"
-msgstr ""
-
-#: ../meta_plugins/plugin_multirc.xml
-msgid "control multiple Dreamboxes with different RCs"
-msgstr ""
-
-#: ../meta_plugins/plugin_multirc.xml
-msgid "Use and control multiple Dreamboxes with different RCs."
-msgstr ""
-
-#: ../meta_plugins/plugin_mytube.xml
-msgid "Direct playback of Youtube videos"
-msgstr ""
-
-#: ../meta_plugins/plugin_mytube.xml
-msgid ""
-"With MyTube you can play YouTube videos directly on your TV without a PC."
-msgstr ""
-
-#: ../meta_plugins/plugin_ncidclient.xml
-msgid ""
-"NCID Client shows incoming voice calls promoted by any NCID server (e.g. "
-"Vodafone Easybox) on your Dreambox."
-msgstr ""
-
-#: ../meta_plugins/plugin_ncidclient.xml
-msgid "Callmonitor for NCID-based call notification"
-msgstr ""
-
-#: ../meta_plugins/plugin_netcaster.xml
-msgid "Player for Network and Internet Streams"
-msgstr ""
-
-#: ../meta_plugins/plugin_netcaster.xml
-msgid "Player for Network and Internet Streams."
-msgstr ""
-
-#: ../meta_plugins/plugin_networkbrowser.xml
-msgid "Browse for and connect to network shares"
-msgstr ""
-
-#: ../meta_plugins/plugin_networkbrowser.xml
-msgid "Browse for nfs/cifs shares and connect to them."
-msgstr ""
-
-#: ../meta_plugins/plugin_ofdb.xml
-msgid "Movie informations from the Online Film Datenbank"
-msgstr ""
-
-#: ../meta_plugins/plugin_ofdb.xml
-msgid "Movie information from the Online Film Datenbank (German)."
-msgstr ""
-
-#: ../meta_plugins/plugin_orfat.xml
-msgid "Video streaming from the orf.at web page"
-msgstr ""
-
-#: ../meta_plugins/plugin_orfat.xml
-msgid "Streaming modules for the orf.at iptv web page."
-msgstr ""
-
-#: ../meta_plugins/plugin_partnerbox.xml
-msgid "Remote timer and remote TV player"
-msgstr ""
-
-#: ../meta_plugins/plugin_partnerbox.xml
-msgid ""
-"Partnerbox allows editing a remote Dreambox's record timers and stream its "
-"TV  program."
-msgstr ""
-
-#: ../meta_plugins/plugin_passwordchanger.xml
-#: ../meta_plugins/plugin_setpasswd.xml
-msgid "GUI to change the ftp and telnet-password"
-msgstr ""
-
-#: ../meta_plugins/plugin_passwordchanger.xml
-msgid ""
-"GUI that allows user to change the ftp-/telnet-password of the Dreambox."
-msgstr ""
-
-#: ../meta_plugins/plugin_permanentclock.xml
-msgid "PermanentClock shows the clock permanently on the screen."
-msgstr ""
-
-#: ../meta_plugins/plugin_permanentclock.xml
-msgid "Shows the clock permanently on the screen"
-msgstr ""
-
-#: ../meta_plugins/plugin_podcast.xml
-msgid "PodCast streams podcasts to your Dreambox."
-msgstr ""
-
-#: ../meta_plugins/plugin_podcast.xml
-msgid "Stream podcasts"
-msgstr ""
-
-#: ../meta_plugins/plugin_porncenter.xml
-msgid "Adult streaming plugin"
-msgstr ""
-
-#: ../meta_plugins/plugin_porncenter.xml
-msgid "Adult streaming plugin."
-msgstr ""
-
-#: ../meta_plugins/plugin_quickbutton.xml
-msgid "assign long key-press on color buttons to plugins or E2 functions"
-msgstr ""
-
-#: ../meta_plugins/plugin_quickbutton.xml
-msgid ""
-"assign long key-press (red/green/yellow/blue) to plugins or E2 functions."
-msgstr ""
-
-#: ../meta_plugins/plugin_reconstructapsc.xml
-msgid "Reconstruct .ap and .sc files"
-msgstr ""
-
-#: ../meta_plugins/plugin_reconstructapsc.xml
-msgid "Reconstruct missing or corrupt .ap and .sc files of recorded movies."
-msgstr ""
-
-#: ../meta_plugins/plugin_remotetimer.xml
-msgid "Create timers on remote Dreamboxes."
-msgstr ""
-
-#: ../meta_plugins/plugin_remotetimer.xml
-msgid "Create remote timers"
-msgstr ""
-
-#: ../meta_plugins/plugin_rsdownloader.xml
-msgid "Allows user to download files from rapidshare in the background."
-msgstr ""
-
-#: ../meta_plugins/plugin_rsdownloader.xml
-msgid "Download files from Rapidshare"
-msgstr ""
-
-#: ../meta_plugins/plugin_seekbar.xml
-msgid "Replace the minute input for the seek functions with a seekbar."
-msgstr ""
-
-#: ../meta_plugins/plugin_seekbar.xml
-msgid "Replace the rewind  input with a seekbar"
-msgstr ""
-
-#: ../meta_plugins/plugin_setpasswd.xml
-msgid "GUI that allows user to change the ftp- / telnet password."
-msgstr ""
-
-#: ../meta_plugins/plugin_shoutcast.xml
-msgid "Listen and record internet radio"
-msgstr ""
-
-#: ../meta_plugins/plugin_shoutcast.xml
-msgid "Listen and record shoutcast internet radio on your Dreambox."
-msgstr ""
-
-#: ../meta_plugins/plugin_simplerss.xml
-msgid "RSS viewer"
-msgstr ""
-
-#: ../meta_plugins/plugin_simplerss.xml
-msgid "SimpleRSS allows reading RSS newsfeeds on your Dreambox."
-msgstr ""
-
-#: ../meta_plugins/plugin_startupservice.xml
-msgid "Define a startup service"
-msgstr ""
-
-#: ../meta_plugins/plugin_startupservice.xml
-msgid "Define a startup service for your Dreambox."
-msgstr ""
-
-#: ../meta_plugins/plugin_startuptostandby.xml
-msgid "set enigma2 to standby-mode after startup"
-msgstr ""
-
-#: ../meta_plugins/plugin_startuptostandby.xml
-msgid ""
-"After a reboot or power outage, StartupToStandby will bring your Dreambox to "
-"standby-mode."
-msgstr ""
-
-#: ../meta_plugins/plugin_tageditor.xml
-msgid "Edit tags of recorded movies."
-msgstr ""
-
-#: ../meta_plugins/plugin_tageditor.xml
-msgid "Edit tags of recorded movies"
-msgstr ""
-
-#: ../meta_plugins/plugin_trafficinfo.xml
-msgid "TrafficInfo shows german traffic information."
-msgstr ""
-
-#: ../meta_plugins/plugin_trafficinfo.xml
-msgid "German traffic information"
-msgstr ""
-
-#: ../meta_plugins/plugin_unwetterzentrale.xml
-msgid "German storm information"
-msgstr ""
-
-#: ../meta_plugins/plugin_unwetterzentrale.xml
-msgid "UnwetterInfo shows german storm information."
-msgstr ""
-
-#: ../meta_plugins/plugin_virtualzap.xml
-msgid "see service-epg (and PiP) from channels in an infobar"
-msgstr ""
-
-#: ../meta_plugins/plugin_virtualzap.xml
-msgid "See service-epg (and PiP) from other channels in an infobar."
-msgstr ""
-
-#: ../meta_plugins/plugin_vlcplayer.xml
-msgid "Play videos from PC on your Dreambox"
-msgstr ""
-
-#: ../meta_plugins/plugin_vlcplayer.xml
-msgid ""
-"Enigma2 Plugin to play AVI/DIVX/WMV/etc. videos from PC on your Dreambox. "
-"Needs a running VLC from www.videolan.org on your pc."
-msgstr ""
-
-#: ../meta_plugins/plugin_vxdcontrol.xml
-msgid "Customize Vali-XD skins by yourself."
-msgstr ""
-
-#: ../meta_plugins/plugin_vxdcontrol.xml
-msgid "Customize Vali-XD skins"
-msgstr ""
-
-#: ../meta_plugins/plugin_weatherplugin.xml
-msgid "Weatherforecast on your Dreambox"
-msgstr ""
-
-#: ../meta_plugins/plugin_weatherplugin.xml
-msgid "WeatherPlugin shows weatherforecasts on your Dreambox."
-msgstr ""
-
-#: ../meta_plugins/plugin_webcamviewer.xml
-msgid "Show webcam pictures on your TV Screen"
-msgstr ""
-
-#: ../meta_plugins/plugin_webcamviewer.xml
-msgid "With WebcamViewer you can watch webcams on your TV Screen."
-msgstr ""
-
-#: ../meta_plugins/plugin_webinterface.xml
-msgid "Control your Dreambox with your Web browser."
-msgstr ""
-
-#: ../meta_plugins/plugin_webinterface.xml
-msgid "Control your Dreambox with your browser"
-msgstr ""
-
-#: ../meta_plugins/plugin_werbezapper.xml
-msgid "Zap between commercials"
-msgstr ""
-
-#: ../meta_plugins/plugin_werbezapper.xml
-msgid ""
-"With Werbezapper you can bridge commercials by creating short timers\n"
-"(between 1 and 9 minutes long) which will automatically zap back to the "
-"original channel after execution."
-msgstr ""
-
-#: ../meta_plugins/plugin_youtubeplayer.xml
-msgid ""
-"With YouTubePlayer you can watch YouTube-Videos on the Dreambox.\n"
-"This plugin requires a PC with the VLC program running."
-msgstr ""
-
-#: ../meta_plugins/plugin_youtubeplayer.xml
-msgid "Playback of Youtube through a PC"
-msgstr ""
-
-#: ../meta_plugins/plugin_zaphistorybrowser.xml
-msgid ""
-"Shows a list containing the zapping-history and allows user to zap to the "
-"entries or to modify them."
-msgstr ""
-
-#: ../meta_plugins/plugin_zaphistorybrowser.xml
-msgid "Shows a list of recent zap entries"
-msgstr ""
-
-#: ../meta_plugins/plugin_zapstatistic.xml
-msgid "ZapStatistic shows the watched services with some statistics."
-msgstr ""
-
-#: ../meta_plugins/plugin_zapstatistic.xml
-msgid "Shows statistics of watched services"
-msgstr ""
-
-#: ../meta_plugins/plugin_zdfmediathek.xml
-msgid "Watch streams from ZDF Mediathek"
-msgstr ""
-
-#: ../meta_plugins/plugin_zdfmediathek.xml
-msgid "ZDFMediathek allows you to watch streams from ZDF Mediathek."
-msgstr ""
-
-#: ../meta_experimental/plugin_cleanupwizard.xml
-msgid "Automatically informs you on low internal memory"
-msgstr ""
-
-#: ../meta_experimental/plugin_cleanupwizard.xml
-msgid ""
-"The CleanupWizard informs you when the internal free memory of your dreambox "
-"has dropped below a definable threshold.You can use this wizard to remove "
-"some plugins."
-msgstr ""
-
-#: ../meta_experimental/plugin_commoninterfaceassignment.xml
-msgid ""
-"With the CommonInterfaceAssignment plugin it is possible to use differentCI "
-"modules in your Dreambox and assign dedicated providers/services or caids to "
-"each of them.\n"
-"This allows watching a scrambled service while recording another one."
-msgstr ""
-
-#: ../meta_experimental/plugin_commoninterfaceassignment.xml
-msgid "Assigning providers/services/caids to a CI module"
-msgstr ""
-
-#: ../meta_experimental/plugin_crashlogautosubmit.xml
-msgid "Automatically send crashlogs to Dream Multimedia"
-msgstr ""
-
-#: ../meta_experimental/plugin_crashlogautosubmit.xml
-msgid ""
-"With the CrashlogAutoSubmit plugin it is possible to automaticallymail "
-"crashlogs found on your hard drive to Dream Multimedia."
-msgstr ""
-
-#: ../meta_experimental/plugin_cutlisteditor.xml
-msgid "CutListEditor allows you to edit your movies"
-msgstr ""
-
-#: ../meta_experimental/plugin_cutlisteditor.xml
-msgid ""
-"CutListEditor allows you to edit your movies.\n"
-"Seek to the start of the stuff you want to cut away. Press OK, select 'start "
-"cut'.\n"
-"Then seek to the end, press OK, select 'end cut'. That's it."
-msgstr ""
-
-#: ../meta_experimental/plugin_defaultservicesscanner.xml
-msgid ""
-"With the DefaultServicesScanner plugin you can scan default lamedbs sorted "
-"by satellite with a connected dish positioner."
-msgstr ""
-
-#: ../meta_experimental/plugin_defaultservicesscanner.xml
-msgid "Scans default lamedbs sorted by satellite"
-msgstr ""
-
-#: ../meta_experimental/plugin_diseqctester.xml
-msgid "Test your DiSEqC equipment"
-msgstr ""
-
-#: ../meta_experimental/plugin_diseqctester.xml
-msgid ""
-"With the DiseqcTester plugin you can test your satellite equipment for "
-"DiSEqC compatibility and errors."
-msgstr ""
-
-#: ../meta_experimental/plugin_dvdburn.xml
-msgid ""
-"With DVDBurn you can make compilations of records from your Dreambox hard "
-"drive.\n"
-"Optionally you can add customizable menus. You can record the compilation to "
-"a standard-compliant DVD that can be played on conventinal DVD players.\n"
-"HDTV recordings can only be burned in proprietary dreambox format."
-msgstr ""
-
-#: ../meta_experimental/plugin_dvdburn.xml
-msgid "Burn your recordings to DVD"
-msgstr ""
-
-#: ../meta_experimental/plugin_dvdplayer.xml
-msgid ""
-"DVDPlayer plays your DVDs on your Dreambox.\n"
-"With 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."
-msgstr ""
-
-#: ../meta_experimental/plugin_dvdplayer.xml
-msgid "DVDPlayer plays your DVDs on your Dreambox"
-msgstr ""
-
-#: ../meta_experimental/plugin_frontprocessorupgrade.xml
-msgid "Internal firmware updater"
-msgstr ""
-
-#: ../meta_experimental/plugin_frontprocessorupgrade.xml
-msgid ""
-"This system tool is internally used to program the hardware with firmware "
-"updates."
-msgstr ""
-
-#: ../meta_experimental/plugin_graphmultiepg.xml
-msgid ""
-"GraphMultiEPG shows a graphical timeline EPG.\n"
-"Shows a nice overview of all running und upcoming tv shows."
-msgstr ""
-
-#: ../meta_experimental/plugin_graphmultiepg.xml
-msgid "GraphMultiEPG shows a graphical timeline EPG"
-msgstr ""
-
-#: ../meta_experimental/plugin_hotplug.xml
-msgid "Hotplugging for removeable devices"
-msgstr ""
-
-#: ../meta_experimental/plugin_hotplug.xml
-msgid ""
-"The Hotplug plugin notifies your system of newly added or removed devices."
-msgstr ""
-
-#: ../meta_experimental/plugin_mediaplayer.xml
-msgid "Plays your favorite music and videos"
-msgstr ""
-
-#: ../meta_experimental/plugin_mediaplayer.xml
-msgid ""
-"Mediaplayer plays your favorite music and videos.\n"
-"Play all your favorite music and video files, organize them in playlists, "
-"view cover and album information."
-msgstr ""
-
-#: ../meta_experimental/plugin_mediascanner.xml
-msgid "Scan devices for playable media files"
-msgstr ""
-
-#: ../meta_experimental/plugin_mediascanner.xml
-msgid ""
-"MediaScanner scans devices for playable media files and displays a menu with "
-"possible actions like viewing pictures or playing movies."
-msgstr ""
-
-#: ../meta_experimental/plugin_networkwizard.xml
-msgid "Step by step network configuration"
-msgstr ""
-
-#: ../meta_experimental/plugin_networkwizard.xml
-msgid ""
-"With the NetworkWizard you can easily configure your network step by step."
-msgstr ""
-
-#: ../meta_experimental/plugin_nfiflash.xml
-msgid "Restore your Dreambox with a USB stick"
-msgstr ""
-
-#: ../meta_experimental/plugin_nfiflash.xml
-msgid ""
-"With the NFIFlash plugin 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."
-msgstr ""
-
-#: ../meta_experimental/plugin_pictureplayer.xml
-msgid "Display your photos on the TV"
-msgstr ""
-
-#: ../meta_experimental/plugin_pictureplayer.xml
-msgid ""
-"The PicturePlayer displays your photos on the TV.\n"
-"You can view them as thumbnails or slideshow."
-msgstr ""
-
-#: ../meta_experimental/plugin_positionersetup.xml
-msgid "PositionerSetup helps you installing a motorized dish"
-msgstr ""
-
-#: ../meta_experimental/plugin_positionersetup.xml
-msgid ""
-"With the PositionerSetup plugin it is easy to install and configure a "
-"motorized dish."
-msgstr ""
-
-#: ../meta_experimental/plugin_satelliteequipmentcontrol.xml
-msgid ""
-"With the SatelliteEquipmentControl plugin it is possible to fine-tune DiSEqC-"
-"settings."
-msgstr ""
-
-#: ../meta_experimental/plugin_satelliteequipmentcontrol.xml
-msgid "SatelliteEquipmentControl allows you to fine-tune DiSEqC-settings"
-msgstr ""
-
-#: ../meta_experimental/plugin_satfinder.xml
-msgid ""
-"The Satfinder plugin helps you to align your dish.\n"
-"It shows you informations about signal rate and errors."
-msgstr ""
-
-#: ../meta_experimental/plugin_satfinder.xml
-msgid "Satfinder helps you to align your dish"
-msgstr ""
-
-#: ../meta_experimental/plugin_skinselector.xml
-msgid "SkinSelector shows a menu with selectable skins"
-msgstr ""
-
-#: ../meta_experimental/plugin_skinselector.xml
-msgid ""
-"The SkinSelector shows a menu with selectable skins.\n"
-"It's now easy to change the look and feel of your Dreambox."
-msgstr ""
-
-#: ../meta_experimental/plugin_socketmmi.xml
-msgid "Frontend for /tmp/mmi.socket"
-msgstr ""
-
-#: ../meta_experimental/plugin_socketmmi.xml
-msgid "Python frontend for /tmp/mmi.socket."
-msgstr ""
-
-#: ../meta_experimental/plugin_softwaremanager.xml
-msgid "SoftwareManager manages your Dreambox software"
-msgstr ""
-
-#: ../meta_experimental/plugin_softwaremanager.xml
-msgid ""
-"The SoftwareManager manages your Dreambox software.\n"
-"It's easy to update your receiver's software, install or remove plugins or "
-"even backup and restore your system settings."
-msgstr ""
-
-#: ../meta_experimental/plugin_tempfancontrol.xml
-msgid "Control your system fan"
-msgstr ""
-
-#: ../meta_experimental/plugin_tempfancontrol.xml
-msgid "Control your internal system fan."
-msgstr ""
-
-#: ../meta_experimental/plugin_tuxboxplugins.xml
-msgid "Execute TuxboxPlugins"
-msgstr ""
-
-#: ../meta_experimental/plugin_tuxboxplugins.xml
-msgid "Allows the execution of TuxboxPlugins."
-msgstr ""
-
-#: ../meta_experimental/plugin_videoenhancement.xml
-msgid "VideoEnhancement provides advanced video enhancement settings"
-msgstr ""
-
-#: ../meta_experimental/plugin_videoenhancement.xml
-msgid ""
-"The VideoEnhancement plugin provides advanced video enhancement settings."
-msgstr ""
-
-#: ../meta_experimental/plugin_videomode.xml
-msgid "Videomode provides advanced video mode settings"
-msgstr ""
-
-#: ../meta_experimental/plugin_videomode.xml
-msgid "The Videomode plugin provides advanced video mode settings."
-msgstr ""
-
-#: ../meta_experimental/plugin_videotune.xml
-msgid "VideoTune helps fine-tuning your tv display"
-msgstr ""
-
-#: ../meta_experimental/plugin_videotune.xml
-msgid ""
-"The VideoTune helps fine-tuning your tv display.\n"
-"You can control brightness and contrast of your tv."
-msgstr ""
-
-#: ../meta_experimental/plugin_wirelesslan.xml
-msgid ""
-"The WirelessLan plugin helps you configuring your WLAN network interface."
-msgstr ""
-
-#: ../meta_experimental/plugin_wirelesslan.xml
-msgid "Configure your WLAN network interface"
-msgstr ""
diff --git a/skin.py b/skin.py
index b490f73..19da203 100755 (executable)
--- a/skin.py
+++ b/skin.py
@@ -284,8 +284,8 @@ def loadSingleSkinData(desktop, skin, path_prefix):
                                else:
                                        bpp = 32
                                #print "Resolution:", xres,yres,bpp
-                               from enigma import gFBDC
-                               gFBDC.getInstance().setResolution(xres, yres)
+                               from enigma import gMainDC
+                               gMainDC.getInstance().setResolution(xres, yres)
                                desktop.resize(eSize(xres, yres))
                                if bpp != 32:
                                        # load palette (not yet implemented)
diff --git a/tools/.gitignore b/tools/.gitignore
new file mode 100644 (file)
index 0000000..fcadf30
--- /dev/null
@@ -0,0 +1 @@
+enigma2.sh
index 82301a6..9e69b46 100644 (file)
@@ -1,9 +1,7 @@
-libopen.so.0.0: libopen.c
-       $(CXX) -Wall -W libopen.c -O2 -nostartfiles -shared -fPIC -Wl,-soname,libopen.so.0 -o libopen.so.0.0 -ldl
+bin_SCRIPTS = enigma2.sh
+lib_LTLIBRARIES = libopen.la
 
-all: libopen.so.0.0
+libopen_la_SOURCES = libopen.c
+libopen_la_LIBADD = @LIBDL_LIBS@
 
-CLEANFILES = libopen.so.0.0
-
-install: all
-       $(INSTALL) libopen.so.0.0 $(DESTDIR)/usr/lib
+EXTRA_DIST = enigma2.sh.in
diff --git a/tools/enigma2.sh.in b/tools/enigma2.sh.in
new file mode 100755 (executable)
index 0000000..2f9292a
--- /dev/null
@@ -0,0 +1,55 @@
+#!/bin/sh
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+datarootdir=@datarootdir@
+
+if [ -x @bindir@/showiframe -a -f @datadir@/backdrop.mvi ]; then
+       @bindir@/showiframe @datadir@/backdrop.mvi
+fi
+
+# hook to execute scripts always before enigma2 start
+if [ -x @bindir@/enigma2_pre_start.sh ]; then
+       @bindir@/enigma2_pre_start.sh
+fi
+
+if [ -d /home/root ]; then
+       cd /home/root
+fi
+
+LIBS=@libdir@/libopen.so.0.0.0
+
+#check for dreambox specific passthrough helper lib
+if [ -e @libdir@/libpassthrough.so ]; then
+       LIBS="$LIBS @libdir@/libpassthrough.so"
+fi
+
+LD_PRELOAD=$LIBS @bindir@/enigma2
+
+# enigma2 exit codes:
+#
+# 0 - restart enigma
+# 1 - halt
+# 2 - reboot
+#
+# >128 signal
+
+ret=$?
+case $ret in
+       1)
+               /sbin/halt
+               ;;
+       2)
+               /sbin/reboot
+               ;;
+       4)
+               /sbin/rmmod lcd
+               /usr/sbin/fpupgrade --upgrade 2>&1 | tee /home/root/fpupgrade.log
+               sleep 1;
+               /sbin/rmmod fp
+               /sbin/modprobe fp
+               /sbin/reboot
+               ;;
+       *)
+               ;;
+esac