mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-08-01 15:07:49 +00:00
xbmc:
- update to xbmc-29740
This commit is contained in:
parent
14f7ed057e
commit
68f912b6e7
@ -1,12 +0,0 @@
|
||||
diff -Naur xbmc-29428/configure.in xbmc-29428.patch/configure.in
|
||||
--- xbmc-29428/configure.in 2010-04-22 00:56:44.000000000 +0200
|
||||
+++ xbmc-29428.patch/configure.in 2010-04-22 19:06:31.906738563 +0200
|
||||
@@ -478,7 +478,7 @@
|
||||
while read output; do objdump -p $output | \
|
||||
grep SONAME | \
|
||||
awk 'BEGIN { FS = " " } ; { print $2 }'; done)
|
||||
- if [ -z "$LIBCURL_BASENAME" ]; then
|
||||
+ if [[ -z "$LIBCURL_BASENAME" ]]; then
|
||||
echo "Unable to determine basename of libcurl library"
|
||||
fi
|
||||
|
@ -1,6 +1,6 @@
|
||||
diff -Naur xbmc-28910/configure.in xbmc-28910.patch/configure.in
|
||||
--- xbmc-28910/configure.in 2010-03-28 18:55:35.040753605 +0200
|
||||
+++ xbmc-28910.patch/configure.in 2010-03-28 18:58:11.605628523 +0200
|
||||
diff -Naur xbmc-29740/configure.in xbmc-29740.patch/configure.in
|
||||
--- xbmc-29740/configure.in 2010-05-03 03:25:29.000000000 +0200
|
||||
+++ xbmc-29740.patch/configure.in 2010-05-03 04:05:13.412131036 +0200
|
||||
@@ -23,6 +23,8 @@
|
||||
xrandr_disabled="== XRandR support disabled. SDL will be used for resolution support. =="
|
||||
goom_enabled="== GOOM enabled. =="
|
||||
@ -10,7 +10,7 @@ diff -Naur xbmc-28910/configure.in xbmc-28910.patch/configure.in
|
||||
pulse_not_found="== Could not find libpulse. PulseAudio support disabled. =="
|
||||
pulse_disabled="== PulseAudio support manually disabled. =="
|
||||
faac_not_found="== Could not find libfaac. FAAC support disabled. =="
|
||||
@@ -152,6 +154,12 @@
|
||||
@@ -168,6 +170,12 @@
|
||||
[use_goom=$enableval],
|
||||
[use_goom=no])
|
||||
|
||||
@ -23,7 +23,7 @@ diff -Naur xbmc-28910/configure.in xbmc-28910.patch/configure.in
|
||||
AC_PATH_PROG(CCACHE,ccache,none)
|
||||
AC_ARG_ENABLE([ccache],
|
||||
[AS_HELP_STRING([--enable-ccache],
|
||||
@@ -531,6 +539,15 @@
|
||||
@@ -579,6 +587,15 @@
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -37,9 +37,9 @@ diff -Naur xbmc-28910/configure.in xbmc-28910.patch/configure.in
|
||||
+fi
|
||||
+
|
||||
### External libraries checks
|
||||
if test "$use_external_libraries" = "yes"; then
|
||||
AC_MSG_NOTICE($external_libraries_enabled)
|
||||
@@ -862,6 +879,12 @@
|
||||
# External FFmpeg
|
||||
if test "$use_external_ffmpeg" = "yes"; then
|
||||
@@ -943,6 +960,12 @@
|
||||
final_message="$final_message\n GOOM:\t\tNo"
|
||||
fi
|
||||
|
||||
@ -52,15 +52,15 @@ diff -Naur xbmc-28910/configure.in xbmc-28910.patch/configure.in
|
||||
if test "$use_pcre" = "yes"; then
|
||||
final_message="$final_message\n PCRE Support:\tYes"
|
||||
else
|
||||
@@ -1106,6 +1129,7 @@
|
||||
@@ -1181,6 +1204,7 @@
|
||||
AC_SUBST(SDL_DEFINES)
|
||||
AC_SUBST(BUILD_DVDCSS)
|
||||
AC_SUBST(BUILD_GOOM)
|
||||
+AC_SUBST(BUILD_XBMCPROJECTM)
|
||||
AC_SUBST(USE_EXTERNAL_LIBRARIES)
|
||||
AC_SUBST(USE_EXTERNAL_FFMPEG)
|
||||
AC_SUBST(USE_EXTERNAL_LIBA52)
|
||||
@@ -1451,7 +1475,7 @@
|
||||
AC_SUBST(USE_EXTERNAL_LIBDTS)
|
||||
@@ -1535,7 +1559,7 @@
|
||||
-DSYSCONF_INSTALL_DIR:PATH="${sysconfdir}" -DSHARE_INSTALL_PREFIX:PATH="${datadir}" .
|
||||
set +x
|
||||
fi
|
||||
@ -69,10 +69,10 @@ diff -Naur xbmc-28910/configure.in xbmc-28910.patch/configure.in
|
||||
|
||||
XB_CONFIG_MODULE([xbmc/visualizations/Goom/goom2k4-0],[
|
||||
if test "$host_vendor" != "apple" ; then
|
||||
diff -Naur xbmc-28910/Makefile.in xbmc-28910.patch/Makefile.in
|
||||
--- xbmc-28910/Makefile.in 2010-03-28 17:12:32.000000000 +0200
|
||||
+++ xbmc-28910.patch/Makefile.in 2010-03-28 18:58:11.636752616 +0200
|
||||
@@ -105,8 +105,10 @@
|
||||
diff -Naur xbmc-29740/Makefile.in xbmc-29740.patch/Makefile.in
|
||||
--- xbmc-29740/Makefile.in 2010-05-03 03:25:29.000000000 +0200
|
||||
+++ xbmc-29740.patch/Makefile.in 2010-05-03 04:04:11.589130864 +0200
|
||||
@@ -106,8 +106,10 @@
|
||||
|
||||
VIS_DIRS=\
|
||||
xbmc/visualizations/OpenGLSpectrum \
|
||||
@ -85,7 +85,7 @@ diff -Naur xbmc-28910/Makefile.in xbmc-28910.patch/Makefile.in
|
||||
ifeq ($(findstring osx,$(ARCH)), osx)
|
||||
VIS_DIRS+=xbmc/visualizations/iTunes
|
||||
endif
|
||||
@@ -303,7 +305,9 @@
|
||||
@@ -306,7 +308,9 @@
|
||||
visualizations: exports
|
||||
$(MAKE) -C xbmc/visualizations/OpenGLSpectrum
|
||||
$(MAKE) -C xbmc/visualizations/WaveForm
|
||||
|
@ -1,6 +1,6 @@
|
||||
diff -Naur xbmc-28910/configure.in xbmc-28910.patch/configure.in
|
||||
--- xbmc-28910/configure.in 2010-03-28 19:01:27.995753591 +0200
|
||||
+++ xbmc-28910.patch/configure.in 2010-03-28 19:02:17.307753519 +0200
|
||||
diff -Naur xbmc-29740/configure.in xbmc-29740.patch/configure.in
|
||||
--- xbmc-29740/configure.in 2010-05-03 04:06:14.609255790 +0200
|
||||
+++ xbmc-29740.patch/configure.in 2010-05-03 04:07:44.163129774 +0200
|
||||
@@ -25,6 +25,8 @@
|
||||
goom_disabled="== GOOM disabled. =="
|
||||
xbmcprojectm_enabled="== XBMCProjectM enabled. =="
|
||||
@ -10,7 +10,7 @@ diff -Naur xbmc-28910/configure.in xbmc-28910.patch/configure.in
|
||||
pulse_not_found="== Could not find libpulse. PulseAudio support disabled. =="
|
||||
pulse_disabled="== PulseAudio support manually disabled. =="
|
||||
faac_not_found="== Could not find libfaac. FAAC support disabled. =="
|
||||
@@ -160,6 +162,12 @@
|
||||
@@ -176,6 +178,12 @@
|
||||
[use_xbmcprojectm=$enableval],
|
||||
[use_xbmcprojectm=yes])
|
||||
|
||||
@ -23,7 +23,7 @@ diff -Naur xbmc-28910/configure.in xbmc-28910.patch/configure.in
|
||||
AC_PATH_PROG(CCACHE,ccache,none)
|
||||
AC_ARG_ENABLE([ccache],
|
||||
[AS_HELP_STRING([--enable-ccache],
|
||||
@@ -548,6 +556,15 @@
|
||||
@@ -596,6 +604,15 @@
|
||||
BUILD_XBMCPROJECTM=1
|
||||
fi
|
||||
|
||||
@ -37,9 +37,9 @@ diff -Naur xbmc-28910/configure.in xbmc-28910.patch/configure.in
|
||||
+fi
|
||||
+
|
||||
### External libraries checks
|
||||
if test "$use_external_libraries" = "yes"; then
|
||||
AC_MSG_NOTICE($external_libraries_enabled)
|
||||
@@ -885,6 +902,12 @@
|
||||
# External FFmpeg
|
||||
if test "$use_external_ffmpeg" = "yes"; then
|
||||
@@ -966,6 +983,12 @@
|
||||
final_message="$final_message\n XBMCProjectM:\tNo"
|
||||
fi
|
||||
|
||||
@ -52,15 +52,15 @@ diff -Naur xbmc-28910/configure.in xbmc-28910.patch/configure.in
|
||||
if test "$use_pcre" = "yes"; then
|
||||
final_message="$final_message\n PCRE Support:\tYes"
|
||||
else
|
||||
@@ -1130,6 +1153,7 @@
|
||||
@@ -1205,6 +1228,7 @@
|
||||
AC_SUBST(BUILD_DVDCSS)
|
||||
AC_SUBST(BUILD_GOOM)
|
||||
AC_SUBST(BUILD_XBMCPROJECTM)
|
||||
+AC_SUBST(BUILD_RSXS)
|
||||
AC_SUBST(USE_EXTERNAL_LIBRARIES)
|
||||
AC_SUBST(USE_EXTERNAL_FFMPEG)
|
||||
AC_SUBST(USE_EXTERNAL_LIBA52)
|
||||
@@ -1529,7 +1553,7 @@
|
||||
AC_SUBST(USE_EXTERNAL_LIBDTS)
|
||||
@@ -1613,7 +1637,7 @@
|
||||
--disable-lattice \
|
||||
--disable-skyrocket
|
||||
fi
|
||||
@ -69,10 +69,10 @@ diff -Naur xbmc-28910/configure.in xbmc-28910.patch/configure.in
|
||||
|
||||
XB_CONFIG_MODULE([xbmc/cores/dvdplayer/Codecs/libbdnav/], [
|
||||
if test "$host_vendor" = "apple" ; then
|
||||
diff -Naur xbmc-28910/Makefile.in xbmc-28910.patch/Makefile.in
|
||||
--- xbmc-28910/Makefile.in 2010-03-28 19:01:27.997753604 +0200
|
||||
+++ xbmc-28910.patch/Makefile.in 2010-03-28 19:02:17.308751221 +0200
|
||||
@@ -100,8 +100,10 @@
|
||||
diff -Naur xbmc-29740/Makefile.in xbmc-29740.patch/Makefile.in
|
||||
--- xbmc-29740/Makefile.in 2010-05-03 04:06:14.610256210 +0200
|
||||
+++ xbmc-29740.patch/Makefile.in 2010-05-03 04:07:08.523256011 +0200
|
||||
@@ -101,8 +101,10 @@
|
||||
lib/xbmc-dll-symbols \
|
||||
lib/jsoncpp/jsoncpp/src/lib_json
|
||||
|
||||
@ -85,7 +85,7 @@ diff -Naur xbmc-28910/Makefile.in xbmc-28910.patch/Makefile.in
|
||||
|
||||
VIS_DIRS=\
|
||||
xbmc/visualizations/OpenGLSpectrum \
|
||||
@@ -317,7 +319,9 @@
|
||||
@@ -320,7 +322,9 @@
|
||||
endif
|
||||
endif
|
||||
screensavers: exports
|
||||
|
@ -1,84 +1,12 @@
|
||||
diff -Naur xbmc-29428/configure.in xbmc-29428.patch/configure.in
|
||||
--- xbmc-29428/configure.in 2010-04-22 00:56:44.000000000 +0200
|
||||
+++ xbmc-29428.patch/configure.in 2010-04-22 02:22:21.771774020 +0200
|
||||
@@ -474,7 +474,7 @@
|
||||
# check for library basenames
|
||||
if test "$host_vendor" != "apple"; then
|
||||
# libcurl
|
||||
- LIBCURL_BASENAME=$(gcc $CFLAGS -print-file-name=libcurl.so | \
|
||||
+ LIBCURL_BASENAME=$($ac_cv_prog_CC $CFLAGS -print-file-name=libcurl.so | \
|
||||
while read output; do objdump -p $output | \
|
||||
grep SONAME | \
|
||||
awk 'BEGIN { FS = " " } ; { print $2 }'; done)
|
||||
@@ -483,7 +483,7 @@
|
||||
fi
|
||||
|
||||
# libFLAC
|
||||
- LIBFLAC_BASENAME=$(gcc $CFLAGS -print-file-name=libFLAC.so | \
|
||||
+ LIBFLAC_BASENAME=$($ac_cv_prog_CC $CFLAGS -print-file-name=libFLAC.so | \
|
||||
while read output; do objdump -p $output | \
|
||||
grep SONAME | \
|
||||
awk 'BEGIN { FS = " " } ; { print $2 }'; done)
|
||||
@@ -492,7 +492,7 @@
|
||||
fi
|
||||
|
||||
# libvorbisfile
|
||||
- LIBVORBISFILE_BASENAME=$(gcc $CFLAGS -print-file-name=libvorbisfile.so | \
|
||||
+ LIBVORBISFILE_BASENAME=$($ac_cv_prog_CC $CFLAGS -print-file-name=libvorbisfile.so | \
|
||||
while read output; do objdump -p $output | \
|
||||
grep SONAME | \
|
||||
awk 'BEGIN { FS = " " } ; { print $2 }'; done)
|
||||
@@ -501,7 +501,7 @@
|
||||
fi
|
||||
|
||||
# libmodplug
|
||||
- LIBMODPLUG_BASENAME=$(gcc $CFLAGS -print-file-name=libmodplug.so | \
|
||||
+ LIBMODPLUG_BASENAME=$($ac_cv_prog_CC $CFLAGS -print-file-name=libmodplug.so | \
|
||||
while read output; do objdump -p $output | \
|
||||
grep SONAME | \
|
||||
awk 'BEGIN { FS = " " } ; { print $2 }'; done)
|
||||
@@ -510,7 +510,7 @@
|
||||
fi
|
||||
|
||||
# libfaad
|
||||
- LIBFAAD_BASENAME=$(gcc $CFLAGS -print-file-name=libfaad.so | \
|
||||
+ LIBFAAD_BASENAME=$($ac_cv_prog_CC $CFLAGS -print-file-name=libfaad.so | \
|
||||
while read output; do objdump -p $output | \
|
||||
grep SONAME | \
|
||||
awk 'BEGIN { FS = " " } ; { print $2 }'; done)
|
||||
@@ -519,7 +519,7 @@
|
||||
fi
|
||||
|
||||
# libmad
|
||||
- LIBMAD_BASENAME=$(gcc $CFLAGS -print-file-name=libmad.so | \
|
||||
+ LIBMAD_BASENAME=$($ac_cv_prog_CC $CFLAGS -print-file-name=libmad.so | \
|
||||
while read output; do objdump -p $output | \
|
||||
grep SONAME | \
|
||||
awk 'BEGIN { FS = " " } ; { print $2 }'; done)
|
||||
@@ -528,7 +528,7 @@
|
||||
fi
|
||||
|
||||
# libogg
|
||||
- LIBOGG_BASENAME=$(gcc $CFLAGS -print-file-name=libogg.so | \
|
||||
+ LIBOGG_BASENAME=$($ac_cv_prog_CC $CFLAGS -print-file-name=libogg.so | \
|
||||
while read output; do objdump -p $output | \
|
||||
grep SONAME | \
|
||||
awk 'BEGIN { FS = " " } ; { print $2 }'; done)
|
||||
@@ -537,7 +537,7 @@
|
||||
fi
|
||||
|
||||
# libvorbisenc
|
||||
- LIBVORBISENC_BASENAME=$(gcc $CFLAGS -print-file-name=libvorbisenc.so | \
|
||||
+ LIBVORBISENC_BASENAME=$($ac_cv_prog_CC $CFLAGS -print-file-name=libvorbisenc.so | \
|
||||
while read output; do objdump -p $output | \
|
||||
grep SONAME | \
|
||||
awk 'BEGIN { FS = " " } ; { print $2 }'; done)
|
||||
@@ -546,7 +546,7 @@
|
||||
fi
|
||||
|
||||
# libvorbis
|
||||
- LIBVORBIS_BASENAME=$(gcc $CFLAGS -print-file-name=libvorbis.so | \
|
||||
+ LIBVORBIS_BASENAME=$($ac_cv_prog_CC $CFLAGS -print-file-name=libvorbis.so | \
|
||||
while read output; do objdump -p $output | \
|
||||
grep SONAME | \
|
||||
awk 'BEGIN { FS = " " } ; { print $2 }'; done)
|
||||
diff -Naur xbmc-29740/configure.in xbmc-29740.patch/configure.in
|
||||
--- xbmc-29740/configure.in 2010-05-03 04:08:41.115131030 +0200
|
||||
+++ xbmc-29740.patch/configure.in 2010-05-03 04:12:20.116129219 +0200
|
||||
@@ -499,7 +499,7 @@
|
||||
AC_DEFUN([XB_FIND_SONAME],
|
||||
[
|
||||
AC_MSG_CHECKING([for lib$2 soname])
|
||||
- $1_SONAME=$( gcc -print-file-name=lib$2.so | \
|
||||
+ $1_SONAME=$( $CC -print-file-name=lib$2.so | \
|
||||
while read output; do objdump -p $output | \
|
||||
grep "SONAME" | \
|
||||
sed -e 's/ \+SONAME \+//'; done 2> /dev/null )
|
||||
|
@ -1,7 +1,7 @@
|
||||
diff -Naur xbmc-28910/Makefile.in xbmc-28910.patch/Makefile.in
|
||||
--- xbmc-28910/Makefile.in 2010-03-28 19:09:49.356628842 +0200
|
||||
+++ xbmc-28910.patch/Makefile.in 2010-03-28 19:28:17.265753408 +0200
|
||||
@@ -495,7 +495,7 @@
|
||||
diff -Naur xbmc-29740/Makefile.in xbmc-29740.patch/Makefile.in
|
||||
--- xbmc-29740/Makefile.in 2010-05-03 04:08:41.116131093 +0200
|
||||
+++ xbmc-29740.patch/Makefile.in 2010-05-03 04:16:42.386130163 +0200
|
||||
@@ -497,7 +497,7 @@
|
||||
$(MAKE) -C tools/TexturePacker/
|
||||
|
||||
install-bin: xbmc.bin # developement convenience target
|
||||
@ -10,7 +10,7 @@ diff -Naur xbmc-28910/Makefile.in xbmc-28910.patch/Makefile.in
|
||||
|
||||
ifeq ($(findstring osx,$(ARCH)), osx)
|
||||
# TODO: add osx install
|
||||
@@ -503,55 +503,55 @@
|
||||
@@ -505,53 +505,53 @@
|
||||
install: install-binaries install-arch install-datas install-web
|
||||
|
||||
install-binaries: install-scripts
|
||||
@ -25,8 +25,8 @@ diff -Naur xbmc-28910/Makefile.in xbmc-28910.patch/Makefile.in
|
||||
|
||||
install-arch:
|
||||
@# Arch dependent files
|
||||
- @find system screensavers visualisations -regextype posix-extended -type f -not -iregex ".*svn.*|.*win32(dx)?\.vis|.*osx\.vis" -iregex ".*$(ARCH).*|.*\.vis|.*\.xbs" -exec install -D "{}" $(prefix)/share/xbmc/"{}" \; -printf " -- %-75.75f\r"
|
||||
+ @find system screensavers visualisations -regextype posix-extended -type f -not -iregex ".*svn.*|.*win32(dx)?\.vis|.*osx\.vis" -iregex ".*$(ARCH).*|.*\.vis|.*\.xbs" -exec install -D "{}" $(DESTDIR)/$(prefix)/share/xbmc/"{}" \; -printf " -- %-75.75f\r"
|
||||
- @find system addons -regextype posix-extended -type f -not -iregex ".*svn.*|.*win32(dx)?\.vis|.*osx\.vis" -iregex ".*$(ARCH).*|.*\.vis|.*\.xbs" -exec install -D "{}" $(prefix)/share/xbmc/"{}" \; -printf " -- %-75.75f\r"
|
||||
+ @find system addons -regextype posix-extended -type f -not -iregex ".*svn.*|.*win32(dx)?\.vis|.*osx\.vis" -iregex ".*$(ARCH).*|.*\.vis|.*\.xbs" -exec install -D "{}" $(DESTDIR)/$(prefix)/share/xbmc/"{}" \; -printf " -- %-75.75f\r"
|
||||
|
||||
install-scripts:
|
||||
- @install -D tools/Linux/xbmc.sh $(prefix)/bin/xbmc
|
||||
@ -49,9 +49,6 @@ diff -Naur xbmc-28910/Makefile.in xbmc-28910.patch/Makefile.in
|
||||
@# Arch independent files
|
||||
- @find addons language media scripts sounds userdata system -regextype posix-extended -type f -not -iregex ".*svn.*|.*\.so|.*\.dll|.*\.pyd|.*python/.*\.zlib" -exec install -D -m 0644 "{}" $(prefix)/share/xbmc/"{}" \; -printf " -- %-75.75f\r"
|
||||
+ @find addons language media scripts sounds userdata system -regextype posix-extended -type f -not -iregex ".*svn.*|.*\.so|.*\.dll|.*\.pyd|.*python/.*\.zlib" -exec install -D -m 0644 "{}" $(DESTDIR)/$(prefix)/share/xbmc/"{}" \; -printf " -- %-75.75f\r"
|
||||
@# Skins
|
||||
- @find skin -regextype posix-extended -type f -not -iregex '.*/\.svn/.*|^skin/[^/]*/media/.*[^x][^b][^t]' -exec install -D -m 0644 '{}' $(prefix)/share/xbmc/'{}' \; -printf " -- %-75.75f\r"
|
||||
+ @find skin -regextype posix-extended -type f -not -iregex '.*/\.svn/.*|^skin/[^/]*/media/.*[^x][^b][^t]' -exec install -D -m 0644 '{}' $(DESTDIR)/$(prefix)/share/xbmc/'{}' \; -printf " -- %-75.75f\r"
|
||||
@# Icons and links
|
||||
- @mkdir -p $(prefix)/share/applications $(prefix)/share/pixmaps
|
||||
- @cp -a tools/Linux/xbmc.png $(prefix)/share/pixmaps/
|
||||
|
@ -1,734 +0,0 @@
|
||||
diff -Naur xbmc-29490/xbmc/linux/ConsoleUPowerSyscall.cpp xbmc-29490.patch/xbmc/linux/ConsoleUPowerSyscall.cpp
|
||||
--- xbmc-29490/xbmc/linux/ConsoleUPowerSyscall.cpp 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ xbmc-29490.patch/xbmc/linux/ConsoleUPowerSyscall.cpp 2010-04-25 23:12:52.124485047 +0200
|
||||
@@ -0,0 +1,143 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2009 Team XBMC
|
||||
+ * http://www.xbmc.org
|
||||
+ *
|
||||
+ * This Program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 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 XBMC; 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
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#include "system.h"
|
||||
+#include "ConsoleUPowerSyscall.h"
|
||||
+#include "utils/log.h"
|
||||
+
|
||||
+#ifdef HAS_DBUS
|
||||
+#include "Application.h"
|
||||
+#include "LocalizeStrings.h"
|
||||
+#include "DBusUtil.h"
|
||||
+
|
||||
+CConsoleUPowerSyscall::CConsoleUPowerSyscall()
|
||||
+{
|
||||
+ m_CanPowerdown = ConsoleKitMethodCall("CanStop");
|
||||
+
|
||||
+ // If "the name org.freedesktop.UPower was not provided by any .service files",
|
||||
+ // GetVariant() would return NULL, and asBoolean() would crash.
|
||||
+ CVariant canSuspend = CDBusUtil::GetVariant("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.UPower", "can_suspend");
|
||||
+
|
||||
+ if ( !canSuspend.isNull() )
|
||||
+ m_CanSuspend = canSuspend.asBoolean();
|
||||
+ else
|
||||
+ m_CanSuspend = false;
|
||||
+
|
||||
+ CVariant canHibernate = CDBusUtil::GetVariant("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.UPower", "can_hibernate");
|
||||
+
|
||||
+ if ( !canHibernate.isNull() )
|
||||
+ m_CanHibernate = canHibernate.asBoolean();
|
||||
+ else
|
||||
+ m_CanHibernate = false;
|
||||
+
|
||||
+ m_CanReboot = ConsoleKitMethodCall("CanRestart");
|
||||
+}
|
||||
+
|
||||
+bool CConsoleUPowerSyscall::Powerdown()
|
||||
+{
|
||||
+ CDBusMessage message("org.freedesktop.ConsoleKit", "/org/freedesktop/ConsoleKit/Manager", "org.freedesktop.ConsoleKit.Manager", "Stop");
|
||||
+ return message.SendSystem() != NULL;
|
||||
+}
|
||||
+
|
||||
+bool CConsoleUPowerSyscall::Suspend()
|
||||
+{
|
||||
+ CDBusMessage message("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.UPower", "Suspend");
|
||||
+ return message.SendSystem() != NULL;
|
||||
+}
|
||||
+
|
||||
+bool CConsoleUPowerSyscall::Hibernate()
|
||||
+{
|
||||
+ CDBusMessage message("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.UPower", "Hibernate");
|
||||
+ return message.SendSystem() != NULL;
|
||||
+}
|
||||
+
|
||||
+bool CConsoleUPowerSyscall::Reboot()
|
||||
+{
|
||||
+ CDBusMessage message("org.freedesktop.ConsoleKit", "/org/freedesktop/ConsoleKit/Manager", "org.freedesktop.ConsoleKit.Manager", "Restart");
|
||||
+ return message.SendSystem() != NULL;
|
||||
+}
|
||||
+
|
||||
+bool CConsoleUPowerSyscall::CanPowerdown()
|
||||
+{
|
||||
+ return m_CanPowerdown;
|
||||
+}
|
||||
+bool CConsoleUPowerSyscall::CanSuspend()
|
||||
+{
|
||||
+ return m_CanSuspend;
|
||||
+}
|
||||
+bool CConsoleUPowerSyscall::CanHibernate()
|
||||
+{
|
||||
+ return m_CanHibernate;
|
||||
+}
|
||||
+bool CConsoleUPowerSyscall::CanReboot()
|
||||
+{
|
||||
+ return m_CanReboot;
|
||||
+}
|
||||
+
|
||||
+bool CConsoleUPowerSyscall::HasDeviceConsoleKit()
|
||||
+{
|
||||
+ bool hasConsoleKitManager = false;
|
||||
+ CDBusMessage consoleKitMessage("org.freedesktop.ConsoleKit", "/org/freedesktop/ConsoleKit/Manager", "org.freedesktop.ConsoleKit.Manager", "CanStop");
|
||||
+
|
||||
+ DBusError error;
|
||||
+ dbus_error_init (&error);
|
||||
+ DBusConnection *con = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
|
||||
+
|
||||
+ consoleKitMessage.Send(con, &error);
|
||||
+
|
||||
+ if (!dbus_error_is_set(&error))
|
||||
+ hasConsoleKitManager = true;
|
||||
+ else
|
||||
+ CLog::Log(LOGDEBUG, "ConsoleKit.Manager: %s - %s", error.name, error.message);
|
||||
+
|
||||
+ dbus_error_free (&error);
|
||||
+
|
||||
+ bool hasUPower = false;
|
||||
+ CDBusMessage deviceKitMessage("org.freedesktop.UDisks", "/org/freedesktop/UDisks", "org.freedesktop.UDisks", "EnumerateDevices");
|
||||
+
|
||||
+ deviceKitMessage.Send(con, &error);
|
||||
+
|
||||
+ if (!dbus_error_is_set(&error))
|
||||
+ hasUPower = true;
|
||||
+ else
|
||||
+ CLog::Log(LOGDEBUG, "UPower: %s - %s", error.name, error.message);
|
||||
+
|
||||
+ dbus_error_free (&error);
|
||||
+ dbus_connection_unref(con);
|
||||
+
|
||||
+ return hasUPower && hasConsoleKitManager;
|
||||
+}
|
||||
+
|
||||
+bool CConsoleUPowerSyscall::ConsoleKitMethodCall(const char *method)
|
||||
+{
|
||||
+ CDBusMessage message("org.freedesktop.ConsoleKit", "/org/freedesktop/ConsoleKit/Manager", "org.freedesktop.ConsoleKit.Manager", method);
|
||||
+ DBusMessage *reply = message.SendSystem();
|
||||
+ if (reply)
|
||||
+ {
|
||||
+ dbus_bool_t boolean = FALSE;
|
||||
+
|
||||
+ if (dbus_message_get_args (reply, NULL, DBUS_TYPE_BOOLEAN, &boolean, DBUS_TYPE_INVALID))
|
||||
+ return boolean;
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+#endif
|
||||
diff -Naur xbmc-29490/xbmc/linux/ConsoleUPowerSyscall.h xbmc-29490.patch/xbmc/linux/ConsoleUPowerSyscall.h
|
||||
--- xbmc-29490/xbmc/linux/ConsoleUPowerSyscall.h 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ xbmc-29490.patch/xbmc/linux/ConsoleUPowerSyscall.h 2010-04-25 23:12:52.125484748 +0200
|
||||
@@ -0,0 +1,50 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2009 Team XBMC
|
||||
+ * http://www.xbmc.org
|
||||
+ *
|
||||
+ * This Program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 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 XBMC; 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
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#ifdef HAS_DBUS
|
||||
+#include "IPowerSyscall.h"
|
||||
+
|
||||
+class CConsoleUPowerSyscall : public IPowerSyscall
|
||||
+{
|
||||
+public:
|
||||
+ CConsoleUPowerSyscall();
|
||||
+ virtual ~CConsoleUPowerSyscall() { }
|
||||
+
|
||||
+ virtual bool Powerdown();
|
||||
+ virtual bool Suspend();
|
||||
+ virtual bool Hibernate();
|
||||
+ virtual bool Reboot();
|
||||
+
|
||||
+ virtual bool CanPowerdown();
|
||||
+ virtual bool CanSuspend();
|
||||
+ virtual bool CanHibernate();
|
||||
+ virtual bool CanReboot();
|
||||
+
|
||||
+ static bool HasDeviceConsoleKit();
|
||||
+private:
|
||||
+ static bool ConsoleKitMethodCall(const char *method);
|
||||
+
|
||||
+ bool m_CanPowerdown;
|
||||
+ bool m_CanSuspend;
|
||||
+ bool m_CanHibernate;
|
||||
+ bool m_CanReboot;
|
||||
+};
|
||||
+#endif
|
||||
diff -Naur xbmc-29490/xbmc/linux/LinuxStorageProvider.h xbmc-29490.patch/xbmc/linux/LinuxStorageProvider.h
|
||||
--- xbmc-29490/xbmc/linux/LinuxStorageProvider.h 2010-04-24 22:43:12.000000000 +0200
|
||||
+++ xbmc-29490.patch/xbmc/linux/LinuxStorageProvider.h 2010-04-25 23:12:52.126484868 +0200
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "IStorageProvider.h"
|
||||
#include "HALProvider.h"
|
||||
#include "DeviceKitDisksProvider.h"
|
||||
+#include "UDisksProvider.h"
|
||||
#include "PosixMountProvider.h"
|
||||
|
||||
class CLinuxStorageProvider : public IStorageProvider
|
||||
@@ -32,7 +33,9 @@
|
||||
m_instance = NULL;
|
||||
|
||||
#ifdef HAS_DBUS
|
||||
- if (CDeviceKitDisksProvider::HasDeviceKitDisks())
|
||||
+ if (CUDisksProvider::HasUDisks() ) {
|
||||
+ m_instance = new CUDisksProvider();
|
||||
+ } else if (CDeviceKitDisksProvider::HasDeviceKitDisks())
|
||||
m_instance = new CDeviceKitDisksProvider();
|
||||
#endif
|
||||
#ifdef HAS_HAL
|
||||
diff -Naur xbmc-29490/xbmc/linux/Makefile.in xbmc-29490.patch/xbmc/linux/Makefile.in
|
||||
--- xbmc-29490/xbmc/linux/Makefile.in 2010-04-24 22:43:12.000000000 +0200
|
||||
+++ xbmc-29490.patch/xbmc/linux/Makefile.in 2010-04-25 23:12:52.127484639 +0200
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
CXXFLAGS+=-fPIC #-DHAS_SDL
|
||||
|
||||
-SRCS=ConvUtils.cpp XEventUtils.cpp XFileUtils.cpp XHandle.cpp XSyncUtils.cpp XTimeUtils.cpp XMemUtils.cpp XThreadUtils.cpp NetworkLinux.cpp LinuxResourceCounter.cpp LinuxTimezone.cpp XRandR.cpp XCriticalSection.cpp XLCDproc.cpp HALManager.cpp HALPowerSyscall.cpp ConsoleDeviceKitPowerSyscall.cpp DBusUtil.cpp DBusMessage.cpp ZeroconfAvahi.cpp ZeroconfBrowserAvahi.cpp HALProvider.cpp PosixMountProvider.cpp DeviceKitDisksProvider.cpp
|
||||
+SRCS=ConvUtils.cpp XEventUtils.cpp XFileUtils.cpp XHandle.cpp XSyncUtils.cpp XTimeUtils.cpp XMemUtils.cpp XThreadUtils.cpp NetworkLinux.cpp LinuxResourceCounter.cpp LinuxTimezone.cpp XRandR.cpp XCriticalSection.cpp XLCDproc.cpp HALManager.cpp HALPowerSyscall.cpp ConsoleDeviceKitPowerSyscall.cpp DBusUtil.cpp DBusMessage.cpp ZeroconfAvahi.cpp ZeroconfBrowserAvahi.cpp HALProvider.cpp PosixMountProvider.cpp DeviceKitDisksProvider.cpp UDisksProvider.cpp ConsoleUPowerSyscall.cpp
|
||||
|
||||
LIB=linux.a
|
||||
|
||||
diff -Naur xbmc-29490/xbmc/linux/UDisksProvider.cpp xbmc-29490.patch/xbmc/linux/UDisksProvider.cpp
|
||||
--- xbmc-29490/xbmc/linux/UDisksProvider.cpp 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ xbmc-29490.patch/xbmc/linux/UDisksProvider.cpp 2010-04-25 23:12:52.129484321 +0200
|
||||
@@ -0,0 +1,385 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2009 Team XBMC
|
||||
+ * http://www.xbmc.org
|
||||
+ *
|
||||
+ * This Program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 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 XBMC; 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
|
||||
+ *
|
||||
+ */
|
||||
+#include "UDisksProvider.h"
|
||||
+#ifdef HAS_DBUS
|
||||
+#include "Util.h"
|
||||
+#include "AdvancedSettings.h"
|
||||
+#include "LocalizeStrings.h"
|
||||
+#include "log.h"
|
||||
+
|
||||
+CUDiskDevice::CUDiskDevice(const char *DeviceKitUDI)
|
||||
+{
|
||||
+ m_DeviceKitUDI = DeviceKitUDI;
|
||||
+ m_UDI = "";
|
||||
+ m_MountPath = "";
|
||||
+ m_FileSystem = "";
|
||||
+ m_isMounted = false;
|
||||
+ m_isMountedByUs = false;
|
||||
+ m_isRemovable = false;
|
||||
+ m_isPartition = false;
|
||||
+ m_isFileSystem = false;
|
||||
+ m_isSystemInternal = false;
|
||||
+ m_PartitionSizeGiB = 0.0f;
|
||||
+ Update();
|
||||
+}
|
||||
+
|
||||
+void CUDiskDevice::Update()
|
||||
+{
|
||||
+ CStdString str = CDBusUtil::GetVariant("org.freedesktop.UDisks", m_DeviceKitUDI.c_str(), "org.freedesktop.UDisks.Device", "IdUsage").asString();
|
||||
+ m_isFileSystem = str.Equals("filesystem");
|
||||
+ if (m_isFileSystem)
|
||||
+ {
|
||||
+ CVariant properties = CDBusUtil::GetAll("org.freedesktop.UDisks", m_DeviceKitUDI.c_str(), "org.freedesktop.UDisks.Device");
|
||||
+
|
||||
+ m_UDI = properties["IdUuid"].asString();
|
||||
+ m_Label = properties["IdLabel"].asString();
|
||||
+ m_FileSystem = properties["IdType"].asString();
|
||||
+ if (properties["DeviceMountPaths"].size() > 0)
|
||||
+ m_MountPath = properties["DeviceMountPaths"][0].asString();
|
||||
+ m_isMounted = properties["DeviceIsMounted"].asBoolean();
|
||||
+
|
||||
+ m_PartitionSizeGiB = properties["PartitionSize"].asUnsignedInteger() / 1024.0 / 1024.0 / 1024.0;
|
||||
+ m_isPartition = properties["DeviceIsPartition"].asBoolean();
|
||||
+ m_isSystemInternal = properties["DeviceIsSystemInternal"].asBoolean();
|
||||
+ if (m_isPartition)
|
||||
+ {
|
||||
+ CVariant isRemovable = CDBusUtil::GetVariant("org.freedesktop.UDisks", properties["PartitionSlave"].asString(), "org.freedesktop.UDisks.Device", "DeviceIsRemovable");
|
||||
+
|
||||
+ if ( !isRemovable.isNull() )
|
||||
+ m_isRemovable = isRemovable.asBoolean();
|
||||
+ else
|
||||
+ m_isRemovable = false;
|
||||
+ }
|
||||
+ else
|
||||
+ m_isRemovable = properties["DeviceIsRemovable"].asBoolean();
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+bool CUDiskDevice::Mount()
|
||||
+{
|
||||
+ if (!m_isMounted && !m_isSystemInternal && m_isFileSystem)
|
||||
+ {
|
||||
+ CLog::Log(LOGDEBUG, "UDisks: Mounting %s", m_DeviceKitUDI.c_str());
|
||||
+ CDBusMessage message("org.freedesktop.UDisks", m_DeviceKitUDI.c_str(), "org.freedesktop.UDisks.Device", "FilesystemMount");
|
||||
+ message.AppendArgument("");
|
||||
+ const char *array[] = {};
|
||||
+ message.AppendArgument(array, 0);
|
||||
+
|
||||
+ DBusMessage *reply = message.SendSystem();
|
||||
+ if (reply)
|
||||
+ {
|
||||
+ char *mountPoint;
|
||||
+ if (dbus_message_get_args (reply, NULL, DBUS_TYPE_STRING, &mountPoint, DBUS_TYPE_INVALID))
|
||||
+ {
|
||||
+ m_MountPath = mountPoint;
|
||||
+ CLog::Log(LOGDEBUG, "UDisks: Sucessfully mounted %s on %s", m_DeviceKitUDI.c_str(), mountPoint);
|
||||
+ m_isMountedByUs = m_isMounted = true;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return m_isMounted;
|
||||
+ }
|
||||
+ else
|
||||
+ CLog::Log(LOGDEBUG, "UDisks: Is not able to mount %s", toString().c_str());
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+bool CUDiskDevice::UnMount()
|
||||
+{
|
||||
+ if (m_isMounted && !m_isSystemInternal && m_isFileSystem)
|
||||
+ {
|
||||
+ CDBusMessage message("org.freedesktop.UDisks", m_DeviceKitUDI.c_str(), "org.freedesktop.UDisks.Device", "FilesystemUnmount");
|
||||
+
|
||||
+ const char *array[1];
|
||||
+ message.AppendArgument(array, 0);
|
||||
+
|
||||
+ DBusMessage *reply = message.SendSystem();
|
||||
+ if (reply)
|
||||
+ m_isMountedByUs = m_isMounted = false;
|
||||
+
|
||||
+ return !m_isMounted;
|
||||
+ }
|
||||
+ else
|
||||
+ CLog::Log(LOGDEBUG, "UDisks: Is not able to unmount %s", toString().c_str());
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+CMediaSource CUDiskDevice::ToMediaShare()
|
||||
+{
|
||||
+ CMediaSource source;
|
||||
+ source.strPath = m_MountPath;
|
||||
+ if (m_Label.empty())
|
||||
+ source.strName.Format("%.1f GB %s", m_PartitionSizeGiB, g_localizeStrings.Get(155).c_str());
|
||||
+ else
|
||||
+ source.strName = m_Label;
|
||||
+ source.m_iDriveType = !m_isSystemInternal ? CMediaSource::SOURCE_TYPE_REMOVABLE : CMediaSource::SOURCE_TYPE_LOCAL;
|
||||
+ source.m_ignore = true;
|
||||
+ return source;
|
||||
+}
|
||||
+
|
||||
+bool CUDiskDevice::IsApproved()
|
||||
+{
|
||||
+ return (m_isFileSystem && m_isMounted && m_UDI.length() > 0 && (m_FileSystem.length() > 0 && !m_FileSystem.Equals("swap")) && !m_MountPath.Equals("/"));
|
||||
+}
|
||||
+
|
||||
+#define BOOL2SZ(b) ((b) ? "true" : "false")
|
||||
+
|
||||
+CStdString CUDiskDevice::toString()
|
||||
+{
|
||||
+ CStdString str;
|
||||
+ str.Format("DeviceUDI %s: IsFileSystem %s HasFileSystem %s "
|
||||
+ "IsSystemInternal %s IsMounted %s IsRemovable %s IsPartition %s",
|
||||
+ m_DeviceKitUDI.c_str(), BOOL2SZ(m_isFileSystem), m_FileSystem,
|
||||
+ BOOL2SZ(m_isSystemInternal), BOOL2SZ(m_isMounted),
|
||||
+ BOOL2SZ(m_isRemovable), BOOL2SZ(m_isPartition));
|
||||
+
|
||||
+ return str;
|
||||
+}
|
||||
+
|
||||
+CUDisksProvider::CUDisksProvider()
|
||||
+{
|
||||
+ dbus_error_init (&m_error);
|
||||
+ m_connection = dbus_bus_get(DBUS_BUS_SYSTEM, &m_error);
|
||||
+
|
||||
+ dbus_bus_add_match(m_connection, "type='signal',interface='org.freedesktop.UDisks'", &m_error);
|
||||
+ dbus_connection_flush(m_connection);
|
||||
+ if (dbus_error_is_set(&m_error))
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "UDisks: Failed to attach to signal %s", m_error.message);
|
||||
+ dbus_connection_unref(m_connection);
|
||||
+ m_connection = NULL;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+CUDisksProvider::~CUDisksProvider()
|
||||
+{
|
||||
+ DeviceMap::iterator itr;
|
||||
+
|
||||
+ for (itr = m_AvailableDevices.begin(); itr != m_AvailableDevices.end(); ++itr)
|
||||
+ delete m_AvailableDevices[itr->first];
|
||||
+
|
||||
+ m_AvailableDevices.clear();
|
||||
+
|
||||
+ if (m_connection)
|
||||
+ {
|
||||
+ dbus_connection_unref(m_connection);
|
||||
+ m_connection = NULL;
|
||||
+ }
|
||||
+
|
||||
+ dbus_error_free (&m_error);
|
||||
+}
|
||||
+
|
||||
+void CUDisksProvider::Initialize()
|
||||
+{
|
||||
+ CLog::Log(LOGDEBUG, "Selected UDisks as storage provider");
|
||||
+ m_DaemonVersion = atoi(CDBusUtil::GetVariant("org.freedesktop.UDisks", "/org/freedesktop/UDisks", "org.freedesktop.UDisks", "DaemonVersion").asString());
|
||||
+ CLog::Log(LOGDEBUG, "UDisks: DaemonVersion %i", m_DaemonVersion);
|
||||
+
|
||||
+ CLog::Log(LOGDEBUG, "UDisks: Querying available devices");
|
||||
+ std::vector<CStdString> devices = EnumerateDisks();
|
||||
+ for (unsigned int i = 0; i < devices.size(); i++)
|
||||
+ DeviceAdded(devices[i].c_str(), NULL);
|
||||
+}
|
||||
+
|
||||
+bool CUDisksProvider::Eject(CStdString mountpath)
|
||||
+{
|
||||
+ DeviceMap::iterator itr;
|
||||
+ CStdString path(mountpath);
|
||||
+ CUtil::RemoveSlashAtEnd(path);
|
||||
+
|
||||
+ for (itr = m_AvailableDevices.begin(); itr != m_AvailableDevices.end(); ++itr)
|
||||
+ {
|
||||
+ CUDiskDevice *device = itr->second;
|
||||
+ if (device->m_MountPath.Equals(path))
|
||||
+ return device->UnMount();
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+std::vector<CStdString> CUDisksProvider::GetDiskUsage()
|
||||
+{
|
||||
+ std::vector<CStdString> devices;
|
||||
+ DeviceMap::iterator itr;
|
||||
+
|
||||
+ for(itr = m_AvailableDevices.begin(); itr != m_AvailableDevices.end(); ++itr)
|
||||
+ {
|
||||
+ CUDiskDevice *device = itr->second;
|
||||
+ if (device->IsApproved())
|
||||
+ {
|
||||
+ CStdString str;
|
||||
+ str.Format("%s %.1f GiB", device->m_MountPath.c_str(), device->m_PartitionSizeGiB);
|
||||
+ devices.push_back(str);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return devices;
|
||||
+}
|
||||
+
|
||||
+bool CUDisksProvider::PumpDriveChangeEvents(IStorageEventsCallback *callback)
|
||||
+{
|
||||
+ bool result = false;
|
||||
+ if (m_connection)
|
||||
+ {
|
||||
+ dbus_connection_read_write(m_connection, 0);
|
||||
+ DBusMessage *msg = dbus_connection_pop_message(m_connection);
|
||||
+
|
||||
+ if (msg)
|
||||
+ {
|
||||
+ char *object;
|
||||
+ if (dbus_message_get_args (msg, NULL, DBUS_TYPE_OBJECT_PATH, &object, DBUS_TYPE_INVALID))
|
||||
+ {
|
||||
+ result = true;
|
||||
+ if (dbus_message_is_signal(msg, "org.freedesktop.UDisks", "DeviceAdded"))
|
||||
+ DeviceAdded(object, callback);
|
||||
+ else if (dbus_message_is_signal(msg, "org.freedesktop.UDisks", "DeviceRemoved"))
|
||||
+ DeviceRemoved(object, callback);
|
||||
+ else if (dbus_message_is_signal(msg, "org.freedesktop.UDisks", "DeviceChanged"))
|
||||
+ DeviceChanged(object, callback);
|
||||
+ }
|
||||
+ dbus_message_unref(msg);
|
||||
+ }
|
||||
+ }
|
||||
+ return result;
|
||||
+}
|
||||
+
|
||||
+bool CUDisksProvider::HasUDisks()
|
||||
+{
|
||||
+ bool hasUDisks = false;
|
||||
+ CDBusMessage message("org.freedesktop.UDisks", "/org/freedesktop/UDisks", "org.freedesktop.UDisks", "EnumerateDevices");
|
||||
+
|
||||
+ DBusError error;
|
||||
+ dbus_error_init (&error);
|
||||
+ DBusConnection *con = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
|
||||
+
|
||||
+ message.Send(con, &error);
|
||||
+
|
||||
+ if (!dbus_error_is_set(&error))
|
||||
+ hasUDisks = true;
|
||||
+ else
|
||||
+ CLog::Log(LOGDEBUG, "UDisks: %s - %s", error.name, error.message);
|
||||
+
|
||||
+ dbus_error_free (&error);
|
||||
+ dbus_connection_unref(con);
|
||||
+
|
||||
+ return hasUDisks;
|
||||
+}
|
||||
+
|
||||
+void CUDisksProvider::DeviceAdded(const char *object, IStorageEventsCallback *callback)
|
||||
+{
|
||||
+ CLog::Log(LOGDEBUG, "UDisks: DeviceAdded (%s)", object);
|
||||
+
|
||||
+ if (m_AvailableDevices[object])
|
||||
+ {
|
||||
+ CLog::Log(LOGWARNING, "UDisks: Inconsistency found! DeviceAdded on an indexed disk");
|
||||
+ delete m_AvailableDevices[object];
|
||||
+ }
|
||||
+
|
||||
+ CUDiskDevice *device = NULL;
|
||||
+ device = new CUDiskDevice(object);
|
||||
+ m_AvailableDevices[object] = device;
|
||||
+
|
||||
+ if (g_advancedSettings.m_handleMounting)
|
||||
+ device->Mount();
|
||||
+
|
||||
+ CLog::Log(LOGDEBUG, "UDisks: DeviceAdded - %s", device->toString().c_str());
|
||||
+ if (device->m_isMounted && device->IsApproved())
|
||||
+ {
|
||||
+ CLog::Log(LOGNOTICE, "UDisks: Added %s", device->m_MountPath.c_str());
|
||||
+ if (callback)
|
||||
+ callback->OnStorageAdded(device->m_Label, device->m_MountPath);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+void CUDisksProvider::DeviceRemoved(const char *object, IStorageEventsCallback *callback)
|
||||
+{
|
||||
+ CLog::Log(LOGDEBUG, "UDisks: DeviceRemoved (%s)", object);
|
||||
+
|
||||
+ CUDiskDevice *device = m_AvailableDevices[object];
|
||||
+ if (device)
|
||||
+ {
|
||||
+ if (device->m_isMounted && callback)
|
||||
+ callback->OnStorageUnsafelyRemoved(device->m_Label);
|
||||
+
|
||||
+ delete m_AvailableDevices[object];
|
||||
+ m_AvailableDevices.erase(object);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+void CUDisksProvider::DeviceChanged(const char *object, IStorageEventsCallback *callback)
|
||||
+{
|
||||
+ CLog::Log(LOGDEBUG, "UDisks: DeviceChanged (%s)", object);
|
||||
+
|
||||
+ CUDiskDevice *device = m_AvailableDevices[object];
|
||||
+ if (device == NULL)
|
||||
+ {
|
||||
+ CLog::Log(LOGWARNING, "UDisks: Inconsistency found! DeviceChanged on an unindexed disk");
|
||||
+ DeviceAdded(object, callback);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ bool mounted = device->m_isMounted;
|
||||
+ device->Update();
|
||||
+ if (!mounted && device->m_isMounted && callback)
|
||||
+ callback->OnStorageAdded(device->m_MountPath, device->m_Label);
|
||||
+ else if (mounted && !device->m_isMounted && callback)
|
||||
+ callback->OnStorageSafelyRemoved(device->m_Label);
|
||||
+
|
||||
+ CLog::Log(LOGDEBUG, "UDisks: DeviceChanged - %s", device->toString().c_str());
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+std::vector<CStdString> CUDisksProvider::EnumerateDisks()
|
||||
+{
|
||||
+ std::vector<CStdString> devices;
|
||||
+ CDBusMessage message("org.freedesktop.UDisks", "/org/freedesktop/UDisks", "org.freedesktop.UDisks", "EnumerateDevices");
|
||||
+ DBusMessage *reply = message.SendSystem();
|
||||
+ if (reply)
|
||||
+ {
|
||||
+ char** disks = NULL;
|
||||
+ int length = 0;
|
||||
+
|
||||
+ if (dbus_message_get_args (reply, NULL, DBUS_TYPE_ARRAY, DBUS_TYPE_OBJECT_PATH, &disks, &length, DBUS_TYPE_INVALID))
|
||||
+ {
|
||||
+ for (int i = 0; i < length; i++)
|
||||
+ devices.push_back(disks[i]);
|
||||
+
|
||||
+ dbus_free_string_array(disks);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return devices;
|
||||
+}
|
||||
+
|
||||
+void CUDisksProvider::GetDisks(VECSOURCES& devices, bool EnumerateRemovable)
|
||||
+{
|
||||
+ DeviceMap::iterator itr;
|
||||
+
|
||||
+ for (itr = m_AvailableDevices.begin(); itr != m_AvailableDevices.end(); ++itr)
|
||||
+ {
|
||||
+ CUDiskDevice *device = itr->second;
|
||||
+ if (device && device->IsApproved() && device->m_isSystemInternal != EnumerateRemovable)
|
||||
+ devices.push_back(device->ToMediaShare());
|
||||
+ }
|
||||
+}
|
||||
+#endif
|
||||
diff -Naur xbmc-29490/xbmc/linux/UDisksProvider.h xbmc-29490.patch/xbmc/linux/UDisksProvider.h
|
||||
--- xbmc-29490/xbmc/linux/UDisksProvider.h 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ xbmc-29490.patch/xbmc/linux/UDisksProvider.h 2010-04-25 23:12:52.130485628 +0200
|
||||
@@ -0,0 +1,86 @@
|
||||
+#pragma once
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2009 Team XBMC
|
||||
+ * http://www.xbmc.org
|
||||
+ *
|
||||
+ * This Program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 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 XBMC; 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
|
||||
+ *
|
||||
+ */
|
||||
+#include "IStorageProvider.h"
|
||||
+#ifdef HAS_DBUS
|
||||
+#include "DBusUtil.h"
|
||||
+
|
||||
+class CUDiskDevice
|
||||
+{
|
||||
+public:
|
||||
+ CUDiskDevice(const char *DeviceKitUDI);
|
||||
+ ~CUDiskDevice() { }
|
||||
+
|
||||
+ void Update();
|
||||
+
|
||||
+ bool Mount();
|
||||
+ bool UnMount();
|
||||
+
|
||||
+ bool IsApproved();
|
||||
+
|
||||
+ CStdString toString();
|
||||
+
|
||||
+ CMediaSource ToMediaShare();
|
||||
+
|
||||
+ CStdString m_UDI, m_DeviceKitUDI, m_MountPath, m_FileSystem, m_Label;
|
||||
+ bool m_isMounted, m_isMountedByUs, m_isRemovable, m_isPartition, m_isFileSystem, m_isSystemInternal;
|
||||
+ float m_PartitionSizeGiB;
|
||||
+};
|
||||
+
|
||||
+class CUDisksProvider : public IStorageProvider
|
||||
+{
|
||||
+public:
|
||||
+ CUDisksProvider();
|
||||
+ virtual ~CUDisksProvider();
|
||||
+
|
||||
+ virtual void Initialize();
|
||||
+ virtual void Stop() { }
|
||||
+
|
||||
+ virtual void GetLocalDrives(VECSOURCES &localDrives) { GetDisks(localDrives, false); }
|
||||
+ virtual void GetRemovableDrives(VECSOURCES &removableDrives) { GetDisks(removableDrives, true); }
|
||||
+
|
||||
+ virtual bool Eject(CStdString mountpath);
|
||||
+
|
||||
+ virtual std::vector<CStdString> GetDiskUsage();
|
||||
+
|
||||
+ virtual bool PumpDriveChangeEvents(IStorageEventsCallback *callback);
|
||||
+
|
||||
+ static bool HasUDisks();
|
||||
+private:
|
||||
+ typedef std::map<CStdString, CUDiskDevice *> DeviceMap;
|
||||
+ typedef std::pair<CStdString, CUDiskDevice *> DevicePair;
|
||||
+
|
||||
+ void DeviceAdded(const char *object, IStorageEventsCallback *callback);
|
||||
+ void DeviceRemoved(const char *object, IStorageEventsCallback *callback);
|
||||
+ void DeviceChanged(const char *object, IStorageEventsCallback *callback);
|
||||
+
|
||||
+ std::vector<CStdString> EnumerateDisks();
|
||||
+
|
||||
+ void GetDisks(VECSOURCES& devices, bool EnumerateRemovable);
|
||||
+
|
||||
+ int m_DaemonVersion;
|
||||
+
|
||||
+ DeviceMap m_AvailableDevices;
|
||||
+
|
||||
+ DBusConnection *m_connection;
|
||||
+ DBusError m_error;
|
||||
+};
|
||||
+#endif
|
||||
diff -Naur xbmc-29490/xbmc/PowerManager.cpp xbmc-29490.patch/xbmc/PowerManager.cpp
|
||||
--- xbmc-29490/xbmc/PowerManager.cpp 2010-04-24 22:43:14.000000000 +0200
|
||||
+++ xbmc-29490.patch/xbmc/PowerManager.cpp 2010-04-25 23:12:52.132484681 +0200
|
||||
@@ -35,6 +35,7 @@
|
||||
#ifdef __APPLE__
|
||||
#include "osx/CocoaPowerSyscall.h"
|
||||
#elif defined(_LINUX) && defined(HAS_DBUS)
|
||||
+#include "linux/ConsoleUPowerSyscall.h"
|
||||
#include "linux/ConsoleDeviceKitPowerSyscall.h"
|
||||
#ifdef HAS_HAL
|
||||
#include "linux/HALPowerSyscall.h"
|
||||
@@ -74,6 +75,8 @@
|
||||
#elif defined(_LINUX) && defined(HAS_DBUS)
|
||||
if (CConsoleDeviceKitPowerSyscall::HasDeviceConsoleKit())
|
||||
m_instance = new CConsoleDeviceKitPowerSyscall();
|
||||
+ else if (CConsoleUPowerSyscall::HasDeviceConsoleKit())
|
||||
+ m_instance = new CConsoleUPowerSyscall();
|
||||
#ifdef HAS_HAL
|
||||
else
|
||||
m_instance = new CHALPowerSyscall();
|
@ -1 +1 @@
|
||||
http://sources.openelec.tv/svn/xbmc-29605.tar.bz2
|
||||
http://sources.openelec.tv/svn/xbmc-29740.tar.bz2
|
||||
|
Loading…
x
Reference in New Issue
Block a user