示例#1
0
        private async Task <ISyndicationFeedWriter> GetWriter(string?type, XmlWriter xmlWriter, DateTime updated)
        {
            var host = $"{this.Request.Scheme}://{this.Request.Host}/";

            if (type?.Equals("rss", StringComparison.OrdinalIgnoreCase) ?? false)
            {
                var rss = new RssFeedWriter(xmlWriter);
                await rss.WriteTitle(this.manifest.Name).ConfigureAwait(false);

                await rss.WriteDescription(this.manifest.Description).ConfigureAwait(false);

                await rss.WriteGenerator("Miniblog.Core").ConfigureAwait(false);

                await rss.WriteValue("link", host).ConfigureAwait(false);

                return(rss);
            }

            var atom = new AtomFeedWriter(xmlWriter);
            await atom.WriteTitle(this.manifest.Name).ConfigureAwait(false);

            await atom.WriteId(host).ConfigureAwait(false);

            await atom.WriteSubtitle(this.manifest.Description).ConfigureAwait(false);

            await atom.WriteGenerator("Miniblog.Core", "https://github.com/madskristensen/Miniblog.Core", "1.0").ConfigureAwait(false);

            await atom.WriteValue("updated", updated.ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture)).ConfigureAwait(false);

            return(atom);
        }
示例#2
0
        private async Task <ISyndicationFeedWriter> GetWriter(string type, XmlWriter xmlWriter, DateTime updated)
        {
            string host = Request.Scheme + "://" + Request.Host + "/";

            if (type.Equals("rss", StringComparison.OrdinalIgnoreCase))
            {
                var rss = new RssFeedWriter(xmlWriter);
                await rss.WriteTitle(_manifest.Name);

                await rss.WriteDescription(_manifest.Description);

                await rss.WriteGenerator("BrickApp");

                await rss.WriteValue("link", host);

                return(rss);
            }

            var atom = new AtomFeedWriter(xmlWriter);
            await atom.WriteTitle(_manifest.Name);

            await atom.WriteId(host);

            await atom.WriteSubtitle(_manifest.Description);

            await atom.WriteValue("updated", updated.ToString("yyyy-MM-ddTHH:mm:ssZ"));

            return(atom);
        }
示例#3
0
        private async Task <ISyndicationFeedWriter> GetWriter(string type, XmlWriter xmlWriter, DateTime updated)
        {
            string host = Request.Scheme + "://" + Request.Host + "/";

            if (type.Equals("rss", StringComparison.OrdinalIgnoreCase))
            {
                var rss = new RssFeedWriter(xmlWriter);
                await rss.WriteTitle(_settings.Value.Name);

                await rss.WriteDescription(_settings.Value.Description);

                await rss.WriteGenerator("Miniblog.Core");

                await rss.WriteValue("link", host);

                return(rss);
            }

            var atom = new AtomFeedWriter(xmlWriter);
            await atom.WriteTitle(_settings.Value.Name);

            await atom.WriteId(host);

            await atom.WriteSubtitle(_settings.Value.Description);

            await atom.WriteGenerator("Miniblog.Core", "https://github.com/madskristensen/Miniblog.Core", "1.0");

            await atom.WriteValue("updated", updated.ToString("yyyy-MM-ddTHH:mm:ssZ"));

            return(atom);
        }
示例#4
0
        private async Task <ISyndicationFeedWriter> GetWriter(string type, XmlWriter xmlWriter, DateTime updated)
        {
            var host = Request.Scheme + "://" + Request.Host + "/";

            if (type.Equals("rss", StringComparison.OrdinalIgnoreCase))
            {
                var rss = new RssFeedWriter(xmlWriter);
                await rss.WriteTitle(_settings.Brand);

                await rss.WriteDescription(_settings.Description);

                await rss.WriteGenerator("Bagombo Blog Engine");

                await rss.WriteValue("link", host);

                return(rss);
            }

            var atom = new AtomFeedWriter(xmlWriter);
            await atom.WriteTitle(_settings.Brand);

            await atom.WriteId(host);

            await atom.WriteSubtitle(_settings.Description);

            await atom.WriteGenerator("Bagombo Blog Engine", "https://github.com/tylerlrhodes/bagobo", "0.2.5a");

            await atom.WriteValue("updated", updated.ToString("yyyy-MM-ddTHH:mm:ssZ"));

            return(atom);
        }
示例#5
0
        public async Task ExecuteResultAsync(ActionContext context)
        {
            var response = context.HttpContext.Response;
            var request  = context.HttpContext.Request;

            response.ContentType = "application/xml";

            var host = request.Scheme + "://" + request.Host;

            using (var xmlWriter = XmlWriter.Create(response.Body, new XmlWriterSettings()
            {
                Async = true, Indent = true, Encoding = new UTF8Encoding(true)
            }))
            {
                var rss = new RssFeedWriter(xmlWriter);
                await rss.WriteTitle(_options.Value.Title);

                await rss.WriteDescription(_options.Value.Description);

                await rss.WriteGenerator(_options.Value.GeneratorDescription);

                await rss.WriteValue("link", host);

                foreach (var post in _page.Items)
                {
                    var item = new AtomEntry
                    {
                        Title       = post.Title,
                        Description = post.GetContentWithoutDataSrc(),
                        Id          = post.Id.ToString(),
                        Published   = post.PublishedDate.Value,
                        LastUpdated = post.ModifiedDate,
                        ContentType = "html",
                    };

                    foreach (var tag in post.BlogStoryTags)
                    {
                        item.AddCategory(new SyndicationCategory(tag.Tag.Name));
                    }

                    item.AddContributor(new SyndicationPerson(_options.Value.AuthorName, _options.Value.FullEmail, "author"));
                    item.AddLink(new SyndicationLink(new Uri($"{host}/{post.Alias}")));

                    await rss.Write(item);
                }
            }
        }
