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 <utility>
17
18#include <QDomDocument>
19#include <QDomNode>
20#include <QString>
21#include <QStringList>
22#include <QVariant>
23
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
QString GetValue(const QString &setting, const QString &defaultValue)
Definition: configuration.h:85
void SetValue(const QString &setting, int value)
QDomNode m_rootNode
Definition: configuration.h:46
QString GetValue(const QString &setting, const char *defaultValue)
get the string value stored as setting with a default C string.
Definition: configuration.h:93
int GetValue(const QString &setting, const int defaultValue)
Definition: configuration.h:80
XmlConfiguration(QString fileName)
Definition: configuration.h:64
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)
Definition: configuration.h:99
bool GetValue(const QString &setting, const bool defaultValue)
Definition: configuration.h:75
QDomDocument m_config
Definition: configuration.h:45
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.