示例#1
0
        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));
        }
示例#2
0
 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);
 }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
 private static string KeyFor(SitemapSelector selector)
 {
     return(string.Concat(Constants.CacheKeyPrefix, selector.Language, selector.Bundle, selector.Batch));
 }
示例#6
0
 public byte[] ReadSitemapFor(SitemapSelector selector)
 {
     return(_cache.Get(KeyFor(selector), () => SitemapBytesFor(selector)));
 }
示例#7
0
 public byte[] ReadSitemapFor(SitemapSelector selector)
 {
     return _cache.Get(KeyFor(selector), () => SitemapBytesFor(selector));
 }
示例#8
0
        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);
        }
示例#9
0
 private static string KeyFor(SitemapSelector selector)
 {
     return string.Concat(Constants.CacheKeyPrefix, selector.Language, selector.Bundle, selector.Batch);
 }