/// <summary> /// Helper to create the location of a file /// </summary> /// <param name="checkStartupDirectory"></param> /// <param name="postfix"></param> /// <param name="specifiedDirectory"></param> /// <returns>File location</returns> private string CreateFileLocation(bool checkStartupDirectory, string postfix = "", string specifiedDirectory = null) { string file = null; if (specifiedDirectory != null) { file = Path.Combine(specifiedDirectory, $"{_iniFileConfig.FileName}{postfix}.{_iniFileConfig.IniExtension}"); } else { if (checkStartupDirectory) { var startPath = FileLocations.StartupDirectory; if (startPath != null) { file = Path.Combine(startPath, $"{_iniFileConfig.FileName}{postfix}.{_iniFileConfig.IniExtension}"); } } if (file is null || !File.Exists(file)) { var appDataDirectory = FileLocations.RoamingAppDataDirectory(_iniFileConfig.ApplicationName); file = Path.Combine(appDataDirectory, $"{_iniFileConfig.FileName}{postfix}.{_iniFileConfig.IniExtension}"); } } Log.Verbose().WriteLine("File location: {0}", file); return(file); }
/// <summary> /// Helper to create the location of a file /// </summary> private void ScanFiles(LanguageConfig languageConfig) { var directories = new List <string>(); if (languageConfig.SpecifiedDirectories != null) { directories.AddRange(languageConfig.SpecifiedDirectories); } if (languageConfig.CheckStartupDirectory) { var startupDirectory = FileLocations.StartupDirectory; if (startupDirectory != null) { directories.Add(Path.Combine(startupDirectory, "languages")); } } if (languageConfig.CheckAppDataDirectory) { var appDataDirectory = FileLocations.RoamingAppDataDirectory(languageConfig.ApplicationName); if (appDataDirectory != null) { directories.Add(Path.Combine(appDataDirectory, "languages")); } } if (Log.IsDebugEnabled()) { Log.Debug().WriteLine("Scanning directories: {0}", string.Join(",", directories)); } Files = FileLocations.Scan(directories, _filePattern) .GroupBy(x => x.Item2.Groups["IETF"].Value) .ToDictionary(group => group.Key, group => group.Select(x => x.Item1) .ToList()); if (Log.IsDebugEnabled()) { Log.Debug().WriteLine("Detected language ietfs: {0}", string.Join(",", Files.Keys)); } var allCultures = CultureInfo.GetCultures(CultureTypes.AllCultures) .ToLookup(e => e.IetfLanguageTag, StringComparer.OrdinalIgnoreCase).ToDictionary(x => x.Key, x => x.First()); // TODO: Create custom culture for all not available, see: https://msdn.microsoft.com/en-us/library/ms172469(v=vs.90).aspx // TODO: Add Embedded resources, especially for the assemblies to which ILanguage interfaces belong AvailableLanguages = (from ietf in Files.Keys where allCultures.ContainsKey(ietf) select ietf).Distinct().ToDictionary(ietf => ietf, ietf => allCultures[ietf].NativeName); if (Log.IsVerboseEnabled()) { Log.Verbose().WriteLine("Languages found: {0}", string.Join(",", AvailableLanguages.Keys)); } }
public void TestRoamingAppData() { var roamingAppDataDirectory = FileLocations.RoamingAppDataDirectory("Dapplo"); Assert.EndsWith(@"AppData\Roaming\Dapplo", roamingAppDataDirectory); }