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