private IEnumerable <SyndicationItem> GetFromCacheOrFactory(SyndicationItemFactory syndicationFactory, SyndicationFeedPageType currentPage, IEnumerable <Category> parsedCategories) { var cacheTime = currentPage.CacheFeedforSeconds; string categoryQuery = string.Empty; foreach (var category in parsedCategories) { categoryQuery += category.Name; } var cacheKey = string.Format("SyndicationFeedPageType_{0}_{1}", currentPage.ContentLink.ToString(), categoryQuery); var cachedItems = CacheManager.Get(cacheKey) as IEnumerable <SyndicationItem>; if (cachedItems == null) { cachedItems = syndicationFactory.GetSyndicationItems(); if (cacheTime > 0) { var cachePolicy = new CacheEvictionPolicy(new[] { DataFactoryCache.PageCommonCacheKey(currentPage.ContentLink) } , new TimeSpan(0, 0, cacheTime), CacheTimeoutType.Absolute); CacheManager.Insert(cacheKey, syndicationFactory.GetSyndicationItems(), cachePolicy); } } return(cachedItems); }
public ActionResult Index(SyndicationFeedPageType currentPage) { var syndicationFactory = new SyndicationItemFactory(ContentLoader, FeedContentResolver, currentPage); var feed = new SyndicationFeed { Items = syndicationFactory.GetSyndicationItems(), Id = currentPage.ContentGuid.ToString(), Title = new TextSyndicationContent(currentPage.PageName), Description = new TextSyndicationContent(currentPage.Description), }; if (feed.Items.Any()) { feed.LastUpdatedTime = feed.Items.Max(m => m.LastUpdatedTime); } if (currentPage.FeedFormat == FeedFormat.Atom) { return(new AtomActionResult(feed)); } return(new RssActionResult(feed)); }