|
|
|
@ -331,75 +331,72 @@ namespace Emby.Dlna.ContentDirectory
|
|
|
|
|
|
|
|
|
|
int totalCount;
|
|
|
|
|
|
|
|
|
|
var settings = new XmlWriterSettings
|
|
|
|
|
{
|
|
|
|
|
Encoding = Encoding.UTF8,
|
|
|
|
|
CloseOutput = false,
|
|
|
|
|
OmitXmlDeclaration = true,
|
|
|
|
|
ConformanceLevel = ConformanceLevel.Fragment
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
using (StringWriter builder = new StringWriterWithEncoding(Encoding.UTF8))
|
|
|
|
|
using (var writer = XmlWriter.Create(builder, settings))
|
|
|
|
|
{
|
|
|
|
|
var settings = new XmlWriterSettings()
|
|
|
|
|
{
|
|
|
|
|
Encoding = Encoding.UTF8,
|
|
|
|
|
CloseOutput = false,
|
|
|
|
|
OmitXmlDeclaration = true,
|
|
|
|
|
ConformanceLevel = ConformanceLevel.Fragment
|
|
|
|
|
};
|
|
|
|
|
writer.WriteStartElement(string.Empty, "DIDL-Lite", NsDidl);
|
|
|
|
|
|
|
|
|
|
using (var writer = XmlWriter.Create(builder, settings))
|
|
|
|
|
{
|
|
|
|
|
writer.WriteStartElement(string.Empty, "DIDL-Lite", NsDidl);
|
|
|
|
|
writer.WriteAttributeString("xmlns", "dc", null, NsDc);
|
|
|
|
|
writer.WriteAttributeString("xmlns", "dlna", null, NsDlna);
|
|
|
|
|
writer.WriteAttributeString("xmlns", "upnp", null, NsUpnp);
|
|
|
|
|
|
|
|
|
|
writer.WriteAttributeString("xmlns", "dc", null, NsDc);
|
|
|
|
|
writer.WriteAttributeString("xmlns", "dlna", null, NsDlna);
|
|
|
|
|
writer.WriteAttributeString("xmlns", "upnp", null, NsUpnp);
|
|
|
|
|
DidlBuilder.WriteXmlRootAttributes(_profile, writer);
|
|
|
|
|
|
|
|
|
|
DidlBuilder.WriteXmlRootAttributes(_profile, writer);
|
|
|
|
|
var serverItem = GetItemFromObjectId(id);
|
|
|
|
|
var item = serverItem.Item;
|
|
|
|
|
|
|
|
|
|
var serverItem = GetItemFromObjectId(id);
|
|
|
|
|
var item = serverItem.Item;
|
|
|
|
|
if (string.Equals(flag, "BrowseMetadata", StringComparison.Ordinal))
|
|
|
|
|
{
|
|
|
|
|
totalCount = 1;
|
|
|
|
|
|
|
|
|
|
if (string.Equals(flag, "BrowseMetadata", StringComparison.Ordinal))
|
|
|
|
|
if (item.IsDisplayedAsFolder || serverItem.StubType.HasValue)
|
|
|
|
|
{
|
|
|
|
|
totalCount = 1;
|
|
|
|
|
|
|
|
|
|
if (item.IsDisplayedAsFolder || serverItem.StubType.HasValue)
|
|
|
|
|
{
|
|
|
|
|
var childrenResult = GetUserItems(item, serverItem.StubType, _user, sortCriteria, start, requestedCount);
|
|
|
|
|
|
|
|
|
|
_didlBuilder.WriteFolderElement(writer, item, serverItem.StubType, null, childrenResult.TotalRecordCount, filter, id);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
_didlBuilder.WriteItemElement(writer, item, _user, null, null, deviceId, filter);
|
|
|
|
|
}
|
|
|
|
|
var childrenResult = GetUserItems(item, serverItem.StubType, _user, sortCriteria, start, requestedCount);
|
|
|
|
|
|
|
|
|
|
provided++;
|
|
|
|
|
_didlBuilder.WriteFolderElement(writer, item, serverItem.StubType, null, childrenResult.TotalRecordCount, filter, id);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
var childrenResult = GetUserItems(item, serverItem.StubType, _user, sortCriteria, start, requestedCount);
|
|
|
|
|
totalCount = childrenResult.TotalRecordCount;
|
|
|
|
|
_didlBuilder.WriteItemElement(writer, item, _user, null, null, deviceId, filter);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
provided = childrenResult.Items.Count;
|
|
|
|
|
provided++;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
var childrenResult = GetUserItems(item, serverItem.StubType, _user, sortCriteria, start, requestedCount);
|
|
|
|
|
totalCount = childrenResult.TotalRecordCount;
|
|
|
|
|
|
|
|
|
|
foreach (var i in childrenResult.Items)
|
|
|
|
|
provided = childrenResult.Items.Count;
|
|
|
|
|
|
|
|
|
|
foreach (var i in childrenResult.Items)
|
|
|
|
|
{
|
|
|
|
|
var childItem = i.Item;
|
|
|
|
|
var displayStubType = i.StubType;
|
|
|
|
|
|
|
|
|
|
if (childItem.IsDisplayedAsFolder || displayStubType.HasValue)
|
|
|
|
|
{
|
|
|
|
|
var childItem = i.Item;
|
|
|
|
|
var displayStubType = i.StubType;
|
|
|
|
|
|
|
|
|
|
if (childItem.IsDisplayedAsFolder || displayStubType.HasValue)
|
|
|
|
|
{
|
|
|
|
|
var childCount = GetUserItems(childItem, displayStubType, _user, sortCriteria, null, 0)
|
|
|
|
|
.TotalRecordCount;
|
|
|
|
|
|
|
|
|
|
_didlBuilder.WriteFolderElement(writer, childItem, displayStubType, item, childCount, filter);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
_didlBuilder.WriteItemElement(writer, childItem, _user, item, serverItem.StubType, deviceId, filter);
|
|
|
|
|
}
|
|
|
|
|
var childCount = GetUserItems(childItem, displayStubType, _user, sortCriteria, null, 0)
|
|
|
|
|
.TotalRecordCount;
|
|
|
|
|
|
|
|
|
|
_didlBuilder.WriteFolderElement(writer, childItem, displayStubType, item, childCount, filter);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
_didlBuilder.WriteItemElement(writer, childItem, _user, item, serverItem.StubType, deviceId, filter);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
writer.WriteFullEndElement();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
writer.WriteFullEndElement();
|
|
|
|
|
xmlWriter.WriteElementString("Result", builder.ToString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|