public static string LoadAtom()
        {
            var    config = Settings.Load();
            string site   = config.SiteUrl;

            if (string.IsNullOrEmpty(site))
            {
                return(string.Empty);
            }

            string                 id    = "DownSiteID";
            SyndicationFeed        feed  = new SyndicationFeed(config.SiteName ?? "Test", config.SiteDescription ?? "Test", new Uri(site), id, DateTime.Now);
            List <SyndicationItem> items = new List <SyndicationItem>();

            var blog = Database.Db.Select <Article>(x => x.ShowInBlog).OrderByDescending(x => x.Created);

            foreach (var a in blog)
            {
                string html = new CustomMarkdownSharp.Markdown()
                {
                    Static = true
                }.Transform(a.Content);
                HtmlDocument doc = new HtmlDocument();
                doc.LoadHtml(html);

                string text = new HtmlToText().ConvertHtml(html);

                SyndicationItem item = new SyndicationItem(a.Title, text, new Uri(site + a.Link), a.Id.ToString(), a.Created);
                items.Add(item);
            }

            feed.Items = items;
            Atom10FeedFormatter atomFormatter = new Atom10FeedFormatter(feed);
            MemoryStream        mem           = new MemoryStream();

            using (var writer = System.Xml.XmlWriter.Create(mem, new System.Xml.XmlWriterSettings()
            {
                Encoding = Encoding.UTF8, OmitXmlDeclaration = false
            }))
                atomFormatter.WriteTo(writer);

            string ret = Encoding.UTF8.GetString(mem.ToArray());

            return(ret);
        }
示例#2
0
        //[AddHeader(ContentType = MimeTypes.Html)]
        public object GetHtml(Article request, bool staticpage = false)
        {
            var preview = Request != null?Request.AbsoluteUri.EndsWith("?preview") : false;

            //var article = Database.db.Single<Article>(x => x.Title == request.Title || x.Id == request.Id);
            var article = Database.Db.LoadSelect <Article>(x => x.Title == request.Title || x.Id == request.Id).SingleOrDefault();

            if (article == null)
            {
                return(new HttpResult(HttpStatusCode.NotFound, "no such article."));
            }

            //var author = Database.db.Single<User>(x => x.Id == article.AuthorId);
            //var category = string.Join(",", Database.db.Select<Category>(x => x.ArticleId == article.Id).OrderBy(x => x.Name).Select(x => x.Name));
            var category = article.Category != null?string.Join(",", article.Category.OrderBy(x => x.Name).Select(x => x.Name)) : "";

            if (article.Author != null)
            {
                article.AuthorName = article.Author.UserName;
            }
            else
            {
                article.AuthorName = "unknown author";
            }

            //var parts = Database.db.Select<Part>(x => x.ArticleId == article.Id).OrderBy(x => x.Number).ToArray();

            string header      = "<h1>" + article.Title + "</h1><p>" + (article.AuthorName ?? "unknown author") + ", " + article.Created + " [" + category + "]</p>";
            string html        = "";
            string previewtext = "";

            if (!string.IsNullOrWhiteSpace(article.Content))
            {
                if (preview)
                {
                    previewtext += new HtmlToText().ConvertHtml(article.Content);
                }
                else
                {
                    html += new CustomMarkdownSharp.Markdown()
                    {
                        Static = staticpage
                    }
                }.Transform(article.Content);
示例#3
0
        public static string Preview(string markdown, bool staticpage = false)
        {
            string html = new CustomMarkdownSharp.Markdown()
            {
                Static = staticpage
            }.Transform(markdown);
            HtmlDocument doc = new HtmlDocument();

            doc.LoadHtml(html);

            string text = new HtmlToText().ConvertHtml(html);


            if (text.Length > 50)
            {
                text = text.Substring(0, 50);
            }

            bool br_inserted = false;

            {
                var imgs = doc.DocumentNode.SelectNodes("//img");
                if (imgs != null)
                {
                    foreach (HtmlNode img in imgs)
                    {
                        string url = img.GetAttributeValue("src", null);
                        if (url != null && url.Length > 1 && url[0] == '/' && url[1] != '/')
                        {
                            if (url.StartsWith("/image/"))
                            {
                                url  = url.Substring(7);
                                url  = Path.GetFileNameWithoutExtension(url);
                                url  = url.Split(Constants.Seperator[0])[0];
                                url += Constants.Seperator + "thumb.jpg";
                                url  = "/image/" + url;
                                if (!br_inserted)
                                {
                                    text       += "<br/>";
                                    br_inserted = true;
                                }
                                text += string.Format(@"<img src=""{0}""/>", url);
                            }
                        }
                    }
                }
            }

            {
                var videos = doc.DocumentNode.SelectNodes("//video");
                if (videos != null)
                {
                    foreach (HtmlNode video in videos)
                    {
                        string url = video.GetAttributeValue("src", null);
                        if (url != null && url.Length > 1 && url[0] == '/' && url[1] != '/')
                        {
                            if (url.StartsWith("/image/"))
                            {
                                url  = url.Substring(7);
                                url  = Path.GetFileNameWithoutExtension(url);
                                url  = url.Split(Constants.Seperator[0])[0];
                                url += Constants.Seperator + "thumb.jpg";
                                url  = "/image/" + url;
                                if (!br_inserted)
                                {
                                    text       += "<br/>";
                                    br_inserted = true;
                                }
                                text += string.Format(@"<img src=""{0}""/>", url);
                            }
                        }
                    }
                }
            }


            Regex regex = new Regex(@"!\[youtube\]\(([A-Za-z0-9\-]+)\)");
            Match match = regex.Match(markdown);

            if (match.Success)
            {
                do
                {
                    string youtube_id = match.Groups[1].Value;
                    text += string.Format(@"<img src=""{0}""/>", "https://img.youtube.com/vi/" + youtube_id + "/1.jpg");
                    match = match.NextMatch();
                }while (match.Success);
            }
            return(text);
        }