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")]