aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Dlna/Server/ControlHandler.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Dlna/Server/ControlHandler.cs')
-rw-r--r--MediaBrowser.Dlna/Server/ControlHandler.cs86
1 files changed, 64 insertions, 22 deletions
diff --git a/MediaBrowser.Dlna/Server/ControlHandler.cs b/MediaBrowser.Dlna/Server/ControlHandler.cs
index b7670f1d9..f97fdc88e 100644
--- a/MediaBrowser.Dlna/Server/ControlHandler.cs
+++ b/MediaBrowser.Dlna/Server/ControlHandler.cs
@@ -9,6 +9,7 @@ using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Dlna;
+using MediaBrowser.Model.Drawing;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Querying;
@@ -265,7 +266,7 @@ namespace MediaBrowser.Dlna.Server
var children = GetChildrenSorted(folder, user, sortCriteria).ToList();
var totalCount = children.Count;
-
+
if (string.Equals(flag, "BrowseMetadata"))
{
Browse_AddFolder(result, folder, children.Count, filter);
@@ -818,14 +819,14 @@ namespace MediaBrowser.Dlna.Server
}
}
- if (item.Genres.Count > 0)
+ foreach (var genre in item.Genres)
{
- AddValue(element, "upnp", "genre", item.Genres[0], NS_UPNP);
+ AddValue(element, "upnp", "genre", genre, NS_UPNP);
}
- if (item.Studios.Count > 0)
+ foreach (var studio in item.Studios)
{
- AddValue(element, "upnp", "publisher", item.Studios[0], NS_UPNP);
+ AddValue(element, "upnp", "publisher", studio, NS_UPNP);
}
if (filter.Contains("dc:title"))
@@ -871,9 +872,9 @@ namespace MediaBrowser.Dlna.Server
if (audio != null)
{
- if (audio.Artists.Count > 0)
+ foreach (var artist in audio.Artists)
{
- AddValue(element, "upnp", "artist", audio.Artists[0], NS_UPNP);
+ AddValue(element, "upnp", "artist", artist, NS_UPNP);
}
if (!string.IsNullOrEmpty(audio.Album))
@@ -930,20 +931,21 @@ namespace MediaBrowser.Dlna.Server
var result = element.OwnerDocument;
- var curl = GetImageUrl(imageInfo);
+ var albumartUrlInfo = GetImageUrl(imageInfo, _profile.MaxAlbumArtWidth, _profile.MaxAlbumArtHeight);
var icon = result.CreateElement("upnp", "albumArtURI", NS_UPNP);
var profile = result.CreateAttribute("dlna", "profileID", NS_DLNA);
- profile.InnerText = "JPEG_TN";
+ profile.InnerText = _profile.AlbumArtPn;
icon.SetAttributeNode(profile);
- icon.InnerText = curl;
+ icon.InnerText = albumartUrlInfo.Url;
element.AppendChild(icon);
+ var iconUrlInfo = GetImageUrl(imageInfo, _profile.MaxIconWidth, _profile.MaxIconHeight);
icon = result.CreateElement("upnp", "icon", NS_UPNP);
profile = result.CreateAttribute("dlna", "profileID", NS_DLNA);
- profile.InnerText = "JPEG_TN";
+ profile.InnerText = _profile.AlbumArtPn;
icon.SetAttributeNode(profile);
- icon.InnerText = curl;
+ icon.InnerText = iconUrlInfo.Url;
element.AppendChild(icon);
if (!_profile.EnableAlbumArtInDidl)
@@ -952,10 +954,11 @@ namespace MediaBrowser.Dlna.Server
}
var res = result.CreateElement(string.Empty, "res", NS_DIDL);
- res.InnerText = curl;
- int? width = imageInfo.Width;
- int? height = imageInfo.Height;
+ res.InnerText = albumartUrlInfo.Url;
+
+ var width = albumartUrlInfo.Width;
+ var height = albumartUrlInfo.Height;
var mediaProfile = new MediaFormatProfileResolver().ResolveImageFormat("jpg", width, height);
@@ -968,11 +971,6 @@ namespace MediaBrowser.Dlna.Server
{
res.SetAttribute("resolution", string.Format("{0}x{1}", width.Value, height.Value));
}
- else
- {
- // TODO: Devices need to see something here?
- res.SetAttribute("resolution", "200x200");
- }
element.AppendChild(res);
}
@@ -1052,13 +1050,57 @@ namespace MediaBrowser.Dlna.Server
internal int? Height;
}
- private string GetImageUrl(ImageDownloadInfo info)
+ class ImageUrlInfo
+ {
+ internal string Url;
+
+ internal int? Width;
+ internal int? Height;
+ }
+
+ private ImageUrlInfo GetImageUrl(ImageDownloadInfo info, int? maxWidth, int? maxHeight)
{
- return string.Format("{0}/Items/{1}/Images/{2}?tag={3}&format=jpg",
+ var url = string.Format("{0}/Items/{1}/Images/{2}?tag={3}&format=jpg",
_serverAddress,
info.ItemId,
info.Type,
info.ImageTag);
+
+ if (maxWidth.HasValue)
+ {
+ url += "&maxWidth=" + maxWidth.Value.ToString(_usCulture);
+ }
+
+ if (maxHeight.HasValue)
+ {
+ url += "&maxHeight=" + maxHeight.Value.ToString(_usCulture);
+ }
+
+ var width = info.Width;
+ var height = info.Height;
+
+ if (width.HasValue && height.HasValue)
+ {
+ if (maxWidth.HasValue || maxHeight.HasValue)
+ {
+ var newSize = DrawingUtils.Resize(new ImageSize
+ {
+ Height = height.Value,
+ Width = width.Value
+
+ }, maxWidth: maxWidth, maxHeight: maxHeight);
+
+ width = Convert.ToInt32(newSize.Width);
+ height = Convert.ToInt32(newSize.Height);
+ }
+ }
+
+ return new ImageUrlInfo
+ {
+ Url = url,
+ Width = width,
+ Height = height
+ };
}
}
}