Relative Path to relative to content
This commit is contained in:
parent
ec3afd2f96
commit
40b12d17f9
234
.kanbn/board.json
Normal file
234
.kanbn/board.json
Normal file
@ -0,0 +1,234 @@
|
||||
{
|
||||
"headings": [
|
||||
{
|
||||
"name": "Backlog",
|
||||
"heading": "^:^+Backlog^:"
|
||||
},
|
||||
{
|
||||
"name": "Todo",
|
||||
"heading": "^:^+Todo^:"
|
||||
},
|
||||
{
|
||||
"name": "In Progress",
|
||||
"heading": "^:^c»^: ^+In Progress^:"
|
||||
},
|
||||
{
|
||||
"name": "Done",
|
||||
"heading": "^:^g✓^: ^+Done^:"
|
||||
}
|
||||
],
|
||||
"lanes": [
|
||||
{
|
||||
"name": "All tasks",
|
||||
"columns": [
|
||||
[
|
||||
{
|
||||
"id": "relative-path-to-relative-to-content",
|
||||
"name": "Relative Path to relative to content",
|
||||
"description": "- [ ] Update method ConvertLinksForHugo to actual wanted results",
|
||||
"metadata": {
|
||||
"created": "2023-07-18T14:50:28.239Z",
|
||||
"updated": "2023-07-18T14:54:09.060Z",
|
||||
"assigned": "",
|
||||
"progress": 0,
|
||||
"tags": []
|
||||
},
|
||||
"subTasks": [],
|
||||
"relations": [],
|
||||
"comments": [],
|
||||
"column": "Backlog",
|
||||
"workload": 2,
|
||||
"progress": 0,
|
||||
"remainingWorkload": 2
|
||||
},
|
||||
{
|
||||
"id": "markdown-links-to-json",
|
||||
"name": "Markdown links to json",
|
||||
"description": "",
|
||||
"metadata": {
|
||||
"created": "2023-07-18T14:53:27.412Z",
|
||||
"updated": "2023-07-18T14:53:33.147Z",
|
||||
"assigned": "",
|
||||
"progress": 0,
|
||||
"tags": []
|
||||
},
|
||||
"subTasks": [],
|
||||
"relations": [],
|
||||
"comments": [],
|
||||
"column": "Backlog",
|
||||
"workload": 2,
|
||||
"progress": 0,
|
||||
"remainingWorkload": 2
|
||||
},
|
||||
{
|
||||
"id": "markdown-to-json",
|
||||
"name": "Markdown to json",
|
||||
"description": "",
|
||||
"metadata": {
|
||||
"created": "2023-07-18T14:48:18.667Z",
|
||||
"updated": "2023-07-18T14:48:18.660Z",
|
||||
"assigned": "",
|
||||
"progress": 0,
|
||||
"tags": []
|
||||
},
|
||||
"subTasks": [],
|
||||
"relations": [],
|
||||
"comments": [],
|
||||
"column": "Backlog",
|
||||
"workload": 2,
|
||||
"progress": 0,
|
||||
"remainingWorkload": 2
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"id": "find-orphan-links",
|
||||
"name": "Find orphan links",
|
||||
"description": "",
|
||||
"metadata": {
|
||||
"created": "2023-07-08T00:30:27.277Z",
|
||||
"updated": "2023-07-08T04:49:18.108Z",
|
||||
"assigned": "",
|
||||
"progress": 0,
|
||||
"tags": [],
|
||||
"started": "2023-07-08T04:41:56.433Z"
|
||||
},
|
||||
"subTasks": [],
|
||||
"relations": [],
|
||||
"comments": [],
|
||||
"column": "Todo",
|
||||
"workload": 2,
|
||||
"progress": 0,
|
||||
"remainingWorkload": 2
|
||||
}
|
||||
],
|
||||
[],
|
||||
[
|
||||
{
|
||||
"id": "break-circular-references",
|
||||
"name": "Break Circular References",
|
||||
"description": "",
|
||||
"metadata": {
|
||||
"created": "2023-07-08T00:31:18.301Z",
|
||||
"updated": "2023-07-08T03:13:47.959Z",
|
||||
"assigned": "",
|
||||
"progress": 0,
|
||||
"tags": [],
|
||||
"started": "2023-07-08T00:31:22.970Z",
|
||||
"completed": "2023-07-08T03:13:47.959Z"
|
||||
},
|
||||
"subTasks": [],
|
||||
"relations": [],
|
||||
"comments": [],
|
||||
"column": "Done",
|
||||
"workload": 2,
|
||||
"progress": 1,
|
||||
"remainingWorkload": 0
|
||||
},
|
||||
{
|
||||
"id": "populate-a-collection-of-file-info-front-matter-and-first-indent-of-1",
|
||||
"name": "Populate a collection of FileInfo, Front Matter and First # indent of 1",
|
||||
"description": "",
|
||||
"metadata": {
|
||||
"created": "2023-07-08T00:30:00.353Z",
|
||||
"updated": "2023-07-08T04:08:04.155Z",
|
||||
"assigned": "",
|
||||
"progress": 0,
|
||||
"tags": [],
|
||||
"started": "2023-07-08T02:17:23.556Z",
|
||||
"completed": "2023-07-08T04:08:04.156Z"
|
||||
},
|
||||
"subTasks": [],
|
||||
"relations": [],
|
||||
"comments": [],
|
||||
"column": "Done",
|
||||
"workload": 2,
|
||||
"progress": 1,
|
||||
"remainingWorkload": 0
|
||||
},
|
||||
{
|
||||
"id": "use-humanizer-on-title-of-links",
|
||||
"name": "Use humanizer on title of links",
|
||||
"description": "",
|
||||
"metadata": {
|
||||
"created": "2023-07-08T03:22:14.065Z",
|
||||
"updated": "2023-07-08T04:08:05.706Z",
|
||||
"assigned": "",
|
||||
"progress": 0,
|
||||
"tags": [],
|
||||
"completed": "2023-07-08T04:08:05.706Z"
|
||||
},
|
||||
"subTasks": [],
|
||||
"relations": [],
|
||||
"comments": [],
|
||||
"column": "Done",
|
||||
"workload": 2,
|
||||
"progress": 1,
|
||||
"remainingWorkload": 0
|
||||
},
|
||||
{
|
||||
"id": "convert-files-to-slug-name",
|
||||
"name": "Convert files to slug name",
|
||||
"description": "",
|
||||
"metadata": {
|
||||
"created": "2023-07-08T00:31:48.068Z",
|
||||
"updated": "2023-07-08T03:13:39.928Z",
|
||||
"assigned": "",
|
||||
"progress": 0,
|
||||
"tags": [],
|
||||
"completed": "2023-07-08T03:13:39.928Z"
|
||||
},
|
||||
"subTasks": [],
|
||||
"relations": [],
|
||||
"comments": [],
|
||||
"column": "Done",
|
||||
"workload": 2,
|
||||
"progress": 1,
|
||||
"remainingWorkload": 0
|
||||
},
|
||||
{
|
||||
"id": "convert-wiki-links-to-markdown-links",
|
||||
"name": "Convert Wiki Links to Markdown Links",
|
||||
"description": "",
|
||||
"metadata": {
|
||||
"created": "2023-07-08T00:28:50.180Z",
|
||||
"updated": "2023-07-08T03:14:14.308Z",
|
||||
"assigned": "",
|
||||
"progress": 0,
|
||||
"tags": [],
|
||||
"started": "2023-07-08T02:17:20.346Z",
|
||||
"completed": "2023-07-08T03:14:14.308Z"
|
||||
},
|
||||
"subTasks": [],
|
||||
"relations": [],
|
||||
"comments": [],
|
||||
"column": "Done",
|
||||
"workload": 2,
|
||||
"progress": 1,
|
||||
"remainingWorkload": 0
|
||||
},
|
||||
{
|
||||
"id": "add-update-date-in-front-matter",
|
||||
"name": "Add / Update date in Front Matter",
|
||||
"description": "- [ ] Maybe done",
|
||||
"metadata": {
|
||||
"created": "2023-07-08T00:27:35.865Z",
|
||||
"updated": "2023-07-08T03:13:43.907Z",
|
||||
"assigned": "",
|
||||
"progress": 0,
|
||||
"tags": [],
|
||||
"completed": "2023-07-08T03:13:43.907Z"
|
||||
},
|
||||
"subTasks": [],
|
||||
"relations": [],
|
||||
"comments": [],
|
||||
"column": "Done",
|
||||
"workload": 2,
|
||||
"progress": 1,
|
||||
"remainingWorkload": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
BIN
.kanbn/board.md
BIN
.kanbn/board.md
Binary file not shown.
@ -13,6 +13,9 @@ updated: 2023-07-07T03:46:47.454Z
|
||||
|
||||
## Backlog
|
||||
|
||||
- [markdown-links-to-json](tasks/markdown-links-to-json.md)
|
||||
- [markdown-to-json](tasks/markdown-to-json.md)
|
||||
|
||||
## Todo
|
||||
|
||||
- [find-orphan-links](tasks/find-orphan-links.md)
|
||||
@ -27,3 +30,4 @@ updated: 2023-07-07T03:46:47.454Z
|
||||
- [convert-files-to-slug-name](tasks/convert-files-to-slug-name.md)
|
||||
- [convert-wiki-links-to-markdown-links](tasks/convert-wiki-links-to-markdown-links.md)
|
||||
- [add-update-date-in-front-matter](tasks/add-update-date-in-front-matter.md)
|
||||
- [relative-path-to-relative-to-content](tasks/relative-path-to-relative-to-content.md)
|
||||
|
10
.kanbn/tasks/markdown-links-to-json.md
Normal file
10
.kanbn/tasks/markdown-links-to-json.md
Normal file
@ -0,0 +1,10 @@
|
||||
---
|
||||
type: "kanbn"
|
||||
created: 2023-07-18T14:53:27.412Z
|
||||
updated: 2023-07-18T14:53:33.147Z
|
||||
assigned: ""
|
||||
progress: 0
|
||||
tags: []
|
||||
---
|
||||
|
||||
# Markdown links to json
|
10
.kanbn/tasks/markdown-to-json.md
Normal file
10
.kanbn/tasks/markdown-to-json.md
Normal file
@ -0,0 +1,10 @@
|
||||
---
|
||||
type: "kanbn"
|
||||
created: 2023-07-18T14:48:18.667Z
|
||||
updated: 2023-07-18T14:48:18.660Z
|
||||
assigned: ""
|
||||
progress: 0
|
||||
tags: []
|
||||
---
|
||||
|
||||
# Markdown to json
|
11
.kanbn/tasks/relative-path-to-relative-to-content.md
Normal file
11
.kanbn/tasks/relative-path-to-relative-to-content.md
Normal file
@ -0,0 +1,11 @@
|
||||
---
|
||||
type: kanbn
|
||||
created: 2023-07-18T14:50:28.239Z
|
||||
updated: 2023-07-19T04:46:32.554Z
|
||||
assigned: ""
|
||||
progress: 0
|
||||
tags: []
|
||||
completed: 2023-07-19T04:40:41.523Z
|
||||
---
|
||||
|
||||
# Relative Path to relative to content
|
11
.vscode/launch.json
vendored
11
.vscode/launch.json
vendored
@ -37,14 +37,5 @@
|
||||
// dotnet run "s" "C:/Users/phares/.nuget/packages"
|
||||
// dotnet run "s" "D:/ProgramData/EC_EAFRepository/nupkg"
|
||||
// dotnet run "s" "D:/Baget/packages"
|
||||
// dotnet run "s" "L:/Baget/packages"
|
||||
// dotnet run "s" "L:/Verdaccio/storage"
|
||||
// dotnet run "s" "\\messdv002.na.infineon.com\Candela\BaGet\packages"
|
||||
// dotnet run "s" "\\messa01ec.ec.local\apps\Metrology\Run Data Repository"
|
||||
// dotnet run "s" "D:/Documents/Obsidian/Infineon/.kanbn"
|
||||
// dotnet run "s" "L:/Git/View-by-Distance-MKLink-Console/.kanbn"
|
||||
// dotnet run "s" "T:/MESAFIBACKLOG/06_SourceCode/MESAFIBACKLOG/Adaptation/.kanbn"
|
||||
// dotnet run "s" "D:/Documents/Projects/EC-Documentation - Foam/.kanbn"
|
||||
// dotnet run "s" "D:/Documents/Notes/Infineon"
|
||||
// dotnet run "s" "D:/5-Other-Small/Notes/Infineon/.kanbn"
|
||||
// dotnet run "s" "D:/Documents/Projects/EC-Documentation"
|
||||
// dotnet run "s" "T:/MESAFIBACKLOG/06_SourceCode/MESAFIBACKLOG/Adaptation/.kanbn"
|
16
.vscode/settings.json
vendored
16
.vscode/settings.json
vendored
@ -10,12 +10,14 @@
|
||||
"**/node_modules": true
|
||||
},
|
||||
"cSpell.words": [
|
||||
"ASPNETCORE",
|
||||
"endianness",
|
||||
"Infineon",
|
||||
"Kanban",
|
||||
"Phares",
|
||||
"Serilog",
|
||||
"SYSLIB"
|
||||
"ASPNETCORE",
|
||||
"endianness",
|
||||
"Infineon",
|
||||
"Kanban",
|
||||
"kanbn",
|
||||
"onenote",
|
||||
"Phares",
|
||||
"Serilog",
|
||||
"SYSLIB"
|
||||
]
|
||||
}
|
50
.vscode/tasks.json
vendored
50
.vscode/tasks.json
vendored
@ -2,7 +2,7 @@
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "userSecretsInit",
|
||||
"label": "User Secrets Init",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
@ -14,7 +14,7 @@
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "userSecretsSet",
|
||||
"label": "User Secrets Set",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
@ -28,7 +28,7 @@
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "format",
|
||||
"label": "Format",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
@ -79,7 +79,7 @@
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "publishAot",
|
||||
"label": "Publish AOT",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
@ -96,6 +96,48 @@
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "File-Folder-Helper AOT s H Run Data Repository",
|
||||
"type": "shell",
|
||||
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s H '\\\\messa01ec.ec.local\\apps\\Metrology\\Run Data Repository'",
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "File-Folder-Helper AOT s J Verdaccio",
|
||||
"type": "shell",
|
||||
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s J 'L:/Verdaccio/storage'",
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "File-Folder-Helper AOT s M Self .Kanbn Tasks",
|
||||
"type": "shell",
|
||||
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s M '.kanbn/tasks'",
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "File-Folder-Helper AOT s S BaGet",
|
||||
"type": "shell",
|
||||
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s S 'L:/BaGet/packages'",
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Kanbn Console",
|
||||
"type": "npm",
|
||||
"script": "kanbn.board",
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Kanbn Write Boad",
|
||||
"type": "shell",
|
||||
"command": "& kanbn board -j | L:/Git/kanbn2md/kanbn2md.exe >.kanbn/board.md",
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Kanbn Write json",
|
||||
"type": "npm",
|
||||
"script": "kanbn.board.json",
|
||||
"problemMatcher": []
|
||||
}
|
||||
]
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<LangVersion>11.0</LangVersion>
|
||||
@ -10,7 +10,7 @@
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Humanizer.Core" Version="2.14.1" />
|
||||
<PackageReference Include="runtime.win-x64.Microsoft.DotNet.ILCompiler" Version="7.0.8" />
|
||||
<PackageReference Include="runtime.win-x64.Microsoft.DotNet.ILCompiler" Version="7.0.9" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="7.0.0" />
|
||||
<PackageReference Include="System.Text.Json" Version="7.0.3" />
|
||||
|
@ -1,12 +1,15 @@
|
||||
using Humanizer;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace File_Folder_Helper.Helpers;
|
||||
|
||||
internal static class HelperCreateNoteFiles
|
||||
internal static partial class HelperCreateNoteFiles
|
||||
{
|
||||
|
||||
[GeneratedRegex("[^a-z0-9-]")]
|
||||
private static partial Regex AlphaNumOnly();
|
||||
|
||||
private static void CleanExistingFiles(string directory, long ticks)
|
||||
{
|
||||
string check;
|
||||
@ -97,31 +100,102 @@ internal static class HelperCreateNoteFiles
|
||||
}
|
||||
}
|
||||
|
||||
private static string? GetTags(string tagsText)
|
||||
{
|
||||
string? result;
|
||||
StringBuilder stringBuilder = new();
|
||||
if (string.IsNullOrEmpty(tagsText))
|
||||
result = null;
|
||||
else
|
||||
{
|
||||
string[] segments;
|
||||
_ = stringBuilder.AppendLine("tags:");
|
||||
string[] tags = tagsText.Split(';', StringSplitOptions.RemoveEmptyEntries);
|
||||
foreach (string tag in tags)
|
||||
{
|
||||
segments = tag.Split(':');
|
||||
_ = stringBuilder.AppendLine($"- '{segments.First()}'");
|
||||
}
|
||||
result = stringBuilder.ToString().Trim();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static string? GetLinks(string type, string linksText)
|
||||
{
|
||||
string? result;
|
||||
StringBuilder stringBuilder = new();
|
||||
if (!string.IsNullOrEmpty(linksText))
|
||||
result = null;
|
||||
else
|
||||
{
|
||||
string linkLower;
|
||||
string[] segments;
|
||||
string[] links = linksText.Split(';', StringSplitOptions.RemoveEmptyEntries);
|
||||
foreach (string link in links)
|
||||
{
|
||||
segments = link.Split(':');
|
||||
linkLower = AlphaNumOnly().Replace(segments.First().Trim().ToLower(), "-").Replace("--", "-");
|
||||
if (segments.Length == 1)
|
||||
_ = stringBuilder.AppendLine($"- [[{type}/{linkLower}]]");
|
||||
else if (segments.Length == 2)
|
||||
_ = stringBuilder.AppendLine($"- [{type}/{linkLower}]({segments.Last()})");
|
||||
else
|
||||
continue;
|
||||
}
|
||||
result = stringBuilder.ToString().Trim();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static string? GetAttributes(string[] columns, string[]? headerColumns, int expectedCount)
|
||||
{
|
||||
string? result;
|
||||
if (headerColumns is null || columns.Length <= expectedCount)
|
||||
result = null;
|
||||
else
|
||||
{
|
||||
StringBuilder stringBuilder = new();
|
||||
for (int j = expectedCount; j < columns.Length; j++)
|
||||
{
|
||||
if (headerColumns.Length <= j)
|
||||
continue;
|
||||
_ = stringBuilder.AppendLine($"{headerColumns[j].Trim()}: '{columns[j].Trim()}'");
|
||||
}
|
||||
result = stringBuilder.ToString().Trim();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void CreateImportFiles(long ticks, List<string> importFiles)
|
||||
{
|
||||
bool csv;
|
||||
bool tsv;
|
||||
string file;
|
||||
string text;
|
||||
string type;
|
||||
string title;
|
||||
string? tags;
|
||||
string? links;
|
||||
string[] lines;
|
||||
string[] links;
|
||||
int bodyKey = 4;
|
||||
int bodyKey = 5;
|
||||
int tagsKey = 3;
|
||||
int typeKey = 0;
|
||||
string linkText;
|
||||
int linksKey = 3;
|
||||
string fileName;
|
||||
string tagsText;
|
||||
int linksKey = 4;
|
||||
int titleKey = 1;
|
||||
string linksText;
|
||||
string[] columns;
|
||||
string? directory;
|
||||
string[] segments;
|
||||
string? attributes;
|
||||
int descriptionKey = 2;
|
||||
string[]? headerColumns;
|
||||
string destinationDirectory;
|
||||
List<string> allLines = new();
|
||||
DateTime dateTime = new(ticks);
|
||||
StringBuilder attributes = new();
|
||||
StringBuilder keyValuePairLinks = new();
|
||||
string csvHeader = "type,title,description,links,body";
|
||||
string tsvHeader = "type\ttitle\tdescription\tlinks\tbody";
|
||||
string csvHeader = "type,title,description,tags,links,body";
|
||||
string tsvHeader = "type\ttitle\tdescription\ttags\tlinks\tbody";
|
||||
int expectedCount = csvHeader.Length - csvHeader.Replace(",", string.Empty).Length + 1;
|
||||
foreach (string importFile in importFiles)
|
||||
{
|
||||
@ -158,58 +232,42 @@ internal static class HelperCreateNoteFiles
|
||||
continue;
|
||||
if (columns.Length < expectedCount)
|
||||
continue;
|
||||
_ = attributes.Clear();
|
||||
_ = keyValuePairLinks.Clear();
|
||||
title = columns[titleKey].Trim();
|
||||
linkText = columns[linksKey].Trim();
|
||||
type = columns[typeKey].Trim().ToLower().Replace(' ', '-');
|
||||
if (string.IsNullOrEmpty(linkText))
|
||||
links = Array.Empty<string>();
|
||||
else
|
||||
links = linkText.Split(';', StringSplitOptions.RemoveEmptyEntries);
|
||||
if (headerColumns is not null && columns.Length > expectedCount)
|
||||
{
|
||||
for (int j = expectedCount; j < columns.Length; j++)
|
||||
{
|
||||
if (headerColumns.Length <= j)
|
||||
continue;
|
||||
_ = attributes.AppendLine($"{headerColumns[j].Trim().Camelize()}: '{columns[j].Trim()}'");
|
||||
}
|
||||
}
|
||||
foreach (string link in links)
|
||||
{
|
||||
segments = link.Split(':');
|
||||
if (segments.Length == 1)
|
||||
_ = keyValuePairLinks.AppendLine($"- [[{segments.First()}]]");
|
||||
else if (segments.Length == 2)
|
||||
_ = keyValuePairLinks.AppendLine($"- [{segments.First()}]({segments.Last()})");
|
||||
else
|
||||
continue;
|
||||
}
|
||||
tagsText = columns[tagsKey].Trim();
|
||||
linksText = columns[linksKey].Trim();
|
||||
fileName = AlphaNumOnly().Replace(title.ToLower(), "-").Replace("--", "-");
|
||||
type = AlphaNumOnly().Replace(columns[typeKey].Trim().ToLower(), "-").Replace("--", "-");
|
||||
tags = GetTags(tagsText);
|
||||
links = GetLinks(type, linksText);
|
||||
attributes = GetAttributes(columns, headerColumns, expectedCount);
|
||||
destinationDirectory = Path.Combine(directory, type);
|
||||
if (!Directory.Exists(destinationDirectory))
|
||||
_ = Directory.CreateDirectory(destinationDirectory);
|
||||
file = Path.Combine(destinationDirectory, $"{title.ToLower().Replace(' ', '-')}.md");
|
||||
File.WriteAllLines(file, new string[]
|
||||
{
|
||||
"---",
|
||||
$"type: '{type}'",
|
||||
$"title: '{title}'",
|
||||
$"description: '{columns[descriptionKey].Trim()}'",
|
||||
$"created: {dateTime:yyyy-MM-ddTHH:mm:ss.fffZ}",
|
||||
$"updated: {dateTime:yyyy-MM-ddTHH:mm:ss.fffZ}",
|
||||
attributes.ToString(),
|
||||
"---",
|
||||
string.Empty,
|
||||
$"# {title}",
|
||||
string.Empty,
|
||||
keyValuePairLinks.ToString(),
|
||||
string.Empty,
|
||||
$"## Comment {dateTime:yyyy-MM-dd}",
|
||||
string.Empty,
|
||||
columns[bodyKey].Trim(),
|
||||
string.Empty,
|
||||
});
|
||||
file = Path.Combine(destinationDirectory, $"{fileName}.md");
|
||||
allLines.Clear();
|
||||
allLines.Add("---");
|
||||
allLines.Add($"type: '{type}'");
|
||||
allLines.Add($"title: '{title}'");
|
||||
allLines.Add($"description: '{columns[descriptionKey].Trim()}'");
|
||||
allLines.Add($"created: {dateTime:yyyy-MM-ddTHH:mm:ss.fffZ}");
|
||||
allLines.Add($"updated: {dateTime:yyyy-MM-ddTHH:mm:ss.fffZ}");
|
||||
if (!string.IsNullOrEmpty(tags))
|
||||
allLines.Add(tags);
|
||||
if (!string.IsNullOrEmpty(attributes))
|
||||
allLines.Add(attributes);
|
||||
allLines.Add("---");
|
||||
allLines.Add(string.Empty);
|
||||
allLines.Add($"# {title}");
|
||||
allLines.Add(string.Empty);
|
||||
if (!string.IsNullOrEmpty(links))
|
||||
allLines.Add(links);
|
||||
allLines.Add(string.Empty);
|
||||
allLines.Add($"## Comment {dateTime:yyyy-MM-dd}");
|
||||
allLines.Add(string.Empty);
|
||||
allLines.Add(columns[bodyKey].Trim());
|
||||
allLines.Add(string.Empty);
|
||||
text = string.Join(Environment.NewLine, allLines);
|
||||
File.WriteAllText(file, text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
using Humanizer;
|
||||
using File_Folder_Helper.Models;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
|
||||
@ -7,8 +8,12 @@ namespace File_Folder_Helper.Helpers;
|
||||
internal static partial class HelperMarkdown
|
||||
{
|
||||
|
||||
private record Record(string Source,
|
||||
string? StartAt,
|
||||
string? Destination);
|
||||
|
||||
/// <summary>
|
||||
/// Determines a text file's encoding by analyzing its byte order mark (BOM).
|
||||
/// Determines files text file's encoding by analyzing its byte order mark (BOM).
|
||||
/// Defaults to ASCII when detection of the text file's endianness fails.
|
||||
/// </summary>
|
||||
/// <param name="filename">The text file to analyze.</param>
|
||||
@ -38,14 +43,20 @@ internal static partial class HelperMarkdown
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static string[] GetFiles(Models.AppSettings appSettings, string directory)
|
||||
internal static string[] GetFiles(AppSettings appSettings, string directory)
|
||||
{
|
||||
string[] files = Directory.GetFiles(directory, "*.md", SearchOption.AllDirectories).
|
||||
string[] results = Directory.GetFiles(directory, "*.md", SearchOption.AllDirectories).
|
||||
Where(l => !appSettings.Exclude.Any(m => l.Contains(m))).ToArray();
|
||||
return files;
|
||||
return results;
|
||||
}
|
||||
|
||||
private static (string type, string h1) GetTypeAndH1(Models.AppSettings appSettings, string h1, List<string> lines, LineNumber lineNumber)
|
||||
private static string[] GetFiles(AppSettings appSettings, Record record)
|
||||
{
|
||||
string[] results = record.StartAt is null ? GetFiles(appSettings, record.Source) : GetFiles(appSettings, record.StartAt);
|
||||
return results;
|
||||
}
|
||||
|
||||
private static (string type, string h1) GetTypeAndH1(AppSettings appSettings, string h1, List<string> lines, LineNumber lineNumber)
|
||||
{
|
||||
string type = lineNumber.Type is null ? appSettings.DefaultNoteType : lines[lineNumber.Type.Value].Replace("type: ", string.Empty);
|
||||
string h1FromFile = lineNumber.H1 is null ? h1 : lines[lineNumber.H1.Value][2..];
|
||||
@ -108,7 +119,7 @@ internal static partial class HelperMarkdown
|
||||
return (lines.ToList(), lineNumber);
|
||||
}
|
||||
|
||||
internal static List<(MarkdownFile, string[])> GetCollection(Models.AppSettings appSettings, string[] files)
|
||||
internal static List<(MarkdownFile, string[])> GetCollection(AppSettings appSettings, string[] files)
|
||||
{
|
||||
List<(MarkdownFile, string[])> results = new();
|
||||
string h1;
|
||||
@ -125,7 +136,7 @@ internal static partial class HelperMarkdown
|
||||
continue;
|
||||
(lines, lineNumber) = GetStatusAndMetaEndLineNumbers(fileInfo);
|
||||
fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileInfo.FullName);
|
||||
h1 = fileNameWithoutExtension.ToLower().Hyphenate();
|
||||
h1 = fileNameWithoutExtension.ToLower().Replace("%20", "-").Replace(' ', '-');
|
||||
if (lines.Any())
|
||||
(type, h1) = GetTypeAndH1(appSettings, h1, lines, lineNumber);
|
||||
else
|
||||
@ -140,9 +151,9 @@ internal static partial class HelperMarkdown
|
||||
return results;
|
||||
}
|
||||
|
||||
internal static bool SetFrontMatterAndH1(Models.AppSettings appSettings, List<(MarkdownFile, string[])> collection)
|
||||
private static int SetFrontMatterAndH1(AppSettings appSettings, List<(MarkdownFile, string[])> collection)
|
||||
{
|
||||
bool result = false;
|
||||
int result = 0;
|
||||
string h1Line;
|
||||
string typeLine;
|
||||
string createdLine;
|
||||
@ -203,17 +214,16 @@ internal static partial class HelperMarkdown
|
||||
else if (results[markdownFile.LineNumber.Created.Value][..createdLineCompare.Length] != createdLineCompare)
|
||||
results[markdownFile.LineNumber.Created.Value] = createdLine;
|
||||
}
|
||||
if (!result)
|
||||
result = true;
|
||||
File.WriteAllLines(markdownFile.File, results);
|
||||
File.SetLastWriteTime(markdownFile.File, markdownFile.LastWriteDateTime);
|
||||
result += 1;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static bool CircularReference(List<(MarkdownFile, string[])> collection)
|
||||
private static int CircularReference(ILogger<Worker> logger, List<(MarkdownFile, string[])> collection)
|
||||
{
|
||||
bool result = false;
|
||||
int result = 0;
|
||||
string line;
|
||||
string check;
|
||||
bool circularReference;
|
||||
@ -255,22 +265,22 @@ internal static partial class HelperMarkdown
|
||||
if (lines[i] == line)
|
||||
continue;
|
||||
lines[i] = line;
|
||||
logger.LogInformation("circular reference for <{file}>", markdownFile.FileName);
|
||||
if (!circularReference)
|
||||
circularReference = true;
|
||||
}
|
||||
if (circularReference)
|
||||
{
|
||||
if (!result)
|
||||
result = true;
|
||||
File.WriteAllLines(markdownFile.File, lines);
|
||||
result += 1;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static bool FindReplace(List<(MarkdownFile, string[])> collection)
|
||||
private static int FindReplace(List<(MarkdownFile, string[])> collection)
|
||||
{
|
||||
bool result = false;
|
||||
int result = 0;
|
||||
bool found;
|
||||
string line;
|
||||
string check;
|
||||
@ -305,9 +315,8 @@ internal static partial class HelperMarkdown
|
||||
}
|
||||
if (found)
|
||||
{
|
||||
if (!result)
|
||||
result = true;
|
||||
File.WriteAllLines(markdownFile.File, lines);
|
||||
result += 1;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
@ -330,31 +339,65 @@ internal static partial class HelperMarkdown
|
||||
return results;
|
||||
}
|
||||
|
||||
private static Dictionary<string, List<MarkdownFile>> GetKeyValuePairs(AppSettings appSettings, Record record)
|
||||
{
|
||||
Dictionary<string, List<MarkdownFile>> results;
|
||||
string[] files = GetFiles(appSettings, record.Source);
|
||||
List<(MarkdownFile MarkdownFile, string[] Lines)> collection = GetCollection(appSettings, files);
|
||||
results = GetKeyValuePairs(collection);
|
||||
return results;
|
||||
}
|
||||
|
||||
private static (string?, string?) GetMatchAndTitle(string? directory, List<MarkdownFile> markdownFiles)
|
||||
{
|
||||
int check = 0;
|
||||
string? match = null;
|
||||
string? title = null;
|
||||
string? directoryName = Path.GetFileName(directory);
|
||||
foreach (MarkdownFile markdownFile in markdownFiles)
|
||||
{
|
||||
if (directory is null || directoryName is null)
|
||||
continue;
|
||||
if (markdownFiles.Count == 1)
|
||||
{
|
||||
check++;
|
||||
match = markdownFile.File;
|
||||
title = markdownFile.H1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Path.GetFileName(markdownFile.Directory) == directoryName)
|
||||
{
|
||||
check++;
|
||||
match = markdownFile.File;
|
||||
title = markdownFile.H1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (check != 1)
|
||||
{
|
||||
match = null;
|
||||
title = null;
|
||||
}
|
||||
return (match, title);
|
||||
}
|
||||
|
||||
private static (string?, string?) GetRelativePath(Dictionary<string, List<MarkdownFile>> keyValuePairs, MarkdownFile markdownFile, string file)
|
||||
{
|
||||
string? result;
|
||||
string? match;
|
||||
string? title;
|
||||
List<MarkdownFile>? markdownFiles;
|
||||
string? directory = Path.GetDirectoryName(file);
|
||||
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(file);
|
||||
if (keyValuePairs.TryGetValue(fileNameWithoutExtension, out markdownFiles))
|
||||
{
|
||||
if (markdownFiles.Count != 1)
|
||||
(match, title) = (null, null);
|
||||
else
|
||||
(match, title) = (markdownFiles.First().File, markdownFiles.First().H1);
|
||||
}
|
||||
(match, title) = GetMatchAndTitle(directory, markdownFiles);
|
||||
else
|
||||
{
|
||||
if (!keyValuePairs.TryGetValue(fileNameWithoutExtension.ToLower(), out markdownFiles))
|
||||
(match, title) = (null, null);
|
||||
if (keyValuePairs.TryGetValue(fileNameWithoutExtension.ToLower(), out markdownFiles))
|
||||
(match, title) = GetMatchAndTitle(directory, markdownFiles);
|
||||
else
|
||||
{
|
||||
if (markdownFiles.Count != 1)
|
||||
(match, title) = (null, null);
|
||||
else
|
||||
(match, title) = (markdownFiles.First().File, markdownFiles.First().H1);
|
||||
}
|
||||
(match, title) = (null, null);
|
||||
}
|
||||
if (match is null)
|
||||
{
|
||||
@ -411,19 +454,17 @@ internal static partial class HelperMarkdown
|
||||
return (result, title);
|
||||
}
|
||||
|
||||
internal static bool ConvertToRelativePath(List<(MarkdownFile MarkdownFile, string[] Lines)> collection)
|
||||
private static int ConvertToRelativePath(AppSettings appSettings, ILogger<Worker> logger, Record record, List<(MarkdownFile MarkdownFile, string[] Lines)> collection)
|
||||
{
|
||||
bool result = false;
|
||||
int result = 0;
|
||||
bool write;
|
||||
string line;
|
||||
string after;
|
||||
string before;
|
||||
string? title;
|
||||
string[] segmentsA;
|
||||
string[] segmentsB;
|
||||
string[] segmentsC;
|
||||
string? relativePath;
|
||||
Dictionary<string, List<MarkdownFile>> keyValuePairs = GetKeyValuePairs(collection);
|
||||
Dictionary<string, List<MarkdownFile>> keyValuePairs = record.StartAt is null ? GetKeyValuePairs(collection) : GetKeyValuePairs(appSettings, record);
|
||||
foreach ((MarkdownFile markdownFile, string[] lines) in collection)
|
||||
{
|
||||
if (lines.Length < 1)
|
||||
@ -437,19 +478,20 @@ internal static partial class HelperMarkdown
|
||||
segmentsB = segmentsA.First().Split("[[");
|
||||
if (segmentsB.Length is not 2 or 3)
|
||||
continue;
|
||||
after = segmentsA.Last();
|
||||
before = segmentsB.First();
|
||||
segmentsC = segmentsB.Last().Split('|');
|
||||
(relativePath, title) = GetRelativePath(keyValuePairs, markdownFile, segmentsC.First());
|
||||
if (relativePath is null)
|
||||
{
|
||||
logger.LogInformation("Didn't find {line} in <{file}>", lines[i], markdownFile.FileNameWithoutExtension);
|
||||
continue;
|
||||
}
|
||||
if (title is null)
|
||||
{
|
||||
title = segmentsC.Last().Humanize(LetterCasing.Title);
|
||||
title = segmentsC.Last();
|
||||
if (title.Length != segmentsC.Last().Length)
|
||||
title = segmentsC.Last();
|
||||
}
|
||||
line = $"{before}[{title}]({relativePath.Replace('\\', '/')}){after}";
|
||||
line = $"{segmentsB.First()}[{title}]({relativePath.Replace('\\', '/')}){segmentsA.Last()}";
|
||||
if (lines[i] == line)
|
||||
continue;
|
||||
lines[i] = line;
|
||||
@ -458,19 +500,18 @@ internal static partial class HelperMarkdown
|
||||
}
|
||||
if (write)
|
||||
{
|
||||
if (!result)
|
||||
result = true;
|
||||
File.WriteAllLines(markdownFile.File, lines);
|
||||
result += 1;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static bool ConvertFileToSlugName(List<(MarkdownFile MarkdownFile, string[] Lines)> collection)
|
||||
private static int ConvertFileToSlugName(AppSettings appSettings, ILogger<Worker> logger, Record record, List<(MarkdownFile MarkdownFile, string[] Lines)> collection)
|
||||
{
|
||||
bool result = false;
|
||||
bool write;
|
||||
int result = 0;
|
||||
string h1;
|
||||
bool write;
|
||||
string file;
|
||||
string line;
|
||||
string? title;
|
||||
@ -483,10 +524,9 @@ internal static partial class HelperMarkdown
|
||||
string[] segmentsC;
|
||||
string checkFileName;
|
||||
string segmentsALast;
|
||||
string? relativePath;
|
||||
string segmentsBFirst;
|
||||
string relativeDirectory;
|
||||
string formattedRelativeDirectory;
|
||||
Dictionary<string, List<MarkdownFile>> keyValuePairs = GetKeyValuePairs(collection);
|
||||
Dictionary<string, List<MarkdownFile>> keyValuePairs = record.StartAt is null ? GetKeyValuePairs(collection) : GetKeyValuePairs(appSettings, record);
|
||||
foreach ((MarkdownFile markdownFile, string[] lines) in collection)
|
||||
{
|
||||
if (markdownFile.FileNameWithoutExtension == "index")
|
||||
@ -511,25 +551,31 @@ internal static partial class HelperMarkdown
|
||||
directory = Path.GetDirectoryName(file);
|
||||
if (string.IsNullOrEmpty(directory))
|
||||
continue;
|
||||
relativeDirectory = segmentsBFirst[..^fileName.Length];
|
||||
formattedRelativeDirectory = relativeDirectory.Replace(" ", "%20");
|
||||
checkFileName = fileName.ToLower().Replace("%20", "-").Replace(' ', '-');
|
||||
checkName = Path.Combine(directory, checkFileName);
|
||||
segmentsC = segmentsA.First().Split('[');
|
||||
(_, title) = GetRelativePath(keyValuePairs, markdownFile, file);
|
||||
(relativePath, title) = GetRelativePath(keyValuePairs, markdownFile, file);
|
||||
if (relativePath is null)
|
||||
{
|
||||
logger.LogInformation("Didn't find {line} in <{file}>", lines[i], markdownFile.FileNameWithoutExtension);
|
||||
continue;
|
||||
}
|
||||
if (title is null)
|
||||
{
|
||||
title = segmentsC.Last().Humanize(LetterCasing.Title);
|
||||
title = segmentsC.Last();
|
||||
if (title.Length != segmentsC.Last().Length)
|
||||
title = segmentsC.Last();
|
||||
}
|
||||
line = $"{segmentsC.First()}[{title}]({Path.Combine(formattedRelativeDirectory, checkFileName)}){segmentsB.Last()}";
|
||||
line = $"{segmentsC.First()}[{title}]({relativePath.Replace('\\', '/')}){segmentsB.Last()}";
|
||||
if (lines[i] == line)
|
||||
continue;
|
||||
if (fileName.Contains(' ') || fileName.Contains("%20"))
|
||||
{
|
||||
if (!File.Exists(file))
|
||||
{
|
||||
logger.LogInformation("Didn't find <{file}>", file);
|
||||
continue;
|
||||
}
|
||||
if (File.Exists(checkName))
|
||||
continue;
|
||||
File.Move(file, checkName);
|
||||
@ -539,7 +585,10 @@ internal static partial class HelperMarkdown
|
||||
if (file != checkName)
|
||||
{
|
||||
if (!File.Exists(file))
|
||||
{
|
||||
logger.LogInformation("Didn't find <{file}>", file);
|
||||
continue;
|
||||
}
|
||||
File.Move(file, checkName);
|
||||
}
|
||||
}
|
||||
@ -549,12 +598,11 @@ internal static partial class HelperMarkdown
|
||||
}
|
||||
if (write)
|
||||
{
|
||||
if (!result)
|
||||
result = true;
|
||||
File.WriteAllLines(markdownFile.File, lines);
|
||||
result += 1;
|
||||
}
|
||||
}
|
||||
if (!result)
|
||||
if (result == 0)
|
||||
{
|
||||
foreach ((MarkdownFile markdownFile, string[] lines) in collection)
|
||||
{
|
||||
@ -563,13 +611,12 @@ internal static partial class HelperMarkdown
|
||||
h1 = lines[markdownFile.LineNumber.H1.Value];
|
||||
if (h1.Length > 2)
|
||||
{
|
||||
h1Check = $"# {h1[2..].Humanize(LetterCasing.Title)}";
|
||||
h1Check = $"# {h1[2..]}";
|
||||
if (h1Check.Length == h1.Length && h1Check != h1)
|
||||
{
|
||||
lines[markdownFile.LineNumber.H1.Value] = h1Check;
|
||||
if (!result)
|
||||
result = true;
|
||||
File.WriteAllLines(markdownFile.File, lines);
|
||||
result += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -581,29 +628,79 @@ internal static partial class HelperMarkdown
|
||||
checkName = Path.Combine(markdownFile.Directory, checkFileName);
|
||||
if (checkName == markdownFile.File)
|
||||
continue;
|
||||
if (!result)
|
||||
result = true;
|
||||
File.Move(markdownFile.File, checkName);
|
||||
result += 1;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static void MarkdownWikiLinkVerification(Models.AppSettings appSettings, string argsZero)
|
||||
private static Record GetRecord(List<string> args)
|
||||
{
|
||||
string fullPath = Path.GetFullPath(argsZero);
|
||||
Record result;
|
||||
string? startAt = null;
|
||||
string? destination = null;
|
||||
for (int i = 1; i < args.Count; i++)
|
||||
{
|
||||
if (args[i].Length == 2 && i + 1 < args.Count)
|
||||
{
|
||||
if (args[i][1] == 's')
|
||||
startAt = Path.GetFullPath(args[i + 1]);
|
||||
else if (args[i][1] == 'd')
|
||||
destination = Path.GetFullPath(args[i + 1]);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if (startAt is not null && !Directory.Exists(startAt))
|
||||
throw new Exception($"Start at directory <{startAt}> doesn't exist!");
|
||||
if (destination is not null)
|
||||
{
|
||||
string? root = Path.GetPathRoot(destination);
|
||||
if (root is null || !Directory.Exists(root))
|
||||
throw new NotSupportedException($"This method requires a valid -d path <{root}>!");
|
||||
if (!Directory.Exists(destination))
|
||||
_ = Directory.CreateDirectory(destination);
|
||||
}
|
||||
result = new(Path.GetFullPath(args.First()), startAt, destination);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static void MarkdownWikiLinkVerification(AppSettings appSettings, ILogger<Worker> logger, List<string> args)
|
||||
{
|
||||
int updated;
|
||||
Record record = GetRecord(args);
|
||||
List<(MarkdownFile MarkdownFile, string[] Lines)> collection;
|
||||
collection = GetCollection(appSettings, GetFiles(appSettings, fullPath));
|
||||
if (SetFrontMatterAndH1(appSettings, collection))
|
||||
collection = GetCollection(appSettings, GetFiles(appSettings, fullPath));
|
||||
if (CircularReference(collection))
|
||||
collection = GetCollection(appSettings, GetFiles(appSettings, fullPath));
|
||||
if (FindReplace(collection))
|
||||
collection = GetCollection(appSettings, GetFiles(appSettings, fullPath));
|
||||
if (ConvertToRelativePath(collection))
|
||||
collection = GetCollection(appSettings, GetFiles(appSettings, fullPath));
|
||||
if (ConvertFileToSlugName(collection))
|
||||
collection = GetCollection(appSettings, GetFiles(appSettings, fullPath));
|
||||
collection = GetCollection(appSettings, GetFiles(appSettings, record));
|
||||
updated = SetFrontMatterAndH1(appSettings, collection);
|
||||
if (updated != 0)
|
||||
{
|
||||
collection = GetCollection(appSettings, GetFiles(appSettings, record));
|
||||
logger.LogInformation("{updated} Markdown file(s) were updated", updated);
|
||||
}
|
||||
updated = CircularReference(logger, collection);
|
||||
if (updated != 0)
|
||||
{
|
||||
collection = GetCollection(appSettings, GetFiles(appSettings, record));
|
||||
logger.LogInformation("{updated} Markdown file(s) were updated", updated);
|
||||
}
|
||||
updated = FindReplace(collection);
|
||||
if (updated != 0)
|
||||
{
|
||||
collection = GetCollection(appSettings, GetFiles(appSettings, record));
|
||||
logger.LogInformation("{updated} Markdown file(s) were updated", updated);
|
||||
}
|
||||
updated = ConvertToRelativePath(appSettings, logger, record, collection);
|
||||
if (updated != 0)
|
||||
{
|
||||
collection = GetCollection(appSettings, GetFiles(appSettings, record));
|
||||
logger.LogInformation("{updated} Markdown file(s) were updated", updated);
|
||||
}
|
||||
updated = ConvertFileToSlugName(appSettings, logger, record, collection);
|
||||
if (updated != 0)
|
||||
{
|
||||
collection = GetCollection(appSettings, GetFiles(appSettings, record));
|
||||
logger.LogInformation("{updated} Markdown file(s) were updated", updated);
|
||||
}
|
||||
string directory = Path.Combine(Environment.CurrentDirectory, ".vscode");
|
||||
if (!Directory.Exists(directory))
|
||||
{
|
||||
@ -618,4 +715,91 @@ internal static partial class HelperMarkdown
|
||||
}
|
||||
}
|
||||
|
||||
private static List<(string, string, string[])> GetWithLinksForHugo(AppSettings appSettings, Record record)
|
||||
{
|
||||
List<(string, string, string[])> results = new();
|
||||
string file;
|
||||
string line;
|
||||
string fileName;
|
||||
string? directory;
|
||||
string[] segmentsA;
|
||||
string[] segmentsB;
|
||||
string[] segmentsC;
|
||||
string relativeFile;
|
||||
string segmentsALast;
|
||||
string segmentsBFirst;
|
||||
int sourceDirectoryLength = record.Source.Length;
|
||||
List<(MarkdownFile MarkdownFile, string[] Lines)> collection = GetCollection(appSettings, GetFiles(appSettings, record));
|
||||
foreach ((MarkdownFile markdownFile, string[] lines) in collection)
|
||||
{
|
||||
if (record.Destination is null)
|
||||
continue;
|
||||
if (markdownFile.File.Length < sourceDirectoryLength)
|
||||
continue;
|
||||
if (!File.Exists(markdownFile.File))
|
||||
continue;
|
||||
fileName = $"{record.Destination}{markdownFile.File[sourceDirectoryLength..]}";
|
||||
directory = Path.GetDirectoryName(fileName);
|
||||
if (string.IsNullOrEmpty(directory))
|
||||
continue;
|
||||
for (int i = 0; i < lines.Length; i++)
|
||||
{
|
||||
segmentsA = lines[i].Split("](");
|
||||
if (segmentsA.Length != 2)
|
||||
continue;
|
||||
segmentsALast = segmentsA.Last();
|
||||
if (segmentsALast.StartsWith("http:") || segmentsALast.StartsWith("https:") || segmentsALast.StartsWith("rdp:") || segmentsALast.StartsWith("onenote:"))
|
||||
continue;
|
||||
segmentsB = segmentsALast.Split(")");
|
||||
if (segmentsB.Length != 2)
|
||||
continue;
|
||||
segmentsBFirst = segmentsB.First();
|
||||
segmentsC = segmentsA.First().Split('[');
|
||||
file = Path.GetFullPath(Path.Combine(markdownFile.Directory, segmentsBFirst));
|
||||
relativeFile = Path.GetRelativePath(record.Source, file).Replace('\\', '/');
|
||||
line = $"{segmentsC.First()}[[{relativeFile}]]{segmentsB.Last()}";
|
||||
if (lines[i] == line)
|
||||
throw new NotSupportedException($"Line {i} shouldn't match with {line}");
|
||||
lines[i] = line;
|
||||
}
|
||||
results.Add((directory, fileName, lines));
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
private static List<string> GetDistinct(List<(string, string, string[])> collection)
|
||||
{
|
||||
List<string> results = new();
|
||||
foreach ((string directory, _, _) in collection)
|
||||
{
|
||||
if (results.Contains(directory))
|
||||
continue;
|
||||
results.Add(directory);
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
private static void CreateMissingDirectories(List<string> directories)
|
||||
{
|
||||
foreach (string directory in directories)
|
||||
{
|
||||
if (!Directory.Exists(directory))
|
||||
_ = Directory.CreateDirectory(directory);
|
||||
}
|
||||
}
|
||||
|
||||
internal static void MarkdownConvertLinksForHugo(AppSettings appSettings, ILogger<Worker> logger, List<string> args)
|
||||
{
|
||||
Record record = GetRecord(args);
|
||||
if (string.IsNullOrEmpty(record.Destination))
|
||||
throw new NotSupportedException("This method requires a -d path!");
|
||||
List<(string, string, string[])> collection = GetWithLinksForHugo(appSettings, record);
|
||||
if (!collection.Any())
|
||||
logger.LogInformation("No files?");
|
||||
List<string> distinct = GetDistinct(collection);
|
||||
CreateMissingDirectories(distinct);
|
||||
foreach ((_, string file, string[] lines) in collection)
|
||||
File.WriteAllLines(file, lines);
|
||||
}
|
||||
|
||||
}
|
@ -17,4 +17,4 @@ internal partial class PackageJsonSourceGenerationContext : JsonSerializerContex
|
||||
[JsonSerializable(typeof(PackageJson[]))]
|
||||
internal partial class PackageJsonCollectionSourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
||||
}
|
@ -21,4 +21,4 @@ public record AppSettings(string Company,
|
||||
[JsonSerializable(typeof(AppSettings))]
|
||||
internal partial class AppSettingsSourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
||||
}
|
@ -54,4 +54,4 @@ public class AppSettings
|
||||
[JsonSerializable(typeof(AppSettings))]
|
||||
internal partial class BinderAppSettingsSourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
||||
}
|
@ -41,6 +41,7 @@ public class Worker : BackgroundService
|
||||
ConsoleKey.R,
|
||||
ConsoleKey.S,
|
||||
ConsoleKey.T,
|
||||
ConsoleKey.U,
|
||||
ConsoleKey.Z,
|
||||
ConsoleKey.Delete
|
||||
};
|
||||
@ -101,6 +102,7 @@ public class Worker : BackgroundService
|
||||
_Logger.LogInformation("R) Rename to old, copy, delete old");
|
||||
_Logger.LogInformation("S) Set Date from Zip Entry");
|
||||
_Logger.LogInformation("T) Too long rename");
|
||||
_Logger.LogInformation("U) Links for Hugo");
|
||||
_Logger.LogInformation("Z) Zip file(s) by date,");
|
||||
_Logger.LogInformation("Delete) Delete empty directories,");
|
||||
consoleKey = Console.ReadKey().Key;
|
||||
@ -131,7 +133,7 @@ public class Worker : BackgroundService
|
||||
Helpers.HelperCreateNoteFiles.CreateNoteFiles(_Args[0]);
|
||||
break;
|
||||
case ConsoleKey.M:
|
||||
Helpers.HelperMarkdown.MarkdownWikiLinkVerification(_AppSettings, _Args[0]);
|
||||
Helpers.HelperMarkdown.MarkdownWikiLinkVerification(_AppSettings, _Logger, _Args);
|
||||
break;
|
||||
case ConsoleKey.R:
|
||||
Helpers.HelperRenameToOldMoveDeleteOldMerge.RenameToOldMoveDeleteOld(_Logger, _Args[0]);
|
||||
@ -143,6 +145,9 @@ public class Worker : BackgroundService
|
||||
Helpers.HelperTooLong.TooLong(_Args[0], delete: false);
|
||||
Helpers.HelperTooLong.TooLong(_Args[0], delete: true);
|
||||
break;
|
||||
case ConsoleKey.U:
|
||||
Helpers.HelperMarkdown.MarkdownConvertLinksForHugo(_AppSettings, _Logger, _Args);
|
||||
break;
|
||||
case ConsoleKey.Z:
|
||||
Helpers.HelperZipFilesByDate.ZipFilesByDate(_Logger, _Args[0]);
|
||||
break;
|
||||
|
11
package.json
11
package.json
@ -2,15 +2,8 @@
|
||||
"scripts": {
|
||||
"prettier.check": "prettier . --check",
|
||||
"prettier.write": "prettier . --write",
|
||||
"Alpha": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
|
||||
"nuget-clear": "dotnet nuget locals all --clear",
|
||||
"build": "dotnet build --runtime win-x64 --self-contained",
|
||||
"build-Package-Management": "dotnet build --runtime win-x64 --self-contained --source https://packagemanagement.eu.infineon.com:4430/api/v2/",
|
||||
"build-nuget-And-Package-Management": "dotnet build --runtime win-x64 --self-contained --source https://api.nuget.org/v3/index.json --source https://packagemanagement.eu.infineon.com:4430/api/v2/",
|
||||
"build-All-Sources": "dotnet build --runtime win-x64 --self-contained --source https://api.nuget.org/v3/index.json --source https://packagemanagement.eu.infineon.com:4430/api/v2/ --source https://tfs.intra.infineon.com/tfs/ManufacturingIT/_packaging/eaf/nuget/v3/index.json --source http://192.168.0.73:5002/v3/index.json",
|
||||
"dotnet-format": "dotnet format --report .vscode --verbosity detailed --severity warn",
|
||||
"MSBuild": "\"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/MSBuild/Current/Bin/MSBuild.exe\" /target:Build /restore:True /p:RestoreSources=https://api.nuget.org/v3/index.json%3Bhttps://packagemanagement.eu.infineon.com:4430/api/v2/%3Bhttps://tfs.intra.infineon.com/tfs/ManufacturingIT/_packaging/eaf/nuget/v3/index.json /DetailedSummary /ConsoleLoggerParameters:PerformanceSummary;ErrorsOnly; /property:Configuration=Debug;TargetFrameworkVersion=v4.8 File-Folder-Helper.csproj",
|
||||
"pull": "git pull",
|
||||
"kanbn.board": "kanbn board",
|
||||
"kanbn.board.json": "kanbn board -j > .kanbn/board.json",
|
||||
"garbage-collect": "git gc"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
Loading…
x
Reference in New Issue
Block a user