private string ConvertLocalFileToHTTPResource(IMediaResource resource)
        {
            if (resource.ContentUri.StartsWith(MediaResource.AUTOMAPFILE))
            {
                // Map File
                string tempName = resource.ContentUri.Substring(MediaResource.AUTOMAPFILE.Length);
                string fileName = tempName.GetHashCode().ToString() + "/" + tempName.Substring(tempName.LastIndexOf("\\") + 1);

                if (resource.Owner != null)
                {
                    fileName = tempName.GetHashCode().ToString() + "/" + resource.Owner.Creator + "  -  " + resource.Owner.Title + tempName.Substring(tempName.LastIndexOf("."));
                    //					fileName = tempName.GetHashCode().ToString() + "/" + tempName.Substring(tempName.LastIndexOf("."));
                }
                FileInfoTable[tempName.GetHashCode().ToString()] = tempName;
                CheckMiniWebServer();

                string path = "http://" + _AVR.device.InterfaceToHost.ToString() + ":" + MWS.LocalIPEndPoint.Port.ToString() + "/" + fileName;
                return(HTTPMessage.EscapeString(path));
            }
            else
            {
                // Don't Map File
                return(resource.ContentUri);
            }
        }
Ejemplo n.º 2
0
        private static XmlElement CreateObjectClass(XmlDocument result,
                                                    IMediaResource resource)
        {
            var objectClass = result.CreateElement("upnp", "class", NS_UPNP);

            switch (resource.MediaType)
            {
            case DlnaMediaTypes.Video:
                objectClass.InnerText = "object.item.videoItem.movie";
                break;

            case DlnaMediaTypes.Image:
                objectClass.InnerText = "object.item.imageItem.photo";
                break;

            case DlnaMediaTypes.Audio:
                objectClass.InnerText = "object.item.audioItem.musicTrack";
                break;

            default:
                throw new NotSupportedException();
            }

            return(objectClass);
        }
Ejemplo n.º 3
0
        private void AddSubtitle(IRequest request, IMediaResource resource,
                                 XmlElement item)
        {
            var result = item.OwnerDocument;
            var video  = resource as IMediaVideoResource;

            if (video == null)
            {
                return;
            }
            try
            {
                if (video.Subtitle.HasSubtitle)
                {
                    var subtitle = result.CreateElement(string.Empty, "res", NS_DIDL);
                    subtitle.InnerText = String.Format(
                        "http://{0}:{1}{2}subtitle/{3}/st.srt",
                        request.LocalEndPoint.Address,
                        request.LocalEndPoint.Port,
                        prefix,
                        resource.Id
                        );
                    subtitle.SetAttribute("protocolInfo", "http-get:*:text/srt:*");
                    item.AppendChild(subtitle);
                }
            }
            catch (Exception)
            {
                return;
            }
        }
        /// <summary>
        /// The ability to modify objects directly to a container/item is not available
        /// for a public programmer. Each CpMediaItem object is responsible
        /// for maintaining its own state.
        /// </summary>
        /// <param name="addThis">the CpMediaResource object with a corresponding resource advertised by the MediaServer</param>
        /// <exception cref="InvalidCastException">
        /// Thrown when attempting to add a non-CpMediaResource object to this container.
        /// </exception>
        public override void AddResource(IMediaResource addThis)
        {
            this.CheckRuntimeBindings(new StackTrace());
            CpMediaResource res = (CpMediaResource)addThis;

            base.AddResource(addThis);
        }
Ejemplo n.º 5
0
        private static void AddVideoProperties(IRequest request, IMediaResource resource, XmlNode item)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            var mvi = resource as IMetaVideoItem;

            if (mvi == null)
            {
                return;
            }
            try
            {
                var ownerDocument = item.OwnerDocument;
                var actors        = mvi.MetaActors;
                if (actors != null && ownerDocument != null)
                {
                    foreach (var actor in actors)
                    {
                        var e = ownerDocument.CreateElement("upnp", "actor", NS_UPNP);
                        e.InnerText = actor;
                        item.AppendChild(e);
                    }
                }
            }
            catch (Exception)
            {
                // ignored
            }
        }
Ejemplo n.º 6
0
        public ItemResponse(IRequest request, IMediaResource aItem, string transferMode = "Streaming")
        {
            item    = aItem;
            headers = new ResponseHeaders(noCache: !(item is IMediaCoverResource));
            var meta = item as IMetaInfo;

            if (meta != null)
            {
                headers.Add("Content-Length", meta.InfoSize.ToString());
                headers.Add("Last-Modified", meta.InfoDate.ToString("R"));
            }
            headers.Add("Accept-Ranges", "bytes");
            headers.Add("Content-Type", DlnaMaps.Mime[item.Type]);
            if (request.Headers.ContainsKey("getcontentFeatures.dlna.org"))
            {
                if (item.MediaType == DlnaMediaTypes.Image)
                {
                    headers.Add("contentFeatures.dlna.org", String.Format("{0};DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS={1}", item.PN, DlnaMaps.DefaultInteractive));
                }
                else
                {
                    headers.Add("contentFeatures.dlna.org", String.Format("{0};DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS={1}", item.PN, DlnaMaps.DefaultStreaming));
                }
            }
            Headers.Add("transferMode.dlna.org", transferMode);

            Debug(headers);
        }
Ejemplo n.º 7
0
 internal bool Allowed(IMediaResource item)
 {
     lock (ids)
     {
         return(ids.Allowed(item));
     }
 }
