From 049ef9b4ecd2c884e0ddb062b606770ef7f2dfa9 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti <luke.pulverenti@gmail.com> Date: Sun, 16 Nov 2014 17:46:01 -0500 Subject: [PATCH] update naming methods --- MediaBrowser.Api/UserLibrary/ItemsService.cs | 8 ++-- .../Security/PluginSecurityManager.cs | 7 +++- .../Entities/AdultVideo.cs | 24 +----------- .../Entities/Movies/Movie.cs | 5 +-- MediaBrowser.Controller/Entities/TV/Series.cs | 5 +-- .../Entities/UserViewBuilder.cs | 20 +++++----- .../Library/ILibraryManager.cs | 12 ++++++ .../MediaBrowser.Controller.csproj | 1 - .../Providers/NameParser.cs | 39 ------------------- .../MediaBrowser.Providers.csproj | 2 +- .../Movies/MovieDbSearch.cs | 9 +++-- .../TV/TvdbSeriesProvider.cs | 9 +++-- MediaBrowser.Providers/packages.config | 2 +- .../FileOrganization/EpisodeFileOrganizer.cs | 7 ++-- .../Library/LibraryManager.cs | 22 ++++++++--- .../Library/Resolvers/BaseVideoResolver.cs | 8 ++-- .../Library/Resolvers/TV/EpisodeResolver.cs | 4 ++ ...MediaBrowser.Server.Implementations.csproj | 2 +- .../packages.config | 2 +- .../Parsers/SeasonNfoParser.cs | 3 +- 20 files changed, 83 insertions(+), 108 deletions(-) delete mode 100644 MediaBrowser.Controller/Providers/NameParser.cs diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index 18996e0d9f..b87ee895af 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -333,7 +333,7 @@ namespace MediaBrowser.Api.UserLibrary }; } - var items = result.Item1.Items.Where(i => ApplyAdditionalFilters(request, i, user, false)); + var items = result.Item1.Items.Where(i => ApplyAdditionalFilters(request, i, user, false, _libraryManager)); // Apply filters // Run them starting with the ones that are likely to reduce the list the most @@ -467,7 +467,7 @@ namespace MediaBrowser.Api.UserLibrary SortBy = request.GetOrderBy(), SortOrder = request.SortOrder ?? SortOrder.Ascending, - Filter = (i, u) => ApplyAdditionalFilters(request, i, u, true), + Filter = (i, u) => ApplyAdditionalFilters(request, i, u, true, _libraryManager), Limit = request.Limit, StartIndex = request.StartIndex, @@ -635,7 +635,7 @@ namespace MediaBrowser.Api.UserLibrary return items; } - private bool ApplyAdditionalFilters(GetItems request, BaseItem i, User user, bool isPreFiltered) + private bool ApplyAdditionalFilters(GetItems request, BaseItem i, User user, bool isPreFiltered, ILibraryManager libraryManager) { if (!isPreFiltered) { @@ -773,7 +773,7 @@ namespace MediaBrowser.Api.UserLibrary { var filterValue = request.IsYearMismatched.Value; - if (UserViewBuilder.IsYearMismatched(i) != filterValue) + if (UserViewBuilder.IsYearMismatched(i, libraryManager) != filterValue) { return false; } diff --git a/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs b/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs index 778b2cbb0f..5ebc1e4c55 100644 --- a/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs +++ b/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs @@ -186,15 +186,18 @@ namespace MediaBrowser.Common.Implementations.Security string mb2Equivalent = null, string version = null) { + var lastChecked = LicenseFile.LastChecked(feature); + //check the reg file first to alleviate strain on the MB admin server - must actually check in every 30 days tho var reg = new RegRecord { - registered = LicenseFile.LastChecked(feature) > DateTime.UtcNow.AddDays(-3) + // Cache the result for up to a week + registered = lastChecked > DateTime.UtcNow.AddDays(-7) }; var success = reg.registered; - if (!reg.registered) + if (!(lastChecked > DateTime.UtcNow.AddDays(-1))) { var mac = _networkManager.GetMacAddress(); var data = new Dictionary<string, string> diff --git a/MediaBrowser.Controller/Entities/AdultVideo.cs b/MediaBrowser.Controller/Entities/AdultVideo.cs index ec2913ab46..6c3f7851ea 100644 --- a/MediaBrowser.Controller/Entities/AdultVideo.cs +++ b/MediaBrowser.Controller/Entities/AdultVideo.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Controller.Providers; -using System; +using System; using System.Collections.Generic; namespace MediaBrowser.Controller.Entities @@ -16,26 +15,5 @@ namespace MediaBrowser.Controller.Entities Taglines = new List<string>(); ProductionLocations = new List<string>(); } - - public override bool BeforeMetadataRefresh() - { - var hasChanges = base.BeforeMetadataRefresh(); - - if (!ProductionYear.HasValue) - { - int? yearInName = null; - string name; - - NameParser.ParseName(Name, out name, out yearInName); - - if (yearInName.HasValue) - { - ProductionYear = yearInName; - hasChanges = true; - } - } - - return hasChanges; - } } } diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs index c0afe3df9e..686abdaf56 100644 --- a/MediaBrowser.Controller/Entities/Movies/Movie.cs +++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs @@ -149,10 +149,9 @@ namespace MediaBrowser.Controller.Entities.Movies if (!ProductionYear.HasValue) { - int? yearInName = null; - string name; + var info = LibraryManager.ParseName(Name); - NameParser.ParseName(Name, out name, out yearInName); + var yearInName = info.Year; if (yearInName.HasValue) { diff --git a/MediaBrowser.Controller/Entities/TV/Series.cs b/MediaBrowser.Controller/Entities/TV/Series.cs index 7f6591287d..3d1051b183 100644 --- a/MediaBrowser.Controller/Entities/TV/Series.cs +++ b/MediaBrowser.Controller/Entities/TV/Series.cs @@ -255,10 +255,9 @@ namespace MediaBrowser.Controller.Entities.TV if (!ProductionYear.HasValue) { - int? yearInName = null; - string name; + var info = LibraryManager.ParseName(Name); - NameParser.ParseName(Name, out name, out yearInName); + var yearInName = info.Year; if (yearInName.HasValue) { diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs index 71e26b23cc..aff4af468f 100644 --- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs +++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs @@ -740,7 +740,7 @@ namespace MediaBrowser.Controller.Entities { var user = query.User; - items = items.Where(i => Filter(i, user, query, userDataManager)); + items = items.Where(i => Filter(i, user, query, userDataManager, libraryManager)); items = FilterVirtualEpisodes(items, query.IsMissing, @@ -1140,7 +1140,7 @@ namespace MediaBrowser.Controller.Entities }; } - private static bool Filter(BaseItem item, User user, InternalItemsQuery query, IUserDataManager userDataManager) + private static bool Filter(BaseItem item, User user, InternalItemsQuery query, IUserDataManager userDataManager, ILibraryManager libraryManager) { if (query.MediaTypes.Length > 0 && !query.MediaTypes.Contains(item.MediaType ?? string.Empty, StringComparer.OrdinalIgnoreCase)) { @@ -1321,7 +1321,7 @@ namespace MediaBrowser.Controller.Entities { var filterValue = query.IsYearMismatched.Value; - if (IsYearMismatched(item) != filterValue) + if (IsYearMismatched(item, libraryManager) != filterValue) { return false; } @@ -1551,8 +1551,8 @@ namespace MediaBrowser.Controller.Entities return false; } } - } - + } + // Apply tag filter var tags = query.Tags; if (tags.Length > 0) @@ -1641,7 +1641,7 @@ namespace MediaBrowser.Controller.Entities return view; } - public static bool IsYearMismatched(BaseItem item) + public static bool IsYearMismatched(BaseItem item, ILibraryManager libraryManager) { if (item.ProductionYear.HasValue) { @@ -1649,14 +1649,14 @@ namespace MediaBrowser.Controller.Entities if (!string.IsNullOrEmpty(path)) { - int? yearInName; - string name; - NameParser.ParseName(Path.GetFileName(path), out name, out yearInName); + var info = libraryManager.ParseName(Path.GetFileName(path)); + var yearInName = info.Year; // Go up a level if we didn't get a year if (!yearInName.HasValue) { - NameParser.ParseName(Path.GetFileName(Path.GetDirectoryName(path)), out name, out yearInName); + info = libraryManager.ParseName(Path.GetFileName(Path.GetDirectoryName(path))); + yearInName = info.Year; } if (yearInName.HasValue) diff --git a/MediaBrowser.Controller/Library/ILibraryManager.cs b/MediaBrowser.Controller/Library/ILibraryManager.cs index 68b99e4724..615ddd90ff 100644 --- a/MediaBrowser.Controller/Library/ILibraryManager.cs +++ b/MediaBrowser.Controller/Library/ILibraryManager.cs @@ -361,6 +361,11 @@ namespace MediaBrowser.Controller.Library /// <returns><c>true</c> if [is video file] [the specified path]; otherwise, <c>false</c>.</returns> bool IsVideoFile(string path); + /// <summary> + /// Determines whether [is audio file] [the specified path]. + /// </summary> + /// <param name="path">The path.</param> + /// <returns><c>true</c> if [is audio file] [the specified path]; otherwise, <c>false</c>.</returns> bool IsAudioFile(string path); /// <summary> @@ -405,5 +410,12 @@ namespace MediaBrowser.Controller.Library /// <param name="considerSeasonless">if set to <c>true</c> [consider seasonless].</param> /// <returns>System.Nullable<System.Int32>.</returns> int? GetEpisodeNumberFromFile(string path, bool considerSeasonless); + + /// <summary> + /// Parses the name. + /// </summary> + /// <param name="name">The name.</param> + /// <returns>ItemInfo.</returns> + ItemLookupInfo ParseName(string name); } } \ No newline at end of file diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 0457ea72e3..420da131ee 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -266,7 +266,6 @@ <Compile Include="Providers\ItemIdentities.cs" /> <Compile Include="Providers\ItemLookupInfo.cs" /> <Compile Include="Providers\MetadataRefreshOptions.cs" /> - <Compile Include="Providers\NameParser.cs" /> <Compile Include="Providers\MetadataStatus.cs" /> <Compile Include="Providers\ISeriesOrderManager.cs" /> <Compile Include="Session\ISessionManager.cs" /> diff --git a/MediaBrowser.Controller/Providers/NameParser.cs b/MediaBrowser.Controller/Providers/NameParser.cs deleted file mode 100644 index cdd0974eac..0000000000 --- a/MediaBrowser.Controller/Providers/NameParser.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Text.RegularExpressions; - -namespace MediaBrowser.Controller.Providers -{ - public static class NameParser - { - static readonly Regex[] NameMatches = - { - new Regex(@"(?<name>.*)\((?<year>\d{4})\)"), // matches "My Movie (2001)" and gives us the name and the year - new Regex(@"(?<name>.*)(\.(?<year>\d{4})(\.|$)).*$"), - new Regex(@"(?<name>.*)") // last resort matches the whole string as the name - }; - - /// <summary> - /// Parses the name. - /// </summary> - /// <param name="name">The name.</param> - /// <param name="justName">Name of the just.</param> - /// <param name="year">The year.</param> - public static void ParseName(string name, out string justName, out int? year) - { - justName = null; - year = null; - foreach (var re in NameMatches) - { - Match m = re.Match(name); - if (m.Success) - { - justName = m.Groups["name"].Value.Trim(); - string y = m.Groups["year"] != null ? m.Groups["year"].Value : null; - int temp; - year = Int32.TryParse(y, out temp) ? temp : (int?)null; - break; - } - } - } - } -} diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj index a9bca3922c..e09d70fc5e 100644 --- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj +++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj @@ -55,7 +55,7 @@ </Reference> <Reference Include="MediaBrowser.Naming, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\MediaBrowser.Naming.1.0.0.1\lib\portable-net45+sl4+wp71+win8+wpa81\MediaBrowser.Naming.dll</HintPath> + <HintPath>..\packages\MediaBrowser.Naming.1.0.0.2\lib\portable-net45+sl4+wp71+win8+wpa81\MediaBrowser.Naming.dll</HintPath> </Reference> <Reference Include="MoreLinq, Version=1.1.17511.0, Culture=neutral, PublicKeyToken=384d532d7e88985d, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> diff --git a/MediaBrowser.Providers/Movies/MovieDbSearch.cs b/MediaBrowser.Providers/Movies/MovieDbSearch.cs index 85a0d5fa10..ba7693043b 100644 --- a/MediaBrowser.Providers/Movies/MovieDbSearch.cs +++ b/MediaBrowser.Providers/Movies/MovieDbSearch.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -24,6 +25,7 @@ namespace MediaBrowser.Providers.Movies private readonly ILogger _logger; private readonly IJsonSerializer _json; + private ILibraryManager _libraryManager; public MovieDbSearch(ILogger logger, IJsonSerializer json) { @@ -50,13 +52,14 @@ namespace MediaBrowser.Providers.Movies { var name = idInfo.Name; var year = idInfo.Year; - int? yearInName = null; var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false); var tmdbImageUrl = tmdbSettings.images.base_url + "original"; - - NameParser.ParseName(name, out name, out yearInName); + + var parsedName = _libraryManager.ParseName(name); + var yearInName = parsedName.Year; + name = parsedName.Name; year = year ?? yearInName; diff --git a/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs index 97eabcfa9e..69f1123d02 100644 --- a/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs +++ b/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs @@ -37,8 +37,9 @@ namespace MediaBrowser.Providers.TV private readonly CultureInfo _usCulture = new CultureInfo("en-US"); private readonly ILogger _logger; private readonly ISeriesOrderManager _seriesOrder; + private readonly ILibraryManager _libraryManager; - public TvdbSeriesProvider(IZipClient zipClient, IHttpClient httpClient, IFileSystem fileSystem, IServerConfigurationManager config, ILogger logger, ISeriesOrderManager seriesOrder) + public TvdbSeriesProvider(IZipClient zipClient, IHttpClient httpClient, IFileSystem fileSystem, IServerConfigurationManager config, ILogger logger, ISeriesOrderManager seriesOrder, ILibraryManager libraryManager) { _zipClient = zipClient; _httpClient = httpClient; @@ -46,6 +47,7 @@ namespace MediaBrowser.Providers.TV _config = config; _logger = logger; _seriesOrder = seriesOrder; + _libraryManager = libraryManager; Current = this; } @@ -282,9 +284,8 @@ namespace MediaBrowser.Providers.TV if (results.Count == 0) { - int? yearInName = null; - string nameWithoutYear; - NameParser.ParseName(name, out nameWithoutYear, out yearInName); + var parsedName = _libraryManager.ParseName(name); + var nameWithoutYear = parsedName.Name; if (!string.IsNullOrEmpty(nameWithoutYear) && !string.Equals(nameWithoutYear, name, StringComparison.OrdinalIgnoreCase)) { diff --git a/MediaBrowser.Providers/packages.config b/MediaBrowser.Providers/packages.config index 17c6f08ba1..48906c583a 100644 --- a/MediaBrowser.Providers/packages.config +++ b/MediaBrowser.Providers/packages.config @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <packages> <package id="MediaBrowser.BdInfo" version="1.0.0.10" targetFramework="net45" /> - <package id="MediaBrowser.Naming" version="1.0.0.1" targetFramework="net45" /> + <package id="MediaBrowser.Naming" version="1.0.0.2" targetFramework="net45" /> <package id="morelinq" version="1.1.0" targetFramework="net45" /> <package id="taglib" version="2.1.0.0" targetFramework="net45" /> </packages> \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs b/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs index bc6c6edff9..d4625d4028 100644 --- a/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs +++ b/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs @@ -321,9 +321,10 @@ namespace MediaBrowser.Server.Implementations.FileOrganization private Series GetMatchingSeries(string seriesName, FileOrganizationResult result) { - int? yearInName; - var nameWithoutYear = seriesName; - NameParser.ParseName(nameWithoutYear, out nameWithoutYear, out yearInName); + var parsedName = _libraryManager.ParseName(seriesName); + + var yearInName = parsedName.Year; + var nameWithoutYear = parsedName.Name; result.ExtractedName = nameWithoutYear; result.ExtractedYear = yearInName; diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 3ed6820023..e2a2ce0a4d 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -21,7 +21,6 @@ using MediaBrowser.Naming.Video; using MediaBrowser.Server.Implementations.Library.Resolvers.TV; using MediaBrowser.Server.Implementations.Library.Validators; using MediaBrowser.Server.Implementations.ScheduledTasks; -using MoreLinq; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -1635,8 +1634,8 @@ namespace MediaBrowser.Server.Implementations.Library public bool IsVideoFile(string path) { - var parser = new VideoFileParser(new ExpandedVideoOptions(), new Naming.Logging.NullLogger()); - return parser.IsVideoFile(path); + var resolver = new VideoResolver(new ExpandedVideoOptions(), new AudioOptions(), new Naming.Logging.NullLogger()); + return resolver.IsVideoFile(path); } public bool IsAudioFile(string path) @@ -1647,13 +1646,13 @@ namespace MediaBrowser.Server.Implementations.Library public bool IsMultiPartFile(string path) { - var parser = new MultiPartParser(new ExpandedVideoOptions(), new Naming.Logging.NullLogger()); + var parser = new MultiPartParser(new ExpandedVideoOptions(), new AudioOptions(), new Naming.Logging.NullLogger()); return parser.Parse(path, FileInfoType.File).IsMultiPart; } public bool IsMultiPartFolder(string path) { - var parser = new MultiPartParser(new ExpandedVideoOptions(), new Naming.Logging.NullLogger()); + var parser = new MultiPartParser(new ExpandedVideoOptions(), new AudioOptions(), new Naming.Logging.NullLogger()); return parser.Parse(path, FileInfoType.Directory).IsMultiPart; } @@ -1676,5 +1675,18 @@ namespace MediaBrowser.Server.Implementations.Library { return SeriesResolver.GetEpisodeNumberFromFile(path, considerSeasonless); } + + public ItemLookupInfo ParseName(string name) + { + var resolver = new VideoResolver(new ExpandedVideoOptions(), new AudioOptions(), new Naming.Logging.NullLogger()); + + var result = resolver.CleanDateTime(name); + + return new ItemLookupInfo + { + Name = result.Name, + Year = result.Year + }; + } } } diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs index 9ff1223b08..ba2a32c13f 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs @@ -1,6 +1,7 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Entities; +using MediaBrowser.Naming.Audio; using MediaBrowser.Naming.Video; using System; @@ -42,8 +43,8 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers // If the path is a file check for a matching extensions if (!args.IsDirectory) { - var parser = new VideoFileParser(new ExpandedVideoOptions(), new Naming.Logging.NullLogger()); - var videoInfo = parser.ParseFile(args.Path); + var parser = new Naming.Video.VideoResolver(new ExpandedVideoOptions(), new AudioOptions(), new Naming.Logging.NullLogger()); + var videoInfo = parser.ResolveFile(args.Path); if (videoInfo == null) { @@ -67,7 +68,8 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers IsInMixedFolder = true, IsPlaceHolder = videoInfo.IsStub, IsShortcut = isShortcut, - Name = videoInfo.Name + Name = videoInfo.Name, + ProductionYear = videoInfo.Year }; if (videoInfo.IsStub) diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs index 3082872fdf..839b14a9e1 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs @@ -70,6 +70,10 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV if (episode != null) { + // The base video resolver is going to fill these in, so null them out + episode.ProductionYear = null; + episode.Name = null; + if (season != null) { episode.ParentIndexNumber = season.IndexNumber; diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 87cffa44ce..36fc04fca6 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -51,7 +51,7 @@ </Reference> <Reference Include="MediaBrowser.Naming, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\MediaBrowser.Naming.1.0.0.1\lib\portable-net45+sl4+wp71+win8+wpa81\MediaBrowser.Naming.dll</HintPath> + <HintPath>..\packages\MediaBrowser.Naming.1.0.0.2\lib\portable-net45+sl4+wp71+win8+wpa81\MediaBrowser.Naming.dll</HintPath> </Reference> <Reference Include="Mono.Nat, Version=1.2.21.0, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> diff --git a/MediaBrowser.Server.Implementations/packages.config b/MediaBrowser.Server.Implementations/packages.config index 2dc1af97a7..ae52e16166 100644 --- a/MediaBrowser.Server.Implementations/packages.config +++ b/MediaBrowser.Server.Implementations/packages.config @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <packages> - <package id="MediaBrowser.Naming" version="1.0.0.1" targetFramework="net45" /> + <package id="MediaBrowser.Naming" version="1.0.0.2" targetFramework="net45" /> <package id="Mono.Nat" version="1.2.21.0" targetFramework="net45" /> <package id="morelinq" version="1.1.0" targetFramework="net45" /> </packages> \ No newline at end of file diff --git a/MediaBrowser.XbmcMetadata/Parsers/SeasonNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/SeasonNfoParser.cs index 4c3408e0ec..1ea0053b31 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/SeasonNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/SeasonNfoParser.cs @@ -3,6 +3,7 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Model.Logging; using System.Collections.Generic; +using System.Globalization; using System.Xml; namespace MediaBrowser.XbmcMetadata.Parsers @@ -31,7 +32,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers { int num; - if (int.TryParse(number, out num)) + if (int.TryParse(number, NumberStyles.Integer, CultureInfo.InvariantCulture, out num)) { item.IndexNumber = num; }