diff --git a/Emby.Server.Implementations/ApplicationHost.cs b/Emby.Server.Implementations/ApplicationHost.cs
index 59f521eb58..713ece4211 100644
--- a/Emby.Server.Implementations/ApplicationHost.cs
+++ b/Emby.Server.Implementations/ApplicationHost.cs
@@ -2206,17 +2206,19 @@ namespace Emby.Server.Implementations
/// Task{CheckForUpdateResult}.
public async Task CheckForApplicationUpdate(CancellationToken cancellationToken, IProgress progress)
{
- var cacheLength = TimeSpan.FromMinutes(5);
var updateLevel = SystemUpdateLevel;
+ var cacheLength = updateLevel == PackageVersionClass.Release ?
+ TimeSpan.FromHours(4) :
+ TimeSpan.FromMinutes(5);
- var result = await new GithubUpdater(HttpClient, JsonSerializer).CheckForUpdateResult("MediaBrowser",
- "Emby",
- ApplicationVersion,
+ var result = await new GithubUpdater(HttpClient, JsonSerializer).CheckForUpdateResult("MediaBrowser",
+ "Emby",
+ ApplicationVersion,
updateLevel,
ReleaseAssetFilename,
"MBServer",
- UpdateTargetFileName,
- cacheLength,
+ UpdateTargetFileName,
+ cacheLength,
cancellationToken).ConfigureAwait(false);
HasUpdateAvailable = result.IsUpdateAvailable;
diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
index 2186982d3e..89ffb0fce3 100644
--- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs
+++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
@@ -4410,7 +4410,7 @@ namespace Emby.Server.Implementations.Data
index++;
}
- whereClauses.Add(string.Join(" OR ", includeIds.ToArray()));
+ whereClauses.Add("(" + string.Join(" OR ", includeIds.ToArray()) + ")");
}
if (query.ExcludeItemIds.Length > 0)
{
diff --git a/MediaBrowser.Controller/LiveTv/LiveTvProgram.cs b/MediaBrowser.Controller/LiveTv/LiveTvProgram.cs
index 5449e59a2e..1c16373306 100644
--- a/MediaBrowser.Controller/LiveTv/LiveTvProgram.cs
+++ b/MediaBrowser.Controller/LiveTv/LiveTvProgram.cs
@@ -50,7 +50,9 @@ namespace MediaBrowser.Controller.LiveTv
public static double? GetDefaultPrimaryImageAspectRatio(IHasProgramAttributes item)
{
var serviceName = item.ServiceName;
- if (!item.IsMovie && !string.Equals(serviceName, EmbyServiceName, StringComparison.OrdinalIgnoreCase))
+ if (!item.IsMovie
+ && !string.Equals(serviceName, EmbyServiceName, StringComparison.OrdinalIgnoreCase)
+ && !string.Equals(serviceName, "Next Pvr", StringComparison.OrdinalIgnoreCase))
{
double value = 16;
value /= 9;
diff --git a/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs
index 85f9f92baa..0283e4a7b7 100644
--- a/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs
+++ b/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs
@@ -1,4 +1,7 @@
-using System.Linq;
+using System;
+using System.IO;
+using System.Linq;
+using System.Text;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
@@ -70,6 +73,17 @@ namespace MediaBrowser.XbmcMetadata.Parsers
{
movie.CollectionName = val;
}
+ else
+ {
+ try
+ {
+ ParseSetXml(val, movie);
+ }
+ catch (Exception ex)
+ {
+ Logger.ErrorException("Error parsing set node", ex);
+ }
+ }
}
break;
@@ -109,6 +123,63 @@ namespace MediaBrowser.XbmcMetadata.Parsers
}
}
+ private void ParseSetXml(string xml, Movie movie)
+ {
+ using (var ms = new MemoryStream())
+ {
+ //xml = xml.Substring(xml.IndexOf('<'));
+ //xml = xml.Substring(0, xml.LastIndexOf('>'));
+ xml = "" + xml + "";
+
+ var bytes = Encoding.UTF8.GetBytes(xml);
+
+ ms.Write(bytes, 0, bytes.Length);
+ ms.Position = 0;
+
+ // These are not going to be valid xml so no sense in causing the provider to fail and spamming the log with exceptions
+ try
+ {
+ var settings = XmlReaderSettingsFactory.Create(false);
+
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
+
+ // Use XmlReader for best performance
+ using (var reader = XmlReader.Create(ms, settings))
+ {
+ reader.MoveToContent();
+ reader.Read();
+
+ // Loop through each element
+ while (!reader.EOF && reader.ReadState == ReadState.Interactive)
+ {
+ if (reader.NodeType == XmlNodeType.Element)
+ {
+ switch (reader.Name)
+ {
+ case "name":
+ movie.CollectionName = reader.ReadElementContentAsString();
+ break;
+ default:
+ reader.Skip();
+ break;
+ }
+ }
+ else
+ {
+ reader.Read();
+ }
+ }
+ }
+ }
+ catch (XmlException)
+ {
+
+ }
+ }
+ }
+
public MovieNfoParser(ILogger logger, IConfigurationManager config, IProviderManager providerManager, IFileSystem fileSystem, IXmlReaderSettingsFactory xmlReaderSettingsFactory) : base(logger, config, providerManager, fileSystem, xmlReaderSettingsFactory)
{
}
diff --git a/SharedVersion.cs b/SharedVersion.cs
index 016e036f84..841d2968c3 100644
--- a/SharedVersion.cs
+++ b/SharedVersion.cs
@@ -1,3 +1,3 @@
using System.Reflection;
-[assembly: AssemblyVersion("3.2.30.26")]
+[assembly: AssemblyVersion("3.2.30.27")]