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); } }
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); }
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); }
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 } }
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); }
internal bool Allowed(IMediaResource item) { lock (ids) { return(ids.Allowed(item)); } }
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); }
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) { } }
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; } }
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); }
public override bool Allowed(IMediaResource res) { var i = res as IMetaInfo; if (i == null) { return false; } return i.InfoDate >= minDate; }
public override bool Allowed(IMediaResource res) { var i = res as IMetaInfo; if (i == null) { return false; } return i.InfoSize.HasValue && i.InfoSize.Value >= minSize; }
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(); }
protected override bool DoFilter(IMediaResource res) { var i = res as IMetaInfo; if (i == null) { return false; } return i.InfoSize.HasValue && i.InfoSize.Value >= minSize; }
private static string GetTitle(IMediaResource res) { var pre = res.ToComparableTitle(); if (string.IsNullOrEmpty(pre)) { return "Unnamed"; } return pre; }
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); }
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(); }
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 }
public override bool Allowed(IMediaResource res) { var i = res as IMetaInfo; if (i == null) { return(false); } return(i.InfoSize.HasValue && i.InfoSize.Value >= minSize); }
protected override bool DoFilter(IMediaResource res) { var i = res as IMetaInfo; if (i == null) { return(false); } return(i.InfoDate != null && i.InfoDate >= minDate); }
public override bool Allowed(IMediaResource res) { var i = res as IMetaInfo; if (i == null) { return(false); } return(i.InfoDate >= minDate); }
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); }
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); } }
protected override bool DoFilter(IMediaResource res) { var i = res as IMetaInfo; if (i == null) { return(false); } return(i.InfoSize.HasValue && i.InfoSize.Value >= minSize); }
/// <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); } }
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)); }
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); } }
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); } } }
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); }
/// <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(); }
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; } }
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() })); } }
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); }
/// <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; }
public void RemoveResource(IMediaResource res) { resources.Remove(res); }
public void RemoveResource(IMediaResource res) { throw new NotImplementedException(); }
/// <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); } } }
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); }
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; }
public void AddResource(IMediaResource res) { resources.Add(res); }
private void OnMediaResourceChangedHandlerSink(AVConnection sender, IMediaResource target) { UpdateUserInterface(); }
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); }