Ejemplo n.º 8
0
 public override bool Allowed(IMediaResource res)
 {
     var i = res as IMetaResolution;
       if (i?.MetaWidth == null || !i.MetaHeight.HasValue) {
     return false;
       }
       var w = i.MetaWidth.Value;
       var h = i.MetaHeight.Value;
       if (min.HasValue && Math.Min(w, h) < min.Value) {
     return false;
       }
       if (max.HasValue && Math.Max(w, h) > max.Value) {
     return false;
       }
       if (minWidth.HasValue && w < minWidth.Value) {
     return false;
       }
       if (maxWidth.HasValue && w > maxWidth.Value) {
     return false;
       }
       if (minHeight.HasValue && h < minHeight.Value) {
     return false;
       }
       if (maxHeight.HasValue && h > maxHeight.Value) {
     return false;
       }
       return true;
 }
        /// <summary>
        /// Checks that the resource is a <see cref="IDvResource"/> object.
        /// Calls base class and notifies owner of change.
        /// </summary>
        /// <param name="newResource"></param>
        /// <exception cref="InvalidCastException">
        /// Thrown if newResource is not a IDvResource.
        /// </exception>
        public override void AddResource(IMediaResource newResource)
        {
            IDvResource res = (IDvResource)newResource;

            base.AddResource(res);
            this.NotifyRootOfChange();
        }
        public void CreateConnection(IMediaItem[] items, object Tag)
        {
            ArrayList RList = new ArrayList();

            foreach (IMediaItem item in items)
            {
                IMediaResource res = GetBestMatch(item.MergedResources);
                if (res != null)
                {
                    RList.Add(res);
                }
//				foreach(IMediaResource resource in item.MergedResources)
//				{
//					if(this.SupportsProtocolInfo(resource.ProtocolInfo))
//					{
//						// Use this resource
//						RList.Add(resource);
//						break;
//					}
//				}
            }

            if (RList.Count == 0)
            {
                OnCreateConnectionFailedEvent.Fire(this, CreateFailedReason.UNSUPPORTED_MEDIA_ITEM, Tag);
                return;
            }
            CreateConnection((IMediaResource[])RList.ToArray(typeof(IMediaResource)), Tag);
        }
