static void SetDefaultSettings() { Current = new SetSettings { TemporaryFolder = Path.GetTempPath(), DatabasePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "osrepodbmgr.db"), RepositoryPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "osrepo"), 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.osrepodbmgr.plist"); if(!File.Exists(preferencesFilePath)) { SetDefaultSettings(); SaveSettings(); } prefsFs = new FileStream(preferencesFilePath, FileMode.Open); NSDictionary 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), "osrepodbmgr.db"); Current.RepositoryPath = parsedPreferences.TryGetValue("RepositoryPath", out obj) ? ((NSString)obj).ToString() : Path .Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "osrepo"); 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("OSRepoDBMgr"); 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)key.GetValue("UseAntivirus"); Current.UseClamd = (bool)key.GetValue("UseClamd"); Current.ClamdHost = (string)key.GetValue("ClamdHost"); Current.ClamdPort = (ushort)key.GetValue("ClamdPort"); Current.ClamdIsLocal = (bool)key.GetValue("ClamdIsLocal"); Current.UseVirusTotal = (bool)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, "OSRepoDBMgr.xml"); if(!Directory.Exists(configPath)) { SetDefaultSettings(); SaveSettings(); return; } XmlSerializer xs = new XmlSerializer(Current.GetType()); prefsSr = new StreamReader(settingsPath); Current = (SetSettings)xs.Deserialize(prefsSr); prefsSr.Close(); } break; } } catch { prefsFs?.Close(); prefsSr?.Close(); SetDefaultSettings(); SaveSettings(); } }