Public Access
40 lines
1.2 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|