namespace Nonemm.App.Configuration; /// Where the operator's files live. Windows keeps them under Documents the way /// N1MM does; everywhere else follows the XDG configuration directory. public sealed class UserPaths { public UserPaths(string root) { Root = root; Databases = Path.Combine(root, "Databases"); UserDefinedContests = Path.Combine(root, "UserDefinedContests"); SupportFiles = Path.Combine(root, "SupportFiles"); } public static UserPaths Default() => new(DefaultRoot()); public string Root { get; } public string Databases { get; } public string UserDefinedContests { get; } public string SupportFiles { get; } public string SettingsFile => Path.Combine(Root, "settings.json"); public string CountryFile => Path.Combine(SupportFiles, "wl_cty.dat"); public string CallDatabaseFile => Path.Combine(SupportFiles, "MASTER.SCP"); /// The published list of cluster nodes, kept as the page it was downloaded /// from so a later version can read more out of it. public string ClusterListFile => Path.Combine(SupportFiles, "cluster-list.html"); public void CreateFolders() { Directory.CreateDirectory(Root); Directory.CreateDirectory(Databases); Directory.CreateDirectory(UserDefinedContests); Directory.CreateDirectory(SupportFiles); } private static string DefaultRoot() => OperatingSystem.IsWindows() ? Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Nonemm") : Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "nonemm"); }