Пример #1
0
        private static bool TryFormatRss10Channel(Rss10Channel channelToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement channelElement)
        {
            channelElement = default;

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

            channelElement = new XElement(_rss + "channel");

            channelElement.Add(new XAttribute(_rdf + "about", channelToFormat.About ?? ""));

            channelElement.Add(new XElement(_rss + "title", channelToFormat.Title ?? ""));
            channelElement.Add(new XElement(_rss + "link", channelToFormat.Link ?? ""));
            channelElement.Add(new XElement(_rss + "description", channelToFormat.Description ?? ""));

            if (TryFormatRss10Image(channelToFormat.Image, referenceOnly: true, namespaceAliases: namespaceAliases, extensionManifestDirectory, out var imageElement))
            {
                channelElement.Add(imageElement);
            }

            if (TryFormatRss10TextInput(channelToFormat.TextInput, referenceOnly: true, namespaceAliases: namespaceAliases, extensionManifestDirectory, out var textInputElement))
            {
                channelElement.Add(textInputElement);
            }

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

            // items
            var liElements = new List <XElement>();

            foreach (var itemToFormat in channelToFormat.Items)
            {
                if (TryFormatRss10Item(itemToFormat, referenceOnly: true, namespaceAliases: namespaceAliases, extensionManifestDirectory, itemElement: out var liElement))
                {
                    liElements.Add(liElement);
                }
            }

            if (liElements.Any())
            {
                var itemsElement = new XElement(_rss + "items");
                var seqElement   = new XElement(_rdf + "Seq");
                seqElement.AddRange(liElements);
                itemsElement.Add(seqElement);
                channelElement.Add(itemsElement);
            }

            return(true);
        }
Пример #2
0
        private static bool TryFormatRss20Image(Rss20Image imageToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement imageElement)
        {
            imageElement = default;

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

            imageElement = new XElement("image");

            imageElement.Add(new XElement("url")
            {
                Value = imageToFormat.Url ?? ""
            });
            imageElement.Add(new XElement("title")
            {
                Value = imageToFormat.Title ?? ""
            });
            imageElement.Add(new XElement("link")
            {
                Value = imageToFormat.Link ?? ""
            });

            if (imageToFormat.Height != null)
            {
                var heightString = imageToFormat.Height.Value.ToString(CultureInfo.InvariantCulture);
                imageElement.Add(new XElement("height")
                {
                    Value = heightString
                });
            }

            if (imageToFormat.Width != null)
            {
                var widthString = imageToFormat.Width.Value.ToString(CultureInfo.InvariantCulture);
                imageElement.Add(new XElement("width")
                {
                    Value = widthString
                });
            }

            if (TryFormatOptionalTextElement(imageToFormat.Description, "description", out var descriptionElement))
            {
                imageElement.Add(descriptionElement);
            }

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

            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);
        }
Пример #4
0
        private static bool TryFormatRss10TextInput(Rss10TextInput textInputToFormat, bool referenceOnly, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement textInputElement)
        {
            textInputElement = default;

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

            textInputElement = referenceOnly
                ? new XElement(_rss + "textinput", new XAttribute(_rdf + "resource", textInputToFormat.About ?? ""))
                : new XElement(_rss + "textinput", new XAttribute(_rdf + "about", textInputToFormat.About ?? ""));

            if (referenceOnly)
            {
                return(true);
            }

            textInputElement.Add(new XElement(_rss + "title")
            {
                Value = textInputToFormat.Title ?? ""
            });
            textInputElement.Add(new XElement(_rss + "description")
            {
                Value = textInputToFormat.Description ?? ""
            });
            textInputElement.Add(new XElement(_rss + "name")
            {
                Value = textInputToFormat.Name ?? ""
            });
            textInputElement.Add(new XElement(_rss + "link")
            {
                Value = textInputToFormat.Link ?? ""
            });

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

            return(true);
        }
        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);
        }
