private XElement CreateItem(ItemBase resource)
        {
            Content content = resource as Content;
            XName   xName   = this.didl + "item";

            object[] xAttribute = new object[] { new XAttribute("restricted", (object)1), new XAttribute("id", (object)resource.ID), new XAttribute("parentID", (object)content.Parent) };
            XElement xElement   = new XElement(xName, xAttribute);

            xElement.Add(this.CreateObjectClass(resource));
            xElement.Add(new XElement(this.dc + "title", resource.Name));
            XName    xName1 = this.dc + "date";
            DateTime date   = content.Date;

            xElement.Add(new XElement(xName1, date.ToString("o")));
            Track track = content as Track;

            if (track != null)
            {
                xElement.Add(new XElement(this.upnp + "genre", track.Genre.Name));
                xElement.Add(new XElement(this.upnp + "artist", track.Artist.Name));
                xElement.Add(new XElement(this.upnp + "album", track.Album.Name));
                if (track.Preview != null && File.Exists(track.Preview.AbsolutePath))
                {
                    XName    xName2   = this.upnp + "albumArtURI";
                    object[] objArray = new object[] { new XAttribute(this.dlna + "profileID", "JPEG_TN"), string.Format("{0}/cover/{1}", this.httpServer.ServerUrl, resource.ID) };
                    xElement.Add(new XElement(xName2, objArray));
                }
            }
            string mimeByFileType = MimeTypeSolver.GetMimeByFileType(Path.GetExtension(content.Path));
            XName  xName3         = this.didl + "res";

            object[] xAttribute1 = new object[] { new XAttribute("size", (object)(new FileInfo(content.Path)).Length), new XAttribute("protocolInfo", string.Format("http-get:*:{1}:{0};DLNA.ORG_OP=01;DLNA.ORG_OP=01;DLNA.ORG_FLAGS={2}", DLNAMaps.GetPNByMime(mimeByFileType), mimeByFileType, DLNAMaps.DefaultStreaming)), string.Format("{0}/file/{1}", this.httpServer.ServerUrl, resource.ID) };
            xElement.Add(new XElement(xName3, xAttribute1));
            return(xElement);
        }
Пример #2
0
        public HttpResponse HandleRequest(HttpRequest request)
        {
            string  str      = request.Path.Substring(this.Prefix.Length - 1);
            Content itemById = this.dataLibrary.GetItemById(new Guid(str), this.dataLibrary.RootFolder) as Content;

            if (itemById == null)
            {
                return(new HttpResponse(request, HttpCode.NotFound, "text/html", ""));
            }
            string       mimeByFileType = MimeTypeSolver.GetMimeByFileType(Path.GetExtension(itemById.Path));
            HttpResponse httpResponse   = new HttpResponse(request, HttpCode.Ok, mimeByFileType, new FileStream(itemById.Path, FileMode.Open, FileAccess.Read));

            httpResponse.Headers["Accept-Ranges"]         = "bytes";
            httpResponse.Headers["transferMode.dlna.org"] = "Streaming";
            if (request.Headers.ContainsKey("getcontentFeatures.dlna.org"))
            {
                if (!mimeByFileType.StartsWith("image"))
                {
                    httpResponse.Headers["contentFeatures.dlna.org"] = string.Format("{0};DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS={1}", DLNAMaps.GetPNByMime(mimeByFileType), DLNAMaps.DefaultStreaming);
                }
                else
                {
                    httpResponse.Headers["contentFeatures.dlna.org"] = string.Format("{0};DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS={1}", DLNAMaps.GetPNByMime(mimeByFileType), DLNAMaps.DefaultInteractive);
                }
            }
            return(httpResponse);
        }