private byte[] SitemapBytesFor(SitemapSelector selector) { if (string.IsNullOrWhiteSpace(selector.Language)) { return(_converter.EmptyBytes()); } if (string.IsNullOrWhiteSpace(selector.Bundle)) { return(_converter.IndexBytes(AllSitemapUrlsFor(selector.Language).ToArray())); } selector.Language = selector.Language.ToLower(); var store = typeof(SitemapEntry).GetStore(); var condition = ConditionsFor(selector.Bundle, selector.Language); var existingBags = store.FindAsPropertyBag(condition).ToArray(); if (!existingBags.Any()) { return(_converter.EmptyBytes()); } var entries = existingBags .Select(b => b.ToObject <SitemapEntry>()) .OrderBy(e => e.Location.ToString().ToLower()) // Must sort since we always want to skip the same entries when batching. .Skip(selector.Batch * Constants.SitemapBatchSize) .ToArray(); return(_converter.ToBytes(entries)); }
public ActionResult Index(int batch = 0, string bundle = "") { var language = _hostBindingsService.IetfLanguageTagFor(_request.Url); var selector = new SitemapSelector { Language = language, Bundle = bundle, Batch = batch }; var ms = new MemoryStream(_sitemapRepository.ReadSitemapFor(selector)); var doc = new XmlDocument(); doc.Load(ms); return new XmlActionResult(doc); }
public void RefreshSitemapCacheFor(string language) { var selectors = AllSelectorsFor(language); foreach (var selector in selectors) { _cache[KeyFor(selector)] = SitemapBytesFor(selector); } var indexSelector = new SitemapSelector { Language = language, Bundle = null, Batch = 0 }; _cache[KeyFor(indexSelector)] = SitemapBytesFor(indexSelector); }
private static string KeyFor(SitemapSelector selector) { return(string.Concat(Constants.CacheKeyPrefix, selector.Language, selector.Bundle, selector.Batch)); }
public byte[] ReadSitemapFor(SitemapSelector selector) { return(_cache.Get(KeyFor(selector), () => SitemapBytesFor(selector))); }
public byte[] ReadSitemapFor(SitemapSelector selector) { return _cache.Get(KeyFor(selector), () => SitemapBytesFor(selector)); }
private byte[] SitemapBytesFor(SitemapSelector selector) { if (string.IsNullOrWhiteSpace(selector.Language)) { return _converter.EmptyBytes(); } if (string.IsNullOrWhiteSpace(selector.Bundle)) { return _converter.IndexBytes(AllSitemapUrlsFor(selector.Language).ToArray()); } selector.Language = selector.Language.ToLower(); var store = typeof(SitemapEntry).GetStore(); var condition = ConditionsFor(selector.Bundle, selector.Language); var existingBags = store.FindAsPropertyBag(condition).ToArray(); if (!existingBags.Any()) { return _converter.EmptyBytes(); } var entries = existingBags .Select(b => b.ToObject<SitemapEntry>()) .OrderBy(e => e.Location.ToString().ToLower()) // Must sort since we always want to skip the same entries when batching. .Skip(selector.Batch * Constants.SitemapBatchSize) .ToArray(); return _converter.ToBytes(entries); }
private static string KeyFor(SitemapSelector selector) { return string.Concat(Constants.CacheKeyPrefix, selector.Language, selector.Bundle, selector.Batch); }