Ejemplo n.º 11
0
        public ItemResponse(string prefix, IRequest request, IMediaResource item,
                            string transferMode = "Streaming")
        {
            this.item = item;
            headers   = new ResponseHeaders(!(item is IMediaCoverResource));
            var meta = item as IMetaInfo;

            if (meta != null)
            {
                headers.Add("Content-Length", meta.InfoSize.ToString());
                headers.Add("Last-Modified", meta.InfoDate.ToString("R"));
            }

            headers.Add("Accept-Ranges", "bytes");
            headers.Add("Content-Type", DlnaMaps.Mime[item.Type]);
            if (request.Headers.ContainsKey("getcontentFeatures.dlna.org"))
            {
                try
                {
                    headers.Add(
                        "contentFeatures.dlna.org",
                        item.MediaType == DlnaMediaTypes.Image
              ? $"DLNA.ORG_PN={item.PN};DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS={DlnaMaps.DefaultInteractive}"
              : $"DLNA.ORG_PN={item.PN};DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS={DlnaMaps.DefaultStreaming}"
                        );
                }
                catch (NotSupportedException)
                {
                }
            }
Ejemplo n.º 12
0
        private void AddCover(IRequest request, IMediaResource resource,
                              XmlElement item)
        {
            var result = item.OwnerDocument;
            var cover  = resource as IMediaCover;

            if (cover == null)
            {
                return;
            }
            try {
                var c    = cover.Cover;
                var curl = String.Format(
                    "http://{0}:{1}{2}cover/{3}/i.jpg",
                    request.LocalEndPoint.Address,
                    request.LocalEndPoint.Port,
                    prefix,
                    resource.Id
                    );
                var icon    = result.CreateElement("upnp", "albumArtURI", NS_UPNP);
                var profile = result.CreateAttribute("dlna", "profileID", NS_DLNA);
                profile.InnerText = "JPEG_TN";
                icon.SetAttributeNode(profile);
                icon.InnerText = curl;
                item.AppendChild(icon);
                icon              = result.CreateElement("upnp", "icon", NS_UPNP);
                profile           = result.CreateAttribute("dlna", "profileID", NS_DLNA);
                profile.InnerText = "JPEG_TN";
                icon.SetAttributeNode(profile);
                icon.InnerText = curl;
                item.AppendChild(icon);

                var res = result.CreateElement(string.Empty, "res", NS_DIDL);
                res.InnerText = curl;

                res.SetAttribute("protocolInfo", string.Format(
                                     "http-get:*:{1}:DLNA.ORG_PN={0};DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS={2}",
                                     c.PN, DlnaMaps.Mime[c.Type], DlnaMaps.DefaultStreaming
                                     ));
                var width  = c.MetaWidth;
                var height = c.MetaHeight;
                if (width.HasValue && height.HasValue)
                {
                    res.SetAttribute("resolution", string.Format("{0}x{1}", width.Value, height.Value));
                }
                else
                {
                    res.SetAttribute("resolution", "200x200");
                }
                res.SetAttribute("protocolInfo", string.Format(
                                     "http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_TN;DLNA.ORG_OP=01;DLNA.ORG_CI=1;DLNA.ORG_FLAGS={0}",
                                     DlnaMaps.DefaultInteractive
                                     ));
                item.AppendChild(res);
            }
            catch (Exception) {
                return;
            }
        }
Ejemplo n.º 13
0
 protected override bool DoFilter(IMediaResource res)
 {
   var i = res as IMetaInfo;
   if (i == null) {
     return false;
   }
   return i.InfoDate != null && i.InfoDate >= minDate;
 }
 /// <summary>
 /// internal constructor - public programmers should not instantiate
 /// their own transfer objects.
 /// </summary>
 /// <param name="transferID">
 /// The ID provided by the server.
 /// </param>
 /// <param name="isImport"></param>
 /// <param name="res"></param>
 /// <param name="uri"></param>
 /// <param name="server"></param>
 internal ResourceTransfer(System.UInt32 transferID, bool isImport, IMediaResource res, System.Uri uri, CpMediaServer server)
 {
     this.m_TransferID = transferID;
     this.m_IsImport   = isImport;
     this.m_Resource   = res;
     this.m_Uri        = uri;
     this.mwr_Server   = new WeakReference(server);
 }
Ejemplo n.º 15
0
 public override bool Allowed(IMediaResource res)
 {
     var i = res as IMetaInfo;
       if (i == null) {
     return false;
       }
       return i.InfoDate >= minDate;
 }
Ejemplo n.º 16
0
 public override bool Allowed(IMediaResource res)
 {
     var i = res as IMetaInfo;
       if (i == null) {
     return false;
       }
       return i.InfoSize.HasValue && i.InfoSize.Value >= minSize;
 }
Ejemplo n.º 17
0
 public ProfileImageController(IUsersResource usersResource, IMediaResource mediaResource,
     IErrorSignaler errorSignaler, IConfigurationHelper configurationHelper)
 {
     _usersResource = usersResource;
     _mediaResource = mediaResource;
     _errorSignaler = errorSignaler;
     _configurationHelper = configurationHelper;
 }
        /// <summary>
        /// Checks that the resource is a <see cref="IDvResource"/> object.
        /// Calls base class and notifies owner of change.
        /// </summary>
        /// <param name="newResource"></param>
        /// <exception cref="InvalidCastException">
        /// Thrown if newResource is not a IDvResource.
        /// </exception>
        public override void AddResource(IMediaResource newResource)
        {
            // cast and throw exception if needed
            IDvResource res = (IDvResource)newResource;

            base.AddResource(res);
            this.NotifyRootOfChange();
        }
Ejemplo n.º 19
0
 protected override bool DoFilter(IMediaResource res)
 {
     var i = res as IMetaInfo;
       if (i == null) {
     return false;
       }
       return i.InfoSize.HasValue && i.InfoSize.Value >= minSize;
 }
Ejemplo n.º 20
0
 private static string GetTitle(IMediaResource res)
 {
     var pre = res.ToComparableTitle();
       if (string.IsNullOrEmpty(pre)) {
     return "Unnamed";
       }
       return pre;
 }
Ejemplo n.º 21
0
        private void Browse_AddItem(IRequest request, XmlDocument result,
                                    IMediaResource resource)
        {
            var props = resource.Properties;

            var item = result.CreateElement(string.Empty, "item", NS_DIDL);

            item.SetAttribute("restricted", "1");
            item.SetAttribute("id", resource.Id);
            item.SetAttribute("parentID", Identifiers.GeneralRoot);

            item.AppendChild(CreateObjectClass(result, resource));

            AddBookmarkInfo(resource, item);

            AddGeneralProperties(props, item);

            AddVideoProperties(request, resource, item);

            var title = result.CreateElement("dc", "title", NS_DC);

            title.InnerText = resource.Title;
            item.AppendChild(title);

            var res = result.CreateElement(string.Empty, "res", NS_DIDL);

            res.InnerText = String.Format(
                "http://{0}:{1}{2}file/{3}/res",
                request.LocalEndPoint.Address,
                request.LocalEndPoint.Port,
                prefix,
                resource.Id
                );

            var prop = string.Empty;

            if (props.TryGetValue("SizeRaw", out prop))
            {
                res.SetAttribute("size", prop);
            }
            if (props.TryGetValue("Resolution", out prop))
            {
                res.SetAttribute("resolution", prop);
            }
            if (props.TryGetValue("Duration", out prop))
            {
                res.SetAttribute("duration", prop);
            }

            res.SetAttribute("protocolInfo", String.Format(
                                 "http-get:*:{1}:DLNA.ORG_PN={0};DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS={2}",
                                 resource.PN, DlnaMaps.Mime[resource.Type], DlnaMaps.DefaultStreaming
                                 ));
            item.AppendChild(res);

            AddCover(request, resource, item);
            result.DocumentElement.AppendChild(item);
        }
Ejemplo n.º 22
0
        public ItemResponse(string prefix, IRequest request, IMediaResource item,
                            string transferMode = "Streaming")
        {
            this.item = item;
            headers   = new ResponseHeaders(!(item is IMediaCoverResource));
            var meta = item as IMetaInfo;

            if (meta != null)
            {
                headers.Add("Content-Length", meta.InfoSize.ToString());
                headers.Add("Last-Modified", meta.InfoDate.ToString("R"));
            }
            headers.Add("Accept-Ranges", "bytes");
            headers.Add("Content-Type", DlnaMaps.Mime[item.Type]);
            if (request.Headers.ContainsKey("getcontentFeatures.dlna.org"))
            {
                try
                {
                    headers.Add(
                        "contentFeatures.dlna.org",
                        item.MediaType == DlnaMediaTypes.Image
                        ? $"DLNA.ORG_PN={item.PN};DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS={DlnaMaps.DefaultInteractive}"
                        : $"DLNA.ORG_PN={item.PN};DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS={DlnaMaps.DefaultStreaming}"
                        );
                }
                catch (NotSupportedException)
                {
                }
                catch (NotImplementedException)
                {
                }
            }
            if (request.Headers.ContainsKey("getCaptionInfo.sec"))
            {
                var mvi = item as IMetaVideoItem;
                if (mvi != null && mvi.Subtitle.HasSubtitle)
                {
                    var surl =
                        $"http://{request.LocalEndPoint.Address}:{request.LocalEndPoint.Port}{prefix}subtitle/{item.Id}/st.srt";
                    DebugFormat("Sending subtitles {0}", surl);
                    headers.Add("CaptionInfo.sec", surl);
                }
            }
            if (request.Headers.ContainsKey("getMediaInfo.sec"))
            {
                var md = item as IMetaDuration;
                if (md?.MetaDuration != null)
                {
                    headers.Add(
                        "MediaInfo.sec",
                        $"SEC_Duration={md.MetaDuration.Value.TotalMilliseconds};"
                        );
                }
            }
            headers.Add("transferMode.dlna.org", transferMode);

            Debug(headers);
        }
        /// <summary>
        /// Removes a resource from the media item.
        /// </summary>
        /// <param name="removeThis"></param>
        public override void RemoveResource(IMediaResource removeThis)
        {
            // ArrayList.Remove does not return a boolean to indicate
            // that the resource was remove - so just assume that
            // something was removed.

            base.RemoveResource(removeThis);
            this.NotifyRootOfChange();
        }
Ejemplo n.º 24
0
        private static void AddVideoProperties(IRequest request,
                                               IMediaResource resource,
                                               XmlNode item)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            var mvi = resource as IMetaVideoItem;

            if (mvi == null)
            {
                return;
            }
            try
            {
                var ownerDocument = item.OwnerDocument;
                var actors        = mvi.MetaActors;
                if (actors != null && ownerDocument != null)
                {
                    foreach (var actor in actors)
                    {
                        var e = ownerDocument.CreateElement("upnp", "actor", NS_UPNP);
                        e.InnerText = actor;
                        item.AppendChild(e);
                    }
                }
            }
            catch (Exception)
            {
                // ignored
            }
#if ANNOUNCE_SUBTITLE_IN_SOAP
            // This is a kind of costly operation, as getting subtitles in general
            // for the first time is costly. Most Samsung TVs seem to query the
            // subtitle when actually playing a file anyway (see ItemResponse), and
            // that should be enough.
            if (mvi.SubTitle.HasSubtitle)
            {
                var surl = String.Format(
                    "http://{0}:{1}{2}subtitle/{3}/st.srt",
                    request.LocalEndPoint.Address,
                    request.LocalEndPoint.Port,
                    prefix,
                    resource.Id
                    );
                var result  = item.OwnerDocument;
                var srt     = result.CreateElement("sec", "CaptionInfoEx", NS_SEC);
                var srttype = result.CreateAttribute("sec", "type", NS_SEC);
                srttype.InnerText = "srt";
                srt.SetAttributeNode(srttype);
                srt.InnerText = surl;
                item.AppendChild(srt);
            }
#endif
        }
