static void SetDefaultSettings() => Current = new SetSettings { TemporaryFolder = Path.GetTempPath(), DatabasePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "apprepodbmgr.db"), RepositoryPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "apprepo"), UnArchiverPath = null, CompressionAlgorithm = AlgoEnum.GZip, UseAntivirus = false, UseClamd = false, ClamdHost = null, ClamdPort = 3310, ClamdIsLocal = false, UseVirusTotal = false, VirusTotalKey = null };
public static void LoadSettings() { Current = new SetSettings(); PlatformID ptId = DetectOS.GetRealPlatformID(); FileStream prefsFs = null; StreamReader prefsSr = null; try { switch (ptId) { case PlatformID.MacOSX: case PlatformID.iOS: { string preferencesPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Library", "Preferences"); string preferencesFilePath = Path.Combine(preferencesPath, "com.claunia.museum.apprepodbmgr.plist"); if (!File.Exists(preferencesFilePath)) { SetDefaultSettings(); SaveSettings(); } prefsFs = new FileStream(preferencesFilePath, FileMode.Open); var parsedPreferences = (NSDictionary)BinaryPropertyListParser.Parse(prefsFs); if (parsedPreferences != null) { Current.TemporaryFolder = parsedPreferences.TryGetValue("TemporaryFolder", out NSObject obj) ? ((NSString)obj).ToString() : Path.GetTempPath(); Current.DatabasePath = parsedPreferences.TryGetValue("DatabasePath", out obj) ? ((NSString)obj).ToString() : Path. Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "apprepodbmgr.db"); Current.RepositoryPath = parsedPreferences.TryGetValue("RepositoryPath", out obj) ? ((NSString)obj).ToString() : Path. Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "apprepo"); Current.UnArchiverPath = parsedPreferences.TryGetValue("UnArchiverPath", out obj) ? ((NSString)obj).ToString() : null; if (parsedPreferences.TryGetValue("CompressionAlgorithm", out obj)) { if (!Enum.TryParse(((NSString)obj).ToString(), true, out Current.CompressionAlgorithm)) { Current.CompressionAlgorithm = AlgoEnum.GZip; } } else { Current.CompressionAlgorithm = AlgoEnum.GZip; } Current.UseAntivirus = parsedPreferences.TryGetValue("UseAntivirus", out obj) && ((NSNumber)obj).ToBool(); Current.UseClamd = parsedPreferences.TryGetValue("UseClamd", out obj) && ((NSNumber)obj).ToBool(); Current.ClamdHost = parsedPreferences.TryGetValue("ClamdHost", out obj) ? ((NSString)obj).ToString() : null; if (parsedPreferences.TryGetValue("ClamdPort", out obj)) { Current.ClamdPort = (ushort)((NSNumber)obj).ToLong(); } else { Current.ClamdPort = 3310; } Current.ClamdIsLocal = parsedPreferences.TryGetValue("ClamdIsLocal", out obj) && ((NSNumber)obj).ToBool(); Current.ClamdIsLocal = parsedPreferences.TryGetValue("UseVirusTotal", out obj) && ((NSNumber)obj).ToBool(); Current.ClamdHost = parsedPreferences.TryGetValue("VirusTotalKey", out obj) ? ((NSString)obj).ToString() : null; prefsFs.Close(); } else { prefsFs.Close(); SetDefaultSettings(); SaveSettings(); } } break; case PlatformID.Win32NT: case PlatformID.Win32S: case PlatformID.Win32Windows: case PlatformID.WinCE: case PlatformID.WindowsPhone: { RegistryKey parentKey = Registry.CurrentUser.OpenSubKey("SOFTWARE")?. OpenSubKey("Canary Islands Computer Museum"); if (parentKey == null) { SetDefaultSettings(); SaveSettings(); return; } RegistryKey key = parentKey.OpenSubKey("AppRepoDBMgr"); if (key == null) { SetDefaultSettings(); SaveSettings(); return; } Current.TemporaryFolder = (string)key.GetValue("TemporaryFolder"); Current.DatabasePath = (string)key.GetValue("DatabasePath"); Current.RepositoryPath = (string)key.GetValue("RepositoryPath"); Current.UnArchiverPath = (string)key.GetValue("UnArchiverPath"); if (!Enum.TryParse((string)key.GetValue("CompressionAlgorithm"), true, out Current.CompressionAlgorithm)) { Current.CompressionAlgorithm = AlgoEnum.GZip; } Current.UseAntivirus = bool.Parse((string)key.GetValue("UseAntivirus")); Current.UseClamd = bool.Parse((string)key.GetValue("UseClamd")); Current.ClamdHost = (string)key.GetValue("ClamdHost"); Current.ClamdPort = ushort.Parse((string)key.GetValue("ClamdPort")); Current.ClamdIsLocal = bool.Parse((string)key.GetValue("ClamdIsLocal")); Current.UseVirusTotal = bool.Parse((string)key.GetValue("UseVirusTotal")); Current.VirusTotalKey = (string)key.GetValue("VirusTotalKey"); } break; default: { string configPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".config"); string settingsPath = Path.Combine(configPath, "AppRepoDBMgr.xml"); if (!Directory.Exists(configPath)) { SetDefaultSettings(); SaveSettings(); return; } var xs = new XmlSerializer(Current.GetType()); prefsSr = new StreamReader(settingsPath); Current = (SetSettings)xs.Deserialize(prefsSr); prefsSr.Close(); } break; } } catch { prefsFs?.Close(); prefsSr?.Close(); SetDefaultSettings(); SaveSettings(); } }