namespace DocFx.Plugin.LastModified; using System.Collections.Generic; using System.Collections.Immutable; using System.Composition; using System.Linq; using System.Reflection; using Docfx.Common; using Docfx.Plugins; using Processors; /// /// Post-processor responsible for injecting last modified date according to commit or file modified date. /// [Export(nameof(LastModifiedPostProcessor), typeof(IPostProcessor))] public class LastModifiedPostProcessor : IPostProcessor { private int _addedFiles; private IEnumerable Processors { get; } = new List { new ConceptualProcessor(), new ManagedReferenceProcessor(), }; /// public ImmutableDictionary PrepareMetadata(ImmutableDictionary metadata) => metadata; /// public Manifest Process(Manifest manifest, string outputFolder) { var versionInfo = Assembly.GetExecutingAssembly().GetName().Version; Logger.LogInfo($"Version: {versionInfo}"); Logger.LogInfo("Begin adding last modified date to items..."); foreach (var manifestItem in manifest.Files) { var processor = Processors.FirstOrDefault(p => p.Supports(manifestItem.Type)); if (processor == null) { Logger.LogDiagnostic($"No processor found for {manifestItem.Type}, skipping."); continue; } if (processor.TryProcess(manifest, manifestItem, outputFolder)) { _addedFiles++; } } Logger.LogInfo($"Added modification date to {_addedFiles} articles."); return manifest; } }