Ejemplo n.º 25
0
        public override bool Allowed(IMediaResource res)
        {
            var i = res as IMetaInfo;

            if (i == null)
            {
                return(false);
            }
            return(i.InfoSize.HasValue && i.InfoSize.Value >= minSize);
        }
Ejemplo n.º 26
0
        protected override bool DoFilter(IMediaResource res)
        {
            var i = res as IMetaInfo;

            if (i == null)
            {
                return(false);
            }
            return(i.InfoDate != null && i.InfoDate >= minDate);
        }
Ejemplo n.º 27
0
        public override bool Allowed(IMediaResource res)
        {
            var i = res as IMetaInfo;

            if (i == null)
            {
                return(false);
            }
            return(i.InfoDate >= minDate);
        }
Ejemplo n.º 28
0
 public override bool Allowed(IMediaResource res)
 {
     if (res == null) {
     throw new ArgumentNullException(nameof(res));
       }
       if (filter == null) {
     return true;
       }
       return filter.IsMatch(res.Title) || filter.IsMatch(res.Path);
 }
Ejemplo n.º 29
0
        private static string GetTitle(IMediaResource res)
        {
            var pre = res.ToComparableTitle();

            if (string.IsNullOrEmpty(pre))
            {
                return("Unnamed");
            }
            return(pre);
        }
        /// <summary>
        /// Writes the media entry to the specified stream.
        /// </summary>
        /// <param name="mediaResource">The media resource.</param>
        /// <param name="writeStream">The output write stream.</param>
        /// <param name="contentType">The media type header requested.</param>
        protected virtual void WriteMediaEntry(IMediaResource mediaResource, Stream writeStream, string contentType)
        {
            var media     = mediaResource.Syndicate();
            var formatter = GetFormatter(contentType, media);

            using (var writer = XmlWriter.Create(writeStream))
            {
                formatter.WriteTo(writer);
            }
        }
Ejemplo n.º 31
0
        protected override bool DoFilter(IMediaResource res)
        {
            var i = res as IMetaInfo;

            if (i == null)
            {
                return(false);
            }
            return(i.InfoSize.HasValue && i.InfoSize.Value >= minSize);
        }
