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); }
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); }
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)); }
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 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); }
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); }
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); }
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); }
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); }
protected override bool TryFormatXElementExtension(CreativeCommonsExtension extensionToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out IList <XElement> elements) => CreativeCommonsExtensionFormatter.TryFormatCreativeCommonsExtension(extensionToFormat, namespaceAliases, out elements);
protected override bool TryFormatXElementExtension(DublinCoreExtension extensionToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out IList <XElement> elements) => DublinCoreExtensionFormatter.TryFormatDublinCoreExtension(extensionToFormat, namespaceAliases, out elements);
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); }
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); }
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); }
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); }
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); }
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); }
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); }
protected override bool TryParseXElementExtension(XElement parentElement, ExtensionManifestDirectory extensionManifestDirectory, out DublinCoreExtension extension) => DublinCoreExtensionParser.TryParseDublinCoreExtension(parentElement, out extension);
protected override bool TryParseXElementExtension(XElement parentElement, ExtensionManifestDirectory extensionManifestDirectory, out Rss10ContentExtension extension) => Rss10ContentExtensionParser.TryParseRss10ContentExtension(parentElement, out extension);
protected override bool TryParseXElementExtension(XElement parentElement, ExtensionManifestDirectory extensionManifestDirectory, out CreativeCommonsExtension extension) => CreativeCommonsExtensionParser.TryParseCreativeCommonsExtension(parentElement, out extension);
protected override bool TryParseXElementExtension(XElement parentElement, ExtensionManifestDirectory extensionManifestDirectory, out MediaRssExtension extension) => MediaRssExtensionParser.TryParseMediaRssExtension(parentElement, extensionManifestDirectory, out extension);
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); }
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); }
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); }
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); }
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); }
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); }
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 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); }