# 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
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
--- /dev/null
+See LICENSE.
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) $^ > $@
+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
+
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)
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")
+++ /dev/null
-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
-])
#!/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
+++ /dev/null
-/* 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
-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
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
lib/Makefile
lib/actions/Makefile
lib/base/Makefile
+lib/base/eenv.cpp
lib/driver/Makefile
lib/dvb/Makefile
lib/dvb/lowlevel/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
-SUBDIRS = countries fonts defaults extensions skin_default
+SUBDIRS = countries fonts defaults extensions keymaps skin_default
dist_pkgdata_DATA = \
defaultsatlists.xml \
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
<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>
--- /dev/null
+<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>
<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>
<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>
<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>
<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>
--- /dev/null
+config.misc.rcused=1
\ No newline at end of file
--- /dev/null
+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;
--- /dev/null
+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;
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
pol ISO8859-2
rus ISO8859-5
bul ISO8859-5
+tha ISO8859-11
cze ISO6397
ces ISO6397
slo 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
-installdir = $(FONTDIR)
+installdir = $(datadir)/fonts
dist_install_DATA = \
ae_AlMateen.ttf \
lcd.ttf \
md_khmurabi_10.ttf \
- nmsbd.ttf
+ nmsbd.ttf \
+ tuxtxt.ttf
<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" />
--- /dev/null
+keymapsdir = $(datadir)/keymaps
+keymaps_DATA = \
+ dream-de.info \
+ dream-de.kmap \
+ eng.info \
+ eng.kmap
--- /dev/null
+kmap=dream-de.kmap
+name=Dreambox Keyboard Deutsch
--- /dev/null
+kmap=eng.kmap
+name=Keyboard English
<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>
<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" /> -->
<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">
<!-- 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">
</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" >
<!-- 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">
</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=" ">
</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=" ">
</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>
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 \
+++ /dev/null
-#!/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
-
+++ /dev/null
-set solib-absolute-prefix /home/tmbinc/mips/target
-target remote 10.0.0.203:1234
-continue
--- /dev/null
+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)
+}
Name: enigma2
Description: Enigma2
Version: @VERSION@
-Libs:
-Cflags: -I${includedir}/enigma2
+Cflags: -I${includedir}/enigma2 @ENIGMA2_CFLAGS@
+Requires.private: sigc++-1.2
-EXTRA_DIST = \
+pkginclude_HEADERS = \
connection.h \
libsig_comp.h
--- /dev/null
+actionids.h
-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 >> $@
#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>
if mode == "include":
# hack hack hack!!
- print "#include <lib" + f[2:] + ">"
+ print "#include <lib/" + '/'.join(f.split('/')[-2:]) + ">"
else:
print "\t// " + f
-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
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;
#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>
--- /dev/null
+#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;
+}
--- /dev/null
+#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
#include <cstdlib>
#include <lib/base/encoding.h>
#include <lib/base/eerror.h>
+#include <lib/base/eenv.h>
eDVBTextEncodingHandler encodingHandler; // the one and only instance
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);
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)
{
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;
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)
{
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 */
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)
{
/* 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)
{
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;
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()
stop();
}
-void eFilePushThread::seek(int whence, off_t where)
-{
- m_raw_source.lseek(where, whence);
-}
-
void eFilePushThread::resume()
{
m_stop = 0;
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 */
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);
};
--- /dev/null
+#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
#include <lib/base/rawfile.h>
#include <lib/base/eerror.h>
+DEFINE_REF(eRawFile);
+
eRawFile::eRawFile()
+ :m_lock(false)
{
m_fd = -1;
m_file = 0;
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)
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);
}
}
}
}
-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)
#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;
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);
};
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);
pthread_attr_destroy(&attr);
return 0;
-}
+}
int eThread::run(int prio, int policy)
{
-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
-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
#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)
unsigned char data[16];
unsigned char *d = data;
int num = read(handle, data, 16);
- int code=-1;
+ unsigned char code;
int km = input->getKeyboardMode();
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);
+ }
}
}
eRCConsoleDriver driver;
eRCConsole device;
public:
- eRCConsoleInit(): driver("/dev/vc/0"), device(&driver)
+ eRCConsoleInit(): driver("/dev/tty0"), device(&driver)
{
}
};
protected:
int handle;
ePtr<eSocketNotifier> sn;
+ bool m_escape;
void keyPressed(int);
public:
eRCConsoleDriver(const char *filename);
--- /dev/null
+#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");
--- /dev/null
+#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
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
#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>
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 )
void eDVBDB::reloadServicelist()
{
- loadServicelist(CONFIGDIR"/enigma2/lamedb");
+ loadServicelist(eEnv::resolve("${sysconfdir}/enigma2/lamedb").c_str());
}
void eDVBDB::parseServiceData(ePtr<eDVBService> s, std::string str)
{
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)
void eDVBDB::saveServicelist()
{
- saveServicelist(CONFIGDIR"/enigma2/lamedb");
+ saveServicelist(eEnv::resolve("${sysconfdir}/enigma2/lamedb").c_str());
}
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)";
}
return;
}
+ int entries=0;
char line[256];
bool read_descr=false;
eServiceReference *e = NULL;
case aLPCM:
bypass = 6;
break;
+ case aDTSHD:
+ bypass = 0x10;
+ break;
}
eDebugNoNewLine("AUDIO_SET_BYPASS(%d) - ", bypass);
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;
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);
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)
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;
}
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;
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)
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);
#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;
}
}
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;
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)
}
}
}
- 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)
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)
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;
}
}
{
start = current_offset;
size = max;
- eDebug("NO CUESHEET. (%08llx, %d)", start, size);
+ eDebug("NO CUESHEET. (%08llx, %zd)", start, size);
} else
{
start = current_offset;
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)
{
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! */
/* (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();
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;
return 0;
}
-void eDVBChannel::stopFile()
+void eDVBChannel::stopSource()
{
if (m_pvr_thread)
{
}
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)
DECLARE_REF(eDVBResourceManager);
int avail, busy;
- enum { DM7025, DM800, DM500HD, DM800SE, DM8000 };
+ enum { DM7025, DM800, DM500HD, DM800SE, DM8000, DM7020HD };
int m_boxtype;
/* 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);
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>;
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);
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)
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;
}
}
}
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);
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);
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);
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))
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;
void thread(); // thread function
// called from epgcache thread
+ int m_running;
+ char m_filename[1024];
void save();
void load();
#ifdef ENABLE_PRIVATE_EPG
#endif
#endif
+ // must be called once!
+ void setCacheFile(const char *filename);
+
// called from main thread
inline void Lock();
inline void Unlock();
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)
{
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()
int begin(eMainloop *m, const eDVBTableSpec &spec, ePtr<iDVBDemux> demux)
{
+ m_table_cnt = 0;
ml = m;
m_demux = demux;
first= 1;
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);
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
#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)
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;
}
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];
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);
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;
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();
#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>
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;
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)
/** 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;
-EXTRA_DIST = \
+lowlevelincludedir = $(pkgincludedir)/lib/dvb/lowlevel
+lowlevelinclude_HEADERS = \
eit.h \
mhw.h
#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()
&& (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);
}
}
+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;
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;
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)
{
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
{
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:
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))
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;
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;
}
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;
{
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))
m_pmt_pid = pmt_pid;
}
}
+ else
+ eWarning("no valid source to find PMT pid!");
}
eDebug("alloc PVR");
/* allocate PVR */
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());
}
}
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);
int m_use_decode_demux;
uint8_t m_decode_demux_num;
+ ePtr<eTimer> m_no_pat_entry_delay;
public:
eDVBServicePMTHandler();
~eDVBServicePMTHandler();
{
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;
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;
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; }
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;
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 */
#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>
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];
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);
}
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;
}
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;
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;
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;
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);
}
else
{
- int tmp1 = abs(sat.frequency
+ int tmp1 = abs(sat.frequency
-lof)
+ lnb_param.SatCRvco
- 1400000
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)
(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
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
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]) );
}
}
}
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
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) );
#include <stdio.h>
eDVBTSTools::eDVBTSTools()
- :m_file_lock(true)
{
m_pid = -1;
m_maxrange = 256*1024;
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())
// 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)
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");
if (packet[i] == 0x47)
break;
++i;
+ --offset;
}
- offset = m_file.lseek(i - 188, SEEK_CUR);
continue;
}
break;
case 0x71: // AC3 / DTS
break;
+ case 0x72: // DTS - HD
+ break;
default:
eDebug("skip unknwn stream_id_extension %02x\n", payload[9+offs]);
continue;
void eDVBTSTools::calcBegin()
{
- if (!m_file.valid())
+ if (!m_source || !m_source->valid())
return;
if (!(m_begin_valid || m_futile))
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)
{
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;
{
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);
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))
{
// 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;
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);
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;
-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
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;
}
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;
}
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;
}
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;
}
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
-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
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 */
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;
}
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())
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();
}
+#define PNG_SKIP_SETJMP_CHECK
#include <png.h>
#include <stdio.h>
#include <lib/gdi/epng.h>
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);
}
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
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
// 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>
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;
return 0;
singleLock s(ftlock);
FT_Face current_face;
-#ifdef HAVE_FREETYPE2
if ((FTC_Manager_LookupFace(cacheManager, fnt->scaler.face_id, ¤t_face) < 0) ||
(FTC_Manager_LookupSize(cacheManager, &fnt->scaler, &fnt->size) < 0))
-#else
- if (FTC_Manager_Lookup_Size(cacheManager, &fnt->font.font, ¤t_face, &fnt->size)<0)
-#endif
{
eDebug("FTC_Manager_Lookup_Size failed!");
return 0;
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;
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;
// 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;
}
if (current_font)
{
-#ifdef HAVE_FREETYPE2
if ((FTC_Manager_LookupFace(fontRenderClass::instance->cacheManager,
current_font->scaler.face_id,
¤t_face) < 0) ||
(FTC_Manager_LookupSize(fontRenderClass::instance->cacheManager,
¤t_font->scaler,
¤t_font->size) < 0))
-#else
- if (FTC_Manager_Lookup_Size(fontRenderClass::instance->cacheManager, ¤t_font->font.font, ¤t_face, ¤t_font->size)<0)
-#endif
{
eDebug("FTC_Manager_Lookup_Size failed!");
return;
}
}
-#ifndef HAVE_FREETYPE2
- cache_current_font=¤t_font->font.font;
-#endif
previous=0;
use_kerning=FT_HAS_KERNING(current_face);
}
if (!current_font)
return -1;
-#ifdef HAVE_FREETYPE2
if ((FTC_Manager_LookupFace(fontRenderClass::instance->cacheManager,
current_font->scaler.face_id,
¤t_face) < 0) ||
eDebug("FTC_Manager_Lookup_Size failed!");
return -1;
}
-#else
- if (¤t_font->font.font != cache_current_font)
- {
- if (FTC_Manager_Lookup_Size(fontRenderClass::instance->cacheManager, ¤t_font->font.font, ¤t_face, ¤t_font->size)<0)
- {
- eDebug("FTC_Manager_Lookup_Size failed!");
- return -1;
- }
- cache_current_font=¤t_font->font.font;
- }
-#endif
if (!current_face)
eFatal("eTextPara::renderString: no current_face");
// 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.
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);
}
bboxValid=false;
calc_bbox();
-#ifdef HAVE_FRIBIDI
if (dir & FRIBIDI_MASK_RTL)
{
realign(dirRight);
doTopBottomReordering=true;
}
-#endif
if (charCount)
{
if (!current_font)
return;
-#ifdef HAVE_FREETYPE2
if ((FTC_Manager_LookupFace(fontRenderClass::instance->cacheManager,
current_font->scaler.face_id,
¤t_face) < 0) ||
eDebug("FTC_Manager_Lookup_Size failed!");
return;
}
-#else
- if (¤t_font->font.font != cache_current_font)
- {
- if (FTC_Manager_Lookup_Size(fontRenderClass::instance->cacheManager, ¤t_font->font.font, ¤t_face, ¤t_font->size)<0)
- {
- eDebug("FTC_Manager_Lookup_Size failed!");
- return;
- }
- cache_current_font=¤t_font->font.font;
- }
-#endif
ePtr<gPixmap> target;
dc.getPixmap(target);
#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>
{
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);
#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())
{
delete fb;
delete[] surface.clut.data;
- instance=0;
}
void gFBDC::calcRamp()
fb->PutCMAP();
}
-void gFBDC::exec(gOpcode *o)
+void gFBDC::exec(const gOpcode *o)
{
switch (o->opcode)
{
setPalette();
}
-// eAutoInitPtr<gFBDC> init_gFBDC(eAutoInitNumbers::graphic-1, "GFBDC");
-#ifndef WITH_SDL
eAutoInitPtr<gFBDC> init_gFBDC(eAutoInitNumbers::graphic-1, "GFBDC");
-#endif
#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();
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);
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
instance=0;
}
-void gLCDDC::exec(gOpcode *o)
+void gLCDDC::exec(const gOpcode *o)
{
switch (o->opcode)
{
eLCD *lcd;
static gLCDDC *instance;
int update;
- void exec(gOpcode *opcode);
+ void exec(const gOpcode *opcode);
gSurface surface;
public:
gLCDDC();
--- /dev/null
+#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;
+}
+
--- /dev/null
+#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
delete[] m_spinner_pic;
}
-void gDC::exec(gOpcode *o)
+void gDC::exec(const gOpcode *o)
{
switch (o->opcode)
{
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();
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
#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>
eDebug("found OLED display!");
is_oled = 1;
}
-#else
- lcdfd = -1;
-#endif
- instance=this;
if (lcdfd<0)
eDebug("couldn't open LCD - load lcd.o!");
is_oled = 3;
}
}
+#endif
+ instance=this;
+
setSize(xres, yres, bpp);
}
int eDBoxLCD::setLCDContrast(int contrast)
{
+#ifndef NO_LCD
int fp;
if((fp=open("/dev/dbox/fp0", O_RDWR))<=0)
{
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)
eDebug("[LCD] can't set lcd brightness (%m)");
close(fp);
}
+#endif
return(0);
}
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));
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(;;)
{
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++)
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;
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;
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)
{
}
}
+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)
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:
-#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>
-#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:
}
}
-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");
#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
-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
{
Py_XDECREF(m_buildFunc);
Py_XDECREF(m_selectableFunc);
+ Py_XDECREF(m_template);
}
void eListboxPythonMultiContent::setSelectionClip(eRect &rect, bool update)
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);
}
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");
void eListboxPythonMultiContent::setTemplate(ePyObject tmplate)
{
+ Py_XDECREF(m_template);
m_template = tmplate;
+ Py_XINCREF(m_template);
}
// 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());
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;
}
}
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
{
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;
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)
-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
-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
--- /dev/null
+enigma.py
+enigma_python.cpp
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
--- /dev/null
+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)
+
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"])
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":
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()
"mpeg": "movie",
"mkv": "movie",
"mp4": "movie",
- "mov": "movie"
+ "mov": "movie",
+ "m2ts": "movie",
}
def FileEntryComponent(name, absolute = None, isDir = False):
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"
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])
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):
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
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:
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:
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)
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)
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"
}
self.hdd = [ ]
self.cd = ""
self.partitions = [ ]
+ self.devices_scanned_on_init = [ ]
self.on_partition_list_change = CList()
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)
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)
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
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 = []
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:
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):
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:
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:
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()
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):
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():
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
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):
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):
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
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
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*")
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*")
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:
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
eDVBSatelliteDiseqcParameters as diseqcParam, \
eDVBSatelliteSwitchParameters as switchParam, \
eDVBSatelliteRotorParameters as rotorParam, \
- eDVBResourceManager, eDVBDB
+ eDVBResourceManager, eDVBDB, eEnv
from time import localtime, mktime
from datetime import datetime
if currLnb.diseqcMode.value == "1_0":
currCO = currLnb.commandOrder1_0.value
+ sec.setRepeats(0)
else:
currCO = currLnb.commandOrder.value
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")
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
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
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)
import keymapparser
class PluginComponent:
+ firstRun = True
+ restartRequired = False
+
def __init__(self):
self.plugins = {}
self.pluginList = [ ]
+ self.installedPluginList = [ ]
self.setPluginPrefix("Plugins.")
self.resetWarnings()
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:
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):
plugins = [ plugins ]
for p in plugins:
+ p.path = path
p.updateIcon(path)
new_plugins.append(p)
# 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"""
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 = [ ]
## 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/')
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)
+
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)
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,))
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):
list.append(self.active_job)
list += self.active_jobs
return list
+
# some examples:
#class PartitionExistsPostcondition:
# def __init__(self, device):
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):
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
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
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 = [
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)
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]
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(' ')]
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:
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()
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)
-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
+
-installdir = $(LIBDIR)/enigma2/python/Plugins/DemoPlugins/TPMDemo
+installdir = $(pkglibdir)/python/Plugins/DemoPlugins/TPMDemo
install_PYTHON = \
__init__.py \
# 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
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)
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)
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]):
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
<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>
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
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:
<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"
<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"
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") ]
-if HAVE_DDVDLIB
SUBDIRS = src meta
installdir = $(pkglibdir)/python/Plugins/Extensions/DVDPlayer
plugin.py \
keymap.xml \
LICENSE
-endif
<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" />
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
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"],
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
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
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
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):
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):
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)
"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")),
keys.keyPressed(key)
return keys
+ def enterAudioSelection(self):
+ self.audioSelection()
+
def nextAudioTrack(self):
self.sendKey(iServiceKeys.keyUser)
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
)]
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)]
-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@
{
std::list<std::string> extensions;
extensions.push_back("iso");
+ extensions.push_back("img");
sc->addServiceFactory(eServiceFactoryDVD::id, this, extensions);
}
}
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;
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;
}
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)
{
m_subtitle_widget->show();
return 0;
+
+error_out:
+ return -1;
}
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()
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;
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; }
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);
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
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
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)]
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
# '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()
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)
]
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)
]
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)
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)]
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) ]
+
-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
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;
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
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:
else:
self.icon = icon
+ self.weight = weight
+
self.wakeupfnc = wakeupfnc
self.__call__ = fnc
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:
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
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
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"))
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
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 )]
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)]
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)
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)]
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
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)
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
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 = []
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]
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
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):
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":
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"))
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)]
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 = """
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:
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()
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"))
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':
#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
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)
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"
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()
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)
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"))
self.selectedInterface = "eth0"
self.NextStep = 'nwconfig'
else:
- self.NextStep = 'scanwlan'
+ self.NextStep = 'asknetworktype'
def ChoicesSelectionMoved(self):
pass
-
<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")
<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")
</step>
</wizard>
-
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)
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
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>"""
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
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>"""
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:
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
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)]
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))
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 []
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 []
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))
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 []
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):
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)
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
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):
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"
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):
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()
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
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):
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)
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):
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):
callback = None
def cleanupSoftwareTools(self):
+ self.list_updating = False
if self.NotifierCallback is not None:
self.NotifierCallback = None
self.ipkg.stop()
return False
return True
-iSoftwareTools = SoftwareTools()
\ No newline at end of file
+iSoftwareTools = SoftwareTools()
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
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")),
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"):
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:
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)
self.list = []
backupfiles = config.plugins.configurationbackup.backupdirs.value
for entry in backupfiles:
- print entry
self.list.append((entry,))
self['list'].setList(self.list)
self.currentSelectedIndex = None
self.currentSelectedPackage = None
self.saved_currentSelectedPackage = None
+ self.restartRequired = False
self.onShown.append(self.setWindowTitle)
self.onLayoutFinish.append(self.getUpdateInfos)
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):
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':
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))
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()
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:
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))
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.")
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
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,
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:
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
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')
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
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:
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" >
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
-installdir = $(LIBDIR)/enigma2/python/Plugins/SystemPlugins/TempFanControl
+installdir = $(pkglibdir)/python/Plugins/SystemPlugins/TempFanControl
SUBDIRS = meta
__init__.py \
plugin.py
-dist_install_DATA = LICENSE
\ No newline at end of file
+dist_install_DATA = LICENSE
<prerequisites>
<hardware type="dm8000" />
<hardware type="dm500hd" />
+ <hardware type="dm800se" />
+ <hardware type="dm7020hd" />
<tag type="System" />
</prerequisites>
<info>
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)
<hardware type="dm8000" />
<hardware type="dm800" />
<hardware type="dm500hd" />
+ <hardware type="dm800se" />
+ <hardware type="dm7020hd" />
<tag type="Display" />
<tag type="System" />
</prerequisites>
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
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))
]
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
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))
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))
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"))
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
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)
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:
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:
'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')]
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')]
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
-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
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):
}, -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)
iStatus.stopWlanConsole()
def layoutFinished(self):
- self.setTitle(_("Wireless Network State"))
+ self.setTitle(_("Wireless network state"))
def resetList(self):
iStatus.getDataForInterface(self.iface,self.getInfoCB)
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)
"red": self.cancel,
"green": self.select,
})
+ iWlan.setInterface(self.iface)
+ self.w = iWlan.getInterface()
self.onLayoutFinish.append(self.layoutFinished)
self.getAccessPoints(refresh = False)
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()
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 = []
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()
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 = []
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] ))
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
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()
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..."})
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 \\
"cancel": self.cancel,
"up": self.keyUp,
"down": self.keyDown,
- }, -3)
+ }, -2)
self.settings = ConfigSubsection()
choicelist = [(PAGE_AUDIO,_("audio tracks")), (PAGE_SUBTITLES,_("Subtitles"))]
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)
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)
language = _("<unknown>")
selected = ""
- if sel and x[:4] == sel[:4]:
+ if sel and x == sel:
selected = _("Running")
selectedidx = idx
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))
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)
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):
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")
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
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
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:
self.close()
def addParentalProtection(self, service):
+ from Components.ParentalControl import parentalControl
parentalControl.protectService(service.toCompareString())
self.close()
def pinEntered(self, service, result):
if result:
+ from Components.ParentalControl import parentalControl
parentalControl.unProtectService(service)
self.close()
else:
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:
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
self.session.nav.stopService()
elif answer == "restart":
self.doSeek(0)
+ self.setSeekState(self.SEEK_STATE_PLAY)
def doEofInternal(self, playing):
if not self.execing:
-from ChannelSelection import ChannelSelection, BouquetSelector
+from ChannelSelection import ChannelSelection, BouquetSelector, SilentBouquetSelector
from Components.ActionMap import ActionMap, HelpableActionMap
from Components.ActionMap import NumberActionMap
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)
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:
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,
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)
answer[1][1]()
from Tools.BoundFunction import boundFunction
+import inspect
# depends on InfoBarExtensions
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):
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
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]
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
"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())
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):
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):
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
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")),
"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()
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:
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"))
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()
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
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))
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:
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)
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):
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)
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)
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)
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()
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",
{
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':
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':
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:
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:
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()
def cleanup(self):
iNetwork.stopLinkStateConsole()
iNetwork.stopDeactivateInterfaceConsole()
+ iNetwork.stopActivateInterfaceConsole()
iNetwork.stopPingConsole()
try:
from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
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()
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):
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)
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
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)
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]
}, -1)
def cancel(self):
+ from Components.ParentalControl import parentalControl
parentalControl.save()
self.close()
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)
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:
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()
self.list = list
self["list"].l.setList(list)
-language.addCallback(languageChanged)
\ No newline at end of file
+language.addCallback(languageChanged)
if raw_channel:
frontend = raw_channel.getFrontend()
if frontend:
+ frontend.closeFrontend() # immediate close...
del frontend
del raw_channel
return True
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()
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):
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):
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()
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"):
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))
(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 = [
(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"),
# 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 = [
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):
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()
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):
# 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 = [ ]
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:
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):
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):
if v == -2:
v = self.info.getInfoString(what)
elif v == -1:
- v = "N/A"
+ v = _("N/A")
return v
from Components.SystemInfo import SystemInfo
from Components.ConfigList import ConfigListScreen
from Components.Sources.StaticText import StaticText
+from enigma import eEnv
import xml.etree.cElementTree
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()
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:
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
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
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()
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
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():
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()
-# -*- 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
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"],
[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):
selectedKey -= 12
self["list"].setList(list)
-
def backClicked(self):
self.text = self["text"].getText()[:-1]
if text is None:
return
- text = text.encode("utf-8")
+ text = text.encode("UTF-8")
if text == "EXIT":
self.close(None)
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
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
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)
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
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
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)]
}
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)
# 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):
-# -*- coding: utf-8 -*-
+# -*- coding: UTF-8 -*-
from enigma import eTimer
from Components.Language import language
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
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
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
self.mapping.append (u"wxyz9WXYZ") # 9
def setUseableChars(self, useable):
- self.useableChars = useable
+ self.useableChars = unicode(useable)
+
def getKey(self, num):
cnt=0
from enigma import eDVBFrontendParametersSatellite, eDVBFrontendParametersCable, eDVBFrontendParametersTerrestrial
+from Components.NimManager import nimmanager
def ConvertToHumanReadable(tp, type = None):
ret = { }
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"),
#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
}
};
+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
#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>
#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>
%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;
%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>
#define __lib_python_python_class_h
#endif
-#include <Python.h>
#include <string>
#include <lib/base/object.h>
-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
sFileSize,
sCAIDs,
+ sCAIDPIDs,
sVideoType, /* MPEG2 MPEG4 */
sTags, /* space seperated list of tags */
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)
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; }
};
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
{
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);
}
/* 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;
}
}
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);
}
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);
}
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)
{
{
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;
{
case sCAIDs:
return m_service_handler.getCaIds();
+ case sCAIDPIDs:
+ return m_service_handler.getCaIds(true);
case sTransponderData:
return eStaticServiceDVBInformation().getInfoObject(m_reference, w);
default:
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 = "???";
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)
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();
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(" (");
}
eDebugNoNewLine(")");
}
- eDebugNoNewLine(", and %d audio stream(s)", program.audioStreams.size());
+ eDebugNoNewLine(", and %zd audio stream(s)", program.audioStreams.size());
if (!program.audioStreams.empty())
{
eDebugNoNewLine(" (");
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!");
RESULT stream(ePtr<iStreamableService> &ptr);
PyObject *getStreamingData();
-private:
+protected:
friend class eServiceFactoryDVB;
eServiceReference m_reference;
ePtr<eConnection> m_video_event_connection;
void video_event(struct iTSMPEGDecoder::videoEvent);
+
+ virtual ePtr<iTsSource> createTsSource(eServiceReferenceDVB &ref);
};
class eStaticServiceDVBBouquetInformation: public iStaticServiceInformation
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(" (");
}
eDebugNoNewLine(")");
}
- eDebugNoNewLine(", and %d audio stream(s)", program.audioStreams.size());
+ eDebugNoNewLine(", and %zd audio stream(s)", program.audioStreams.size());
if (!program.audioStreams.empty())
{
eDebugNoNewLine(" (");
--- /dev/null
+#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");
--- /dev/null
+#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
-#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>
#include <lib/gui/esubtitle.h>
#include <lib/service/servicemp3.h>
#include <lib/service/service.h>
+#include <lib/gdi/gpixmap.h>
#include <string>
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);
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);
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 )
{
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 )
{
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;
}
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;
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);
if (!(ret = seekToImpl(to)))
{
m_subtitle_pages.clear();
+ m_prev_decoder_time = -1;
+ m_decoder_time_valid_state = 0;
m_subs_to_pull = 0;
}
}
/* 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;
}
tag = "channel-mode";
break;
case sUser+12:
- return m_error_message;
+ return m_errorInfo.error_message;
default:
return "";
}
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))
{
} 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;
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");
}
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);
+ }
}
}
}
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;
}
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)
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);
}
}
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();
}
}
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;
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();
}
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;
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;
}
}
}
-#else
-#warning gstreamer not available, not building media player
-#endif
#ifndef __servicemp3_h
#define __servicemp3_h
-#ifdef HAVE_GSTREAMER
#include <lib/base/message.h>
#include <lib/service/iservice.h>
#include <lib/dvb/pmt.h>
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,
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;
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;
std::string m_useragent;
RESULT trickSeek(gdouble ratio);
};
-#endif
#endif
--- /dev/null
+libtool.m4
+ltoptions.m4
+ltsugar.m4
+ltversion.m4
+lt~obsolete.m4
--- /dev/null
+# ===========================================================================
+# 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])
+])
--- /dev/null
+# ===========================================================================
+# 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
--- /dev/null
+# ===========================================================================
+# 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!
+ #
+])
--- /dev/null
+# ===========================================================================
+# 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++"
+])
--- /dev/null
+# ===========================================================================
+# 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])
+])
--- /dev/null
+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
+])
-entries
+enigma2
+version.h
-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 \
$(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)
-#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;
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)
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)
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();
}
}
}
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);
}
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("-------");
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)
#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>
#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>
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);
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)));
#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>
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);
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);
#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;
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();
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);
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!");
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;
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();
{
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;
return eApp;
}
-void runMainloop()
-{
- eApp->runLoop();
-}
-
void quitMainloop(int exitCode)
{
FILE *f = fopen("/proc/stb/fp/was_timer_wakeup", "w");
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();
}
--- /dev/null
+#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;
+
--- /dev/null
+#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
--- /dev/null
+#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);
+}
--- /dev/null
+#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
profile("PYTHON_START")
from enigma import runMainloop, eDVBDB, eTimer, quitMainloop, \
- getDesktop, ePythonConfigQuery, eAVSwitch, eServiceEvent
+ getDesktop, ePythonConfigQuery, eAVSwitch, eServiceEvent, \
+ eEPGCache
from tools import *
profile("LANGUAGE")
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():
self.summary.show()
c.addSummary(self.summary)
+ c.saveKeyboardMode()
c.execBegin()
# when execBegin opened a new dialog, don't bother showing the old one.
self.in_exec = False
self.current_dialog.execEnd()
+ self.current_dialog.restoreKeyboardMode()
self.current_dialog.hide()
if last:
else:
session.open(screen, *args)
+ config.misc.epgcache_filename.addNotifier(setEPGCachePath)
+
runNextScreen(session, screensToRun)
profile("Init:VolumeControl")
--- /dev/null
+*.mo
+*.pot
+++ /dev/null
-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
-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
+++ /dev/null
-# 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 ""
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)
--- /dev/null
+enigma2.sh
-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
--- /dev/null
+#!/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