Ejemplo n.º 32
0
    private void AddCover(IRequest request, IMediaResource resource,
                          XmlElement item)
    {
      var result = item.OwnerDocument;
      var cover = resource as IMediaCover;
      if (cover == null) {
        return;
      }
      try {
        var c = cover.Cover;
        var curl = String.Format(
        "http://{0}:{1}{2}cover/{3}/i.jpg",
        request.LocalEndPoint.Address,
        request.LocalEndPoint.Port,
        prefix,
        resource.Id
        );
        var icon = result.CreateElement("upnp", "albumArtURI", NS_UPNP);
        var profile = result.CreateAttribute("dlna", "profileID", NS_DLNA);
        profile.InnerText = "JPEG_TN";
        icon.SetAttributeNode(profile);
        icon.InnerText = curl;
        item.AppendChild(icon);
        icon = result.CreateElement("upnp", "icon", NS_UPNP);
        profile = result.CreateAttribute("dlna", "profileID", NS_DLNA);
        profile.InnerText = "JPEG_TN";
        icon.SetAttributeNode(profile);
        icon.InnerText = curl;
        item.AppendChild(icon);

        var res = result.CreateElement(string.Empty, "res", NS_DIDL);
        res.InnerText = curl;

        res.SetAttribute("protocolInfo", string.Format(
          "http-get:*:{1}:DLNA.ORG_PN={0};DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS={2}",
          c.PN, DlnaMaps.Mime[c.Type], DlnaMaps.DefaultStreaming
          ));
        var width = c.MetaWidth;
        var height = c.MetaHeight;
        if (width.HasValue && height.HasValue) {
          res.SetAttribute("resolution", string.Format("{0}x{1}", width.Value, height.Value));
        }
        else {
          res.SetAttribute("resolution", "200x200");
        }
        res.SetAttribute("protocolInfo", string.Format(
          "http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_TN;DLNA.ORG_OP=01;DLNA.ORG_CI=1;DLNA.ORG_FLAGS={0}",
          DlnaMaps.DefaultInteractive
          ));
        item.AppendChild(res);
      }
      catch (Exception) {
        return;
      }
    }
        /// <summary>
        /// Adds extra protection on base class implementation
        /// to prevent AUTOMAPPED FILES from having the importUri attribute
        /// set.
        /// </summary>
        /// <param name="newMetadata"></param>
        public override void UpdateResource(IMediaResource newMetadata)
        {
            if (this.m_ContentUri.StartsWith(MediaResource.AUTOMAPFILE))
            {
                if (newMetadata[T[_RESATTRIB.importUri]] != null)
                {
                    throw new ApplicationException("Cannot set the importUri attribute for a resource that is automapped.");
                }
            }

            base.UpdateResource(newMetadata);
        }
 /// <summary>
 /// This is called when GetCurrentConnectionInfo completes.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="ConnectionID"></param>
 /// <param name="RcsID"></param>
 /// <param name="AVTransportID"></param>
 /// <param name="ProtocolInfo"></param>
 /// <param name="PeerConnectionManager"></param>
 /// <param name="PeerConnectionID"></param>
 /// <param name="Direction"></param>
 /// <param name="Status"></param>
 /// <param name="e"></param>
 /// <param name="Tag"></param>
 protected void ConnectionInfoSink(CpConnectionManager sender, System.Int32 ConnectionID, System.Int32 RcsID, System.Int32 AVTransportID, System.String ProtocolInfo, System.String PeerConnectionManager, System.Int32 PeerConnectionID, CpConnectionManager.Enum_A_ARG_TYPE_Direction Direction, CpConnectionManager.Enum_A_ARG_TYPE_ConnectionStatus Status, UPnPInvokeException e, object Tag)
 {
     if (e != null)
     {
         return;
     }
     MediaResource = ResourceBuilder.CreateResource(MediaResource.ContentUri, ProtocolInfo);
     if (OnMediaResourceChanged != null)
     {
         OnMediaResourceChanged(this, MediaResource);
     }
 }
Ejemplo n.º 35
0
 public override bool Allowed(IMediaResource res)
 {
     if (res == null)
     {
         throw new ArgumentNullException(nameof(res));
     }
     if (filter == null)
     {
         return(true);
     }
     return(filter.IsMatch(res.Title) || filter.IsMatch(res.Path));
 }
Ejemplo n.º 36
0
 private static void AddBookmarkInfo(IMediaResource resource, XmlElement item)
 {
     var bookmarkable = resource as IBookmarkable;
       if (bookmarkable == null) {
     return;
       }
       var bookmark = bookmarkable.Bookmark;
       if (bookmark.HasValue) {
     var dcmInfo = item.OwnerDocument.CreateElement("sec", "dcmInfo", NS_SEC);
     dcmInfo.InnerText = string.Format("BM={0}", bookmark.Value);
     item.AppendChild(dcmInfo);
       }
 }
Ejemplo n.º 37
0
   private static void AddBookmarkInfo(IMediaResource resource,
 XmlElement item)
   {
       var bookmarkable = resource as IBookmarkable;
         var bookmark = bookmarkable?.Bookmark;
         if (bookmark != null) {
       var dcmInfo = item.OwnerDocument?.CreateElement(
         "sec", "dcmInfo", NS_SEC);
       if (dcmInfo != null) {
         dcmInfo.InnerText = $"BM={bookmark.Value}";
         item.AppendChild(dcmInfo);
       }
         }
   }
Ejemplo n.º 38
0
        private static void AddBookmarkInfo(IMediaResource resource, XmlElement item)
        {
            var bookmarkable = resource as IBookmarkable;
            var bookmark     = bookmarkable?.Bookmark;

            if (bookmark != null)
            {
                var dcmInfo = item.OwnerDocument?.CreateElement(
                    "sec", "dcmInfo", NS_SEC);
                if (dcmInfo != null)
                {
                    dcmInfo.InnerText = $"BM={bookmark.Value}";
                    item.AppendChild(dcmInfo);
                }
            }
        }
