Пример #1
0
        public static async Task <SyndicationFeed> BuildSyndication(this IBlogService service, string baseAddress)
        {
            ClientUrlGenerator generator = new ClientUrlGenerator
            {
                BaseAddress = baseAddress
            };
            BlogOptions blogOptions = await service.GetOptions();

            SyndicationFeed   feed   = new SyndicationFeed(blogOptions.Name, blogOptions.Description, new Uri(baseAddress));
            SyndicationPerson author = new SyndicationPerson("", blogOptions.Onwer, baseAddress);

            feed.Authors.Add(author);
            Dictionary <string, SyndicationCategory> categoryMap = new Dictionary <string, SyndicationCategory>();

            {
                /*var cates = await BlogService.CategoryService.GetCategories(await BlogService.CategoryService.All());
                 * foreach (var p in cates)
                 * {
                 *  var cate = new SyndicationCategory(p.Name);
                 *  categoryMap.Add(p.Id, cate);
                 *  feed.Categories.Add(cate);
                 * }*/
            }
            {
                var posts = await service.PostService.GetPosts(await service.PostService.All());

                List <SyndicationItem> items = new List <SyndicationItem>();
                foreach (var p in posts)
                {
                    if (p is null)
                    {
                        continue;
                    }
                    var s = new SyndicationItem(p.Title,
                                                SyndicationContent.CreateHtmlContent(Markdown.ToHtml(p.Content.Raw, Pipeline)),
                                                new Uri(generator.Post(p.Id)), p.Id, p.ModificationTime);
                    s.Authors.Add(author);

                    string summary;
                    if (await service.PostService.Protector.IsProtected(p.Content))
                    {
                        summary = "Protected Post";
                    }
                    else
                    {
                        summary = Markdown.ToPlainText(p.Content.Raw, Pipeline);
                    }
                    s.Summary = SyndicationContent.CreatePlaintextContent(summary.Length <= 100 ? summary : summary.Substring(0, 100));
                    s.Categories.Add(new SyndicationCategory(p.Category.ToString()));

                    /*if (categoryMap.TryGetValue(p.CategoryId, out var cate))
                     *  s.Categories.Add(cate);*/
                    s.PublishDate = p.CreationTime;
                    items.Add(s);
                }
                feed.Items = items.AsEnumerable();
            }

            return(feed);
        }
Пример #2
0
        public static async Task <SitemapBuilder> BuildSitemap(this IBlogService service, string baseAddress)
        {
            SitemapBuilder     siteMapBuilder = new SitemapBuilder();
            ClientUrlGenerator generator      = new ClientUrlGenerator
            {
                BaseAddress = baseAddress
            };

            siteMapBuilder.AddUrl(baseAddress);
            {
                siteMapBuilder.AddUrl(generator.Posts());
                siteMapBuilder.AddUrl(generator.Articles());
                siteMapBuilder.AddUrl(generator.Slides());
                siteMapBuilder.AddUrl(generator.Notes());
                var posts = await service.PostService.All();

                foreach (var id in posts)
                {
                    siteMapBuilder.AddUrl(generator.Post(id));
                }
            }

            /*{
             *  var keywords = await BlogService.KeywordService.All();
             *  siteMapBuilder.AddUrl($"{BaseAddress}/keywords");
             *  foreach (var id in keywords)
             *  {
             *      siteMapBuilder.AddUrl($"{BaseAddress}/keywords/{id}");
             *  }
             * };
             * {
             *  var categories = await BlogService.CategoryService.All();
             *  siteMapBuilder.AddUrl($"{BaseAddress}/categories");
             *  foreach (var id in categories)
             *  {
             *      siteMapBuilder.AddUrl($"{BaseAddress}/categories/{id}");
             *  }
             * };*/

            return(siteMapBuilder);
        }