Пример #6
0
        private static bool TryFormatRss10Item(Rss10Item itemToFormat, bool referenceOnly, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement itemElement)
        {
            itemElement = default;

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

            itemElement = referenceOnly
                ? new XElement(_rdf + "li", new XAttribute("resource", itemToFormat.About ?? ""))
                : new XElement(_rss + "item", new XAttribute(_rdf + "about", itemToFormat.About ?? ""));

            if (referenceOnly)
            {
                return(true);
            }

            itemElement.Add(new XElement(_rss + "title")
            {
                Value = itemToFormat.Title ?? ""
            });
            itemElement.Add(new XElement(_rss + "link")
            {
                Value = itemToFormat.Link ?? ""
            });

            if (TryFormatOptionalTextElement(itemToFormat.Description, _rss + "description", out var descriptionElement))
            {
                itemElement.Add(descriptionElement);
            }

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

            return(true);
        }
Пример #7
0
        private static bool TryFormatRss10Image(Rss10Image imageToFormat, bool referenceOnly, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement imageElement)
        {
            imageElement = default;

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

            imageElement = referenceOnly
                ? new XElement(_rss + "image", new XAttribute(_rdf + "resource", imageToFormat.About ?? ""))
                : new XElement(_rss + "image", new XAttribute(_rdf + "about", imageToFormat.About ?? ""));

            if (referenceOnly)
            {
                return(true);
            }

            imageElement.Add(new XElement(_rss + "title")
            {
                Value = imageToFormat.Title ?? ""
            });
            imageElement.Add(new XElement(_rss + "url")
            {
                Value = imageToFormat.Url ?? ""
            });
            imageElement.Add(new XElement(_rss + "link")
            {
                Value = imageToFormat.Link ?? ""
            });

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

            return(true);
        }
Пример #8
0
        private static bool TryFormatRss20TextInput(Rss20TextInput textInputToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement textInputElement)
        {
            textInputElement = default;

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

            textInputElement = new XElement("textInput");

            textInputElement.Add(new XElement("title")
            {
                Value = textInputToFormat.Title ?? ""
            });
            textInputElement.Add(new XElement("description")
            {
                Value = textInputToFormat.Description ?? ""
            });
            textInputElement.Add(new XElement("name")
            {
                Value = textInputToFormat.Name ?? ""
            });
            textInputElement.Add(new XElement("link")
            {
                Value = textInputToFormat.Link ?? ""
            });

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

            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);
        }
Пример #10
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);
        }
Пример #11
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);
        }
Пример #12
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);
        }
Пример #13
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);
        }