Ejemplo n.º 39
0
 private static void LinkTriple(TripleKeyedVirtualFolder folder, IMediaResource r, string key1, string key2)
 {
     if (string.IsNullOrWhiteSpace(key1))
     {
         return;
     }
     if (string.IsNullOrWhiteSpace(key2))
     {
         return;
     }
     folder
     .GetFolder(key1.StemCompareBase().First().ToString().ToUpper())
     .GetFolder(key1.StemNameBase())
     .GetFolder(key2.StemNameBase())
     .AddResource(r);
 }
Ejemplo n.º 40
0
        private static void AddBookmarkInfo(IMediaResource resource, XmlElement item)
        {
            var bookmarkable = resource as IBookmarkable;

            if (bookmarkable == null)
            {
                return;
            }
            var bookmark = bookmarkable.Bookmark;

            if (bookmark.HasValue)
            {
                var dcmInfo = item.OwnerDocument.CreateElement("sec", "dcmInfo", NS_SEC);
                dcmInfo.InnerText = string.Format("BM={0}", bookmark.Value);
                item.AppendChild(dcmInfo);
            }
        }
        /// <summary>
        /// This method provides a custom implementation for printing resources.
        /// This custom implementation makes it so that the importUri attribute
        /// is not printed and also makes it so that the contentUri field
        /// is a relative
        /// </summary>
        /// <param name="resource"></param>
        /// <param name="formatter"></param>
        /// <param name="data"></param>
        /// <param name="xmlWriter"></param>
        private void WriteResource(IMediaResource resource, ToXmlFormatter formatter, object data, XmlTextWriter xmlWriter)
        {
            ToXmlData_Custom _d = (ToXmlData_Custom)data;
            Tags             T  = Tags.GetInstance();

            xmlWriter.WriteStartElement(T[_DIDL.Res]);

            // write everything but importUri
            foreach (string attribName in resource.ValidAttributes)
            {
                if (attribName != T[_RESATTRIB.importUri])
                {
                    StringBuilder sb = new StringBuilder(20);
                    sb.AppendFormat("{0}@{1}", T[_DIDL.Res], attribName);
                    string filterName = sb.ToString();

                    if (_d.DesiredProperties == null)
                    {
                    }
                    else if ((_d.DesiredProperties.Count == 0) || _d.DesiredProperties.Contains(filterName))
                    {
                        xmlWriter.WriteAttributeString(attribName, resource[attribName].ToString());
                    }
                }
            }

            // write content uri as the value of the 'res' element
            // and note the mapping

            /*
             * StringBuilder uri = new StringBuilder();
             * uri.AppendFormat("{0}{1}", _d.BaseUri, _d.i);
             * string str = uri.ToString();
             * xmlWriter.WriteString(str);
             * _d.Mappings[str] = resource;
             * _d.i++;
             */
            if ((bool)_d.Mappings[resource] == false)
            {
                xmlWriter.WriteString(this.ConvertLocalFileToHTTPResource(resource));
                _d.Mappings[resource] = true;
            }

            xmlWriter.WriteEndElement();
        }
Ejemplo n.º 42
0
 private static void AddActors(IMediaResource resource, XmlElement item)
 {
     var mvi = resource as IMetaVideoItem;
       if (mvi == null) {
     return;
       }
       try {
     var actors = mvi.MetaActors;
     if (actors != null) {
       foreach (var actor in actors) {
     var e = item.OwnerDocument.CreateElement("upnp", "actor", NS_UPNP);
     e.InnerText = actor;
     item.AppendChild(e);
       }
     }
       }
       catch (Exception) {
     return;
       }
 }
Ejemplo n.º 43
0
        public ItemResponse(IRequest request, IMediaResource aItem, string transferMode = "Streaming")
        {
            item = aItem;
              headers = new ResponseHeaders(noCache: !(item is IMediaCoverResource));
              var meta = item as IMetaInfo;
              if (meta != null) {
            headers.Add("Content-Length", meta.InfoSize.ToString());
            headers.Add("Last-Modified", meta.InfoDate.ToString("R"));
              }
              headers.Add("Accept-Ranges", "bytes");
              headers.Add("Content-Type", DlnaMaps.Mime[item.Type]);
              if (request.Headers.ContainsKey("getcontentFeatures.dlna.org")) {
            if (item.MediaType == DlnaMediaTypes.Image) {
              headers.Add("contentFeatures.dlna.org", String.Format("{0};DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS={1}", item.PN, DlnaMaps.DefaultInteractive));
            }
            else {
              headers.Add("contentFeatures.dlna.org", String.Format("{0};DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS={1}", item.PN, DlnaMaps.DefaultStreaming));
            }
              }
              Headers.Add("transferMode.dlna.org", transferMode);

              Debug(headers);
        }
Ejemplo n.º 44
0
        private void PrintExtInfLine(StringBuilder M3U, IMediaResource R)
        {
            M3U.Append("#EXTINF:");
            if (R.HasDuration)
            {
                M3U.Append(Math.Ceiling(R.Duration.m_Value.TotalSeconds));
            }
            else
            {
                M3U.Append("-1");
            }

            if (R.Owner.Creator != "")
            {
                //				M3U.AppendFormat(",{0} - {1}\r\n", "SkippyCreator", "SkippyTitle");
                M3U.AppendFormat(",{0} - {1}\r\n", R.Owner.Creator, R.Owner.Title);
            }
            else
            {
                //				M3U.AppendFormat(",{0}\r\n", "SkippyTitle");
                M3U.AppendFormat(",{0}\r\n", R.Owner.Title);
            }
        }
        /// <summary>
        /// Updates the valueList window with information about a resource.
        /// </summary>
        /// <param name="res"></param>
        private void UpdateValueListWithResource(IMediaResource res)
        {
            valueListView.Items.Clear();
            valueListView.Items.Add(new ListViewItem(new string[] { "contentUri", res.ContentUri }));

            ICollection ic = res.ValidAttributes;
            SortedList sl = new SortedList(ic.Count);

            foreach (string attrib in res.ValidAttributes)
            {
                sl.Add(attrib, attrib);
            }

            foreach (string attrib in sl.Values)
            {
                valueListView.Items.Add(new ListViewItem(new string[] { attrib, res[attrib].ToString() }));
            }
        }
