コード例 #1
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);
        }
コード例 #2
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);
        }
コード例 #3
0
            protected override bool TryParseJObjectExtension(JObject parentObject, ExtensionManifestDirectory extensionManifestDirectory, out BlueShedSampleExtension extension)
            {
                extension = default;

                var property = parentObject.Property("_blue_shed");

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

                if (property.Value?.Type != JTokenType.Object)
                {
                    return(false);
                }

                return(TryParseBlueShedSampleExtensionObject((JObject)property.Value, out extension));
            }
コード例 #4
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);
        }
コード例 #5
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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        public static bool TryParseMediaRssExtension(XElement parentElement, ExtensionManifestDirectory extensionManifestDirectory, out MediaRssExtension extension)
        {
            extension = null;

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

            foreach (var ns in MediaRssExtensionConstants.RecognizedNamespaces)
            {
                if (parentElement.Name.Namespace == ns)
                {
                    continue; // skip because we'd be processing Media RSS extension in Media RSS element
                }
                // groups
                foreach (var groupElement in parentElement.Elements(ns + "group"))
                {
                    if (TryParseMediaRssGroup(groupElement, ns, extensionManifestDirectory, out var parsedGroup))
                    {
                        extension = extension ?? new MediaRssExtension();
                        extension.Groups.Add(parsedGroup);
                    }
                }

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

                // container
                ParseMediaRssContainer(parentElement, ns, extensionManifestDirectory, ref extension);
            }

            return(extension != null);
        }
コード例 #8
0
        private static bool TryFormatMediaRssLocation(MediaRssLocation locationToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement locationElement)
        {
            locationElement = default;

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

            var childObjects = new List <object>();

            if (MinutesSecondsTimeSpanFormatter.TryFormatTimeAsString(locationToFormat.Start, out var startFormatted))
            {
                childObjects.Add(new XAttribute("start", startFormatted));
            }

            if (MinutesSecondsTimeSpanFormatter.TryFormatTimeAsString(locationToFormat.End, out var endFormatted))
            {
                childObjects.Add(new XAttribute("end", endFormatted));
            }

            if (!string.IsNullOrEmpty(locationToFormat.Description))
            {
                childObjects.Add(new XAttribute("description", locationToFormat.Description));
            }

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

            if (!childObjects.Any())
            {
                return(false);
            }

            locationElement = new XElement(_media + "location", childObjects);
            return(true);
        }
コード例 #9
0
        private static bool TryFormatMediaRssGroup(MediaRssGroup groupToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement groupElement)
        {
            groupElement = default;

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

            var childElements = new List <XElement>();

            // contents
            foreach (var contentToFormat in groupToFormat.Contents ?? Enumerable.Empty <MediaRssContent>())
            {
                if (TryFormatMediaRssContent(contentToFormat, namespaceAliases, extensionManifestDirectory, out var contentElement))
                {
                    childElements.Add(contentElement);
                }
            }

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

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

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

            groupElement = new XElement(_media + "group", childElements);
            return(true);
        }
コード例 #10
0
 protected override bool TryFormatXElementExtension(CreativeCommonsExtension extensionToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out IList <XElement> elements)
 => CreativeCommonsExtensionFormatter.TryFormatCreativeCommonsExtension(extensionToFormat, namespaceAliases, out elements);
コード例 #11
0
 protected override bool TryFormatXElementExtension(DublinCoreExtension extensionToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out IList <XElement> elements)
 => DublinCoreExtensionFormatter.TryFormatDublinCoreExtension(extensionToFormat, namespaceAliases, out elements);
