Example #1
0
        protected override void BuildInternal(object directoryPropertyObject)
        {
            if (!_hasCompleted)
            {
                if (directoryPropertyObject is IDirectoryContainer)
                {
                    _xml.WriteStartElement("container");
                }
                else if (directoryPropertyObject is IDirectoryItem)
                {
                    _xml.WriteStartElement("item");
                }
                else
                {
                    throw new ArgumentException("directoryPropertyObject isn't either an IDirectoryContainer or IDirectoryItem");
                }

                if (directoryPropertyObject is MediaLibraryVideoItem)
                {
                    try
                    {
                        MediaLibraryVideoItem res      = (MediaLibraryVideoItem)directoryPropertyObject;
                        IDirectoryResource    subRes   = null;
                        IDirectoryResource    movieRes = null;
                        foreach (var embeddedRes in res.Resources)
                        {
                            if (embeddedRes is MediaLibrarySubtitleResource)
                            {
                                subRes = embeddedRes;
                            }
                            else if (embeddedRes is MediaLibraryResource)
                            {
                                movieRes = embeddedRes;
                            }
                        }
                        if (subRes != null && movieRes != null)
                        {
                            movieRes.PacketVideoSubtitleType = "SRT";
                            movieRes.PacketVideoSubtitleUri  = subRes.Uri;
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Warn("DlnaMediaServer: Cannot resolve resource elements for injection of subtitles information:\n {0}", ex.Message);
                    }
                }

                ObjectRenderer.Render(_filter, directoryPropertyObject, _xml);
                _xml.WriteEndElement();
            }
        }
Example #2
0
        protected override void BuildInternal(object directoryPropertyObject)
        {
            if (!_hasCompleted)
            {
                if (directoryPropertyObject is IDirectoryContainer)
                {
                    _xml.WriteStartElement("container");
                }
                else if (directoryPropertyObject is IDirectoryItem)
                {
                    _xml.WriteStartElement("item");
                }
                else
                {
                    throw new ArgumentException(
                              "directoryPropertyObject isn't either an IDirectoryContainer or IDirectoryItem");
                }

                ObjectRenderer.Render(_filter, directoryPropertyObject, _xml);

                if (directoryPropertyObject is MediaLibraryVideoItem)
                {
                    try
                    {
                        MediaLibraryVideoItem res = (MediaLibraryVideoItem)directoryPropertyObject;
                        foreach (var embeddedRes in res.Resources)
                        {
                            if (embeddedRes is MediaLibrarySubtitleResource)
                            {
                                _xml.WriteStartElement("sec", "CaptionInfoEx", null);
                                _xml.WriteAttributeString("sec", "type", null, ((MediaLibrarySubtitleResource)embeddedRes).SubtitleType);
                                _xml.WriteValue(embeddedRes.Uri);
                                _xml.WriteEndElement();
                                break;
                            }
                        }

                        var  dlnaItem         = res.Client.GetDlnaItem(res.MediaItemId);
                        long creationDateSecs = 0;
                        if (dlnaItem?.MediaItemAddedDate != null)
                        {
                            creationDateSecs = Convert.ToInt64((dlnaItem.MediaItemAddedDate.Value - new DateTime(1970, 1, 1)).TotalSeconds);
                        }
                        string dcm = "CREATIONDATE=" + creationDateSecs;
                        if (dlnaItem?.MediaItemWidth != null)
                        {
                            dcm += ",WIDTH=" + Convert.ToString(dlnaItem.MediaItemWidth.Value);
                        }
                        if (dlnaItem?.MediaItemHeight != null)
                        {
                            dcm += ",HEIGHT=" + Convert.ToString(dlnaItem.MediaItemHeight.Value);
                        }
                        if (dlnaItem?.MediaItemRecordingDate != null)
                        {
                            dcm += ",YEAR=" + dlnaItem.MediaItemRecordingDate.Value.Year;
                        }

                        //TODO: Support resumed playback of videos?
                        //dcm += string.Format(",BM={0}", numberOfSecondsToResumeFrom)

                        _xml.WriteStartElement("sec", "dcmInfo", null);
                        _xml.WriteValue(dcm);
                        _xml.WriteEndElement();
                    }
                    catch (Exception ex)
                    {
                        Logger.Warn("DlnaMediaServer: Cannot resolve resource elements for injection of information:\n {0}", ex.Message);
                    }
                }
                else if (directoryPropertyObject is MediaLibraryImageItem)
                {
                    try
                    {
                        MediaLibraryImageItem res = (MediaLibraryImageItem)directoryPropertyObject;
                        var dlnaItem = res.Client.GetDlnaItem(res.MediaItemId);
                        if (dlnaItem?.MediaItemImageMake != null)
                        {
                            _xml.WriteStartElement("sec", "manufacturer", null);
                            _xml.WriteValue(dlnaItem.MediaItemImageMake);
                            _xml.WriteEndElement();
                        }
                        if (dlnaItem?.MediaItemImageModel != null)
                        {
                            _xml.WriteStartElement("sec", "model", null);
                            _xml.WriteValue(dlnaItem.MediaItemImageModel);
                            _xml.WriteEndElement();
                        }
                        if (dlnaItem?.MediaItemImageFNumber != null)
                        {
                            _xml.WriteStartElement("sec", "fvalue", null);
                            _xml.WriteValue(dlnaItem.MediaItemImageFNumber);
                            _xml.WriteEndElement();
                        }
                        if (dlnaItem?.MediaItemImageIsoSpeed != null)
                        {
                            _xml.WriteStartElement("sec", "iso", null);
                            _xml.WriteValue(dlnaItem.MediaItemImageIsoSpeed);
                            _xml.WriteEndElement();
                        }
                        if (dlnaItem?.MediaItemImageExposureTime != null)
                        {
                            _xml.WriteStartElement("sec", "exposureTime", null);
                            _xml.WriteValue(dlnaItem.MediaItemImageExposureTime);
                            _xml.WriteEndElement();
                        }

                        long creationDateSecs = 0;
                        if (dlnaItem?.MediaItemAddedDate != null)
                        {
                            creationDateSecs = Convert.ToInt64((dlnaItem.MediaItemAddedDate.Value - new DateTime(1970, 1, 1)).TotalSeconds);
                        }
                        string dcm = "CREATIONDATE=" + creationDateSecs;
                        if (dlnaItem?.MediaItemWidth != null)
                        {
                            dcm += ",WIDTH=" + Convert.ToString(dlnaItem.MediaItemWidth.Value);
                        }
                        if (dlnaItem?.MediaItemHeight != null)
                        {
                            dcm += ",HEIGHT=" + Convert.ToString(dlnaItem.MediaItemHeight.Value);
                        }
                        if (dlnaItem?.MediaItemImageOrientation != null)
                        {
                            dcm += ",ORT=" + Convert.ToString(dlnaItem.MediaItemImageOrientation.Value);
                        }
                        if (dlnaItem?.MediaItemRecordingDate != null)
                        {
                            dcm += ",YEAR=" + dlnaItem.MediaItemRecordingDate.Value.Year;
                        }

                        _xml.WriteStartElement("sec", "dcmInfo", null);
                        _xml.WriteValue(dcm);
                        _xml.WriteEndElement();
                    }
                    catch (Exception ex)
                    {
                        Logger.Warn("DlnaMediaServer: Cannot resolve resource elements for injection of information:\n {0}", ex.Message);
                    }
                }
                _xml.WriteEndElement();
            }
        }