namespace Sunfish.Config;
/// <summary>Donde se busca y donde se crea sunfish.conf.</summary>
public static class ConfigLocator
{
public const string FileName = "sunfish.conf";
/// <summary>Junto al ejecutable: modo portable.</summary>
public static string PortablePath => Path.Combine(AppContext.BaseDirectory, FileName);
/// <summary>Carpeta de configuracion del usuario segun el sistema.</summary>
public static string UserPath
{
get
{
string baseDir;
if (OperatingSystem.IsWindows())
baseDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Sunfish");
else if (OperatingSystem.IsMacOS())
baseDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Library", "Application Support", "Sunfish");
else
{
string? xdg = Environment.GetEnvironmentVariable("XDG_CONFIG_HOME");
if (string.IsNullOrWhiteSpace(xdg))
xdg = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".config");
baseDir = Path.Combine(xdg, "sunfish");
}
return Path.Combine(baseDir, FileName);
}
}
/// <summary>El fichero indicado, el portable o el del usuario: el primero que exista; null si ninguno.</summary>
public static string? Find(string? explicitPath = null)
{
if (!string.IsNullOrEmpty(explicitPath))
return explicitPath;
if (File.Exists(PortablePath))
return PortablePath;
if (File.Exists(UserPath))
return UserPath;
return null;
}
}