コード例 #12
0
        public static bool TryFormatAtom10Feed(Atom10Feed feed, out XDocument document, ExtensionManifestDirectory extensionManifestDirectory = null)
        {
            document = default;

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

            document = new XDocument();

            var feedElement = new XElement(_atom + "feed");

            document.Add(feedElement);

            var namespaceAliases = new XNamespaceAliasSet();

            namespaceAliases.EnsureNamespaceAlias(alias: null, _atom);

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

            if (TryFormatAtom10OptionalTextAttribute(feed.Lang, _xml + "lang", out var langAttribute))
            {
                feedElement.Add(langAttribute);
            }

            if (TryFormatAtom10OptionalTextAttribute(feed.Base, _xml + "base", out var baseAttribute))
            {
                feedElement.Add(baseAttribute);
            }

            if (TryFormatAtom10RequiredTextElement(feed.Id, _atom + "id", out var idElement))
            {
                feedElement.Add(idElement);
            }

            if (TryFormatAtom10TextRequired(feed.Title, _atom + "title", out var titleElement))
            {
                feedElement.Add(titleElement);
            }

            if (TryFormatAtom10TimestampRequired(feed.Updated, _atom + "updated", out var updatedElement))
            {
                feedElement.Add(updatedElement);
            }

            foreach (var authorToFormat in feed.Authors)
            {
                if (TryFormatAtom10Person(authorToFormat, _atom + "author", out var authorElement))
                {
                    feedElement.Add(authorElement);
                }
            }

            foreach (var linkToFormat in feed.Links)
            {
                if (TryFormatAtom10Link(linkToFormat, out var linkElement))
                {
                    feedElement.Add(linkElement);
                }
            }

            foreach (var categoryToFormat in feed.Categories)
            {
                if (TryFormatAtom10Category(categoryToFormat, out var categoryElement))
                {
                    feedElement.Add(categoryElement);
                }
            }

            foreach (var contributorToFormat in feed.Contributors)
            {
                if (TryFormatAtom10Person(contributorToFormat, _atom + "contributor", out var contributorElement))
                {
                    feedElement.Add(contributorElement);
                }
            }

            if (TryFormatAtom10Generator(feed.Generator, out var generatorElement))
            {
                feedElement.Add(generatorElement);
            }

            if (TryFormatAtom10OptionalTextElement(feed.Icon, _atom + "icon", out var iconElement))
            {
                feedElement.Add(iconElement);
            }

            if (TryFormatAtom10OptionalTextElement(feed.Logo, _atom + "logo", out var logoElement))
            {
                feedElement.Add(logoElement);
            }

            if (TryFormatAtom10TextOptional(feed.Rights, _atom + "rights", out var rightsElement))
            {
                feedElement.Add(rightsElement);
            }

            if (TryFormatAtom10TextOptional(feed.Subtitle, _atom + "subtitle", out var subtitleElement))
            {
                feedElement.Add(subtitleElement);
            }

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

            // entries
            foreach (var entryToFormat in feed.Entries)
            {
                if (TryFormatAtom10Entry(entryToFormat, namespaceAliases, extensionManifestDirectory, out var entryElement))
                {
                    feedElement.Add(entryElement);
                }
            }

            foreach (var namespaceAlias in namespaceAliases.OrderBy(x => x.Name.LocalName))
            {
                feedElement.Add(namespaceAlias);
            }

            return(true);
        }
コード例 #13
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);
        }
コード例 #14
0
        public static bool TryParseRss10Feed(XDocument document, out Rss10Feed parsedFeed, ExtensionManifestDirectory extensionManifestDirectory = null)
        {
            parsedFeed = default;

            var rdfElement = document?.Element(_rdf + "RDF");

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

            var        rssNamespace = rdfElement.Attribute("xmlns")?.Value;
            XNamespace rss          = null;

            foreach (var ns in Rss10Constants.RecognizedNamespaces)
            {
                rss = ns;
                if (rssNamespace == ns.NamespaceName)
                {
                    break;
                }
            }

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

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

            if (!TryParseRss10Channel(rdfElement.Element(rss + "channel"), rss, extensionManifestDirectory, out var parsedChannel))
            {
                return(false);
            }

            if (TryParseRss10Image(rdfElement.Element(rss + "image"), rss, extensionManifestDirectory, out var parsedImage))
            {
                parsedChannel.Image = parsedImage;
            }

            if (TryParseRss10TextInput(rdfElement.Element(rss + "textinput"), rss, extensionManifestDirectory, out var parsedTextInput))
            {
                parsedChannel.TextInput = parsedTextInput;
            }

            // items
            foreach (var itemElement in rdfElement.Elements(rss + "item"))
            {
                if (TryParseRss10Item(itemElement, rss, extensionManifestDirectory, out var parsedItem))
                {
                    parsedChannel.Items.Add(parsedItem);
                }
            }

            parsedFeed         = new Rss10Feed();
            parsedFeed.Channel = parsedChannel;
            return(true);
        }
コード例 #15
0
        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);
        }
