public Task <IDocumentationIndex> IndexFiles() { DirectoryInfo directoryInfo = _Options.GetDocumentationFolderAsAbsolute(_HostingEnvironment.ContentRootPath); _Logger.LogInformation($"Building documentation index."); IDocumentationIndex documentationIndex = new DocumentationIndex(); IDocumentationProject documentationProject = new DocumentationProject(_Options.DefaultDocuments, _Options.LandingPageDocument, null); BuildDocumentationSubTree(directoryInfo, directoryInfo, documentationProject); foreach (var project in documentationProject.SubProjects) { documentationIndex.Projects.Add(project); } documentationIndex.DefaultProject = new DocumentationProject(_Options.DefaultDocuments, _Options.LandingPageDocument, ""); documentationIndex.DefaultProject.Documents.AddRange(documentationProject.Documents.OrderBy(o => o.Name)); return(Task.FromResult(documentationIndex)); }
private DocumentationDocumentType BuildDocumentationSubTree(DirectoryInfo directoryInfo, DirectoryInfo topDirectoryInfo, IDocumentationProject project) { DocumentationDocumentType subTreeDocumentType = DocumentationDocumentType.Folder; project.Path = directoryInfo.FullName; foreach (var file in directoryInfo.EnumerateFiles()) { var docType = DocumentationHelper.GetDocumentationDocumentTypeFromName(file.Name); var relativePath = _Options.DocumentationFolder + project.Path.Replace(topDirectoryInfo.FullName, "").Replace("\\", "/"); switch (docType) { case DocumentationDocumentType.Markdown: if (!_Options.Documents?.Markdown?.Enabled ?? false) { break; } _Logger.LogInformation($"Adding {relativePath}/{file.Name}"); // The markdown pipeline isn't needed for the content extraction. project.Documents.Add(new MarkdownDocument(null) { Path = file.FullName, LastUpdate = file.LastWriteTimeUtc }); break; case DocumentationDocumentType.Word: if (!_Options.Documents?.Word?.Enabled ?? false) { break; } _Logger.LogInformation($"Adding {relativePath}/{file.Name}"); project.Documents.Add(new WordDocument { Path = file.FullName, LastUpdate = file.LastWriteTimeUtc }); break; case DocumentationDocumentType.Pdf: if (!_Options.Documents?.Pdf?.Enabled ?? false) { break; } _Logger.LogInformation($"Adding {relativePath}/{file.Name}"); project.Documents.Add(new DocumentationDocument { Path = file.FullName, DocumentType = docType, LastUpdate = file.LastWriteTimeUtc }); break; case DocumentationDocumentType.Html: if (!_Options.Documents?.Html?.Enabled ?? false) { break; } _Logger.LogInformation($"Adding {relativePath}/{file.Name}"); project.Documents.Add(new DocumentationDocument { Path = file.FullName, DocumentType = docType, LastUpdate = file.LastWriteTimeUtc }); break; case DocumentationDocumentType.Drawio: if (!_Options.Documents?.Drawio?.Enabled ?? false) { break; } _Logger.LogInformation($"Adding {relativePath}/{file.Name}"); project.Documents.Add(new DocumentationDocument { Path = file.FullName, DocumentType = docType, LastUpdate = file.LastWriteTimeUtc }); break; case DocumentationDocumentType.DrawioSvg: if (!_Options.Documents?.DrawioSvg?.Enabled ?? false) { break; } _Logger.LogInformation($"Adding {relativePath}/{file.Name}"); project.Documents.Add(new DocumentationDocument { Path = file.FullName, DocumentType = docType, LastUpdate = file.LastWriteTimeUtc }); break; case DocumentationDocumentType.Folder: project.Documents.Add(new DocumentationDocument { Path = file.FullName, DocumentType = docType, LastUpdate = file.LastWriteTimeUtc }); break; case DocumentationDocumentType.Project: subTreeDocumentType = DocumentationDocumentType.Project; break; case DocumentationDocumentType.Unknown: break; default: break; } } foreach (var directory in directoryInfo.EnumerateDirectories()) { IDocumentationProject subProject = new DocumentationProject(_Options.DefaultDocuments, _Options.LandingPageDocument, project.KeyPath); var subDocumentType = BuildDocumentationSubTree(directory, topDirectoryInfo, subProject); if (subDocumentType == DocumentationDocumentType.Project) { project.SubProjects.Add(subProject); } else { var documentationDirectory = new DocumentationDocument { DocumentType = subDocumentType, Path = directory.FullName, LastUpdate = directory.LastWriteTimeUtc }; if (subProject.Documents.Any()) { documentationDirectory.SubDocuments = subProject.Documents.OrderBy(o => o.Name).ToArray(); project.Documents.Add(documentationDirectory); } } } return(subTreeDocumentType); }