diff --git a/MediaBrowser.Api/IHasDtoOptions.cs b/MediaBrowser.Api/IHasDtoOptions.cs
new file mode 100644
index 0000000000..f7fb57f014
--- /dev/null
+++ b/MediaBrowser.Api/IHasDtoOptions.cs
@@ -0,0 +1,49 @@
+using MediaBrowser.Model.Dto;
+using MediaBrowser.Model.Entities;
+using System;
+using System.Linq;
+
+namespace MediaBrowser.Api
+{
+ public interface IHasDtoOptions : IHasItemFields
+ {
+ bool? EnableImages { get; set; }
+
+ int? ImageTypeLimit { get; set; }
+
+ string EnableImageTypes { get; set; }
+ }
+
+ public static class HasDtoOptionsExtensions
+ {
+ public static DtoOptions GetDtoOptions(this IHasDtoOptions request)
+ {
+ var options = new DtoOptions();
+
+ options.Fields = request.GetItemFields().ToList();
+ options.EnableImages = request.EnableImages ?? true;
+
+ if (request.ImageTypeLimit.HasValue)
+ {
+ options.ImageTypeLimit = request.ImageTypeLimit.Value;
+ }
+
+ if (string.IsNullOrWhiteSpace(request.EnableImageTypes))
+ {
+ if (options.EnableImages)
+ {
+ // Get everything
+ options.ImageTypes = Enum.GetNames(typeof(ImageType))
+ .Select(i => (ImageType)Enum.Parse(typeof(ImageType), i, true))
+ .ToList();
+ }
+ }
+ else
+ {
+ options.ImageTypes = (request.EnableImageTypes ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).Select(v => (ImageType)Enum.Parse(typeof(ImageType), v, true)).ToList();
+ }
+
+ return options;
+ }
+ }
+}
diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj
index dae3790990..286b807b66 100644
--- a/MediaBrowser.Api/MediaBrowser.Api.csproj
+++ b/MediaBrowser.Api/MediaBrowser.Api.csproj
@@ -77,6 +77,7 @@
+
diff --git a/MediaBrowser.Api/PackageReviewService.cs b/MediaBrowser.Api/PackageReviewService.cs
index 112a2c5cea..c4cf1eac31 100644
--- a/MediaBrowser.Api/PackageReviewService.cs
+++ b/MediaBrowser.Api/PackageReviewService.cs
@@ -1,5 +1,4 @@
-using MediaBrowser.Common.Constants;
-using MediaBrowser.Common.Net;
+using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Serialization;
@@ -103,6 +102,7 @@ namespace MediaBrowser.Api
private readonly IHttpClient _httpClient;
private readonly INetworkManager _netManager;
private readonly IJsonSerializer _serializer;
+ private const string MbAdminUrl = "http://www.mb3admin.com/admin/";
public PackageReviewService(IHttpClient client, INetworkManager net, IJsonSerializer serializer)
{
@@ -132,7 +132,7 @@ namespace MediaBrowser.Api
parms += "&title=true";
}
- var result = _httpClient.Get(Constants.MbAdminUrl + "/service/packageReview/retrieve" + parms, CancellationToken.None).Result;
+ var result = _httpClient.Get(MbAdminUrl + "/service/packageReview/retrieve" + parms, CancellationToken.None).Result;
var reviews = _serializer.DeserializeFromStream>(result);
@@ -153,7 +153,7 @@ namespace MediaBrowser.Api
{ "review", reviewText },
};
- Task.WaitAll(_httpClient.Post(Constants.MbAdminUrl + "/service/packageReview/update", review, CancellationToken.None));
+ Task.WaitAll(_httpClient.Post(MbAdminUrl + "/service/packageReview/update", review, CancellationToken.None));
}
}
}
diff --git a/MediaBrowser.Api/TvShowsService.cs b/MediaBrowser.Api/TvShowsService.cs
index 2f9bbca476..d1464cd262 100644
--- a/MediaBrowser.Api/TvShowsService.cs
+++ b/MediaBrowser.Api/TvShowsService.cs
@@ -19,7 +19,7 @@ namespace MediaBrowser.Api
/// Class GetNextUpEpisodes
///
[Route("/Shows/NextUp", "GET", Summary = "Gets a list of next up episodes")]
- public class GetNextUpEpisodes : IReturn, IHasItemFields
+ public class GetNextUpEpisodes : IReturn, IHasDtoOptions
{
///
/// Gets or sets the user id.
@@ -58,10 +58,19 @@ namespace MediaBrowser.Api
/// The parent id.
[ApiMember(Name = "ParentId", Description = "Specify this to localize the search to a specific item or folder. Omit to use the root", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
public string ParentId { get; set; }
+
+ [ApiMember(Name = "EnableImages", Description = "Optional, include image information in output", IsRequired = false, DataType = "boolean", ParameterType = "query", Verb = "GET")]
+ public bool? EnableImages { get; set; }
+
+ [ApiMember(Name = "ImageTypeLimit", Description = "Optional, the max number of images to return, per image type", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
+ public int? ImageTypeLimit { get; set; }
+
+ [ApiMember(Name = "EnableImageTypes", Description = "Optional. The image types to include in the output.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
+ public string EnableImageTypes { get; set; }
}
[Route("/Shows/Upcoming", "GET", Summary = "Gets a list of upcoming episodes")]
- public class GetUpcomingEpisodes : IReturn, IHasItemFields
+ public class GetUpcomingEpisodes : IReturn, IHasDtoOptions
{
///
/// Gets or sets the user id.
@@ -97,6 +106,15 @@ namespace MediaBrowser.Api
/// The parent id.
[ApiMember(Name = "ParentId", Description = "Specify this to localize the search to a specific item or folder. Omit to use the root", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
public string ParentId { get; set; }
+
+ [ApiMember(Name = "EnableImages", Description = "Optional, include image information in output", IsRequired = false, DataType = "boolean", ParameterType = "query", Verb = "GET")]
+ public bool? EnableImages { get; set; }
+
+ [ApiMember(Name = "ImageTypeLimit", Description = "Optional, the max number of images to return, per image type", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
+ public int? ImageTypeLimit { get; set; }
+
+ [ApiMember(Name = "EnableImageTypes", Description = "Optional. The image types to include in the output.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
+ public string EnableImageTypes { get; set; }
}
[Route("/Shows/{Id}/Similar", "GET", Summary = "Finds tv shows similar to a given one.")]
@@ -252,9 +270,9 @@ namespace MediaBrowser.Api
var pagedItems = ApplyPaging(previousEpisodes, request.StartIndex, request.Limit);
- var fields = request.GetItemFields().ToList();
+ var options = request.GetDtoOptions();
- var returnItems = pagedItems.Select(i => _dtoService.GetBaseItemDto(i, fields, user)).ToArray();
+ var returnItems = pagedItems.Select(i => _dtoService.GetBaseItemDto(i, options, user)).ToArray();
var result = new ItemsResult
{
@@ -283,9 +301,9 @@ namespace MediaBrowser.Api
var user = _userManager.GetUserById(request.UserId);
- var fields = request.GetItemFields().ToList();
+ var options = request.GetDtoOptions();
- var returnItems = result.Items.Select(i => _dtoService.GetBaseItemDto(i, fields, user)).ToArray();
+ var returnItems = result.Items.Select(i => _dtoService.GetBaseItemDto(i, options, user)).ToArray();
return ToOptimizedSerializedResultUsingCache(new ItemsResult
{
diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs b/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs
index 808dbb1ff9..fffc11d68f 100644
--- a/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs
+++ b/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs
@@ -1,5 +1,4 @@
-using MediaBrowser.Model.Dto;
-using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Querying;
using ServiceStack;
using System;
@@ -8,7 +7,7 @@ using System.Linq;
namespace MediaBrowser.Api.UserLibrary
{
- public abstract class BaseItemsRequest : IHasItemFields
+ public abstract class BaseItemsRequest : IHasDtoOptions
{
protected BaseItemsRequest()
{
@@ -123,7 +122,7 @@ namespace MediaBrowser.Api.UserLibrary
public string Years { get; set; }
[ApiMember(Name = "EnableImages", Description = "Optional, include image information in output", IsRequired = false, DataType = "boolean", ParameterType = "query", Verb = "GET")]
- public bool EnableImages { get; set; }
+ public bool? EnableImages { get; set; }
[ApiMember(Name = "ImageTypeLimit", Description = "Optional, the max number of images to return, per image type", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
public int? ImageTypeLimit { get; set; }
@@ -213,35 +212,5 @@ namespace MediaBrowser.Api.UserLibrary
return val.Split(',');
}
-
- public DtoOptions GetDtoOptions()
- {
- var options = new DtoOptions();
-
- options.Fields = this.GetItemFields().ToList();
- options.EnableImages = EnableImages;
-
- if (ImageTypeLimit.HasValue)
- {
- options.ImageTypeLimit = ImageTypeLimit.Value;
- }
-
- if (string.IsNullOrWhiteSpace(EnableImageTypes))
- {
- if (options.EnableImages)
- {
- // Get everything
- options.ImageTypes = Enum.GetNames(typeof(ImageType))
- .Select(i => (ImageType)Enum.Parse(typeof(ImageType), i, true))
- .ToList();
- }
- }
- else
- {
- options.ImageTypes = (EnableImageTypes ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).Select(v => (ImageType)Enum.Parse(typeof(ImageType), v, true)).ToList();
- }
-
- return options;
- }
}
}
diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
index 511312a631..a64e0758ab 100644
--- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
+++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
@@ -221,7 +221,7 @@ namespace MediaBrowser.Api.UserLibrary
}
[Route("/Users/{UserId}/Items/Latest", "GET", Summary = "Gets latest media")]
- public class GetLatestMedia : IReturn>, IHasItemFields
+ public class GetLatestMedia : IReturn>, IHasDtoOptions
{
///
/// Gets or sets the user id.
@@ -251,6 +251,15 @@ namespace MediaBrowser.Api.UserLibrary
[ApiMember(Name = "GroupItems", Description = "Whether or not to group items into a parent container.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
public bool GroupItems { get; set; }
+ [ApiMember(Name = "EnableImages", Description = "Optional, include image information in output", IsRequired = false, DataType = "boolean", ParameterType = "query", Verb = "GET")]
+ public bool? EnableImages { get; set; }
+
+ [ApiMember(Name = "ImageTypeLimit", Description = "Optional, the max number of images to return, per image type", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
+ public int? ImageTypeLimit { get; set; }
+
+ [ApiMember(Name = "EnableImageTypes", Description = "Optional. The image types to include in the output.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
+ public string EnableImageTypes { get; set; }
+
public GetLatestMedia()
{
Limit = 20;
@@ -362,7 +371,7 @@ namespace MediaBrowser.Api.UserLibrary
}
}
- var fields = request.GetItemFields().ToList();
+ var options = request.GetDtoOptions();
var dtos = list.Select(i =>
{
@@ -374,8 +383,8 @@ namespace MediaBrowser.Api.UserLibrary
item = i.Item1;
childCount = i.Item2.Count;
}
-
- var dto = _dtoService.GetBaseItemDto(item, fields, user);
+
+ var dto = _dtoService.GetBaseItemDto(item, options, user);
dto.ChildCount = childCount;
diff --git a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs
index 900009a238..78b0b13899 100644
--- a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs
+++ b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Common.Configuration;
+using System.Net.Sockets;
+using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net;
@@ -134,9 +135,22 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
request.Referer = options.Referer;
}
+ request.ServicePoint.BindIPEndPointDelegate = BindIPEndPointCallback;
+
return request;
}
+ private static IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount)
+ {
+ // Prefer local ipv4
+ if (remoteEndPoint.AddressFamily == AddressFamily.InterNetworkV6)
+ {
+ return new IPEndPoint(IPAddress.IPv6Any, 0);
+ }
+
+ return new IPEndPoint(IPAddress.Any, 0);
+ }
+
private void AddRequestHeaders(HttpWebRequest request, HttpRequestOptions options)
{
foreach (var header in options.RequestHeaders.ToList())
diff --git a/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs b/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs
index 2c387a4ddf..8da3006a37 100644
--- a/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs
+++ b/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs
@@ -17,7 +17,9 @@ namespace MediaBrowser.Common.Implementations.Security
///
public class PluginSecurityManager : ISecurityManager
{
- private const string MBValidateUrl = Constants.Constants.MbAdminUrl + "service/registration/validate";
+ private const string MbAdminUrl = "http://www.mb3admin.com/admin/";
+
+ private const string MBValidateUrl = MbAdminUrl + "service/registration/validate";
///
/// The _is MB supporter
@@ -160,7 +162,7 @@ namespace MediaBrowser.Common.Implementations.Security
return new SupporterInfo();
}
- var url = Constants.Constants.MbAdminUrl + "/service/supporter/retrieve?key=" + key;
+ var url = MbAdminUrl + "/service/supporter/retrieve?key=" + key;
using (var stream = await _httpClient.Get(url, CancellationToken.None).ConfigureAwait(false))
{
diff --git a/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs b/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs
index b022dc6719..275e75188c 100644
--- a/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs
+++ b/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs
@@ -161,7 +161,7 @@ namespace MediaBrowser.Common.Implementations.Updates
{ "systemid", _applicationHost.SystemId }
};
- using (var json = await _httpClient.Post(Constants.Constants.MbAdminUrl + "service/package/retrieveall", data, cancellationToken).ConfigureAwait(false))
+ using (var json = await _httpClient.Post(MbAdminUrl + "service/package/retrieveall", data, cancellationToken).ConfigureAwait(false))
{
cancellationToken.ThrowIfCancellationRequested();
@@ -172,6 +172,7 @@ namespace MediaBrowser.Common.Implementations.Updates
}
private Tuple, DateTime> _lastPackageListResult;
+ private const string MbAdminUrl = "http://www.mb3admin.com/admin/";
///
/// Gets all available packages.
@@ -203,7 +204,7 @@ namespace MediaBrowser.Common.Implementations.Updates
}
}
- using (var json = await _httpClient.Get(Constants.Constants.MbAdminUrl + "service/MB3Packages.json", cancellationToken).ConfigureAwait(false))
+ using (var json = await _httpClient.Get(MbAdminUrl + "service/MB3Packages.json", cancellationToken).ConfigureAwait(false))
{
cancellationToken.ThrowIfCancellationRequested();
diff --git a/MediaBrowser.Common/Constants/Constants.cs b/MediaBrowser.Common/Constants/Constants.cs
deleted file mode 100644
index d569fd8eae..0000000000
--- a/MediaBrowser.Common/Constants/Constants.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-
-namespace MediaBrowser.Common.Constants
-{
- public static class Constants
- {
- public const string MbAdminUrl = "http://www.mb3admin.com/admin/";
- }
-}
diff --git a/MediaBrowser.Common/Extensions/BaseExtensions.cs b/MediaBrowser.Common/Extensions/BaseExtensions.cs
index 4daee48753..8e96373f44 100644
--- a/MediaBrowser.Common/Extensions/BaseExtensions.cs
+++ b/MediaBrowser.Common/Extensions/BaseExtensions.cs
@@ -1,5 +1,4 @@
using System;
-using System.Globalization;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
@@ -55,28 +54,6 @@ namespace MediaBrowser.Common.Extensions
return sb.ToString();
}
- ///
- /// Removes the accent.
- ///
- /// The text.
- /// System.String.
- public static string RemoveAccent(this string text)
- {
- var normalizedString = text.Normalize(NormalizationForm.FormD);
- var stringBuilder = new StringBuilder();
-
- foreach (var c in normalizedString)
- {
- var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c);
- if (unicodeCategory != UnicodeCategory.NonSpacingMark)
- {
- stringBuilder.Append(c);
- }
- }
-
- return stringBuilder.ToString().Normalize(NormalizationForm.FormC);
- }
-
///
/// Gets the M d5.
///
@@ -109,35 +86,5 @@ namespace MediaBrowser.Common.Extensions
return key.GetMD5();
}
-
- ///
- /// Gets the attribute value.
- ///
- /// The STR.
- /// The attrib.
- /// System.String.
- /// attrib
- public static string GetAttributeValue(this string str, string attrib)
- {
- if (string.IsNullOrEmpty(str))
- {
- throw new ArgumentNullException("str");
- }
-
- if (string.IsNullOrEmpty(attrib))
- {
- throw new ArgumentNullException("attrib");
- }
-
- string srch = "[" + attrib + "=";
- int start = str.IndexOf(srch, StringComparison.OrdinalIgnoreCase);
- if (start > -1)
- {
- start += srch.Length;
- int end = str.IndexOf(']', start);
- return str.Substring(start, end - start);
- }
- return null;
- }
}
}
diff --git a/MediaBrowser.Common/IO/FileSystemRepository.cs b/MediaBrowser.Common/IO/FileSystemRepository.cs
deleted file mode 100644
index 07328d72d9..0000000000
--- a/MediaBrowser.Common/IO/FileSystemRepository.cs
+++ /dev/null
@@ -1,122 +0,0 @@
-using MediaBrowser.Common.Extensions;
-using System;
-using System.IO;
-
-namespace MediaBrowser.Common.IO
-{
- ///
- /// This is a wrapper for storing large numbers of files within a directory on a file system.
- /// Simply pass a filename into GetResourcePath and it will return a full path location of where the file should be stored.
- ///
- public class FileSystemRepository
- {
- ///
- /// Gets or sets the path.
- ///
- /// The path.
- protected string Path { get; set; }
-
- ///
- /// Initializes a new instance of the class.
- ///
- /// The path.
- ///
- public FileSystemRepository(string path)
- {
- if (string.IsNullOrEmpty(path))
- {
- throw new ArgumentNullException();
- }
-
- Path = path;
- }
-
- ///
- /// Gets the full path of where a resource should be stored within the repository
- ///
- /// Name of the unique.
- /// The file extension.
- /// System.String.
- ///
- ///
- public string GetResourcePath(string uniqueName, string fileExtension)
- {
- if (string.IsNullOrEmpty(uniqueName))
- {
- throw new ArgumentNullException("uniqueName");
- }
-
- if (string.IsNullOrEmpty(fileExtension))
- {
- throw new ArgumentNullException("fileExtension");
- }
-
- var filename = uniqueName.GetMD5() + fileExtension;
-
- return GetResourcePath(filename);
- }
-
- ///
- /// Gets the resource path.
- ///
- /// The filename.
- /// System.String.
- ///
- public string GetResourcePath(string filename)
- {
- if (string.IsNullOrEmpty(filename))
- {
- throw new ArgumentNullException("filename");
- }
-
- var prefix = filename.Substring(0, 1);
-
- var path = System.IO.Path.Combine(Path, prefix);
-
- return System.IO.Path.Combine(path, filename);
- }
-
- ///
- /// Determines if a resource is present in the repository
- ///
- /// Name of the unique.
- /// The file extension.
- /// true if the specified unique name contains resource; otherwise, false.
- public bool ContainsResource(string uniqueName, string fileExtension)
- {
- return ContainsFilePath(GetResourcePath(uniqueName, fileExtension));
- }
-
- ///
- /// Determines if a file with a given name is present in the repository
- ///
- /// The filename.
- /// true if the specified filename contains filename; otherwise, false.
- ///
- public bool ContainsFilename(string filename)
- {
- if (string.IsNullOrEmpty(filename))
- {
- throw new ArgumentNullException();
- }
-
- return ContainsFilePath(GetResourcePath(filename));
- }
-
- ///
- /// Determines if a file is present in the repository
- ///
- /// The path.
- /// true if [contains file path] [the specified path]; otherwise, false.
- ///
- public bool ContainsFilePath(string path)
- {
- if (string.IsNullOrEmpty(path))
- {
- throw new ArgumentNullException();
- }
-
- return File.Exists(path);
- }
- }
-}
diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj
index 6e96feed3a..9fdfccaaf6 100644
--- a/MediaBrowser.Common/MediaBrowser.Common.csproj
+++ b/MediaBrowser.Common/MediaBrowser.Common.csproj
@@ -57,12 +57,10 @@
-
-
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index ea615f023d..c784098479 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -361,6 +361,15 @@ namespace MediaBrowser.Controller.Entities
}
}
+ public bool ContainsPerson(string name)
+ {
+ if (string.IsNullOrWhiteSpace(name))
+ {
+ throw new ArgumentNullException("name");
+ }
+ return People.Any(i => string.Equals(i.Name, name, StringComparison.OrdinalIgnoreCase));
+ }
+
public string GetInternalMetadataPath()
{
return GetInternalMetadataPath(ConfigurationManager.ApplicationPaths.InternalMetadataPath);
diff --git a/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs b/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs
index 87f705e16a..d4be1b2f4e 100644
--- a/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs
+++ b/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs
@@ -1,4 +1,5 @@
using MediaBrowser.Common.Net;
+using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Drawing;
@@ -23,6 +24,7 @@ namespace MediaBrowser.Dlna.ContentDirectory
private readonly IServerConfigurationManager _config;
private readonly IUserManager _userManager;
private readonly ILocalizationManager _localization;
+ private readonly IChannelManager _channelManager;
public ContentDirectory(IDlnaManager dlna,
IUserDataManager userDataManager,
@@ -31,7 +33,7 @@ namespace MediaBrowser.Dlna.ContentDirectory
IServerConfigurationManager config,
IUserManager userManager,
ILogger logger,
- IHttpClient httpClient, ILocalizationManager localization)
+ IHttpClient httpClient, ILocalizationManager localization, IChannelManager channelManager)
: base(logger, httpClient)
{
_dlna = dlna;
@@ -41,6 +43,7 @@ namespace MediaBrowser.Dlna.ContentDirectory
_config = config;
_userManager = userManager;
_localization = localization;
+ _channelManager = channelManager;
}
private int SystemUpdateId
@@ -77,7 +80,8 @@ namespace MediaBrowser.Dlna.ContentDirectory
user,
SystemUpdateId,
_config,
- _localization)
+ _localization,
+ _channelManager)
.ProcessControlRequest(request);
}
diff --git a/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs b/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs
index d979e3d891..85be840165 100644
--- a/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs
+++ b/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs
@@ -1,13 +1,16 @@
using MediaBrowser.Common.Extensions;
+using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
+using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Localization;
using MediaBrowser.Dlna.Didl;
using MediaBrowser.Dlna.Server;
using MediaBrowser.Dlna.Service;
+using MediaBrowser.Model.Channels;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
@@ -26,6 +29,7 @@ namespace MediaBrowser.Dlna.ContentDirectory
public class ControlHandler : BaseControlHandler
{
private readonly ILibraryManager _libraryManager;
+ private readonly IChannelManager _channelManager;
private readonly IUserDataManager _userDataManager;
private readonly User _user;
@@ -41,13 +45,14 @@ namespace MediaBrowser.Dlna.ContentDirectory
private readonly DeviceProfile _profile;
- public ControlHandler(ILogger logger, ILibraryManager libraryManager, DeviceProfile profile, string serverAddress, IImageProcessor imageProcessor, IUserDataManager userDataManager, User user, int systemUpdateId, IServerConfigurationManager config, ILocalizationManager localization)
+ public ControlHandler(ILogger logger, ILibraryManager libraryManager, DeviceProfile profile, string serverAddress, IImageProcessor imageProcessor, IUserDataManager userDataManager, User user, int systemUpdateId, IServerConfigurationManager config, ILocalizationManager localization, IChannelManager channelManager)
: base(config, logger)
{
_libraryManager = libraryManager;
_userDataManager = userDataManager;
_user = user;
_systemUpdateId = systemUpdateId;
+ _channelManager = channelManager;
_profile = profile;
_didlBuilder = new DidlBuilder(profile, user, imageProcessor, serverAddress, userDataManager, localization);
@@ -412,7 +417,7 @@ namespace MediaBrowser.Dlna.ContentDirectory
var result = new QueryResult
{
- Items = items.Select(i => new ServerItem { Item = i }).ToArray(),
+ Items = items.Select(i => new ServerItem { Item = i, StubType = StubType.Folder }).ToArray(),
TotalRecordCount = items.Length
};
@@ -426,6 +431,14 @@ namespace MediaBrowser.Dlna.ContentDirectory
return ApplyPaging(await GetMovieItems(movie).ConfigureAwait(false), startIndex, limit);
}
}
+
+ var person = item as Person;
+ if (person != null)
+ {
+ return await GetItemsFromPerson(person, user, startIndex, limit).ConfigureAwait(false);
+ }
+
+ return ApplyPaging(new QueryResult(), startIndex, limit);
}
var folder = (Folder)item;
@@ -463,6 +476,42 @@ namespace MediaBrowser.Dlna.ContentDirectory
};
}
+ private async Task> GetItemsFromPerson(Person person, User user, int? startIndex, int? limit)
+ {
+ var items = user.RootFolder.GetRecursiveChildren(user)
+ .Where(i => i is Movie || i is Series)
+ .Where(i => i.ContainsPerson(person.Name))
+ .ToList();
+
+ var trailerResult = await _channelManager.GetAllMediaInternal(new AllChannelMediaQuery
+ {
+ ContentTypes = new[] { ChannelMediaContentType.MovieExtra },
+ ExtraTypes = new[] { ExtraType.Trailer },
+ UserId = user.Id.ToString("N")
+
+ }, CancellationToken.None).ConfigureAwait(false);
+
+ items.AddRange(trailerResult.Items.Where(i => i.ContainsPerson(person.Name)));
+
+ items = _libraryManager.Sort(items, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending)
+ .Skip(startIndex ?? 0)
+ .Take(limit ?? int.MaxValue)
+ .ToList();
+
+ var serverItems = items.Select(i => new ServerItem
+ {
+ Item = i,
+ StubType = null
+ })
+ .ToArray();
+
+ return new QueryResult
+ {
+ TotalRecordCount = serverItems.Length,
+ Items = serverItems
+ };
+ }
+
private QueryResult ApplyPaging(QueryResult result, int? startIndex, int? limit)
{
result.Items = result.Items.Skip(startIndex ?? 0).Take(limit ?? int.MaxValue).ToArray();
@@ -482,17 +531,27 @@ namespace MediaBrowser.Dlna.ContentDirectory
{
return StubType.Folder;
}
+ }
- if (movie.People.Count > 0)
- {
- return StubType.Folder;
- }
+ if (EnablePeopleDisplay(item))
+ {
+ return StubType.Folder;
}
}
return null;
}
+ private bool EnablePeopleDisplay(BaseItem item)
+ {
+ if (item.People.Count > 0)
+ {
+ return item is Movie;
+ }
+
+ return false;
+ }
+
private Task> GetMovieItems(Movie item)
{
var list = new List();
diff --git a/MediaBrowser.Model/Querying/ItemFields.cs b/MediaBrowser.Model/Querying/ItemFields.cs
index 84f6bd651c..ec37c75d01 100644
--- a/MediaBrowser.Model/Querying/ItemFields.cs
+++ b/MediaBrowser.Model/Querying/ItemFields.cs
@@ -6,6 +6,11 @@ namespace MediaBrowser.Model.Querying
///
public enum ItemFields
{
+ ///
+ /// The alternate episode numbers
+ ///
+ AlternateEpisodeNumbers,
+
///
/// The awards summary
///
@@ -161,6 +166,11 @@ namespace MediaBrowser.Model.Querying
///
ScreenshotImageTags,
+ ///
+ /// The series studio
+ ///
+ SeriesStudio,
+
///
/// The soundtrack ids
///
diff --git a/MediaBrowser.Model/Querying/ItemQuery.cs b/MediaBrowser.Model/Querying/ItemQuery.cs
index 3969eedaa8..e535e8218e 100644
--- a/MediaBrowser.Model/Querying/ItemQuery.cs
+++ b/MediaBrowser.Model/Querying/ItemQuery.cs
@@ -282,6 +282,10 @@ namespace MediaBrowser.Model.Querying
public DateTime? MinPremiereDate { get; set; }
public DateTime? MaxPremiereDate { get; set; }
+
+ public bool? EnableImages { get; set; }
+ public int? ImageTypeLimit { get; set; }
+ public string EnableImageTypes { get; set; }
///
/// Initializes a new instance of the class.
diff --git a/MediaBrowser.Model/Querying/ItemsByNameQuery.cs b/MediaBrowser.Model/Querying/ItemsByNameQuery.cs
index bef2f7aed3..1780226288 100644
--- a/MediaBrowser.Model/Querying/ItemsByNameQuery.cs
+++ b/MediaBrowser.Model/Querying/ItemsByNameQuery.cs
@@ -101,6 +101,21 @@ namespace MediaBrowser.Model.Querying
///
/// null if [is played] contains no value, true if [is played]; otherwise, false.
public bool? IsPlayed { get; set; }
+ ///
+ /// Gets or sets a value indicating whether [enable images].
+ ///
+ /// null if [enable images] contains no value, true if [enable images]; otherwise, false.
+ public bool? EnableImages { get; set; }
+ ///
+ /// Gets or sets the image type limit.
+ ///
+ /// The image type limit.
+ public int? ImageTypeLimit { get; set; }
+ ///
+ /// Gets or sets the enable image types.
+ ///
+ /// The enable image types.
+ public string EnableImageTypes { get; set; }
///
/// Initializes a new instance of the class.
diff --git a/MediaBrowser.Model/Querying/LatestItemsQuery.cs b/MediaBrowser.Model/Querying/LatestItemsQuery.cs
index ccf5ab087b..4537378f58 100644
--- a/MediaBrowser.Model/Querying/LatestItemsQuery.cs
+++ b/MediaBrowser.Model/Querying/LatestItemsQuery.cs
@@ -50,5 +50,20 @@ namespace MediaBrowser.Model.Querying
///
/// true if [group items]; otherwise, false.
public bool GroupItems { get; set; }
+ ///
+ /// Gets or sets a value indicating whether [enable images].
+ ///
+ /// null if [enable images] contains no value, true if [enable images]; otherwise, false.
+ public bool? EnableImages { get; set; }
+ ///
+ /// Gets or sets the image type limit.
+ ///
+ /// The image type limit.
+ public int? ImageTypeLimit { get; set; }
+ ///
+ /// Gets or sets the enable image types.
+ ///
+ /// The enable image types.
+ public string EnableImageTypes { get; set; }
}
}
diff --git a/MediaBrowser.Model/Querying/NextUpQuery.cs b/MediaBrowser.Model/Querying/NextUpQuery.cs
index 0e9c9882f3..c3178b8eb6 100644
--- a/MediaBrowser.Model/Querying/NextUpQuery.cs
+++ b/MediaBrowser.Model/Querying/NextUpQuery.cs
@@ -38,5 +38,21 @@ namespace MediaBrowser.Model.Querying
///
/// The fields.
public ItemFields[] Fields { get; set; }
+ ///
+ /// Gets or sets a value indicating whether [enable images].
+ ///
+ /// null if [enable images] contains no value, true if [enable images]; otherwise, false.
+ public bool? EnableImages { get; set; }
+ ///
+ /// Gets or sets the image type limit.
+ ///
+ /// The image type limit.
+ public int? ImageTypeLimit { get; set; }
+ ///
+ /// Gets or sets the enable image types.
+ ///
+ /// The enable image types.
+ public string EnableImageTypes { get; set; }
+
}
}
diff --git a/MediaBrowser.Model/Querying/UpcomingEpisodesQuery.cs b/MediaBrowser.Model/Querying/UpcomingEpisodesQuery.cs
index e5a875e883..359babeb23 100644
--- a/MediaBrowser.Model/Querying/UpcomingEpisodesQuery.cs
+++ b/MediaBrowser.Model/Querying/UpcomingEpisodesQuery.cs
@@ -31,5 +31,20 @@
///
/// The fields.
public ItemFields[] Fields { get; set; }
+ ///
+ /// Gets or sets a value indicating whether [enable images].
+ ///
+ /// null if [enable images] contains no value, true if [enable images]; otherwise, false.
+ public bool? EnableImages { get; set; }
+ ///
+ /// Gets or sets the image type limit.
+ ///
+ /// The image type limit.
+ public int? ImageTypeLimit { get; set; }
+ ///
+ /// Gets or sets the enable image types.
+ ///
+ /// The enable image types.
+ public string EnableImageTypes { get; set; }
}
}
\ No newline at end of file
diff --git a/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs b/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs
index 29993d675e..4203f4cc19 100644
--- a/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs
+++ b/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs
@@ -787,12 +787,24 @@ namespace MediaBrowser.Server.Implementations.Drawing
Directory.CreateDirectory(parentDirectory);
- using (var newImage = Image.FromStream(newImageStream.Stream, true, false))
+ // Save as png
+ if (newImageStream.Format == Model.Drawing.ImageFormat.Png)
{
//And then save it in the cache
using (var outputStream = _fileSystem.GetFileStream(enhancedImagePath, FileMode.Create, FileAccess.Write, FileShare.Read, false))
{
- newImage.Save(System.Drawing.Imaging.ImageFormat.Png, outputStream, 100);
+ await newImageStream.Stream.CopyToAsync(outputStream).ConfigureAwait(false);
+ }
+ }
+ else
+ {
+ using (var newImage = Image.FromStream(newImageStream.Stream, true, false))
+ {
+ //And then save it in the cache
+ using (var outputStream = _fileSystem.GetFileStream(enhancedImagePath, FileMode.Create, FileAccess.Write, FileShare.Read, false))
+ {
+ newImage.Save(System.Drawing.Imaging.ImageFormat.Png, outputStream, 100);
+ }
}
}
}
diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
index b4393572ee..c420ddabbb 100644
--- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs
+++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
@@ -1020,7 +1020,10 @@ namespace MediaBrowser.Server.Implementations.Dto
dto.AlbumPrimaryImageTag = GetImageCacheTag(albumParent, ImageType.Primary);
}
- dto.MediaSourceCount = 1;
+ //if (fields.Contains(ItemFields.MediaSourceCount))
+ //{
+ // Songs always have one
+ //}
}
var album = item as MusicAlbum;
@@ -1057,7 +1060,10 @@ namespace MediaBrowser.Server.Implementations.Dto
if (fields.Contains(ItemFields.MediaSourceCount))
{
- dto.MediaSourceCount = video.MediaSourceCount;
+ if (video.MediaSourceCount != 1)
+ {
+ dto.MediaSourceCount = video.MediaSourceCount;
+ }
}
if (fields.Contains(ItemFields.Chapters))
@@ -1120,12 +1126,16 @@ namespace MediaBrowser.Server.Implementations.Dto
{
dto.IndexNumberEnd = episode.IndexNumberEnd;
- dto.DvdSeasonNumber = episode.DvdSeasonNumber;
- dto.DvdEpisodeNumber = episode.DvdEpisodeNumber;
+ if (fields.Contains(ItemFields.AlternateEpisodeNumbers))
+ {
+ dto.DvdSeasonNumber = episode.DvdSeasonNumber;
+ dto.DvdEpisodeNumber = episode.DvdEpisodeNumber;
+ dto.AbsoluteEpisodeNumber = episode.AbsoluteEpisodeNumber;
+ }
+
dto.AirsAfterSeasonNumber = episode.AirsAfterSeasonNumber;
dto.AirsBeforeEpisodeNumber = episode.AirsBeforeEpisodeNumber;
dto.AirsBeforeSeasonNumber = episode.AirsBeforeSeasonNumber;
- dto.AbsoluteEpisodeNumber = episode.AbsoluteEpisodeNumber;
var episodeSeason = episode.Season;
if (episodeSeason != null)
@@ -1163,9 +1173,21 @@ namespace MediaBrowser.Server.Implementations.Dto
dto.SeriesId = GetDtoId(series);
dto.SeriesName = series.Name;
dto.AirTime = series.AirTime;
- dto.SeriesStudio = series.Studios.FirstOrDefault();
- dto.SeriesThumbImageTag = GetImageCacheTag(series, ImageType.Thumb);
- dto.SeriesPrimaryImageTag = GetImageCacheTag(series, ImageType.Primary);
+
+ if (options.GetImageLimit(ImageType.Thumb) > 0)
+ {
+ dto.SeriesThumbImageTag = GetImageCacheTag(series, ImageType.Thumb);
+ }
+
+ if (options.GetImageLimit(ImageType.Primary) > 0)
+ {
+ dto.SeriesPrimaryImageTag = GetImageCacheTag(series, ImageType.Primary);
+ }
+
+ if (fields.Contains(ItemFields.SeriesStudio))
+ {
+ dto.SeriesStudio = series.Studios.FirstOrDefault();
+ }
}
}
@@ -1183,7 +1205,10 @@ namespace MediaBrowser.Server.Implementations.Dto
dto.AirTime = series.AirTime;
dto.SeriesStudio = series.Studios.FirstOrDefault();
- dto.SeriesPrimaryImageTag = GetImageCacheTag(series, ImageType.Primary);
+ if (options.GetImageLimit(ImageType.Primary) > 0)
+ {
+ dto.SeriesPrimaryImageTag = GetImageCacheTag(series, ImageType.Primary);
+ }
}
}
diff --git a/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs b/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs
index 85410faf2b..36ba55828a 100644
--- a/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs
+++ b/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs
@@ -12,6 +12,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
private readonly IApplicationHost _applicationHost;
private readonly INetworkManager _networkManager;
private readonly IHttpClient _httpClient;
+ private const string MbAdminUrl = "http://www.mb3admin.com/admin/";
public UsageReporter(IApplicationHost applicationHost, INetworkManager networkManager, IHttpClient httpClient)
{
@@ -37,7 +38,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
{ "isservice", _applicationHost.IsRunningAsService.ToString().ToLower()}
};
- return _httpClient.Post(Common.Constants.Constants.MbAdminUrl + "service/registration/ping", data, cancellationToken);
+ return _httpClient.Post(MbAdminUrl + "service/registration/ping", data, cancellationToken);
}
public Task ReportAppUsage(ClientInfo app, CancellationToken cancellationToken)
@@ -59,7 +60,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
{ "platform", app.DeviceName },
};
- return _httpClient.Post(Common.Constants.Constants.MbAdminUrl + "service/registration/ping", data, cancellationToken);
+ return _httpClient.Post(MbAdminUrl + "service/registration/ping", data, cancellationToken);
}
}
diff --git a/MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs b/MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs
index c41aebb694..cf120f1476 100644
--- a/MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs
+++ b/MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs
@@ -3,8 +3,6 @@ using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.FileOrganization;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
-using MediaBrowser.Controller.Resolvers;
-using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.FileOrganization;
using MediaBrowser.Model.Logging;
using System;
@@ -13,7 +11,6 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using MediaBrowser.Server.Implementations.Library;
namespace MediaBrowser.Server.Implementations.FileOrganization
{
diff --git a/MediaBrowser.Server.Implementations/Library/PathExtensions.cs b/MediaBrowser.Server.Implementations/Library/PathExtensions.cs
new file mode 100644
index 0000000000..00bd651252
--- /dev/null
+++ b/MediaBrowser.Server.Implementations/Library/PathExtensions.cs
@@ -0,0 +1,37 @@
+using System;
+
+namespace MediaBrowser.Server.Implementations.Library
+{
+ public static class PathExtensions
+ {
+ ///
+ /// Gets the attribute value.
+ ///
+ /// The STR.
+ /// The attrib.
+ /// System.String.
+ /// attrib
+ public static string GetAttributeValue(this string str, string attrib)
+ {
+ if (string.IsNullOrEmpty(str))
+ {
+ throw new ArgumentNullException("str");
+ }
+
+ if (string.IsNullOrEmpty(attrib))
+ {
+ throw new ArgumentNullException("attrib");
+ }
+
+ string srch = "[" + attrib + "=";
+ int start = str.IndexOf(srch, StringComparison.OrdinalIgnoreCase);
+ if (start > -1)
+ {
+ start += srch.Length;
+ int end = str.IndexOf(']', start);
+ return str.Substring(start, end - start);
+ }
+ return null;
+ }
+ }
+}
diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
index 48523d68e8..0172a94f76 100644
--- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
+++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
@@ -182,6 +182,7 @@
+
diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs
index 7360f1915d..4258de83f5 100644
--- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs
+++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs
@@ -446,7 +446,7 @@ namespace MediaBrowser.Server.Startup.Common
SessionManager = new SessionManager(UserDataManager, ServerConfigurationManager, Logger, UserRepository, LibraryManager, UserManager, musicManager, DtoService, ImageProcessor, ItemRepository, JsonSerializer, this, HttpClient, AuthenticationRepository, DeviceManager);
RegisterSingleInstance(SessionManager);
- var newsService = new Server.Implementations.News.NewsService(ApplicationPaths, JsonSerializer);
+ var newsService = new Implementations.News.NewsService(ApplicationPaths, JsonSerializer);
RegisterSingleInstance(newsService);
var fileOrganizationService = new FileOrganizationService(TaskManager, FileOrganizationRepository, LogManager.GetLogger("FileOrganizationService"), LibraryMonitor, LibraryManager, ServerConfigurationManager, FileSystemManager, ProviderManager);
@@ -481,7 +481,7 @@ namespace MediaBrowser.Server.Startup.Common
UserViewManager = new UserViewManager(LibraryManager, LocalizationManager, FileSystemManager, UserManager, ChannelManager, LiveTvManager, ApplicationPaths, playlistManager);
RegisterSingleInstance(UserViewManager);
- var contentDirectory = new ContentDirectory(dlnaManager, UserDataManager, ImageProcessor, LibraryManager, ServerConfigurationManager, UserManager, LogManager.GetLogger("UpnpContentDirectory"), HttpClient, LocalizationManager);
+ var contentDirectory = new ContentDirectory(dlnaManager, UserDataManager, ImageProcessor, LibraryManager, ServerConfigurationManager, UserManager, LogManager.GetLogger("UpnpContentDirectory"), HttpClient, LocalizationManager, ChannelManager);
RegisterSingleInstance(contentDirectory);
NotificationManager = new NotificationManager(LogManager, UserManager, ServerConfigurationManager);
diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec
index 1a0b144b02..243ee6548c 100644
--- a/Nuget/MediaBrowser.Common.Internal.nuspec
+++ b/Nuget/MediaBrowser.Common.Internal.nuspec
@@ -2,7 +2,7 @@
MediaBrowser.Common.Internal
- 3.0.510
+ 3.0.511
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 717d3c9347..a84bf06019 100644
--- a/Nuget/MediaBrowser.Common.nuspec
+++ b/Nuget/MediaBrowser.Common.nuspec
@@ -2,7 +2,7 @@
MediaBrowser.Common
- 3.0.510
+ 3.0.511
MediaBrowser.Common
Media Browser Team
ebr,Luke,scottisafool
diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec
index 74126bbbf7..91e30aebef 100644
--- a/Nuget/MediaBrowser.Model.Signed.nuspec
+++ b/Nuget/MediaBrowser.Model.Signed.nuspec
@@ -2,7 +2,7 @@
MediaBrowser.Model.Signed
- 3.0.510
+ 3.0.511
MediaBrowser.Model - Signed Edition
Media Browser Team
ebr,Luke,scottisafool
diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec
index ce0baf19e7..2be5f196bf 100644
--- a/Nuget/MediaBrowser.Server.Core.nuspec
+++ b/Nuget/MediaBrowser.Server.Core.nuspec
@@ -2,7 +2,7 @@
MediaBrowser.Server.Core
- 3.0.510
+ 3.0.511
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
-
+