using System.Collections.Generic; using Sony.Filtr.Contracts.Definitions; using Sony.Filtr.Contracts.Entities; using Sony.Filtr.Core.LastModified; using Sony.Filtr.DistributedCaching; using Sony.Filtr.ErrorLogging; namespace Sony.Filtr.Core.Settings { public class SettingsManager { public const string LastFMBaseUrl = "http://userserve-ak.last.fm/serve"; public const string LastFMImageSize = "126"; private readonly DistributedCacheHandler _cacheHandler; private readonly LastModifiedManager _lastModifiedManager; private readonly SettingsFactory _settingsFactory; public SettingsManager(DistributedCacheHandler distributedCacheHandler, LastModifiedManager lastModifiedManager, SettingsFactory settingsFactory) { _cacheHandler = distributedCacheHandler; _lastModifiedManager = lastModifiedManager; _settingsFactory = settingsFactory; } public int GetIntSetting(string key, Application application) { var cacheKey = GetSettingCacheKey(application); Dictionary settings = (Dictionary)_cacheHandler.Get(cacheKey); if (settings == null) { settings = _settingsFactory.GetSettings(application); _cacheHandler.Put(cacheKey, settings); } if (settings.ContainsKey(key)) { int settingValue; if (int.TryParse(settings[key], out settingValue)) return settingValue; } return default(int); } public void SetIntSetting(string key, int? value, Application application) { _settingsFactory.SaveSetting(key, value.ToString(), application); _lastModifiedManager.SetLastModifyDate(application, EntityType.Settings); ClearCache(application); } public double GetDoubleSetting(string key, Application application) { var cacheKey = GetSettingCacheKey(application); Dictionary settings = (Dictionary)_cacheHandler.Get(cacheKey); if (settings == null) { settings = _settingsFactory.GetSettings(application); _cacheHandler.Put(cacheKey, settings); } if (settings.ContainsKey(key)) { double settingValue; if (double.TryParse(settings[key], out settingValue)) return settingValue; } return default(double); } public void SetDoubleSetting(string key, double? value, Application application) { _settingsFactory.SaveSetting(key, value.ToString(), application); _lastModifiedManager.SetLastModifyDate(application, EntityType.Settings); ClearCache(application); } public void SetStringSetting(string key, string value, Application application) { _settingsFactory.SaveSetting(key, value, application); _lastModifiedManager.SetLastModifyDate(application, EntityType.Settings); ClearCache(application); } public string GetStringSetting(string key, Application application) { var cacheKey = GetSettingCacheKey(application); Dictionary settings = (Dictionary)_cacheHandler.Get(cacheKey); if (settings == null) { settings = _settingsFactory.GetSettings(application); _cacheHandler.Put(cacheKey, settings); } if (settings.ContainsKey(key)) { return settings[key]; } return string.Empty; } public void ClearCache(Application application) { _cacheHandler.Remove(GetSettingCacheKey(application)); } private string GetSettingCacheKey(Application app) { return "Settings-1.0:" + (app != null ? app.ID.ToString() : "null"); } } }