MythTV  master
v2config.cpp
Go to the documentation of this file.
1 // qt
2 #include <QHostAddress>
3 #include <QNetworkInterface>
4 
5 // MythTV
6 #include "libmyth/mythcontext.h"
9 #include "libmythbase/iso3166.h"
10 #include "libmythbase/iso639.h"
12 #include "libmythbase/mythlocale.h"
14 #include "libmythbase/mythversion.h"
15 #include "libmythbase/version.h"
16 
17 // MythBackend
18 #include "v2config.h"
19 #include "v2countryList.h"
20 #include "v2databaseInfo.h"
21 #include "v2databaseStatus.h"
22 #include "v2languageList.h"
23 
24 // This will be initialised in a thread safe manner on first use
26  (CONFIG_HANDLE, V2Config::staticMetaObject, &V2Config::RegisterCustomTypes))
27 
29 {
30  qRegisterMetaType<V2ConnectionInfo*>("V2ConnectionInfo");
31  qRegisterMetaType<V2CountryList*>("V2CountryList");
32  qRegisterMetaType<V2Country*>("V2Country");
33  qRegisterMetaType<V2LanguageList*>("V2LanguageList");
34  qRegisterMetaType<V2Language*>("V2Language");
35  qRegisterMetaType<V2DatabaseStatus*>("V2DatabaseStatus");
36  qRegisterMetaType<V2SystemEvent*>("V2SystemEvent");
37  qRegisterMetaType<V2SystemEventList*>("V2SystemEventList");
38 }
39 
40 
42  : MythHTTPService(s_service)
43 {
44 }
45 
47 //
49 bool V2Config::SetDatabaseCredentials(const QString &Host, const QString &UserName, const QString &Password, const QString &Name, int Port, bool DoTest)
50 {
51  bool bResult = false;
52 
53  QString db("mythconverg");
54  int port = 3306;
55 
56  if (!Name.isEmpty())
57  db = Name;
58 
59  if (Port != 0)
60  port = Port;
61 
62  if (DoTest && !TestDatabase(Host, UserName, Password, db, port))
63  throw( QString( "Database test failed. Not saving database connection information." ));
64 
65  DatabaseParams dbparms;
66  dbparms.m_dbName = db;
67  dbparms.m_dbUserName = UserName;
68  dbparms.m_dbPassword = Password;
69  dbparms.m_dbHostName = Host;
70  dbparms.m_dbPort = port;
71 
72  // Just use some sane defaults for these values
73  dbparms.m_wolEnabled = false;
74  dbparms.m_wolReconnect = 1s;
75  dbparms.m_wolRetry = 3;
76  dbparms.m_wolCommand = QString();
77 
78  bResult = gContext->SaveDatabaseParams(dbparms);
79 
80  return bResult;
81 }
82 
84 //
87 {
88  const DatabaseParams params = GetMythDB()->GetDatabaseParams();
89 
90  auto *pInfo = new V2DatabaseStatus();
91 
92  pInfo->setHost(params.m_dbHostName);
93  pInfo->setPing(params.m_dbHostPing);
94  pInfo->setPort(params.m_dbPort);
95  pInfo->setUserName(params.m_dbUserName);
96  pInfo->setPassword(params.m_dbPassword);
97  pInfo->setName(params.m_dbName);
98  pInfo->setType(params.m_dbType);
99  pInfo->setLocalEnabled(params.m_localEnabled);
100  pInfo->setLocalHostName(params.m_localHostName);
101 
102  // are we connected to the database?
103  bool connected = TestDatabase(params.m_dbHostName, params.m_dbUserName, params.m_dbPassword, params.m_dbName, params.m_dbPort);
104  pInfo->setConnected(connected);
105 
106  // do we have a mythconverg database?
107  if (connected)
108  {
109  bool haveSchema = GetMythDB()->HaveSchema();
110  pInfo->setHaveDatabase(haveSchema);
111 
112  if (haveSchema)
113  {
114  // get schema version
115  pInfo->setSchemaVersion(QString(MYTH_DATABASE_VERSION).toInt());
116  }
117  else
118  pInfo->setSchemaVersion(0);
119  }
120  else
121  {
122  pInfo->setHaveDatabase(false);
123  pInfo->setSchemaVersion(0);
124  }
125 
126  return pInfo;
127 }
128 
130 //
133 {
134 
136  QStringList locales = localesMap.values();
137  locales.sort();
138 
139  auto* pList = new V2CountryList();
140 
141  for (const auto& country : qAsConst(locales))
142  {
143  const QString code = localesMap.key(country);
144  const QString nativeCountry = GetISO3166CountryName(code);
145 
146  V2Country *pCountry = pList->AddNewCountry();
147  pCountry->setCode(code);
148  pCountry->setCountry(country);
149  pCountry->setNativeCountry(nativeCountry);
150  pCountry->setImage(QString("%1.png").arg(code.toLower()));
151  }
152 
153  return pList;
154 }
155 
157 //
160 {
161  QMap<QString,QString> langMap = MythTranslation::getLanguages();
162  QStringList langs = langMap.values();
163  langs.sort();
164 
165  auto* pList = new V2LanguageList();
166 
167  for (const auto& nativeLang : qAsConst(langs))
168  {
169  const QString code = langMap.key(nativeLang);
170  const QString language = GetISO639EnglishLanguageName(code);
171 
172  V2Language *pLanguage = pList->AddNewLanguage();
173  pLanguage->setCode(code);
174  pLanguage->setLanguage(language);
175  pLanguage->setNativeLanguage(nativeLang);
176  pLanguage->setImage(QString("%1.png").arg(code));
177  }
178 
179  return pList;
180 }
181 
183 //
185 
186 QStringList V2Config::GetIPAddresses( const QString &Protocol )
187 {
188  QString protocol = Protocol;
189 
190  if (protocol != "IPv4" && protocol != "IPv6")
191  protocol = "All";
192 
193  QStringList oList;
194 
195  QList<QHostAddress> list = QNetworkInterface::allAddresses();
196  QList<QHostAddress>::iterator it;
197 
198  for (it = list.begin(); it != list.end(); ++it)
199  {
200  if (((*it).protocol() == QAbstractSocket::IPv4Protocol && protocol == "IPv4") ||
201  ((*it).protocol() == QAbstractSocket::IPv6Protocol && protocol == "IPv6") || protocol == "All")
202  {
203  it->setScopeId(QString());
204  oList.append((*it).toString());
205  }
206  }
207 
208  return oList;
209 }
210 
212 {
213  QString theHost;
214  if (Host.isEmpty())
215  theHost = gCoreContext->GetHostName();
216  else
217  theHost = Host;
218  auto* pList = new V2SystemEventList();
219  QMap <QString, QString> settings;
221  QMap<QString, QString>::const_iterator it;
222  for (it = settings.constBegin(); it != settings.constEnd(); ++it)
223  {
224  V2SystemEvent *event = pList->AddNewSystemEvent();
225  event->setKey(it.key());
226  event->setLocalizedName(it.value());
227  event->setValue(gCoreContext->GetSettingOnHost(it.key(), theHost, QString()));
228  }
229  return pList;
230 }
Password
static StandardSetting * Password(bool enabled)
Setting for changing password.
Definition: galleryconfig.cpp:245
DatabaseParams::m_dbHostName
QString m_dbHostName
database server
Definition: mythdbparams.h:22
GetISO639EnglishLanguageName
QString GetISO639EnglishLanguageName(const QString &iso639_1)
Definition: iso639.cpp:962
DatabaseParams
Structure containing the basic Database parameters.
Definition: mythdbparams.h:10
V2Config::RegisterCustomTypes
static void RegisterCustomTypes()
TestDatabase
bool TestDatabase(const QString &dbHostName, const QString &dbUserName, QString dbPassword, QString dbName, int dbPort)
Definition: mythdbcon.cpp:39
V2Config::SetDatabaseCredentials
static bool SetDatabaseCredentials(const QString &Host, const QString &UserName, const QString &Password, const QString &Name, int Port, bool DoTest)
Definition: v2config.cpp:49
mythhttpmetaservice.h
V2Config::GetDatabaseStatus
static V2DatabaseStatus * GetDatabaseStatus(void)
Definition: v2config.cpp:86
DatabaseParams::m_dbType
QString m_dbType
database type (MySQL, Postgres, etc.)
Definition: mythdbparams.h:28
GetMythDB
MythDB * GetMythDB(void)
Definition: mythdb.cpp:50
mythsystemevent.h
V2CountryList
Definition: v2countryList.h:9
V2Config::GetCountries
static V2CountryList * GetCountries(void)
Definition: v2config.cpp:132
GetISO3166CountryName
QString GetISO3166CountryName(const QString &iso3166Code)
Definition: iso3166.cpp:368
DatabaseParams::m_wolReconnect
std::chrono::seconds m_wolReconnect
seconds to wait for reconnect
Definition: mythdbparams.h:35
MythTranslation::getLanguages
static QMap< QString, QString > getLanguages(void)
Definition: mythtranslation.cpp:118
Q_GLOBAL_STATIC_WITH_ARGS
Q_GLOBAL_STATIC_WITH_ARGS(MythHTTPMetaService, s_service,(CONFIG_HANDLE, V2Config::staticMetaObject, &V2Config::RegisterCustomTypes)) void V2Config
Definition: v2config.cpp:25
DatabaseParams::m_dbPort
int m_dbPort
database port
Definition: mythdbparams.h:24
v2languageList.h
DatabaseParams::m_dbHostPing
bool m_dbHostPing
Can we test connectivity using ping?
Definition: mythdbparams.h:23
GetISO3166EnglishCountryMap
ISO3166ToNameMap GetISO3166EnglishCountryMap(void)
Returns a map of ISO-3166 country codes mapped to the country name in English.
Definition: iso3166.cpp:344
V2Config::GetLanguages
static V2LanguageList * GetLanguages(void)
Definition: v2config.cpp:159
V2Country
Definition: v2country.h:6
mythtranslation.h
V2SystemEvent
Definition: v2systemEventList.h:8
mythlocale.h
V2LanguageList
Definition: v2languageList.h:9
DatabaseParams::m_dbPassword
QString m_dbPassword
DB password.
Definition: mythdbparams.h:26
V2Config::V2Config
V2Config()
Definition: v2config.cpp:41
DatabaseParams::m_wolRetry
int m_wolRetry
times to retry to reconnect
Definition: mythdbparams.h:36
v2databaseInfo.h
DatabaseParams::m_dbName
QString m_dbName
database name
Definition: mythdbparams.h:27
gCoreContext
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
Definition: mythcorecontext.cpp:54
v2config.h
MythHTTPService
Definition: mythhttpservice.h:19
V2Config::GetSystemEvents
static V2SystemEventList * GetSystemEvents(const QString &Host)
Definition: v2config.cpp:211
MythHTTPService::Name
QString & Name()
Definition: mythhttpservice.cpp:227
v2databaseStatus.h
mythcorecontext.h
MythContext::SaveDatabaseParams
bool SaveDatabaseParams(const DatabaseParams &params)
Definition: mythcontext.cpp:1699
DatabaseParams::m_wolCommand
QString m_wolCommand
command to use for wake-on-lan
Definition: mythdbparams.h:37
Name
Definition: channelsettings.cpp:47
MythCoreContext::GetSettingOnHost
QString GetSettingOnHost(const QString &key, const QString &host, const QString &defaultval="")
Definition: mythcorecontext.cpp:924
V2SystemEventList
Definition: v2systemEventList.h:30
DatabaseParams::m_dbUserName
QString m_dbUserName
DB user name.
Definition: mythdbparams.h:25
iso3166.h
ISO 3166-1 support functions.
V2DatabaseStatus
Definition: v2databaseStatus.h:7
MythSystemEventEditor::createSettingList
static void createSettingList(QMap< QString, QString > &settings)
Definition: mythsystemevent.cpp:399
mythcontext.h
V2Language
Definition: v2language.h:6
iso639.h
ISO 639-1 and ISO 639-2 support functions.
v2countryList.h
MythCoreContext::GetHostName
QString GetHostName(void)
Definition: mythcorecontext.cpp:836
DatabaseParams::m_localEnabled
bool m_localEnabled
true if localHostName is not default
Definition: mythdbparams.h:30
DatabaseParams::m_wolEnabled
bool m_wolEnabled
true if wake-on-lan params are used
Definition: mythdbparams.h:34
CONFIG_HANDLE
#define CONFIG_HANDLE
Definition: v2config.h:12
DatabaseParams::m_localHostName
QString m_localHostName
name used for loading/saving settings
Definition: mythdbparams.h:31
ISO3166ToNameMap
QMap< QString, QString > ISO3166ToNameMap
Definition: iso3166.h:23
gContext
MythContext * gContext
This global variable contains the MythContext instance for the application.
Definition: mythcontext.cpp:57
V2Config::GetIPAddresses
static QStringList GetIPAddresses(const QString &Protocol)
Definition: v2config.cpp:186
MythHTTPMetaService
Definition: mythhttpmetaservice.h:10