コード例 #16
0
        public static bool TryFormatJsonFeed(JsonFeed feedToFormat, out JObject feedObject, ExtensionManifestDirectory extensionManifestDirectory = null)
        {
            feedObject = default;

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

            feedObject = new JObject
            {
                new JProperty("version", new JValue(JsonFeedConstants.Version)),
            };

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

            if (TryFormatJsonFeedRequiredStringProperty("title", feedToFormat.Title, out var titleProperty))
            {
                feedObject.Add(titleProperty);
            }

            if (TryFormatJsonFeedOptionalStringProperty("home_page_url", feedToFormat.HomePageUrl, out var homePageUrlProperty))
            {
                feedObject.Add(homePageUrlProperty);
            }

            if (TryFormatJsonFeedOptionalStringProperty("feed_url", feedToFormat.FeedUrl, out var feedUrlProperty))
            {
                feedObject.Add(feedUrlProperty);
            }

            if (TryFormatJsonFeedOptionalStringProperty("description", feedToFormat.Description, out var descriptionProperty))
            {
                feedObject.Add(descriptionProperty);
            }

            if (TryFormatJsonFeedOptionalStringProperty("user_comment", feedToFormat.UserComment, out var userCommentProperty))
            {
                feedObject.Add(userCommentProperty);
            }

            if (TryFormatJsonFeedOptionalStringProperty("next_url", feedToFormat.NextUrl, out var nextUrlProperty))
            {
                feedObject.Add(nextUrlProperty);
            }

            if (TryFormatJsonFeedOptionalStringProperty("icon", feedToFormat.Icon, out var iconProperty))
            {
                feedObject.Add(iconProperty);
            }

            if (TryFormatJsonFeedOptionalStringProperty("favicon", feedToFormat.Favicon, out var faviconProperty))
            {
                feedObject.Add(faviconProperty);
            }

            if (TryFormatJsonFeedAuthorProperty("author", feedToFormat.Author, out var authorProperty))
            {
                feedObject.Add(authorProperty);
            }

            if (TryFormatJsonFeedOptionalBoolProperty("expired", feedToFormat.Expired, out var expiredProperty))
            {
                feedObject.Add(expiredProperty);
            }

            if (TryFormatJsonFeedHubsProperty("hubs", feedToFormat.Hubs, out var hubsProperty))
            {
                feedObject.Add(hubsProperty);
            }

            if (TryFormatJsonFeedItemsProperty("items", feedToFormat.Items, extensionManifestDirectory, out var itemsProperty))
            {
                feedObject.Add(itemsProperty);
            }

            // extensions
            if (ExtensibleEntityFormatter.TryFormatJObjectExtensions(feedToFormat, extensionManifestDirectory, out var extensionTokens))
            {
                feedObject.AddRange(extensionTokens);
            }

            return(true);
        }
コード例 #17
0
        private static bool TryFormatAtom10Entry(Atom10Entry entryToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement entryElement)
        {
            entryElement = default;

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

            entryElement = new XElement(_atom + "entry");

            if (TryFormatAtom10RequiredTextElement(entryToFormat.Id, _atom + "id", out var idElement))
            {
                entryElement.Add(idElement);
            }

            if (TryFormatAtom10TextRequired(entryToFormat.Title, _atom + "title", out var titleElement))
            {
                entryElement.Add(titleElement);
            }

            if (TryFormatAtom10TimestampRequired(entryToFormat.Updated, _atom + "updated", out var updatedElement))
            {
                entryElement.Add(updatedElement);
            }

            foreach (var authorToFormat in entryToFormat.Authors)
            {
                if (TryFormatAtom10Person(authorToFormat, _atom + "author", out var authorElement))
                {
                    entryElement.Add(authorElement);
                }
            }

            if (TryFormatAtom10Content(entryToFormat.Content, out var contentElement))
            {
                entryElement.Add(contentElement);
            }

            foreach (var linkToFormat in entryToFormat.Links)
            {
                if (TryFormatAtom10Link(linkToFormat, out var linkElement))
                {
                    entryElement.Add(linkElement);
                }
            }

            if (TryFormatAtom10TextOptional(entryToFormat.Summary, _atom + "summary", out var summaryElement))
            {
                entryElement.Add(summaryElement);
            }

            foreach (var categoryToFormat in entryToFormat.Categories)
            {
                if (TryFormatAtom10Category(categoryToFormat, out var categoryElement))
                {
                    entryElement.Add(categoryElement);
                }
            }

            foreach (var contributorToFormat in entryToFormat.Contributors)
            {
                if (TryFormatAtom10Person(contributorToFormat, _atom + "contributor", out var contributorElement))
                {
                    entryElement.Add(contributorElement);
                }
            }

            if (TryFormatAtom10TimestampOptional(entryToFormat.Published, _atom + "published", out var publishedElement))
            {
                entryElement.Add(publishedElement);
            }

            if (TryFormatAtom10TextOptional(entryToFormat.Rights, _atom + "rights", out var rightsElement))
            {
                entryElement.Add(rightsElement);
            }

            if (TryFormatAtom10Source(entryToFormat.Source, out var sourceElement))
            {
                entryElement.Add(sourceElement);
            }

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

            return(true);
        }
