private static bool TryParseMediaRssGroup(XElement groupElement, XNamespace ns, ExtensionManifestDirectory extensionManifestDirectory, out MediaRssGroup parsedGroup)
        {
            parsedGroup = null;

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

            // contents
            foreach (var contentElement in groupElement.Elements(ns + "content"))
            {
                if (TryParseMediaRssContent(contentElement, ns, extensionManifestDirectory, out var parsedContent))
                {
                    parsedGroup = parsedGroup ?? new MediaRssGroup();
                    parsedGroup.Contents.Add(parsedContent);
                }
            }

            // container
            ParseMediaRssContainer(groupElement, ns, extensionManifestDirectory, ref parsedGroup);

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

            // extensions
            ExtensibleEntityParser.ParseXElementExtensions(groupElement, extensionManifestDirectory, parsedGroup);

            return(true);
        }
Ejemplo n.º 2
0
        private static bool TryParseRss20Image(XElement imageElement, ExtensionManifestDirectory extensionManifestDirectory, out Rss20Image parsedImage)
        {
            parsedImage = default;

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

            parsedImage             = new Rss20Image();
            parsedImage.Url         = imageElement.Element("url")?.Value.Trim();
            parsedImage.Title       = imageElement.Element("title")?.Value.Trim();
            parsedImage.Link        = imageElement.Element("link")?.Value.Trim();
            parsedImage.Description = imageElement.Element("description")?.Value.Trim();

            if (int.TryParse(imageElement.Element("width")?.Value.Trim(), NumberStyles.Any, CultureInfo.InvariantCulture, out var parsedWidth))
            {
                parsedImage.Width = parsedWidth;
            }

            if (int.TryParse(imageElement.Element("height")?.Value.Trim(), NumberStyles.Any, CultureInfo.InvariantCulture, out var parsedHeight))
            {
                parsedImage.Height = parsedHeight;
            }

            // extensions
            ExtensibleEntityParser.ParseXElementExtensions(imageElement, extensionManifestDirectory, parsedImage);

            return(true);
        }
Ejemplo n.º 3
0
        private static bool TryParseRss20Item(XElement itemElement, ExtensionManifestDirectory extensionManifestDirectory, out Rss20Item parsedItem)
        {
            parsedItem = default;

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

            parsedItem             = new Rss20Item();
            parsedItem.Title       = itemElement.Element("title")?.Value.Trim();
            parsedItem.Link        = itemElement.Element("link")?.Value.Trim();
            parsedItem.Description = itemElement.Element("description")?.Value.Trim();
            parsedItem.Author      = itemElement.Element("author")?.Value.Trim();
            parsedItem.Comments    = itemElement.Element("comments")?.Value.Trim();

            foreach (var categoryElement in itemElement.Elements("category"))
            {
                if (TryParseRss20Category(categoryElement, out var parsedCategory))
                {
                    parsedItem.Categories.Add(parsedCategory);
                }
            }

            foreach (var enclosureElement in itemElement.Elements("enclosure"))
            {
                if (TryParseRss20Enclosure(enclosureElement, out var parsedEnclosure))
                {
                    parsedItem.Enclosures.Add(parsedEnclosure);
                }
            }

            if (TryParseRss20Timestamp(itemElement.Element("pubDate"), out var parsedPubDate))
            {
                parsedItem.PubDate = parsedPubDate;
            }

            if (TryParseRss20Source(itemElement.Element("source"), out var parsedSource))
            {
                parsedItem.Source = parsedSource;
            }

            if (TryParseRss20Guid(itemElement.Element("guid"), out var parsedGuid))
            {
                parsedItem.Guid = parsedGuid;
            }

            // extensions
            ExtensibleEntityParser.ParseXElementExtensions(itemElement, extensionManifestDirectory, parsedItem);

            return(true);
        }
Ejemplo n.º 4
0
        private static bool TryParseRss10Image(XElement imageElement, XNamespace rss, ExtensionManifestDirectory extensionManifestDirectory, out Rss10Image parsedImage)
        {
            parsedImage = default;

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

            parsedImage       = new Rss10Image();
            parsedImage.About = imageElement.Attribute(_rdf + "about")?.Value;
            parsedImage.Title = imageElement.Element(rss + "title")?.Value.Trim();
            parsedImage.Url   = imageElement.Element(rss + "url")?.Value.Trim();
            parsedImage.Link  = imageElement.Element(rss + "link")?.Value.Trim();

            // extensions
            ExtensibleEntityParser.ParseXElementExtensions(imageElement, extensionManifestDirectory, parsedImage);

            return(true);
        }
Ejemplo n.º 5
0
        private static bool TryParseRss10Channel(XElement channelElement, XNamespace rss, ExtensionManifestDirectory extensionManifestDirectory, out Rss10Channel parsedChannel)
        {
            parsedChannel = default;

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

            parsedChannel             = new Rss10Channel();
            parsedChannel.About       = channelElement.Attribute(_rdf + "about")?.Value;
            parsedChannel.Title       = channelElement.Element(rss + "title")?.Value.Trim();
            parsedChannel.Link        = channelElement.Element(rss + "link")?.Value.Trim();
            parsedChannel.Description = channelElement.Element(rss + "description")?.Value.Trim();

            // extensions
            ExtensibleEntityParser.ParseXElementExtensions(channelElement, extensionManifestDirectory, parsedChannel);

            return(true);
        }
Ejemplo n.º 6
0
        private static bool TryParseRss10Item(XElement itemElement, XNamespace rss, ExtensionManifestDirectory extensionManifestDirectory, out Rss10Item parsedItem)
        {
            parsedItem = default;

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

            parsedItem             = new Rss10Item();
            parsedItem.About       = itemElement.Attribute(_rdf + "about")?.Value;
            parsedItem.Title       = itemElement.Element(rss + "title")?.Value.Trim();
            parsedItem.Link        = itemElement.Element(rss + "link")?.Value.Trim();
            parsedItem.Description = itemElement.Element(rss + "description")?.Value.Trim();

            // extensions
            ExtensibleEntityParser.ParseXElementExtensions(itemElement, extensionManifestDirectory, parsedItem);

            return(true);
        }
Ejemplo n.º 7
0
        private static bool TryParseRss20TextInput(XElement textInputElement, ExtensionManifestDirectory extensionManifestDirectory, out Rss20TextInput parsedTextInput)
        {
            parsedTextInput = default;

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

            parsedTextInput             = new Rss20TextInput();
            parsedTextInput.Title       = textInputElement.Element("title")?.Value.Trim();
            parsedTextInput.Description = textInputElement.Element("description")?.Value.Trim();
            parsedTextInput.Name        = textInputElement.Element("name")?.Value.Trim();
            parsedTextInput.Link        = textInputElement.Element("link")?.Value.Trim();

            // extensions
            ExtensibleEntityParser.ParseXElementExtensions(textInputElement, extensionManifestDirectory, parsedTextInput);

            return(true);
        }
        private static bool TryParseMediaRssLocation(XElement locationElement, ExtensionManifestDirectory extensionManifestDirectory, out MediaRssLocation parsedLocation)
        {
            parsedLocation = default;

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

            if (TryParseTimeSpanAttribute(locationElement.Attribute("start"), out var parsedStart))
            {
                // ReSharper disable once ConstantNullCoalescingCondition
                parsedLocation       = parsedLocation ?? new MediaRssLocation();
                parsedLocation.Start = parsedStart;
            }

            if (TryParseTimeSpanAttribute(locationElement.Attribute("end"), out var parsedEnd))
            {
                parsedLocation     = parsedLocation ?? new MediaRssLocation();
                parsedLocation.End = parsedEnd;
            }

            if (TryParseStringAttribute(locationElement.Attribute("description"), out var parsedDescription))
            {
                parsedLocation             = parsedLocation ?? new MediaRssLocation();
                parsedLocation.Description = parsedDescription;
            }

            var emptyBeforeExtensions = parsedLocation == null;

            // extensions
            parsedLocation = parsedLocation ?? new MediaRssLocation();
            ExtensibleEntityParser.ParseXElementExtensions(locationElement, extensionManifestDirectory, parsedLocation);

            if (emptyBeforeExtensions && !parsedLocation.Extensions.Any())
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 9
0
        public static bool TryParseAtom10Feed(XDocument document, out Atom10Feed parsedFeed, ExtensionManifestDirectory extensionManifestDirectory = null)
        {
            parsedFeed = default;

            XElement   feedElement = null;
            XNamespace atom        = null;

            foreach (var ns in Atom10Constants.RecognizedNamespaces)
            {
                atom        = ns;
                feedElement = document?.Element(atom + "feed");
                if (feedElement != null)
                {
                    break;
                }
            }

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

            if (extensionManifestDirectory == null)
            {
                extensionManifestDirectory = ExtensionManifestDirectory.DefaultForAtom;
            }

            parsedFeed = new Atom10Feed();

            parsedFeed.Lang = feedElement.Attribute(_xml + "lang")?.Value;
            parsedFeed.Base = feedElement.Attribute(_xml + "base")?.Value;

            parsedFeed.Id = feedElement.Element(atom + "id")?.Value.Trim();

            if (TryParseAtom10Text(feedElement.Element(atom + "title"), out var parsedTitle))
            {
                parsedFeed.Title = parsedTitle;
            }

            if (TryParseAtom10Timestamp(feedElement.Element(atom + "updated"), out var parsedUpdated))
            {
                parsedFeed.Updated = parsedUpdated;
            }

            foreach (var authorElement in feedElement.Elements(atom + "author"))
            {
                if (TryParseAtom10Person(authorElement, atom, out var parsedPerson))
                {
                    parsedFeed.Authors.Add(parsedPerson);
                }
            }

            foreach (var linkElement in feedElement.Elements(atom + "link"))
            {
                if (TryParseAtom10Link(linkElement, out var parsedLink))
                {
                    parsedFeed.Links.Add(parsedLink);
                }
            }

            foreach (var categoryElement in feedElement.Elements(atom + "category"))
            {
                if (TryParseAtom10Category(categoryElement, out var parsedCategory))
                {
                    parsedFeed.Categories.Add(parsedCategory);
                }
            }

            foreach (var contributorElement in feedElement.Elements(atom + "contributor"))
            {
                if (TryParseAtom10Person(contributorElement, atom, out var parsedPerson))
                {
                    parsedFeed.Contributors.Add(parsedPerson);
                }
            }

            if (TryParseAtom10Generator(feedElement.Element(atom + "generator"), out var parsedGenerator))
            {
                parsedFeed.Generator = parsedGenerator;
            }

            parsedFeed.Icon = feedElement.Element(atom + "icon")?.Value.Trim();
            parsedFeed.Logo = feedElement.Element(atom + "logo")?.Value.Trim();

            if (TryParseAtom10Text(feedElement.Element(atom + "rights"), out var parsedRights))
            {
                parsedFeed.Rights = parsedRights;
            }

            if (TryParseAtom10Text(feedElement.Element(atom + "subtitle"), out var parsedSubtitle))
            {
                parsedFeed.Subtitle = parsedSubtitle;
            }

            // entries
            foreach (var entryElement in feedElement.Elements(atom + "entry"))
            {
                if (TryParseAtom10Entry(entryElement, atom, extensionManifestDirectory, out var parsedEntry))
                {
                    parsedFeed.Entries.Add(parsedEntry);
                }
            }

            // extensions
            ExtensibleEntityParser.ParseXElementExtensions(feedElement, extensionManifestDirectory, parsedFeed);

            return(true);
        }
Ejemplo n.º 10
0
        private static bool TryParseAtom10Entry(XElement entryElement, XNamespace atom, ExtensionManifestDirectory extensionManifestDirectory, out Atom10Entry parsedEntry)
        {
            parsedEntry = default;

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

            parsedEntry = new Atom10Entry();

            parsedEntry.Id = entryElement.Element(atom + "id")?.Value.Trim();

            if (TryParseAtom10Text(entryElement.Element(atom + "title"), out var parsedTitle))
            {
                parsedEntry.Title = parsedTitle;
            }

            if (TryParseAtom10Timestamp(entryElement.Element(atom + "updated"), out var parsedUpdated))
            {
                parsedEntry.Updated = parsedUpdated;
            }

            foreach (var authorElement in entryElement.Elements(atom + "author"))
            {
                if (TryParseAtom10Person(authorElement, atom, out var parsedPerson))
                {
                    parsedEntry.Authors.Add(parsedPerson);
                }
            }

            if (TryParseAtom10Content(entryElement.Element(atom + "content"), out var parsedContent))
            {
                parsedEntry.Content = parsedContent;
            }

            foreach (var linkElement in entryElement.Elements(atom + "link"))
            {
                if (TryParseAtom10Link(linkElement, out var parsedLink))
                {
                    parsedEntry.Links.Add(parsedLink);
                }
            }

            if (TryParseAtom10Text(entryElement.Element(atom + "summary"), out var parsedSummary))
            {
                parsedEntry.Summary = parsedSummary;
            }

            foreach (var categoryElement in entryElement.Elements(atom + "category"))
            {
                if (TryParseAtom10Category(categoryElement, out var parsedCategory))
                {
                    parsedEntry.Categories.Add(parsedCategory);
                }
            }

            foreach (var contributorElement in entryElement.Elements(atom + "contributor"))
            {
                if (TryParseAtom10Person(contributorElement, atom, out var parsedPerson))
                {
                    parsedEntry.Contributors.Add(parsedPerson);
                }
            }

            if (TryParseAtom10Timestamp(entryElement.Element(atom + "published"), out var parsedPublished))
            {
                parsedEntry.Published = parsedPublished;
            }

            if (TryParseAtom10Text(entryElement.Element(atom + "rights"), out var parsedRights))
            {
                parsedEntry.Rights = parsedRights;
            }

            if (TryParseAtom10Source(entryElement.Element(atom + "source"), atom, out var parsedSource))
            {
                parsedEntry.Source = parsedSource;
            }

            // extensions
            ExtensibleEntityParser.ParseXElementExtensions(entryElement, extensionManifestDirectory, parsedEntry);

            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);
        }
