#pragma warning disable CA1845, IDE0057

GetInferredCheckDirectory

Process.Start for insiders vscode
This commit is contained in:
Mike Phares 2025-03-11 11:00:47 -07:00
parent 38ab4424bc
commit 6783621dab
2 changed files with 73 additions and 13 deletions

View File

@ -2,6 +2,7 @@ using File_Folder_Helper.Helpers;
using File_Folder_Helper.Models; using File_Folder_Helper.Models;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Text; using System.Text;
using System.Text.Json; using System.Text.Json;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
@ -187,7 +188,7 @@ internal static partial class Helper20240623
" - Done", " - Done",
"---", "---",
string.Empty, string.Empty,
$"# {h1}", h1[0] == '#' ? h1 : $"# {h1}",
string.Empty, string.Empty,
"## Backlog", "## Backlog",
string.Empty, string.Empty,
@ -480,7 +481,7 @@ internal static partial class Helper20240623
return result; return result;
} }
private static bool FileWrite(Record record, List<string> newLines, double percent) private static bool FileWrite(long ticks, Record record, List<string> newLines, double percent)
{ {
bool result = false; bool result = false;
if (record.StopLine is not null && record.SubTasksLine is not null) if (record.StopLine is not null && record.SubTasksLine is not null)
@ -488,7 +489,10 @@ internal static partial class Helper20240623
string contents; string contents;
string progressLine; string progressLine;
List<string> resultLines; List<string> resultLines;
if (record.FileInfo.LastWriteTime.Ticks <= ticks)
resultLines = record.LineNumber.Lines.ToList(); resultLines = record.LineNumber.Lines.ToList();
else
resultLines = File.ReadAllLines(record.FileInfo.FullName).ToList();
if (record.LineNumber.FrontMatterYamlEnd is not null) if (record.LineNumber.FrontMatterYamlEnd is not null)
{ {
progressLine = $"progress: {percent}"; progressLine = $"progress: {percent}";
@ -532,17 +536,73 @@ internal static partial class Helper20240623
return result; return result;
} }
private static FileInfo GetIndexFileInfo(ILogger<Worker> logger, Input input, Record record, string codeInsidersLine) private static string? GetInferredCheckDirectory(string directory)
{
string? result = null;
List<string> directoryNames = [];
DirectoryInfo directoryInfo;
string? checkDirectory = directory;
directoryNames.Add(Path.GetFileName(checkDirectory));
string pathRoot = Path.GetPathRoot(directory) ?? throw new Exception();
for (int i = 0; i < directory.Length; i++)
{
checkDirectory = Path.GetDirectoryName(checkDirectory);
if (string.IsNullOrEmpty(checkDirectory) || checkDirectory == pathRoot)
break;
directoryInfo = new(checkDirectory);
if (!directoryInfo.Exists)
directoryNames.Add(directoryInfo.Name);
else
{
directoryNames.Reverse();
result = string.IsNullOrEmpty(directoryInfo.LinkTarget) ? checkDirectory : directoryInfo.LinkTarget;
for (int j = 0; j < directoryNames.Count; j++)
result = Path.GetDirectoryName(result) ?? throw new Exception();
foreach (string directoryName in directoryNames)
result = Path.Combine(result, directoryName);
break;
}
}
return result;
}
private static void UpdateFileAndStartNewProcess(ILogger<Worker> logger, Input input, Record record, string inferredCheckDirectory)
{
if (record.CodeInsidersLine is null)
throw new Exception();
List<string> lines = record.LineNumber.Lines.ToList();
lines[record.CodeInsidersLine.Value] = $"{input.CodeInsiders}{inferredCheckDirectory})";
string text = string.Join(Environment.NewLine, lines);
File.WriteAllText(record.FileInfo.FullName, text);
record.FileInfo.Refresh();
string file = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Programs", "Microsoft VS Code Insiders", "Code - Insiders.exe");
try
{ _ = Process.Start(file, $"\"{inferredCheckDirectory}\""); }
catch (Exception) { logger.LogWarning("Failed to start code-insiders!"); }
}
private static FileInfo GetIndexFileInfo(ILogger<Worker> logger, Input input, Record record)
{ {
FileInfo result; FileInfo result;
string? indexFile; string? indexFile;
List<string> results; List<string> results;
if (record.CodeInsidersLine is null)
throw new Exception();
string codeInsidersLine = record.LineNumber.Lines[record.CodeInsidersLine.Value];
string raw = codeInsidersLine[input.CodeInsiders.Length..^1]; string raw = codeInsidersLine[input.CodeInsiders.Length..^1];
string checkDirectory = $"{raw[..2].ToUpper()}{raw[2..]}"; string checkDirectory = $"{raw[..2].ToUpper()}{raw[2..]}";
if (!Directory.Exists(checkDirectory)) if (!Directory.Exists(checkDirectory))
{ {
if (input.DestinationDirectories.Count > 0 && input.DestinationDirectories.Any(checkDirectory.Contains)) if (input.DestinationDirectories.Count > 0 && input.DestinationDirectories.Any(checkDirectory.Contains))
_ = Directory.CreateDirectory(checkDirectory); {
string? inferredCheckDirectory = GetInferredCheckDirectory(checkDirectory);
if (!string.IsNullOrEmpty(inferredCheckDirectory))
{
checkDirectory = inferredCheckDirectory;
_ = Directory.CreateDirectory(inferredCheckDirectory);
UpdateFileAndStartNewProcess(logger, input, record, inferredCheckDirectory);
}
}
} }
if (!Directory.Exists(checkDirectory)) if (!Directory.Exists(checkDirectory))
results = []; results = [];
@ -585,10 +645,10 @@ internal static partial class Helper20240623
List<string> newLines; List<string> newLines;
bool reloadAny = false; bool reloadAny = false;
string? checkDirectory; string? checkDirectory;
string codeInsidersLine;
List<string> oldLines = []; List<string> oldLines = [];
Input input = GetInput(args); Input input = GetInput(args);
string fileNameWithoutExtension; string fileNameWithoutExtension;
long ticks = DateTime.Now.Ticks;
ReadOnlyCollection<SubTaskLine> subTaskLines; ReadOnlyCollection<SubTaskLine> subTaskLines;
for (int z = 0; z < 9; z++) for (int z = 0; z < 9; z++)
{ {
@ -607,12 +667,10 @@ internal static partial class Helper20240623
} }
if (record.StopLine is null) if (record.StopLine is null)
continue; continue;
codeInsidersLine = record.LineNumber.Lines[record.CodeInsidersLine.Value]; fileInfo = GetIndexFileInfo(logger, input, record);
fileInfo = GetIndexFileInfo(logger, input, record, codeInsidersLine);
if (!fileInfo.Exists) if (!fileInfo.Exists)
{ {
checkDirectory = codeInsidersLine[input.CodeInsiders.Length..^1]; logger.LogError("<{checkDirectory}> doesn't have a [{indexFile}]", fileInfo.DirectoryName, input.IndexFile);
logger.LogError("<{checkDirectory}> doesn't have a [{indexFile}]", Path.GetFileName(checkDirectory), input.IndexFile);
continue; continue;
} }
oldLines.Clear(); oldLines.Clear();
@ -664,7 +722,7 @@ internal static partial class Helper20240623
_ = Directory.CreateDirectory(checkDirectory); _ = Directory.CreateDirectory(checkDirectory);
Thread.Sleep(500); Thread.Sleep(500);
Directory.Delete(checkDirectory); Directory.Delete(checkDirectory);
reload = FileWrite(record, newLines, percent); reload = FileWrite(ticks, record, newLines, percent);
if (!reloadAny && reload) if (!reloadAny && reload)
reloadAny = true; reloadAny = true;
} }

View File

@ -7,6 +7,7 @@ internal static partial class Helper20250306
private static string ProcessDataStandardFormatToJson(int columnsLine, string[] columns, string[] body) private static string ProcessDataStandardFormatToJson(int columnsLine, string[] columns, string[] body)
{ {
#pragma warning disable CA1845, IDE0057
string result = "[\n"; string result = "[\n";
string line; string line;
string value; string value;
@ -24,11 +25,12 @@ internal static partial class Helper20250306
value = segments[c].Replace("\"", "\\\"").Replace("\\", "\\\\"); value = segments[c].Replace("\"", "\\\"").Replace("\\", "\\\\");
line += '"' + columns[c].Trim('"') + '"' + ':' + '"' + value + '"' + ','; line += '"' + columns[c].Trim('"') + '"' + ':' + '"' + value + '"' + ',';
} }
line = line[..^1] + '}' + ',' + '\n'; line = line.Substring(0, line.Length - 1) + '}' + ',' + '\n';
result += line; result += line;
} }
result = result[..^2] + ']'; result = result.Substring(0, result.Length - 1) + ']';
return result; return result;
#pragma warning restore CA1845, IDE0057
} }
private static void ProcessDataStandardFormatToJson(ILogger<Worker> logger, string file) private static void ProcessDataStandardFormatToJson(ILogger<Worker> logger, string file)