diff --git a/MediaBrowser.Api/IHasItemFields.cs b/MediaBrowser.Api/IHasItemFields.cs new file mode 100644 index 000000000..36303c889 --- /dev/null +++ b/MediaBrowser.Api/IHasItemFields.cs @@ -0,0 +1,52 @@ +using MediaBrowser.Model.Querying; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace MediaBrowser.Api +{ + /// + /// Interface IHasItemFields + /// + public interface IHasItemFields + { + /// + /// Gets or sets the fields. + /// + /// The fields. + string Fields { get; set; } + } + + /// + /// Class ItemFieldsExtensions. + /// + public static class ItemFieldsExtensions + { + /// + /// Gets the item fields. + /// + /// The request. + /// IEnumerable{ItemFields}. + public static IEnumerable GetItemFields(this IHasItemFields request) + { + var val = request.Fields; + + if (string.IsNullOrEmpty(val)) + { + return new ItemFields[] { }; + } + + return val.Split(',').Select(v => + { + ItemFields value; + + if (Enum.TryParse(v, true, out value)) + { + return (ItemFields?)value; + } + return null; + + }).Where(i => i.HasValue).Select(i => i.Value); + } + } +} diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj index 7a9c6c8ac..a5720dfad 100644 --- a/MediaBrowser.Api/MediaBrowser.Api.csproj +++ b/MediaBrowser.Api/MediaBrowser.Api.csproj @@ -70,6 +70,7 @@ + diff --git a/MediaBrowser.Api/SimilarItemsHelper.cs b/MediaBrowser.Api/SimilarItemsHelper.cs index 587965b3f..a160ce666 100644 --- a/MediaBrowser.Api/SimilarItemsHelper.cs +++ b/MediaBrowser.Api/SimilarItemsHelper.cs @@ -25,7 +25,7 @@ namespace MediaBrowser.Api public string Id { get; set; } } - public class BaseGetSimilarItems : IReturn + public class BaseGetSimilarItems : IReturn, IHasItemFields { /// /// Gets or sets the user id. @@ -47,32 +47,6 @@ namespace MediaBrowser.Api /// The fields. [ApiMember(Name = "Fields", Description = "Optional. Specify additional fields of information to return in the output. This allows multiple, comma delimeted. Options: Budget, Chapters, CriticRatingSummary, DateCreated, Genres, HomePageUrl, IndexOptions, MediaStreams, Overview, OverviewHtml, ParentId, Path, People, ProviderIds, PrimaryImageAspectRatio, Revenue, SortName, Studios, Taglines, TrailerUrls", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)] public string Fields { get; set; } - - /// - /// Gets the item fields. - /// - /// IEnumerable{ItemFields}. - public IEnumerable GetItemFields() - { - var val = Fields; - - if (string.IsNullOrEmpty(val)) - { - return new ItemFields[] { }; - } - - return val.Split(',').Select(v => - { - ItemFields value; - - if (Enum.TryParse(v, true, out value)) - { - return (ItemFields?)value; - } - return null; - - }).Where(i => i.HasValue).Select(i => i.Value); - } } /// diff --git a/MediaBrowser.Api/TvShowsService.cs b/MediaBrowser.Api/TvShowsService.cs index 6cae379d2..1774f1a8e 100644 --- a/MediaBrowser.Api/TvShowsService.cs +++ b/MediaBrowser.Api/TvShowsService.cs @@ -17,7 +17,7 @@ namespace MediaBrowser.Api /// [Route("/Shows/NextUp", "GET")] [Api(("Gets a list of currently installed plugins"))] - public class GetNextUpEpisodes : IReturn + public class GetNextUpEpisodes : IReturn, IHasItemFields { /// /// Gets or sets the user id. @@ -49,32 +49,6 @@ namespace MediaBrowser.Api [ApiMember(Name = "SeriesId", Description = "Optional. Filter by series id", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] public string SeriesId { get; set; } - - /// - /// Gets the item fields. - /// - /// IEnumerable{ItemFields}. - public IEnumerable GetItemFields() - { - var val = Fields; - - if (string.IsNullOrEmpty(val)) - { - return new ItemFields[] { }; - } - - return val.Split(',').Select(v => - { - ItemFields value; - - if (Enum.TryParse(v, true, out value)) - { - return (ItemFields?)value; - } - return null; - - }).Where(i => i.HasValue).Select(i => i.Value); - } } [Route("/Shows/{Id}/Similar", "GET")] @@ -83,6 +57,34 @@ namespace MediaBrowser.Api { } + [Route("/Shows/{Id}/Episodes", "GET")] + [Api(Description = "Finds tv shows similar to a given one.")] + public class GetEpisodes : IReturn, IHasItemFields + { + /// + /// Gets or sets the user id. + /// + /// The user id. + [ApiMember(Name = "UserId", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")] + public Guid UserId { get; set; } + + /// + /// Fields to return within the items, in addition to basic information + /// + /// The fields. + [ApiMember(Name = "Fields", Description = "Optional. Specify additional fields of information to return in the output. This allows multiple, comma delimeted. Options: Budget, Chapters, CriticRatingSummary, DateCreated, Genres, HomePageUrl, IndexOptions, MediaStreams, Overview, OverviewHtml, ParentId, Path, People, ProviderIds, PrimaryImageAspectRatio, Revenue, SortName, Studios, Taglines, TrailerUrls", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)] + public string Fields { get; set; } + + [ApiMember(Name = "Id", Description = "The series id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")] + public Guid Id { get; set; } + + [ApiMember(Name = "Season", Description = "Optional filter by season number.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] + public int? Season { get; set; } + + [ApiMember(Name = "ExcludeLocationTypes", Description = "Optional. If specified, results will be filtered based on LocationType. This allows multiple, comma delimeted.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)] + public string ExcludeLocationTypes { get; set; } + } + /// /// Class TvShowsService /// @@ -311,5 +313,88 @@ namespace MediaBrowser.Api return items; } + + public object Get(GetEpisodes request) + { + var user = _userManager.GetUserById(request.UserId); + + var series = _libraryManager.GetItemById(request.Id) as Series; + + var fields = request.GetItemFields().ToList(); + + var episodes = series.GetRecursiveChildren(user) + .OfType(); + + var sortOrder = ItemSortBy.SortName; + + if (request.Season.HasValue) + { + episodes = FilterEpisodesBySeason(episodes, request.Season.Value, true); + + sortOrder = ItemSortBy.AiredEpisodeOrder; + } + + var config = user.Configuration; + + if (!config.DisplayMissingEpisodes) + { + episodes = episodes.Where(i => !i.IsMissingEpisode); + } + if (!config.DisplayUnairedEpisodes) + { + episodes = episodes.Where(i => !i.IsVirtualUnaired); + } + + // ExcludeLocationTypes + if (!string.IsNullOrEmpty(request.ExcludeLocationTypes)) + { + var vals = request.ExcludeLocationTypes.Split(','); + episodes = episodes.Where(f => !vals.Contains(f.LocationType.ToString(), StringComparer.OrdinalIgnoreCase)); + } + + episodes = _libraryManager.Sort(episodes, user, new[] { sortOrder }, SortOrder.Ascending) + .Cast(); + + var returnItems = episodes.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) + .ToArray(); + + return new ItemsResult + { + TotalRecordCount = returnItems.Length, + Items = returnItems + }; + } + + internal static IEnumerable FilterEpisodesBySeason(IEnumerable episodes, int seasonNumber, bool includeSpecials) + { + if (!includeSpecials || seasonNumber < 1) + { + return episodes.Where(i => (i.PhysicalSeasonNumber ?? -1) == seasonNumber); + } + + var episodeList = episodes.ToList(); + + // We can only enforce the air date requirement if the episodes have air dates + var enforceAirDate = episodeList.Any(i => i.PremiereDate.HasValue); + + return episodeList.Where(i => + { + var episode = i; + + if (episode != null) + { + if (enforceAirDate && !episode.PremiereDate.HasValue) + { + return false; + } + + var currentSeasonNumber = episode.AiredSeasonNumber; + + return currentSeasonNumber.HasValue && currentSeasonNumber.Value == seasonNumber; + } + + return false; + }); + } } } diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs b/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs index eba36d856..6aa87e499 100644 --- a/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs +++ b/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs @@ -7,7 +7,7 @@ using System; namespace MediaBrowser.Api.UserLibrary { - public abstract class BaseItemsRequest + public abstract class BaseItemsRequest : IHasItemFields { /// /// Skips over a given number of items within the results. Use for paging. @@ -109,32 +109,6 @@ namespace MediaBrowser.Api.UserLibrary return val.Split(',').Select(v => (ItemFilter)Enum.Parse(typeof(ItemFilter), v, true)); } - /// - /// Gets the item fields. - /// - /// IEnumerable{ItemFields}. - public IEnumerable GetItemFields() - { - var val = Fields; - - if (string.IsNullOrEmpty(val)) - { - return new ItemFields[] { }; - } - - return val.Split(',').Select(v => - { - ItemFields value; - - if (Enum.TryParse(v, true, out value)) - { - return (ItemFields?)value; - } - return null; - - }).Where(i => i.HasValue).Select(i => i.Value); - } - /// /// Gets the image types. /// diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index 3936014c5..cae74cc2f 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -1012,7 +1012,7 @@ namespace MediaBrowser.Api.UserLibrary if (request.AiredDuringSeason.HasValue) { - items = FilterByAiredDuringSeason(items, request.AiredDuringSeason.Value); + items = TvShowsService.FilterEpisodesBySeason(items.OfType(), request.AiredDuringSeason.Value, true); } if (!string.IsNullOrEmpty(request.MinPremiereDate)) @@ -1032,43 +1032,6 @@ namespace MediaBrowser.Api.UserLibrary return items; } - private IEnumerable FilterByAiredDuringSeason(IEnumerable items, int seasonNumber) - { - var episodes = items.OfType().ToList(); - - // We can only enforce the air date requirement if the episodes have air dates - var enforceAirDate = episodes.Any(i => i.PremiereDate.HasValue); - - return episodes.Where(i => - { - var episode = i; - - if (episode != null) - { - var currentSeasonNumber = episode.AirsAfterSeasonNumber ?? episode.AirsBeforeSeasonNumber ?? episode.ParentIndexNumber; - - // If this produced nothing, try and get it from the parent folder - if (!currentSeasonNumber.HasValue) - { - var season = episode.Parent as Season; - if (season != null) - { - currentSeasonNumber = season.IndexNumber; - } - } - - if (enforceAirDate && !episode.PremiereDate.HasValue) - { - return false; - } - - return currentSeasonNumber.HasValue && currentSeasonNumber.Value == seasonNumber; - } - - return false; - }); - } - /// /// Determines whether the specified item has image. /// diff --git a/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs b/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs index 56641296f..0581343d3 100644 --- a/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs +++ b/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs @@ -168,7 +168,7 @@ namespace MediaBrowser.Common.Implementations.Updates { // Let dev users get results more often for testing purposes var cacheLength = _config.CommonConfiguration.SystemUpdateLevel == PackageVersionClass.Dev - ? TimeSpan.FromMinutes(15) + ? TimeSpan.FromMinutes(5) : TimeSpan.FromHours(12); if ((DateTime.UtcNow - _lastPackageListResult.Item2) < cacheLength) diff --git a/MediaBrowser.Controller/Entities/TV/Episode.cs b/MediaBrowser.Controller/Entities/TV/Episode.cs index c68ba0ad1..95ea10ea1 100644 --- a/MediaBrowser.Controller/Entities/TV/Episode.cs +++ b/MediaBrowser.Controller/Entities/TV/Episode.cs @@ -50,6 +50,33 @@ namespace MediaBrowser.Controller.Entities.TV get { return true; } } + [IgnoreDataMember] + public int? AiredSeasonNumber + { + get + { + return AirsBeforeSeasonNumber ?? AirsAfterSeasonNumber ?? PhysicalSeasonNumber; + } + } + + [IgnoreDataMember] + public int? PhysicalSeasonNumber + { + get + { + var value = ParentIndexNumber; + + if (value.HasValue) + { + return value; + } + + var season = Parent as Season; + + return season != null ? season.IndexNumber : null; + } + } + /// /// We roll up into series /// diff --git a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs b/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs index 0856ca1f6..8ee622eda 100644 --- a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs +++ b/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs @@ -1072,7 +1072,7 @@ namespace MediaBrowser.Controller.Providers /// IEnumerable{PersonInfo}. private IEnumerable GetPersonsFromXmlNode(XmlReader reader) { - var names = new List(); + var name = string.Empty; var type = "Actor"; // If type is not specified assume actor var role = string.Empty; int? sortOrder = null; @@ -1086,7 +1086,7 @@ namespace MediaBrowser.Controller.Providers switch (reader.Name) { case "Name": - names.AddRange(SplitNames(reader.ReadElementContentAsString())); + name = reader.ReadElementContentAsString() ?? string.Empty; break; case "Type": @@ -1132,7 +1132,15 @@ namespace MediaBrowser.Controller.Providers } } - return names.Select(n => new PersonInfo { Name = n.Trim(), Role = role, Type = type, SortOrder = sortOrder }); + var personInfo = new PersonInfo + { + Name = name.Trim(), + Role = role, + Type = type, + SortOrder = sortOrder + }; + + return new[] { personInfo }; } /// diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index 726df1eb5..ced0b712f 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -311,6 +311,9 @@ Querying\ArtistsQuery.cs + + Querying\EpisodeQuery.cs + Querying\ItemCountsQuery.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index 471db6f25..80b5e9ab8 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -298,6 +298,9 @@ Querying\ArtistsQuery.cs + + Querying\EpisodeQuery.cs + Querying\ItemCountsQuery.cs diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index 3f66f195e..7817a26cd 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -225,6 +225,13 @@ namespace MediaBrowser.Model.ApiClient /// Task{ItemCounts}. Task GetItemCountsAsync(ItemCountsQuery query); + /// + /// Gets the episodes asynchronous. + /// + /// The query. + /// Task{ItemsResult}. + Task GetEpisodesAsync(EpisodeQuery query); + /// /// Queries for items /// diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 6ff6fcf73..45b5998d2 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -90,6 +90,7 @@ + diff --git a/MediaBrowser.Model/Querying/EpisodeQuery.cs b/MediaBrowser.Model/Querying/EpisodeQuery.cs new file mode 100644 index 000000000..ab9b246c8 --- /dev/null +++ b/MediaBrowser.Model/Querying/EpisodeQuery.cs @@ -0,0 +1,23 @@ +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Model.Querying +{ + public class EpisodeQuery + { + public string UserId { get; set; } + + public string SeriesId { get; set; } + + public LocationType[] ExcludeLocationTypes { get; set; } + + public int? SeasonNumber { get; set; } + + public ItemFields[] Fields { get; set; } + + public EpisodeQuery() + { + Fields = new ItemFields[] { }; + ExcludeLocationTypes = new LocationType[] { }; + } + } +} diff --git a/MediaBrowser.Providers/Movies/FanArtMovieUpdatesPrescanTask.cs b/MediaBrowser.Providers/Movies/FanArtMovieUpdatesPrescanTask.cs index cc2293968..aff71c6db 100644 --- a/MediaBrowser.Providers/Movies/FanArtMovieUpdatesPrescanTask.cs +++ b/MediaBrowser.Providers/Movies/FanArtMovieUpdatesPrescanTask.cs @@ -68,8 +68,8 @@ namespace MediaBrowser.Providers.Movies var timestampFileInfo = new FileInfo(timestampFile); - // Don't check for tvdb updates anymore frequently than 24 hours - if (timestampFileInfo.Exists && (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(timestampFileInfo)).TotalDays < 1) + // Don't check for updates every single time + if (timestampFileInfo.Exists && (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(timestampFileInfo)).TotalDays < 3) { return; } diff --git a/MediaBrowser.Providers/Movies/MovieUpdatesPrescanTask.cs b/MediaBrowser.Providers/Movies/MovieUpdatesPrescanTask.cs index 50e04a9af..f8fb133c6 100644 --- a/MediaBrowser.Providers/Movies/MovieUpdatesPrescanTask.cs +++ b/MediaBrowser.Providers/Movies/MovieUpdatesPrescanTask.cs @@ -100,8 +100,8 @@ namespace MediaBrowser.Providers.Movies var timestampFileInfo = new FileInfo(timestampFile); - // Don't check for tvdb updates anymore frequently than 24 hours - if (timestampFileInfo.Exists && (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(timestampFileInfo)).TotalDays < 1) + // Don't check for updates every single time + if (timestampFileInfo.Exists && (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(timestampFileInfo)).TotalDays < 3) { return; } diff --git a/MediaBrowser.Providers/Movies/PersonUpdatesPreScanTask.cs b/MediaBrowser.Providers/Movies/PersonUpdatesPreScanTask.cs index 2264ccd3f..489b0ad09 100644 --- a/MediaBrowser.Providers/Movies/PersonUpdatesPreScanTask.cs +++ b/MediaBrowser.Providers/Movies/PersonUpdatesPreScanTask.cs @@ -76,8 +76,8 @@ namespace MediaBrowser.Providers.Movies var timestampFileInfo = new FileInfo(timestampFile); - // Don't check for tvdb updates anymore frequently than 24 hours - if (timestampFileInfo.Exists && (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(timestampFileInfo)).TotalDays < 1) + // Don't check for updates every single time + if (timestampFileInfo.Exists && (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(timestampFileInfo)).TotalDays < 3) { return; } diff --git a/MediaBrowser.Providers/Music/FanArtUpdatesPrescanTask.cs b/MediaBrowser.Providers/Music/FanArtUpdatesPrescanTask.cs index 6d9a16e87..ddf212179 100644 --- a/MediaBrowser.Providers/Music/FanArtUpdatesPrescanTask.cs +++ b/MediaBrowser.Providers/Music/FanArtUpdatesPrescanTask.cs @@ -67,8 +67,8 @@ namespace MediaBrowser.Providers.Music var timestampFileInfo = new FileInfo(timestampFile); - // Don't check for tvdb updates anymore frequently than 24 hours - if (timestampFileInfo.Exists && (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(timestampFileInfo)).TotalDays < 1) + // Don't check for updates every single time + if (timestampFileInfo.Exists && (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(timestampFileInfo)).TotalDays < 3) { return; } diff --git a/MediaBrowser.Providers/TV/FanArtTvUpdatesPrescanTask.cs b/MediaBrowser.Providers/TV/FanArtTvUpdatesPrescanTask.cs index 4bc7c3c4f..8ef04ed11 100644 --- a/MediaBrowser.Providers/TV/FanArtTvUpdatesPrescanTask.cs +++ b/MediaBrowser.Providers/TV/FanArtTvUpdatesPrescanTask.cs @@ -68,8 +68,8 @@ namespace MediaBrowser.Providers.TV var timestampFileInfo = new FileInfo(timestampFile); - // Don't check for tvdb updates anymore frequently than 24 hours - if (timestampFileInfo.Exists && (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(timestampFileInfo)).TotalDays < 1) + // Don't check for updates every single time + if (timestampFileInfo.Exists && (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(timestampFileInfo)).TotalDays < 3) { return; } diff --git a/MediaBrowser.WebDashboard/ApiClient.js b/MediaBrowser.WebDashboard/ApiClient.js index d6f82184c..387a84970 100644 --- a/MediaBrowser.WebDashboard/ApiClient.js +++ b/MediaBrowser.WebDashboard/ApiClient.js @@ -469,6 +469,17 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi }); }; + self.getEpisodes = function (itemId, options) { + + var url = self.getUrl("Shows/" + itemId + "/Episodes", options); + + return self.ajax({ + type: "GET", + url: url, + dataType: "json" + }); + }; + self.getSimilarMovies = function (itemId, options) { var url = self.getUrl("Movies/" + itemId + "/Similar", options); diff --git a/MediaBrowser.WebDashboard/packages.config b/MediaBrowser.WebDashboard/packages.config index d431a43a5..6e250aae3 100644 --- a/MediaBrowser.WebDashboard/packages.config +++ b/MediaBrowser.WebDashboard/packages.config @@ -1,6 +1,6 @@  - + \ No newline at end of file diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 70922e14b..321b2f681 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.244 + 3.0.245 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 16413baf5..a8b8c686a 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.244 + 3.0.245 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 7246f517f..1d8c165e6 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.244 + 3.0.245 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - +