1 /* 2 * Copyright (C) 2015-2018 Team Kodi 3 * This file is part of Kodi - https://kodi.tv 4 * 5 * SPDX-License-Identifier: GPL-2.0-or-later 6 * See LICENSES/README.md for more information. 7 */ 8 9 #pragma once 10 11 #include "settings/lib/ISettingCallback.h" 12 #include "settings/lib/ISettingsHandler.h" 13 #include "threads/CriticalSection.h" 14 15 #include <map> 16 #include <memory> 17 #include <set> 18 #include <string> 19 #include <vector> 20 21 class CSetting; 22 23 struct IntegerSettingOption; 24 25 namespace PVR 26 { 27 class CPVRSettings : private ISettingsHandler, private ISettingCallback 28 { 29 public: 30 explicit CPVRSettings(const std::set<std::string>& settingNames); 31 ~CPVRSettings() override; 32 33 // ISettingsHandler implementation 34 void OnSettingsLoaded() override; 35 36 // ISettingCallback implementation 37 void OnSettingChanged(const std::shared_ptr<const CSetting>& setting) override; 38 39 bool GetBoolValue(const std::string& settingName) const; 40 int GetIntValue(const std::string& settingName) const; 41 std::string GetStringValue(const std::string& settingName) const; 42 43 // settings value filler for start/end recording margin time for PVR timers. 44 static void MarginTimeFiller(const std::shared_ptr<const CSetting>& setting, 45 std::vector<IntegerSettingOption>& list, 46 int& current, 47 void* data); 48 49 // Dynamically hide or show settings. 50 static bool IsSettingVisible(const std::string& condition, 51 const std::string& value, 52 const std::shared_ptr<const CSetting>& setting, 53 void* data); 54 55 // Do parental PIN check. 56 static bool CheckParentalPin(const std::string& condition, 57 const std::string& value, 58 const std::shared_ptr<const CSetting>& setting, 59 void* data); 60 61 private: 62 CPVRSettings(const CPVRSettings&) = delete; 63 CPVRSettings& operator=(CPVRSettings const&) = delete; 64 65 void Init(const std::set<std::string>& settingNames); 66 67 mutable CCriticalSection m_critSection; 68 std::map<std::string, std::shared_ptr<CSetting>> m_settings; 69 70 static unsigned int m_iInstances; 71 }; 72 } 73