Exemplo n.º 1
0
        private async Task addChannelLastUpdatedTimeAsync(RssFeedWriter rssFeedWriter)
        {
            if (_feedChannel.RssItems == null || !_feedChannel.RssItems.Any())
            {
                return;
            }

            await rssFeedWriter.WriteLastBuildDate(
                _feedChannel.RssItems.OrderByDescending(x => x.LastUpdatedTime).First().LastUpdatedTime);
        }
Exemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async override Task ExecuteResultAsync(ActionContext context)
        {
            context.HttpContext.Response.ContentType = "application/rss+xml";

            using var xmlWriter = XmlWriter.Create(
                      context.HttpContext.Response.Body,
                      new XmlWriterSettings()
            {
                Async = true, Indent = true
            });
            var writer = new RssFeedWriter(xmlWriter);

            await writer.WriteTitle(feed.Title);

            await writer.WriteDescription(feed.Description);

            await writer.Write(feed.Link);

            await writer.WriteLastBuildDate(feed.LastUpdatedTime);

            var languageElement = new SyndicationContent("language")
            {
                Value = feed.Language
            };
            await writer.Write(languageElement);

            foreach (var item in feed.Items)
            {
                await writer.Write(item);
            }

            await xmlWriter.WriteEndElementAsync();

            await xmlWriter.WriteEndElementAsync();

            await xmlWriter.FlushAsync();
        }
Exemplo n.º 3
0
        private async Task <string> BuildRSSFeedInternal(RSSFeedOptions rssOptions)
        {
            var sb = new StringBuilder();

            using (var _ = new StringWriter(sb))
                using (XmlWriter xmlWriter = XmlWriter.Create(_, new XmlWriterSettings {
                    Async = true, Indent = true
                }))
                {
                    //Since the XmlWriter doesn't care about actually setting UTF-8, let's just do it manually
                    await xmlWriter.WriteProcessingInstructionAsync("xml", @"version=""1.0"" encoding=""UTF-8""");

                    var syndicationFeedWriter = new RssFeedWriter(xmlWriter);
                    await syndicationFeedWriter.WriteTitle(rssOptions.Title).ConfigureAwait(false);

                    if (!string.IsNullOrEmpty(rssOptions.Description))
                    {
                        await syndicationFeedWriter.WriteDescription(rssOptions.Description).ConfigureAwait(false);
                    }
                    if (rssOptions.Url != null)
                    {
                        await syndicationFeedWriter.Write(new SyndicationLink(rssOptions.Url)).ConfigureAwait(false);

                        if (rssOptions.ImageUrl != null)
                        {
                            await syndicationFeedWriter.Write(new SyndicationImage(rssOptions.ImageUrl)
                            {
                                Title = rssOptions.Title,
                                Link  = new SyndicationLink(rssOptions.Url)
                            }).ConfigureAwait(false);
                        }
                    }

                    //Choose the current culture if no language has been chosen
                    await syndicationFeedWriter.WriteLanguage(rssOptions.Language ?? CultureInfo.CurrentCulture).ConfigureAwait(false);

                    if (!string.IsNullOrEmpty(rssOptions.ManagingEditor))
                    {
                        await syndicationFeedWriter.Write(new SyndicationPerson(null, rssOptions.ManagingEditor, RssContributorTypes.ManagingEditor)).ConfigureAwait(false);
                    }
                    //Do we even still care about Webmaster?
                    if (!string.IsNullOrEmpty(rssOptions.Webmaster))
                    {
                        await syndicationFeedWriter.WriteValue("webMaster", rssOptions.Webmaster).ConfigureAwait(false);
                    }

                    if (!string.IsNullOrEmpty(rssOptions.Copyright))
                    {
                        await syndicationFeedWriter.WriteCopyright(rssOptions.Copyright).ConfigureAwait(false);
                    }

                    var syndicationItems = await _rssProvider.RetrieveSyndicationItems().ConfigureAwait(false);

                    //Use the latest LastUpdated item in the list to determine the last build date.
                    await syndicationFeedWriter.WriteLastBuildDate(syndicationItems.Max(x => x.LastUpdated)).ConfigureAwait(false);

                    foreach (var __ in syndicationItems)
                    {
                        await syndicationFeedWriter.Write(__.ToSyndicationItem()).ConfigureAwait(false);
                    }
                    await xmlWriter.FlushAsync().ConfigureAwait(false);
                }
            return(sb.ToString());
        }