示例#6
0
        public async Task WriteValue()
        {
            var sb = new StringBuilder();

            using (var xmlWriter = XmlWriter.Create(sb))
            {
                var writer = new RssFeedWriter(xmlWriter);

                await writer.WriteValue("CustomTag", "Custom Content");

                await writer.Flush();
            }

            var res = sb.ToString();

            Assert.True(res == "<?xml version=\"1.0\" encoding=\"utf-16\"?><rss version=\"2.0\"><channel><CustomTag>Custom Content</CustomTag></channel></rss>");
        }
示例#7
0
        static void WriteRss(IEnumerable <dynamic> items)
        {
            var streamWritter = File.CreateText($"../{FeedPath}");

            using (var xmlWriter = XmlWriter.Create(streamWritter, new XmlWriterSettings {
                Indent = true
            }))
            {
                var writer = new RssFeedWriter(xmlWriter);
                writer.WriteTitle(FullName);
                writer.WriteDescription(FeedDescription);
                writer.WriteValue("link", Link);
                var markdown = new Markdown();

                foreach (var item in items)
                {
                    var itemPath     = string.Format(ItemFilenamePathFormat, item.MarkdownFilename);
                    var markdownText = File.ReadAllText($"../{itemPath}");
                    var permalink    = $"{Link}/#/{item.MarkdownFilename}";

                    var syndicationItem = new SyndicationItem
                    {
                        Title       = item.Title,
                        Description = markdown.Transform(markdownText),
                        Published   = item.Date
                    };
                    syndicationItem.AddContributor(new SyndicationPerson(FullName,
                                                                         $"{Email} ({FullName})"));
                    syndicationItem.AddLink(new SyndicationLink(new Uri(permalink), "guid"));

                    string category = item.Category;

                    if (!string.IsNullOrWhiteSpace(category))
                    {
                        syndicationItem.AddCategory(new SyndicationCategory(category));
                    }

                    writer.Write(syndicationItem);
                }

                xmlWriter.Flush();
            }
        }
示例#8
0
        /// <summary>
        /// Creates the feed writer and writes the initial headers.
        /// </summary>
        /// <param name="writer">The current xml writer</param>
        /// <param name="blog">The blog service</param>
        /// <param name="url">The currently requested url</param>
        /// <param name="host">The host name</param>
        /// <returns>The feed writer</returns>
        private async Task <ISyndicationFeedWriter> GetWriter(XmlWriter writer, IBlogService blog, string url, string host, DateTime?latest)
        {
            var segments = url.Substring(1).Split('/');

            if (latest.HasValue && segments.Length == 2)
            {
                if (segments[1] == "rss")
                {
                    var rss = new RssFeedWriter(writer);

                    // Write feed headers
                    await rss.WriteTitle(blog.Settings.Title);

                    await rss.WriteDescription(blog.Settings.Description);

                    await rss.WriteGenerator("RazorBlog");

                    await rss.WriteValue("link", host);

                    return(rss);
                }
                else if (segments[1] == "atom")
                {
                    var atom = new AtomFeedWriter(writer);

                    // Write feed headers
                    await atom.WriteTitle(blog.Settings.Title);

                    await atom.WriteId(host);

                    await atom.WriteSubtitle(blog.Settings.Description);

                    await atom.WriteGenerator("RazorBlog", "https://github.com/tidyui/razorblog", "0.1");

                    await atom.WriteValue("updated", latest.Value.ToString("yyyy-MM-ddTHH:mm:ssZ"));

                    return(atom);
                }
            }
            return(null);
        }
示例#9
0
        public async Task <ISyndicationFeedWriter> GetWriter(string type, string host, XmlWriter xmlWriter)
        {
            var lastPost = _db.BlogPosts.All().OrderByDescending(p => p.Published).FirstOrDefault();
            var blog     = await _db.CustomFields.GetBlogSettings();

            if (lastPost == null)
            {
                return(null);
            }

            if (type.Equals("rss", StringComparison.OrdinalIgnoreCase))
            {
                var rss = new RssFeedWriter(xmlWriter);
                await rss.WriteTitle(blog.Title);

                await rss.WriteDescription(blog.Description);

                await rss.WriteGenerator("Blogifier");

                await rss.WriteValue("link", host);

                return(rss);
            }

            var atom = new AtomFeedWriter(xmlWriter);
            await atom.WriteTitle(blog.Title);

            await atom.WriteId(host);

            await atom.WriteSubtitle(blog.Description);

            await atom.WriteGenerator("Blogifier", "https://github.com/blogifierdotnet/Blogifier", "1.0");

            await atom.WriteValue("updated", lastPost.Published.ToString("yyyy-MM-ddTHH:mm:ssZ"));

            return(atom);
        }
示例#10
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());
        }