public static string GetAuditPath(Process pokerStarsProcess)
        {
            if (pokerStarsProcess == null)
            {
                return(GetAuditPath());
            }

            try
            {
                var pokerStarsFolder = Path.GetDirectoryName(pokerStarsProcess.MainModule.FileName);
                var auditIniFile     = Path.Combine(pokerStarsFolder, auditIni);

                if (!File.Exists(auditIniFile))
                {
                    return(GetAuditPath());
                }

                var path = IniFileHelpers.ReadValue(AuditSection, PathKey, auditIniFile);

                return(!string.IsNullOrEmpty(path) ? path : GetAuditPath());
            }
            catch
            {
                return(GetAuditPath());
            }
        }
        private static void FillModelFromIniFile(PT4DatabaseSettingsProvider model)
        {
            var file = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), pt4RelativeConfigPath);

            if (File.Exists(file))
            {
                var keyValuePairs = IniFileHelpers.ReadKeyValuePairs("Database", file);

                var server   = GetKeyValue("Default.Postgres.Server", "Postgres.Server", keyValuePairs);
                var port     = GetKeyValue("Default.Postgres.Port", "Postgres.Port", keyValuePairs);
                var user     = GetKeyValue("Default.Postgres.User", "Postgres.User", keyValuePairs);
                var password = GetKeyValue("Default.Postgres.Password", "Postgres.Password", keyValuePairs);

                if (!string.IsNullOrWhiteSpace(server))
                {
                    model.Server = server;
                }

                if (!string.IsNullOrWhiteSpace(port))
                {
                    model.Port = port;
                }

                if (!string.IsNullOrWhiteSpace(user))
                {
                    model.UserName = user;
                }

                if (!string.IsNullOrWhiteSpace(password))
                {
                    model.Password = password;
                }
            }
        }
        /// <summary>
        /// Reads the value for the specified key for the specified path to ini file and add value to the specified list
        /// </summary>
        /// <param name="iniKey">Key to read</param>
        /// <param name="handHistoryFolders">List to add value</param>
        /// <param name="settingsFilePath">Path to the ini file</param>
        private bool ReadAndAddPathFromIniSettings(string iniKey, IList <string> handHistoryFolders, string settingsFilePath)
        {
            try
            {
                var handHistoriesFolder = IniFileHelpers.ReadValue(iniSection, iniKey, settingsFilePath);

                if (!string.IsNullOrEmpty(handHistoriesFolder))
                {
                    handHistoryFolders.Add(handHistoriesFolder);
                    return(true);
                }
            }
            catch (Exception e)
            {
                LogProvider.Log.Error(this, $"Could not read '{iniKey}'", e);
            }

            return(false);
        }
        /// <summary>
        /// Validates site settings in both client and DH
        /// </summary>
        /// <param name="siteModel">Model with site settings</param>
        /// <returns>The result of validation</returns>
        public override ISiteValidationResult ValidateSiteConfiguration(SiteModel siteModel)
        {
            if (siteModel == null)
            {
                return(null);
            }

            var configurationDirectories = GetConfigurationDirectories();

            var validationResult = new SiteValidationResult(Site)
            {
                IsNew = !siteModel.Configured,
                HandHistoryLocations = GetHandHistoryFolders().ToList(),
                IsDetected           = configurationDirectories.Count > 0,
                IsEnabled            = siteModel.Enabled,
                FastPokerEnabled     = true
            };


            InstallAuditIni(validationResult);

            foreach (var configurationDirectory in configurationDirectories)
            {
                try
                {
                    var settingsFile = Path.Combine(configurationDirectory.FullName, settingsFileName);

                    if (!File.Exists(settingsFile))
                    {
                        continue;
                    }

                    LogProvider.Log.Info($"Reading PS settings from {settingsFile}");

                    var localeSetting    = IniFileHelpers.ReadValue(iniSection, iniKeyLocale, settingsFile);
                    var hhLocaleSetting  = IniFileHelpers.ReadValue(iniSection, iniKeyHHLocale, settingsFile);
                    var tsLocaleSetting  = IniFileHelpers.ReadValue(iniSection, iniKeyTSLocale, settingsFile);
                    var hhEnabledSetting = IniFileHelpers.ReadValue(iniSection, iniKeySaveMyHands, settingsFile, "0");
                    var tsEnabledSetting = IniFileHelpers.ReadValue(iniSection, iniKeySaveMyTournSummaries, settingsFile, "0");

                    LogProvider.Log.Info($"PS Settings: Locale: {localeSetting}; HHLocale: {hhLocaleSetting}; TSLocale: {tsLocaleSetting}");

                    var isLocaleSettingCorrect = correctLanguageSettings.Contains(localeSetting);

                    bool isHHLanguageCorrect = string.IsNullOrWhiteSpace(hhLocaleSetting) ? isLocaleSettingCorrect : correctLanguageSettings.Contains(hhLocaleSetting);
                    bool isTSLanguageCorrect = string.IsNullOrWhiteSpace(tsLocaleSetting) ? isLocaleSettingCorrect : correctLanguageSettings.Contains(tsLocaleSetting);
                    bool isHHEnabled         = hhEnabledSetting == "1";
                    bool isTSEnabled         = tsEnabledSetting == "1";

                    if (!isHHLanguageCorrect || !isTSLanguageCorrect || !isHHEnabled || !isTSEnabled)
                    {
                        if (!isHHEnabled)
                        {
                            var issue = string.Format(CommonResourceManager.Instance.GetResourceString("Error_PS_Validation_SaveMyHandHistory"),
                                                      configurationDirectory.Name);

                            validationResult.Issues.Add(issue);
                        }

                        if (!isTSEnabled)
                        {
                            var issue = string.Format(CommonResourceManager.Instance.GetResourceString("Error_PS_Validation_SaveTournamentSummaries"),
                                                      configurationDirectory.Name);

                            validationResult.Issues.Add(issue);
                        }

                        if (!isHHLanguageCorrect)
                        {
                            var issue = string.Format(CommonResourceManager.Instance.GetResourceString("Error_PS_Validation_HHLanguage"),
                                                      configurationDirectory.Name);

                            validationResult.Issues.Add(issue);
                        }

                        if (!isTSLanguageCorrect)
                        {
                            var issue = string.Format(CommonResourceManager.Instance.GetResourceString("Error_PS_Validation_TSLanguage"),
                                                      configurationDirectory.Name);

                            validationResult.Issues.Add(issue);
                        }
                    }
                }
                catch (Exception ex)
                {
                    LogProvider.Log.Error(this, "Error during reading of the PS settings", ex);
                }
            }

            return(validationResult);
        }