Ejemplo n.º 12
0
        private static bool TryParseRss20Channel(XElement channelElement, ExtensionManifestDirectory extensionManifestDirectory, out Rss20Channel parsedChannel)
        {
            parsedChannel = default;

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

            parsedChannel                = new Rss20Channel();
            parsedChannel.Title          = channelElement.Element("title")?.Value.Trim();
            parsedChannel.Link           = channelElement.Element("link")?.Value.Trim();
            parsedChannel.Description    = channelElement.Element("description")?.Value.Trim();
            parsedChannel.Language       = channelElement.Element("language")?.Value.Trim();
            parsedChannel.Copyright      = channelElement.Element("copyright")?.Value.Trim();
            parsedChannel.ManagingEditor = channelElement.Element("managingEditor")?.Value.Trim();
            parsedChannel.WebMaster      = channelElement.Element("webMaster")?.Value.Trim();
            parsedChannel.Generator      = channelElement.Element("generator")?.Value.Trim();
            parsedChannel.Docs           = channelElement.Element("docs")?.Value.Trim();

            if (TryParseRss20Timestamp(channelElement.Element("pubDate"), out var parsedPubDate))
            {
                parsedChannel.PubDate = parsedPubDate;
            }

            if (TryParseRss20Timestamp(channelElement.Element("lastBuildDate"), out var parsedLastBuildDate))
            {
                parsedChannel.LastBuildDate = parsedLastBuildDate;
            }

            foreach (var categoryElement in channelElement.Elements("category"))
            {
                if (TryParseRss20Category(categoryElement, out var parsedCategory))
                {
                    parsedChannel.Categories.Add(parsedCategory);
                }
            }

            if (TryParseRss20Cloud(channelElement.Element("cloud"), out var parsedCloud))
            {
                parsedChannel.Cloud = parsedCloud;
            }

            if (TryParseRss20Ttl(channelElement.Element("ttl"), out var parsedTtl))
            {
                parsedChannel.Ttl = parsedTtl;
            }

            if (TryParseRss20Image(channelElement.Element("image"), extensionManifestDirectory, out var parsedImage))
            {
                parsedChannel.Image = parsedImage;
            }

            if (TryParseRss20TextInput(channelElement.Element("textInput"), extensionManifestDirectory, out var parsedTextInput))
            {
                parsedChannel.TextInput = parsedTextInput;
            }

            if (TryParseRss20SkipHours(channelElement.Element("skipHours"), out var parsedSkipHours))
            {
                parsedChannel.SkipHours = parsedSkipHours;
            }

            if (TryParseRss20SkipDays(channelElement.Element("skipDays"), out var parsedSkipDays))
            {
                parsedChannel.SkipDays = parsedSkipDays;
            }

            // extensions
            ExtensibleEntityParser.ParseXElementExtensions(channelElement, extensionManifestDirectory, parsedChannel);

            // items
            foreach (var itemElement in channelElement.Elements("item"))
            {
                if (TryParseRss20Item(itemElement, extensionManifestDirectory, out var parsedItem))
                {
                    parsedChannel.Items.Add(parsedItem);
                }
            }

            return(true);
        }