aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xaddons/webinterface.default/index.html4
-rw-r--r--configure.in2
-rwxr-xr-xlanguage/English/strings.po2
-rw-r--r--lib/libUPnP/Platinum/Source/Devices/MediaServer/PltDidl.h4
-rw-r--r--lib/libUPnP/patches/0033-platinum-fix-filter-mask-values-of-xbmc-votes-and-xb.patch28
-rw-r--r--lib/libdvd/libdvdread/src/dvd_input.c5
-rw-r--r--lib/libdvd/patches/07-libdvdread-fix-partial-read.diff30
-rw-r--r--project/VS2010Express/XBMC.vcxproj6
-rw-r--r--project/VS2010Express/libPlatinum.vcxproj4
-rw-r--r--project/Win32BuildSetup/BuildSetup.bat3
-rw-r--r--project/Win32BuildSetup/genNsisInstaller.nsi32
-rw-r--r--system/keyboardlayouts.xml20
-rwxr-xr-xtools/Linux/packaging/mk-debian-package.sh1
-rw-r--r--tools/android/packaging/xbmc/src/org/xbmc/kodi/Main.java.in8
-rw-r--r--tools/android/packaging/xbmc/src/org/xbmc/kodi/Splash.java.in6
-rw-r--r--tools/darwin/Configurations/Common.xcconfig.in2
-rw-r--r--tools/depends/target/boblight/01-fix_fpermissive.patch11
-rw-r--r--tools/depends/target/boblight/02-fixandroid.patch35
-rw-r--r--tools/depends/target/boblight/Makefile53
-rw-r--r--tools/depends/target/sqlite3/Makefile3
-rw-r--r--tools/depends/target/sqlite3/fix-32bits-on-64bits.patch11
-rw-r--r--xbmc/Application.cpp5
-rw-r--r--xbmc/GUIInfoManager.cpp5
-rw-r--r--xbmc/android/activity/XBMCApp.cpp2
-rw-r--r--xbmc/cores/DllLoader/exports/emu_msvcrt.cpp5
-rw-r--r--xbmc/cores/VideoRenderers/LinuxRendererGL.cpp8
-rw-r--r--xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp7
-rw-r--r--xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp2
-rw-r--r--xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp10
-rw-r--r--xbmc/cores/dvdplayer/DVDPlayer.cpp7
-rw-r--r--xbmc/filesystem/CacheStrategy.cpp32
-rw-r--r--xbmc/filesystem/CacheStrategy.h14
-rw-r--r--xbmc/filesystem/CircularCache.cpp6
-rw-r--r--xbmc/filesystem/CircularCache.h2
-rw-r--r--xbmc/filesystem/FileCache.cpp29
-rw-r--r--xbmc/filesystem/MemBufferCache.cpp3
-rw-r--r--xbmc/filesystem/MemBufferCache.h2
-rw-r--r--xbmc/filesystem/PVRDirectory.cpp14
-rw-r--r--xbmc/filesystem/SMBDirectory.cpp10
-rw-r--r--xbmc/filesystem/win32/Win32SMBFile.cpp2
-rw-r--r--xbmc/interfaces/json-rpc/AudioLibrary.cpp14
-rw-r--r--xbmc/interfaces/json-rpc/AudioLibrary.h1
-rw-r--r--xbmc/interfaces/json-rpc/FileOperations.cpp8
-rw-r--r--xbmc/interfaces/json-rpc/schema/version.txt2
-rw-r--r--xbmc/powermanagement/PowerManager.cpp6
-rw-r--r--xbmc/pvr/PVRManager.cpp13
-rw-r--r--xbmc/pvr/channels/PVRChannel.cpp5
-rw-r--r--xbmc/pvr/channels/PVRChannelGroup.cpp2
-rw-r--r--xbmc/pvr/channels/PVRChannelGroups.cpp2
-rw-r--r--xbmc/pvr/channels/PVRChannelGroupsContainer.cpp1
-rw-r--r--xbmc/settings/dialogs/GUIDialogContentSettings.cpp1
51 files changed, 390 insertions, 100 deletions
diff --git a/addons/webinterface.default/index.html b/addons/webinterface.default/index.html
index df3a5618ed..40b53037d0 100755
--- a/addons/webinterface.default/index.html
+++ b/addons/webinterface.default/index.html
@@ -1,10 +1,10 @@
<!DOCTYPE html>
<html>
<head>
- <title>XBMC</title>
+ <title>Kodi</title>
<meta http-equiv="Content-Language" content="EN" />
<meta http-equiv="Content-Type" content="UTF-8" />
- <!-- <link rel="search" href="provider.xml" type="application/opensearchdescription+xml" title="XBMC Library" /> -->
+ <!-- <link rel="search" href="provider.xml" type="application/opensearchdescription+xml" title="Kodi Library" /> -->
<link rel="icon" href="favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<!-- <link href="/images/logo.png" rel="image_src" /> -->
diff --git a/configure.in b/configure.in
index 3d54afa39f..0474a74c8f 100644
--- a/configure.in
+++ b/configure.in
@@ -2344,7 +2344,7 @@ fi
if test "x$use_upnp" != "xno"; then
final_message="$final_message\n UPnP support:\t\tYes"
USE_UPNP=1
- UPNP_DEFINES='-DNPT_CONFIG_ENABLE_LOGGING -DPLT_HTTP_DEFAULT_USER_AGENT="\"UPnP/1.0 DLNADOC/1.50 XBMC\"" -DPLT_HTTP_DEFAULT_SERVER="\"UPnP/1.0 DLNADOC/1.50 XBMC\""'
+ UPNP_DEFINES='-DNPT_CONFIG_ENABLE_LOGGING -DPLT_HTTP_DEFAULT_USER_AGENT="\"UPnP/1.0 DLNADOC/1.50 Kodi\"" -DPLT_HTTP_DEFAULT_SERVER="\"UPnP/1.0 DLNADOC/1.50 Kodi\""'
AC_DEFINE([USE_UPNP], [1], [Define to 1 to enable UPnP support.])
else
USE_UPNP=0
diff --git a/language/English/strings.po b/language/English/strings.po
index ca03c3c432..3b51f4984d 100755
--- a/language/English/strings.po
+++ b/language/English/strings.po
@@ -12686,7 +12686,7 @@ msgstr ""
#. Info dialog after migrating userdata from xbmc to kodi
#: xbmc/Application.cpp
msgctxt "#24129"
-msgid "The configuration of XBMC has been moved to the new location for Kodi. Please refer to http://kodi.wiki/view/Migration_from_XBMC_to_Kodi - this message will not be shown again!"
+msgid "The configuration of XBMC has been moved to the new location for Kodi. Please refer to http://kodi.wiki/view/Migration - this message will not be shown again!"
msgstr ""
#empty strings from id 24130 to 24998
diff --git a/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltDidl.h b/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltDidl.h
index 0f7c892422..9e87599955 100644
--- a/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltDidl.h
+++ b/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltDidl.h
@@ -97,8 +97,8 @@
#define PLT_FILTER_MASK_XBMC_DATEADDED NPT_UINT64_C(0x0000100000000000)
#define PLT_FILTER_MASK_XBMC_RATING NPT_UINT64_C(0x0000200000000000)
-#define PLT_FILTER_MASK_XBMC_VOTES NPT_UINT64_C(0x0000300000000000)
-#define PLT_FILTER_MASK_XBMC_ARTWORK NPT_UINT64_C(0x0000400000000000)
+#define PLT_FILTER_MASK_XBMC_VOTES NPT_UINT64_C(0x0000400000000000)
+#define PLT_FILTER_MASK_XBMC_ARTWORK NPT_UINT64_C(0x0000800000000000)
#define PLT_FILTER_FIELD_TITLE "dc:title"
#define PLT_FILTER_FIELD_CREATOR "dc:creator"
diff --git a/lib/libUPnP/patches/0033-platinum-fix-filter-mask-values-of-xbmc-votes-and-xb.patch b/lib/libUPnP/patches/0033-platinum-fix-filter-mask-values-of-xbmc-votes-and-xb.patch
new file mode 100644
index 0000000000..072914b5ba
--- /dev/null
+++ b/lib/libUPnP/patches/0033-platinum-fix-filter-mask-values-of-xbmc-votes-and-xb.patch
@@ -0,0 +1,28 @@
+From 210409361c07945de187be139519ff98d81919ee Mon Sep 17 00:00:00 2001
+From: montellese <montellese@xbmc.org>
+Date: Sat, 29 Nov 2014 19:47:45 +0100
+Subject: [PATCH] platinum: fix filter mask values of xbmc:votes and
+ xbmc:artwork
+
+---
+ lib/libUPnP/Platinum/Source/Devices/MediaServer/PltDidl.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltDidl.h b/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltDidl.h
+index 0f7c892..9e87599 100644
+--- a/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltDidl.h
++++ b/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltDidl.h
+@@ -97,8 +97,8 @@
+
+ #define PLT_FILTER_MASK_XBMC_DATEADDED NPT_UINT64_C(0x0000100000000000)
+ #define PLT_FILTER_MASK_XBMC_RATING NPT_UINT64_C(0x0000200000000000)
+-#define PLT_FILTER_MASK_XBMC_VOTES NPT_UINT64_C(0x0000300000000000)
+-#define PLT_FILTER_MASK_XBMC_ARTWORK NPT_UINT64_C(0x0000400000000000)
++#define PLT_FILTER_MASK_XBMC_VOTES NPT_UINT64_C(0x0000400000000000)
++#define PLT_FILTER_MASK_XBMC_ARTWORK NPT_UINT64_C(0x0000800000000000)
+
+ #define PLT_FILTER_FIELD_TITLE "dc:title"
+ #define PLT_FILTER_FIELD_CREATOR "dc:creator"
+--
+1.9.4.msysgit.2
+
diff --git a/lib/libdvd/libdvdread/src/dvd_input.c b/lib/libdvd/libdvdread/src/dvd_input.c
index 4a0252431a..7efff01acf 100644
--- a/lib/libdvd/libdvdread/src/dvd_input.c
+++ b/lib/libdvd/libdvdread/src/dvd_input.c
@@ -217,12 +217,14 @@ static int file_read(dvd_input_t dev, void *buffer, int blocks, int flags)
{
size_t len;
ssize_t ret;
+ char *buf;
+ buf = (char*) buffer;
len = (size_t)blocks * DVD_VIDEO_LB_LEN;
while(len > 0) {
- ret = read(dev->fd, buffer, len);
+ ret = read(dev->fd, buf, len);
if(ret < 0) {
/* One of the reads failed, too bad. We won't even bother
@@ -241,6 +243,7 @@ static int file_read(dvd_input_t dev, void *buffer, int blocks, int flags)
return (int) (bytes / DVD_VIDEO_LB_LEN);
}
+ buf += ret;
len -= ret;
}
diff --git a/lib/libdvd/patches/07-libdvdread-fix-partial-read.diff b/lib/libdvd/patches/07-libdvdread-fix-partial-read.diff
new file mode 100644
index 0000000000..9685cd3dd8
--- /dev/null
+++ b/lib/libdvd/patches/07-libdvdread-fix-partial-read.diff
@@ -0,0 +1,30 @@
+see upstream patch here https://mailman.videolan.org/pipermail/libdvdnav-devel/2014-November/000346.html
+
+diff --git a/lib/libdvd/libdvdread/src/dvd_input.c b/lib/libdvd/libdvdread/src/dvd_input.c
+index 4a02524..7efff01 100644
+--- a/lib/libdvd/libdvdread/src/dvd_input.c
++++ b/lib/libdvd/libdvdread/src/dvd_input.c
+@@ -217,12 +217,14 @@ static int file_read(dvd_input_t dev, void *buffer, int blocks, int flags)
+ {
+ size_t len;
+ ssize_t ret;
++ char *buf;
+
++ buf = (char*) buffer;
+ len = (size_t)blocks * DVD_VIDEO_LB_LEN;
+
+ while(len > 0) {
+
+- ret = read(dev->fd, buffer, len);
++ ret = read(dev->fd, buf, len);
+
+ if(ret < 0) {
+ /* One of the reads failed, too bad. We won't even bother
+@@ -241,6 +243,7 @@ static int file_read(dvd_input_t dev, void *buffer, int blocks, int flags)
+ return (int) (bytes / DVD_VIDEO_LB_LEN);
+ }
+
++ buf += ret;
+ len -= ret;
+ }
+
diff --git a/project/VS2010Express/XBMC.vcxproj b/project/VS2010Express/XBMC.vcxproj
index 9c36fae5f4..ce1b60ac8e 100644
--- a/project/VS2010Express/XBMC.vcxproj
+++ b/project/VS2010Express/XBMC.vcxproj
@@ -76,7 +76,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>..\..\;..\..\xbmc\;..\..\xbmc\cores\dvdplayer;..\..\xbmc\win32;..\..\lib;..\..\lib\win32\ffmpeg;..\..\lib\libUPnP;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Platinum\Source\Extras;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Neptune\Source\System\Win32;..\..\lib\win32\pcre;..\..\lib\win32;..\..\xbmc\cores\AudioEngine\;..\..\addons\library.xbmc.gui;..\..\addons\library.xbmc.addon;..\..\addons\library.xbmc.pvr;..\..\addons\library.xbmc.codec;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NOMINMAX;_USE_32BIT_TIME_T;HAS_DX;D3D_DEBUG_INFO;__STDC_CONSTANT_MACROS;_SECURE_SCL=0;TAGLIB_STATIC;NPT_CONFIG_ENABLE_LOGGING;PLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 XBMC";PLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>NOMINMAX;_USE_32BIT_TIME_T;HAS_DX;D3D_DEBUG_INFO;__STDC_CONSTANT_MACROS;_SECURE_SCL=0;TAGLIB_STATIC;NPT_CONFIG_ENABLE_LOGGING;PLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 Kodi";PLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50 Kodi";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>Async</ExceptionHandling>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
@@ -108,7 +108,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Testsuite|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>..\..\;..\..\xbmc\;..\..\xbmc\cores\dvdplayer;..\..\xbmc\win32;..\..\lib;..\..\lib\win32\ffmpeg;..\..\lib\libUPnP;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Platinum\Source\Extras;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Neptune\Source\System\Win32;..\..\lib\win32\pcre;..\..\lib\win32;..\..\xbmc\cores\AudioEngine\;..\..\addons\library.xbmc.gui;..\..\addons\library.xbmc.addon;..\..\addons\library.xbmc.pvr;..\..\addons\library.xbmc.codec;..\..\lib\gtest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_CONSOLE;NOMINMAX;_USE_32BIT_TIME_T;HAS_DX;D3D_DEBUG_INFO;__STDC_CONSTANT_MACROS;_SECURE_SCL=0;TAGLIB_STATIC;NPT_CONFIG_ENABLE_LOGGING;PLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 XBMC";PLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>_CONSOLE;NOMINMAX;_USE_32BIT_TIME_T;HAS_DX;D3D_DEBUG_INFO;__STDC_CONSTANT_MACROS;_SECURE_SCL=0;TAGLIB_STATIC;NPT_CONFIG_ENABLE_LOGGING;PLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 Kodi";PLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50 Kodi";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>Async</ExceptionHandling>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
@@ -143,7 +143,7 @@
<ClCompile>
<AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>
<AdditionalIncludeDirectories>..\..\;..\..\xbmc\;..\..\xbmc\cores\dvdplayer;..\..\xbmc\win32;..\..\lib;..\..\lib\win32\ffmpeg;..\..\lib\libUPnP;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Platinum\Source\Extras;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Neptune\Source\System\Win32;..\..\lib\win32\pcre;..\..\lib\win32;..\..\xbmc\cores\AudioEngine\;..\..\addons\library.xbmc.gui;..\..\addons\library.xbmc.addon;..\..\addons\library.xbmc.pvr;..\..\addons\library.xbmc.codec;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NOMINMAX;_USE_32BIT_TIME_T;HAS_DX;__STDC_CONSTANT_MACROS;TAGLIB_STATIC;NPT_CONFIG_ENABLE_LOGGING;PLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 XBMC";PLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>NOMINMAX;_USE_32BIT_TIME_T;HAS_DX;__STDC_CONSTANT_MACROS;TAGLIB_STATIC;NPT_CONFIG_ENABLE_LOGGING;PLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 Kodi";PLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50 Kodi";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>Async</ExceptionHandling>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
diff --git a/project/VS2010Express/libPlatinum.vcxproj b/project/VS2010Express/libPlatinum.vcxproj
index a4da7cc9e3..403ab0c2b9 100644
--- a/project/VS2010Express/libPlatinum.vcxproj
+++ b/project/VS2010Express/libPlatinum.vcxproj
@@ -51,7 +51,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>..\..\lib\libUPnP;..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Platinum\Source\Extras;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Neptune\Source\System\Win32</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;NPT_CONFIG_ENABLE_LOGGING;PLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 XBMC";PLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50 XBMC";_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>_LIB;NPT_CONFIG_ENABLE_LOGGING;PLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 Kodi";PLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50 Kodi";_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeader>
</PrecompiledHeader>
<DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
@@ -81,7 +81,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>..\..\lib\libUPnP;..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Platinum\Source\Extras;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Neptune\Source\System\Win32</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;NPT_CONFIG_ENABLE_LOGGING;PLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 XBMC";PLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50 XBMC";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>_LIB;NPT_CONFIG_ENABLE_LOGGING;PLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 Kodi";PLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50 Kodi";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeader>
</PrecompiledHeader>
<DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
diff --git a/project/Win32BuildSetup/BuildSetup.bat b/project/Win32BuildSetup/BuildSetup.bat
index 8883607992..d262e80929 100644
--- a/project/Win32BuildSetup/BuildSetup.bat
+++ b/project/Win32BuildSetup/BuildSetup.bat
@@ -163,10 +163,13 @@ set WORKSPACE=%CD%\..\..
Echo exclude.txt>>exclude.txt
Echo xbmc.log>>exclude.txt
Echo xbmc.old.log>>exclude.txt
+ Echo kodi.log>>exclude.txt
+ Echo kodi.old.log>>exclude.txt
rem Exclude userdata files
Echo userdata\advancedsettings.xml>>exclude.txt
Echo userdata\guisettings.xml>>exclude.txt
Echo userdata\mediasources.xml>>exclude.txt
+ Echo userdata\ModeLines_template.xml>>exclude.txt
Echo userdata\passwords.xml>>exclude.txt
Echo userdata\profiles.xml>>exclude.txt
Echo userdata\sources.xml>>exclude.txt
diff --git a/project/Win32BuildSetup/genNsisInstaller.nsi b/project/Win32BuildSetup/genNsisInstaller.nsi
index 1577d11ec2..d320dfd6a1 100644
--- a/project/Win32BuildSetup/genNsisInstaller.nsi
+++ b/project/Win32BuildSetup/genNsisInstaller.nsi
@@ -42,8 +42,11 @@
!define MUI_HEADERIMAGE
!define MUI_ICON "..\..\tools\windows\packaging\media\application.ico"
+ !define MUI_UNICON "..\..\tools\windows\packaging\media\application.ico"
!define MUI_HEADERIMAGE_BITMAP "..\..\tools\windows\packaging\media\installer\header.bmp"
+ !define MUI_HEADERIMAGE_UNBITMAP "..\..\tools\windows\packaging\media\installer\header.bmp"
!define MUI_WELCOMEFINISHPAGE_BITMAP "..\..\tools\windows\packaging\media\installer\welcome-left.bmp"
+ !define MUI_UNWELCOMEFINISHPAGE_BITMAP "..\..\tools\windows\packaging\media\installer\welcome-left.bmp"
!define MUI_COMPONENTSPAGE_SMALLDESC
!define MUI_FINISHPAGE_LINK "Please visit ${WEBSITE} for more information."
!define MUI_FINISHPAGE_LINK_LOCATION "${WEBSITE}"
@@ -108,7 +111,7 @@ Function HandleUserdataMigration
${If} ${FileExists} "$APPDATA\XBMC\*.*"
${AndIfNot} ${FileExists} "$APPDATA\${APP_NAME}\*.*"
Rename "$APPDATA\XBMC\" "$APPDATA\${APP_NAME}\"
- MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST|MB_SETFOREGROUND "Your current XBMC userdata folder was moved to the new ${APP_NAME} userdata location.$\nThis to make the transition as smooth as possible without any user interactions needed."
+ MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST|MB_SETFOREGROUND "Your current XBMC settings and library data were moved to the new ${APP_NAME} userdata location.$\nThis is to make the transition without any user interaction needed."
;mark that it was migrated in the filesystem - kodi will show another info message during first Kodi startup
;for really making sure that the user has read that message.
FileOpen $0 "$APPDATA\${APP_NAME}\.kodi_data_was_migrated" w
@@ -118,7 +121,7 @@ Function HandleUserdataMigration
; old installation was found but not uninstalled - inform the user
; that his userdata is not automatically migrted
${If} $OldXBMCInstallationFound == "1"
- MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST|MB_SETFOREGROUND "There was a former XBMC Installation detected but you didn't uninstall it. The older profile data will not be moved to the ${APP_NAME} userdata location. ${APP_NAME} will use default profile settings."
+ MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST|MB_SETFOREGROUND "There was a former XBMC Installation detected but you didn't uninstall it. The older settings and library data will not be moved to the ${APP_NAME} userdata location. ${APP_NAME} will use the default settings."
${EndIf}
${EndIf}
FunctionEnd
@@ -130,7 +133,7 @@ Function HandleOldXBMCInstallation
;ask if a former XBMC installation should be uninstalled if detected
${IfNot} $INSTDIR_XBMC_OLD == ""
StrCpy $OldXBMCInstallationFound "1"
- MessageBox MB_YESNO|MB_ICONQUESTION "A previous XBMC installation was detected. Would you like to uninstall it?" IDYES true IDNO false
+ MessageBox MB_YESNO|MB_ICONQUESTION "You are upgrading from XBMC to ${APP_NAME}. Would you like to copy your settings and library data from XBMC to ${APP_NAME}?$\nWARNING: If you do so, XBMC will be completely un-installed and removed. It is recommended that you back up your library before continuing.$\nFor more information visit http://kodi.wiki/view/Userdata " IDYES true IDNO false
true:
DetailPrint "Uninstalling $INSTDIR_XBMC"
SetDetailsPrint none
@@ -156,7 +159,7 @@ Function HandleOldKodiInstallation
${IfNot} $CleanDestDir == "0"
${AndIfNot} $INSTDIR_KODI == ""
${AndIfNot} $INSTDIR_KODI == $INSTDIR
- MessageBox MB_YESNO|MB_ICONQUESTION "A previous ${APP_NAME} installation in a different folder was detected. Would you like to uninstall it?" IDYES true IDNO false
+ MessageBox MB_YESNO|MB_ICONQUESTION "A previous ${APP_NAME} installation in a different folder was detected. Would you like to uninstall it?$\nYour current settings and library data will be kept intact." IDYES true IDNO false
true:
DetailPrint "Uninstalling $INSTDIR_KODI"
SetDetailsPrint none
@@ -174,7 +177,7 @@ Function HandleKodiInDestDir
;if former Kodi installation was detected in the destination directory - uninstall it first
${IfNot} $INSTDIR == ""
${AndIf} ${FileExists} "$INSTDIR\uninstall.exe"
- MessageBox MB_YESNO|MB_ICONQUESTION "A previous installation was detected in the selected destination folder. Do you really want to overwrite it?" IDYES true IDNO false
+ MessageBox MB_YESNO|MB_ICONQUESTION "A previous installation was detected in the selected destination folder. Do you really want to overwrite it?$\nYour settings and library data will be kept intact." IDYES true IDNO false
true:
StrCpy $CleanDestDir "1"
Goto done
@@ -229,15 +232,8 @@ Section "${APP_NAME}" SecAPP
File /r "${app_root}\application\sounds\*.*"
SetOutPath "$INSTDIR\system"
File /r "${app_root}\application\system\*.*"
-
- ;Turn off overwrite to prevent files in APPDATA\Kodi\userdata\ from being overwritten
- SetOverwrite off
- IfFileExists $INSTDIR\userdata\*.* 0 +2
- SetOutPath "$APPDATA\${APP_NAME}\userdata"
- File /r "${app_root}\application\userdata\*.*"
-
- ;Turn on overwrite for rest of install
- SetOverwrite on
+ SetOutPath "$INSTDIR\userdata"
+ File /r "${app_root}\application\userdata\*.*"
;Store installation folder
WriteRegStr HKCU "Software\${APP_NAME}" "" $INSTDIR
@@ -315,19 +311,18 @@ Function un.UnPageProfile
Abort
${EndIf}
- ${NSD_CreateLabel} 0 0 100% 12u "Do you want to delete the profile folder?"
+ ${NSD_CreateLabel} 0 0 100% 12u "Do you want to delete the profile folder which contains your ${APP_NAME} settings and library data?"
Pop $0
${NSD_CreateText} 0 13u 100% 12u "$APPDATA\${APP_NAME}\"
Pop $UnPageProfileEditBox
SendMessage $UnPageProfileEditBox ${EM_SETREADONLY} 1 0
- ${NSD_CreateLabel} 0 46u 100% 24u "Leave unchecked to keep the profile folder for later use or check to delete the profile folder."
+ ${NSD_CreateLabel} 0 30u 100% 24u "Leave the option box below unchecked to keep the profile folder which contains ${APP_NAME}'s settings and library data for later use. If you are sure you want to delete the profile folder you may check the option box.$\nWARNING: Deletion of the profile folder cannot be undone and you will lose all settings and library data."
Pop $0
- ${NSD_CreateCheckbox} 0 71u 100% 8u "Yes, also delete the profile folder."
+ ${NSD_CreateCheckbox} 0 71u 100% 8u "Yes, I am sure and grant permission to also delete the profile folder."
Pop $UnPageProfileCheckbox
-
nsDialogs::Show
FunctionEnd
@@ -346,6 +341,7 @@ Section "Uninstall"
RMDir /r "$INSTDIR\media"
RMDir /r "$INSTDIR\sounds"
RMDir /r "$INSTDIR\system"
+ RMDir /r "$INSTDIR\userdata"
Delete "$INSTDIR\*.*"
;Un-install User Data if option is checked, otherwise skip
diff --git a/system/keyboardlayouts.xml b/system/keyboardlayouts.xml
index a2cc711914..b531de7cff 100644
--- a/system/keyboardlayouts.xml
+++ b/system/keyboardlayouts.xml
@@ -124,6 +124,26 @@ Default font lacks support for all characters
<row>`~</row>
</keyboard>
</layout>
+ <layout name="Hungarian QWERTZ">
+ <keyboard>
+ <row>0123456789öüó</row>
+ <row>qwertzuiopőú</row>
+ <row>asdfghjkléáű</row>
+ <row>íyxcvbnm,.-</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>0123456789ÖÜÓ</row>
+ <row>QWERTZUIOPŐÚ</row>
+ <row>ASDFGHJKLÉÁŰ</row>
+ <row>ÍYXCVBNM,.-</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>§'"+!/=()~</row>
+ <row>^;\|Ä€Í÷×ä</row>
+ <row>đĐ[]íłŁ$ߤ</row>
+ <row>#@{}&lt;&gt;*?:_</row>
+ </keyboard>
+ </layout>
<layout name="Polish QWERTY">
<keyboard>
<row>`1234567890-</row>
diff --git a/tools/Linux/packaging/mk-debian-package.sh b/tools/Linux/packaging/mk-debian-package.sh
index 4bdab82629..aea342d09d 100755
--- a/tools/Linux/packaging/mk-debian-package.sh
+++ b/tools/Linux/packaging/mk-debian-package.sh
@@ -99,6 +99,7 @@ function archiveRepo {
cd $REPO_DIR || exit 1
git clean -xfd
echo $REV > VERSION
+ tools/depends/target/ffmpeg/autobuild.sh -d
DEST="kodi-${RELEASEV}~git$(date '+%Y%m%d.%H%M')-${TAG}"
[[ -d debian ]] && rm -rf debian
cd ..
diff --git a/tools/android/packaging/xbmc/src/org/xbmc/kodi/Main.java.in b/tools/android/packaging/xbmc/src/org/xbmc/kodi/Main.java.in
index b1d73c724f..7181e87550 100644
--- a/tools/android/packaging/xbmc/src/org/xbmc/kodi/Main.java.in
+++ b/tools/android/packaging/xbmc/src/org/xbmc/kodi/Main.java.in
@@ -20,7 +20,6 @@ public class Main extends NativeActivity
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
- getWindow().setFormat(PixelFormat.TRANSPARENT);
}
@Override
@@ -35,6 +34,13 @@ public class Main extends NativeActivity
}
@Override
+ public void onStart()
+ {
+ super.onStart();
+ getWindow().setFormat(PixelFormat.TRANSPARENT);
+ }
+
+ @Override
public void onResume()
{
super.onResume();
diff --git a/tools/android/packaging/xbmc/src/org/xbmc/kodi/Splash.java.in b/tools/android/packaging/xbmc/src/org/xbmc/kodi/Splash.java.in
index b5f46fcdda..d3a3efb8ef 100644
--- a/tools/android/packaging/xbmc/src/org/xbmc/kodi/Splash.java.in
+++ b/tools/android/packaging/xbmc/src/org/xbmc/kodi/Splash.java.in
@@ -502,8 +502,7 @@ public class Splash extends Activity {
}
private boolean CheckCpuFeature(String feat) {
- final Pattern FeaturePattern = Pattern.compile(":.*?\\s" + feat
- + "(?:\\s|$)");
+ final Pattern FeaturePattern = Pattern.compile("(?i):.*?\\s" + feat + "(?:\\s|$)");
Matcher m = FeaturePattern.matcher(mCpuinfo);
return m.find();
}
@@ -612,12 +611,13 @@ public class Splash extends Activity {
if (curArch.equalsIgnoreCase("arm")) {
// arm arch: check if the cpu supports neon
boolean ret = ParseCpuFeature();
+ //Log.d(TAG, "/proc/cpuinfo = " + mCpuinfo);
if (!ret) {
mErrorMsg = "Error! Cannot parse CPU features.";
Log.e(TAG, mErrorMsg);
mState = InError;
} else {
- ret = CheckCpuFeature("neon");
+ ret = CheckCpuFeature("neon") || CheckCpuFeature("aarch64"); //aarch64 is always neon
if (!ret) {
mErrorMsg = "This @APP_NAME@ package is not compatible with your device (NEON).\nPlease check the <a href=\"http://wiki.kodi.tv/index.php?title=XBMC_for_Android_specific_FAQ\">Kodi Android wiki</a> for more information.";
Log.e(TAG, mErrorMsg);
diff --git a/tools/darwin/Configurations/Common.xcconfig.in b/tools/darwin/Configurations/Common.xcconfig.in
index f682c6ce3f..0a9a74460e 100644
--- a/tools/darwin/Configurations/Common.xcconfig.in
+++ b/tools/darwin/Configurations/Common.xcconfig.in
@@ -21,6 +21,6 @@
APP_NAME=@APP_NAME@
XBMC_DEPENDS_ROOT = @DEPENDS_ROOT_FOR_XCODE@
-XBMC_GCC_PREPROCESSOR_DEFINITIONS_COMMON = TARGET_POSIX TARGET_DARWIN _LINUX _REENTRANT _FILE_DEFINED _FILE_OFFSET_BITS=64 _LARGEFILE64_SOURCE __STDC_CONSTANT_MACROS HAVE_CONFIG_H HAS_SPC_CODEC NPT_CONFIG_ENABLE_LOGGINGPLT_HTTP_DEFAULT_USER_AGENT="\"UPnP/1.0 DLNADOC/1.50 XBMC\"" PLT_HTTP_DEFAULT_SERVER="\"UPnP/1.0 DLNADOC/1.50 XBMC\""
+XBMC_GCC_PREPROCESSOR_DEFINITIONS_COMMON = TARGET_POSIX TARGET_DARWIN _LINUX _REENTRANT _FILE_DEFINED _FILE_OFFSET_BITS=64 _LARGEFILE64_SOURCE __STDC_CONSTANT_MACROS HAVE_CONFIG_H HAS_SPC_CODEC NPT_CONFIG_ENABLE_LOGGINGPLT_HTTP_DEFAULT_USER_AGENT="\"UPnP/1.0 DLNADOC/1.50 Kodi\"" PLT_HTTP_DEFAULT_SERVER="\"UPnP/1.0 DLNADOC/1.50 Kodi\""
DEBUG_INFORMATION_FORMAT = dwarf-with-dsym
diff --git a/tools/depends/target/boblight/01-fix_fpermissive.patch b/tools/depends/target/boblight/01-fix_fpermissive.patch
new file mode 100644
index 0000000000..29727a67bb
--- /dev/null
+++ b/tools/depends/target/boblight/01-fix_fpermissive.patch
@@ -0,0 +1,11 @@
+--- src/util/miscorig.cpp 2014-11-27 18:31:54.778680630 +0000
++++ src/util/misc.cpp 2014-11-27 18:32:21.986680437 +0000
+@@ -64,7 +64,7 @@
+ //convert . or , to the current locale for correct conversion of ascii float
+ void ConvertFloatLocale(std::string& strfloat)
+ {
+- static struct lconv* locale = localeconv();
++ static const struct lconv* locale = localeconv();
+
+ size_t pos = strfloat.find_first_of(",.");
+
diff --git a/tools/depends/target/boblight/02-fixandroid.patch b/tools/depends/target/boblight/02-fixandroid.patch
new file mode 100644
index 0000000000..8ce63e5b12
--- /dev/null
+++ b/tools/depends/target/boblight/02-fixandroid.patch
@@ -0,0 +1,35 @@
+--- src/util/daemonizeorig.cpp 2014-11-27 18:36:30.474678137 +0000
++++ src/util/daemonize.cpp 2014-11-27 18:36:44.226678082 +0000
+@@ -35,10 +35,12 @@
+ if (setsid() < 0)
+ fprintf(stderr, "setsid(): %s", GetErrno().c_str());
+
++#if !defined(__ANDROID__)
+ //route stdout and stderr to /dev/null
+ fclose(stdout);
+ stdout = fopen("/dev/null", "w");
+ fclose(stderr);
+ stderr = fopen("/dev/null", "w");
++#endif
+ }
+
+--- src/lib/boblightorig.h 2014-11-27 18:38:37.174677063 +0000
++++ src/lib/boblight.h 2014-11-27 18:40:14.810676123 +0000
+@@ -61,7 +61,7 @@
+ //gets a functionpointer from dlsym, and returns char* from dlerror if it didn't work
+ #define BOBLIGHT_FUNCTION(returnvalue, name, arguments) \
+ name = BOBLIGHT_CAST(returnvalue (*) arguments)(dlsym(p_boblight, #name)); \
+- { char* error = dlerror(); if (error) return error; }
++ { char* error = (char *)dlerror(); if (error) return error; }
+
+ void* p_boblight = NULL; //where we put the lib
+
+@@ -79,7 +79,7 @@
+
+ p_boblight = dlopen(filename, RTLD_NOW);
+ if (p_boblight == NULL)
+- return dlerror();
++ return (char *)dlerror();
+
+ //generate dlsym lines
+ #include "boblight-functions.h"
diff --git a/tools/depends/target/boblight/Makefile b/tools/depends/target/boblight/Makefile
new file mode 100644
index 0000000000..bd961ec622
--- /dev/null
+++ b/tools/depends/target/boblight/Makefile
@@ -0,0 +1,53 @@
+include ../../Makefile.include
+DEPS= ../../Makefile.include Makefile
+
+#hint for building a fat lib - "lipo -arch i386 libboblight-i386.dylib -arch x86_64 libboblight-x86_64.dylib -output libboblight-fat.dylib"
+
+# lib name, version
+LIBNAME=libboblight
+VERSION=r478
+SOURCE=$(LIBNAME)-$(VERSION)
+ARCHIVE=$(SOURCE).tar.gz
+
+# configuration settings
+CONFIGURE=./configure --prefix=$(PREFIX) \
+ --without-opengl \
+ --without-portaudio \
+ --without-x11 \
+ --without-libusb
+
+LIBDYLIB=$(PLATFORM)/src/.libs/$(LIBNAME).a
+
+CLEAN_FILES=$(ARCHIVE) $(PLATFORM)
+
+all: $(LIBDYLIB) .installed-$(PLATFORM)
+
+$(TARBALLS_LOCATION)/$(ARCHIVE):
+ cd $(TARBALLS_LOCATION); $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE)
+
+$(PLATFORM): $(TARBALLS_LOCATION)/$(ARCHIVE) $(DEPS)
+ rm -rf $(PLATFORM)/*; mkdir -p $(PLATFORM)
+ cd $(PLATFORM); $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
+ cd $(PLATFORM); patch -p0 < ../01-fix_fpermissive.patch
+ cd $(PLATFORM); patch -p0 < ../02-fixandroid.patch
+ cd $(PLATFORM); autoreconf -vif
+ cd $(PLATFORM); $(CONFIGURE)
+
+$(LIBDYLIB): $(PLATFORM)
+ $(MAKE) -C $(PLATFORM)
+
+.installed-$(PLATFORM): $(LIBDYLIB)
+ifeq ($(OS),android)
+ rm -f $(PLATFORM)/src/.libs/libboblight.la $(PLATFORM)/src/.libs/libboblight.so $(PLATFORM)/src/.libs/libboblight.so.0
+ mv -f $(PLATFORM)/src/.libs/libboblight.so.0.0.0 $(PLATFORM)/src/.libs/libboblight.so
+ $(RPL) -e "libboblight.so.0" "libboblight.so\x00\x00" $(PLATFORM)/src/.libs/libboblight.so
+ -$(READELF) --dynamic $(PLATFORM)/src/.libs/libboblight.so | grep ibrary
+endif
+ echo "libboblight isn't a dependency of XBMC and won't be installed"
+ touch $@
+clean:
+ $(MAKE) -C $(PLATFORM) clean
+ rm -r .installed-$(PLATFORM)
+
+distclean::
+ rm -rf $(PLATFORM) .installed-$(PLATFORM)
diff --git a/tools/depends/target/sqlite3/Makefile b/tools/depends/target/sqlite3/Makefile
index 9bc17fce92..28725e0c85 100644
--- a/tools/depends/target/sqlite3/Makefile
+++ b/tools/depends/target/sqlite3/Makefile
@@ -27,6 +27,9 @@ $(TARBALLS_LOCATION)/$(ARCHIVE):
$(PLATFORM): $(TARBALLS_LOCATION)/$(ARCHIVE) $(DEPS)
rm -rf $(PLATFORM)/*; mkdir -p $(PLATFORM)
cd $(PLATFORM); $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
+ifeq ($(OS),android)
+ cd $(PLATFORM); patch -p0 < ../fix-32bits-on-64bits.patch
+endif
cd $(PLATFORM); $(CONFIGURE)
$(LIBDYLIB): $(PLATFORM)
diff --git a/tools/depends/target/sqlite3/fix-32bits-on-64bits.patch b/tools/depends/target/sqlite3/fix-32bits-on-64bits.patch
new file mode 100644
index 0000000000..cf4d75be1b
--- /dev/null
+++ b/tools/depends/target/sqlite3/fix-32bits-on-64bits.patch
@@ -0,0 +1,11 @@
+--- sqlite3.c.orig 2014-11-19 13:14:16.633721369 +0100
++++ sqlite3.c 2014-11-19 13:23:23.733711563 +0100
+@@ -25301,7 +25301,7 @@
+ #if OS_VXWORKS
+ struct vxworksFileId *pId; /* Unique file ID for vxworks. */
+ #else
+- ino_t ino; /* Inode number */
++ unsigned long long ino; /* Inode number */
+ #endif
+ };
+
diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp
index 875ca391d6..9162708526 100644
--- a/xbmc/Application.cpp
+++ b/xbmc/Application.cpp
@@ -4364,8 +4364,9 @@ void CApplication::UpdateFileState()
// Did the file change?
if (m_progressTrackingItem->GetPath() != "" && m_progressTrackingItem->GetPath() != CurrentFile())
{
- // Ignore for PVR channels, PerformChannelSwitch takes care of this
- if (!m_progressTrackingItem->IsPVRChannel())
+ // Ignore for PVR channels, PerformChannelSwitch takes care of this.
+ // Also ignore playlists as correct video settings have already been saved in PlayFile() - we're causing off-by-1 errors here.
+ if (!m_progressTrackingItem->IsPVRChannel() && g_playlistPlayer.GetCurrentPlaylist() == PLAYLIST_NONE)
SaveFileState();
// Reset tracking item
diff --git a/xbmc/GUIInfoManager.cpp b/xbmc/GUIInfoManager.cpp
index e56bcb8a3b..5d83e37ddb 100644
--- a/xbmc/GUIInfoManager.cpp
+++ b/xbmc/GUIInfoManager.cpp
@@ -1758,10 +1758,7 @@ CStdString CGUIInfoManager::GetLabel(int info, int contextWindow, std::string *f
{
CURL url(((CGUIMediaWindow*)window)->CurrentDirectory().GetPath());
if (url.IsProtocol("plugin"))
- {
- strLabel = url.GetFileName();
- URIUtils::RemoveSlashAtEnd(strLabel);
- }
+ strLabel = URIUtils::GetFileName(url.GetHostName());
}
break;
}
diff --git a/xbmc/android/activity/XBMCApp.cpp b/xbmc/android/activity/XBMCApp.cpp
index 62cf874825..4a336e7257 100644
--- a/xbmc/android/activity/XBMCApp.cpp
+++ b/xbmc/android/activity/XBMCApp.cpp
@@ -343,7 +343,7 @@ int CXBMCApp::android_printf(const char *format, ...)
// For use before CLog is setup by XBMC_Run()
va_list args;
va_start(args, format);
- int result = __android_log_vprint(ANDROID_LOG_VERBOSE, "XBMC", format, args);
+ int result = __android_log_vprint(ANDROID_LOG_VERBOSE, "Kodi", format, args);
va_end(args);
return result;
}
diff --git a/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp b/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp
index 2bd41cd8a3..68ed4f143f 100644
--- a/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp
+++ b/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp
@@ -530,7 +530,10 @@ extern "C"
if (bWrite)
bResult = pFile->OpenForWrite(CUtil::ValidatePath(str), bOverwrite);
else
- bResult = pFile->Open(CUtil::ValidatePath(str), READ_TRUNCATED);
+ bResult = pFile->Open(CUtil::ValidatePath(str), 0 /* READ_TRUNCATED */); // Disabled READ_TRUNCATED for release
+ /* Looks that libdvdnav / libdvdread / libdvdcss have bugs and do not process correctly partial reads */
+ /* All found bug were eliminated but for safety READ_TRUNCATED is disabled for Helix release */
+ /* TODO: enable READ_TRUNCATED after release of Helix */
if (bResult)
{
diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp
index 468c51b2a0..ae7f649805 100644
--- a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp
+++ b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp
@@ -1481,8 +1481,8 @@ void CLinuxRendererGL::RenderFromFBO()
m_fbo.fbo.SetFiltering(GL_TEXTURE_2D, filter);
m_pVideoFilterShader->SetSourceTexture(0);
- m_pVideoFilterShader->SetWidth(m_fbo.width);
- m_pVideoFilterShader->SetHeight(m_fbo.height);
+ m_pVideoFilterShader->SetWidth(m_sourceWidth);
+ m_pVideoFilterShader->SetHeight(m_sourceHeight);
//disable non-linear stretch when a dvd menu is shown, parts of the menu are rendered through the overlay renderer
//having non-linear stretch on breaks the alignment
@@ -1502,8 +1502,8 @@ void CLinuxRendererGL::RenderFromFBO()
VerifyGLState();
- float imgwidth = m_sourceWidth / m_fbo.width;
- float imgheight = m_sourceHeight / m_fbo.height;
+ float imgwidth = m_fbo.width / m_sourceWidth;
+ float imgheight = m_fbo.height / m_sourceHeight;
glBegin(GL_QUADS);
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
index e8ccc67717..34db863517 100644
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
@@ -732,6 +732,13 @@ int CDVDVideoCodecIMX::Decode(BYTE *pData, int iSize, double dts, double pts)
m_frameInfo.pExtInfo->nFrmWidth = (((m_frameInfo.pExtInfo->nFrmWidth) + 15) & ~15);
m_frameInfo.pExtInfo->nFrmHeight = (((m_frameInfo.pExtInfo->nFrmHeight) + 15) & ~15);
+ /* quick & dirty fix to get proper timestamping for VP8 codec */
+ if (m_decOpenParam.CodecFormat == VPU_V_VP8)
+ {
+ idx = VpuFindBuffer(m_frameInfo.pDisplayFrameBuf->pbufY);
+ m_outputBuffers[idx]->SetPts(pts);
+ }
+
retStatus |= VC_PICTURE;
} //VPU_DEC_OUTPUT_DIS
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
index ed7bd74853..578b919ac1 100644
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
@@ -146,6 +146,8 @@ bool CVAAPIContext::CreateContext()
if (g_advancedSettings.CanLogComponent(LOGVIDEO))
CLog::Log(LOGDEBUG, "VAAPI - initialize version %d.%d", major_version, minor_version);
+ if (g_advancedSettings.CanLogComponent(LOGVIDEO))
+ CLog::Log(LOGDEBUG, "VAAPI - driver in use: %s", vaQueryVendorString(m_display));
QueryCaps();
if (!m_profileCount || !m_attributeCount)
diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
index 4218bfc7ae..4147a5764d 100644
--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
+++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
@@ -897,6 +897,12 @@ bool CDVDDemuxFFmpeg::SeekTime(int time, bool backwords, double *startpts)
CSingleLock lock(m_critSection);
ret = av_seek_frame(m_pFormatContext, -1, seek_pts, backwords ? AVSEEK_FLAG_BACKWARD : 0);
+ // demuxer will return failure, if you seek behind eof
+ if (ret < 0 && m_pFormatContext->duration && seek_pts >= (m_pFormatContext->duration + m_pFormatContext->start_time))
+ ret = 0;
+ else if (ret < 0 && m_pInput->IsEOF())
+ ret = 0;
+
if(ret >= 0)
UpdateCurrentPTS();
}
@@ -910,10 +916,6 @@ bool CDVDDemuxFFmpeg::SeekTime(int time, bool backwords, double *startpts)
if(startpts)
*startpts = DVD_MSEC_TO_TIME(time);
- // demuxer will return failure, if you seek to eof
- if (m_pInput->IsEOF() && ret <= 0)
- return true;
-
return (ret >= 0);
}
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
index 7d6e69617c..b6bcb8d066 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
@@ -1728,6 +1728,13 @@ void CDVDPlayer::HandlePlaySpeed()
error = m_clock.GetClock() - m_SpeedState.lastpts;
error *= m_playSpeed / abs(m_playSpeed);
+ // allow a bigger error when going ff, the faster we go
+ // the the bigger is the error we allow
+ if (m_playSpeed > DVD_PLAYSPEED_NORMAL)
+ {
+ error /= m_playSpeed / DVD_PLAYSPEED_NORMAL;
+ }
+
if(error > DVD_MSEC_TO_TIME(1000))
{
error = (int)DVD_TIME_TO_MSEC(m_clock.GetClock()) - m_SpeedState.lastseekpts;
diff --git a/xbmc/filesystem/CacheStrategy.cpp b/xbmc/filesystem/CacheStrategy.cpp
index c1d1409840..f7b4f0a0e5 100644
--- a/xbmc/filesystem/CacheStrategy.cpp
+++ b/xbmc/filesystem/CacheStrategy.cpp
@@ -235,17 +235,18 @@ int64_t CSimpleFileCache::Seek(int64_t iFilePosition)
return iFilePosition;
}
-void CSimpleFileCache::Reset(int64_t iSourcePosition, bool clearAnyway)
+bool CSimpleFileCache::Reset(int64_t iSourcePosition, bool clearAnyway)
{
if (!clearAnyway && IsCachedPosition(iSourcePosition))
{
m_nReadPosition = m_cacheFileRead->Seek(iSourcePosition - m_nStartPosition, SEEK_SET);
- return;
+ return false;
}
m_nStartPosition = iSourcePosition;
m_nWritePosition = m_cacheFileWrite->Seek(0, SEEK_SET);
m_nReadPosition = m_cacheFileRead->Seek(0, SEEK_SET);
+ return true;
}
void CSimpleFileCache::EndOfInput()
@@ -327,17 +328,26 @@ int64_t CDoubleCache::WaitForData(unsigned int iMinAvail, unsigned int iMillis)
int64_t CDoubleCache::Seek(int64_t iFilePosition)
{
- return m_pCache->Seek(iFilePosition);
+ /* Check whether position is NOT in our current cache but IS in our old cache.
+ * This is faster/more efficient than having to possibly wait for data in the
+ * Seek() call below
+ */
+ if (!m_pCache->IsCachedPosition(iFilePosition) &&
+ m_pCacheOld && m_pCacheOld->IsCachedPosition(iFilePosition))
+ {
+ return CACHE_RC_ERROR; // Request seek event, so caches are swapped
+ }
+
+ return m_pCache->Seek(iFilePosition); // Normal seek
}
-void CDoubleCache::Reset(int64_t iSourcePosition, bool clearAnyway)
+bool CDoubleCache::Reset(int64_t iSourcePosition, bool clearAnyway)
{
if (!clearAnyway && m_pCache->IsCachedPosition(iSourcePosition)
&& (!m_pCacheOld || !m_pCacheOld->IsCachedPosition(iSourcePosition)
|| m_pCache->CachedDataEndPos() >= m_pCacheOld->CachedDataEndPos()))
{
- m_pCache->Reset(iSourcePosition, clearAnyway);
- return;
+ return m_pCache->Reset(iSourcePosition, clearAnyway);
}
if (!m_pCacheOld)
{
@@ -345,18 +355,18 @@ void CDoubleCache::Reset(int64_t iSourcePosition, bool clearAnyway)
if (pCacheNew->Open() != CACHE_RC_OK)
{
delete pCacheNew;
- m_pCache->Reset(iSourcePosition, clearAnyway);
- return;
+ return m_pCache->Reset(iSourcePosition, clearAnyway);
}
- pCacheNew->Reset(iSourcePosition, clearAnyway);
+ bool bRes = pCacheNew->Reset(iSourcePosition, clearAnyway);
m_pCacheOld = m_pCache;
m_pCache = pCacheNew;
- return;
+ return bRes;
}
- m_pCacheOld->Reset(iSourcePosition, clearAnyway);
+ bool bRes = m_pCacheOld->Reset(iSourcePosition, clearAnyway);
CCacheStrategy *tmp = m_pCacheOld;
m_pCacheOld = m_pCache;
m_pCache = tmp;
+ return bRes;
}
void CDoubleCache::EndOfInput()
diff --git a/xbmc/filesystem/CacheStrategy.h b/xbmc/filesystem/CacheStrategy.h
index 5067d01b26..9380a77490 100644
--- a/xbmc/filesystem/CacheStrategy.h
+++ b/xbmc/filesystem/CacheStrategy.h
@@ -50,7 +50,15 @@ public:
virtual int64_t WaitForData(unsigned int iMinAvail, unsigned int iMillis) = 0;
virtual int64_t Seek(int64_t iFilePosition) = 0;
- virtual void Reset(int64_t iSourcePosition, bool clearAnyway=true) = 0;
+
+ /*!
+ \brief Reset cache position
+ \param iSourcePosition position to reset to
+ \param clearAnyway whether to perform a full reset regardless of in cached range already
+ \return Whether a full reset was performed, or not (e.g. only cache swap)
+ \sa CCacheStrategy
+ */
+ virtual bool Reset(int64_t iSourcePosition, bool clearAnyway=true) = 0;
virtual void EndOfInput(); // mark the end of the input stream so that Read will know when to return EOF
virtual bool IsEndOfInput();
@@ -83,7 +91,7 @@ public:
virtual int64_t WaitForData(unsigned int iMinAvail, unsigned int iMillis) ;
virtual int64_t Seek(int64_t iFilePosition);
- virtual void Reset(int64_t iSourcePosition, bool clearAnyway=true);
+ virtual bool Reset(int64_t iSourcePosition, bool clearAnyway=true);
virtual void EndOfInput();
virtual int64_t CachedDataEndPosIfSeekTo(int64_t iFilePosition);
@@ -118,7 +126,7 @@ public:
virtual int64_t WaitForData(unsigned int iMinAvail, unsigned int iMillis) ;
virtual int64_t Seek(int64_t iFilePosition);
- virtual void Reset(int64_t iSourcePosition, bool clearAnyway=true);
+ virtual bool Reset(int64_t iSourcePosition, bool clearAnyway=true);
virtual void EndOfInput();
virtual bool IsEndOfInput();
virtual void ClearEndOfInput();
diff --git a/xbmc/filesystem/CircularCache.cpp b/xbmc/filesystem/CircularCache.cpp
index 746a64a935..eb8c044959 100644
--- a/xbmc/filesystem/CircularCache.cpp
+++ b/xbmc/filesystem/CircularCache.cpp
@@ -232,17 +232,19 @@ int64_t CCircularCache::Seek(int64_t pos)
return CACHE_RC_ERROR;
}
-void CCircularCache::Reset(int64_t pos, bool clearAnyway)
+bool CCircularCache::Reset(int64_t pos, bool clearAnyway)
{
CSingleLock lock(m_sync);
if (!clearAnyway && IsCachedPosition(pos))
{
m_cur = pos;
- return;
+ return false;
}
m_end = pos;
m_beg = pos;
m_cur = pos;
+
+ return true;
}
int64_t CCircularCache::CachedDataEndPosIfSeekTo(int64_t iFilePosition)
diff --git a/xbmc/filesystem/CircularCache.h b/xbmc/filesystem/CircularCache.h
index f6aa6a792e..3954eaef86 100644
--- a/xbmc/filesystem/CircularCache.h
+++ b/xbmc/filesystem/CircularCache.h
@@ -42,7 +42,7 @@ public:
virtual int64_t WaitForData(unsigned int minimum, unsigned int iMillis) ;
virtual int64_t Seek(int64_t pos) ;
- virtual void Reset(int64_t pos, bool clearAnyway=true) ;
+ virtual bool Reset(int64_t pos, bool clearAnyway=true) ;
virtual int64_t CachedDataEndPosIfSeekTo(int64_t iFilePosition);
virtual int64_t CachedDataEndPos();
diff --git a/xbmc/filesystem/FileCache.cpp b/xbmc/filesystem/FileCache.cpp
index 1ac2848316..127d9fbdf6 100644
--- a/xbmc/filesystem/FileCache.cpp
+++ b/xbmc/filesystem/FileCache.cpp
@@ -44,20 +44,35 @@ public:
m_stamp = XbmcThreads::SystemClockMillis();
m_pos = 0;
m_pause = 0;
+ m_size = 0;
+ m_time = 0;
}
- void Reset(int64_t pos)
+ void Reset(int64_t pos, bool bResetAll = true)
{
m_stamp = XbmcThreads::SystemClockMillis();
m_pos = pos;
+
+ if (bResetAll)
+ {
+ m_size = 0;
+ m_time = 0;
+ }
}
unsigned Rate(int64_t pos, unsigned int time_bias = 0)
{
- const unsigned ts = XbmcThreads::SystemClockMillis() + time_bias;
- if (ts == m_stamp)
+ const unsigned ts = XbmcThreads::SystemClockMillis();
+
+ m_size += (pos - m_pos);
+ m_time += (ts - m_stamp);
+ m_pos = pos;
+ m_stamp = ts;
+
+ if (m_time == 0)
return 0;
- return (unsigned)(1000 * (pos - m_pos) / (ts - m_stamp));
+
+ return (unsigned)(1000 * (m_size / (m_time + time_bias)));
}
void Pause()
@@ -75,6 +90,8 @@ private:
unsigned m_stamp;
int64_t m_pos;
unsigned m_pause;
+ unsigned m_time;
+ int64_t m_size;
};
@@ -233,11 +250,11 @@ void CFileCache::Process()
}
if (!sourceSeekFailed)
{
- m_pCache->Reset(m_seekPos, false);
+ const bool bCompleteReset = m_pCache->Reset(m_seekPos, false);
m_readPos = m_seekPos;
m_writePos = m_pCache->CachedDataEndPos();
assert(m_writePos == cacheMaxPos);
- average.Reset(m_writePos);
+ average.Reset(m_writePos, bCompleteReset); // Can only recalculate new average from scratch after a full reset (empty cache)
limiter.Reset(m_writePos);
m_cacheFull = (m_pCache->GetMaxWriteSize(m_chunkSize) == 0);
m_nSeekResult = m_seekPos;
diff --git a/xbmc/filesystem/MemBufferCache.cpp b/xbmc/filesystem/MemBufferCache.cpp
index 7c1c61dad8..01583f6f8c 100644
--- a/xbmc/filesystem/MemBufferCache.cpp
+++ b/xbmc/filesystem/MemBufferCache.cpp
@@ -215,13 +215,14 @@ int64_t MemBufferCache::Seek(int64_t iFilePosition)
return CACHE_RC_ERROR;
}
-void MemBufferCache::Reset(int64_t iSourcePosition)
+bool MemBufferCache::Reset(int64_t iSourcePosition, bool clearAnyway)
{
CSingleLock lock(m_sync);
m_nStartPosition = iSourcePosition;
m_buffer.Clear();
m_HistoryBuffer.Clear();
m_forwardBuffer.Clear();
+ return true;
}
diff --git a/xbmc/filesystem/MemBufferCache.h b/xbmc/filesystem/MemBufferCache.h
index 56b8d9cbf2..7083b2d6d5 100644
--- a/xbmc/filesystem/MemBufferCache.h
+++ b/xbmc/filesystem/MemBufferCache.h
@@ -46,7 +46,7 @@ public:
virtual int64_t WaitForData(unsigned int iMinAvail, unsigned int iMillis) ;
virtual int64_t Seek(int64_t iFilePosition) ;
- virtual void Reset(int64_t iSourcePosition) ;
+ virtual bool Reset(int64_t iSourcePosition, bool clearAnyway) ;
protected:
int64_t m_nStartPosition;
diff --git a/xbmc/filesystem/PVRDirectory.cpp b/xbmc/filesystem/PVRDirectory.cpp
index b3e5fae513..29f7693698 100644
--- a/xbmc/filesystem/PVRDirectory.cpp
+++ b/xbmc/filesystem/PVRDirectory.cpp
@@ -66,26 +66,16 @@ bool CPVRDirectory::GetDirectory(const CURL& url, CFileItemList &items)
{
CFileItemPtr item;
- item.reset(new CFileItem(base + "/channels/", true));
+ item.reset(new CFileItem(base + "channels/", true));
item->SetLabel(g_localizeStrings.Get(19019));
item->SetLabelPreformated(true);
items.Add(item);
- item.reset(new CFileItem(base + "/recordings/", true));
+ item.reset(new CFileItem(base + "recordings/", true));
item->SetLabel(g_localizeStrings.Get(19017));
item->SetLabelPreformated(true);
items.Add(item);
- item.reset(new CFileItem(base + "/timers/", true));
- item->SetLabel(g_localizeStrings.Get(19040));
- item->SetLabelPreformated(true);
- items.Add(item);
-
- item.reset(new CFileItem(base + "/guide/", true));
- item->SetLabel(g_localizeStrings.Get(19029));
- item->SetLabelPreformated(true);
- items.Add(item);
-
// Sort by name only. Labels are preformated.
items.AddSortMethod(SortByLabel, 551 /* Name */, LABEL_MASKS("%L", "", "%L", ""));
diff --git a/xbmc/filesystem/SMBDirectory.cpp b/xbmc/filesystem/SMBDirectory.cpp
index 1fa00e6bff..026bd02b65 100644
--- a/xbmc/filesystem/SMBDirectory.cpp
+++ b/xbmc/filesystem/SMBDirectory.cpp
@@ -253,7 +253,7 @@ int CSMBDirectory::OpenDir(const CURL& url, std::string& strAuth)
fd = smbc_opendir(s.c_str());
}
- if (fd < 0) /* only to avoid goto in following code */
+ while (fd < 0) /* only to avoid goto in following code */
{
std::string cError;
@@ -261,15 +261,21 @@ int CSMBDirectory::OpenDir(const CURL& url, std::string& strAuth)
{
if (m_flags & DIR_FLAG_ALLOW_PROMPT)
RequireAuthentication(urlIn);
+ break;
}
- else if (errno == ENODEV || errno == ENOENT)
+
+ if (errno == ENODEV || errno == ENOENT)
cError = StringUtils::Format(g_localizeStrings.Get(770).c_str(),errno);
else
cError = strerror(errno);
if (m_flags & DIR_FLAG_ALLOW_PROMPT)
SetErrorDialog(257, cError.c_str());
+ break;
+ }
+ if (fd < 0)
+ {
// write error to logfile
CLog::Log(LOGERROR, "SMBDirectory->GetDirectory: Unable to open directory : '%s'\nunix_err:'%x' error : '%s'", CURL::GetRedacted(strAuth).c_str(), errno, strerror(errno));
}
diff --git a/xbmc/filesystem/win32/Win32SMBFile.cpp b/xbmc/filesystem/win32/Win32SMBFile.cpp
index ba605ed205..b8f95d1b43 100644
--- a/xbmc/filesystem/win32/Win32SMBFile.cpp
+++ b/xbmc/filesystem/win32/Win32SMBFile.cpp
@@ -151,7 +151,7 @@ int CWin32SMBFile::Stat(const CURL& url, struct __stat64* statData)
if (CWin32File::Stat(url, statData) == 0)
return 0;
- if (!worthTryToConnect(GetLastError()) || !ConnectAndAuthenticate(url))
+ if (!worthTryToConnect(m_lastSMBFileErr) || !ConnectAndAuthenticate(url))
return -1;
return CWin32File::Stat(url, statData);
diff --git a/xbmc/interfaces/json-rpc/AudioLibrary.cpp b/xbmc/interfaces/json-rpc/AudioLibrary.cpp
index a32d56a59a..4ffcde9387 100644
--- a/xbmc/interfaces/json-rpc/AudioLibrary.cpp
+++ b/xbmc/interfaces/json-rpc/AudioLibrary.cpp
@@ -651,6 +651,20 @@ void CAudioLibrary::FillAlbumItem(const CAlbum &album, const std::string &path,
item = CFileItemPtr(new CFileItem(path, album));
}
+JSONRPC_STATUS CAudioLibrary::GetAdditionalDetails(const CVariant &parameterObject, CFileItemList &items)
+{
+ if (items.IsEmpty())
+ return OK;
+
+ CMusicDatabase musicdb;
+ if (MediaTypes::IsMediaType(items.GetContent(), MediaTypeAlbum))
+ return GetAdditionalAlbumDetails(parameterObject, items, musicdb);
+ else if (MediaTypes::IsMediaType(items.GetContent(), MediaTypeSong))
+ return GetAdditionalSongDetails(parameterObject, items, musicdb);
+
+ return OK;
+}
+
JSONRPC_STATUS CAudioLibrary::GetAdditionalAlbumDetails(const CVariant &parameterObject, CFileItemList &items, CMusicDatabase &musicdatabase)
{
if (!musicdatabase.Open())
diff --git a/xbmc/interfaces/json-rpc/AudioLibrary.h b/xbmc/interfaces/json-rpc/AudioLibrary.h
index 5d6113f158..7b73a67369 100644
--- a/xbmc/interfaces/json-rpc/AudioLibrary.h
+++ b/xbmc/interfaces/json-rpc/AudioLibrary.h
@@ -55,6 +55,7 @@ namespace JSONRPC
static bool FillFileItem(const std::string &strFilename, CFileItemPtr &item, const CVariant &parameterObject = CVariant(CVariant::VariantTypeArray));
static bool FillFileItemList(const CVariant &parameterObject, CFileItemList &list);
+ static JSONRPC_STATUS GetAdditionalDetails(const CVariant &parameterObject, CFileItemList &items);
static JSONRPC_STATUS GetAdditionalAlbumDetails(const CVariant &parameterObject, CFileItemList &items, CMusicDatabase &musicdatabase);
static JSONRPC_STATUS GetAdditionalSongDetails(const CVariant &parameterObject, CFileItemList &items, CMusicDatabase &musicdatabase);
diff --git a/xbmc/interfaces/json-rpc/FileOperations.cpp b/xbmc/interfaces/json-rpc/FileOperations.cpp
index 50e74e1c19..6ba9d6e4c8 100644
--- a/xbmc/interfaces/json-rpc/FileOperations.cpp
+++ b/xbmc/interfaces/json-rpc/FileOperations.cpp
@@ -103,6 +103,14 @@ JSONRPC_STATUS CFileOperations::GetDirectory(const std::string &method, ITranspo
if (CDirectory::GetDirectory(strPath, items, extensions))
{
+ // we might need to get additional information for music items
+ if (media == "music")
+ {
+ JSONRPC_STATUS status = CAudioLibrary::GetAdditionalDetails(parameterObject, items);
+ if (status != OK)
+ return status;
+ }
+
CFileItemList filteredFiles;
for (unsigned int i = 0; i < (unsigned int)items.Size(); i++)
{
diff --git a/xbmc/interfaces/json-rpc/schema/version.txt b/xbmc/interfaces/json-rpc/schema/version.txt
index 7ecad14053..facac91deb 100644
--- a/xbmc/interfaces/json-rpc/schema/version.txt
+++ b/xbmc/interfaces/json-rpc/schema/version.txt
@@ -1 +1 @@
-6.21.0
+6.21.2
diff --git a/xbmc/powermanagement/PowerManager.cpp b/xbmc/powermanagement/PowerManager.cpp
index 27948b5e0a..5900f985ad 100644
--- a/xbmc/powermanagement/PowerManager.cpp
+++ b/xbmc/powermanagement/PowerManager.cpp
@@ -75,12 +75,12 @@ void CPowerManager::Initialize()
m_instance = new CAndroidPowerSyscall();
#elif defined(TARGET_POSIX)
#if defined(HAS_DBUS)
- if (CLogindUPowerSyscall::HasLogind())
- m_instance = new CLogindUPowerSyscall();
- else if (CConsoleUPowerSyscall::HasConsoleKitAndUPower())
+ if (CConsoleUPowerSyscall::HasConsoleKitAndUPower())
m_instance = new CConsoleUPowerSyscall();
else if (CConsoleDeviceKitPowerSyscall::HasDeviceConsoleKit())
m_instance = new CConsoleDeviceKitPowerSyscall();
+ else if (CLogindUPowerSyscall::HasLogind())
+ m_instance = new CLogindUPowerSyscall();
else if (CUPowerSyscall::HasUPower())
m_instance = new CUPowerSyscall();
else
diff --git a/xbmc/pvr/PVRManager.cpp b/xbmc/pvr/PVRManager.cpp
index 2b6018ba7a..e97dce6a49 100644
--- a/xbmc/pvr/PVRManager.cpp
+++ b/xbmc/pvr/PVRManager.cpp
@@ -111,7 +111,13 @@ void CPVRManager::Announce(AnnouncementFlag flag, const char *sender, const char
return;
if (strcmp(message, "OnWake") == 0)
- ContinueLastChannel();
+ {
+ {
+ CSingleLock lock(m_critSection);
+ m_bFirstStart = true;
+ }
+ Start(true);
+ }
}
CPVRManager &CPVRManager::Get(void)
@@ -497,8 +503,9 @@ void CPVRManager::Process(void)
/* start job to search for missing channel icons */
TriggerSearchMissingChannelIcons();
- /* continue last watched channel */
- ContinueLastChannel();
+ /* try to continue last watched channel otherwise set group to last played group */
+ if (!ContinueLastChannel())
+ SetPlayingGroup(m_channelGroups->GetLastPlayedGroup());
}
/* execute the next pending jobs if there are any */
try
diff --git a/xbmc/pvr/channels/PVRChannel.cpp b/xbmc/pvr/channels/PVRChannel.cpp
index 43ec0611d5..3416304c91 100644
--- a/xbmc/pvr/channels/PVRChannel.cpp
+++ b/xbmc/pvr/channels/PVRChannel.cpp
@@ -163,7 +163,12 @@ void CPVRChannel::Serialize(CVariant& value) const
CEpgInfoTag epg;
if (GetEPGNow(epg))
+ {
+ // add the properties of the current EPG item to the main object
+ epg.Serialize(value);
+ // and add an extra sub-object with only the current EPG details
epg.Serialize(value["broadcastnow"]);
+ }
if (GetEPGNext(epg))
epg.Serialize(value["broadcastnext"]);
diff --git a/xbmc/pvr/channels/PVRChannelGroup.cpp b/xbmc/pvr/channels/PVRChannelGroup.cpp
index c021ef43e7..95395ebff8 100644
--- a/xbmc/pvr/channels/PVRChannelGroup.cpp
+++ b/xbmc/pvr/channels/PVRChannelGroup.cpp
@@ -234,7 +234,7 @@ bool CPVRChannelGroup::MoveChannel(unsigned int iOldChannelNumber, unsigned int
CLog::Log(LOGNOTICE, "CPVRChannelGroup - %s - %s channel '%s' moved to channel number '%d'",
__FUNCTION__, (m_bRadio ? "radio" : "tv"), entry.channel->ChannelName().c_str(), iNewChannelNumber);
- return true;
+ return bReturn;
}
void CPVRChannelGroup::SearchAndSetChannelIcons(bool bUpdateDb /* = false */)
diff --git a/xbmc/pvr/channels/PVRChannelGroups.cpp b/xbmc/pvr/channels/PVRChannelGroups.cpp
index 8d0388044a..98a186ab5d 100644
--- a/xbmc/pvr/channels/PVRChannelGroups.cpp
+++ b/xbmc/pvr/channels/PVRChannelGroups.cpp
@@ -368,7 +368,7 @@ int CPVRChannelGroups::GetGroupList(CFileItemList* results) const
std::string strPath;
for (std::vector<CPVRChannelGroupPtr>::const_iterator it = m_groups.begin(); it != m_groups.end(); it++)
{
- strPath = StringUtils::Format("channels/%s/%i", m_bRadio ? "radio" : "tv", (*it)->GroupID());
+ strPath = StringUtils::Format("pvr://channels/%s/%s/", m_bRadio ? "radio" : "tv", (*it)->GroupName().c_str());
CFileItemPtr group(new CFileItem(strPath, true));
group->m_strTitle = (*it)->GroupName();
group->SetLabel((*it)->GroupName());
diff --git a/xbmc/pvr/channels/PVRChannelGroupsContainer.cpp b/xbmc/pvr/channels/PVRChannelGroupsContainer.cpp
index def42c4033..9fb3b27249 100644
--- a/xbmc/pvr/channels/PVRChannelGroupsContainer.cpp
+++ b/xbmc/pvr/channels/PVRChannelGroupsContainer.cpp
@@ -143,6 +143,7 @@ CFileItemPtr CPVRChannelGroupsContainer::GetByPath(const std::string &strPath) c
bool CPVRChannelGroupsContainer::GetDirectory(const std::string& strPath, CFileItemList &results)
{
std::string strBase(strPath);
+ URIUtils::RemoveSlashAtEnd(strBase);
/* get the filename from curl */
CURL url(strPath);
diff --git a/xbmc/settings/dialogs/GUIDialogContentSettings.cpp b/xbmc/settings/dialogs/GUIDialogContentSettings.cpp
index fb671ea863..2e50632746 100644
--- a/xbmc/settings/dialogs/GUIDialogContentSettings.cpp
+++ b/xbmc/settings/dialogs/GUIDialogContentSettings.cpp
@@ -77,6 +77,7 @@ bool CGUIDialogContentSettings::OnMessage(CGUIMessage &message)
{
m_scrapers.clear();
m_vecItems->Clear();
+ m_content = CONTENT_NONE;
break;
}