Ejemplo n.º 46
0
 protected override bool DoFilter(IMediaResource res)
 {
   return filter.IsMatch(res.Title) || filter.IsMatch(res.Path);
 }
 private void ResultImportResource2SinkEx(System.Uri importFromThis, IUPnPMedia owner, IMediaResource importToThis, IResourceTransfer transferObject, object Tag, UPnPInvokeException error)
 {
     new TransferForm(transferObject).Show();
 }
 private void ResultImportResource2Sink(System.Uri importFromThis, IUPnPMedia owner, IMediaResource importToThis, IResourceTransfer transferObject, object Tag, UPnPInvokeException error)
 {
     //MessageBox.Show(this,"Transfering...","Object Import",MessageBoxButtons.OK,MessageBoxIcon.Information);
     object[] args = new object[6];
     args[0] = importFromThis;
     args[1] = owner;
     args[2] = importToThis;
     args[3] = transferObject;
     args[4] = Tag;
     args[5] = error;
     this.BeginInvoke(new OpenSource.UPnP.AV.MediaServer.CP.CpMediaDelegates.Delegate_ResultImportResource2(ResultImportResource2SinkEx),args);
 }
 private void MediaResourceChangedHandlerSink(AVConnection connection, IMediaResource res)
 {
     if (InvokeRequired) { Invoke(new AVConnection.MediaResourceChangedHandler(MediaResourceChangedHandlerSink), connection, res); return; }
     if (listViewSelectedObject == connection) SetListInfo(connection);
 }
Ejemplo n.º 50
0
		/// <summary>
		/// Indicates vendor specific UPNP error code of 801.
		/// </summary>
		/// <param name="res">The <see cref="IMediaResource"/> instance that already has a parent.</param>
		public Error_MediaResourceHasParent (IMediaResource res)
			: base (801, "The specified resource cannot be associated with multiple media objects in this MediaServer implementation.")
		{
			this.Resource = res;
		}
Ejemplo n.º 51
0
 public void RemoveResource(IMediaResource res)
 {
     resources.Remove(res);
 }
Ejemplo n.º 52
0
 public void RemoveResource(IMediaResource res)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 53
0
		/// <summary>
		/// Updates the metadata (contentUri and xml attributes) for this
		/// resource using another resource's metadata. 
		/// Values for the contentUri and attributes of the resource
		/// are shallow-copied.
		/// </summary>
		/// <param name="newMetadata"></param>
		public virtual void UpdateResource (IMediaResource newMetadata)
		{
			ICollection attribs = Enum.GetValues(typeof(_RESATTRIB));

			foreach (_RESATTRIB attrib in attribs)
			{
				string key = T[attrib];
				object val = newMetadata[key];
				IValueType ivt = val as IValueType;
				if (ivt != null)
				{
					// If the data associated with the resource's metata 
					// is stored as an IValueType, then we need to check
					// for validity. Remember that IValueType objects
					// are object representations of value-types that
					// cannot have a null value (eg, integers, et al).
					//
					// If the value is valid, then we apply it.
					// Otherwise, we remove the current value from
					// the resource's attribute value correctly.
					if (ivt.IsValid)
					{
						this.SetAttribute(key, ivt);
					}
					else
					{
						this.SetAttribute(key, null);
					}
				}
				else
				{
					// This code executes when the value is not an IValueType,
					// or when the sent value is null. Either case, we modify
					// the resources's attribute value correctly.
					this.SetAttribute(key, val);
				}
			}
		}
Ejemplo n.º 54
0
        private void Browse_AddItem(IRequest request, XmlDocument result,
      IMediaResource resource)
        {
            var props = resource.Properties;

              var item = result.CreateElement(string.Empty, "item", NS_DIDL);
              item.SetAttribute("restricted", "1");
              item.SetAttribute("id", resource.Id);
              item.SetAttribute("parentID", Identifiers.GENERAL_ROOT);

              item.AppendChild(CreateObjectClass(result, resource));

              AddBookmarkInfo(resource, item);

              AddGeneralProperties(props, item);

              AddVideoProperties(request, resource, item);

              var title = result.CreateElement("dc", "title", NS_DC);
              title.InnerText = resource.Title;
              item.AppendChild(title);

              var res = result.CreateElement(string.Empty, "res", NS_DIDL);
              res.InnerText =
            $"http://{request.LocalEndPoint.Address}:{request.LocalEndPoint.Port}{Prefix}file/{resource.Id}/res";

              string prop;
              if (props.TryGetValue("SizeRaw", out prop)) {
            res.SetAttribute("size", prop);
              }
              if (props.TryGetValue("Resolution", out prop)) {
            res.SetAttribute("resolution", prop);
              }
              if (props.TryGetValue("Duration", out prop)) {
            res.SetAttribute("duration", prop);
              }

              res.SetAttribute("protocolInfo", string.Format(
            "http-get:*:{1}:DLNA.ORG_PN={0};DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS={2}",
            resource.PN, DlnaMaps.Mime[resource.Type], DlnaMaps.DefaultStreaming
                                         ));
              item.AppendChild(res);

              AddCover(request, resource, item);
              result.DocumentElement?.AppendChild(item);
        }
