Inheritance: RepositoryEntity
        public ActionResult Create(Article article)
        {
            try
            {
                SplitTags(article);
                GetImages(article);

                article.PublishedBy = PrimaryUser.TwitterScreenName;
                article.PublishedDate = DateTime.Now;

                var model = new PostworthyArticleModel(PrimaryUser);

                model.SaveArticle(article);

                return Json(new { result = "success" }, JsonRequestBehavior.AllowGet);
            }
            catch
            {
                return Json(new { result = "failure" }, JsonRequestBehavior.AllowGet);
            }
        }
        public void EditArticle(Article article)
        {
            string dayTag = "_" + article.PublishedDate.ToShortDateString();

            CachedRepository<Article>.Instance(PrimaryUser.TwitterScreenName)
                .Save(TwitterModel.Instance(PrimaryUser.TwitterScreenName).ARTICLE + dayTag, article);

            var index = GetArticleIndex();

            var articleIndex = index.Articles.Where(x => x.Key == article.UniqueKey).FirstOrDefault();
            articleIndex.Title = article.Title;
            articleIndex.Tags = article.Tags;

            CachedRepository<ArticleIndex>.Instance(PrimaryUser.TwitterScreenName)
                .Save(TwitterModel.Instance(PrimaryUser.TwitterScreenName).ARTICLE_INDEX, index);
        }
        public void SaveArticle(Article article)
        {
            string dayTag = "_" + article.PublishedDate.ToShortDateString();

            var index = GetArticleIndex();

            CachedRepository<Article>.Instance(PrimaryUser.TwitterScreenName)
                .Save(TwitterModel.Instance(PrimaryUser.TwitterScreenName).ARTICLE + dayTag, article);

            index.Articles.Add(new ArticleIndex.Index(article.PublishedDate.ToFileTimeUtc(), article.Title, article.UniqueKey, article.Tags));

            CachedRepository<ArticleIndex>.Instance(PrimaryUser.TwitterScreenName)
                .Save(TwitterModel.Instance(PrimaryUser.TwitterScreenName).ARTICLE_INDEX, index);
        }
 private void SplitTags(Article article)
 {
     article.Tags = article.Tags.SelectMany(t => t.Split(',')).Select(t => t.Trim()).ToList();
 }
 private void GetImages(Article article)
 {
     var doc = new HtmlAgilityPack.HtmlDocument();
     doc.LoadHtml(article.Content);
     var imgNodes = doc.DocumentNode.SelectNodes("//img");
     if (imgNodes != null && imgNodes.Count > 0)
     {
         var src = imgNodes.First().Attributes["src"].Value;
         if (!src.ToLower().StartsWith("data:"))
             src = GetImageData(src) ?? src;
         article.Images.Add(src);
     }
 }
        public ActionResult Edit(string id, Article article)
        {
            try
            {
                //article.PublishedBy = PrimaryUser.TwitterScreenName;
                //article.PublishedDate = DateTime.Now;
                SplitTags(article);
                GetImages(article);

                var model = new PostworthyArticleModel(PrimaryUser);
                model.EditArticle(article);

                var route = @Url.RouteUrl("Article", new { controller = "article", action = "details", id = article.ID(), slug = article.GetSlug() });

                Response.RemoveOutputCacheItem(route);

                return Json(new { result = "success" }, JsonRequestBehavior.AllowGet);
            }
            catch
            {
                return Json(new { result = "failure" }, JsonRequestBehavior.AllowGet);
            }
        }