Пример #14
0
        private static bool TryFormatRss20Channel(Rss20Channel channelToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement channelElement)
        {
            channelElement = default;

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

            channelElement = new XElement("channel");

            channelElement.Add(new XElement("title", channelToFormat.Title ?? ""));
            channelElement.Add(new XElement("link", channelToFormat.Link ?? ""));
            channelElement.Add(new XElement("description", channelToFormat.Description ?? ""));

            if (TryFormatOptionalTextElement(channelToFormat.Language, "language", out var languageElement))
            {
                channelElement.Add(languageElement);
            }

            if (TryFormatOptionalTextElement(channelToFormat.Copyright, "copyright", out var copyrightElement))
            {
                channelElement.Add(copyrightElement);
            }

            if (TryFormatOptionalTextElement(channelToFormat.ManagingEditor, "managingEditor", out var managingEditorElement))
            {
                channelElement.Add(managingEditorElement);
            }

            if (TryFormatOptionalTextElement(channelToFormat.WebMaster, "webMaster", out var webMasterElement))
            {
                channelElement.Add(webMasterElement);
            }

            if (TryFormatOptionalTextElement(channelToFormat.Generator, "generator", out var generatorElement))
            {
                channelElement.Add(generatorElement);
            }

            if (TryFormatOptionalTextElement(channelToFormat.Docs, "docs", out var docsElement))
            {
                channelElement.Add(docsElement);
            }

            if (TryFormatRss20Timestamp(channelToFormat.PubDate, "pubDate", out var pubDateElement))
            {
                channelElement.Add(pubDateElement);
            }

            if (TryFormatRss20Timestamp(channelToFormat.LastBuildDate, "lastBuildDate", out var lastBuildDateElement))
            {
                channelElement.Add(lastBuildDateElement);
            }

            foreach (var categoryToFormat in channelToFormat.Categories)
            {
                if (TryFormatRss20Category(categoryToFormat, out var categoryElement))
                {
                    channelElement.Add(categoryElement);
                }
            }

            if (TryFormatRss20Cloud(channelToFormat.Cloud, out var cloudElement))
            {
                channelElement.Add(cloudElement);
            }

            if (TryFormatRss20Ttl(channelToFormat.Ttl, out var ttlElement))
            {
                channelElement.Add(ttlElement);
            }

            if (TryFormatRss20Image(channelToFormat.Image, namespaceAliases, extensionManifestDirectory, out var imageElement))
            {
                channelElement.Add(imageElement);
            }

            if (TryFormatRss20TextInput(channelToFormat.TextInput, namespaceAliases, extensionManifestDirectory, out var textInputElement))
            {
                channelElement.Add(textInputElement);
            }

            if (TryFormatRss20SkipHours(channelToFormat.SkipHours, out var skipHoursElement))
            {
                channelElement.Add(skipHoursElement);
            }

            if (TryFormatRss20SkipDays(channelToFormat.SkipDays, out var skipDaysElement))
            {
                channelElement.Add(skipDaysElement);
            }

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

            // items
            foreach (var itemToFormat in channelToFormat.Items)
            {
                if (TryFormatRss20Item(itemToFormat, namespaceAliases, extensionManifestDirectory, out var itemElement))
                {
                    channelElement.Add(itemElement);
                }
            }

            return(true);
        }
Пример #15
0
        private static bool TryFormatRss20Item(Rss20Item itemToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement itemElement)
        {
            itemElement = default;

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

            itemElement = new XElement("item");

            if (TryFormatOptionalTextElement(itemToFormat.Title, "title", out var titleElement))
            {
                itemElement.Add(titleElement);
            }

            if (TryFormatOptionalTextElement(itemToFormat.Link, "link", out var linkElement))
            {
                itemElement.Add(linkElement);
            }

            if (TryFormatOptionalTextElement(itemToFormat.Description, "description", out var descriptionElement))
            {
                itemElement.Add(descriptionElement);
            }

            if (TryFormatOptionalTextElement(itemToFormat.Author, "author", out var authorElement))
            {
                itemElement.Add(authorElement);
            }

            if (TryFormatOptionalTextElement(itemToFormat.Comments, "comments", out var commentsElement))
            {
                itemElement.Add(commentsElement);
            }

            foreach (var categoryToFormat in itemToFormat.Categories)
            {
                if (TryFormatRss20Category(categoryToFormat, out var categoryElement))
                {
                    itemElement.Add(categoryElement);
                }
            }

            foreach (var enclosureToFormat in itemToFormat.Enclosures)
            {
                if (TryFormatRss20Enclosure(enclosureToFormat, out var enclosureElement))
                {
                    itemElement.Add(enclosureElement);
                }
            }

            if (TryFormatRss20Timestamp(itemToFormat.PubDate, "pubDate", out var pubDateElement))
            {
                itemElement.Add(pubDateElement);
            }

            if (TryFormatRss20Source(itemToFormat.Source, out var sourceElement))
            {
                itemElement.Add(sourceElement);
            }

            if (TryFormatRss20Guid(itemToFormat.Guid, out var guidElement))
            {
                itemElement.Add(guidElement);
            }

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

            return(true);
        }