using Microsoft.Extensions.FileProviders;
using Umbraco.Cms.Core.Composing;
namespace Umbraco.Cms.Core.Snippets
{
///
/// The partial view snippet collection builder.
///
public class PartialViewSnippetCollectionBuilder : LazyCollectionBuilderBase
{
protected override PartialViewSnippetCollectionBuilder This => this;
protected override IEnumerable CreateItems(IServiceProvider factory)
{
var embeddedSnippets = new List(base.CreateItems(factory));
// Ignore these
var filterNames = new List
{
"Gallery",
"ListChildPagesFromChangeableSource",
"ListChildPagesOrderedByProperty",
"ListImagesFromMediaFolder"
};
var snippetProvider = new EmbeddedFileProvider(typeof(IAssemblyProvider).Assembly, "Umbraco.Cms.Core.EmbeddedResources.Snippets");
var embeddedFiles = snippetProvider.GetDirectoryContents(string.Empty)
.Where(x => !x.IsDirectory && x.Name.EndsWith(".cshtml"));
foreach (var file in embeddedFiles)
{
if (!filterNames.Contains(Path.GetFileNameWithoutExtension(file.Name)))
{
using var stream = new StreamReader(file.CreateReadStream());
embeddedSnippets.Add(new Snippet(file.Name, stream.ReadToEnd().Trim()));
}
}
return embeddedSnippets;
}
}
}