diff --git a/packages/mediacenter/xbmc-pvr-theme-Confluence/install b/packages/mediacenter/xbmc-pvr-theme-Confluence/install deleted file mode 100755 index 3aff360e25..0000000000 --- a/packages/mediacenter/xbmc-pvr-theme-Confluence/install +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh - -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -. config/options $1 - -mkdir -p $INSTALL/usr/share/xbmc/addons/skin.confluence - cp -R $PKG_BUILD/* $INSTALL/usr/share/xbmc/addons/skin.confluence diff --git a/packages/mediacenter/xbmc-pvr-theme-Confluence/meta b/packages/mediacenter/xbmc-pvr-theme-Confluence/meta deleted file mode 100644 index cbe14b0b6e..0000000000 --- a/packages/mediacenter/xbmc-pvr-theme-Confluence/meta +++ /dev/null @@ -1,37 +0,0 @@ -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -PKG_NAME="xbmc-pvr-theme-Confluence" -PKG_VERSION="522042f" -PKG_REV="1" -PKG_ARCH="any" -PKG_LICENSE="GPL" -PKG_SITE="http://www.xbmc.org" -#PKG_URL="$OPENELEC_SRC/$PKG_NAME-$PKG_VERSION.tar.bz2" -PKG_URL="http://gujs.openelec.tv/sources/$PKG_NAME-$PKG_VERSION.tar.xz" -PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="mediacenter" -PKG_SHORTDESC="xbmc-pvr-theme-Confluence: XBMC Mediacenter default theme" -PKG_LONGDESC="XBMC Media Center (which was formerly named Xbox Media Center) is a free and open source cross-platform media player and home entertainment system software with a 10-foot user interface designed for the living-room TV. Its graphical user interface allows the user to easily manage video, photos, podcasts, and music from a computer, optical disk, local network, and the internet using a remote control." -PKG_IS_ADDON="no" - -PKG_AUTORECONF="no" diff --git a/packages/mediacenter/xbmc-pvr/build b/packages/mediacenter/xbmc-pvr/build deleted file mode 100755 index bad981cda0..0000000000 --- a/packages/mediacenter/xbmc-pvr/build +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -. config/options $1 - -if [ "$XBMC_SCR_RSXS" = yes ]; then - XBMC_RSXS="--enable-rsxs" -else - XBMC_RSXS="--disable-rsxs" -fi - -if [ "$XBMC_VIS_PROJECTM" = yes ]; then - XBMC_PROJECTM="--enable-projectm" -else - XBMC_PROJECTM="--disable-projectm" -fi - -if [ "$XBMC_VIS_GOOM" = yes ]; then - XBMC_GOOM="--enable-goom" -else - XBMC_GOOM="--disable-goom" -fi - -if [ "$PULSEAUDIO_SUPPORT" = yes ]; then - XBMC_PULSEAUDIO="--enable-pulse" -else - XBMC_PULSEAUDIO="--disable-pulse" -fi - -if [ "$CEC_SUPPORT" = yes ]; then - XBMC_CEC="--enable-libcec --enable-external-libcec --enable-udev --disable-libusb" -else - XBMC_CEC="--disable-libcec --disable-udev --disable-libusb" -fi - -if [ "$NONFREE_SUPPORT" = yes ]; then - XBMC_NONFREE="--enable-non-free" -else - XBMC_NONFREE="--disable-non-free" -fi - -if [ "$AIRPLAY_SUPPORT" = yes ]; then - XBMC_AIRPLAY="--enable-airplay" -else - XBMC_AIRPLAY="--disable-airplay" -fi - -if [ "$AIRTUNES_SUPPORT" = yes ]; then - XBMC_AIRTUNES="--enable-airtunes" -else - XBMC_AIRTUNES="--disable-airtunes" -fi - -if [ "$DVDCSS_SUPPORT" = yes ]; then - XBMC_DVDCSS="--enable-dvdcss" -else - XBMC_DVDCSS="--disable-dvdcss" -fi - -if [ "$BLURAY_SUPPORT" = yes ]; then - XBMC_BLURAY="--enable-libbluray" -else - XBMC_BLURAY="--disable-libbluray" -fi - -if [ "$AVAHI_DAEMON" = yes ]; then - XBMC_AVAHI="--enable-avahi" -else - XBMC_AVAHI="--disable-avahi" -fi - -if [ "$NFS_SUPPORT" = yes ]; then - XBMC_NFS="--enable-nfs" -else - XBMC_NFS="--disable-nfs" -fi - -if [ "$AFP_SUPPORT" = yes ]; then - XBMC_AFP="--enable-afpclient" -else - XBMC_AFP="--disable-afpclient" -fi - -if [ "$SAMBA_CLIENT" = yes ]; then - XBMC_SAMBA="--enable-samba" -else - XBMC_SAMBA="--disable-samba" -fi - -if [ "$WEBSERVER" = yes ]; then - XBMC_WEBSERVER="--enable-webserver" -else - XBMC_WEBSERVER="--disable-webserver" -fi - -if [ "$VDPAU" = yes ]; then - XBMC_VDPAU="--enable-vdpau" -else - XBMC_VDPAU="--disable-vdpau" -fi - -if [ "$VAAPI" = yes ]; then - XBMC_VAAPI="--enable-vaapi" -else - XBMC_VAAPI="--disable-vaapi" -fi - -if [ "$CRYSTALHD" = yes ]; then - XBMC_CRYSTALHD="--enable-crystalhd" -else - XBMC_CRYSTALHD="--disable-crystalhd" -fi - -# xbmc (ffmpeg) fails to build with LTO optimization - strip_lto - strip_gold - strip_linker_plugin - -# dont use some optimizations because of problems -# this fixes problems with faac implementation of ffmpeg - LDFLAGS=`echo $LDFLAGS | sed -e "s|-Wl,--as-needed||"` - - export PYTHON_VERSION="2.6" - export PYTHON_CPPFLAGS="-I$SYSROOT_PREFIX/usr/include/python$PYTHON_VERSION" - export PYTHON_LDFLAGS="-L$SYSROOT_PREFIX/usr/lib/python$PYTHON_VERSION -lpython$PYTHON_VERSION" - export PYTHON_SITE_PKG="$SYSROOT_PREFIX/usr/lib/python$PYTHON_VERSION/site-packages" - export ac_python_version="$PYTHON_VERSION" - -# this fixes the "stretching picture bug" - CFLAGS=`echo $CFLAGS | sed -e "s|-ftree-loop-distribution||"` - CFLAGS=`echo $CFLAGS | sed -e "s|-floop-interchange||"` - CFLAGS=`echo $CFLAGS | sed -e "s|-floop-strip-mine||"` - CFLAGS=`echo $CFLAGS | sed -e "s|-floop-block||"` - CFLAGS=`echo $CFLAGS | sed -e "s|-fgraphite-identity||"` - - CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-ftree-loop-distribution||"` - CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-floop-interchange||"` - CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-floop-strip-mine||"` - CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-floop-block||"` - CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-fgraphite-identity||"` - -# setup skin dir from default skin - SKIN_DIR="skin.`tolower $SKIN_DEFAULT`" - -cd $PKG_BUILD - -# adding fake Makefile for stripped skin - mkdir -p addons/skin.confluence/media - touch addons/skin.confluence/media/Makefile.in - mkdir -p addons/skin.touched/media - touch addons/skin.touched/media/Makefile.in - -# autoreconf - do_autoreconf - do_autoreconf lib/libid3tag/libid3tag - do_autoreconf xbmc/screensavers/rsxs-0.9 - do_autoreconf xbmc/visualizations/Goom/goom2k4-0 - do_autoreconf lib/libapetag - do_autoreconf lib/cpluff - # order matters with libdvd and friends - [ -d lib/libdvd/libdvdcss ] && do_autoreconf lib/libdvd/libdvdcss - do_autoreconf lib/libdvd/libdvdread - do_autoreconf lib/libdvd/libdvdnav - -# Clean the generated files - find . -depth -type d -name "autom4te.cache" -exec rm -rf {} \; - -./configure --host=$TARGET_NAME \ - --build=$HOST_NAME \ - --with-arch=$TARGET_ARCH \ - --with-cpu=$TARGET_CPU \ - --prefix=/usr \ - --exec-prefix=/usr \ - --sysconfdir=/etc \ - --datadir=/usr/share \ - GIT_REV=`cat git.version` \ - --disable-debug \ - --disable-optimizations \ - --enable-gl \ - --disable-gles \ - $XBMC_VDPAU \ - $XBMC_VAAPI \ - $XBMC_CRYSTALHD \ - --disable-vdadecoder \ - --disable-vtbdecoder \ - --disable-openmax \ - --disable-tegra \ - --disable-profiling \ - --enable-joystick \ - $XBMC_CEC \ - $XBMC_GOOM \ - $XBMC_RSXS \ - $XBMC_PROJECTM \ - --enable-x11 \ - --enable-xrandr \ - --disable-ccache \ - $XBMC_PULSEAUDIO \ - --enable-rtmp \ - $XBMC_SAMBA \ - $XBMC_NFS \ - $XBMC_AFP \ - --enable-ffmpeg-libvorbis \ - --enable-lame \ - $XBMC_DVDCSS \ - --disable-mid \ - --disable-hal \ - $XBMC_AVAHI \ - $XBMC_AIRPLAY \ - $XBMC_AIRTUNES \ - $XBMC_NONFREE \ - --disable-asap-codec \ - $XBMC_WEBSERVER \ - --enable-optical-drive \ - $XBMC_BLURAY \ - --enable-texturepacker \ - --disable-external-libraries \ - --disable-external-ffmpeg \ - -# setup default skin inside the sources - sed -i -e "s|skin.confluence|$SKIN_DIR|g" xbmc/settings/Settings.h - -make externals -make xbmc.bin -make xbmc-xrandr - -if [ "$WIIMOTE_SUPPORT" = yes ]; then - (cd tools/EventClients/Clients/WiiRemote; - $CXX $CFLAGS -lwiiuse WiiUse_WiiRemote.cpp -o WiiUse_WiiRemote; - ) -fi diff --git a/packages/mediacenter/xbmc-pvr/config/advancedsettings.xml b/packages/mediacenter/xbmc-pvr/config/advancedsettings.xml deleted file mode 100644 index c6f22f0a3a..0000000000 --- a/packages/mediacenter/xbmc-pvr/config/advancedsettings.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - false - false - cputemp - gputemp - - 30 - - diff --git a/packages/mediacenter/xbmc-pvr/config/os.openelec.tv/addon.xml b/packages/mediacenter/xbmc-pvr/config/os.openelec.tv/addon.xml deleted file mode 100644 index f786fbfc1d..0000000000 --- a/packages/mediacenter/xbmc-pvr/config/os.openelec.tv/addon.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/packages/mediacenter/xbmc-pvr/config/repository.openelec.tv/addon.xml b/packages/mediacenter/xbmc-pvr/config/repository.openelec.tv/addon.xml deleted file mode 100644 index 7ebb2ad74b..0000000000 --- a/packages/mediacenter/xbmc-pvr/config/repository.openelec.tv/addon.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - @ADDON_URL@/addons.xml - @ADDON_URL@/addons.xml.md5 - @ADDON_URL@ - - - Install Add-ons, Plugins, Games and Programs from OpenELEC.tv - Download and install Add-ons, Plugins, Games and Programs from the Official OpenELEC.tv addon repository.[CR] By using the official Repository you will be able to take advantage of our extensive file mirror service to help get you faster downloads from a region close to you.[CR] All addons on this repository have under gone basic testing, if you find a broken or not working addon please report it to OpenELEC.tv so we can take any action needed. - all - - diff --git a/packages/mediacenter/xbmc-pvr/fonts/DejaVuSans.ttf b/packages/mediacenter/xbmc-pvr/fonts/DejaVuSans.ttf deleted file mode 100644 index 84ca1d7503..0000000000 Binary files a/packages/mediacenter/xbmc-pvr/fonts/DejaVuSans.ttf and /dev/null differ diff --git a/packages/mediacenter/xbmc-pvr/fonts/Trebuchet MS Bold.ttf b/packages/mediacenter/xbmc-pvr/fonts/Trebuchet MS Bold.ttf deleted file mode 100644 index 867f56d776..0000000000 Binary files a/packages/mediacenter/xbmc-pvr/fonts/Trebuchet MS Bold.ttf and /dev/null differ diff --git a/packages/mediacenter/xbmc-pvr/fonts/YanoneKaffeesatz-Bold.ttf b/packages/mediacenter/xbmc-pvr/fonts/YanoneKaffeesatz-Bold.ttf deleted file mode 100644 index e9964b0809..0000000000 Binary files a/packages/mediacenter/xbmc-pvr/fonts/YanoneKaffeesatz-Bold.ttf and /dev/null differ diff --git a/packages/mediacenter/xbmc-pvr/init.d/92_setup-xbmc b/packages/mediacenter/xbmc-pvr/init.d/92_setup-xbmc deleted file mode 100644 index dc1ce42edb..0000000000 --- a/packages/mediacenter/xbmc-pvr/init.d/92_setup-xbmc +++ /dev/null @@ -1,118 +0,0 @@ -################################################################################ -# Copyright (C) 2009-2010 OpenELEC.tv -# http://www.openelec.tv -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -# setup XBMC -# -# runlevels: openelec - -progress "setup XBMC" - -# -# clean temp dir -# - rm -rf $HOME/.xbmc/temp/* - -# -# add some default settings -# - mkdir -p $HOME/.xbmc/userdata - -# -# setup directories for XBMC sources -# - - [ ! -d "$HOME/music" ] && mkdir -p $HOME/music - [ ! -d "$HOME/pictures" ] && mkdir -p $HOME/pictures - [ ! -d "$HOME/tvshows" ] && mkdir -p $HOME/tvshows - [ ! -d "$HOME/videos" ] && mkdir -p $HOME/videos - - mkdir -p $HOME/.xbmc/userdata - - if [ ! -f $HOME/.xbmc/userdata/sources.xml ] ; then - cat > $HOME/.xbmc/userdata/sources.xml << EOF - - - - - - Music - $HOME/music/ - - - - - - Pictures - $HOME/pictures/ - - - -EOF - fi - -# -# common setup guisettings -# - - mkdir -p $HOME/.xbmc/userdata - - [ ! -d "$HOME/screenshots" ] && mkdir -p $HOME/screenshots - - if [ ! -f $HOME/.xbmc/userdata/guisettings.xml ] ; then - echo "" > $HOME/.xbmc/userdata/guisettings.xml - - cat >> $HOME/.xbmc/userdata/guisettings.xml << EOF - - $HOME/screenshots/ - -EOF - -# -# include project specific options -# - - if [ -f /usr/share/xbmc/config/guisettings.xml ]; then - cat /usr/share/xbmc/config/guisettings.xml >> $HOME/.xbmc/userdata/guisettings.xml - fi - -# -# common setup for amd and nvidia graphic -# - - # Always sync to vblank - if [ "$GPUTYPE" = "NVIDIA" -o "$GPUTYPE" = "AMD" ] ; then - cat >> $HOME/.xbmc/userdata/guisettings.xml << EOF - - 2 - -EOF - fi - echo "" >> $HOME/.xbmc/userdata/guisettings.xml - fi diff --git a/packages/mediacenter/xbmc-pvr/init.d/93_xbmc b/packages/mediacenter/xbmc-pvr/init.d/93_xbmc deleted file mode 100644 index 66dcf2910d..0000000000 --- a/packages/mediacenter/xbmc-pvr/init.d/93_xbmc +++ /dev/null @@ -1,87 +0,0 @@ -################################################################################ -# Copyright (C) 2009-2010 OpenELEC.tv -# http://www.openelec.tv -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -# starting XBMC -# -# runlevels: openelec - -LIRCDEV="/var/run/lirc/lircd" -[ -e /var/run/lirc/lircd.irtrans ] && LIRCDEV="/var/run/lirc/lircd.irtrans" -XBMC_ARGS="--standalone -fs --lircdev $LIRCDEV" - -progress "starting XBMC" - -# hack for Boxee Remote -if $(cat /proc/bus/input/devices | grep Vendor=0471 | grep -q Product=20d9);then - export SDL_MOUSE_RELATIVE=0 -fi - -# hack: make addon-bins executable - chmod +x /storage/.xbmc/addons/*/bin/* > /dev/null 2>&1 - -# starting autostart script (will be removed later again, dont use it!!!) - AUTOSTART="/storage/.config/autostart.sh" - if [ -f $AUTOSTART ]; then - echo "!!! AUTOSTART script detected !!!" >> /var/log/messages - cat "$AUTOSTART" >> /var/log/messages - echo "!!! -End of autostart script- !!!" >> /var/log/messages - - sh $AUTOSTART - fi - -# starting autoupdate - [ -f /usr/bin/autoupdate ] && /usr/bin/autoupdate & - -# waiting for Xorg to start - wait_for_xorg - -# set cpu's to 'on demand' - ( usleep 15000000 - progress "set cpu's to 'on demand'" - cpupower frequency-set -g ondemand > /dev/null 2>&1 - )& - -# starting XBMC - while true; do - - DISPLAY=:0.0 /usr/lib/xbmc/xbmc.bin $XBMC_ARGS > /dev/null 2>&1 - RET=$? - - case "$RET" in - 0) - poweroff -f - ;; - 64) - poweroff -f - ;; - 66) - reboot - ;; - 255) - echo "Abnormal Exit. Exited with code $RET" - echo "is Xorg running? check /var/log/Xorg.log" - ;; - *) - echo "Abnormal Exit. Exited with code $RET" - ;; - esac - - usleep 250000 - done diff --git a/packages/mediacenter/xbmc-pvr/install b/packages/mediacenter/xbmc-pvr/install deleted file mode 100755 index a5a2669182..0000000000 --- a/packages/mediacenter/xbmc-pvr/install +++ /dev/null @@ -1,119 +0,0 @@ -#!/bin/sh - -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -. config/options $1 - -PYTHON_LIBDIR="`ls -d $INSTALL/usr/lib/python*`" - -mkdir -p $INSTALL/usr/bin - cp $PKG_DIR/scripts/cputemp $INSTALL/usr/bin - cp $PKG_DIR/scripts/gputemp $INSTALL/usr/bin - cp $PKG_BUILD/tools/EventClients/Clients/XBMC\ Send/xbmc-send.py $INSTALL/usr/bin/xbmc-send - -mkdir -p $INSTALL/usr/lib/xbmc - cp $PKG_BUILD/xbmc.bin $INSTALL/usr/lib/xbmc - cp $PKG_BUILD/xbmc-xrandr $INSTALL/usr/lib/xbmc - -cd $PKG_BUILD - find system addons \ - -regextype posix-extended -type f \ - -not -iregex ".*svn.*|.*win32(dx)?\.vis|.*osx\.vis" \ - -iregex ".*-linux.*|.*\.vis|.*\.xbs" \ - -exec install -D "{}" $ROOT/$INSTALL/usr/lib/xbmc/"{}" ";" - - find addons language media sounds userdata system \ - -regextype posix-extended -type f \ - -not -iregex ".*-linux.*|.*\.vis|.*\.xbs|.*svn.*|.*\.orig|.*\.so|.*\.dll|.*\.pyd|.*python/.*\.zlib" \ - -exec install -D -m 0644 "{}" $ROOT/$INSTALL/usr/share/xbmc/"{}" ";" -cd - - -if [ ! "$XBMC_SCR_RSXS" = yes ]; then - rm -rf $ROOT/$INSTALL/usr/share/xbmc/addons/screensaver.rsxs.* -fi - -if [ ! "$XBMC_VIS_PROJECTM" = yes ]; then - rm -rf $ROOT/$INSTALL/usr/share/xbmc/addons/visualization.projectm -fi - -rm -rf $ROOT/$INSTALL/usr/share/xbmc/addons/visualization.dxspectrum -rm -rf $ROOT/$INSTALL/usr/share/xbmc/addons/visualization.itunes -rm -rf $ROOT/$INSTALL/usr/share/xbmc/addons/visualization.milkdrop - -# overriding Splash image -mkdir -p $INSTALL/usr/share/xbmc/media - rm -rf $INSTALL/usr/share/xbmc/media/Splash.png -# if [ -f $PROJECT_DIR/$PROJECT/splash/splash.png ]; then -# cp $PROJECT_DIR/$PROJECT/splash/splash.png $INSTALL/usr/share/xbmc/media/Splash.png -# else -# cp $PKG_DIR/splash/splash.png $INSTALL/usr/share/xbmc/media/Splash.png -# fi - -# cleanup and python addon fixes - mkdir -p $INSTALL/usr/share/xbmc/addons/script.module.pil/lib - ln -s `ls -d $INSTALL/usr/lib/python*/site-packages | sed -e "s,$INSTALL,,"`/PIL \ - $INSTALL/usr/share/xbmc/addons/script.module.pil/lib/PIL - rm -rf $INSTALL/usr/share/xbmc/addons/script.module.pysqlite - -mkdir -p $INSTALL/usr/share/xbmc/system/ - cp $PKG_DIR/config/advancedsettings.xml $INSTALL/usr/share/xbmc/system/ - -mkdir -p $INSTALL/usr/share/xbmc/addons - cp -R $PKG_DIR/config/os.openelec.tv $INSTALL/usr/share/xbmc/addons - $SED "s|@ADDON_OS_VERSION@|$OS_VERSION|g" -i $INSTALL/usr/share/xbmc/addons/os.openelec.tv/addon.xml - cp -R $PKG_DIR/config/repository.openelec.tv $INSTALL/usr/share/xbmc/addons - $SED "s|@ADDON_URL@|$ADDON_URL|g" -i $INSTALL/usr/share/xbmc/addons/repository.openelec.tv/addon.xml - -mkdir -p $PYTHON_LIBDIR/site-packages/xbmc - cp -R $PKG_BUILD/tools/EventClients/lib/python/* $PYTHON_LIBDIR/site-packages/xbmc - -# install powermanagement hooks - mkdir -p $INSTALL/etc/pm/sleep.d - cp $PKG_DIR/sleep.d/* $INSTALL/etc/pm/sleep.d - -# install project specific configs - if [ -f $PROJECT_DIR/$PROJECT/xbmc/*.xml ]; then - mkdir -p $INSTALL/usr/share/xbmc/config - cp -R $PROJECT_DIR/$PROJECT/xbmc/* $INSTALL/usr/share/xbmc/config - fi - -if [ "$XBMC_EXTRA_FONTS" = yes ]; then - mkdir -p $INSTALL/usr/share/xbmc/media/Fonts - cp $PKG_DIR/fonts/*.ttf $INSTALL/usr/share/xbmc/media/Fonts -fi - -if [ "$WIIMOTE_SUPPORT" = yes ]; then - mkdir -p $INSTALL/usr/bin - cp $PKG_BUILD/tools/EventClients/Clients/WiiRemote/WiiUse_WiiRemote $INSTALL/usr/bin/xbmc-wiiremote - mkdir -p $INSTALL/lib/udev - cp $PKG_DIR/scripts/wiiremote_helper $INSTALL/lib/udev -fi - -if [ "$PS3REMOTE_SUPPORT" = yes ]; then - mkdir -p $INSTALL/usr/bin - cp $PKG_BUILD/tools/EventClients/Clients/PS3\ BD\ Remote/ps3_remote.py $INSTALL/usr/bin/xbmc-ps3remote - mkdir -p $INSTALL/usr/share/pixmaps/xbmc - cp $PKG_BUILD/tools/EventClients/icons/bluetooth.png $INSTALL/usr/share/pixmaps/xbmc - mkdir -p $PYTHON_LIBDIR/site-packages/xbmc - echo 'ICON_PATH="/usr/share/pixmaps/xbmc/"' > $PYTHON_LIBDIR/site-packages/xbmc/defs.py - mkdir -p $INSTALL/lib/udev - cp $PKG_DIR/scripts/ps3remote_helper $INSTALL/lib/udev -fi diff --git a/packages/mediacenter/xbmc-pvr/meta b/packages/mediacenter/xbmc-pvr/meta deleted file mode 100644 index c8731310e1..0000000000 --- a/packages/mediacenter/xbmc-pvr/meta +++ /dev/null @@ -1,133 +0,0 @@ -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -PKG_NAME="xbmc-pvr" -PKG_VERSION="522042f" -PKG_REV="1" -PKG_ARCH="any" -PKG_LICENSE="GPL" -PKG_SITE="http://www.xbmc.org" -PKG_URL="http://gujs.openelec.tv/sources/$PKG_NAME-$PKG_VERSION.tar.xz" -#PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz" -PKG_DEPENDS="boost Python zlib bzip2 lzo pcre alsa-lib libass enca curl libssh rtmpdump Mesa glew fontconfig fribidi $LIBJPEG libpng tiff freetype jasper libmad libsamplerate libogg libvorbis libcdio libmodplug faad2 flac lame libmpeg2 SDL SDL_mixer SDL_image yajl sqlite mysql alsa bc xbmc-addon-settings" -PKG_BUILD_DEPENDS="toolchain boost Python zlib bzip2 lzo pcre alsa-lib libass enca curl libssh rtmpdump Mesa glew fontconfig fribidi $LIBJPEG libpng tiff freetype jasper libmad libsamplerate libogg libvorbis libcdio libmodplug faad2 flac lame libmpeg2 SDL SDL_mixer SDL_image yajl sqlite mysql" -PKG_PRIORITY="optional" -PKG_SECTION="mediacenter" -PKG_SHORTDESC="xbmc: XBMC Mediacenter" -PKG_LONGDESC="XBMC Media Center (which was formerly named Xbox Media Center) is a free and open source cross-platform media player and home entertainment system software with a 10-foot user interface designed for the living-room TV. Its graphical user interface allows the user to easily manage video, photos, podcasts, and music from a computer, optical disk, local network, and the internet using a remote control." -PKG_IS_ADDON="no" - -PKG_AUTORECONF="no" - -# for libX11 support - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS libX11 libXext" - PKG_DEPENDS="$PKG_DEPENDS libX11 libXext" - -# for libXrandr support - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS libXrandr" - PKG_DEPENDS="$PKG_DEPENDS libXrandr" - -# for dbus support - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS dbus" - PKG_DEPENDS="$PKG_DEPENDS dbus" - -if [ "$CEC_SUPPORT" = yes ]; then - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS libcec" - PKG_DEPENDS="$PKG_DEPENDS libcec" -fi - -if [ "$XBMC_SCR_RSXS" = yes ]; then - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS libXt libXmu" - PKG_DEPENDS="$PKG_DEPENDS libXt libXmu" -fi - -if [ "$FAAC_SUPPORT" = yes ]; then - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS faac" - PKG_DEPENDS="$PKG_DEPENDS faac" -fi - -if [ "$BLURAY_SUPPORT" = yes ]; then - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS libbluray" - PKG_DEPENDS="$PKG_DEPENDS libbluray" -fi - -if [ "$AVAHI_DAEMON" = yes ]; then - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS avahi" - PKG_DEPENDS="$PKG_DEPENDS avahi" -fi - -if [ "$AIRPLAY_SUPPORT" = yes ]; then - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS libplist" - PKG_DEPENDS="$PKG_DEPENDS libplist" -fi - -if [ "$AIRTUNES_SUPPORT" = yes ]; then - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS libshairport" - PKG_DEPENDS="$PKG_DEPENDS libshairport" -fi - -if [ "$NFS_SUPPORT" = yes ]; then - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS libnfs" - PKG_DEPENDS="$PKG_DEPENDS libnfs" -fi - -if [ "$AFP_SUPPORT" = yes ]; then - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS afpfs-ng" - PKG_DEPENDS="$PKG_DEPENDS afpfs-ng" -fi - -if [ "$SAMBA_CLIENT" = yes ]; then - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS samba" - PKG_DEPENDS="$PKG_DEPENDS samba" -fi - -if [ "$WEBSERVER" = yes ]; then - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS libmicrohttpd" - PKG_DEPENDS="$PKG_DEPENDS libmicrohttpd" -fi - -if [ "$VDPAU" = yes ]; then - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS libvdpau" - PKG_DEPENDS="$PKG_DEPENDS libvdpau" -fi - -if [ "$VAAPI" = yes ]; then - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS libva" - PKG_DEPENDS="$PKG_DEPENDS libva" -fi - -if [ "$CRYSTALHD" = yes ]; then - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS crystalhd" - PKG_DEPENDS="$PKG_DEPENDS crystalhd" -fi - -if [ "$WIIMOTE_SUPPORT" = yes ]; then - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS wiiuse" - PKG_DEPENDS="$PKG_DEPENDS wiiuse" -fi - -if [ "$PS3REMOTE_SUPPORT" = yes ]; then - PKG_DEPENDS="$PKG_DEPENDS PyBluez" -fi - -# some python stuff needed for various addons - PKG_DEPENDS="$PKG_DEPENDS Imaging" - PKG_DEPENDS="$PKG_DEPENDS simplejson" - diff --git a/packages/mediacenter/xbmc-pvr/patches/rename.sh b/packages/mediacenter/xbmc-pvr/patches/rename.sh deleted file mode 100755 index 64715435df..0000000000 --- a/packages/mediacenter/xbmc-pvr/patches/rename.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh - -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - - -for i in `ls xbmc-*.patch`; do - mv $i `echo $i | sed "s,$1,$2,g"` -done diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-201-let_select_XBMCProjectM-0.1.patch b/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-201-let_select_XBMCProjectM-0.1.patch deleted file mode 100644 index 0697a233fc..0000000000 --- a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-201-let_select_XBMCProjectM-0.1.patch +++ /dev/null @@ -1,87 +0,0 @@ -diff -Naur xbmc-9389dc8/configure.in xbmc-9389dc8.patch/configure.in ---- xbmc-9389dc8/configure.in 2011-09-01 23:34:05.488142309 +0200 -+++ xbmc-9389dc8.patch/configure.in 2011-09-01 23:51:26.371021628 +0200 -@@ -68,6 +68,8 @@ - xrandr_disabled="== XRandR support disabled. SDL will be used for resolution support. ==" - goom_enabled="== GOOM enabled. ==" - goom_disabled="== GOOM disabled. ==" -+xbmcprojectm_enabled="== XBMCProjectM enabled. ==" -+xbmxprojectm_disabled="== XBMCProjectM disabled. ==" - pulse_not_found="== Could not find libpulse. PulseAudio support disabled. ==" - pulse_disabled="== PulseAudio support manually disabled. ==" - dvdcss_enabled="== DVDCSS support enabled. ==" -@@ -219,6 +221,12 @@ - [use_goom=$enableval], - [use_goom=no]) - -+AC_ARG_ENABLE([xbmcprojectm], -+ [AS_HELP_STRING([--enable-xbmcprojectm], -+ [enable XBMCProjectM visualisation (default is yes)])], -+ [use_xbmcprojectm=$enableval], -+ [use_xbmcprojectm=yes]) -+ - AC_ARG_ENABLE([ccache], - [AS_HELP_STRING([--enable-ccache], - [enable building with ccache feature (default is auto)])], -@@ -850,6 +858,15 @@ - fi - fi - -+# XBMCPROJECTM -+if test "$use_xbmcprojectm" = "no" || test "$use_gl" = "no"; then -+ AC_MSG_NOTICE($xbmcprojectm_disabled) -+ DISABLE_XBMCPROJECTM=1 -+else -+ AC_MSG_NOTICE($xbmcprojectm_enabled) -+ DISABLE_XBMCPROJECTM=0 -+fi -+ - # libRTMP - if test "$use_librtmp" != "no"; then - AC_CHECK_HEADERS([librtmp/log.h librtmp/amf.h librtmp/rtmp.h],, -@@ -1324,6 +1341,12 @@ - final_message="$final_message\n GOOM:\t\tNo" - fi - -+if test "$use_xbmcprojectm" = "yes"; then -+ final_message="$final_message\n XBMCProjectM:\tYes" -+else -+ final_message="$final_message\n XBMCProjectM:\tNo" -+fi -+ - if test "$use_libbluray" = "yes"; then - final_message="$final_message\n Bluray:\tYes" - else -@@ -1553,6 +1576,7 @@ - AC_SUBST(SDL_DEFINES) - AC_SUBST(BUILD_DVDCSS) - AC_SUBST(DISABLE_GOOM) -+AC_SUBST(DISABLE_XBMCPROJECTM) - AC_SUBST(USE_EXTERNAL_FFMPEG) - AC_SUBST(PYTHON_VERSION) - AC_SUBST(OUTPUT_FILES) -@@ -1797,7 +1821,7 @@ - fi - set +x - fi --], [0]) -+], [$DISABLE_XBMCPROJECTM]) - - XB_CONFIG_MODULE([xbmc/visualizations/Goom/goom2k4-0],[ - ./configure \ -diff -Naur xbmc-9389dc8/Makefile.in xbmc-9389dc8.patch/Makefile.in ---- xbmc-9389dc8/Makefile.in 2011-09-01 23:34:05.581143554 +0200 -+++ xbmc-9389dc8.patch/Makefile.in 2011-09-01 23:52:59.832272157 +0200 -@@ -144,8 +144,10 @@ - ifeq (@USE_OPENGL@,1) - VIS_DIRS+=\ - xbmc/visualizations/OpenGLSpectrum \ -- xbmc/visualizations/WaveForm \ -- xbmc/visualizations/XBMCProjectM -+ xbmc/visualizations/WaveForm -+ifneq (@DISABLE_XBMCPROJECTM@,1) -+ VIS_DIRS+=xbmc/visualizations/XBMCProjectM -+endif - endif - - ifeq (($(findstring osx,@ARCH@), osx),(@USE_OPENGL@,1)) diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-202-let_select_RSXS-0.1.patch b/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-202-let_select_RSXS-0.1.patch deleted file mode 100644 index cb6b5fe46e..0000000000 --- a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-202-let_select_RSXS-0.1.patch +++ /dev/null @@ -1,85 +0,0 @@ -diff -Naur xbmc-30a9070/configure.in xbmc-30a9070.patch/configure.in ---- xbmc-30a9070/configure.in 2011-07-28 09:05:20.854037605 +0200 -+++ xbmc-30a9070.patch/configure.in 2011-07-28 09:05:32.890194108 +0200 -@@ -68,6 +68,8 @@ - goom_disabled="== GOOM disabled. ==" - xbmcprojectm_enabled="== XBMCProjectM enabled. ==" - xbmxprojectm_disabled="== XBMCProjectM disabled. ==" -+rsxs_enabled="== RSXS enabled. ==" -+rsxs_disabled="== RSXS disabled. ==" - pulse_not_found="== Could not find libpulse. PulseAudio support disabled. ==" - pulse_disabled="== PulseAudio support manually disabled. ==" - dvdcss_enabled="== DVDCSS support enabled. ==" -@@ -215,6 +217,12 @@ - [use_xbmcprojectm=$enableval], - [use_xbmcprojectm=yes]) - -+AC_ARG_ENABLE([rsxs], -+ [AS_HELP_STRING([--enable-rsxs], -+ [enable RSXS Screensaver (default is yes)])], -+ [use_rsxs=$enableval], -+ [use_rsxs=yes]) -+ - AC_ARG_ENABLE([ccache], - [AS_HELP_STRING([--enable-ccache], - [enable building with ccache feature (default is auto)])], -@@ -821,6 +829,15 @@ - DISABLE_XBMCPROJECTM=1 - fi - -+# RSXS -+if test "$use_rsxs" = "yes" && test "use_gl" == "yes"; then -+ AC_MSG_NOTICE($rsxs_enabled) -+ DISABLE_RSXS=0 -+else -+ AC_MSG_NOTICE($rsxs_disabled) -+ DISABLE_RSXS=1 -+fi -+ - # libRTMP - if test "$use_librtmp" != "no"; then - AC_CHECK_HEADERS([librtmp/log.h librtmp/amf.h librtmp/rtmp.h],, -@@ -1281,6 +1298,12 @@ - final_message="$final_message\n XBMCProjectM:\tNo" - fi - -+if test "$use_rsxs" = "yes"; then -+ final_message="$final_message\n RSXS:\t\tYes" -+else -+ final_message="$final_message\n RSXS:\t\tNo" -+fi -+ - if test "$use_libbluray" = "yes"; then - final_message="$final_message\n Bluray:\tYes" - else -@@ -1510,6 +1533,7 @@ - AC_SUBST(BUILD_DVDCSS) - AC_SUBST(DISABLE_GOOM) - AC_SUBST(DISABLE_XBMCPROJECTM) -+AC_SUBST(DISABLE_RSXS) - AC_SUBST(USE_EXTERNAL_FFMPEG) - AC_SUBST(PYTHON_VERSION) - AC_SUBST(OUTPUT_FILES) -@@ -1791,7 +1815,7 @@ - --disable-lattice \ - --disable-skyrocket - fi --], [0]) -+], [$DISABLE_RSXS]) - - XB_CONFIG_MODULE([lib/libapetag], [ - ./configure \ -diff -Naur xbmc-30a9070/Makefile.in xbmc-30a9070.patch/Makefile.in ---- xbmc-30a9070/Makefile.in 2011-07-28 09:05:20.856037631 +0200 -+++ xbmc-30a9070.patch/Makefile.in 2011-07-28 09:10:44.898247687 +0200 -@@ -136,8 +136,10 @@ - - SS_DIRS= - ifeq (@USE_OPENGL@,1) -+ifneq (@DISABLE_RSXS@,1) - SS_DIRS+= xbmc/screensavers/rsxs-0.9/xbmc - endif -+endif - - VIS_DIRS= - ifeq (@USE_OPENGL@,1) diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-901-advancedsettings_alwaysextractflags.patch b/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-901-advancedsettings_alwaysextractflags.patch deleted file mode 100644 index 336d778455..0000000000 --- a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-901-advancedsettings_alwaysextractflags.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff -Naur xbmc-a8d22f6/xbmc/settings/GUISettings.cpp xbmc-a8d22f6.patch/xbmc/settings/GUISettings.cpp ---- xbmc-a8d22f6/xbmc/settings/GUISettings.cpp 2011-08-02 15:01:17.000000000 +0200 -+++ xbmc-a8d22f6.patch/xbmc/settings/GUISettings.cpp 2011-08-02 15:25:47.205925050 +0200 -@@ -654,6 +654,7 @@ - AddInt(vid, "myvideos.selectaction", 22079, SELECT_ACTION_PLAY_OR_RESUME, SELECT_ACTION_CHOOSE, 1, SELECT_ACTION_INFO, SPIN_CONTROL_TEXT); - AddBool(NULL, "myvideos.treatstackasfile", 20051, true); - AddBool(vid, "myvideos.extractflags",20433, true); -+ AddBool(vid, "myvideos.alwaysextractflags",20433, false); - AddBool(vid, "myvideos.filemetadata", 20419, true); - AddBool(NULL, "myvideos.extractthumb",20433, true); - -diff -Naur xbmc-a8d22f6/xbmc/ThumbLoader.cpp xbmc-a8d22f6.patch/xbmc/ThumbLoader.cpp ---- xbmc-a8d22f6/xbmc/ThumbLoader.cpp 2011-08-02 15:01:19.000000000 +0200 -+++ xbmc-a8d22f6.patch/xbmc/ThumbLoader.cpp 2011-08-02 15:24:54.831265675 +0200 -@@ -146,7 +146,7 @@ - m_item.SetThumbnailImage(m_target); - } - } -- else if (m_item.HasVideoInfoTag() && !m_item.GetVideoInfoTag()->HasStreamDetails()) -+ else if (m_item.HasVideoInfoTag() && (!m_item.GetVideoInfoTag()->HasStreamDetails() || g_guiSettings.GetBool("myvideos.alwaysextractflags"))) - { - CLog::Log(LOGDEBUG,"%s - trying to extract filestream details from video file %s", __FUNCTION__, m_path.c_str()); - result = CDVDFileInfo::GetFileStreamDetails(&m_item); diff --git a/packages/mediacenter/xbmc-pvr/profile.d/xbmc.conf b/packages/mediacenter/xbmc-pvr/profile.d/xbmc.conf deleted file mode 100644 index 0495a2733e..0000000000 --- a/packages/mediacenter/xbmc-pvr/profile.d/xbmc.conf +++ /dev/null @@ -1,37 +0,0 @@ -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -#      Copyright (C) 2010-2011 Roman Weber (roman@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ -# Mediacenter environment variables. -# -# This file contains non-OpenELEC evironment variables as well as OpenELEC -# evironment variables that are not user defined. -################################################################################ - -XBMC_HOME="/usr/share/xbmc" - -export XBMC_HOME - -GPUDEVICE=$(lspci -n | grep 0300) -GPUTYPE="OTHER" -[ "$(echo $GPUDEVICE | grep 8086)" ] && GPUTYPE="INTEL" # 8086 == INTEL -[ "$(echo $GPUDEVICE | grep 10de)" ] && GPUTYPE="NVIDIA" # 10de == NVIDIA -[ "$(echo $GPUDEVICE | grep 1002)" ] && GPUTYPE="AMD" # 1002 == AMD - -export GPUTYPE \ No newline at end of file diff --git a/packages/mediacenter/xbmc-pvr/scripts/cputemp b/packages/mediacenter/xbmc-pvr/scripts/cputemp deleted file mode 100755 index 3c35564ed1..0000000000 --- a/packages/mediacenter/xbmc-pvr/scripts/cputemp +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/sh - -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -# inspired by -# https://github.com/xtranophilist/gnome-shell-extension-cpu-temperature/blob/master/extension.js - -TEMP=0 - -if [ -f /sys/devices/platform/coretemp.0/temp1_input ]; then - # used with coretemp - TEMP=`cat /sys/devices/platform/coretemp.0/temp1_input` -elif [ -f /sys/devices/platform/coretemp.0/temp2_input ]; then - # used with coretemp - TEMP=`cat /sys/devices/platform/coretemp.0/temp2_input` -elif [ -f /sys/bus/acpi/devices/LNXTHERM\:00/thermal_zone/temp ]; then - # used on some intel systems - TEMP=`cat /sys/bus/acpi/devices/LNXTHERM\:00/thermal_zone/temp` -elif [ -f /sys/devices/virtual/thermal/thermal_zone0/temp ]; then - # used on some intel systems - TEMP=`cat /sys/devices/virtual/thermal/thermal_zone0/temp` -elif [ -f /sys/class/hwmon/hwmon0/temp1_input ]; then - # hwmon for new 2.6.39, 3.0 linux kernels - TEMP=`cat /sys/class/hwmon/hwmon0/temp1_input` -elif [ -f /sys/class/hwmon/hwmon0/device/temp1_input ]; then - # used on AMD systems - TEMP=`cat /sys/class/hwmon/hwmon0/device/temp1_input` -elif [ -f /sys/class/hwmon/hwmon0/device/temp2_input ]; then - # used on ION systems - TEMP=`cat /sys/class/hwmon/hwmon0/device/temp2_input` -fi - -echo "$(( $TEMP / 1000 )) C" diff --git a/packages/mediacenter/xbmc-pvr/scripts/gputemp b/packages/mediacenter/xbmc-pvr/scripts/gputemp deleted file mode 100755 index 7767e885a9..0000000000 --- a/packages/mediacenter/xbmc-pvr/scripts/gputemp +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh - -################################################################################ -# Copyright (C) 2009-2010 OpenELEC.tv -# http://www.openelec.tv -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -TEMP="0" - -if lspci -n | grep 0300 | grep -q 10de; then - [ -f /usr/bin/nvidia-smi ] && TEMP=`/usr/bin/nvidia-smi -q -x | grep 'gpu_temp' | awk '{ print $1 }' | sed 's,,,g'` -fi - -if lspci -n | grep 0300 | grep -q 1002; then - if [ -f /storage/.config/xorg.conf ]; then - XORG="/storage/.config/xorg.conf" - else - XORG="/etc/X11/xorg-fglrx.conf" - fi - [ -f /usr/bin/aticonfig ] && TEMP=`/usr/bin/aticonfig -i $XORG --od-gettemperature | grep Temperature | cut -f 2 -d "-" | cut -f 1 -d "." | sed -e "s, ,,"` -fi - -echo "${TEMP} C" diff --git a/packages/mediacenter/xbmc-pvr/scripts/ps3remote_helper b/packages/mediacenter/xbmc-pvr/scripts/ps3remote_helper deleted file mode 100755 index 84d8db2806..0000000000 --- a/packages/mediacenter/xbmc-pvr/scripts/ps3remote_helper +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -################################################################################ -# Copyright (C) 2009-2010 OpenELEC.tv -# http://www.openelec.tv -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -case "${ACTION}" in - add) - if [ -f /usr/bin/xbmc-ps3remote ]; then - /usr/bin/xbmc-ps3remote localhost 9777 & - fi - ;; - remove) - killall xbmc-ps3remote - ;; -esac - -exit 0 diff --git a/packages/mediacenter/xbmc-pvr/scripts/wiiremote_helper b/packages/mediacenter/xbmc-pvr/scripts/wiiremote_helper deleted file mode 100755 index 5f8d87556f..0000000000 --- a/packages/mediacenter/xbmc-pvr/scripts/wiiremote_helper +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -################################################################################ -# Copyright (C) 2009-2010 OpenELEC.tv -# http://www.openelec.tv -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -case "${ACTION}" in - add) - if [ -f /usr/bin/xbmc-wiiremote ]; then - /usr/bin/xbmc-wiiremote & - fi - ;; - remove) - killall xbmc-wiiremote - ;; -esac - -exit 0 diff --git a/packages/mediacenter/xbmc-pvr/sleep.d/00_addon-sleep b/packages/mediacenter/xbmc-pvr/sleep.d/00_addon-sleep deleted file mode 100755 index 0a9d84e0c4..0000000000 --- a/packages/mediacenter/xbmc-pvr/sleep.d/00_addon-sleep +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -. /etc/profile - -for script in $HOME/.xbmc/addons/*/sleep.d/*.power; do - progress "running addon sleep script $script ($1)..." - sh $script $1 -done diff --git a/packages/mediacenter/xbmc-pvr/sleep.d/01_update_videodb b/packages/mediacenter/xbmc-pvr/sleep.d/01_update_videodb deleted file mode 100755 index 7b509b0c12..0000000000 --- a/packages/mediacenter/xbmc-pvr/sleep.d/01_update_videodb +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/sh - -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -. /etc/profile - -case "$1" in - thaw|resume) - ( - if [ -f /var/config/settings.conf ]; then - . /var/config/settings.conf - - if [ "$WAKEUP_VIDEODBUPDATE" = "true" ]; then - usleep 5000000 - xbmc-send --host=127.0.0.1 -a "UpdateLibrary(video)" - fi - fi - )& - ;; - *) exit $NA - ;; -esac diff --git a/packages/mediacenter/xbmc-pvr/sleep.d/02_update_musicdb b/packages/mediacenter/xbmc-pvr/sleep.d/02_update_musicdb deleted file mode 100755 index 22ab151a7b..0000000000 --- a/packages/mediacenter/xbmc-pvr/sleep.d/02_update_musicdb +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/sh - -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -. /etc/profile - -case "$1" in - thaw|resume) - ( - if [ -f /var/config/settings.conf ]; then - . /var/config/settings.conf - - if [ "$WAKEUP_MUSICDBUPDATE" = "true" ]; then - usleep 5000000 - xbmc-send --host=127.0.0.1 -a "UpdateLibrary(music)" - fi - fi - )& - ;; - *) exit $NA - ;; -esac diff --git a/packages/mediacenter/xbmc-pvr/sleep.d/61_xbmc_lirc b/packages/mediacenter/xbmc-pvr/sleep.d/61_xbmc_lirc deleted file mode 100755 index 6df3ad6b31..0000000000 --- a/packages/mediacenter/xbmc-pvr/sleep.d/61_xbmc_lirc +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -. /etc/profile - -case "$1" in - hibernate|suspend) - xbmc-send --host=127.0.0.1 -a "LIRC.Stop" - ;; - thaw|resume) - xbmc-send --host=127.0.0.1 -a "LIRC.Start" - ;; - *) exit $NA - ;; -esac diff --git a/packages/mediacenter/xbmc-pvr/sleep.d/62_xbmc_lcd b/packages/mediacenter/xbmc-pvr/sleep.d/62_xbmc_lcd deleted file mode 100755 index 7b93b3c3a3..0000000000 --- a/packages/mediacenter/xbmc-pvr/sleep.d/62_xbmc_lcd +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -. /etc/profile - -case "$1" in - hibernate|suspend) - xbmc-send --host=127.0.0.1 -a "LCD.Suspend" - ;; - thaw|resume) - xbmc-send --host=127.0.0.1 -a "LCD.Resume" - ;; - *) exit $NA - ;; -esac diff --git a/packages/mediacenter/xbmc-pvr/sleep.d/63_reload_skin b/packages/mediacenter/xbmc-pvr/sleep.d/63_reload_skin deleted file mode 100755 index c0c2068b28..0000000000 --- a/packages/mediacenter/xbmc-pvr/sleep.d/63_reload_skin +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh - -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -. /etc/profile - -case "$1" in - thaw|resume) - xbmc-send --host=127.0.0.1 -a "ReloadSkin()" - ;; - *) exit $NA - ;; -esac diff --git a/packages/mediacenter/xbmc-pvr/splash/splash.png b/packages/mediacenter/xbmc-pvr/splash/splash.png deleted file mode 100644 index 6b2897b0a1..0000000000 Binary files a/packages/mediacenter/xbmc-pvr/splash/splash.png and /dev/null differ diff --git a/packages/mediacenter/xbmc-pvr/splash/splash1.png b/packages/mediacenter/xbmc-pvr/splash/splash1.png deleted file mode 100644 index ac0aa0052f..0000000000 Binary files a/packages/mediacenter/xbmc-pvr/splash/splash1.png and /dev/null differ diff --git a/packages/mediacenter/xbmc-pvr/udev.d/98-ps3remote.rules b/packages/mediacenter/xbmc-pvr/udev.d/98-ps3remote.rules deleted file mode 100644 index 913d47f406..0000000000 --- a/packages/mediacenter/xbmc-pvr/udev.d/98-ps3remote.rules +++ /dev/null @@ -1,27 +0,0 @@ -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -# only does something with "bluetooth" subsystem devices. -SUBSYSTEM!="bluetooth", GOTO="end" - -# Start PS3 Remote support if bluetooth is starting -ACTION=="add|remove", RUN+="/lib/udev/ps3remote_helper" - -LABEL="end" diff --git a/packages/mediacenter/xbmc-pvr/udev.d/98-wiiremote.rules b/packages/mediacenter/xbmc-pvr/udev.d/98-wiiremote.rules deleted file mode 100644 index b12c683a39..0000000000 --- a/packages/mediacenter/xbmc-pvr/udev.d/98-wiiremote.rules +++ /dev/null @@ -1,27 +0,0 @@ -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -# only does something with "bluetooth" subsystem devices. -SUBSYSTEM!="bluetooth", GOTO="end" - -# Start Wii Remote support if bluetooth is starting -ACTION=="add|remove", RUN+="/lib/udev/wiiremote_helper" - -LABEL="end" diff --git a/packages/mediacenter/xbmc-pvr/unpack b/packages/mediacenter/xbmc-pvr/unpack deleted file mode 100755 index 04e7dbae71..0000000000 --- a/packages/mediacenter/xbmc-pvr/unpack +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh - -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -. config/options $1 - -echo "### Applying project based patches ###" - -for patch in `ls $PROJECT_DIR/$PROJECT/patches/$1`; do - cat $PROJECT_DIR/$PROJECT/patches/$1/$patch | patch -d \ - `echo $PKG_BUILD | cut -f1 -d\ ` -p1 -done diff --git a/packages/mediacenter/xbmc-theme-Confluence/meta b/packages/mediacenter/xbmc-theme-Confluence/meta index 04d4fc3c70..08c862c4f2 100644 --- a/packages/mediacenter/xbmc-theme-Confluence/meta +++ b/packages/mediacenter/xbmc-theme-Confluence/meta @@ -19,12 +19,13 @@ ################################################################################ PKG_NAME="xbmc-theme-Confluence" -PKG_VERSION="70537d2" +PKG_VERSION="bee1ab5" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.xbmc.org" -PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz" +#PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz" +PKG_URL="http://gujs.openelec.tv/sources/$PKG_NAME-$PKG_VERSION.tar.xz" PKG_DEPENDS="" PKG_BUILD_DEPENDS="toolchain" PKG_PRIORITY="optional" diff --git a/packages/mediacenter/xbmc/meta b/packages/mediacenter/xbmc/meta index dbc5cc790e..b9a2882920 100644 --- a/packages/mediacenter/xbmc/meta +++ b/packages/mediacenter/xbmc/meta @@ -19,12 +19,13 @@ ################################################################################ PKG_NAME="xbmc" -PKG_VERSION="70537d2" +PKG_VERSION="bee1ab5" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.xbmc.org" -PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz" +#PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz" +PKG_URL="http://gujs.openelec.tv/sources/$PKG_NAME-$PKG_VERSION.tar.xz" PKG_DEPENDS="boost Python zlib bzip2 lzo pcre alsa-lib libass enca curl libssh rtmpdump Mesa glew fontconfig fribidi $LIBJPEG libpng tiff freetype jasper libmad libsamplerate libogg libvorbis libcdio libmodplug faad2 flac lame libmpeg2 SDL SDL_mixer SDL_image yajl sqlite mysql alsa bc xbmc-addon-settings" PKG_BUILD_DEPENDS="toolchain boost Python zlib bzip2 lzo pcre alsa-lib libass enca curl libssh rtmpdump Mesa glew fontconfig fribidi $LIBJPEG libpng tiff freetype jasper libmad libsamplerate libogg libvorbis libcdio libmodplug faad2 flac lame libmpeg2 SDL SDL_mixer SDL_image yajl sqlite mysql" PKG_PRIORITY="optional" diff --git a/packages/mediacenter/xbmc/patches/xbmc-70537d2-001-add_support_to_specify_GIT_REV-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-70537d2-001-add_support_to_specify_GIT_REV-0.1.patch deleted file mode 100644 index c013e0ae3a..0000000000 --- a/packages/mediacenter/xbmc/patches/xbmc-70537d2-001-add_support_to_specify_GIT_REV-0.1.patch +++ /dev/null @@ -1,39 +0,0 @@ -diff -Naur xbmc-9389dc8/configure.in xbmc-9389dc8.patch/configure.in ---- xbmc-9389dc8/configure.in 2011-09-01 17:21:47.000000000 +0200 -+++ xbmc-9389dc8.patch/configure.in 2011-09-01 23:30:40.419399392 +0200 -@@ -428,6 +428,14 @@ - esac - AC_SUBST([ARCH]) - -+AC_CHECK_PROG(HAVE_GIT,git,"yes","no",) -+if test "$HAVE_GIT" = "yes" -a "$GIT_REV" = ""; then -+ GIT_REV=$(git --no-pager log --abbrev=7 -n 1 --pretty=format:"%h %ci" HEAD | awk '{gsub("-", "");print $2"-"$1}') -+elif test "$GIT_REV" = ""; then -+ GIT_REV="Unknown" -+fi -+final_message="$final_message\n git Rev.:\t${GIT_REV}" -+ - # platform debug flags - if test "$use_debug" = "yes"; then - final_message="$final_message\n Debugging:\tYes" -@@ -1177,7 +1185,6 @@ - fi - fi - --AC_CHECK_PROG(HAVE_GIT,git,"yes","no",) - - # Checks for header files. - AC_HEADER_DIRENT -@@ -1408,12 +1415,6 @@ - final_message="$final_message\n Avahi:\tNo" - fi - --if test "$HAVE_GIT" = "yes"; then -- GIT_REV=$(git --no-pager log --abbrev=7 -n 1 --pretty=format:"%h %ci" HEAD | awk '{gsub("-", "");print $2"-"$1}') --fi --if test "$GIT_REV" = ""; then -- GIT_REV="Unknown" --fi - if test "$host_vendor" = "apple"; then - echo "#define GIT_REV \"$GIT_REV\"" > git_revision.h - else diff --git a/packages/mediacenter/xbmc/patches/xbmc-70537d2-013-reenable_lcd_config_settings-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-70537d2-013-reenable_lcd_config_settings-0.1.patch deleted file mode 100644 index 656dcac934..0000000000 --- a/packages/mediacenter/xbmc/patches/xbmc-70537d2-013-reenable_lcd_config_settings-0.1.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff -Naur xbmc-9389dc8/xbmc/settings/GUISettings.cpp xbmc-9389dc8.patch/xbmc/settings/GUISettings.cpp ---- xbmc-9389dc8/xbmc/settings/GUISettings.cpp 2011-09-01 23:34:05.267139356 +0200 -+++ xbmc-9389dc8.patch/xbmc/settings/GUISettings.cpp 2011-09-01 23:34:52.098765331 +0200 -@@ -423,7 +423,8 @@ - AddString(vs, "videoscreen.testpattern",226,"", BUTTON_CONTROL_STANDARD); - #endif - #if defined(_LINUX) && !defined(__APPLE__) -- AddBool(NULL, "videoscreen.haslcd", 4501, false); -+ AddSeparator(vs, "videoscreen.sep2"); -+ AddBool(vs, "videoscreen.haslcd", 4501, false); - #endif - - CSettingsCategory* ao = AddCategory(4, "audiooutput", 772); diff --git a/packages/mediacenter/xbmc/patches/xbmc-70537d2-303-fix_libdvd_xFLAGS-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-70537d2-303-fix_libdvd_xFLAGS-0.1.patch deleted file mode 100644 index 5e76acefe4..0000000000 --- a/packages/mediacenter/xbmc/patches/xbmc-70537d2-303-fix_libdvd_xFLAGS-0.1.patch +++ /dev/null @@ -1,119 +0,0 @@ -diff -Naur xbmc-pvr-3513480/lib/libdvd/libdvdcss/src/libdvdcss.pc.in xbmc-pvr-3513480.patch/lib/libdvd/libdvdcss/src/libdvdcss.pc.in ---- xbmc-pvr-3513480/lib/libdvd/libdvdcss/src/libdvdcss.pc.in 2011-04-25 02:36:42.000000000 +0200 -+++ xbmc-pvr-3513480.patch/lib/libdvd/libdvdcss/src/libdvdcss.pc.in 2011-04-25 05:01:20.091837122 +0200 -@@ -6,5 +6,5 @@ - Name: libdvdcss - Description: DVD access and decryption library. - Version: @VERSION@ --Libs: -L${libdir} -ldvdcss --Cflags: -I{includedir} -I${includedir}/@PACKAGE@ -+Libs: -ldvdcss -+Cflags: -I. -diff -Naur xbmc-pvr-3513480/lib/libdvd/libdvdnav/misc/dvdnav-config2.sh xbmc-pvr-3513480.patch/lib/libdvd/libdvdnav/misc/dvdnav-config2.sh ---- xbmc-pvr-3513480/lib/libdvd/libdvdnav/misc/dvdnav-config2.sh 2011-04-25 02:36:42.000000000 +0200 -+++ xbmc-pvr-3513480.patch/lib/libdvd/libdvdnav/misc/dvdnav-config2.sh 2011-04-25 05:01:20.549828701 +0200 -@@ -56,17 +56,17 @@ - fi - - if test "$echo_cflags" = "yes"; then -- echo -I$prefix/include $dvdread_cflags $extracflags $threadcflags -+ echo $dvdread_cflags $extracflags $threadcflags - fi - - if test "$echo_minicflags" = "yes"; then -- echo -I$prefix/include -I$prefix/include/dvdnav $extracflags $threadcflags -+ echo $extracflags $threadcflags - fi - - if test "$echo_libs" = "yes"; then -- echo -L$libdir -ldvdnav $dvdread_libs $threadlib -+ echo -ldvdnav $dvdread_libs $threadlib - fi - - if test "$echo_minilibs" = "yes"; then -- echo -L$libdir -ldvdnavmini $threadlib -+ echo -ldvdnavmini $threadlib - fi -diff -Naur xbmc-pvr-3513480/lib/libdvd/libdvdnav/misc/dvdnav-config.in xbmc-pvr-3513480.patch/lib/libdvd/libdvdnav/misc/dvdnav-config.in ---- xbmc-pvr-3513480/lib/libdvd/libdvdnav/misc/dvdnav-config.in 2011-04-25 02:36:42.000000000 +0200 -+++ xbmc-pvr-3513480.patch/lib/libdvd/libdvdnav/misc/dvdnav-config.in 2011-04-25 05:01:20.624827321 +0200 -@@ -76,13 +76,13 @@ - fi - - if test "$echo_cflags" = "yes"; then -- echo -I@includedir@ -I@includedir@/libdvdread @THREAD_CFLAGS@ -+ echo @THREAD_CFLAGS@ - fi - - if test "$echo_libs" = "yes"; then -- echo -L@libdir@ -ldvdnav -ldvdread @THREAD_LIBS@ -+ echo -ldvdnav -ldvdread @THREAD_LIBS@ - fi - - if test "$echo_minilibs" = "yes"; then -- echo -L@libdir@ -ldvdnavmini @THREAD_LIBS@ -+ echo -ldvdnavmini @THREAD_LIBS@ - fi -diff -Naur xbmc-pvr-3513480/lib/libdvd/libdvdnav/misc/dvdnavmini.pc.in xbmc-pvr-3513480.patch/lib/libdvd/libdvdnav/misc/dvdnavmini.pc.in ---- xbmc-pvr-3513480/lib/libdvd/libdvdnav/misc/dvdnavmini.pc.in 2011-04-25 02:36:42.000000000 +0200 -+++ xbmc-pvr-3513480.patch/lib/libdvd/libdvdnav/misc/dvdnavmini.pc.in 2011-04-25 05:01:21.042819641 +0200 -@@ -7,5 +7,5 @@ - Description: DVD Navigation mini library - Version: @VERSION@ - --Cflags: -I${includedir} @DVDREAD_CFLAGS@ @THREAD_CFLAGS@ --Libs: -L${libdir} -ldvdnav @THREAD_LIBS@ -+Cflags: @DVDREAD_CFLAGS@ @THREAD_CFLAGS@ -+Libs: -ldvdnav @THREAD_LIBS@ -diff -Naur xbmc-pvr-3513480/lib/libdvd/libdvdnav/misc/dvdnav.pc.in xbmc-pvr-3513480.patch/lib/libdvd/libdvdnav/misc/dvdnav.pc.in ---- xbmc-pvr-3513480/lib/libdvd/libdvdnav/misc/dvdnav.pc.in 2011-04-25 02:36:42.000000000 +0200 -+++ xbmc-pvr-3513480.patch/lib/libdvd/libdvdnav/misc/dvdnav.pc.in 2011-04-25 05:01:21.262815601 +0200 -@@ -8,5 +8,5 @@ - Version: @VERSION@ - - Requires.private: dvdread >= 4.1.2 --Cflags: -I${includedir} @THREAD_CFLAGS@ --Libs: -L${libdir} -ldvdnav @THREAD_LIBS@ -+Cflags: @THREAD_CFLAGS@ -+Libs: -ldvdnav @THREAD_LIBS@ -diff -Naur xbmc-pvr-3513480/lib/libdvd/libdvdread/misc/dvdread-config.in xbmc-pvr-3513480.patch/lib/libdvd/libdvdread/misc/dvdread-config.in ---- xbmc-pvr-3513480/lib/libdvd/libdvdread/misc/dvdread-config.in 2011-04-25 02:36:42.000000000 +0200 -+++ xbmc-pvr-3513480.patch/lib/libdvd/libdvdread/misc/dvdread-config.in 2011-04-25 05:01:21.278815307 +0200 -@@ -72,9 +72,9 @@ - fi - - if test "$echo_cflags" = "yes"; then -- echo -I@includedir@ -+ echo "" - fi - - if test "$echo_libs" = "yes"; then -- echo -L@libdir@ -ldvdread -+ echo -ldvdread - fi -diff -Naur xbmc-pvr-3513480/lib/libdvd/libdvdread/misc/dvdread-config.sh xbmc-pvr-3513480.patch/lib/libdvd/libdvdread/misc/dvdread-config.sh ---- xbmc-pvr-3513480/lib/libdvd/libdvdread/misc/dvdread-config.sh 2011-04-25 02:36:42.000000000 +0200 -+++ xbmc-pvr-3513480.patch/lib/libdvd/libdvdread/misc/dvdread-config.sh 2011-04-25 05:01:21.278815307 +0200 -@@ -48,9 +48,9 @@ - fi - - if test "$echo_cflags" = "yes"; then -- echo -I$prefix/include $extracflags -+ echo $extracflags - fi - - if test "$echo_libs" = "yes"; then -- echo -L$libdir $dvdreadlib -+ echo $dvdreadlib - fi -diff -Naur xbmc-pvr-3513480/lib/libdvd/libdvdread/misc/dvdread.pc.in xbmc-pvr-3513480.patch/lib/libdvd/libdvdread/misc/dvdread.pc.in ---- xbmc-pvr-3513480/lib/libdvd/libdvdread/misc/dvdread.pc.in 2011-04-25 02:36:42.000000000 +0200 -+++ xbmc-pvr-3513480.patch/lib/libdvd/libdvdread/misc/dvdread.pc.in 2011-04-25 05:01:21.279815289 +0200 -@@ -7,5 +7,5 @@ - Description: Low level DVD access library - Version: @VERSION@ - --Cflags: -I${includedir} --Libs: -L${libdir} -ldvdread -+Cflags: -I. -+Libs: -ldvdread diff --git a/packages/mediacenter/xbmc/patches/xbmc-70537d2-351-increase_YV12_buffers-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-70537d2-351-increase_YV12_buffers-0.1.patch deleted file mode 100644 index bc842ab6d0..0000000000 --- a/packages/mediacenter/xbmc/patches/xbmc-70537d2-351-increase_YV12_buffers-0.1.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 0c2185d62f858f7b41461b4141e731dc7ec01ca6 Mon Sep 17 00:00:00 2001 -From: FernetMenta -Date: Thu, 11 Aug 2011 18:35:18 +0200 -Subject: [PATCH] LinuxRendererGL: increase buffers to 3 - ---- - xbmc/cores/VideoRenderers/LinuxRendererGL.cpp | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp -index 18c6da4..79a9d90 100644 ---- a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp -+++ b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp -@@ -223,7 +223,7 @@ bool CLinuxRendererGL::ValidateRenderer() - - void CLinuxRendererGL::ManageTextures() - { -- m_NumYV12Buffers = 2; -+ m_NumYV12Buffers = 3; - //m_iYV12RenderBuffer = 0; - return; - } -@@ -720,7 +720,7 @@ unsigned int CLinuxRendererGL::PreInit() - m_resolution = RES_PAL_4x3; - - m_iYV12RenderBuffer = 0; -- m_NumYV12Buffers = 2; -+ m_NumYV12Buffers = 3; - - // setup the background colour - m_clearColour = (float)(g_advancedSettings.m_videoBlackBarColour & 0xff) / 0xff; --- -1.7.5.4 - diff --git a/packages/mediacenter/xbmc/patches/xbmc-70537d2-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-70537d2-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch deleted file mode 100644 index e42432f2df..0000000000 --- a/packages/mediacenter/xbmc/patches/xbmc-70537d2-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch +++ /dev/null @@ -1,53 +0,0 @@ -From f46d7a99bc2f3bc70f274422ec8d16257e2a97aa Mon Sep 17 00:00:00 2001 -From: FernetMenta -Date: Sat, 13 Aug 2011 16:07:08 +0200 -Subject: [PATCH] ati: limit glxSwapBuffers going to far ahead - ---- - xbmc/windowing/X11/WinSystemX11GL.cpp | 23 +++++++++++++++++++++-- - 1 files changed, 21 insertions(+), 2 deletions(-) - -diff --git a/xbmc/windowing/X11/WinSystemX11GL.cpp b/xbmc/windowing/X11/WinSystemX11GL.cpp -index 94f369e..870999e 100644 ---- a/xbmc/windowing/X11/WinSystemX11GL.cpp -+++ b/xbmc/windowing/X11/WinSystemX11GL.cpp -@@ -43,7 +43,27 @@ CWinSystemX11GL::~CWinSystemX11GL() - - bool CWinSystemX11GL::PresentRenderImpl(const CDirtyRegionList& dirty) - { -- if(m_iVSyncMode == 3) -+ if(m_iVSyncMode == 2) -+ { -+ static unsigned int last = 0; -+ unsigned int now; -+ if(m_glXGetVideoSyncSGI(&now) != 0) -+ CLog::Log(LOGERROR, "%s - glXGetVideoSyncSGI - Failed to get current retrace count", __FUNCTION__); -+ -+ if (now == last) -+ { -+ if (m_glXWaitVideoSyncSGI(2, (last + 1) % 2, &now) != 0) -+ CLog::Log(LOGERROR, "%s - glXWaitVideoSyncSGI - Returned error", __FUNCTION__); -+ if(m_glXGetVideoSyncSGI(&now) != 0) -+ CLog::Log(LOGERROR, "%s - glXGetVideoSyncSGI - Failed to get current retrace count", __FUNCTION__); -+ last = now + 1; -+ } -+ else -+ last = now; -+ -+ glXSwapBuffers(m_dpy, m_glWindow); -+ } -+ else if(m_iVSyncMode == 3) - { - glFinish(); - unsigned int before = 0, after = 0; -@@ -236,7 +256,6 @@ bool CWinSystemX11GL::CreateNewWindow(const CStdString& name, bool fullScreen, R - else - m_glXSwapIntervalMESA = NULL; - -- - return true; - } - --- -1.7.5.4 - diff --git a/packages/mediacenter/xbmc/patches/xbmc-70537d2-354-vaapi_increase_number_of_video_surface_allocated-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-70537d2-354-vaapi_increase_number_of_video_surface_allocated-0.1.patch deleted file mode 100644 index a03fb50292..0000000000 --- a/packages/mediacenter/xbmc/patches/xbmc-70537d2-354-vaapi_increase_number_of_video_surface_allocated-0.1.patch +++ /dev/null @@ -1,27 +0,0 @@ -From dff7d824c82f957e19ad56247134912d70862188 Mon Sep 17 00:00:00 2001 -From: FernetMenta -Date: Sun, 14 Aug 2011 11:21:32 +0200 -Subject: [PATCH] vaapi: increase number of video surface allocated - ---- - xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp -index bcc3fe1..326c390 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp -@@ -358,7 +358,9 @@ bool CDecoder::EnsureContext(AVCodecContext *avctx) - else - m_refs = 2; - } -- return EnsureSurfaces(avctx, m_refs + 3); -+ // number of reference + 3 renderbuffers + Holder -+ // an extra one should not harm -+ return EnsureSurfaces(avctx, m_refs + 5); - } - - bool CDecoder::EnsureSurfaces(AVCodecContext *avctx, unsigned n_surfaces_count) --- -1.7.5.4 - diff --git a/packages/mediacenter/xbmc/patches/xbmc-70537d2-402-enable_yasm_in_ffmpeg-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-70537d2-402-enable_yasm_in_ffmpeg-0.1.patch deleted file mode 100644 index b8f5b8afcf..0000000000 --- a/packages/mediacenter/xbmc/patches/xbmc-70537d2-402-enable_yasm_in_ffmpeg-0.1.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff -Naur xbmc-pvr-3513480/configure.in xbmc-pvr-3513480.patch/configure.in ---- xbmc-pvr-3513480/configure.in 2011-04-25 02:36:33.000000000 +0200 -+++ xbmc-pvr-3513480.patch/configure.in 2011-04-25 05:14:49.220848143 +0200 -@@ -885,6 +885,9 @@ - AC_MSG_NOTICE($external_ffmpeg_disabled) - USE_EXTERNAL_FFMPEG=0 - AC_DEFINE([PIX_FMT_VDPAU_MPEG4_IN_AVUTIL], [1], [Whether AVUtil defines PIX_FMT_VDPAU_MPEG4.]) -+ -+ # check for yasm -+ AC_CHECK_PROG(HAVE_YASM,yasm,"yes","no",) - fi - - # Python -@@ -1547,6 +1550,7 @@ - `if test "$use_arch" != "no"; then echo --arch=$use_arch; fi`\ - `if test "$use_cpu" != "no"; then echo --cpu=$use_cpu; fi`\ - --target-os=$(tolower $(uname -s)) \ -+ `if test "$HAVE_YASM" = "yes"; then echo --enable-yasm; fi` \ - --disable-muxers \ - --enable-muxer=spdif \ - --enable-muxer=adts \ diff --git a/packages/mediacenter/xbmc/patches/xbmc-70537d2-404-add_lame_check-0.6.patch b/packages/mediacenter/xbmc/patches/xbmc-70537d2-404-add_lame_check-0.6.patch deleted file mode 100644 index a459219108..0000000000 --- a/packages/mediacenter/xbmc/patches/xbmc-70537d2-404-add_lame_check-0.6.patch +++ /dev/null @@ -1,125 +0,0 @@ -diff -Naur xbmc-pvr-3513480/configure.in xbmc-pvr-3513480.patch/configure.in ---- xbmc-pvr-3513480/configure.in 2011-04-25 05:46:35.000000000 +0200 -+++ xbmc-pvr-3513480.patch/configure.in 2011-04-25 05:50:02.982401390 +0200 -@@ -72,6 +72,8 @@ - rsxs_disabled="== RSXS disabled. ==" - pulse_not_found="== Could not find libpulse. PulseAudio support disabled. ==" - pulse_disabled="== PulseAudio support manually disabled. ==" -+lame_not_found="== Could not find libmp3lame. LAME support disabled. ==" -+lame_disabled="== LAME support manually disabled. ==" - dvdcss_enabled="== DVDCSS support enabled. ==" - dvdcss_disabled="== DVDCSS support disabled. ==" - hal_not_found="== Could not find hal. HAL support disabled. ==" -@@ -244,6 +246,12 @@ - [use_ffmpeg_libvorbis=$enableval], - [use_ffmpeg_libvorbis=no]) - -+AC_ARG_ENABLE([lame], -+ [AS_HELP_STRING([--enable-lame], -+ [enable lame support (default is yes)])], -+ [use_lame=$enableval], -+ [use_lame=yes]) -+ - AC_ARG_ENABLE([dvdcss], - [AS_HELP_STRING([--enable-dvdcss], - [enable DVDCSS support (default is yes)])], -@@ -758,6 +766,20 @@ - USE_PULSE=0 - fi - -+# LAME -+if test "$use_lame" = "yes"; then -+ AC_CHECK_LIB([mp3lame], [main], -+ AC_DEFINE([HAVE_LIBMP3LAME], [1], [Define to 1 if you have the 'libmp3lame' library (-lmp3lame).]), -+ use_lame=no;AC_MSG_RESULT($lame_not_found)) -+else -+ AC_MSG_RESULT($lame_disabled) -+fi -+if test "$use_lame" = "yes"; then -+ AC_SUBST([HAVE_LIBMP3LAME], 1) -+else -+ AC_SUBST([HAVE_LIBMP3LAME], 0) -+fi -+ - # HAL - if test "$host_vendor" = "apple" ; then - use_hal="no" -@@ -1311,6 +1333,12 @@ - final_message="$final_message\n HAL Support:\tNo" - fi - -+if test "$use_lame" = "yes"; then -+ final_message="$final_message\n LAME:\t\tYes" -+else -+ final_message="$final_message\n LAME:\t\tNo" -+fi -+ - # DVDCSS - if test "$use_dvdcss" = "yes"; then - AC_MSG_NOTICE($dvdcss_enabled) -diff -Naur xbmc-pvr-3513480/configure.in.orig xbmc-pvr-3513480.patch/configure.in.orig -diff -Naur xbmc-pvr-3513480/Makefile.in.orig xbmc-pvr-3513480.patch/Makefile.in.orig -diff -Naur xbmc-pvr-3513480/xbmc/cdrip/CDDARipper.cpp xbmc-pvr-3513480.patch/xbmc/cdrip/CDDARipper.cpp ---- xbmc-pvr-3513480/xbmc/cdrip/CDDARipper.cpp 2011-04-25 02:36:33.000000000 +0200 -+++ xbmc-pvr-3513480.patch/xbmc/cdrip/CDDARipper.cpp 2011-04-25 05:48:10.487548571 +0200 -@@ -27,7 +27,11 @@ - #include "CDDAReader.h" - #include "utils/StringUtils.h" - #include "Util.h" -+ -+#ifdef HAVE_LIBMP3LAME - #include "EncoderLame.h" -+#endif -+ - #include "EncoderWav.h" - #include "EncoderVorbis.h" - #include "EncoderFFmpeg.h" -@@ -78,9 +82,16 @@ - case CDDARIP_ENCODER_FLAC: - m_pEncoder = new CEncoderFlac(); - break; -- default: -+#ifdef HAVE_LIBMP3LAME -+ case CDDARIP_ENCODER_LAME: - m_pEncoder = new CEncoderLame(); - break; -+#else -+ default: -+ CLog::Log(LOGERROR,"invalid encoder selected"); -+ return false; -+ break; -+#endif - } - - // we have to set the tags before we init the Encoder -diff -Naur xbmc-pvr-3513480/xbmc/cdrip/Makefile.in xbmc-pvr-3513480.patch/xbmc/cdrip/Makefile.in ---- xbmc-pvr-3513480/xbmc/cdrip/Makefile.in 2011-04-25 02:36:33.000000000 +0200 -+++ xbmc-pvr-3513480.patch/xbmc/cdrip/Makefile.in 2011-04-25 05:51:13.013064387 +0200 -@@ -3,10 +3,13 @@ - Encoder.cpp \ - EncoderFFmpeg.cpp \ - EncoderFlac.cpp \ -- EncoderLame.cpp \ - EncoderVorbis.cpp \ - EncoderWav.cpp \ - -+ifeq (@HAVE_LIBMP3LAME@,1) -+ SRCS+=EncoderLame.cpp -+endif -+ - LIB=cdrip.a - - include @abs_top_srcdir@/Makefile.include -diff -Naur xbmc-pvr-3513480/xbmc/settings/GUISettings.cpp xbmc-pvr-3513480.patch/xbmc/settings/GUISettings.cpp ---- xbmc-pvr-3513480/xbmc/settings/GUISettings.cpp 2011-04-25 05:47:12.000000000 +0200 -+++ xbmc-pvr-3513480.patch/xbmc/settings/GUISettings.cpp 2011-04-25 05:48:47.956833472 +0200 -@@ -324,7 +324,9 @@ - AddPath(acd,"audiocds.recordingpath",20000,"select writable folder",BUTTON_CONTROL_PATH_INPUT,false,657); - AddString(acd, "audiocds.trackpathformat", 13307, "%A - %B/[%N. ][%A - ]%T", EDIT_CONTROL_INPUT, false, 16016); - map encoders; -+#ifdef HAVE_LIBMP3LAME - encoders.insert(make_pair(34000,CDDARIP_ENCODER_LAME)); -+#endif - encoders.insert(make_pair(34001,CDDARIP_ENCODER_VORBIS)); - encoders.insert(make_pair(34002,CDDARIP_ENCODER_WAV)); - encoders.insert(make_pair(34005,CDDARIP_ENCODER_FLAC)); diff --git a/packages/mediacenter/xbmc/patches/xbmc-70537d2-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-70537d2-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch deleted file mode 100644 index 821c1cc7bd..0000000000 --- a/packages/mediacenter/xbmc/patches/xbmc-70537d2-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch +++ /dev/null @@ -1,18 +0,0 @@ -diff -Naur xbmc-a3c804b/xbmc/interfaces/python/XBPython.cpp xbmc-a3c804b.patch/xbmc/interfaces/python/XBPython.cpp ---- xbmc-a3c804b/xbmc/interfaces/python/XBPython.cpp 2011-08-17 23:40:00.000000000 +0200 -+++ xbmc-a3c804b.patch/xbmc/interfaces/python/XBPython.cpp 2011-08-18 03:50:49.652475572 +0200 -@@ -335,11 +335,9 @@ - // at http://docs.python.org/using/cmdline.html#environment-variables - - #if !defined(_WIN32) -- /* PYTHONOPTIMIZE is set off intentionally when using external Python. -- Reason for this is because we cannot be sure what version of Python -- was used to compile the various Python object files (i.e. .pyo, -- .pyc, etc.). */ -- // check if we are running as real xbmc.app or just binary -+ // Required for python to find optimized code (pyo) files -+ setenv("PYTHONOPTIMIZE", "1", 1); -+ // check if we are running as real xbmc.app or just binary - if (!CUtil::GetFrameworksPath(true).IsEmpty()) - { - // using external python, it's build looking for xxx/lib/python2.6 diff --git a/packages/mediacenter/xbmc/patches/xbmc-70537d2-452-change_lcd_content-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-70537d2-452-change_lcd_content-0.1.patch deleted file mode 100644 index 0427b534f9..0000000000 --- a/packages/mediacenter/xbmc/patches/xbmc-70537d2-452-change_lcd_content-0.1.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -Naur xbmc-pvr-3513480/userdata/LCD.xml xbmc-pvr-3513480.patch/userdata/LCD.xml ---- xbmc-pvr-3513480/userdata/LCD.xml 2011-04-25 02:36:33.000000000 +0200 -+++ xbmc-pvr-3513480.patch/userdata/LCD.xml 2011-04-25 05:27:34.956125133 +0200 -@@ -21,7 +21,7 @@ - Freemem: $INFO[System.FreeMemory] - - -- XBMC running... -+ *** OpenELEC *** - $INFO[System.Time] $INFO[System.Date] - Freemem: $INFO[System.FreeMemory] - $INFO[System.ScreenWidth]x$INFO[System.ScreenHeight] $INFO[System.ScreenMode] diff --git a/packages/mediacenter/xbmc/patches/xbmc-70537d2-453-add_openelec.tv_RSS_news-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-70537d2-453-add_openelec.tv_RSS_news-0.1.patch deleted file mode 100644 index 5b32c0cce7..0000000000 --- a/packages/mediacenter/xbmc/patches/xbmc-70537d2-453-add_openelec.tv_RSS_news-0.1.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff -Naur xbmc-10.1-Dharma/userdata/RssFeeds.xml xbmc-10.1-Dharma.patch/userdata/RssFeeds.xml ---- xbmc-10.1-Dharma/userdata/RssFeeds.xml 2011-03-08 02:49:24.000000000 +0100 -+++ xbmc-10.1-Dharma.patch/userdata/RssFeeds.xml 2011-06-14 17:07:08.450880123 +0200 -@@ -3,6 +3,7 @@ - - - -+ http://openelec.tv/news?format=feed&type=rss - http://feeds.feedburner.com/xbmc - - diff --git a/packages/mediacenter/xbmc/patches/xbmc-70537d2-453-ps3_remote_be_more_quiet-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-70537d2-453-ps3_remote_be_more_quiet-0.1.patch deleted file mode 100644 index 6b2f879e1c..0000000000 --- a/packages/mediacenter/xbmc/patches/xbmc-70537d2-453-ps3_remote_be_more_quiet-0.1.patch +++ /dev/null @@ -1,29 +0,0 @@ -diff -Naur xbmc-pvr-3513480/tools/EventClients/Clients/PS3 BD Remote/ps3_remote.py xbmc-pvr-3513480.patch/tools/EventClients/Clients/PS3 BD Remote/ps3_remote.py ---- xbmc-pvr-3513480/tools/EventClients/Clients/PS3 BD Remote/ps3_remote.py 2011-04-25 02:36:33.000000000 +0200 -+++ xbmc-pvr-3513480.patch/tools/EventClients/Clients/PS3 BD Remote/ps3_remote.py 2011-04-25 05:30:03.870260596 +0200 -@@ -59,9 +59,6 @@ - target_connected = False - target_address = None - while target_connected is False: -- xbmc.send_notification("Action Required!", -- "Hold Start+Enter on your remote.", -- bticon) - print "Searching for %s" % target_name - print "(Hold Start + Enter on remote to make it discoverable)" - time.sleep(2) -@@ -72,7 +69,6 @@ - except Exception, e: - print "Error performing bluetooth discovery" - print str(e) -- xbmc.send_notification("Error", "Unable to find devices.", bticon) - time.sleep(5) - continue - -@@ -109,7 +105,6 @@ - print "ERROR - Could Not Connect. Trying again..." - time.sleep(2) - else: -- xbmc.send_notification("Error", "No remotes were found.", bticon) - print "Could not find BD Remote Control. Trying again..." - time.sleep(2) - return (remote,target_address) diff --git a/packages/mediacenter/xbmc/patches/xbmc-70537d2-454-disable_backslash-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-70537d2-454-disable_backslash-0.1.patch deleted file mode 100644 index 0888920258..0000000000 --- a/packages/mediacenter/xbmc/patches/xbmc-70537d2-454-disable_backslash-0.1.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -Naur xbmc-30a9070/system/keymaps/keyboard.xml xbmc-30a9070.patch/system/keymaps/keyboard.xml ---- xbmc-30a9070/system/keymaps/keyboard.xml 2011-07-28 06:20:13.000000000 +0200 -+++ xbmc-30a9070.patch/system/keymaps/keyboard.xml 2011-07-28 09:39:57.210973380 +0200 -@@ -90,7 +90,7 @@ - Number7 - Number8 - Number9 -- ToggleFullScreen -+ - FirstPage - LastPage - diff --git a/packages/mediacenter/xbmc/patches/xbmc-70537d2-462-add_remote_irtrans_mediacenter-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-70537d2-462-add_remote_irtrans_mediacenter-0.1.patch deleted file mode 100644 index 0edef5a7a5..0000000000 --- a/packages/mediacenter/xbmc/patches/xbmc-70537d2-462-add_remote_irtrans_mediacenter-0.1.patch +++ /dev/null @@ -1,52 +0,0 @@ -diff -Naur xbmc-pvr-3513480/system/Lircmap.xml xbmc-pvr-3513480.patch/system/Lircmap.xml ---- xbmc-pvr-3513480/system/Lircmap.xml 2011-04-25 02:36:33.000000000 +0200 -+++ xbmc-pvr-3513480.patch/system/Lircmap.xml 2011-04-25 05:31:39.632429078 +0200 -@@ -409,4 +409,48 @@ - KEY_YELLOW - KEY_BLUE - -+ -+ pause -+ stop -+ fwd -+ rew -+ left -+ right -+ up -+ down -+ -+ ch+ -+ ch- -+ back -+ clear -+ play -+ info -+ next -+ prev -+ teletext -+ ehome -+ rec -+ vol+ -+ vol- -+ mute -+ power -+ video -+ music -+ pictures -+ tv -+ 1 -+ 2 -+ 3 -+ 4 -+ 5 -+ 6 -+ 7 -+ 8 -+ 9 -+ 0 -+ red -+ green -+ yellow -+ blue -+ - diff --git a/packages/mediacenter/xbmc/patches/xbmc-70537d2-463-add_remote_devinput-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-70537d2-463-add_remote_devinput-0.1.patch deleted file mode 100644 index 85d635b61b..0000000000 --- a/packages/mediacenter/xbmc/patches/xbmc-70537d2-463-add_remote_devinput-0.1.patch +++ /dev/null @@ -1,71 +0,0 @@ -diff -Naur xbmc-10.1-Dharma/system/Lircmap.xml xbmc-10.1-Dharma.patch/system/Lircmap.xml ---- xbmc-10.1-Dharma/system/Lircmap.xml 2011-06-18 01:43:43.132101246 +0200 -+++ xbmc-10.1-Dharma.patch/system/Lircmap.xml 2011-06-18 01:44:53.777025290 +0200 -@@ -365,7 +365,6 @@ - - - cx23885_remote -- devinput - KEY_LEFT - KEY_RIGHT - KEY_UP -@@ -452,4 +451,59 @@ - yellow - blue - -+ -+ -+ KEY_LEFT -+ KEY_RIGHT -+ KEY_UP -+ KEY_DOWN -+ -+ KEY_ENTER -+ KEY_DELETE -+ KEY_PROG1 -+ KEY_EXIT -+ KEY_RECORD -+ KEY_PLAY -+ KEY_PAUSE -+ KEY_STOP -+ KEY_FASTFORWARD -+ KEY_REWIND -+ KEY_VOLUMEUP -+ KEY_VOLUMEDOWN -+ KEY_CHANNELUP -+ KEY_CHANNELDOWN -+ KEY_NEXT -+ KEY_PREVIOUS -+ KEY_EPG -+ KEY_SUBTITLE -+ KEY_LANGUAGE -+ KEY_INFO -+ KEY_ZOOM -+ KEY_MUTE -+ KEY_POWER -+ KEY_EJECT -+ KEY_DVD -+ KEY_MENU -+ KEY_VIDEO -+ KEY_AUDIO -+ KEY_CAMERA -+ KEY_TUNER -+ KEY_TEXT -+ KEY_NUMERIC_1 -+ KEY_NUMERIC_2 -+ KEY_NUMERIC_3 -+ KEY_NUMERIC_4 -+ KEY_NUMERIC_5 -+ KEY_NUMERIC_6 -+ KEY_NUMERIC_7 -+ KEY_NUMERIC_8 -+ KEY_NUMERIC_9 -+ KEY_NUMERIC_0 -+ KEY_NUMERIC_STAR -+ KEY_NUMERIC_POUND -+ KEY_RED -+ KEY_GREEN -+ KEY_YELLOW -+ KEY_BLUE -+ - diff --git a/packages/mediacenter/xbmc/patches/xbmc-70537d2-464-add_eject_keymapping_for_lirc-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-70537d2-464-add_eject_keymapping_for_lirc-0.1.patch deleted file mode 100644 index 56c56016b5..0000000000 --- a/packages/mediacenter/xbmc/patches/xbmc-70537d2-464-add_eject_keymapping_for_lirc-0.1.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff -Naur xbmc-10.1-Dharma/system/keymaps/remote.xml xbmc-10.1-Dharma.patch/system/keymaps/remote.xml ---- xbmc-10.1-Dharma/system/keymaps/remote.xml 2011-03-08 02:49:23.000000000 +0100 -+++ xbmc-10.1-Dharma.patch/system/keymaps/remote.xml 2011-06-18 01:48:26.887811969 +0200 -@@ -63,6 +63,7 @@ - VolumeDown - Mute - XBMC.ShutDown() -+ XBMC.EjectTray() - XBMC.ActivateWindow(MyVideos) - XBMC.ActivateWindow(MyMusic) - XBMC.ActivateWindow(MyPictures) diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-001-add_support_to_specify_GIT_REV-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-bee1ab5-001-add_support_to_specify_GIT_REV-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-001-add_support_to_specify_GIT_REV-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-bee1ab5-001-add_support_to_specify_GIT_REV-0.1.patch diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-013-reenable_lcd_config_settings-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-bee1ab5-013-reenable_lcd_config_settings-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-013-reenable_lcd_config_settings-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-bee1ab5-013-reenable_lcd_config_settings-0.1.patch diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-303-fix_libdvd_xFLAGS-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-bee1ab5-303-fix_libdvd_xFLAGS-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-303-fix_libdvd_xFLAGS-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-bee1ab5-303-fix_libdvd_xFLAGS-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-70537d2-311-fix_rsxs_build-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-bee1ab5-311-fix_rsxs_build-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-70537d2-311-fix_rsxs_build-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-bee1ab5-311-fix_rsxs_build-0.1.patch diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-351-increase_YV12_buffers-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-bee1ab5-351-increase_YV12_buffers-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-351-increase_YV12_buffers-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-bee1ab5-351-increase_YV12_buffers-0.1.patch diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-bee1ab5-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-bee1ab5-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-354-vaapi_increase_number_of_video_surface_allocated-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-bee1ab5-354-vaapi_increase_number_of_video_surface_allocated-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-354-vaapi_increase_number_of_video_surface_allocated-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-bee1ab5-354-vaapi_increase_number_of_video_surface_allocated-0.1.patch diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-402-enable_yasm_in_ffmpeg-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-bee1ab5-402-enable_yasm_in_ffmpeg-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-402-enable_yasm_in_ffmpeg-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-bee1ab5-402-enable_yasm_in_ffmpeg-0.1.patch diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-404-add_lame_check-0.6.patch b/packages/mediacenter/xbmc/patches/xbmc-bee1ab5-404-add_lame_check-0.6.patch similarity index 100% rename from packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-404-add_lame_check-0.6.patch rename to packages/mediacenter/xbmc/patches/xbmc-bee1ab5-404-add_lame_check-0.6.patch diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-bee1ab5-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-bee1ab5-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-452-change_lcd_content-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-bee1ab5-452-change_lcd_content-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-452-change_lcd_content-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-bee1ab5-452-change_lcd_content-0.1.patch diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-453-add_openelec.tv_RSS_news-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-bee1ab5-453-add_openelec.tv_RSS_news-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-453-add_openelec.tv_RSS_news-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-bee1ab5-453-add_openelec.tv_RSS_news-0.1.patch diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-453-ps3_remote_be_more_quiet-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-bee1ab5-453-ps3_remote_be_more_quiet-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-453-ps3_remote_be_more_quiet-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-bee1ab5-453-ps3_remote_be_more_quiet-0.1.patch diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-454-disable_backslash-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-bee1ab5-454-disable_backslash-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-454-disable_backslash-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-bee1ab5-454-disable_backslash-0.1.patch diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-462-add_remote_irtrans_mediacenter-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-bee1ab5-462-add_remote_irtrans_mediacenter-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-462-add_remote_irtrans_mediacenter-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-bee1ab5-462-add_remote_irtrans_mediacenter-0.1.patch diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-463-add_remote_devinput-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-bee1ab5-463-add_remote_devinput-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-463-add_remote_devinput-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-bee1ab5-463-add_remote_devinput-0.1.patch diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-464-add_eject_keymapping_for_lirc-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-bee1ab5-464-add_eject_keymapping_for_lirc-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-464-add_eject_keymapping_for_lirc-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-bee1ab5-464-add_eject_keymapping_for_lirc-0.1.patch diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-902-vdpau_fix_deinterlacing_if_flag_toggles.patch b/packages/mediacenter/xbmc/patches/xbmc-bee1ab5-901-vdpau_fix_deinterlacing_if_flag_toggles.patch similarity index 57% rename from packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-902-vdpau_fix_deinterlacing_if_flag_toggles.patch rename to packages/mediacenter/xbmc/patches/xbmc-bee1ab5-901-vdpau_fix_deinterlacing_if_flag_toggles.patch index 884ada87e8..fa7597f067 100644 --- a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-522042f-902-vdpau_fix_deinterlacing_if_flag_toggles.patch +++ b/packages/mediacenter/xbmc/patches/xbmc-bee1ab5-901-vdpau_fix_deinterlacing_if_flag_toggles.patch @@ -1,8 +1,8 @@ diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -index 8735db8..8851279 100644 +index d4892b5..697431c 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -@@ -918,6 +918,7 @@ bool CVDPAU::ConfigVDPAU(AVCodecContext* avctx, int ref_frames) +@@ -943,6 +943,7 @@ bool CVDPAU::ConfigVDPAU(AVCodecContext* avctx, int ref_frames) outputSurface = outputSurfaces[surfaceNum]; vdpauConfigured = true; @@ -10,7 +10,7 @@ index 8735db8..8851279 100644 return true; } -@@ -1175,10 +1176,16 @@ int CVDPAU::Decode(AVCodecContext *avctx, AVFrame *pFrame) +@@ -1203,8 +1204,14 @@ int CVDPAU::Decode(AVCodecContext *avctx, AVFrame *pFrame) m_DVDVideoPics.pop(); } @@ -20,25 +20,21 @@ index 8735db8..8851279 100644 + CLog::Log(LOGNOTICE, "CVDPAU::ConfigOutputMethod: detected interlaced frame"); + } + - if((method == VS_INTERLACEMETHOD_AUTO && -- m_DVDVideoPics.front().iFlags & DVP_FLAG_INTERLACED) -+ m_binterlacedFrame) - || (method == VS_INTERLACEMETHOD_AUTO_ION && -- m_DVDVideoPics.front().iFlags & DVP_FLAG_INTERLACED) -+ m_binterlacedFrame) - || method == VS_INTERLACEMETHOD_VDPAU_BOB - || method == VS_INTERLACEMETHOD_VDPAU_TEMPORAL - || method == VS_INTERLACEMETHOD_VDPAU_TEMPORAL_HALF + if (mode == VS_DEINTERLACEMODE_FORCE +- || (mode == VS_DEINTERLACEMODE_AUTO && m_DVDVideoPics.front().iFlags & DVP_FLAG_INTERLACED)) ++ || (mode == VS_DEINTERLACEMODE_AUTO && m_binterlacedFrame)) + { + if((method == VS_INTERLACEMETHOD_AUTO_ION + || method == VS_INTERLACEMETHOD_VDPAU_BOB diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h -index 6e8468b..92a05d1 100644 +index 2056de1..fc1b9d0 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h -@@ -209,7 +209,7 @@ public: +@@ -209,6 +209,7 @@ public: uint32_t max_references; Display* m_Display; bool vdpauConfigured; -- + bool m_binterlacedFrame; + VdpVideoMixerPictureStructure m_mixerfield; - int m_mixerstep; diff --git a/projects/ATV/options b/projects/ATV/options index cef396f567..7c40b1ae17 100644 --- a/projects/ATV/options +++ b/projects/ATV/options @@ -103,8 +103,8 @@ # use linux-next (latest rc) instead latest released version LINUX_NEXT="no" -# Mediacenter to use (xbmc / xbmc-pvr / no) - MEDIACENTER="xbmc-pvr" +# Mediacenter to use (xbmc / no) + MEDIACENTER="xbmc" # Skins to install (Confluence) # Space separated list is supported, diff --git a/projects/Fusion/options b/projects/Fusion/options index 76696d57db..fca0f472ad 100644 --- a/projects/Fusion/options +++ b/projects/Fusion/options @@ -103,8 +103,8 @@ # use linux-next (latest rc) instead latest released version LINUX_NEXT="no" -# Mediacenter to use (xbmc / xbmc-pvr / no) - MEDIACENTER="xbmc-pvr" +# Mediacenter to use (xbmc / no) + MEDIACENTER="xbmc" # Skins to install (Confluence) # Space separated list is supported, diff --git a/projects/Generic/options b/projects/Generic/options index 3d4cca8085..e26c87cfd0 100644 --- a/projects/Generic/options +++ b/projects/Generic/options @@ -103,8 +103,8 @@ # use linux-next (latest rc) instead latest released version LINUX_NEXT="no" -# Mediacenter to use (xbmc / xbmc-pvr / no) - MEDIACENTER="xbmc-pvr" +# Mediacenter to use (xbmc / no) + MEDIACENTER="xbmc" # Skins to install (Confluence) SKINS="Confluence" diff --git a/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/addon.xml b/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/addon.xml new file mode 100644 index 0000000000..e4f298778c --- /dev/null +++ b/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/addon.xml @@ -0,0 +1,18 @@ + + + + + + + executable + + + Installer of Add-on Repositories for XBMC + This Add-on allow to select (from XBMC Wiki) and install Repositories of XBMC Add-ons + all + + diff --git a/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/changelog.txt b/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/changelog.txt new file mode 100644 index 0000000000..771352bde0 --- /dev/null +++ b/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/changelog.txt @@ -0,0 +1,17 @@ +2011-03-21 Version 1.0.3 by Temhil +- Added Repository info window +- Set default title display option without description + +2011-03-17 Version 1.0.2 by Temhil +- Added option to add or not description from title +- Added option for activating or not color of description (set it by default) +- Removed Bold Title + +2011-03-15 - Version 1.0.1 by Temhil +- Added Icon (thank to Willynuisance) +- Added settings allowing to change color of description + +2011-03-13 - Version 1.0.0 by Temhil and Frost +- Creation (installation part based on Frost work with script.addon.installer) + + diff --git a/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/default.py b/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/default.py new file mode 100644 index 0000000000..8c3b59c66e --- /dev/null +++ b/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/default.py @@ -0,0 +1,376 @@ +# -*- coding: cp1252 -*- +""" + Repository Installer Addon (plugin type) allowing to find and install addon repositories for XBMC + + Changelog: + + 03-21-2011 Version 1.0.3 by Temhil + - Added Repository info window + - Set default title display option without description + + 03-17-2011 Version 1.0.2 by Temhil + - Added option to add or not description from title + - Added option for activating or not color of description (set it by default) + - Removed Bold Title + + 03-15-2011 Version 1.0.1 by Temhil + - Added Icon (thank to Willynuisance) + - Added settings allowing to change color of description + + 03-13-2011 Version 1.0.0 by Temhil and Frost + - Creation (installation part based on Frost work with script.addon.installer) +""" + +REMOTE_DBG = False # For remote debugging with PyDev (Eclipse) + + +__script__ = "Unknown" +__plugin__ = "Repositories Installer" +__addonID__ = "plugin.program.repo.installer" +__author__ = "Temhil and Frost (http://passion-xbmc.org)" +__url__ = "http://passion-xbmc.org/index.php" +__svn_url__ = "http://passion-xbmc.googlecode.com/svn/trunk/addons/plugin.program.repository.installer/" +__credits__ = "Team XBMC Passion" +__platform__ = "xbmc media center" +__date__ = "03-21-2011" +__version__ = "1.0.3" +__svn_revision__ = 0 + + +import os +import urllib +from traceback import print_exc + +# xbmc modules +import xbmc +import xbmcplugin +import xbmcgui +import xbmcaddon + + + +__addon__ = xbmcaddon.Addon( __addonID__ ) +__settings__ = __addon__ +__language__ = __addon__.getLocalizedString +__addonDir__ = __settings__.getAddonInfo( "path" ) + + +# Remote debugger using Eclipse and Pydev +if REMOTE_DBG: + # Note pydevd module need to be copied in XBMC\system\python\Lib\pysrc + try: + import pysrc.pydevd as pydevd + pydevd.settrace('localhost', stdoutToServer=True, stderrToServer=True) + except ImportError: + sys.stderr.write("Error: " + + "You must add org.python.pydev.debug.pysrc to XBMC\system\python\Lib\pysrc") + sys.exit(1) + + +ROOTDIR = os.getcwd() +BASE_RESOURCE_PATH = os.path.join( ROOTDIR, "resources" ) +MEDIA_PATH = os.path.join( BASE_RESOURCE_PATH, "media" ) +ADDON_DATA = xbmc.translatePath( "special://profile/addon_data/%s/" % __addonID__ ) +REPO_LIST_URL = "http://wiki.xbmc.org/index.php?title=Unofficial_Add-on_Repositories" +REPO_PACKAGE_DIR = "special://home/addons/packages/" +REPO_INSTALL_DIR = "special://home/addons/" + +DIALOG_PROGRESS = xbmcgui.DialogProgress() + +#modules custom +try: + import resources.lib.wikiparser as wikiparser +except: + print_exc() + + + + +class RepoInstallerPlugin: + """ + main plugin class + """ + # define param key names + PARAM_NAME = 'name' + PARAM_ACTION = 'action' + PARAM_URL = 'url' + VALUE_INSTALL_FROM_ZIP = 'installfromzip' + VALUE_INSTALL_FROM_REPO = 'installfromrepo' + VALUE_INSTALL_ALL = 'installfromzip' + VALUE_DISPLAY_INFO = 'displayinfo' + + # Constant + colorList = ["red", "green", "yellow", "lightblue", None] + debugMode = False + shortTitleDisplay = False + + + def __init__( self, *args, **kwargs ): + + # Parse plugin parameters + self.parameters = self._parse_params() + + # Check settings + #if ( __settings__.getSetting('first_run') == 'true' ): + # #xbmcplugin.openSettings(sys.argv[0]) + #else: + # self.select() + self._set_title_display() + self.select() + + + def create_root_dir ( self ): + print "createRootDir" + xbmcplugin.setPluginCategory( handle=int( sys.argv[ 1 ] ), category=__language__( 30001 ) ) + print "Loading wiki page: %s"%REPO_LIST_URL + wikiparser.getRepoList(REPO_LIST_URL, addItemFunc=self._addLink, progressBar=None, msgFunc=None ) + self._add_sort_methods( True ) + self._end_of_directory( True ) + + + def install_repo(self, repoName, repoURL): + """ + Install a repository in XBMC + -> will need XBMC restart in order to have the new Repo taken in account by XBMC + """ + continueInstall = True + dialogYesNo = xbmcgui.Dialog() + if dialogYesNo.yesno(repoName, __language__( 30100 ), __language__( 30101 )): + if continueInstall: + ri = RepoInstaller() + + newRepo = ri.download( repoURL ) + print newRepo + + if newRepo: + fp, ok = ri.install( newRepo ) + print "---" + print fp, ok + xbmc.executebuiltin( 'XBMC.UpdateAddonRepos()' ) + try: + _N_ = Addon( os.path.basename( fp ) ) + print "Addon %s Installed"%s_N_ + ri.notification( _N_.getAddonInfo( "name" ), __language__( 24065 ).encode( "utf-8" ), 5000, _N_.getAddonInfo( "icon" ) ) + except: + xbmcgui.Dialog().ok( __settings__.getAddonInfo( "name" ), __language__( 30007 ) + " : " + repoName, __language__( 30010 ) ) + self._end_of_directory( True, update=False ) + + + + def select( self ): + try: + print "select" + print self.parameters + if len(self.parameters) < 1: + self.create_root_dir() + + elif self.PARAM_ACTION in self.parameters.keys(): + if self.parameters[self.PARAM_ACTION] == self.VALUE_INSTALL_FROM_ZIP: + repoName = self.parameters[self.PARAM_NAME] + repoURL = self.parameters[self.PARAM_URL] + #print repoName + #print repoURL + #xbmc.executebuiltin('XBMC.ActivateWindow(146)') + #xbmc.executebuiltin( "Action(Info)") + + self.install_repo(repoName, repoURL) + elif self.parameters[self.PARAM_ACTION] == self.VALUE_DISPLAY_INFO: + try: + from resources.lib.DialogRepoInfo import DialogRepoInfo + repoWindow = DialogRepoInfo( "DialogRepoInfo.xml", os.getcwd(), "Default", "720p" ) + del repoWindow + except: + print_exc() + self._end_of_directory( False ) + else: + self._end_of_directory( True, update=False ) + + except: + print_exc() + self._end_of_directory( False ) + + + def _parse_params( self ): + """ + Parses Plugin parameters and returns it as a dictionary + """ + paramDic={} + # Parameters are on the 3rd arg passed to the script + paramStr=sys.argv[2] + print paramStr + if len(paramStr)>1: + paramStr = paramStr.replace('?','') + + # Ignore last char if it is a '/' + if (paramStr[len(paramStr)-1]=='/'): + paramStr=paramStr[0:len(paramStr)-2] + + # Processing each parameter splited on '&' + for param in paramStr.split("&"): + try: + # Splitting couple key/value + key,value=param.split("=") + except: + key=param + value="" + + key = urllib.unquote_plus(key) + value = urllib.unquote_plus(value) + + # Filling dictionary + paramDic[key]=value + print paramDic + return paramDic + + + def _create_param_url(self, paramsDic): + """ + Create an plugin URL based on the key/value passed in a dictionary + """ + url = sys.argv[ 0 ] + sep = '?' + print paramsDic + try: + for param in paramsDic: + #TODO: solve error on name with non ascii char (generate exception) + url = url + sep + urllib.quote_plus( param ) + '=' + urllib.quote_plus( paramsDic[param] ) + sep = '&' + except: + url = None + print_exc() + return url + + def _set_title_display(self): + descriptInTitle =__settings__.getSetting('desintitle') + if descriptInTitle == 'true': + self.shortTitleDisplay = False + else: + self.shortTitleDisplay = True + + def _addLink( self, itemInfo ): + """ + Add a link to the list of items + """ + ok=True + + print itemInfo + + if itemInfo["ImageUrl"]: + icon = itemInfo["ImageUrl"] + else: + #icon = "DefaultFolder.png" + #icon = "DefaultAddon.png" + icon = os.path.join(MEDIA_PATH, "DefaultAddonRepository.png") + + descriptColor = self.colorList[ int( __settings__.getSetting( "descolor" ) ) ] + + if self.shortTitleDisplay: + labelTxt = itemInfo["name"] + else: + labelTxt = itemInfo["name"] + ": " + self._coloring( itemInfo["description"], descriptColor ) + liz=xbmcgui.ListItem( label=labelTxt, iconImage=icon, thumbnailImage=icon ) + liz.setInfo( type="addons", + infoLabels={ "title": itemInfo["name"], "Plot": itemInfo["description"] } ) + liz.setProperty("Addon.Name",itemInfo["name"]) + liz.setProperty("Addon.Version"," ") + liz.setProperty("Addon.Summary", "") + liz.setProperty("Addon.Description", itemInfo["description"]) + liz.setProperty("Addon.Type", __language__( 30011 )) + liz.setProperty("Addon.Creator", itemInfo["owner"]) + liz.setProperty("Addon.Disclaimer","") + liz.setProperty("Addon.Changelog", "") + liz.setProperty("Addon.ID", "") + liz.setProperty("Addon.Status", "Stable") + liz.setProperty("Addon.Broken", "Stable") + liz.setProperty("Addon.Path","") + liz.setProperty("Addon.Icon",icon) + + + + #dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30900 ), "XBMC.RunPlugin(%s?showtimes=%s)" % ( sys.argv[ 0 ], urllib.quote_plus( repr( video[ "title" ] ) ), ) ) + paramsMenu = {} + paramsMenu[self.PARAM_NAME] = itemInfo["name"] + paramsMenu[self.PARAM_ACTION] = self.VALUE_DISPLAY_INFO + urlMenu = self._create_param_url( paramsMenu ) + if urlMenu: + c_items = [ ( __language__( 30012 ), "XBMC.RunPlugin(%s)" % ( urlMenu)) ] + liz.addContextMenuItems( c_items ) + params = {} + params[self.PARAM_NAME] = itemInfo["name"] + params[self.PARAM_ACTION] = self.VALUE_INSTALL_FROM_ZIP + params[self.PARAM_URL] = itemInfo["repoUrl"] + urlRepo = self._create_param_url( params ) + if urlRepo: + ok=xbmcplugin.addDirectoryItem( handle=int(sys.argv[1]), url=urlRepo, listitem=liz, isFolder=False ) + return ok + + + def _end_of_directory( self, OK, update=False ): + xbmcplugin.endOfDirectory( handle=int( sys.argv[ 1 ] ), succeeded=OK, updateListing=update )#, cacheToDisc=True )#updateListing = True, + + def _add_sort_methods( self, OK ): + if ( OK ): + try: + xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_UNSORTED ) + xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_LABEL ) + except: + print_exc() + + def _coloring( self, text , color ): + if color: + if color == "red": color="FFFF0000" + if color == "green": color="FF00FF00" + if color == "yellow": color="FFFFFF00" + if color == "lightblue": color="FFB1C7EC" + colored_text = "[COLOR=%s]%s[/COLOR]" % ( color , text ) + else: + colored_text = text + return colored_text + + def _bold_text( self, text ): + """ FONCTION POUR METTRE UN MOT GRAS """ + return "[B]%s[/B]" % ( text, ) + + + +class RepoInstaller: + """ + main plugin class + """ + def download( self, url, destination=REPO_PACKAGE_DIR ): + try: + DIALOG_PROGRESS.create( __settings__.getAddonInfo( "name" ) ) + destination = xbmc.translatePath( destination ) + os.path.basename( url ) + def _report_hook( count, blocksize, totalsize ): + percent = int( float( count * blocksize * 100 ) / totalsize ) + DIALOG_PROGRESS.update( percent, __language__( 30005 ) % url, __language__( 30006 ) % destination ) + fp, h = urllib.urlretrieve( url, destination, _report_hook ) + print fp, h + return fp + except: + print_exc() + DIALOG_PROGRESS.close() + return "" + + + def install( self, filename ): + from resources.lib.extractor import extract + return extract( filename, xbmc.translatePath( REPO_INSTALL_DIR ) ) + + + def notification( self, header="", message="", sleep=5000, icon=__settings__.getAddonInfo( "icon" ) ): + """ Will display a notification dialog with the specified header and message, + in addition you can set the length of time it displays in milliseconds and a icon image. + """ + xbmc.executebuiltin( "XBMC.Notification(%s,%s,%i,%s)" % ( header, message, sleep, icon ) ) + + +####################################################################################################################### +# BEGIN ! +####################################################################################################################### + +if ( __name__ == "__main__" ): + try: + RepoInstallerPlugin() + except: + print_exc() diff --git a/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/icon.png b/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/icon.png new file mode 100644 index 0000000000..82cafbcb80 Binary files /dev/null and b/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/icon.png differ diff --git a/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/resources/__init__.py b/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/resources/__init__.py new file mode 100644 index 0000000000..ee074ac5a7 --- /dev/null +++ b/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/resources/__init__.py @@ -0,0 +1 @@ +# Dummy file to make this directory a package. diff --git a/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/resources/language/english/strings.xml b/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/resources/language/english/strings.xml new file mode 100644 index 0000000000..f52198f468 --- /dev/null +++ b/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/resources/language/english/strings.xml @@ -0,0 +1,37 @@ + + + + + Repositories Installer + Add-ons Repositories + + Downloading: %s + to: %s + Repository Installed + XBMC requires to restart! + Repository + Repository Info + + + + + Are you sure you want to Install this repository? + This will overwrite any repository with the same name + This repository is already installed + Do you want to continue and overwrite the existing repository? + + Error! + Error during %s repository install + Please check the logs + + + Appearance + Text color of description: + Red + Green + Yellow + Light Blue + None + + Display description with title + diff --git a/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/resources/language/french/strings.xml b/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/resources/language/french/strings.xml new file mode 100644 index 0000000000..590360f918 --- /dev/null +++ b/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/resources/language/french/strings.xml @@ -0,0 +1,37 @@ + + + + + Repositories Installer + Repositories d'Add-ons + + Téléchargement: %s + vers: %s + Repository Installé + XBMC doit redémarrer! + Repository + Infos Repository + + + + + Etes vous sure de vouloir installer ce repository? + Cela écrasera tout repository du meme nom + CE repository est déja installé + Voulez-vous continuer et écraser le repository existant? + + Erreur! + Erreur durant l'installation du repository %s + Veuillez vérifier les logs + + + Apparence + Couleur du texte de description: + Rouge + Vert + Jaune + Bleu Ciel + Aucune + + Afficher la description avec le titre + diff --git a/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/resources/lib/BeautifulSoup.py b/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/resources/lib/BeautifulSoup.py new file mode 100644 index 0000000000..0e214630c8 --- /dev/null +++ b/projects/ION/filesystem/usr/share/xbmc/addons/plugin.program.repo.installer/resources/lib/BeautifulSoup.py @@ -0,0 +1,1965 @@ +"""Beautiful Soup +Elixir and Tonic +"The Screen-Scraper's Friend" +http://www.crummy.com/software/BeautifulSoup/ + +Beautiful Soup parses a (possibly invalid) XML or HTML document into a +tree representation. It provides methods and Pythonic idioms that make +it easy to navigate, search, and modify the tree. + +A well-formed XML/HTML document yields a well-formed data +structure. An ill-formed XML/HTML document yields a correspondingly +ill-formed data structure. If your document is only locally +well-formed, you can use this library to find and process the +well-formed part of it. + +Beautiful Soup works with Python 2.2 and up. It has no external +dependencies, but you'll have more success at converting data to UTF-8 +if you also install these three packages: + +* chardet, for auto-detecting character encodings + http://chardet.feedparser.org/ +* cjkcodecs and iconv_codec, which add more encodings to the ones supported + by stock Python. + http://cjkpython.i18n.org/ + +Beautiful Soup defines classes for two main parsing strategies: + + * BeautifulStoneSoup, for parsing XML, SGML, or your domain-specific + language that kind of looks like XML. + + * BeautifulSoup, for parsing run-of-the-mill HTML code, be it valid + or invalid. This class has web browser-like heuristics for + obtaining a sensible parse tree in the face of common HTML errors. + +Beautiful Soup also defines a class (UnicodeDammit) for autodetecting +the encoding of an HTML or XML document, and converting it to +Unicode. Much of this code is taken from Mark Pilgrim's Universal Feed Parser. + +For more than you ever wanted to know about Beautiful Soup, see the +documentation: +http://www.crummy.com/software/BeautifulSoup/documentation.html + +Here, have some legalese: + +Copyright (c) 2004-2008, Leonard Richardson + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of the the Beautiful Soup Consortium and All + Night Kosher Bakery nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE, DAMMIT. + +""" +from __future__ import generators + +__author__ = "Leonard Richardson (leonardr@segfault.org)" +__version__ = "3.0.7a" +__copyright__ = "Copyright (c) 2004-2008 Leonard Richardson" +__license__ = "New-style BSD" + +from sgmllib import SGMLParser, SGMLParseError +import codecs +import markupbase +import types +import re +import sgmllib +try: + from htmlentitydefs import name2codepoint +except ImportError: + name2codepoint = {} +try: + set +except NameError: + from sets import Set as set + +#These hacks make Beautiful Soup able to parse XML with namespaces +sgmllib.tagfind = re.compile('[a-zA-Z][-_.:a-zA-Z0-9]*') +markupbase._declname_match = re.compile(r'[a-zA-Z][-_.:a-zA-Z0-9]*\s*').match + +DEFAULT_OUTPUT_ENCODING = "utf-8" + +# First, the classes that represent markup elements. + +class PageElement: + """Contains the navigational information for some part of the page + (either a tag or a piece of text)""" + + def setup(self, parent=None, previous=None): + """Sets up the initial relations between this element and + other elements.""" + self.parent = parent + self.previous = previous + self.next = None + self.previousSibling = None + self.nextSibling = None + if self.parent and self.parent.contents: + self.previousSibling = self.parent.contents[-1] + self.previousSibling.nextSibling = self + + def replaceWith(self, replaceWith): + oldParent = self.parent + myIndex = self.parent.contents.index(self) + if hasattr(replaceWith, 'parent') and replaceWith.parent == self.parent: + # We're replacing this element with one of its siblings. + index = self.parent.contents.index(replaceWith) + if index and index < myIndex: + # Furthermore, it comes before this element. That + # means that when we extract it, the index of this + # element will change. + myIndex = myIndex - 1 + self.extract() + oldParent.insert(myIndex, replaceWith) + + def extract(self): + """Destructively rips this element out of the tree.""" + if self.parent: + try: + self.parent.contents.remove(self) + except ValueError: + pass + + #Find the two elements that would be next to each other if + #this element (and any children) hadn't been parsed. Connect + #the two. + lastChild = self._lastRecursiveChild() + nextElement = lastChild.next + + if self.previous: + self.previous.next = nextElement + if nextElement: + nextElement.previous = self.previous + self.previous = None + lastChild.next = None + + self.parent = None + if self.previousSibling: + self.previousSibling.nextSibling = self.nextSibling + if self.nextSibling: + self.nextSibling.previousSibling = self.previousSibling + self.previousSibling = self.nextSibling = None + return self + + def _lastRecursiveChild(self): + "Finds the last element beneath this object to be parsed." + lastChild = self + while hasattr(lastChild, 'contents') and lastChild.contents: + lastChild = lastChild.contents[-1] + return lastChild + + def insert(self, position, newChild): + if (isinstance(newChild, basestring) + or isinstance(newChild, unicode)) \ + and not isinstance(newChild, NavigableString): + newChild = NavigableString(newChild) + + position = min(position, len(self.contents)) + if hasattr(newChild, 'parent') and newChild.parent != None: + # We're 'inserting' an element that's already one + # of this object's children. + if newChild.parent == self: + index = self.find(newChild) + if index and index < position: + # Furthermore we're moving it further down the + # list of this object's children. That means that + # when we extract this element, our target index + # will jump down one. + position = position - 1 + newChild.extract() + + newChild.parent = self + previousChild = None + if position == 0: + newChild.previousSibling = None + newChild.previous = self + else: + previousChild = self.contents[position-1] + newChild.previousSibling = previousChild + newChild.previousSibling.nextSibling = newChild + newChild.previous = previousChild._lastRecursiveChild() + if newChild.previous: + newChild.previous.next = newChild + + newChildsLastElement = newChild._lastRecursiveChild() + + if position >= len(self.contents): + newChild.nextSibling = None + + parent = self + parentsNextSibling = None + while not parentsNextSibling: + parentsNextSibling = parent.nextSibling + parent = parent.parent + if not parent: # This is the last element in the document. + break + if parentsNextSibling: + newChildsLastElement.next = parentsNextSibling + else: + newChildsLastElement.next = None + else: + nextChild = self.contents[position] + newChild.nextSibling = nextChild + if newChild.nextSibling: + newChild.nextSibling.previousSibling = newChild + newChildsLastElement.next = nextChild + + if newChildsLastElement.next: + newChildsLastElement.next.previous = newChildsLastElement + self.contents.insert(position, newChild) + + def append(self, tag): + """Appends the given tag to the contents of this tag.""" + self.insert(len(self.contents), tag) + + def findNext(self, name=None, attrs={}, text=None, **kwargs): + """Returns the first item that matches the given criteria and + appears after this Tag in the document.""" + return self._findOne(self.findAllNext, name, attrs, text, **kwargs) + + def findAllNext(self, name=None, attrs={}, text=None, limit=None, + **kwargs): + """Returns all items that match the given criteria and appear + after this Tag in the document.""" + return self._findAll(name, attrs, text, limit, self.nextGenerator, + **kwargs) + + def findNextSibling(self, name=None, attrs={}, text=None, **kwargs): + """Returns the closest sibling to this Tag that matches the + given criteria and appears after this Tag in the document.""" + return self._findOne(self.findNextSiblings, name, attrs, text, + **kwargs) + + def findNextSiblings(self, name=None, attrs={}, text=None, limit=None, + **kwargs): + """Returns the siblings of this Tag that match the given + criteria and appear after this Tag in the document.""" + return self._findAll(name, attrs, text, limit, + self.nextSiblingGenerator, **kwargs) + fetchNextSiblings = findNextSiblings # Compatibility with pre-3.x + + def findPrevious(self, name=None, attrs={}, text=None, **kwargs): + """Returns the first item that matches the given criteria and + appears before this Tag in the document.""" + return self._findOne(self.findAllPrevious, name, attrs, text, **kwargs) + + def findAllPrevious(self, name=None, attrs={}, text=None, limit=None, + **kwargs): + """Returns all items that match the given criteria and appear + before this Tag in the document.""" + return self._findAll(name, attrs, text, limit, self.previousGenerator, + **kwargs) + fetchPrevious = findAllPrevious # Compatibility with pre-3.x + + def findPreviousSibling(self, name=None, attrs={}, text=None, **kwargs): + """Returns the closest sibling to this Tag that matches the + given criteria and appears before this Tag in the document.""" + return self._findOne(self.findPreviousSiblings, name, attrs, text, + **kwargs) + + def findPreviousSiblings(self, name=None, attrs={}, text=None, + limit=None, **kwargs): + """Returns the siblings of this Tag that match the given + criteria and appear before this Tag in the document.""" + return self._findAll(name, attrs, text, limit, + self.previousSiblingGenerator, **kwargs) + fetchPreviousSiblings = findPreviousSiblings # Compatibility with pre-3.x + + def findParent(self, name=None, attrs={}, **kwargs): + """Returns the closest parent of this Tag that matches the given + criteria.""" + # NOTE: We can't use _findOne because findParents takes a different + # set of arguments. + r = None + l = self.findParents(name, attrs, 1) + if l: + r = l[0] + return r + + def findParents(self, name=None, attrs={}, limit=None, **kwargs): + """Returns the parents of this Tag that match the given + criteria.""" + + return self._findAll(name, attrs, None, limit, self.parentGenerator, + **kwargs) + fetchParents = findParents # Compatibility with pre-3.x + + #These methods do the real heavy lifting. + + def _findOne(self, method, name, attrs, text, **kwargs): + r = None + l = method(name, attrs, text, 1, **kwargs) + if l: + r = l[0] + return r + + def _findAll(self, name, attrs, text, limit, generator, **kwargs): + "Iterates over a generator looking for things that match." + + if isinstance(name, SoupStrainer): + strainer = name + else: + # Build a SoupStrainer + strainer = SoupStrainer(name, attrs, text, **kwargs) + results = ResultSet(strainer) + g = generator() + while True: + try: + i = g.next() + except StopIteration: + break + if i: + found = strainer.search(i) + if found: + results.append(found) + if limit and len(results) >= limit: + break + return results + + #These Generators can be used to navigate starting from both + #NavigableStrings and Tags. + def nextGenerator(self): + i = self + while i: + i = i.next + yield i + + def nextSiblingGenerator(self): + i = self + while i: + i = i.nextSibling + yield i + + def previousGenerator(self): + i = self + while i: + i = i.previous + yield i + + def previousSiblingGenerator(self): + i = self + while i: + i = i.previousSibling + yield i + + def parentGenerator(self): + i = self + while i: + i = i.parent + yield i + + # Utility methods + def substituteEncoding(self, str, encoding=None): + encoding = encoding or "utf-8" + return str.replace("%SOUP-ENCODING%", encoding) + + def toEncoding(self, s, encoding=None): + """Encodes an object to a string in some encoding, or to Unicode. + .""" + if isinstance(s, unicode): + if encoding: + s = s.encode(encoding) + elif isinstance(s, str): + if encoding: + s = s.encode(encoding) + else: + s = unicode(s) + else: + if encoding: + s = self.toEncoding(str(s), encoding) + else: + s = unicode(s) + return s + +class NavigableString(unicode, PageElement): + + def __new__(cls, value): + """Create a new NavigableString. + + When unpickling a NavigableString, this method is called with + the string in DEFAULT_OUTPUT_ENCODING. That encoding needs to be + passed in to the superclass's __new__ or the superclass won't know + how to handle non-ASCII characters. + """ + if isinstance(value, unicode): + return unicode.__new__(cls, value) + return unicode.__new__(cls, value, DEFAULT_OUTPUT_ENCODING) + + def __getnewargs__(self): + return (NavigableString.__str__(self),) + + def __getattr__(self, attr): + """text.string gives you text. This is for backwards + compatibility for Navigable*String, but for CData* it lets you + get the string without the CData wrapper.""" + if attr == 'string': + return self + else: + raise AttributeError, "'%s' object has no attribute '%s'" % (self.__class__.__name__, attr) + + def __unicode__(self): + return str(self).decode(DEFAULT_OUTPUT_ENCODING) + + def __str__(self, encoding=DEFAULT_OUTPUT_ENCODING): + if encoding: + return self.encode(encoding) + else: + return self + +class CData(NavigableString): + + def __str__(self, encoding=DEFAULT_OUTPUT_ENCODING): + return "" % NavigableString.__str__(self, encoding) + +class ProcessingInstruction(NavigableString): + def __str__(self, encoding=DEFAULT_OUTPUT_ENCODING): + output = self + if "%SOUP-ENCODING%" in output: + output = self.substituteEncoding(output, encoding) + return "" % self.toEncoding(output, encoding) + +class Comment(NavigableString): + def __str__(self, encoding=DEFAULT_OUTPUT_ENCODING): + return "" % NavigableString.__str__(self, encoding) + +class Declaration(NavigableString): + def __str__(self, encoding=DEFAULT_OUTPUT_ENCODING): + return "" % NavigableString.__str__(self, encoding) + +class Tag(PageElement): + + """Represents a found HTML tag with its attributes and contents.""" + + def _invert(h): + "Cheap function to invert a hash." + i = {} + for k,v in h.items(): + i[v] = k + return i + + XML_ENTITIES_TO_SPECIAL_CHARS = { "apos" : "'", + "quot" : '"', + "amp" : "&", + "lt" : "<", + "gt" : ">" } + + XML_SPECIAL_CHARS_TO_ENTITIES = _invert(XML_ENTITIES_TO_SPECIAL_CHARS) + + def _convertEntities(self, match): + """Used in a call to re.sub to replace HTML, XML, and numeric + entities with the appropriate Unicode characters. If HTML + entities are being converted, any unrecognized entities are + escaped.""" + x = match.group(1) + if self.convertHTMLEntities and x in name2codepoint: + return unichr(name2codepoint[x]) + elif x in self.XML_ENTITIES_TO_SPECIAL_CHARS: + if self.convertXMLEntities: + return self.XML_ENTITIES_TO_SPECIAL_CHARS[x] + else: + return u'&%s;' % x + elif len(x) > 0 and x[0] == '#': + # Handle numeric entities + if len(x) > 1 and x[1] == 'x': + return unichr(int(x[2:], 16)) + else: + return unichr(int(x[1:])) + + elif self.escapeUnrecognizedEntities: + return u'&%s;' % x + else: + return u'&%s;' % x + + def __init__(self, parser, name, attrs=None, parent=None, + previous=None): + "Basic constructor." + + # We don't actually store the parser object: that lets extracted + # chunks be garbage-collected + self.parserClass = parser.__class__ + self.isSelfClosing = parser.isSelfClosingTag(name) + self.name = name + if attrs == None: + attrs = [] + self.attrs = attrs + self.contents = [] + self.setup(parent, previous) + self.hidden = False + self.containsSubstitutions = False + self.convertHTMLEntities = parser.convertHTMLEntities + self.convertXMLEntities = parser.convertXMLEntities + self.escapeUnrecognizedEntities = parser.escapeUnrecognizedEntities + + # Convert any HTML, XML, or numeric entities in the attribute values. + convert = lambda(k, val): (k, + re.sub("&(#\d+|#x[0-9a-fA-F]+|\w+);", + self._convertEntities, + val)) + self.attrs = map(convert, self.attrs) + + def get(self, key, default=None): + """Returns the value of the 'key' attribute for the tag, or + the value given for 'default' if it doesn't have that + attribute.""" + return self._getAttrMap().get(key, default) + + def has_key(self, key): + return self._getAttrMap().has_key(key) + + def __getitem__(self, key): + """tag[key] returns the value of the 'key' attribute for the tag, + and throws an exception if it's not there.""" + return self._getAttrMap()[key] + + def __iter__(self): + "Iterating over a tag iterates over its contents." + return iter(self.contents) + + def __len__(self): + "The length of a tag is the length of its list of contents." + return len(self.contents) + + def __contains__(self, x): + return x in self.contents + + def __nonzero__(self): + "A tag is non-None even if it has no contents." + return True + + def __setitem__(self, key, value): + """Setting tag[key] sets the value of the 'key' attribute for the + tag.""" + self._getAttrMap() + self.attrMap[key] = value + found = False + for i in range(0, len(self.attrs)): + if self.attrs[i][0] == key: + self.attrs[i] = (key, value) + found = True + if not found: + self.attrs.append((key, value)) + self._getAttrMap()[key] = value + + def __delitem__(self, key): + "Deleting tag[key] deletes all 'key' attributes for the tag." + for item in self.attrs: + if item[0] == key: + self.attrs.remove(item) + #We don't break because bad HTML can define the same + #attribute multiple times. + self._getAttrMap() + if self.attrMap.has_key(key): + del self.attrMap[key] + + def __call__(self, *args, **kwargs): + """Calling a tag like a function is the same as calling its + findAll() method. Eg. tag('a') returns a list of all the A tags + found within this tag.""" + return apply(self.findAll, args, kwargs) + + def __getattr__(self, tag): + #print "Getattr %s.%s" % (self.__class__, tag) + if len(tag) > 3 and tag.rfind('Tag') == len(tag)-3: + return self.find(tag[:-3]) + elif tag.find('__') != 0: + return self.find(tag) + raise AttributeError, "'%s' object has no attribute '%s'" % (self.__class__, tag) + + def __eq__(self, other): + """Returns true iff this tag has the same name, the same attributes, + and the same contents (recursively) as the given tag. + + NOTE: right now this will return false if two tags have the + same attributes in a different order. Should this be fixed?""" + if not hasattr(other, 'name') or not hasattr(other, 'attrs') or not hasattr(other, 'contents') or self.name != other.name or self.attrs != other.attrs or len(self) != len(other): + return False + for i in range(0, len(self.contents)): + if self.contents[i] != other.contents[i]: + return False + return True + + def __ne__(self, other): + """Returns true iff this tag is not identical to the other tag, + as defined in __eq__.""" + return not self == other + + def __repr__(self, encoding=DEFAULT_OUTPUT_ENCODING): + """Renders this tag as a string.""" + return self.__str__(encoding) + + def __unicode__(self): + return self.__str__(None) + + BARE_AMPERSAND_OR_BRACKET = re.compile("([<>]|" + + "&(?!#\d+;|#x[0-9a-fA-F]+;|\w+;)" + + ")") + + def _sub_entity(self, x): + """Used with a regular expression to substitute the + appropriate XML entity for an XML special character.""" + return "&" + self.XML_SPECIAL_CHARS_TO_ENTITIES[x.group(0)[0]] + ";" + + def __str__(self, encoding=DEFAULT_OUTPUT_ENCODING, + prettyPrint=False, indentLevel=0): + """Returns a string or Unicode representation of this tag and + its contents. To get Unicode, pass None for encoding. + + NOTE: since Python's HTML parser consumes whitespace, this + method is not certain to reproduce the whitespace present in + the original string.""" + + encodedName = self.toEncoding(self.name, encoding) + + attrs = [] + if self.attrs: + for key, val in self.attrs: + fmt = '%s="%s"' + if isString(val): + if self.containsSubstitutions and '%SOUP-ENCODING%' in val: + val = self.substituteEncoding(val, encoding) + + # The attribute value either: + # + # * Contains no embedded double quotes or single quotes. + # No problem: we enclose it in double quotes. + # * Contains embedded single quotes. No problem: + # double quotes work here too. + # * Contains embedded double quotes. No problem: + # we enclose it in single quotes. + # * Embeds both single _and_ double quotes. This + # can't happen naturally, but it can happen if + # you modify an attribute value after parsing + # the document. Now we have a bit of a + # problem. We solve it by enclosing the + # attribute in single quotes, and escaping any + # embedded single quotes to XML entities. + if '"' in val: + fmt = "%s='%s'" + if "'" in val: + # TODO: replace with apos when + # appropriate. + val = val.replace("'", "&squot;") + + # Now we're okay w/r/t quotes. But the attribute + # value might also contain angle brackets, or + # ampersands that aren't part of entities. We need + # to escape those to XML entities too. + val = self.BARE_AMPERSAND_OR_BRACKET.sub(self._sub_entity, val) + + attrs.append(fmt % (self.toEncoding(key, encoding), + self.toEncoding(val, encoding))) + close = '' + closeTag = '' + if self.isSelfClosing: + close = ' /' + else: + closeTag = '' % encodedName + + indentTag, indentContents = 0, 0 + if prettyPrint: + indentTag = indentLevel + space = (' ' * (indentTag-1)) + indentContents = indentTag + 1 + contents = self.renderContents(encoding, prettyPrint, indentContents) + if self.hidden: + s = contents + else: + s = [] + attributeString = '' + if attrs: + attributeString = ' ' + ' '.join(attrs) + if prettyPrint: + s.append(space) + s.append('<%s%s%s>' % (encodedName, attributeString, close)) + if prettyPrint: + s.append("\n") + s.append(contents) + if prettyPrint and contents and contents[-1] != "\n": + s.append("\n") + if prettyPrint and closeTag: + s.append(space) + s.append(closeTag) + if prettyPrint and closeTag and self.nextSibling: + s.append("\n") + s = ''.join(s) + return s + + def decompose(self): + """Recursively destroys the contents of this tree.""" + contents = [i for i in self.contents] + for i in contents: + if isinstance(i, Tag): + i.decompose() + else: + i.extract() + self.extract() + + def prettify(self, encoding=DEFAULT_OUTPUT_ENCODING): + return self.__str__(encoding, True) + + def renderContents(self, encoding=DEFAULT_OUTPUT_ENCODING, + prettyPrint=False, indentLevel=0): + """Renders the contents of this tag as a string in the given + encoding. If encoding is None, returns a Unicode string..""" + s=[] + for c in self: + text = None + if isinstance(c, NavigableString): + text = c.__str__(encoding) + elif isinstance(c, Tag): + s.append(c.__str__(encoding, prettyPrint, indentLevel)) + if text and prettyPrint: + text = text.strip() + if text: + if prettyPrint: + s.append(" " * (indentLevel-1)) + s.append(text) + if prettyPrint: + s.append("\n") + return ''.join(s) + + #Soup methods + + def find(self, name=None, attrs={}, recursive=True, text=None, + **kwargs): + """Return only the first child of this Tag matching the given + criteria.""" + r = None + l = self.findAll(name, attrs, recursive, text, 1, **kwargs) + if l: + r = l[0] + return r + findChild = find + + def findAll(self, name=None, attrs={}, recursive=True, text=None, + limit=None, **kwargs): + """Extracts a list of Tag objects that match the given + criteria. You can specify the name of the Tag and any + attributes you want the Tag to have. + + The value of a key-value pair in the 'attrs' map can be a + string, a list of strings, a regular expression object, or a + callable that takes a string and returns whether or not the + string matches for some custom definition of 'matches'. The + same is true of the tag name.""" + generator = self.recursiveChildGenerator + if not recursive: + generator = self.childGenerator + return self._findAll(name, attrs, text, limit, generator, **kwargs) + findChildren = findAll + + # Pre-3.x compatibility methods + first = find + fetch = findAll + + def fetchText(self, text=None, recursive=True, limit=None): + return self.findAll(text=text, recursive=recursive, limit=limit) + + def firstText(self, text=None, recursive=True): + return self.find(text=text, recursive=recursive) + + #Private methods + + def _getAttrMap(self): + """Initializes a map representation of this tag's attributes, + if not already initialized.""" + if not getattr(self, 'attrMap'): + self.attrMap = {} + for (key, value) in self.attrs: + self.attrMap[key] = value + return self.attrMap + + #Generator methods + def childGenerator(self): + for i in range(0, len(self.contents)): + yield self.contents[i] + raise StopIteration + + def recursiveChildGenerator(self): + stack = [(self, 0)] + while stack: + tag, start = stack.pop() + if isinstance(tag, Tag): + for i in range(start, len(tag.contents)): + a = tag.contents[i] + yield a + if isinstance(a, Tag) and tag.contents: + if i < len(tag.contents) - 1: + stack.append((tag, i+1)) + stack.append((a, 0)) + break + raise StopIteration + +# Next, a couple classes to represent queries and their results. +class SoupStrainer: + """Encapsulates a number of ways of matching a markup element (tag or + text).""" + + def __init__(self, name=None, attrs={}, text=None, **kwargs): + self.name = name + if isString(attrs): + kwargs['class'] = attrs + attrs = None + if kwargs: + if attrs: + attrs = attrs.copy() + attrs.update(kwargs) + else: + attrs = kwargs + self.attrs = attrs + self.text = text + + def __str__(self): + if self.text: + return self.text + else: + return "%s|%s" % (self.name, self.attrs) + + def searchTag(self, markupName=None, markupAttrs={}): + found = None + markup = None + if isinstance(markupName, Tag): + markup = markupName + markupAttrs = markup + callFunctionWithTagData = callable(self.name) \ + and not isinstance(markupName, Tag) + + if (not self.name) \ + or callFunctionWithTagData \ + or (markup and self._matches(markup, self.name)) \ + or (not markup and self._matches(markupName, self.name)): + if callFunctionWithTagData: + match = self.name(markupName, markupAttrs) + else: + match = True + markupAttrMap = None + for attr, matchAgainst in self.attrs.items(): + if not markupAttrMap: + if hasattr(markupAttrs, 'get'): + markupAttrMap = markupAttrs + else: + markupAttrMap = {} + for k,v in markupAttrs: + markupAttrMap[k] = v + attrValue = markupAttrMap.get(attr) + if not self._matches(attrValue, matchAgainst): + match = False + break + if match: + if markup: + found = markup + else: + found = markupName + return found + + def search(self, markup): + #print 'looking for %s in %s' % (self, markup) + found = None + # If given a list of items, scan it for a text element that + # matches. + if isList(markup) and not isinstance(markup, Tag): + for element in markup: + if isinstance(element, NavigableString) \ + and self.search(element): + found = element + break + # If it's a Tag, make sure its name or attributes match. + # Don't bother with Tags if we're searching for text. + elif isinstance(markup, Tag): + if not self.text: + found = self.searchTag(markup) + # If it's text, make sure the text matches. + elif isinstance(markup, NavigableString) or \ + isString(markup): + if self._matches(markup, self.text): + found = markup + else: + raise Exception, "I don't know how to match against a %s" \ + % markup.__class__ + return found + + def _matches(self, markup, matchAgainst): + #print "Matching %s against %s" % (markup, matchAgainst) + result = False + if matchAgainst == True and type(matchAgainst) == types.BooleanType: + result = markup != None + elif callable(matchAgainst): + result = matchAgainst(markup) + else: + #Custom match methods take the tag as an argument, but all + #other ways of matching match the tag name as a string. + if isinstance(markup, Tag): + markup = markup.name + if markup and not isString(markup): + markup = unicode(markup) + #Now we know that chunk is either a string, or None. + if hasattr(matchAgainst, 'match'): + # It's a regexp object. + result = markup and matchAgainst.search(markup) + elif isList(matchAgainst): + result = markup in matchAgainst + elif hasattr(matchAgainst, 'items'): + result = markup.has_key(matchAgainst) + elif matchAgainst and isString(markup): + if isinstance(markup, unicode): + matchAgainst = unicode(matchAgainst) + else: + matchAgainst = str(matchAgainst) + + if not result: + result = matchAgainst == markup + return result + +class ResultSet(list): + """A ResultSet is just a list that keeps track of the SoupStrainer + that created it.""" + def __init__(self, source): + list.__init__([]) + self.source = source + +# Now, some helper functions. + +def isList(l): + """Convenience method that works with all 2.x versions of Python + to determine whether or not something is listlike.""" + return hasattr(l, '__iter__') \ + or (type(l) in (types.ListType, types.TupleType)) + +def isString(s): + """Convenience method that works with all 2.x versions of Python + to determine whether or not something is stringlike.""" + try: + return isinstance(s, unicode) or isinstance(s, basestring) + except NameError: + return isinstance(s, str) + +def buildTagMap(default, *args): + """Turns a list of maps, lists, or scalars into a single map. + Used to build the SELF_CLOSING_TAGS, NESTABLE_TAGS, and + NESTING_RESET_TAGS maps out of lists and partial maps.""" + built = {} + for portion in args: + if hasattr(portion, 'items'): + #It's a map. Merge it. + for k,v in portion.items(): + built[k] = v + elif isList(portion): + #It's a list. Map each item to the default. + for k in portion: + built[k] = default + else: + #It's a scalar. Map it to the default. + built[portion] = default + return built + +# Now, the parser classes. + +class BeautifulStoneSoup(Tag, SGMLParser): + + """This class contains the basic parser and search code. It defines + a parser that knows nothing about tag behavior except for the + following: + + You can't close a tag without closing all the tags it encloses. + That is, "" actually means + "". + + [Another possible explanation is "", but since + this class defines no SELF_CLOSING_TAGS, it will never use that + explanation.] + + This class is useful for parsing XML or made-up markup languages, + or when BeautifulSoup makes an assumption counter to what you were + expecting.""" + + SELF_CLOSING_TAGS = {} + NESTABLE_TAGS = {} + RESET_NESTING_TAGS = {} + QUOTE_TAGS = {} + PRESERVE_WHITESPACE_TAGS = [] + + MARKUP_MASSAGE = [(re.compile('(<[^<>]*)/>'), + lambda x: x.group(1) + ' />'), + (re.compile(']*)>'), + lambda x: '') + ] + + ROOT_TAG_NAME = u'[document]' + + HTML_ENTITIES = "html" + XML_ENTITIES = "xml" + XHTML_ENTITIES = "xhtml" + # TODO: This only exists for backwards-compatibility + ALL_ENTITIES = XHTML_ENTITIES + + # Used when determining whether a text node is all whitespace and + # can be replaced with a single space. A text node that contains + # fancy Unicode spaces (usually non-breaking) should be left + # alone. + STRIP_ASCII_SPACES = { 9: None, 10: None, 12: None, 13: None, 32: None, } + + def __init__(self, markup="", parseOnlyThese=None, fromEncoding=None, + markupMassage=True, smartQuotesTo=XML_ENTITIES, + convertEntities=None, selfClosingTags=None, isHTML=False): + """The Soup object is initialized as the 'root tag', and the + provided markup (which can be a string or a file-like object) + is fed into the underlying parser. + + sgmllib will process most bad HTML, and the BeautifulSoup + class has some tricks for dealing with some HTML that kills + sgmllib, but Beautiful Soup can nonetheless choke or lose data + if your data uses self-closing tags or declarations + incorrectly. + + By default, Beautiful Soup uses regexes to sanitize input, + avoiding the vast majority of these problems. If the problems + don't apply to you, pass in False for markupMassage, and + you'll get better performance. + + The default parser massage techniques fix the two most common + instances of invalid HTML that choke sgmllib: + +
(No space between name of closing tag and tag close) + (Extraneous whitespace in declaration) + + You can pass in a custom list of (RE object, replace method) + tuples to get Beautiful Soup to scrub your input the way you + want.""" + + self.parseOnlyThese = parseOnlyThese + self.fromEncoding = fromEncoding + self.smartQuotesTo = smartQuotesTo + self.convertEntities = convertEntities + # Set the rules for how we'll deal with the entities we + # encounter + if self.convertEntities: + # It doesn't make sense to convert encoded characters to + # entities even while you're converting entities to Unicode. + # Just convert it all to Unicode. + self.smartQuotesTo = None + if convertEntities == self.HTML_ENTITIES: + self.convertXMLEntities = False + self.convertHTMLEntities = True + self.escapeUnrecognizedEntities = True + elif convertEntities == self.XHTML_ENTITIES: + self.convertXMLEntities = True + self.convertHTMLEntities = True + self.escapeUnrecognizedEntities = False + elif convertEntities == self.XML_ENTITIES: + self.convertXMLEntities = True + self.convertHTMLEntities = False + self.escapeUnrecognizedEntities = False + else: + self.convertXMLEntities = False + self.convertHTMLEntities = False + self.escapeUnrecognizedEntities = False + + self.instanceSelfClosingTags = buildTagMap(None, selfClosingTags) + SGMLParser.__init__(self) + + if hasattr(markup, 'read'): # It's a file-type object. + markup = markup.read() + self.markup = markup + self.markupMassage = markupMassage + try: + self._feed(isHTML=isHTML) + except StopParsing: + pass + self.markup = None # The markup can now be GCed + + def convert_charref(self, name): + """This method fixes a bug in Python's SGMLParser.""" + try: + n = int(name) + except ValueError: + return + if not 0 <= n <= 127 : # ASCII ends at 127, not 255 + return + return self.convert_codepoint(n) + + def _feed(self, inDocumentEncoding=None, isHTML=False): + # Convert the document to Unicode. + markup = self.markup + if isinstance(markup, unicode): + if not hasattr(self, 'originalEncoding'): + self.originalEncoding = None + else: + dammit = UnicodeDammit\ + (markup, [self.fromEncoding, inDocumentEncoding], + smartQuotesTo=self.smartQuotesTo, isHTML=isHTML) + markup = dammit.unicode + self.originalEncoding = dammit.originalEncoding + self.declaredHTMLEncoding = dammit.declaredHTMLEncoding + if markup: + if self.markupMassage: + if not isList(self.markupMassage): + self.markupMassage = self.MARKUP_MASSAGE + for fix, m in self.markupMassage: + markup = fix.sub(m, markup) + # TODO: We get rid of markupMassage so that the + # soup object can be deepcopied later on. Some + # Python installations can't copy regexes. If anyone + # was relying on the existence of markupMassage, this + # might cause problems. + del(self.markupMassage) + self.reset() + + SGMLParser.feed(self, markup) + # Close out any unfinished strings and close all the open tags. + self.endData() + while self.currentTag.name != self.ROOT_TAG_NAME: + self.popTag() + + def __getattr__(self, methodName): + """This method routes method call requests to either the SGMLParser + superclass or the Tag superclass, depending on the method name.""" + #print "__getattr__ called on %s.%s" % (self.__class__, methodName) + + if methodName.find('start_') == 0 or methodName.find('end_') == 0 \ + or methodName.find('do_') == 0: + return SGMLParser.__getattr__(self, methodName) + elif methodName.find('__') != 0: + return Tag.__getattr__(self, methodName) + else: + raise AttributeError + + def isSelfClosingTag(self, name): + """Returns true iff the given string is the name of a + self-closing tag according to this parser.""" + return self.SELF_CLOSING_TAGS.has_key(name) \ + or self.instanceSelfClosingTags.has_key(name) + + def reset(self): + Tag.__init__(self, self, self.ROOT_TAG_NAME) + self.hidden = 1 + SGMLParser.reset(self) + self.currentData = [] + self.currentTag = None + self.tagStack = [] + self.quoteStack = [] + self.pushTag(self) + + def popTag(self): + tag = self.tagStack.pop() + # Tags with just one string-owning child get the child as a + # 'string' property, so that soup.tag.string is shorthand for + # soup.tag.contents[0] + if len(self.currentTag.contents) == 1 and \ + isinstance(self.currentTag.contents[0], NavigableString): + self.currentTag.string = self.currentTag.contents[0] + + #print "Pop", tag.name + if self.tagStack: + self.currentTag = self.tagStack[-1] + return self.currentTag + + def pushTag(self, tag): + #print "Push", tag.name + if self.currentTag: + self.currentTag.contents.append(tag) + self.tagStack.append(tag) + self.currentTag = self.tagStack[-1] + + def endData(self, containerClass=NavigableString): + if self.currentData: + currentData = u''.join(self.currentData) + if (currentData.translate(self.STRIP_ASCII_SPACES) == '' and + not set([tag.name for tag in self.tagStack]).intersection( + self.PRESERVE_WHITESPACE_TAGS)): + if '\n' in currentData: + currentData = '\n' + else: + currentData = ' ' + self.currentData = [] + if self.parseOnlyThese and len(self.tagStack) <= 1 and \ + (not self.parseOnlyThese.text or \ + not self.parseOnlyThese.search(currentData)): + return + o = containerClass(currentData) + o.setup(self.currentTag, self.previous) + if self.previous: + self.previous.next = o + self.previous = o + self.currentTag.contents.append(o) + + + def _popToTag(self, name, inclusivePop=True): + """Pops the tag stack up to and including the most recent + instance of the given tag. If inclusivePop is false, pops the tag + stack up to but *not* including the most recent instqance of + the given tag.""" + #print "Popping to %s" % name + if name == self.ROOT_TAG_NAME: + return + + numPops = 0 + mostRecentTag = None + for i in range(len(self.tagStack)-1, 0, -1): + if name == self.tagStack[i].name: + numPops = len(self.tagStack)-i + break + if not inclusivePop: + numPops = numPops - 1 + + for i in range(0, numPops): + mostRecentTag = self.popTag() + return mostRecentTag + + def _smartPop(self, name): + + """We need to pop up to the previous tag of this type, unless + one of this tag's nesting reset triggers comes between this + tag and the previous tag of this type, OR unless this tag is a + generic nesting trigger and another generic nesting trigger + comes between this tag and the previous tag of this type. + + Examples: +

FooBar *

* should pop to 'p', not 'b'. +

FooBar *

* should pop to 'table', not 'p'. +

Foo

Bar *

* should pop to 'tr', not 'p'. + +

    • *
    • * should pop to 'ul', not the first 'li'. +
  • ** should pop to 'table', not the first 'tr' + tag should + implicitly close the previous tag within the same
    ** should pop to 'tr', not the first 'td' + """ + + nestingResetTriggers = self.NESTABLE_TAGS.get(name) + isNestable = nestingResetTriggers != None + isResetNesting = self.RESET_NESTING_TAGS.has_key(name) + popTo = None + inclusive = True + for i in range(len(self.tagStack)-1, 0, -1): + p = self.tagStack[i] + if (not p or p.name == name) and not isNestable: + #Non-nestable tags get popped to the top or to their + #last occurance. + popTo = name + break + if (nestingResetTriggers != None + and p.name in nestingResetTriggers) \ + or (nestingResetTriggers == None and isResetNesting + and self.RESET_NESTING_TAGS.has_key(p.name)): + + #If we encounter one of the nesting reset triggers + #peculiar to this tag, or we encounter another tag + #that causes nesting to reset, pop up to but not + #including that tag. + popTo = p.name + inclusive = False + break + p = p.parent + if popTo: + self._popToTag(popTo, inclusive) + + def unknown_starttag(self, name, attrs, selfClosing=0): + #print "Start tag %s: %s" % (name, attrs) + if self.quoteStack: + #This is not a real tag. + #print "<%s> is not real!" % name + attrs = ''.join(map(lambda(x, y): ' %s="%s"' % (x, y), attrs)) + self.handle_data('<%s%s>' % (name, attrs)) + return + self.endData() + + if not self.isSelfClosingTag(name) and not selfClosing: + self._smartPop(name) + + if self.parseOnlyThese and len(self.tagStack) <= 1 \ + and (self.parseOnlyThese.text or not self.parseOnlyThese.searchTag(name, attrs)): + return + + tag = Tag(self, name, attrs, self.currentTag, self.previous) + if self.previous: + self.previous.next = tag + self.previous = tag + self.pushTag(tag) + if selfClosing or self.isSelfClosingTag(name): + self.popTag() + if name in self.QUOTE_TAGS: + #print "Beginning quote (%s)" % name + self.quoteStack.append(name) + self.literal = 1 + return tag + + def unknown_endtag(self, name): + #print "End tag %s" % name + if self.quoteStack and self.quoteStack[-1] != name: + #This is not a real end tag. + #print " is not real!" % name + self.handle_data('' % name) + return + self.endData() + self._popToTag(name) + if self.quoteStack and self.quoteStack[-1] == name: + self.quoteStack.pop() + self.literal = (len(self.quoteStack) > 0) + + def handle_data(self, data): + self.currentData.append(data) + + def _toStringSubclass(self, text, subclass): + """Adds a certain piece of text to the tree as a NavigableString + subclass.""" + self.endData() + self.handle_data(text) + self.endData(subclass) + + def handle_pi(self, text): + """Handle a processing instruction as a ProcessingInstruction + object, possibly one with a %SOUP-ENCODING% slot into which an + encoding will be plugged later.""" + if text[:3] == "xml": + text = u"xml version='1.0' encoding='%SOUP-ENCODING%'" + self._toStringSubclass(text, ProcessingInstruction) + + def handle_comment(self, text): + "Handle comments as Comment objects." + self._toStringSubclass(text, Comment) + + def handle_charref(self, ref): + "Handle character references as data." + if self.convertEntities: + data = unichr(int(ref)) + else: + data = '&#%s;' % ref + self.handle_data(data) + + def handle_entityref(self, ref): + """Handle entity references as data, possibly converting known + HTML and/or XML entity references to the corresponding Unicode + characters.""" + data = None + if self.convertHTMLEntities: + try: + data = unichr(name2codepoint[ref]) + except KeyError: + pass + + if not data and self.convertXMLEntities: + data = self.XML_ENTITIES_TO_SPECIAL_CHARS.get(ref) + + if not data and self.convertHTMLEntities and \ + not self.XML_ENTITIES_TO_SPECIAL_CHARS.get(ref): + # TODO: We've got a problem here. We're told this is + # an entity reference, but it's not an XML entity + # reference or an HTML entity reference. Nonetheless, + # the logical thing to do is to pass it through as an + # unrecognized entity reference. + # + # Except: when the input is "&carol;" this function + # will be called with input "carol". When the input is + # "AT&T", this function will be called with input + # "T". We have no way of knowing whether a semicolon + # was present originally, so we don't know whether + # this is an unknown entity or just a misplaced + # ampersand. + # + # The more common case is a misplaced ampersand, so I + # escape the ampersand and omit the trailing semicolon. + data = "&%s" % ref + if not data: + # This case is different from the one above, because we + # haven't already gone through a supposedly comprehensive + # mapping of entities to Unicode characters. We might not + # have gone through any mapping at all. So the chances are + # very high that this is a real entity, and not a + # misplaced ampersand. + data = "&%s;" % ref + self.handle_data(data) + + def handle_decl(self, data): + "Handle DOCTYPEs and the like as Declaration objects." + self._toStringSubclass(data, Declaration) + + def parse_declaration(self, i): + """Treat a bogus SGML declaration as raw data. Treat a CDATA + declaration as a CData object.""" + j = None + if self.rawdata[i:i+9] == '', i) + if k == -1: + k = len(self.rawdata) + data = self.rawdata[i+9:k] + j = k+3 + self._toStringSubclass(data, CData) + else: + try: + j = SGMLParser.parse_declaration(self, i) + except SGMLParseError: + toHandle = self.rawdata[i:] + self.handle_data(toHandle) + j = i + len(toHandle) + return j + +class BeautifulSoup(BeautifulStoneSoup): + + """This parser knows the following facts about HTML: + + * Some tags have no closing tag and should be interpreted as being + closed as soon as they are encountered. + + * The text inside some tags (ie. 'script') may contain tags which + are not really part of the document and which should be parsed + as text, not tags. If you want to parse the text as tags, you can + always fetch it and parse it explicitly. + + * Tag nesting rules: + + Most tags can't be nested at all. For instance, the occurance of + a

    tag should implicitly close the previous

    tag. + +

    Para1

    Para2 + should be transformed into: +

    Para1

    Para2 + + Some tags can be nested arbitrarily. For instance, the occurance + of a

    tag should _not_ implicitly close the previous +
    tag. + + Alice said:
    Bob said:
    Blah + should NOT be transformed into: + Alice said:
    Bob said:
    Blah + + Some tags can be nested, but the nesting is reset by the + interposition of other tags. For instance, a
    , + but not close a tag in another table. + +
    BlahBlah + should be transformed into: +
    BlahBlah + but, + Blah
    Blah + should NOT be transformed into + Blah
    Blah + + Differing assumptions about tag nesting rules are a major source + of problems with the BeautifulSoup class. If BeautifulSoup is not + treating as nestable a tag your page author treats as nestable, + try ICantBelieveItsBeautifulSoup, MinimalSoup, or + BeautifulStoneSoup before writing your own subclass.""" + + def __init__(self, *args, **kwargs): + if not kwargs.has_key('smartQuotesTo'): + kwargs['smartQuotesTo'] = self.HTML_ENTITIES + kwargs['isHTML'] = True + BeautifulStoneSoup.__init__(self, *args, **kwargs) + + SELF_CLOSING_TAGS = buildTagMap(None, + ['br' , 'hr', 'input', 'img', 'meta', + 'spacer', 'link', 'frame', 'base']) + + PRESERVE_WHITESPACE_TAGS = set(['pre', 'textarea']) + + QUOTE_TAGS = {'script' : None, 'textarea' : None} + + #According to the HTML standard, each of these inline tags can + #contain another tag of the same type. Furthermore, it's common + #to actually use these tags this way. + NESTABLE_INLINE_TAGS = ['span', 'font', 'q', 'object', 'bdo', 'sub', 'sup', + 'center'] + + #According to the HTML standard, these block tags can contain + #another tag of the same type. Furthermore, it's common + #to actually use these tags this way. + NESTABLE_BLOCK_TAGS = ['blockquote', 'div', 'fieldset', 'ins', 'del'] + + #Lists can contain other lists, but there are restrictions. + NESTABLE_LIST_TAGS = { 'ol' : [], + 'ul' : [], + 'li' : ['ul', 'ol'], + 'dl' : [], + 'dd' : ['dl'], + 'dt' : ['dl'] } + + #Tables can contain other tables, but there are restrictions. + NESTABLE_TABLE_TAGS = {'table' : [], + 'tr' : ['table', 'tbody', 'tfoot', 'thead'], + 'td' : ['tr'], + 'th' : ['tr'], + 'thead' : ['table'], + 'tbody' : ['table'], + 'tfoot' : ['table'], + } + + NON_NESTABLE_BLOCK_TAGS = ['address', 'form', 'p', 'pre'] + + #If one of these tags is encountered, all tags up to the next tag of + #this type are popped. + RESET_NESTING_TAGS = buildTagMap(None, NESTABLE_BLOCK_TAGS, 'noscript', + NON_NESTABLE_BLOCK_TAGS, + NESTABLE_LIST_TAGS, + NESTABLE_TABLE_TAGS) + + NESTABLE_TAGS = buildTagMap([], NESTABLE_INLINE_TAGS, NESTABLE_BLOCK_TAGS, + NESTABLE_LIST_TAGS, NESTABLE_TABLE_TAGS) + + # Used to detect the charset in a META tag; see start_meta + CHARSET_RE = re.compile("((^|;)\s*charset=)([^;]*)", re.M) + + def start_meta(self, attrs): + """Beautiful Soup can detect a charset included in a META tag, + try to convert the document to that charset, and re-parse the + document from the beginning.""" + httpEquiv = None + contentType = None + contentTypeIndex = None + tagNeedsEncodingSubstitution = False + + for i in range(0, len(attrs)): + key, value = attrs[i] + key = key.lower() + if key == 'http-equiv': + httpEquiv = value + elif key == 'content': + contentType = value + contentTypeIndex = i + + if httpEquiv and contentType: # It's an interesting meta tag. + match = self.CHARSET_RE.search(contentType) + if match: + if (self.declaredHTMLEncoding is not None or + self.originalEncoding == self.fromEncoding): + # An HTML encoding was sniffed while converting + # the document to Unicode, or an HTML encoding was + # sniffed during a previous pass through the + # document, or an encoding was specified + # explicitly and it worked. Rewrite the meta tag. + def rewrite(match): + return match.group(1) + "%SOUP-ENCODING%" + newAttr = self.CHARSET_RE.sub(rewrite, contentType) + attrs[contentTypeIndex] = (attrs[contentTypeIndex][0], + newAttr) + tagNeedsEncodingSubstitution = True + else: + # This is our first pass through the document. + # Go through it again with the encoding information. + newCharset = match.group(3) + if newCharset and newCharset != self.originalEncoding: + self.declaredHTMLEncoding = newCharset + self._feed(self.declaredHTMLEncoding) + raise StopParsing + pass + tag = self.unknown_starttag("meta", attrs) + if tag and tagNeedsEncodingSubstitution: + tag.containsSubstitutions = True + +class StopParsing(Exception): + pass + +class ICantBelieveItsBeautifulSoup(BeautifulSoup): + + """The BeautifulSoup class is oriented towards skipping over + common HTML errors like unclosed tags. However, sometimes it makes + errors of its own. For instance, consider this fragment: + + FooBar + + This is perfectly valid (if bizarre) HTML. However, the + BeautifulSoup class will implicitly close the first b tag when it + encounters the second 'b'. It will think the author wrote + "FooBar", and didn't close the first 'b' tag, because + there's no real-world reason to bold something that's already + bold. When it encounters '' it will close two more 'b' + tags, for a grand total of three tags closed instead of two. This + can throw off the rest of your document structure. The same is + true of a number of other tags, listed below. + + It's much more common for someone to forget to close a 'b' tag + than to actually use nested 'b' tags, and the BeautifulSoup class + handles the common case. This class handles the not-co-common + case: where you can't believe someone wrote what they did, but + it's valid HTML and BeautifulSoup screwed up by assuming it + wouldn't be.""" + + I_CANT_BELIEVE_THEYRE_NESTABLE_INLINE_TAGS = \ + ['em', 'big', 'i', 'small', 'tt', 'abbr', 'acronym', 'strong', + 'cite', 'code', 'dfn', 'kbd', 'samp', 'strong', 'var', 'b', + 'big'] + + I_CANT_BELIEVE_THEYRE_NESTABLE_BLOCK_TAGS = ['noscript'] + + NESTABLE_TAGS = buildTagMap([], BeautifulSoup.NESTABLE_TAGS, + I_CANT_BELIEVE_THEYRE_NESTABLE_BLOCK_TAGS, + I_CANT_BELIEVE_THEYRE_NESTABLE_INLINE_TAGS) + +class MinimalSoup(BeautifulSoup): + """The MinimalSoup class is for parsing HTML that contains + pathologically bad markup. It makes no assumptions about tag + nesting, but it does know which tags are self-closing, that +