MythTV  master
configuration.h
Go to the documentation of this file.
1 // Program Name: configuration.h
3 // Created : Feb. 12, 2007
4 //
5 // Purpose : XML Configuration file Class
6 //
7 // Copyright (c) 2007 David Blain <dblain@mythtv.org>
8 //
9 // Licensed under the GPL v2 or later, see LICENSE for details
10 //
12 
13 #ifndef CONFIGURATION_H
14 #define CONFIGURATION_H
15 
16 #include <utility>
17 
18 #include <QDomDocument>
19 #include <QDomNode>
20 #include <QString>
21 #include <QStringList>
22 #include <QVariant>
23 
25 #include "libmythbase/mythchrono.h"
26 #include "libmythbase/mythdirs.h"
27 
29 //
30 // **NOTE: Performance Issue ***
31 //
32 // This class loads an XML file into a QDomDocument. All requests for
33 // getting or setting values navigates the DOM each time. All settings should
34 // only be read/written once if possible.
35 //
37 
39 {
40  protected:
41 
42  QString m_path {GetConfDir()};
43  QString m_fileName {kDefaultFilename};
44 
45  QDomDocument m_config;
46  QDomNode m_rootNode;
47 
48  QDomNode FindNode(const QString &setting, bool create);
49  QDomNode FindNode(QStringList &path, QDomNode &current, bool create);
50 
51  QString GetValue(const QString &setting);
52 
53  public:
54 
55  static constexpr auto kDefaultFilename = "config.xml";
56 
57  static inline const QString kDefaultDB {"Database/"};
58  static inline const QString kDefaultWOL {"WakeOnLAN/"};
59  static inline const QString kDefaultMFE {"UPnP/MythFrontend/DefaultBackend/"};
60  static inline const QString kDefaultPIN {kDefaultMFE + "SecurityPin"};
61  static inline const QString kDefaultUSN {kDefaultMFE + "USN"};
62 
63  XmlConfiguration() { Load(); }
64  explicit XmlConfiguration(QString fileName)
65  : m_fileName(std::move(fileName))
66  {
67  Load();
68  }
69 
70  bool Load();
71  bool Save();
72 
73  bool FileExists();
74 
75  bool GetValue(const QString &setting, const bool defaultValue)
76  {
77  QString value = GetValue(setting);
78  return (!value.isNull()) ? QVariant(value).toBool() : defaultValue;
79  }
80  int GetValue(const QString &setting, const int defaultValue)
81  {
82  QString value = GetValue(setting);
83  return (!value.isNull()) ? QVariant(value).toInt() : defaultValue;
84  }
85  QString GetValue(const QString &setting, const QString &defaultValue)
86  {
87  QString value = GetValue(setting);
88  return (!value.isNull()) ? value : defaultValue;
89  }
93  QString GetValue(const QString &setting, const char* defaultValue)
94  {
95  QString value = GetValue(setting);
96  return (!value.isNull()) ? value : QString(defaultValue);
97  }
98 
99  void SetValue(const QString &setting, bool value)
100  {
101  SetValue(setting, QVariant(value).toString());
102  }
103  void SetValue(const QString &setting, int value)
104  {
105  SetValue(setting, QVariant(value).toString());
106  }
111  void SetValue(const QString &setting, const char* value)
112  {
113  SetValue(setting, QString(value));
114  }
115  void SetValue(const QString &setting, const QString &value);
116  void ClearValue(const QString &setting);
117 
118  template <typename T>
119  typename std::enable_if_t<std::chrono::__is_duration<T>::value, T>
120  GetDuration(const QString &setting, T defaultValue = T::zero())
121  {
122  return T(GetValue(setting, static_cast<int>(defaultValue.count())));
123  }
124 
125  template <typename T>
126  typename std::enable_if_t<std::chrono::__is_duration<T>::value>
127  SetDuration(const QString &setting, T value)
128  {
129  SetValue(setting, static_cast<int>(value.count()));
130  }
131 };
132 
133 #endif // CONFIGURATION_H
MythDate::toString
QString toString(const QDateTime &raw_dt, uint format)
Returns formatted string representing the time.
Definition: mythdate.cpp:93
XmlConfiguration::GetValue
QString GetValue(const QString &setting, const char *defaultValue)
get the string value stored as setting with a default C string.
Definition: configuration.h:93
mythbaseexp.h
XmlConfiguration::GetValue
int GetValue(const QString &setting, const int defaultValue)
Definition: configuration.h:80
XmlConfiguration::XmlConfiguration
XmlConfiguration(QString fileName)
Definition: configuration.h:64
XmlConfiguration::GetDuration
std::enable_if_t< std::chrono::__is_duration< T >::value, T > GetDuration(const QString &setting, T defaultValue=T::zero())
Definition: configuration.h:120
XmlConfiguration::m_rootNode
QDomNode m_rootNode
Definition: configuration.h:46
XmlConfiguration::GetValue
bool GetValue(const QString &setting, const bool defaultValue)
Definition: configuration.h:75
mythdirs.h
XmlConfiguration::SetValue
void SetValue(const QString &setting, int value)
Definition: configuration.h:103
MythDate::current
QDateTime current(bool stripped)
Returns current Date and Time in UTC.
Definition: mythdate.cpp:15
XmlConfiguration
Definition: configuration.h:38
XmlConfiguration::SetValue
void SetValue(const QString &setting, bool value)
Definition: configuration.h:99
MBASE_PUBLIC
#define MBASE_PUBLIC
Definition: mythbaseexp.h:15
XmlConfiguration::m_config
QDomDocument m_config
Definition: configuration.h:45
GetConfDir
QString GetConfDir(void)
Definition: mythdirs.cpp:263
XmlConfiguration::XmlConfiguration
XmlConfiguration()
Definition: configuration.h:63
XmlConfiguration::SetDuration
std::enable_if_t< std::chrono::__is_duration< T >::value > SetDuration(const QString &setting, T value)
Definition: configuration.h:127
XmlConfiguration::GetValue
QString GetValue(const QString &setting, const QString &defaultValue)
Definition: configuration.h:85
XmlConfiguration::SetValue
void SetValue(const QString &setting, const char *value)
set value to a C string; just in case, for overload resolution
Definition: configuration.h:111
mythchrono.h