diff options
51 files changed, 325 insertions, 256 deletions
diff --git a/Emby.Drawing/Emby.Drawing.csproj b/Emby.Drawing/Emby.Drawing.csproj index b286885a5..8aba4263c 100644 --- a/Emby.Drawing/Emby.Drawing.csproj +++ b/Emby.Drawing/Emby.Drawing.csproj @@ -57,6 +57,7 @@ <Compile Include="GDI\UnplayedCountIndicator.cs" /> <Compile Include="IImageEncoder.cs" /> <Compile Include="Common\ImageHeader.cs" /> + <Compile Include="ImageHelpers.cs" /> <Compile Include="ImageMagick\ImageMagickEncoder.cs" /> <Compile Include="ImageMagick\StripCollageBuilder.cs" /> <Compile Include="ImageProcessor.cs" /> diff --git a/Emby.Drawing/GDI/DynamicImageHelpers.cs b/Emby.Drawing/GDI/DynamicImageHelpers.cs index c49007c5f..b4a63b31e 100644 --- a/Emby.Drawing/GDI/DynamicImageHelpers.cs +++ b/Emby.Drawing/GDI/DynamicImageHelpers.cs @@ -1,11 +1,9 @@ -using Emby.Drawing.ImageMagick; -using MediaBrowser.Common.IO; +using MediaBrowser.Common.IO; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; -using System.Linq; namespace Emby.Drawing.GDI { @@ -18,10 +16,10 @@ namespace Emby.Drawing.GDI int height) { const int numStrips = 4; - files = StripCollageBuilder.ProjectPaths(files, numStrips).ToList(); - + files = ImageHelpers.ProjectPaths(files, numStrips); + const int rows = 1; - int cols = numStrips; + int cols = numStrips; int cellWidth = 2 * (width / 3); int cellHeight = height; @@ -76,8 +74,8 @@ namespace Emby.Drawing.GDI int width, int height) { - files = StripCollageBuilder.ProjectPaths(files, 4).ToList(); - + files = ImageHelpers.ProjectPaths(files, 4); + const int rows = 2; const int cols = 2; diff --git a/Emby.Drawing/GDI/GDIImageEncoder.cs b/Emby.Drawing/GDI/GDIImageEncoder.cs index d968b8b5f..7e3ca530b 100644 --- a/Emby.Drawing/GDI/GDIImageEncoder.cs +++ b/Emby.Drawing/GDI/GDIImageEncoder.cs @@ -21,6 +21,8 @@ namespace Emby.Drawing.GDI { _fileSystem = fileSystem; _logger = logger; + + _logger.Info("GDI image processor initialized"); } public string[] SupportedInputFormats diff --git a/Emby.Drawing/ImageHelpers.cs b/Emby.Drawing/ImageHelpers.cs new file mode 100644 index 000000000..90bde8b3b --- /dev/null +++ b/Emby.Drawing/ImageHelpers.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Emby.Drawing +{ + internal static class ImageHelpers + { + internal static List<string> ProjectPaths(List<string> paths, int count) + { + if (count <= 0) + { + throw new ArgumentOutOfRangeException("count"); + } + if (paths.Count == 0) + { + throw new ArgumentOutOfRangeException("paths"); + } + + var list = new List<string>(); + + AddToList(list, paths, count); + + return list.Take(count).ToList(); + } + + private static void AddToList(List<string> list, List<string> paths, int count) + { + while (list.Count < count) + { + foreach (var path in paths) + { + list.Add(path); + + if (list.Count >= count) + { + return; + } + } + } + } + } +} diff --git a/Emby.Drawing/ImageMagick/ImageMagickEncoder.cs b/Emby.Drawing/ImageMagick/ImageMagickEncoder.cs index 380c56059..ff4a8f55b 100644 --- a/Emby.Drawing/ImageMagick/ImageMagickEncoder.cs +++ b/Emby.Drawing/ImageMagick/ImageMagickEncoder.cs @@ -1,4 +1,5 @@ -using ImageMagickSharp; +using System.Linq; +using ImageMagickSharp; using MediaBrowser.Common.Configuration; using MediaBrowser.Controller.Drawing; using MediaBrowser.Model.Drawing; @@ -195,15 +196,15 @@ namespace Emby.Drawing.ImageMagick if (ratio >= 1.4) { - new StripCollageBuilder(_appPaths).BuildThumbCollage(options.InputPaths, options.OutputPath, options.Width, options.Height, options.Text); + new StripCollageBuilder(_appPaths).BuildThumbCollage(options.InputPaths.ToList(), options.OutputPath, options.Width, options.Height, options.Text); } else if (ratio >= .9) { - new StripCollageBuilder(_appPaths).BuildSquareCollage(options.InputPaths, options.OutputPath, options.Width, options.Height, options.Text); + new StripCollageBuilder(_appPaths).BuildSquareCollage(options.InputPaths.ToList(), options.OutputPath, options.Width, options.Height, options.Text); } else { - new StripCollageBuilder(_appPaths).BuildPosterCollage(options.InputPaths, options.OutputPath, options.Width, options.Height, options.Text); + new StripCollageBuilder(_appPaths).BuildPosterCollage(options.InputPaths.ToList(), options.OutputPath, options.Width, options.Height, options.Text); } } diff --git a/Emby.Drawing/ImageMagick/StripCollageBuilder.cs b/Emby.Drawing/ImageMagick/StripCollageBuilder.cs index 7cdd0077d..a50a75ccd 100644 --- a/Emby.Drawing/ImageMagick/StripCollageBuilder.cs +++ b/Emby.Drawing/ImageMagick/StripCollageBuilder.cs @@ -2,7 +2,6 @@ using MediaBrowser.Common.Configuration; using System; using System.Collections.Generic; -using System.Linq; namespace Emby.Drawing.ImageMagick { @@ -15,7 +14,7 @@ namespace Emby.Drawing.ImageMagick _appPaths = appPaths; } - public void BuildPosterCollage(IEnumerable<string> paths, string outputPath, int width, int height, string text) + public void BuildPosterCollage(List<string> paths, string outputPath, int width, int height, string text) { if (!string.IsNullOrWhiteSpace(text)) { @@ -33,7 +32,7 @@ namespace Emby.Drawing.ImageMagick } } - public void BuildSquareCollage(IEnumerable<string> paths, string outputPath, int width, int height, string text) + public void BuildSquareCollage(List<string> paths, string outputPath, int width, int height, string text) { if (!string.IsNullOrWhiteSpace(text)) { @@ -51,7 +50,7 @@ namespace Emby.Drawing.ImageMagick } } - public void BuildThumbCollage(IEnumerable<string> paths, string outputPath, int width, int height, string text) + public void BuildThumbCollage(List<string> paths, string outputPath, int width, int height, string text) { if (!string.IsNullOrWhiteSpace(text)) { @@ -69,31 +68,10 @@ namespace Emby.Drawing.ImageMagick } } - internal static string[] ProjectPaths(IEnumerable<string> paths, int count) + private MagickWand BuildThumbCollageWandWithText(List<string> paths, string text, int width, int height) { - var clone = paths.ToList(); - var list = new List<string>(); - - while (list.Count < count) - { - foreach (var path in clone) - { - list.Add(path); - - if (list.Count >= count) - { - break; - } - } - } - - return list.Take(count).ToArray(); - } - - private MagickWand BuildThumbCollageWandWithText(IEnumerable<string> paths, string text, int width, int height) - { - var inputPaths = ProjectPaths(paths, 8); - using (var wandImages = new MagickWand(inputPaths)) + var inputPaths = ImageHelpers.ProjectPaths(paths, 8); + using (var wandImages = new MagickWand(inputPaths.ToArray())) { var wand = new MagickWand(width, height); wand.OpenImage("gradient:#111111-#111111"); @@ -165,10 +143,10 @@ namespace Emby.Drawing.ImageMagick } } - private MagickWand BuildPosterCollageWand(IEnumerable<string> paths, int width, int height) + private MagickWand BuildPosterCollageWand(List<string> paths, int width, int height) { - var inputPaths = ProjectPaths(paths, 4); - using (var wandImages = new MagickWand(inputPaths)) + var inputPaths = ImageHelpers.ProjectPaths(paths, 4); + using (var wandImages = new MagickWand(inputPaths.ToArray())) { var wand = new MagickWand(width, height); wand.OpenImage("gradient:#111111-#111111"); @@ -230,10 +208,10 @@ namespace Emby.Drawing.ImageMagick } } - private MagickWand BuildPosterCollageWandWithText(IEnumerable<string> paths, string label, int width, int height) + private MagickWand BuildPosterCollageWandWithText(List<string> paths, string label, int width, int height) { - var inputPaths = ProjectPaths(paths, 4); - using (var wandImages = new MagickWand(inputPaths)) + var inputPaths = ImageHelpers.ProjectPaths(paths, 4); + using (var wandImages = new MagickWand(inputPaths.ToArray())) { var wand = new MagickWand(width, height); wand.OpenImage("gradient:#111111-#111111"); @@ -305,10 +283,10 @@ namespace Emby.Drawing.ImageMagick } } - private MagickWand BuildThumbCollageWand(IEnumerable<string> paths, int width, int height) + private MagickWand BuildThumbCollageWand(List<string> paths, int width, int height) { - var inputPaths = ProjectPaths(paths, 8); - using (var wandImages = new MagickWand(inputPaths)) + var inputPaths = ImageHelpers.ProjectPaths(paths, 8); + using (var wandImages = new MagickWand(inputPaths.ToArray())) { var wand = new MagickWand(width, height); wand.OpenImage("gradient:#111111-#111111"); @@ -370,10 +348,10 @@ namespace Emby.Drawing.ImageMagick } } - private MagickWand BuildSquareCollageWand(IEnumerable<string> paths, int width, int height) + private MagickWand BuildSquareCollageWand(List<string> paths, int width, int height) { - var inputPaths = ProjectPaths(paths, 4); - using (var wandImages = new MagickWand(inputPaths)) + var inputPaths = ImageHelpers.ProjectPaths(paths, 4); + using (var wandImages = new MagickWand(inputPaths.ToArray())) { var wand = new MagickWand(width, height); wand.OpenImage("gradient:#111111-#111111"); @@ -435,10 +413,10 @@ namespace Emby.Drawing.ImageMagick } } - private MagickWand BuildSquareCollageWandWithText(IEnumerable<string> paths, string label, int width, int height) + private MagickWand BuildSquareCollageWandWithText(List<string> paths, string label, int width, int height) { - var inputPaths = ProjectPaths(paths, 4); - using (var wandImages = new MagickWand(inputPaths)) + var inputPaths = ImageHelpers.ProjectPaths(paths, 4); + using (var wandImages = new MagickWand(inputPaths.ToArray())) { var wand = new MagickWand(width, height); wand.OpenImage("gradient:#111111-#111111"); diff --git a/Emby.Drawing/ImageProcessor.cs b/Emby.Drawing/ImageProcessor.cs index 59c2e95c7..2ba4f5aab 100644 --- a/Emby.Drawing/ImageProcessor.cs +++ b/Emby.Drawing/ImageProcessor.cs @@ -764,7 +764,11 @@ namespace Emby.Drawing try { + _logger.Debug("Creating image collage and saving to {0}", options.OutputPath); + _imageEncoder.CreateImageCollage(options); + + _logger.Debug("Completed creation of image collage and saved to {0}", options.OutputPath); } finally { diff --git a/MediaBrowser.Api/ApiEntryPoint.cs b/MediaBrowser.Api/ApiEntryPoint.cs index 55aa778e2..2cd900754 100644 --- a/MediaBrowser.Api/ApiEntryPoint.cs +++ b/MediaBrowser.Api/ApiEntryPoint.cs @@ -346,7 +346,7 @@ namespace MediaBrowser.Api // We can really reduce the timeout for apps that are using the newer api if (!string.IsNullOrWhiteSpace(job.PlaySessionId) && job.Type != TranscodingJobType.Progressive) { - timerDuration = 60000; + timerDuration = 50000; } job.PingTimeout = timerDuration; diff --git a/MediaBrowser.Api/Dlna/DlnaServerService.cs b/MediaBrowser.Api/Dlna/DlnaServerService.cs index 29b7bf682..bdf7d6b07 100644 --- a/MediaBrowser.Api/Dlna/DlnaServerService.cs +++ b/MediaBrowser.Api/Dlna/DlnaServerService.cs @@ -108,6 +108,9 @@ namespace MediaBrowser.Api.Dlna private readonly IConnectionManager _connectionManager; private readonly IMediaReceiverRegistrar _mediaReceiverRegistrar; + // TODO: Add utf-8 + private const string XMLContentType = "text/xml"; + public DlnaServerService(IDlnaManager dlnaManager, IContentDirectory contentDirectory, IConnectionManager connectionManager, IMediaReceiverRegistrar mediaReceiverRegistrar) { _dlnaManager = dlnaManager; @@ -122,49 +125,49 @@ namespace MediaBrowser.Api.Dlna var serverAddress = url.Substring(0, url.IndexOf("/dlna/", StringComparison.OrdinalIgnoreCase)); var xml = _dlnaManager.GetServerDescriptionXml(GetRequestHeaders(), request.UuId, serverAddress); - return ResultFactory.GetResult(xml, "text/xml"); + return ResultFactory.GetResult(xml, XMLContentType); } public object Get(GetContentDirectory request) { var xml = _contentDirectory.GetServiceXml(GetRequestHeaders()); - return ResultFactory.GetResult(xml, "text/xml"); + return ResultFactory.GetResult(xml, XMLContentType); } public object Get(GetMediaReceiverRegistrar request) { var xml = _mediaReceiverRegistrar.GetServiceXml(GetRequestHeaders()); - return ResultFactory.GetResult(xml, "text/xml"); + return ResultFactory.GetResult(xml, XMLContentType); } public object Get(GetConnnectionManager request) { var xml = _connectionManager.GetServiceXml(GetRequestHeaders()); - return ResultFactory.GetResult(xml, "text/xml"); + return ResultFactory.GetResult(xml, XMLContentType); } public async Task<object> Post(ProcessMediaReceiverRegistrarControlRequest request) { var response = await PostAsync(request.RequestStream, _mediaReceiverRegistrar).ConfigureAwait(false); - return ResultFactory.GetResult(response.Xml, "text/xml"); + return ResultFactory.GetResult(response.Xml, XMLContentType); } public async Task<object> Post(ProcessContentDirectoryControlRequest request) { var response = await PostAsync(request.RequestStream, _contentDirectory).ConfigureAwait(false); - return ResultFactory.GetResult(response.Xml, "text/xml"); + return ResultFactory.GetResult(response.Xml, XMLContentType); } public async Task<object> Post(ProcessConnectionManagerControlRequest request) { var response = await PostAsync(request.RequestStream, _connectionManager).ConfigureAwait(false); - return ResultFactory.GetResult(response.Xml, "text/xml"); + return ResultFactory.GetResult(response.Xml, XMLContentType); } private async Task<ControlResponse> PostAsync(Stream requestStream, IUpnpService service) diff --git a/MediaBrowser.Controller/Dlna/SsdpMessageEventArgs.cs b/MediaBrowser.Controller/Dlna/SsdpMessageEventArgs.cs index 63f3a67aa..804f34311 100644 --- a/MediaBrowser.Controller/Dlna/SsdpMessageEventArgs.cs +++ b/MediaBrowser.Controller/Dlna/SsdpMessageEventArgs.cs @@ -12,7 +12,7 @@ namespace MediaBrowser.Controller.Dlna public Dictionary<string, string> Headers { get; set; } - public IPAddress LocalIp { get; set; } + public IPEndPoint LocalEndPoint { get; set; } public byte[] Message { get; set; } public SsdpMessageEventArgs() diff --git a/MediaBrowser.Dlna/PlayTo/PlayToManager.cs b/MediaBrowser.Dlna/PlayTo/PlayToManager.cs index 3c68af550..5d37767a2 100644 --- a/MediaBrowser.Dlna/PlayTo/PlayToManager.cs +++ b/MediaBrowser.Dlna/PlayTo/PlayToManager.cs @@ -72,8 +72,6 @@ namespace MediaBrowser.Dlna.PlayTo async void _deviceDiscovery_DeviceDiscovered(object sender, SsdpMessageEventArgs e) { - var localIp = e.LocalIp; - string usn; if (!e.Headers.TryGetValue("USN", out usn)) usn = string.Empty; @@ -125,7 +123,7 @@ namespace MediaBrowser.Dlna.PlayTo if (controller == null) { - var serverAddress = GetServerAddress(localIp); + var serverAddress = GetServerAddress(e.LocalEndPoint.Address); string accessToken = null; sessionInfo.SessionController = controller = new PlayToController(sessionInfo, diff --git a/MediaBrowser.Dlna/Profiles/DefaultProfile.cs b/MediaBrowser.Dlna/Profiles/DefaultProfile.cs index 59e1dc540..819de59fc 100644 --- a/MediaBrowser.Dlna/Profiles/DefaultProfile.cs +++ b/MediaBrowser.Dlna/Profiles/DefaultProfile.cs @@ -37,6 +37,7 @@ namespace MediaBrowser.Dlna.Profiles MusicSyncBitrate = 128000; EnableAlbumArtInDidl = false; + EnableDlnaProtocol = true; TranscodingProfiles = new[] { @@ -76,9 +77,6 @@ namespace MediaBrowser.Dlna.Profiles Type = DlnaProfileType.Video } }; - - AddXmlRootAttribute("xmlns", "urn:schemas-upnp-org:device-1-0"); - AddXmlRootAttribute("xmlns:dlna", "urn:schemas-dlna-org:device-1-0"); } public void AddXmlRootAttribute(string name, string value) diff --git a/MediaBrowser.Dlna/Profiles/Xbox360Profile.cs b/MediaBrowser.Dlna/Profiles/Xbox360Profile.cs index f230b38ae..431807aed 100644 --- a/MediaBrowser.Dlna/Profiles/Xbox360Profile.cs +++ b/MediaBrowser.Dlna/Profiles/Xbox360Profile.cs @@ -14,22 +14,24 @@ namespace MediaBrowser.Dlna.Profiles Name = "Xbox 360"; // Required according to above - ModelName = "Windows Media Player Sharing"; + ModelName = "Windows Media Connect"; ModelNumber = "12.0"; - FriendlyName = "${HostName}: Emby:"; + FriendlyName = "${HostName}: 1"; ModelUrl = "http://go.microsoft.com/fwlink/?LinkId=105926"; Manufacturer = "Microsoft Corporation"; ManufacturerUrl = "http://www.microsoft.com"; XDlnaDoc = "DMS-1.50"; - ModelDescription = null; + ModelDescription = "Emby : UPnP Media Server"; + ModelNumber = "001"; TimelineOffsetSeconds = 40; RequiresPlainFolders = true; RequiresPlainVideoItems = true; EnableMSMediaReceiverRegistrar = true; + EnableDlnaProtocol = false; Identification = new DeviceIdentification { @@ -312,9 +314,6 @@ namespace MediaBrowser.Dlna.Profiles } } }; - - XmlRootAttributes = new XmlAttribute[] { }; - AddXmlRootAttribute("xmlns", "urn:schemas-upnp-org:device-1-0"); } } } diff --git a/MediaBrowser.Dlna/Profiles/Xml/BubbleUPnp.xml b/MediaBrowser.Dlna/Profiles/Xml/BubbleUPnp.xml index 4aacc8a48..644e1d7ef 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/BubbleUPnp.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/BubbleUPnp.xml @@ -32,10 +32,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> - <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> - </XmlRootAttributes> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> + <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="avi,mpeg,mkv,ts,mp4,mov,m4v,asf,webm,ogg,ogv,iso" type="Video" /> <DirectPlayProfile container="mp3,flac,asf,off,oga,aac" type="Audio" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Default.xml b/MediaBrowser.Dlna/Profiles/Xml/Default.xml index 4755d60bd..1ec01a8a6 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Default.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Default.xml @@ -26,10 +26,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> - <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> - </XmlRootAttributes> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> + <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="mp3,wma" type="Audio" /> <DirectPlayProfile container="avi,mp4" type="Video" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml b/MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml index 6bf90c8ff..75250b053 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml @@ -31,10 +31,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> - <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> - </XmlRootAttributes> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> + <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="mp3,flac,m4a,wma" type="Audio" /> </DirectPlayProfiles> diff --git a/MediaBrowser.Dlna/Profiles/Xml/DirecTV HD-DVR.xml b/MediaBrowser.Dlna/Profiles/Xml/DirecTV HD-DVR.xml index cecdfdbe4..7e61e9174 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/DirecTV HD-DVR.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/DirecTV HD-DVR.xml @@ -32,10 +32,10 @@ <RequiresPlainVideoItems>true</RequiresPlainVideoItems> <RequiresPlainFolders>true</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> - <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> - </XmlRootAttributes> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> + <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="mpeg" audioCodec="mp2" videoCodec="mpeg2video" type="Video" /> <DirectPlayProfile container="jpeg,jpg" type="Photo" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Dish Hopper-Joey.xml b/MediaBrowser.Dlna/Profiles/Xml/Dish Hopper-Joey.xml index 59f374b2e..8e8f41a8d 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Dish Hopper-Joey.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Dish Hopper-Joey.xml @@ -33,10 +33,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> - <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> - </XmlRootAttributes> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> + <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="mp4,mkv,mpeg,ts" audioCodec="mp3,ac3,aac,he-aac,pcm" videoCodec="h264,mpeg2video" type="Video" /> <DirectPlayProfile container="mp3" audioCodec="mp3" type="Audio" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml b/MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml index 340a295e7..58f9dbcd1 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml @@ -32,10 +32,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> - <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> - </XmlRootAttributes> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> + <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="ts" audioCodec="aac,ac3,mp3" videoCodec="h264" type="Video" /> <DirectPlayProfile container="mkv" audioCodec="aac,ac3,mp3" videoCodec="h264" type="Video" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml b/MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml index 057a052e1..8fa282a36 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml @@ -30,10 +30,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> - <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> - </XmlRootAttributes> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> + <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="mp3,flac,m4a,wma" type="Audio" /> <DirectPlayProfile container="avi,mp4,mkv,ts" type="Video" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/MediaMonkey.xml b/MediaBrowser.Dlna/Profiles/Xml/MediaMonkey.xml index 8054f3b61..876ce93b5 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/MediaMonkey.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/MediaMonkey.xml @@ -32,10 +32,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> - <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> - </XmlRootAttributes> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> + <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="mp3" audioCodec="mp2,mp3" type="Audio" /> <DirectPlayProfile container="mp4" audioCodec="mp4" type="Audio" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml b/MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml index e0517aa8a..ed2321771 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml @@ -33,9 +33,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> <XmlAttribute name="xmlns:pv" value="http://www.pv.com/pvns/" /> </XmlRootAttributes> <DirectPlayProfiles> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Popcorn Hour.xml b/MediaBrowser.Dlna/Profiles/Xml/Popcorn Hour.xml index d2f03333a..ebcfd2a22 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Popcorn Hour.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Popcorn Hour.xml @@ -26,10 +26,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> - <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> - </XmlRootAttributes> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> + <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="mp4,mov" audioCodec="aac" videoCodec="h264,mpeg4" type="Video" /> <DirectPlayProfile container="ts" audioCodec="aac,ac3,eac3,mp3,mp2,pcm" videoCodec="h264" type="Video" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Samsung Smart TV.xml b/MediaBrowser.Dlna/Profiles/Xml/Samsung Smart TV.xml index 70f3b0f8d..b77197659 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Samsung Smart TV.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Samsung Smart TV.xml @@ -32,9 +32,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> <XmlAttribute name="xmlns:sec" value="http://www.sec.co.kr/" /> </XmlRootAttributes> <DirectPlayProfiles> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player 2013.xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player 2013.xml index b8a75ec94..32b482fa2 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player 2013.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player 2013.xml @@ -32,9 +32,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> <XmlAttribute name="xmlns:av" value="urn:schemas-sony-com:av" /> </XmlRootAttributes> <DirectPlayProfiles> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player.xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player.xml index cf80c0192..038936e8b 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player.xml @@ -34,9 +34,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> <XmlAttribute name="xmlns:av" value="urn:schemas-sony-com:av" /> </XmlRootAttributes> <DirectPlayProfiles> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2010).xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2010).xml index eabdb303f..4ef4ecb53 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2010).xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2010).xml @@ -34,9 +34,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> <XmlAttribute name="xmlns:av" value="urn:schemas-sony-com:av" /> </XmlRootAttributes> <DirectPlayProfiles> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2011).xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2011).xml index e6669f8e8..3df34da65 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2011).xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2011).xml @@ -34,9 +34,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> <XmlAttribute name="xmlns:av" value="urn:schemas-sony-com:av" /> </XmlRootAttributes> <DirectPlayProfiles> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2012).xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2012).xml index 7aa877cd4..073708cd5 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2012).xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2012).xml @@ -34,9 +34,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> <XmlAttribute name="xmlns:av" value="urn:schemas-sony-com:av" /> </XmlRootAttributes> <DirectPlayProfiles> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2013).xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2013).xml index 7611f26b0..531564937 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2013).xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2013).xml @@ -34,9 +34,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> <XmlAttribute name="xmlns:av" value="urn:schemas-sony-com:av" /> </XmlRootAttributes> <DirectPlayProfiles> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml b/MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml index 89e282cd0..e92f7eed7 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml @@ -34,10 +34,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> - <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> - </XmlRootAttributes> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> + <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="avi" audioCodec="mp2,mp3" videoCodec="mpeg4" type="Video" /> <DirectPlayProfile container="ts" audioCodec="ac3,mp2,mp3,aac" videoCodec="mpeg1video,mpeg2video,h264" type="Video" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Vlc.xml b/MediaBrowser.Dlna/Profiles/Xml/Vlc.xml index bc24f268c..3ebfdaa72 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Vlc.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Vlc.xml @@ -32,10 +32,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> - <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> - </XmlRootAttributes> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> + <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="avi,mpeg,mkv,ts,mp4,mov,m4v,asf,webm,ogg,ogv,iso" type="Video" /> <DirectPlayProfile container="mp3,flac,asf,off,oga,aac" type="Audio" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml b/MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml index 6cb933151..accaa33a4 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml @@ -33,10 +33,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> - <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> - </XmlRootAttributes> + <IgnoreTranscodeByteRangeRequests>true</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> + <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="avi" audioCodec="ac3,dca,mp2,mp3,pcm" videoCodec="mpeg1video,mpeg2video,mpeg4,h264,vc1" type="Video" /> <DirectPlayProfile container="mpeg" audioCodec="ac3,dca,mp2,mp3,pcm" videoCodec="mpeg1video,mpeg2video" type="Video" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml b/MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml index 4ada24512..ab6f816a7 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml @@ -8,11 +8,12 @@ <HttpHeaderInfo name="User-Agent" value="Xenon" match="Substring" /> </Headers> </Identification> - <FriendlyName>${HostName}: Emby:</FriendlyName> + <FriendlyName>${HostName}: 1</FriendlyName> <Manufacturer>Microsoft Corporation</Manufacturer> <ManufacturerUrl>http://www.microsoft.com</ManufacturerUrl> - <ModelName>Windows Media Player Sharing</ModelName> - <ModelNumber>12.0</ModelNumber> + <ModelName>Windows Media Connect</ModelName> + <ModelDescription>Emby : UPnP Media Server</ModelDescription> + <ModelNumber>001</ModelNumber> <ModelUrl>http://go.microsoft.com/fwlink/?LinkId=105926</ModelUrl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit> @@ -32,9 +33,10 @@ <RequiresPlainVideoItems>true</RequiresPlainVideoItems> <RequiresPlainFolders>true</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>true</EnableMSMediaReceiverRegistrar> - <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - </XmlRootAttributes> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>false</EnableDlnaProtocol> + <EnableUrlBase>true</EnableUrlBase> + <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="avi" audioCodec="ac3,mp3" videoCodec="mpeg4" type="Video" /> <DirectPlayProfile container="avi" audioCodec="aac" videoCodec="h264" type="Video" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml b/MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml index 073292363..43301458a 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml @@ -33,10 +33,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> - <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> - </XmlRootAttributes> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> + <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="ts" audioCodec="ac3" videoCodec="h264" type="Video" /> <DirectPlayProfile container="avi" audioCodec="ac3,mp3" videoCodec="mpeg4" type="Video" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml b/MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml index f98945360..d085db407 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml @@ -32,10 +32,10 @@ <RequiresPlainVideoItems>false</RequiresPlainVideoItems> <RequiresPlainFolders>false</RequiresPlainFolders> <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> - <XmlRootAttributes> - <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" /> - <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" /> - </XmlRootAttributes> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <EnableDlnaProtocol>true</EnableDlnaProtocol> + <EnableUrlBase>false</EnableUrlBase> + <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="mp3" audioCodec="mp2,mp3" type="Audio" /> <DirectPlayProfile container="mp4" audioCodec="mp4" type="Audio" /> diff --git a/MediaBrowser.Dlna/Server/DescriptionXmlBuilder.cs b/MediaBrowser.Dlna/Server/DescriptionXmlBuilder.cs index 5780aa10b..649612e1e 100644 --- a/MediaBrowser.Dlna/Server/DescriptionXmlBuilder.cs +++ b/MediaBrowser.Dlna/Server/DescriptionXmlBuilder.cs @@ -51,10 +51,28 @@ namespace MediaBrowser.Dlna.Server builder.Append("<?xml version=\"1.0\"?>"); builder.Append("<root"); - foreach (var att in _profile.XmlRootAttributes) + + var attributes = _profile.XmlRootAttributes.ToList(); + + if (_profile.EnableDlnaProtocol) + { + attributes.Insert(0, new XmlAttribute + { + Name = "xmlns:dlna", + Value = "urn:schemas-dlna-org:device-1-0" + }); + } + attributes.Insert(0, new XmlAttribute + { + Name = "xmlns", + Value = "urn:schemas-upnp-org:device-1-0" + }); + + foreach (var att in attributes) { builder.AppendFormat(" {0}=\"{1}\"", att.Name, att.Value); } + builder.Append(">"); builder.Append("<specVersion>"); @@ -74,34 +92,33 @@ namespace MediaBrowser.Dlna.Server builder.Append("<device>"); AppendDeviceProperties(builder); - //AppendIconList(builder); + if (_profile.EnableDlnaProtocol) + { + AppendIconList(builder); + } AppendServiceList(builder); builder.Append("</device>"); } private void AppendDeviceProperties(StringBuilder builder) { - builder.Append("<UDN>uuid:" + SecurityElement.Escape(_serverUdn) + "</UDN>"); + builder.Append("<deviceType>urn:schemas-upnp-org:device:MediaServer:1</deviceType>"); - if (!string.IsNullOrWhiteSpace(_profile.XDlnaCap)) + if (_profile.EnableDlnaProtocol) { builder.Append("<dlna:X_DLNACAP>" + SecurityElement.Escape(_profile.XDlnaCap ?? string.Empty) + "</dlna:X_DLNACAP>"); + + builder.Append("<dlna:X_DLNADOC xmlns:dlna=\"urn:schemas-dlna-org:device-1-0\">M-DMS-1.50</dlna:X_DLNADOC>"); + builder.Append("<dlna:X_DLNADOC xmlns:dlna=\"urn:schemas-dlna-org:device-1-0\">" + SecurityElement.Escape(_profile.XDlnaDoc ?? string.Empty) + "</dlna:X_DLNADOC>"); } - builder.Append("<dlna:X_DLNADOC xmlns:dlna=\"urn:schemas-dlna-org:device-1-0\">M-DMS-1.50</dlna:X_DLNADOC>"); - builder.Append("<dlna:X_DLNADOC xmlns:dlna=\"urn:schemas-dlna-org:device-1-0\">" + SecurityElement.Escape(_profile.XDlnaDoc ?? string.Empty) + "</dlna:X_DLNADOC>"); - builder.Append("<friendlyName>" + SecurityElement.Escape(GetFriendlyName()) + "</friendlyName>"); - builder.Append("<deviceType>urn:schemas-upnp-org:device:MediaServer:1</deviceType>"); builder.Append("<manufacturer>" + SecurityElement.Escape(_profile.Manufacturer ?? string.Empty) + "</manufacturer>"); builder.Append("<manufacturerURL>" + SecurityElement.Escape(_profile.ManufacturerUrl ?? string.Empty) + "</manufacturerURL>"); + + builder.Append("<modelDescription>" + SecurityElement.Escape(_profile.ModelDescription ?? string.Empty) + "</modelDescription>"); builder.Append("<modelName>" + SecurityElement.Escape(_profile.ModelName ?? string.Empty) + "</modelName>"); - if (!string.IsNullOrWhiteSpace(_profile.ModelDescription)) - { - builder.Append("<modelDescription>" + SecurityElement.Escape(_profile.ModelDescription ?? string.Empty) + "</modelDescription>"); - } - builder.Append("<modelNumber>" + SecurityElement.Escape(_profile.ModelNumber ?? string.Empty) + "</modelNumber>"); builder.Append("<modelURL>" + SecurityElement.Escape(_profile.ModelUrl ?? string.Empty) + "</modelURL>"); @@ -114,6 +131,7 @@ namespace MediaBrowser.Dlna.Server builder.Append("<serialNumber>" + SecurityElement.Escape(_profile.SerialNumber) + "</serialNumber>"); } + builder.Append("<UDN>uuid:" + SecurityElement.Escape(_serverUdn) + "</UDN>"); builder.Append("<presentationURL>" + SecurityElement.Escape(_serverAddress) + "</presentationURL>"); if (!EnableAbsoluteUrls) diff --git a/MediaBrowser.Dlna/Ssdp/Datagram.cs b/MediaBrowser.Dlna/Ssdp/Datagram.cs index cca59720f..0a6d27303 100644 --- a/MediaBrowser.Dlna/Ssdp/Datagram.cs +++ b/MediaBrowser.Dlna/Ssdp/Datagram.cs @@ -30,7 +30,7 @@ namespace MediaBrowser.Dlna.Ssdp { var msg = Encoding.ASCII.GetBytes(Message); - var socket = CreateSocket(); + var socket = CreateSocket(!IgnoreBindFailure); if (socket == null) { @@ -102,13 +102,20 @@ namespace MediaBrowser.Dlna.Ssdp } } - private Socket CreateSocket() + private Socket CreateSocket(bool isBroadcast) { try { var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); + + if (isBroadcast) + { + socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true); + socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 4); + } + return socket; } catch (Exception ex) diff --git a/MediaBrowser.Dlna/Ssdp/DeviceDiscovery.cs b/MediaBrowser.Dlna/Ssdp/DeviceDiscovery.cs index 94342bf31..3befa221b 100644 --- a/MediaBrowser.Dlna/Ssdp/DeviceDiscovery.cs +++ b/MediaBrowser.Dlna/Ssdp/DeviceDiscovery.cs @@ -87,11 +87,14 @@ namespace MediaBrowser.Dlna.Ssdp try { - var ip = _appHost.LocalIpAddress; + if (e.LocalEndPoint == null) + { + var ip = _appHost.LocalIpAddress; + e.LocalEndPoint = new IPEndPoint(IPAddress.Parse(ip), 0); + } - if (!string.IsNullOrWhiteSpace(ip)) + if (e.LocalEndPoint != null) { - e.LocalIp = IPAddress.Parse(ip); TryCreateDevice(e); } } @@ -140,7 +143,7 @@ namespace MediaBrowser.Dlna.Ssdp { var args = SsdpHelper.ParseSsdpResponse(receiveBuffer); args.EndPoint = endPoint; - args.LocalIp = localIp; + args.LocalEndPoint = new IPEndPoint(localIp, 0); if (!_ssdpHandler.IsSelfNotification(args)) { diff --git a/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs b/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs index 19c567a33..e6e9624d5 100644 --- a/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs +++ b/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs @@ -139,15 +139,7 @@ namespace MediaBrowser.Dlna.Ssdp values["MX"] = "3"; // UDP is unreliable, so send 3 requests at a time (per Upnp spec, sec 1.1.2) - SendDatagram("M-SEARCH * HTTP/1.1", values, localIp, 2); - } - - public void SendDatagram(string header, - Dictionary<string, string> values, - EndPoint localAddress, - int sendCount) - { - SendDatagram(header, values, _ssdpEndp, localAddress, false, sendCount); + SendDatagram("M-SEARCH * HTTP/1.1", values, _ssdpEndp, localIp, false, 2); } public void SendDatagram(string header, @@ -433,27 +425,9 @@ namespace MediaBrowser.Dlna.Ssdp if (string.Equals(server, _serverSignature, StringComparison.OrdinalIgnoreCase)) { - return true; + //return true; } return false; - //string usn; - //args.Headers.TryGetValue("USN", out usn); - - //if (string.IsNullOrWhiteSpace(usn)) - //{ - // return false; - //} - - //_logger.Debug("IsSelfNotification test: " + usn); - - //return RegisteredDevices.Any(i => - //{ - // var isSameDevice = string.Equals(usn, i.USN, StringComparison.OrdinalIgnoreCase) || - // i.USN.IndexOf(usn, StringComparison.OrdinalIgnoreCase) != 1 || - // usn.IndexOf(i.USN, StringComparison.OrdinalIgnoreCase) != 1; - - // return isSameDevice; - //}); } public void Dispose() @@ -542,7 +516,7 @@ namespace MediaBrowser.Dlna.Ssdp _logger.Debug("{0} said {1}", dev.USN, type); } - SendDatagram(header, values, new IPEndPoint(dev.Address, 0), sendCount); + SendDatagram(header, values, _ssdpEndp, new IPEndPoint(dev.Address, 0), false, sendCount); } public void RegisterNotification(Guid uuid, Uri descriptionUri, IPAddress address, IEnumerable<string> services) diff --git a/MediaBrowser.Model/Configuration/EncodingOptions.cs b/MediaBrowser.Model/Configuration/EncodingOptions.cs index afd67eb15..7f1607217 100644 --- a/MediaBrowser.Model/Configuration/EncodingOptions.cs +++ b/MediaBrowser.Model/Configuration/EncodingOptions.cs @@ -17,7 +17,7 @@ namespace MediaBrowser.Model.Configuration DownMixAudioBoost = 2; EncodingQuality = EncodingQuality.Auto; EnableThrottling = true; - ThrottleThresholdSeconds = 120; + ThrottleThresholdSeconds = 110; } } } diff --git a/MediaBrowser.Model/Dlna/DeviceProfile.cs b/MediaBrowser.Model/Dlna/DeviceProfile.cs index 2b0df9778..fc508991e 100644 --- a/MediaBrowser.Model/Dlna/DeviceProfile.cs +++ b/MediaBrowser.Model/Dlna/DeviceProfile.cs @@ -77,6 +77,7 @@ namespace MediaBrowser.Model.Dlna public bool EnableMSMediaReceiverRegistrar { get; set; } public bool IgnoreTranscodeByteRangeRequests { get; set; } + public bool EnableDlnaProtocol { get; set; } public XmlAttribute[] XmlRootAttributes { get; set; } diff --git a/MediaBrowser.Providers/TV/SeriesMetadataService.cs b/MediaBrowser.Providers/TV/SeriesMetadataService.cs index b0cd7382a..eeff03703 100644 --- a/MediaBrowser.Providers/TV/SeriesMetadataService.cs +++ b/MediaBrowser.Providers/TV/SeriesMetadataService.cs @@ -52,7 +52,7 @@ namespace MediaBrowser.Providers.TV target.Status = source.Status; } - if (replaceData || target.AirDays.Count == 0) + if (replaceData || target.AirDays == null || target.AirDays.Count == 0) { target.AirDays = source.AirDays; } diff --git a/MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs b/MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs index b5b63181a..fa5841bb8 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs +++ b/MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs @@ -108,9 +108,9 @@ namespace MediaBrowser.Server.Implementations.EntryPoints { var endpoint = e.EndPoint as IPEndPoint; - if (endpoint != null && e.LocalIp != null) + if (endpoint != null && e.LocalEndPoint != null) { - NatUtility.Handle(e.LocalIp, e.Message, endpoint, NatProtocol.Upnp); + NatUtility.Handle(e.LocalEndPoint.Address, e.Message, endpoint, NatProtocol.Upnp); } } diff --git a/MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs b/MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs index 542d67721..e1dd5c618 100644 --- a/MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs +++ b/MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs @@ -252,6 +252,9 @@ namespace MediaBrowser.Server.Implementations.Localization throw new ArgumentNullException("rating"); } + // Fairly common for some users to have "Rated R" in their rating field + rating = rating.Replace("Rated ", string.Empty, StringComparison.OrdinalIgnoreCase); + var ratingsDictionary = GetParentalRatingsDictionary(); ParentalRating value; diff --git a/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs b/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs index bd22a8a70..79ebc67d9 100644 --- a/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs +++ b/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs @@ -103,7 +103,7 @@ namespace MediaBrowser.Server.Implementations.Photos return parts.GetMD5().ToString("N"); } - protected Task CreateThumbCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath, bool drawText) + protected Task<bool> CreateThumbCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath, bool drawText) { return CreateCollage(primaryItem, items, outputPath, 960, 540, drawText, primaryItem.Name); } @@ -115,22 +115,22 @@ namespace MediaBrowser.Server.Implementations.Photos .Where(i => !string.IsNullOrWhiteSpace(i)); } - protected Task CreatePosterCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath) + protected Task<bool> CreatePosterCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath) { return CreateCollage(primaryItem, items, outputPath, 600, 900, true, primaryItem.Name); } - protected Task CreateSquareCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath, bool drawText) + protected Task<bool> CreateSquareCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath, bool drawText) { return CreateCollage(primaryItem, items, outputPath, 800, 800, drawText, primaryItem.Name); } - protected Task CreateThumbCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath, int width, int height, bool drawText, string text) + protected Task<bool> CreateThumbCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath, int width, int height, bool drawText, string text) { return CreateCollage(primaryItem, items, outputPath, width, height, drawText, text); } - private Task CreateCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath, int width, int height, bool drawText, string text) + private Task<bool> CreateCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath, int width, int height, bool drawText, string text) { Directory.CreateDirectory(Path.GetDirectoryName(outputPath)); @@ -143,7 +143,13 @@ namespace MediaBrowser.Server.Implementations.Photos InputPaths = GetStripCollageImagePaths(primaryItem, items).ToArray() }; - return ImageProcessor.CreateImageCollage(options); + if (options.InputPaths.Length == 0) + { + return Task.FromResult(false); + } + + ImageProcessor.CreateImageCollage(options); + return Task.FromResult(true); } public string Name @@ -166,26 +172,23 @@ namespace MediaBrowser.Server.Implementations.Photos if (imageType == ImageType.Thumb) { - await CreateThumbCollage(item, itemsWithImages, outputPath, drawText).ConfigureAwait(false); - return true; + return await CreateThumbCollage(item, itemsWithImages, outputPath, drawText).ConfigureAwait(false); } if (imageType == ImageType.Primary) { if (item is UserView) { - await CreateSquareCollage(item, itemsWithImages, outputPath, drawText).ConfigureAwait(false); + return await CreateSquareCollage(item, itemsWithImages, outputPath, drawText).ConfigureAwait(false); } else if (item is PhotoAlbum || item is Playlist) { - await CreateSquareCollage(item, itemsWithImages, outputPath, drawText).ConfigureAwait(false); + return await CreateSquareCollage(item, itemsWithImages, outputPath, drawText).ConfigureAwait(false); } else { - await CreatePosterCollage(item, itemsWithImages, outputPath).ConfigureAwait(false); + return await CreatePosterCollage(item, itemsWithImages, outputPath).ConfigureAwait(false); } - - return true; } throw new ArgumentException("Unexpected image type"); diff --git a/MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs b/MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs index b5ecc94a2..9d2eb297f 100644 --- a/MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs +++ b/MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs @@ -8,37 +8,37 @@ using System.Threading.Tasks; namespace MediaBrowser.Server.Implementations.Photos { - //public class PhotoAlbumImageProvider : IDynamicImageProvider - //{ - // public IEnumerable<ImageType> GetSupportedImages(IHasImages item) - // { - // return new List<ImageType> { ImageType.Primary }; - // } + public class PhotoAlbumImageProvider : IDynamicImageProvider + { + public IEnumerable<ImageType> GetSupportedImages(IHasImages item) + { + return new List<ImageType> { ImageType.Primary }; + } - // public Task<DynamicImageResponse> GetImage(IHasImages item, ImageType type, CancellationToken cancellationToken) - // { - // var album = (PhotoAlbum)item; + public Task<DynamicImageResponse> GetImage(IHasImages item, ImageType type, CancellationToken cancellationToken) + { + var album = (PhotoAlbum)item; - // var image = album.Children - // .OfType<Photo>() - // .Select(i => i.GetImagePath(type)) - // .FirstOrDefault(i => !string.IsNullOrEmpty(i)); + var image = album.Children + .OfType<Photo>() + .Select(i => i.GetImagePath(type)) + .FirstOrDefault(i => !string.IsNullOrEmpty(i)); - // return Task.FromResult(new DynamicImageResponse - // { - // Path = image, - // HasImage = !string.IsNullOrEmpty(image) - // }); - // } + return Task.FromResult(new DynamicImageResponse + { + Path = image, + HasImage = !string.IsNullOrEmpty(image) + }); + } - // public string Name - // { - // get { return "Image Extractor"; } - // } + public string Name + { + get { return "Image Extractor"; } + } - // public bool Supports(IHasImages item) - // { - // return item is PhotoAlbum; - // } - //} + public bool Supports(IHasImages item) + { + return item is PhotoAlbum; + } + } } diff --git a/MediaBrowser.Server.Implementations/UserViews/DynamicImageProvider.cs b/MediaBrowser.Server.Implementations/UserViews/DynamicImageProvider.cs index 930762696..b07caa1bd 100644 --- a/MediaBrowser.Server.Implementations/UserViews/DynamicImageProvider.cs +++ b/MediaBrowser.Server.Implementations/UserViews/DynamicImageProvider.cs @@ -224,8 +224,7 @@ namespace MediaBrowser.Server.Implementations.UserViews return false; } - await CreateThumbCollage(item, itemsWithImages, outputPath, 960, 540, false, item.Name).ConfigureAwait(false); - return true; + return await CreateThumbCollage(item, itemsWithImages, outputPath, 960, 540, false, item.Name).ConfigureAwait(false); } return await base.CreateImage(item, itemsWithImages, outputPath, imageType, imageIndex).ConfigureAwait(false); diff --git a/MediaBrowser.WebDashboard/Api/PackageCreator.cs b/MediaBrowser.WebDashboard/Api/PackageCreator.cs index 5c6228193..34a7f0eac 100644 --- a/MediaBrowser.WebDashboard/Api/PackageCreator.cs +++ b/MediaBrowser.WebDashboard/Api/PackageCreator.cs @@ -9,6 +9,7 @@ using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; +using WebMarkupMin.Core; using WebMarkupMin.Core.Minifiers; using WebMarkupMin.Core.Settings; @@ -32,9 +33,9 @@ namespace MediaBrowser.WebDashboard.Api } public async Task<Stream> GetResource(string path, - string mode, + string mode, string localizationCulture, - string appVersion, + string appVersion, bool enableMinification) { var isHtml = IsHtml(path); @@ -58,7 +59,7 @@ namespace MediaBrowser.WebDashboard.Api { // Don't apply any caching for html pages // jQuery ajax doesn't seem to handle if-modified-since correctly - if (isHtml) + if (isHtml && path.IndexOf("cordovaindex.html", StringComparison.OrdinalIgnoreCase) == -1) { resourceStream = await ModifyHtml(resourceStream, mode, localizationCulture, enableMinification).ConfigureAwait(false); } @@ -137,7 +138,12 @@ namespace MediaBrowser.WebDashboard.Api { try { - var minifier = new HtmlMinifier(new HtmlMinificationSettings()); + var minifier = new HtmlMinifier(new HtmlMinificationSettings + { + AttributeQuotesRemovalMode = HtmlAttributeQuotesRemovalMode.KeepQuotes, + RemoveOptionalEndTags = false, + RemoveTagsWithoutContent = false + }); var result = minifier.Minify(html, false); if (result.Errors.Count > 0) @@ -313,7 +319,7 @@ namespace MediaBrowser.WebDashboard.Api if (string.Equals(mode, "cordova", StringComparison.OrdinalIgnoreCase)) { - apiClientFiles.Add("thirdparty/apiclient/cordova/serverdiscovery.js"); + apiClientFiles.Add("thirdparty/cordova/serverdiscovery.js"); } else { @@ -321,6 +327,11 @@ namespace MediaBrowser.WebDashboard.Api } apiClientFiles.Add("thirdparty/apiclient/connectionmanager.js"); + if (string.Equals(mode, "cordova", StringComparison.OrdinalIgnoreCase)) + { + apiClientFiles.Add("thirdparty/cordova/remotecontrols.js"); + } + foreach (var file in apiClientFiles) { using (var fs = _fileSystem.GetFileStream(GetDashboardResourcePath(file), FileMode.Open, FileAccess.Read, FileShare.ReadWrite, true)) diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index ce2e2d422..8ead5ef77 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -213,7 +213,13 @@ <Content Include="dashboard-ui\thirdparty\apiclient\connectservice.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
- <Content Include="dashboard-ui\thirdparty\apiclient\cordova\serverdiscovery.js">
+ <Content Include="dashboard-ui\cordovaindex.html">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
+ <Content Include="dashboard-ui\thirdparty\cordova\remotecontrols.js">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
+ <Content Include="dashboard-ui\thirdparty\cordova\serverdiscovery.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="dashboard-ui\thirdparty\apiclient\deferred.js">
@@ -1665,6 +1671,9 @@ <Content Include="dashboard-ui\thirdparty\jstree3.0.8\themes\default\throbber.gif">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
+ <Content Include="dashboard-ui\thirdparty\masonry.pkgd.min.js">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
<Content Include="dashboard-ui\thirdparty\require.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
@@ -2288,6 +2297,9 @@ <None Include="dashboard-ui\css\fonts\RobotoThin.woff">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
+ <None Include="dashboard-ui\thirdparty\fontawesome\css\font-awesome.css.map">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </None>
<None Include="dashboard-ui\thirdparty\fontawesome\fonts\fontawesome-webfont.eot">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
@@ -2297,6 +2309,9 @@ <None Include="dashboard-ui\thirdparty\fontawesome\fonts\fontawesome-webfont.woff">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
+ <None Include="dashboard-ui\thirdparty\fontawesome\fonts\fontawesome-webfont.woff2">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </None>
<None Include="dashboard-ui\thirdparty\fontawesome\fonts\FontAwesome.otf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
diff --git a/SharedVersion.cs b/SharedVersion.cs index e4ebaa224..64d43a05e 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.0.*")] -[assembly: AssemblyVersion("3.0.5607.1")] +[assembly: AssemblyVersion("3.0.5607.2")] |
