Files
meeting-assistant/MeetingAssistant/RuntimeContentLocator.cs

40 lines
1.2 KiB
C#

namespace MeetingAssistant;
internal static class RuntimeContentLocator
{
public static IEnumerable<string> CandidateDocumentationPaths(string fileName)
{
foreach (var directory in EnumerateBaseDirectoryAndParents())
{
yield return Path.Combine(directory, "docs", fileName);
}
}
public static IEnumerable<string> CandidateDirectoryPaths(params string[] segments)
{
foreach (var directory in EnumerateBaseDirectoryAndParents())
{
yield return Path.Combine([directory, .. segments]);
}
}
public static IEnumerable<string> CandidateContentPaths(string fileName)
{
foreach (var directory in EnumerateBaseDirectoryAndParents())
{
yield return Path.Combine(directory, "MeetingAssistant", "Content", fileName);
yield return Path.Combine(directory, "Content", fileName);
}
}
private static IEnumerable<string> EnumerateBaseDirectoryAndParents(int maxParentDepth = 8)
{
var current = new DirectoryInfo(AppContext.BaseDirectory);
for (var i = 0; i < maxParentDepth && current is not null; i++)
{
yield return current.FullName;
current = current.Parent;
}
}
}