public bool PublishArticle(ArticlePublishModel model) { try { var parentSection = model.SectionUri != null?Path.Combine(_outputFolder, model.SectionUri) : _outputFolder; Directory.CreateDirectory(parentSection); if (model.IsSection) { var sectionDir = Path.Combine(parentSection, model.ArticleUri); Directory.CreateDirectory(sectionDir); return(true); } var articleTitleAndExcerpt = "## " + model.ArticleTitle + "\n"; articleTitleAndExcerpt += model.ArticleExcerpt + "\n"; //section index file File.AppendAllText(Path.Combine(parentSection, "$index.md"), articleTitleAndExcerpt); //article file var filepath = Path.Combine(parentSection, MakeFileNameFromTitle(model.ArticleTitle)) + ".md"; File.WriteAllText(filepath, model.ArticleBody); _logger.LogInformation("Article was published. Path: " + filepath); } catch (Exception ex) { _logger.LogError($"ERROR on publishing [{model.ArticleTitle}]:" + ex.Message); return(false); } return(true); }
public int Generate(IArticlePublisher publisher) { _logger?.LogInformation($"Processing assemblies in {_srcPath}..."); LoadLibraryTypes(); var dest = Directory.GetCurrentDirectory(); int articleCount = 0; var packageGroups = _types.GroupBy(x => x.Package).OrderBy(x => x.Key?.Name); foreach (var packageGroup in packageGroups) { var packageSectionName = packageGroup.Key?.Name; var packageSection = packageSectionName != null ? new ArticlePublishModel { ArticleTitle = packageSectionName, ArticleUri = packageSectionName.MakeUriFromString(), ArticleBody = packageGroup.Key.Description, ArticleExcerpt = packageGroup.Key.Description, IsSection = true } : null; if (packageSection != null && publisher.PublishArticle(packageSection)) { articleCount++; } ; var namespaceGroups = packageGroup.GroupBy(x => x.Namespace).OrderBy(x => x.Key); foreach (var namespaceGroup in namespaceGroups) { var namespaceSectionName = namespaceGroup.Key + " namespace"; var namespaceSection = new ArticlePublishModel { SectionUri = packageSection?.ArticleUri, ArticleTitle = namespaceSectionName, ArticleUri = namespaceSectionName.MakeUriFromString(), IsSection = true }; if (publisher.PublishArticle(namespaceSection)) { articleCount++; } ; var namespaceTypes = namespaceGroup.OrderBy(x => x.Name).Distinct(new MarkdownableTypeEqualityComparer()); foreach (var item in namespaceTypes) { SetLinks(item, _types, _aistantSettings.Kb, _aistantSettings.Section.Uri, _aistantSettings.Team); string itemName = item.GetNameWithKind(); string itemString = item.ToString(); string itemSummary = item.GetSummary(); bool ok = publisher.PublishArticle(new ArticlePublishModel { SectionUri = packageSection?.ArticleUri.CombineWithUri(namespaceSection.ArticleUri) ?? namespaceSection.ArticleUri, ArticleTitle = itemName, ArticleUri = itemName.MakeUriFromString(), ArticleBody = itemString, ArticleExcerpt = itemSummary }); if (ok) { articleCount++; } } } } return(articleCount); }
private int ProcessModule(ITypeScriptModule module, IArticlePublisher saver, string parentSectionUrl = null) { var articleCount = 0; var sectionName = module.BeautifulName; var sectionUrl = sectionName.MakeUriFromString(); var fullSectionUrl = (parentSectionUrl != null) ? parentSectionUrl.CombineWithUri(sectionUrl) : sectionUrl; var enums = module.Enumerations.Where(e => e.IsExported).ToList(); var classes = module.Classes.Where(c => c.IsExported).ToList(); var interfaces = module.Interfaces.Where(i => i.IsExported).ToList(); var functions = module.Functions.Where(f => f.IsExported).ToList(); var variables = module.Variables.Where(v => v.IsExported).ToList(); var nspaces = module.Namespaces.Where(n => n.IsExported).ToList(); //support extention interfaces var extensionInterfaces = module.Namespaces.Where(n => _lib.Packages.Any(p => n.Name.Contains(p.Name))) .SelectMany(n => n.Interfaces) .ToList(); extensionInterfaces = extensionInterfaces.Where(i => ContainsClassOrInterface(i.Name)) .ToList(); if (enums.Any() || classes.Any() || interfaces.Any() || functions.Any() || variables.Any() || extensionInterfaces.Any()) { var parentSection = new ArticlePublishModel { SectionUri = parentSectionUrl, ArticleTitle = sectionName, ArticleUri = sectionUrl, ArticleExcerpt = module.Comment?.ShortText ?? " ", ArticleBody = module.Comment?.ShortText ?? "", IsSection = true }; //Create section for package/namespace if (saver.PublishArticle(parentSection)) { articleCount++; } foreach (var nspace in nspaces) { articleCount += ProcessModule(nspace, saver, fullSectionUrl); } if (enums.Any()) { var section = new ArticlePublishModel { SectionTitle = sectionName, SectionUri = fullSectionUrl, ArticleTitle = "Enumerations", ArticleUri = "enumerations", IsSection = true }; //Create section for package/namespace if (saver.PublishArticle(section)) { articleCount++; } //Processing Enumerations foreach (var @enum in enums) { var itemName = @enum.BeautifulName; var itemSummary = @enum.Comment?.ShortText; var itemContent = BuildContent(@enum); var articleSaveModel = new ArticlePublishModel { SectionTitle = section.ArticleTitle, SectionUri = fullSectionUrl.CombineWithUri(section.ArticleUri), ArticleTitle = itemName, ArticleUri = itemName.MakeUriFromString(), ArticleExcerpt = itemSummary, ArticleBody = itemContent }; if (saver.PublishArticle(articleSaveModel)) { articleCount++; } } } if (interfaces.Any()) { var section = new ArticlePublishModel { SectionTitle = sectionName, SectionUri = fullSectionUrl, ArticleTitle = "Interfaces", ArticleUri = "interfaces", IsSection = true }; //Create section for interfaces if (saver.PublishArticle(section)) { articleCount++; } //Processing Interfaces foreach (var @interface in interfaces) { var itemName = @interface.BeautifulName; var itemSummary = GetSummary(@interface, extension: false, articleUrl: null); var itemContent = BuildContent(@interface); var articleSaveModel = new ArticlePublishModel { SectionTitle = section.ArticleTitle, SectionUri = fullSectionUrl.CombineWithUri(section.ArticleUri), ArticleTitle = itemName, ArticleUri = itemName.MakeUriFromString(), ArticleExcerpt = itemSummary, ArticleBody = itemContent }; if (saver.PublishArticle(articleSaveModel)) { articleCount++; } } } if (classes.Any()) { var section = new ArticlePublishModel { SectionTitle = sectionName, SectionUri = fullSectionUrl, ArticleTitle = "Classes", ArticleUri = "classes", IsSection = true }; //Create section for interfaces if (saver.PublishArticle(section)) { articleCount++; } //Processing Classes foreach (var @class in classes) { var itemName = @class.BeautifulName; var itemSummary = GetSummary(@class); var itemContent = BuildContent(@class); var articleSaveModel = new ArticlePublishModel { SectionTitle = section.ArticleTitle, SectionUri = fullSectionUrl.CombineWithUri(section.ArticleUri), ArticleTitle = itemName, ArticleUri = itemName.MakeUriFromString(), ArticleExcerpt = itemSummary, ArticleBody = itemContent }; if (saver.PublishArticle(articleSaveModel)) { articleCount++; } } } if (extensionInterfaces.Any()) { var section = new ArticlePublishModel { SectionTitle = sectionName, SectionUri = fullSectionUrl, ArticleTitle = "Extensions", ArticleUri = "extensions", IsSection = true }; //Create section for extensions if (saver.PublishArticle(section)) { articleCount++; } //Processing extensions foreach (var extensionInterface in extensionInterfaces) { var itemName = extensionInterface.Name + " extensions"; var articleUrl = section.ArticleUri.CombineWithUri(itemName.MakeUriFromString()); var itemSummary = GetSummary(extensionInterface, extension: true, articleUrl: articleUrl); var itemContent = BuildContent(extensionInterface, extension: true, articleUrl: articleUrl); var articleSaveModel = new ArticlePublishModel { SectionTitle = section.ArticleTitle, SectionUri = fullSectionUrl.CombineWithUri(section.ArticleUri), ArticleTitle = itemName, ArticleUri = itemName.MakeUriFromString(), ArticleExcerpt = itemSummary, ArticleBody = itemContent }; if (saver.PublishArticle(articleSaveModel)) { articleCount++; } } } if (functions.Any()) { var itemSummary = GetSummary(module, module.Functions); var articleSaveModel = new ArticlePublishModel { SectionTitle = sectionName, SectionUri = fullSectionUrl, ArticleTitle = "Functions", ArticleUri = "functions", ArticleBody = BuildContent(functions), ArticleExcerpt = itemSummary }; if (saver.PublishArticle(articleSaveModel)) { articleCount++; } } if (variables.Any()) { var itemSummary = GetSummary(module, module.Variables); var articleSaveModel = new ArticlePublishModel { SectionTitle = sectionName, SectionUri = fullSectionUrl, ArticleTitle = "Variables", ArticleUri = "Variables", ArticleBody = BuildContent(variables), ArticleExcerpt = itemSummary }; if (saver.PublishArticle(articleSaveModel)) { articleCount++; } } } return(articleCount); }
public bool PublishArticle(ArticlePublishModel model) { return(_service.UploadArticleAsync(model.SectionUri, model.SectionTitle, model.ArticleUri, model.ArticleTitle, model.ArticleBody, model.ArticleExcerpt, model.IsSection).Result); }