Exemplo n.º 1
0
        public void GetUrl_preserves_dash_separated_values_that_arent_timestamps()
        {
            var fmPermalink = new FrontMatterPermalink(":title")
            {
                FilePath = @"/temp/foo-bar-baz-qak-foobar_baz.md",
            };
            var url = fmPermalink.ToUrl();

            Assert.Equal("foo-bar-baz-qak-foobar_baz", url);
        }
Exemplo n.º 2
0
        public void GetUrl_returns_strips_timestamp()
        {
            var fmPermalink = new FrontMatterPermalink(":title")
            {
                FilePath = @"/temp/2012-01-03-foobar_baz.md",
            };
            var url = fmPermalink.ToUrl();

            Assert.Equal("foobar_baz", url);
        }
Exemplo n.º 3
0
        public void GetUrl_returns_file_name_when_no_folder()
        {
            var fmPermalink = new FrontMatterPermalink(":title")
            {
                FilePath = @"/foobar_baz.en-us.md",
            };
            var url = fmPermalink.ToUrl();

            Assert.Equal("foobar_baz", url);
        }
Exemplo n.º 4
0
        public void GetUrl_returns_folder_and_original_value_when_no_timestamp()
        {
            var fmPermalink = new FrontMatterPermalink(":folder/:title")
            {
                FilePath = @"/temp/foobar_baz.md",
            };

            var url = fmPermalink.ToUrl();

            Assert.Equal("temp/foobar_baz", url);
        }
Exemplo n.º 5
0
        public void EvaluatePermalink_url_is_well_formatted(string permalink, string expectedUrl, string categories)
        {
            var fmPermalink = new FrontMatterPermalink(permalink)
            {
                Categories = categories == null ? new List <string>() : categories.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(),
                Date       = new DateTime(2015, 03, 09),
                FilePath   = @"/temp/2015-03-09-foobar-baz.md",
            };
            var url = fmPermalink.ToUrl();

            Assert.Equal(expectedUrl, url);
        }
Exemplo n.º 6
0
        public virtual async Task LoadSitemapItemRecordsAsync(Store store, Sitemap sitemap, string baseUrl, Action <ExportImportProgressInfo> progressCallback = null)
        {
            var progressInfo = new ExportImportProgressInfo();

            var contentBasePath           = $"Pages/{sitemap.StoreId}";
            var storageProvider           = _blobStorageProviderFactory.CreateProvider(contentBasePath);
            var options                   = new SitemapItemOptions();
            var staticContentSitemapItems = sitemap.Items.Where(si => !string.IsNullOrEmpty(si.ObjectType) &&
                                                                (si.ObjectType.EqualsInvariant(SitemapItemTypes.ContentItem) ||
                                                                 si.ObjectType.EqualsInvariant(SitemapItemTypes.Folder)))
                                            .ToList();
            var totalCount = staticContentSitemapItems.Count;

            if (totalCount > 0)
            {
                var processedCount = 0;

                var acceptedFilenameExtensions = SettingsManager.GetValue(ModuleConstants.Settings.General.AcceptedFilenameExtensions.Name, ".md,.html")
                                                 .Split(',')
                                                 .Select(i => i.Trim())
                                                 .Where(i => !string.IsNullOrEmpty(i))
                                                 .ToList();

                progressInfo.Description = $"Content: Starting records generation  for {totalCount} pages";
                progressCallback?.Invoke(progressInfo);

                foreach (var sitemapItem in staticContentSitemapItems)
                {
                    var urls = new List <string>();
                    if (sitemapItem.ObjectType.EqualsInvariant(SitemapItemTypes.Folder))
                    {
                        var searchResult = await storageProvider.SearchAsync(sitemapItem.UrlTemplate, null);

                        var itemUrls = await GetItemUrls(storageProvider, searchResult);

                        foreach (var itemUrl in itemUrls)
                        {
                            var itemExtension = Path.GetExtension(itemUrl);
                            if (!acceptedFilenameExtensions.Any() ||
                                string.IsNullOrEmpty(itemExtension) ||
                                acceptedFilenameExtensions.Contains(itemExtension, StringComparer.OrdinalIgnoreCase))
                            {
                                urls.Add(itemUrl);
                            }
                        }
                    }
                    else if (sitemapItem.ObjectType.EqualsInvariant(SitemapItemTypes.ContentItem))
                    {
                        var item = await storageProvider.GetBlobInfoAsync(sitemapItem.UrlTemplate);

                        if (item != null)
                        {
                            urls.Add(item.RelativeUrl);
                        }
                    }
                    totalCount = urls.Count;

                    foreach (var url in urls)
                    {
                        using (var stream = storageProvider.OpenRead(url))
                        {
                            var content    = stream.ReadToString();
                            var yamlHeader = ReadYamlHeader(content);
                            yamlHeader.TryGetValue("permalink", out var permalinks);
                            var frontMatterPermalink = new FrontMatterPermalink(url.Replace(".md", ""));
                            if (permalinks != null)
                            {
                                frontMatterPermalink = new FrontMatterPermalink(permalinks.FirstOrDefault());
                            }
                            sitemapItem.ItemsRecords.AddRange(GetSitemapItemRecords(store, options, frontMatterPermalink.ToUrl().TrimStart('/'), baseUrl));

                            processedCount++;
                            progressInfo.Description = $"Content: Have been generated records for {processedCount} of {totalCount} pages";
                            progressCallback?.Invoke(progressInfo);
                        }
                    }
                }
            }
        }