// GET: rss/{subverseName} public ActionResult Rss(string subverseName) { var submissions = CacheHandler.Instance.Register <List <Submission> >(CachingKey.RssFeed(subverseName), new Func <List <Submission> >(() => { var result = new List <Submission>(); using (var _db = new voatEntities()) { _db.EnableCacheableOutput(); if (subverseName != null && subverseName != "all") { // return only frontpage submissions from a given subverse var subverse = DataCache.Subverse.Retrieve(subverseName); // _db.Subverse.Find(subverseName); if (subverse != null) { //HACK: Disable subverse if (subverse.IsAdminDisabled.HasValue && subverse.IsAdminDisabled.Value) { //ViewBag.Subverse = subverse.Name; //return SubverseDisabledErrorView(); return(result); } result = (from message in _db.Submissions where !message.IsDeleted && message.Subverse == subverse.Name select message) .OrderByDescending(s => s.Rank) .Take(25) .ToList(); } } else if (subverseName == "all") { // return submissions from all subs result = (from message in _db.Submissions join subverse in _db.Subverses on message.Subverse equals subverse.Name where !message.IsDeleted && subverse.IsPrivate != true && subverse.IsAdminPrivate != true && message.Rank > 0.00009 where !(from bu in _db.BannedUsers select bu.UserName).Contains(message.UserName) select message).OrderByDescending(s => s.Rank).ThenByDescending(s => s.CreationDate).Take(25).ToList(); } else { // return site-wide frontpage submissions result = (from message in _db.Submissions where !message.IsDeleted join defaultsubverse in _db.DefaultSubverses on message.Subverse equals defaultsubverse.Subverse select message) .OrderByDescending(s => s.Rank) .Take(25) .ToList(); } } return(result); }), TimeSpan.FromMinutes(30)); var feed = new SyndicationFeed("Voat", "Have your say", new Uri("http://www.voat.co")) { Language = "en-US", ImageUrl = new Uri("http://" + System.Web.HttpContext.Current.Request.Url.Authority + "/Graphics/voat-logo.png") }; var feedItems = new List <SyndicationItem>(); foreach (var submission in submissions) { var commentsUrl = new Uri("http://" + System.Web.HttpContext.Current.Request.Url.Authority + "/v/" + submission.Subverse + "/comments/" + submission.ID); var subverseUrl = new Uri("http://" + System.Web.HttpContext.Current.Request.Url.Authority + "/v/" + submission.Subverse); var authorName = submission.UserName; // submission type submission if (submission.IsAnonymized) { authorName = submission.ID.ToString(CultureInfo.InvariantCulture); } if (submission.Type == 1) { var item = new SyndicationItem( submission.Title, submission.Content + "</br>" + "Submitted by " + "<a href='u/" + authorName + "'>" + authorName + "</a> to <a href='" + subverseUrl + "'>" + submission.Subverse + "</a> | <a href='" + commentsUrl + "'>" + CommentCounter.CommentCount(submission.ID) + " comments", commentsUrl, submission.ID.ToString(CultureInfo.InvariantCulture), submission.CreationDate); feedItems.Add(item); } else { // link type submission var linkUrl = new Uri(submission.Url); // add a thumbnail if submission has one if (submission.Thumbnail != null) { string thumbnailUrl; if (Settings.UseContentDeliveryNetwork) { thumbnailUrl = new Uri("http://cdn." + System.Web.HttpContext.Current.Request.Url.Authority + "/thumbs/" + submission.Thumbnail).ToString(); } else { thumbnailUrl = new Uri("http://" + System.Web.HttpContext.Current.Request.Url.Authority + "/Thumbs/" + submission.Thumbnail).ToString(); } var item = new SyndicationItem( submission.Title, "<a xmlns='http://www.w3.org/1999/xhtml' href='" + commentsUrl + "'><img title='" + submission.Title + "' alt='" + submission.Title + "' src='" + thumbnailUrl + "' /></a>" + "</br>" + "Submitted by " + "<a href='u/" + authorName + "'>" + authorName + "</a> to <a href='" + subverseUrl + "'>" + submission.Subverse + "</a> | <a href='" + commentsUrl + "'>" + CommentCounter.CommentCount(submission.ID) + " comments</a>" + " | <a href='" + linkUrl + "'>link</a>", commentsUrl, submission.ID.ToString(CultureInfo.InvariantCulture), submission.CreationDate); feedItems.Add(item); } else { var item = new SyndicationItem( submission.Title, "Submitted by " + "<a href='u/" + authorName + "'>" + authorName + "</a> to <a href='" + subverseUrl + "'>" + submission.Subverse + "</a> | <a href='" + commentsUrl + "'>" + CommentCounter.CommentCount(submission.ID) + " comments", commentsUrl, submission.ID.ToString(CultureInfo.InvariantCulture), submission.CreationDate); feedItems.Add(item); } } } feed.Items = feedItems; return(new FeedResult(new Rss20FeedFormatter(feed))); }