コード例 #18
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);
        }
コード例 #19
0
 protected override bool TryParseXElementExtension(XElement parentElement, ExtensionManifestDirectory extensionManifestDirectory, out DublinCoreExtension extension)
 => DublinCoreExtensionParser.TryParseDublinCoreExtension(parentElement, out extension);
コード例 #20
0
 protected override bool TryParseXElementExtension(XElement parentElement, ExtensionManifestDirectory extensionManifestDirectory, out Rss10ContentExtension extension)
 => Rss10ContentExtensionParser.TryParseRss10ContentExtension(parentElement, out extension);
コード例 #21
0
 protected override bool TryParseXElementExtension(XElement parentElement, ExtensionManifestDirectory extensionManifestDirectory, out CreativeCommonsExtension extension)
 => CreativeCommonsExtensionParser.TryParseCreativeCommonsExtension(parentElement, out extension);
コード例 #22
0
 protected override bool TryParseXElementExtension(XElement parentElement, ExtensionManifestDirectory extensionManifestDirectory, out MediaRssExtension extension)
 => MediaRssExtensionParser.TryParseMediaRssExtension(parentElement, extensionManifestDirectory, out extension);
コード例 #23
0
            protected override bool TryFormatJObjectExtension(BlueShedSampleExtension extensionToFormat, ExtensionManifestDirectory extensionManifestDirectory, out IList <JToken> tokens)
            {
                tokens = default;

                if (!TryFormatBlueShedSampleExtensionObject(extensionToFormat, out var extensionObject))
                {
                    return(false);
                }

                tokens = new JToken[] { new JProperty("_blue_shed", extensionObject) };
                return(true);
            }
コード例 #24
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);
        }
コード例 #25
0
        public static bool TryFormatMediaRssExtension(MediaRssExtension extensionToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out IList <XElement> elements)
        {
            elements = default;

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

            elements = new List <XElement>();

            // groups
            foreach (var groupToFormat in extensionToFormat.Groups ?? Enumerable.Empty <MediaRssGroup>())
            {
                if (TryFormatMediaRssGroup(groupToFormat, namespaceAliases, extensionManifestDirectory, out var groupElement))
                {
                    elements.Add(groupElement);
                }
            }

            // contents
            foreach (var contentToFormat in extensionToFormat.Contents ?? Enumerable.Empty <MediaRssContent>())
            {
                if (TryFormatMediaRssContent(contentToFormat, namespaceAliases, extensionManifestDirectory, out var contentElement))
                {
                    elements.Add(contentElement);
                }
            }

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

            if (!elements.Any())
            {
                return(false);
            }

            namespaceAliases.EnsureNamespaceAlias(MediaRssExtensionConstants.NamespaceAlias, _media);
            return(true);
        }
コード例 #26
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);
        }
コード例 #27
0
        private static bool TryFormatMediaRssContainer(MediaRssContainer containerToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out IList <XElement> elements)
        {
            elements = default;

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

            elements = new List <XElement>();

            // optional elements

            foreach (var ratingToFormat in containerToFormat.Ratings ?? Enumerable.Empty <MediaRssRating>())
            {
                if (TryFormatMediaRssRating(ratingToFormat, out var ratingElement))
                {
                    elements.Add(ratingElement);
                }
            }

            if (TryFormatMediaRssTypedText(containerToFormat.Title, "title", out var titleElement))
            {
                elements.Add(titleElement);
            }

            if (TryFormatMediaRssTypedText(containerToFormat.Description, "description", out var descriptionElement))
            {
                elements.Add(descriptionElement);
            }

            if (TryFormatMediaRssKeywords(containerToFormat.Keywords, out var keywordsElement))
            {
                elements.Add(keywordsElement);
            }

            foreach (var thumbnailToFormat in containerToFormat.Thumbnails ?? Enumerable.Empty <MediaRssThumbnail>())
            {
                if (TryFormatMediaRssThumbnail(thumbnailToFormat, out var thumbnailElement))
                {
                    elements.Add(thumbnailElement);
                }
            }

            foreach (var categoryToFormat in containerToFormat.Categories ?? Enumerable.Empty <MediaRssCategory>())
            {
                if (TryFormatMediaRssCategory(categoryToFormat, out var categoryElement))
                {
                    elements.Add(categoryElement);
                }
            }

            foreach (var hashToFormat in containerToFormat.Hashes ?? Enumerable.Empty <MediaRssHash>())
            {
                if (TryFormatMediaRssHash(hashToFormat, out var hashElement))
                {
                    elements.Add(hashElement);
                }
            }

            if (TryFormatMediaRssPlayer(containerToFormat.Player, out var playerElement))
            {
                elements.Add(playerElement);
            }

            foreach (var creditToFormat in containerToFormat.Credits ?? Enumerable.Empty <MediaRssCredit>())
            {
                if (TryFormatMediaRssCredit(creditToFormat, out var creditElement))
                {
                    elements.Add(creditElement);
                }
            }

            if (TryFormatMediaRssCopyright(containerToFormat.Copyright, out var copyrightElement))
            {
                elements.Add(copyrightElement);
            }

            foreach (var textToFormat in containerToFormat.Texts ?? Enumerable.Empty <MediaRssText>())
            {
                if (TryFormatMediaRssText(textToFormat, out var textElement))
                {
                    elements.Add(textElement);
                }
            }

            foreach (var restrictionToFormat in containerToFormat.Restrictions ?? Enumerable.Empty <MediaRssRestriction>())
            {
                if (TryFormatMediaRssRestriction(restrictionToFormat, out var restrictionElement))
                {
                    elements.Add(restrictionElement);
                }
            }

            if (TryFormatMediaRssCommunity(containerToFormat.Community, out var communityElement))
            {
                elements.Add(communityElement);
            }

            if (TryFormatMediaRssStringCollectionElements(containerToFormat.Comments, "comments", "comment", out var commentsElement))
            {
                elements.Add(commentsElement);
            }

            foreach (var embedToFormat in containerToFormat.Embeds ?? Enumerable.Empty <MediaRssEmbed>())
            {
                if (TryFormatMediaRssEmbed(embedToFormat, out var embedElement))
                {
                    elements.Add(embedElement);
                }
            }

            if (TryFormatMediaRssStringCollectionElements(containerToFormat.Responses, "responses", "response", out var responsesElement))
            {
                elements.Add(responsesElement);
            }

            if (TryFormatMediaRssStringCollectionElements(containerToFormat.BackLinks, "backLinks", "backLink", out var backLinksElement))
            {
                elements.Add(backLinksElement);
            }

            if (TryFormatMediaRssStatus(containerToFormat.Status, out var statusElement))
            {
                elements.Add(statusElement);
            }

            foreach (var priceToFormat in containerToFormat.Prices ?? Enumerable.Empty <MediaRssPrice>())
            {
                if (TryFormatMediaRssPrice(priceToFormat, out var priceElement))
                {
                    elements.Add(priceElement);
                }
            }

            if (TryFormatMediaRssLink(containerToFormat.License, "license", out var licenseElement))
            {
                elements.Add(licenseElement);
            }

            foreach (var subTitleToFormat in containerToFormat.SubTitles ?? Enumerable.Empty <MediaRssLink>())
            {
                if (TryFormatMediaRssLink(subTitleToFormat, "subTitle", out var subTitleElement))
                {
                    elements.Add(subTitleElement);
                }
            }

            foreach (var peerLinkToFormat in containerToFormat.PeerLinks ?? Enumerable.Empty <MediaRssLink>())
            {
                if (TryFormatMediaRssLink(peerLinkToFormat, "peerLink", out var peerLinkElement))
                {
                    elements.Add(peerLinkElement);
                }
            }

            foreach (var locationToFormat in containerToFormat.Locations ?? Enumerable.Empty <MediaRssLocation>())
            {
                if (TryFormatMediaRssLocation(locationToFormat, namespaceAliases, extensionManifestDirectory, out var locationElement))
                {
                    elements.Add(locationElement);
                }
            }

            if (TryFormatMediaRssRights(containerToFormat.Rights, out var rightsElement))
            {
                elements.Add(rightsElement);
            }

            if (TryFormatMediaRssScenes(containerToFormat.Scenes, out var scenesElement))
            {
                elements.Add(scenesElement);
            }

            if (!elements.Any())
            {
                return(false);
            }

            return(true);
        }
コード例 #28
0
        private static bool TryFormatJsonFeedItemsProperty(string propertyName, IList <JsonFeedItem> itemsToFormat, ExtensionManifestDirectory extensionManifestDirectory, out JProperty itemsProperty)
        {
            var itemsArray = new JArray();

            if (itemsToFormat != null)
            {
                foreach (var itemToFormat in itemsToFormat)
                {
                    if (!TryFormatJsonFeedItemObject(itemToFormat, extensionManifestDirectory, out var itemObject))
                    {
                        continue;
                    }

                    itemsArray.Add(itemObject);
                }
            }

            itemsProperty = new JProperty(propertyName, itemsArray);
            return(true);
        }
コード例 #29
0
        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);
        }
コード例 #30
0
        private static bool TryFormatJsonFeedItemObject(JsonFeedItem itemToFormat, ExtensionManifestDirectory extensionManifestDirectory, out JObject itemObject)
        {
            itemObject = default;

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

            itemObject = new JObject();

            if (TryFormatJsonFeedRequiredStringProperty("id", itemToFormat.Id, out var idProperty))
            {
                itemObject.Add(idProperty);
            }

            if (TryFormatJsonFeedOptionalStringProperty("url", itemToFormat.Url, out var urlProperty))
            {
                itemObject.Add(urlProperty);
            }

            if (TryFormatJsonFeedOptionalStringProperty("external_url", itemToFormat.ExternalUrl, out var externalUrlProperty))
            {
                itemObject.Add(externalUrlProperty);
            }

            if (TryFormatJsonFeedOptionalStringProperty("title", itemToFormat.Title, out var titleProperty))
            {
                itemObject.Add(titleProperty);
            }

            if (TryFormatJsonFeedOptionalStringProperty("content_html", itemToFormat.ContentHtml, out var contentHtmlProperty))
            {
                itemObject.Add(contentHtmlProperty);
            }

            if (TryFormatJsonFeedOptionalStringProperty("content_text", itemToFormat.ContentText, out var contentTextProperty))
            {
                itemObject.Add(contentTextProperty);
            }

            if (TryFormatJsonFeedOptionalStringProperty("summary", itemToFormat.Summary, out var summaryProperty))
            {
                itemObject.Add(summaryProperty);
            }

            if (TryFormatJsonFeedOptionalStringProperty("image", itemToFormat.Image, out var imageProperty))
            {
                itemObject.Add(imageProperty);
            }

            if (TryFormatJsonFeedOptionalStringProperty("banner_image", itemToFormat.BannerImage, out var bannerImageProperty))
            {
                itemObject.Add(bannerImageProperty);
            }

            if (TryFormatJsonFeedOptionalTimestampProperty("date_published", itemToFormat.DatePublished, out var datePublishedProperty))
            {
                itemObject.Add(datePublishedProperty);
            }

            if (TryFormatJsonFeedOptionalTimestampProperty("date_modified", itemToFormat.DateModified, out var dateModifiedProperty))
            {
                itemObject.Add(dateModifiedProperty);
            }

            if (TryFormatJsonFeedAuthorProperty("author", itemToFormat.Author, out var authorProperty))
            {
                itemObject.Add(authorProperty);
            }

            if (TryFormatJsonFeedTagsProperty("tags", itemToFormat.Tags, out var tagsProperty))
            {
                itemObject.Add(tagsProperty);
            }

            if (TryFormatJsonFeedAttachmentsProperty("attachments", itemToFormat.Attachments, out var attachmentsProperty))
            {
                itemObject.Add(attachmentsProperty);
            }

            // extensions
            if (ExtensibleEntityFormatter.TryFormatJObjectExtensions(itemToFormat, extensionManifestDirectory, out var extensionTokens))
            {
                itemObject.AddRange(extensionTokens);
            }

            return(true);
        }