Ejemplo n.º 55
0
   private static XmlElement CreateObjectClass(XmlDocument result,
 IMediaResource resource)
   {
       var objectClass = result.CreateElement("upnp", "class", NS_UPNP);
         switch (resource.MediaType) {
         case DlnaMediaTypes.Video:
       objectClass.InnerText = "object.item.videoItem.movie";
       break;
         case DlnaMediaTypes.Image:
       objectClass.InnerText = "object.item.imageItem.photo";
       break;
         case DlnaMediaTypes.Audio:
       objectClass.InnerText = "object.item.audioItem.musicTrack";
       break;
         default:
       throw new NotSupportedException();
         }
         return objectClass;
   }
Ejemplo n.º 56
0
   private static void AddVideoProperties(IRequest request,
 IMediaResource resource,
 XmlNode item)
   {
       if (request == null) {
       throw new ArgumentNullException(nameof(request));
         }
         var mvi = resource as IMetaVideoItem;
         if (mvi == null) {
       return;
         }
         try {
       var ownerDocument = item.OwnerDocument;
       var actors = mvi.MetaActors;
       if (actors != null && ownerDocument != null) {
         foreach (var actor in actors) {
       var e = ownerDocument.CreateElement("upnp", "actor", NS_UPNP);
       e.InnerText = actor;
       item.AppendChild(e);
         }
       }
         }
         catch (Exception) {
       // ignored
         }
       #if ANNOUNCE_SUBTITLE_IN_SOAP
         // This is a kind of costly operation, as getting subtitles in general
         // for the first time is costly. Most Samsung TVs seem to query the
         // subtitle when actually playing a file anyway (see ItemResponse), and
         // that should be enough.
         if (mvi.SubTitle.HasSubtitle) {
       var surl = String.Format(
         "http://{0}:{1}{2}subtitle/{3}/st.srt",
         request.LocalEndPoint.Address,
         request.LocalEndPoint.Port,
         prefix,
         resource.Id
         );
       var result = item.OwnerDocument;
       var srt = result.CreateElement("sec", "CaptionInfoEx", NS_SEC);
       var srttype = result.CreateAttribute("sec", "type", NS_SEC);
       srttype.InnerText = "srt";
       srt.SetAttributeNode(srttype);
       srt.InnerText = surl;
       item.AppendChild(srt);
         }
       #endif
   }
Ejemplo n.º 57
0
 public void AddResource(IMediaResource res)
 {
     resources.Add(res);
 }
 private void OnMediaResourceChangedHandlerSink(AVConnection sender, IMediaResource target)
 {
     UpdateUserInterface();
 }
Ejemplo n.º 59
0
        /// <summary>
        /// Removes a resource from the media item.
        /// </summary>
        /// <param name="removeThis"></param>
        public override void RemoveResource(IMediaResource removeThis)
        {
            // ArrayList.Remove does not return a boolean to indicate
            // that the resource was remove - so just assume that
            // something was removed.

            base.RemoveResource(removeThis);
            this.NotifyRootOfChange();
        }
Ejemplo n.º 60
0
    public ItemResponse(string prefix, IRequest request, IMediaResource item,
                        string transferMode = "Streaming")
    {
      this.item = item;
      headers = new ResponseHeaders(noCache: !(item is IMediaCoverResource));
      var meta = item as IMetaInfo;
      if (meta != null) {
        headers.Add("Content-Length", meta.InfoSize.ToString());
        headers.Add("Last-Modified", meta.InfoDate.ToString("R"));
      }
      headers.Add("Accept-Ranges", "bytes");
      headers.Add("Content-Type", DlnaMaps.Mime[item.Type]);
      if (request.Headers.ContainsKey("getcontentFeatures.dlna.org")) {
        try {
          if (item.MediaType == DlnaMediaTypes.Image) {
            headers.Add(
              "contentFeatures.dlna.org",
              String.Format(
                "DLNA.ORG_PN={0};DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS={1}",
                item.PN,
                DlnaMaps.DefaultInteractive
                )
              );
          }
          else {
            headers.Add(
              "contentFeatures.dlna.org",
              String.Format(
                "DLNA.ORG_PN={0};DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS={1}",
                item.PN,
                DlnaMaps.DefaultStreaming
                )
              );
          }
        }
        catch (NotSupportedException) {
        }
        catch (NotImplementedException) {
        }
      }
      if (request.Headers.ContainsKey("getCaptionInfo.sec")) {
        var mvi = item as IMetaVideoItem;
        if (mvi != null && mvi.Subtitle.HasSubtitle) {
          var surl = String.Format(
          "http://{0}:{1}{2}subtitle/{3}/st.srt",
          request.LocalEndPoint.Address,
          request.LocalEndPoint.Port,
          prefix,
          item.Id
          );
          DebugFormat("Sending subtitles {0}", surl);
          headers.Add("CaptionInfo.sec", surl);
        }
      }
      if (request.Headers.ContainsKey("getMediaInfo.sec")) {
        var md = item as IMetaDuration;
        if (md != null && md.MetaDuration.HasValue) {
          headers.Add(
            "MediaInfo.sec",
            string.Format(
              "SEC_Duration={0};",
              md.MetaDuration.Value.TotalMilliseconds
              )
            );
        }
      }
      headers.Add("transferMode.dlna.org", transferMode);

      Debug(headers);
    }