MythTV master
configuration.h
Go to the documentation of this file.
1
2// 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 "mythconfig.h"
17
18#include <utility>
19
20#include <QDomDocument>
21#include <QDomNode>
22#include <QString>
23#include <QStringList>
24#include <QVariant>
25
29
31//
32// **NOTE: Performance Issue ***
33//
34// This class loads an XML file into a QDomDocument. All requests for
35// getting or setting values navigates the DOM each time. All settings should
36// only be read/written once if possible.
37//
39
41{
42 protected:
43
44 QString m_path {GetConfDir()};
45 QString m_fileName {kDefaultFilename};
46
47 QDomDocument m_config;
48 QDomNode m_rootNode;
49
50 QDomNode FindNode(const QString &setting, bool create);
51 QDomNode FindNode(QStringList &path, QDomNode &current, bool create);
52
53 QString GetValue(const QString &setting);
54
55 public:
56
57 static constexpr auto kDefaultFilename = "config.xml";
58
59 static inline const QString kDefaultDB {"Database/"};
60 static inline const QString kDefaultWOL {"WakeOnLAN/"};
61 static inline const QString kDefaultMFE {"UPnP/MythFrontend/DefaultBackend/"};
62 static inline const QString kDefaultPIN {kDefaultMFE + "SecurityPin"};
63 static inline const QString kDefaultUSN {kDefaultMFE + "USN"};
64
65 XmlConfiguration() { Load(); }
66 explicit XmlConfiguration(QString fileName)
67 : m_fileName(std::move(fileName))
68 {
69 Load();
70 }
71
72 bool Load();
73 bool Save();
74
75 bool FileExists();
76
77 bool GetValue(const QString &setting, const bool defaultValue)
78 {
79 QString value = GetValue(setting);
80 return (!value.isNull()) ? QVariant(value).toBool() : defaultValue;
81 }
82 int GetValue(const QString &setting, const int defaultValue)
83 {
84 QString value = GetValue(setting);
85 return (!value.isNull()) ? QVariant(value).toInt() : defaultValue;
86 }
87 QString GetValue(const QString &setting, const QString &defaultValue)
88 {
89 QString value = GetValue(setting);
90 return (!value.isNull()) ? value : defaultValue;
91 }
95 QString GetValue(const QString &setting, const char* defaultValue)
96 {
97 QString value = GetValue(setting);
98 return (!value.isNull()) ? value : QString(defaultValue);
99 }
100
101 void SetValue(const QString &setting, bool value)
102 {
103 SetValue(setting, QVariant(value).toString());
104 }
105 void SetValue(const QString &setting, int value)
106 {
107 SetValue(setting, QVariant(value).toString());
108 }
113 void SetValue(const QString &setting, const char* value)
114 {
115 SetValue(setting, QString(value));
116 }
117 void SetValue(const QString &setting, const QString &value);
118 void ClearValue(const QString &setting);
119
120 template <typename T>
121#if HAVE_IS_DURATION_V
122 typename std::enable_if_t<std::chrono::__is_duration_v<T>, T>
123#else
124 typename std::enable_if_t<std::chrono::__is_duration<T>::value, T>
125#endif
126 GetDuration(const QString &setting, T defaultValue = T::zero())
127 {
128 return T(GetValue(setting, static_cast<int>(defaultValue.count())));
129 }
130
131 template <typename T>
132#if HAVE_IS_DURATION_V
133 typename std::enable_if_t<std::chrono::__is_duration_v<T>>
134#else
135 typename std::enable_if_t<std::chrono::__is_duration<T>::value>
136#endif
137 SetDuration(const QString &setting, T value)
138 {
139 SetValue(setting, static_cast<int>(value.count()));
140 }
141};
142
143#endif // CONFIGURATION_H
QString GetValue(const QString &setting, const QString &defaultValue)
Definition: configuration.h:87
void SetValue(const QString &setting, int value)
QDomNode m_rootNode
Definition: configuration.h:48
QString GetValue(const QString &setting, const char *defaultValue)
get the string value stored as setting with a default C string.
Definition: configuration.h:95
int GetValue(const QString &setting, const int defaultValue)
Definition: configuration.h:82
XmlConfiguration(QString fileName)
Definition: configuration.h:66
std::enable_if_t< std::chrono::__is_duration< T >::value > SetDuration(const QString &setting, T value)
void SetValue(const QString &setting, const char *value)
set value to a C string; just in case, for overload resolution
void SetValue(const QString &setting, bool value)
bool GetValue(const QString &setting, const bool defaultValue)
Definition: configuration.h:77
QDomDocument m_config
Definition: configuration.h:47
std::enable_if_t< std::chrono::__is_duration< T >::value, T > GetDuration(const QString &setting, T defaultValue=T::zero())
#define MBASE_PUBLIC
Definition: mythbaseexp.h:15
QString GetConfDir(void)
Definition: mythdirs.cpp:263
QString toString(const QDateTime &raw_dt, uint format)
Returns formatted string representing the time.
Definition: mythdate.cpp:93
QDateTime current(bool stripped)
Returns current Date and Time in UTC.
Definition: mythdate.cpp:15
STL namespace.