Exemplo n.º 1
0
        public void ReadXml(XmlReader reader)
        {
            bool isEmpty = reader.IsEmptyElement;

            AddAttributeExtensions(reader);

            reader.ReadStartElement();

            if (!isEmpty)
            {
                while (reader.IsStartElement())
                {
                    if (reader.LocalName == MediaRssContent.ELEMENT_NAME)
                    {
                        var contentNode = new MediaRssContent();
                        contentNode.ReadXml(reader);
                        ContentNodes.Add(contentNode);
                    }
                    else if (MediaRssHelper.TryParseOptionalElement(OptionalElements, reader) == false)
                        ElementExtensions.Add((XElement)XNode.ReadFrom(reader));
                }
                reader.ReadEndElement();
            }
        }
Exemplo n.º 2
0
 protected override bool TryParseElement(XmlReader reader, string version)
 {
     var parsed = false;
     try
     {
         if (version == SyndicationVersions.Rss20 && reader.NamespaceURI == MediaRssBase.NS_URI)
         {
             switch (reader.LocalName)
             {
                 case MediaRssContent.ELEMENT_NAME:
                     var contentNode = new MediaRssContent();
                     contentNode.ReadXml(reader);
                     ContentNodes.Add(contentNode);
                     parsed = true;
                     break;
                 case MediaRssGroup.ELEMENT_NAME:
                     var groupNode = new MediaRssGroup();
                     groupNode.ReadXml(reader);
                     GroupNodes.Add(groupNode);
                     parsed = true;
                     break;
                 default:
                     parsed = MediaRssHelper.TryParseOptionalElement(OptionalElements, reader);
                     if (!parsed)
                         parsed = base.TryParseElement(reader, version);
                     break;
             }
         }
         return parsed;
     }
     catch (Exception)
     {
         //TODO Log error
         return false;
     }
 }
        private static bool TryFormatMediaRssContent(MediaRssContent contentToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement contentElement)
        {
            contentElement = default;

            if (contentToFormat == null)
            {
                return(false);
            }

            var childElements = new List <XElement>();
            var attributes    = new List <XAttribute>();

            // content fields
            if (!string.IsNullOrEmpty(contentToFormat.Url))
            {
                attributes.Add(new XAttribute("url", contentToFormat.Url));
            }

            if (contentToFormat.FileSize != null)
            {
                attributes.Add(new XAttribute("fileSize", contentToFormat.FileSize.Value.ToString(CultureInfo.InvariantCulture)));
            }

            if (!string.IsNullOrEmpty(contentToFormat.Type))
            {
                attributes.Add(new XAttribute("type", contentToFormat.Type));
            }

            if (contentToFormat.Medium != null)
            {
                attributes.Add(new XAttribute("medium", contentToFormat.Medium.Value.ToString().ToLowerInvariant()));
            }

            if (contentToFormat.IsDefault != null)
            {
                attributes.Add(new XAttribute("isDefault", contentToFormat.IsDefault.Value ? "true" : "false"));
            }

            if (contentToFormat.Expression != MediaRssExpression.Full)
            {
                attributes.Add(new XAttribute("expression", contentToFormat.Expression.ToString().ToLowerInvariant()));
            }

            if (contentToFormat.BitRate != null)
            {
                attributes.Add(new XAttribute("bitrate", contentToFormat.BitRate.Value.ToString("0.####", CultureInfo.InvariantCulture)));
            }

            if (contentToFormat.FrameRate != null)
            {
                attributes.Add(new XAttribute("framerate", contentToFormat.FrameRate.Value.ToString("0.####", CultureInfo.InvariantCulture)));
            }

            if (contentToFormat.SamplingRate != null)
            {
                attributes.Add(new XAttribute("samplingrate", contentToFormat.SamplingRate.Value.ToString("0.####", CultureInfo.InvariantCulture)));
            }

            if (contentToFormat.Channels != null)
            {
                attributes.Add(new XAttribute("channels", contentToFormat.Channels.Value.ToString(CultureInfo.InvariantCulture)));
            }

            if (contentToFormat.Duration != null)
            {
                attributes.Add(new XAttribute("duration", contentToFormat.Duration.Value.TotalSeconds.ToString("0.####", CultureInfo.InvariantCulture)));
            }

            if (contentToFormat.Height != null)
            {
                attributes.Add(new XAttribute("height", contentToFormat.Height.Value.ToString(CultureInfo.InvariantCulture)));
            }

            if (contentToFormat.Width != null)
            {
                attributes.Add(new XAttribute("width", contentToFormat.Width.Value.ToString(CultureInfo.InvariantCulture)));
            }

            if (!string.IsNullOrEmpty(contentToFormat.Lang))
            {
                attributes.Add(new XAttribute("lang", contentToFormat.Lang));
            }

            // container
            if (TryFormatMediaRssContainer(contentToFormat, namespaceAliases, extensionManifestDirectory, out var containerChildElements))
            {
                foreach (var containerChildElement in containerChildElements)
                {
                    childElements.Add(containerChildElement);
                }
            }

            // extensions
            if (ExtensibleEntityFormatter.TryFormatXElementExtensions(contentToFormat, namespaceAliases, extensionManifestDirectory, out var extensionElements))
            {
                childElements.AddRange(extensionElements);
            }

            if (!childElements.Any() && !attributes.Any())
            {
                return(false);
            }

            contentElement = new XElement(_media + "content", attributes);
            contentElement.AddRange(childElements);

            return(true);
        }
        private static bool TryParseMediaRssContent(XElement contentElement, XNamespace ns, ExtensionManifestDirectory extensionManifestDirectory, out MediaRssContent parsedContent)
        {
            parsedContent = null;

            if (contentElement == null)
            {
                return(false);
            }

            // content fields
            if (TryParseStringAttribute(contentElement.Attribute("url"), out var parsedUrl))
            {
                // ReSharper disable once ConstantNullCoalescingCondition
                parsedContent     = parsedContent ?? new MediaRssContent();
                parsedContent.Url = parsedUrl;
            }

            if (TryParseIntegerAttribute(contentElement.Attribute("fileSize"), out var parsedFileSize))
            {
                parsedContent          = parsedContent ?? new MediaRssContent();
                parsedContent.FileSize = parsedFileSize;
            }

            if (TryParseStringAttribute(contentElement.Attribute("type"), out var parsedType))
            {
                parsedContent      = parsedContent ?? new MediaRssContent();
                parsedContent.Type = parsedType;
            }

            if (TryParseEnumAttribute <MediaRssMedium>(contentElement.Attribute("medium"), out var parsedMedium))
            {
                parsedContent        = parsedContent ?? new MediaRssContent();
                parsedContent.Medium = parsedMedium;
            }

            if (TryParseBoolAttribute(contentElement.Attribute("isDefault"), out var parsedIsDefault))
            {
                parsedContent           = parsedContent ?? new MediaRssContent();
                parsedContent.IsDefault = parsedIsDefault;
            }

            if (TryParseEnumAttribute <MediaRssExpression>(contentElement.Attribute("expression"), out var parsedExpression))
            {
                parsedContent            = parsedContent ?? new MediaRssContent();
                parsedContent.Expression = parsedExpression;
            }

            if (TryParseDoubleAttribute(contentElement.Attribute("bitrate"), out var parsedBitRate))
            {
                parsedContent         = parsedContent ?? new MediaRssContent();
                parsedContent.BitRate = parsedBitRate;
            }

            if (TryParseDoubleAttribute(contentElement.Attribute("framerate"), out var parsedFrameRate))
            {
                parsedContent           = parsedContent ?? new MediaRssContent();
                parsedContent.FrameRate = parsedFrameRate;
            }

            if (TryParseDoubleAttribute(contentElement.Attribute("samplingrate"), out var parsedSamplingRate))
            {
                parsedContent = parsedContent ?? new MediaRssContent();
                parsedContent.SamplingRate = parsedSamplingRate;
            }

            if (TryParseIntegerAttribute(contentElement.Attribute("channels"), out var parsedChannels))
            {
                parsedContent          = parsedContent ?? new MediaRssContent();
                parsedContent.Channels = parsedChannels;
            }

            if (TryParseTimeSpanAttribute(contentElement.Attribute("duration"), out var parsedDuration))
            {
                parsedContent          = parsedContent ?? new MediaRssContent();
                parsedContent.Duration = parsedDuration;
            }

            if (TryParseIntegerAttribute(contentElement.Attribute("height"), out var parsedHeight))
            {
                parsedContent        = parsedContent ?? new MediaRssContent();
                parsedContent.Height = parsedHeight;
            }

            if (TryParseIntegerAttribute(contentElement.Attribute("width"), out var parsedWidth))
            {
                parsedContent       = parsedContent ?? new MediaRssContent();
                parsedContent.Width = parsedWidth;
            }

            if (TryParseStringAttribute(contentElement.Attribute("lang"), out var parsedLang))
            {
                parsedContent      = parsedContent ?? new MediaRssContent();
                parsedContent.Lang = parsedLang;
            }

            // container
            ParseMediaRssContainer(contentElement, ns, extensionManifestDirectory, ref parsedContent);

            if (parsedContent == null)
            {
                return(false);
            }

            // extensions
            ExtensibleEntityParser.ParseXElementExtensions(contentElement, extensionManifestDirectory, parsedContent);

            return(true);
        }