diff --git a/Emby.Dlna/ContentDirectory/ControlHandler.cs b/Emby.Dlna/ContentDirectory/ControlHandler.cs
index dc599b993a..8cb59b0569 100644
--- a/Emby.Dlna/ContentDirectory/ControlHandler.cs
+++ b/Emby.Dlna/ContentDirectory/ControlHandler.cs
@@ -232,10 +232,7 @@ namespace Emby.Dlna.ContentDirectory
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);
- }
+ DidlBuilder.WriteXmlRootAttributes(_profile, writer);
var serverItem = GetItemFromObjectId(id, user);
var item = serverItem.Item;
@@ -282,7 +279,7 @@ namespace Emby.Dlna.ContentDirectory
}
}
}
- writer.WriteEndElement();
+ writer.WriteFullEndElement();
//writer.WriteEndDocument();
}
@@ -345,10 +342,7 @@ namespace Emby.Dlna.ContentDirectory
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);
- }
+ DidlBuilder.WriteXmlRootAttributes(_profile, writer);
var serverItem = GetItemFromObjectId(sparams["ContainerID"], user);
@@ -375,7 +369,7 @@ namespace Emby.Dlna.ContentDirectory
}
}
- writer.WriteEndElement();
+ writer.WriteFullEndElement();
//writer.WriteEndDocument();
}
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)
diff --git a/Emby.Dlna/Service/BaseControlHandler.cs b/Emby.Dlna/Service/BaseControlHandler.cs
index afc66b1d7f..35203edaed 100644
--- a/Emby.Dlna/Service/BaseControlHandler.cs
+++ b/Emby.Dlna/Service/BaseControlHandler.cs
@@ -99,12 +99,12 @@ namespace Emby.Dlna.Service
{
writer.WriteStartElement(i.Key);
writer.WriteString(i.Value);
- writer.WriteEndElement();
+ writer.WriteFullEndElement();
}
- writer.WriteEndElement();
- writer.WriteEndElement();
+ writer.WriteFullEndElement();
+ writer.WriteFullEndElement();
- writer.WriteEndElement();
+ writer.WriteFullEndElement();
writer.WriteEndDocument();
}
diff --git a/Emby.Dlna/Service/ControlErrorHandler.cs b/Emby.Dlna/Service/ControlErrorHandler.cs
index 07b4dad605..a3cd77f0fb 100644
--- a/Emby.Dlna/Service/ControlErrorHandler.cs
+++ b/Emby.Dlna/Service/ControlErrorHandler.cs
@@ -36,12 +36,12 @@ namespace Emby.Dlna.Service
writer.WriteStartElement("detail");
writer.WriteRaw("401Invalid Action");
- writer.WriteEndElement();
+ writer.WriteFullEndElement();
- writer.WriteEndElement();
- writer.WriteEndElement();
+ writer.WriteFullEndElement();
+ writer.WriteFullEndElement();
- writer.WriteEndElement();
+ writer.WriteFullEndElement();
writer.WriteEndDocument();
}
diff --git a/Emby.Server.Implementations/Emby.Server.Implementations.csproj b/Emby.Server.Implementations/Emby.Server.Implementations.csproj
index 33f29d64da..894ba334d9 100644
--- a/Emby.Server.Implementations/Emby.Server.Implementations.csproj
+++ b/Emby.Server.Implementations/Emby.Server.Implementations.csproj
@@ -272,106 +272,114 @@
-
- swagger-ui\fonts\droid-sans-v6-latin-700.svg
- PreserveNewest
-
-
- swagger-ui\fonts\droid-sans-v6-latin-regular.svg
- PreserveNewest
-
-
- swagger-ui\images\explorer_icons.png
- PreserveNewest
-
-
- swagger-ui\images\logo_small.png
- PreserveNewest
-
-
- swagger-ui\images\pet_store_api.png
- PreserveNewest
-
-
- swagger-ui\images\throbber.gif
- PreserveNewest
-
-
- swagger-ui\images\wordnik_api.png
- PreserveNewest
-
-
- swagger-ui\index.html
- PreserveNewest
-
-
+
swagger-ui\lib\backbone-min.js
PreserveNewest
-
+
swagger-ui\lib\handlebars-2.0.0.js
PreserveNewest
-
+
swagger-ui\lib\highlight.7.3.pack.js
PreserveNewest
-
+
swagger-ui\lib\jquery-1.8.0.min.js
PreserveNewest
-
+
swagger-ui\lib\jquery.ba-bbq.min.js
PreserveNewest
-
+
swagger-ui\lib\jquery.slideto.min.js
PreserveNewest
-
+
swagger-ui\lib\jquery.wiggle.min.js
PreserveNewest
-
+
swagger-ui\lib\marked.js
PreserveNewest
-
+
swagger-ui\lib\shred.bundle.js
PreserveNewest
-
- swagger-ui\lib\shred\content.js
- PreserveNewest
-
-
+
swagger-ui\lib\swagger-client.js
PreserveNewest
-
+
swagger-ui\lib\swagger-oauth.js
PreserveNewest
-
+
swagger-ui\lib\underscore-min.js
PreserveNewest
-
+
swagger-ui\o2c.html
PreserveNewest
-
+
swagger-ui\patch.js
PreserveNewest
-
+
swagger-ui\swagger-ui.js
PreserveNewest
-
+
swagger-ui\swagger-ui.min.js
PreserveNewest
+
+ swagger-ui\fonts\droid-sans-v6-latin-700.eot
+ PreserveNewest
+
+
+ swagger-ui\fonts\droid-sans-v6-latin-700.ttf
+ PreserveNewest
+
+
+ swagger-ui\fonts\droid-sans-v6-latin-700.woff
+ PreserveNewest
+
+
+ swagger-ui\fonts\droid-sans-v6-latin-700.woff2
+ PreserveNewest
+
+
+ swagger-ui\fonts\droid-sans-v6-latin-regular.eot
+ PreserveNewest
+
+
+ swagger-ui\fonts\droid-sans-v6-latin-regular.ttf
+ PreserveNewest
+
+
+ swagger-ui\fonts\droid-sans-v6-latin-regular.woff
+ PreserveNewest
+
+
+ swagger-ui\fonts\droid-sans-v6-latin-regular.woff2
+ PreserveNewest
+
+
+ swagger-ui\css\reset.css
+ PreserveNewest
+
+
+ swagger-ui\css\screen.css
+ PreserveNewest
+
+
+ swagger-ui\css\typography.css
+ PreserveNewest
+
@@ -413,38 +421,6 @@
-
- swagger-ui\fonts\droid-sans-v6-latin-700.eot
- PreserveNewest
-
-
- swagger-ui\fonts\droid-sans-v6-latin-700.ttf
- PreserveNewest
-
-
- swagger-ui\fonts\droid-sans-v6-latin-700.woff
- PreserveNewest
-
-
- swagger-ui\fonts\droid-sans-v6-latin-700.woff2
- PreserveNewest
-
-
- swagger-ui\fonts\droid-sans-v6-latin-regular.eot
- PreserveNewest
-
-
- swagger-ui\fonts\droid-sans-v6-latin-regular.ttf
- PreserveNewest
-
-
- swagger-ui\fonts\droid-sans-v6-latin-regular.woff
- PreserveNewest
-
-
- swagger-ui\fonts\droid-sans-v6-latin-regular.woff2
- PreserveNewest
-
@@ -498,20 +474,6 @@
-
-
- swagger-ui\css\reset.css
- PreserveNewest
-
-
- swagger-ui\css\screen.css
- PreserveNewest
-
-
- swagger-ui\css\typography.css
- PreserveNewest
-
-