diff options
Diffstat (limited to 'Emby.Dlna/Didl/DidlBuilder.cs')
| -rw-r--r-- | Emby.Dlna/Didl/DidlBuilder.cs | 55 |
1 files changed, 34 insertions, 21 deletions
diff --git a/Emby.Dlna/Didl/DidlBuilder.cs b/Emby.Dlna/Didl/DidlBuilder.cs index ee5c8fecd4..3ad33f0fec 100644 --- a/Emby.Dlna/Didl/DidlBuilder.cs +++ b/Emby.Dlna/Didl/DidlBuilder.cs @@ -84,28 +84,39 @@ namespace Emby.Dlna.Didl writer.WriteAttributeString("xmlns", "upnp", null, NS_UPNP); //didl.SetAttribute("xmlns:sec", NS_SEC); - foreach (var att in _profile.XmlRootAttributes) - { - writer.WriteAttributeString(att.Name, att.Value); - } + WriteXmlRootAttributes(_profile, writer); WriteItemElement(options, writer, item, context, null, deviceId, filter, streamInfo); - writer.WriteEndElement(); + writer.WriteFullEndElement(); //writer.WriteEndDocument(); } return builder.ToString(); } + public static void WriteXmlRootAttributes(DeviceProfile profile, XmlWriter writer) + { + foreach (var att in profile.XmlRootAttributes) + { + var parts = att.Name.Split(new[] { ':' }, StringSplitOptions.RemoveEmptyEntries); + if (parts.Length == 2) + { + writer.WriteAttributeString(parts[0], parts[1], null, att.Value); + } + else + { + writer.WriteAttributeString(att.Name, att.Value); + } + } + } + public void WriteItemElement(DlnaOptions options, XmlWriter writer, BaseItem item, BaseItem context, StubType? contextStubType, string deviceId, Filter filter, StreamInfo streamInfo = null) { var clientId = GetClientId(item, null); writer.WriteStartElement(string.Empty, "item", NS_DIDL); - AddGeneralProperties(item, null, context, writer, filter); - writer.WriteAttributeString("restricted", "1"); writer.WriteAttributeString("id", clientId); @@ -122,6 +133,8 @@ namespace Emby.Dlna.Didl } } + AddGeneralProperties(item, null, context, writer, filter); + //AddBookmarkInfo(item, user, element); // refID? @@ -142,7 +155,7 @@ namespace Emby.Dlna.Didl } AddCover(item, context, null, writer); - writer.WriteEndElement(); + writer.WriteFullEndElement(); } private ILogger GetStreamBuilderLogger(DlnaOptions options) @@ -236,7 +249,7 @@ namespace Emby.Dlna.Didl writer.WriteAttributeString("sec", "type", null, info.Format.ToLower()); writer.WriteString(info.Url); - writer.WriteEndElement(); + writer.WriteFullEndElement(); } else if (string.Equals(subtitleMode, "smi", StringComparison.OrdinalIgnoreCase)) { @@ -245,7 +258,7 @@ namespace Emby.Dlna.Didl writer.WriteAttributeString("protocolInfo", "http-get:*:smi/caption:*"); writer.WriteString(info.Url); - writer.WriteEndElement(); + writer.WriteFullEndElement(); } else { @@ -254,7 +267,7 @@ namespace Emby.Dlna.Didl writer.WriteAttributeString("protocolInfo", protocolInfo); writer.WriteString(info.Url); - writer.WriteEndElement(); + writer.WriteFullEndElement(); } return true; @@ -349,7 +362,7 @@ namespace Emby.Dlna.Didl writer.WriteString(url); - writer.WriteEndElement(); + writer.WriteFullEndElement(); } private string GetDisplayName(BaseItem item, StubType? itemStubType, BaseItem context) @@ -479,7 +492,7 @@ namespace Emby.Dlna.Didl writer.WriteString(url); - writer.WriteEndElement(); + writer.WriteFullEndElement(); } public static bool IsIdRoot(string id) @@ -501,8 +514,6 @@ namespace Emby.Dlna.Didl { writer.WriteStartElement(string.Empty, "container", NS_DIDL); - AddGeneralProperties(folder, stubType, context, writer, filter); - writer.WriteAttributeString("restricted", "0"); writer.WriteAttributeString("searchable", "1"); writer.WriteAttributeString("childCount", childCount.ToString(_usCulture)); @@ -536,9 +547,11 @@ namespace Emby.Dlna.Didl } } + AddGeneralProperties(folder, stubType, context, writer, filter); + AddCover(folder, context, stubType, writer); - writer.WriteEndElement(); + writer.WriteFullEndElement(); } //private void AddBookmarkInfo(BaseItem item, User user, XmlElement element) @@ -698,7 +711,7 @@ namespace Emby.Dlna.Didl writer.WriteString("object.item"); } - writer.WriteEndElement(); + writer.WriteFullEndElement(); } private void AddPeople(BaseItem item, XmlWriter writer) @@ -811,7 +824,7 @@ namespace Emby.Dlna.Didl writer.WriteString(name); - writer.WriteEndElement(); + writer.WriteFullEndElement(); } catch (XmlException) { @@ -897,7 +910,7 @@ namespace Emby.Dlna.Didl writer.WriteStartElement("upnp", "albumArtURI", NS_UPNP); writer.WriteAttributeString("dlna", "profileID", NS_DLNA, _profile.AlbumArtPn); writer.WriteString(albumartUrlInfo.Url); - writer.WriteEndElement(); + writer.WriteFullEndElement(); // TOOD: Remove these default values var iconUrlInfo = GetImageUrl(imageInfo, _profile.MaxIconWidth ?? 48, _profile.MaxIconHeight ?? 48, playbackPercentage, unplayedCount, "jpg"); @@ -932,7 +945,7 @@ namespace Emby.Dlna.Didl writer.WriteStartElement("upnp", "albumArtURI", NS_UPNP); writer.WriteAttributeString("dlna", "profileID", NS_DLNA, _profile.AlbumArtPn); writer.WriteString(_serverAddress + "/Dlna/icons/people480.jpg"); - writer.WriteEndElement(); + writer.WriteFullEndElement(); writer.WriteElementString("upnp", "icon", NS_UPNP, _serverAddress + "/Dlna/icons/people48.jpg"); } @@ -976,7 +989,7 @@ namespace Emby.Dlna.Didl writer.WriteString(albumartUrlInfo.Url); - writer.WriteEndElement(); + writer.WriteFullEndElement(); } private ImageDownloadInfo GetImageInfo(BaseItem item) |
