Go to the documentation of this file.
5 #if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
6 #include <QStringConverter>
30 paths <<
"/Config/Database";
31 paths <<
"/Config/General";
40 LOG(VB_UPNP, LOG_INFO,
41 QString(
"HttpConfig::ProcessRequest(): m_sBaseURL: '%1',"
44 if (!request->
m_sBaseUrl.startsWith(
"/Config"))
68 bool okToSave =
false;
77 else if (request->
m_sBaseUrl ==
"/Config/General")
85 LOG(VB_UPNP, LOG_INFO,
"HTTP method 'Save' called, but not handled");
88 os <<
"<html><body><h3>The Save function for this screen is "
89 <<
"not hooked up yet</h3><dl>";
90 QStringMap::const_iterator it = request->
m_mapParams.begin();
93 if (it.key() ==
"__group__")
96 os <<
"<dt>"<<it.key()<<
"</dt><dd>"
99 os <<
"</dl></body></html>";
107 "no-cache=\"Ext\", max-age = 0";
113 else if (request->
m_sMethod ==
"Settings")
115 QString result = R
"({ "Error": "Unknown Settings List" })";
118 if (request->
m_sBaseUrl ==
"/Config/Database")
120 fn +=
"config_backend_database.xml";
125 else if (request->
m_sBaseUrl ==
"/Config/General")
127 fn +=
"config_backend_general.xml";
138 "no-cache=\"Ext\", max-age = 0";
146 if (request->
m_sBaseUrl ==
"/Config/Database")
147 fn +=
"config_backend_database.xml";
148 else if (request->
m_sBaseUrl ==
"/Config/General")
149 fn +=
"config_backend_general.xml";
154 else if ((request->
m_sMethod ==
"InstallPackage") &&
157 QString
package = QUrl::fromPercentEncoding(request->m_mapParams["package"].toUtf8());
158 QString url = QString(
"http://www.mythtv.org/ftp/3rdParty/%1").arg(package);
160 QString tmpFile = tmpGroup.
GetFirstDir(
true) +
"package.zip";
164 QString result =
"false";
177 "no-cache=\"Ext\", max-age = 0";
181 else if ((request->
m_sMethod ==
"FileBrowser") &&
184 QString startingDir = QUrl::fromPercentEncoding(request->
m_mapParams[
"dir"].toUtf8());
185 if (startingDir.startsWith(
"myth://"))
187 QUrl qurl(startingDir);
190 QString host = qurl.host();
191 int port = qurl.port();
195 QString storageGroup = qurl.userName();
200 if ((entries.size() == 1) &&
201 (entries[0].startsWith(
"sgdir::")))
203 QStringList parts = entries[0].split(
"::");
207 if (!entries.empty())
210 os <<
"<ul class=\"jqueryFileTree\" style=\"display: none;\">\r\n";
212 for (
const auto & entry : std::as_const(entries))
214 QStringList parts = entry.split(
"::");
215 QFileInfo fi(parts[1]);
223 if (entry.startsWith(
"sgdir::"))
225 os << R
"( <li class="directory collapsed"><a href="#" rel=")"
226 << path << "/\">" << parts[1] <<
"</a></li>\r\n";
228 else if (entry.startsWith(
"dir::"))
230 os << R
"( <li class="directory collapsed"><a href="#" rel=")"
231 << path << "/\">" << fi.fileName() <<
"</a></li>\r\n";
233 else if (entry.startsWith(
"file::"))
235 os <<
" <li class=\"file ext_" << fi.suffix() << R
"("><a href="#" rel=")"
236 << parts[3] << "\">" << fi.fileName() <<
"</a></li>\r\n";
244 QDir dir(startingDir);
248 os <<
"<ul class=\"jqueryFileTree\" style=\"display: none;\">\r\n";
250 QFileInfoList infoList = dir.entryInfoList();
251 for (
const auto & fi : std::as_const(infoList))
255 if (fi.fileName().startsWith(
"."))
258 os << R
"( <li class="directory collapsed"><a href="#" rel=")"
259 << fi.absoluteFilePath() << "/\">" << fi.fileName() <<
"</a></li>\r\n";
262 bool dirsOnly =
true;
264 dirsOnly = (request->
m_mapParams[
"dirsOnly"].toInt() != 0);
268 for (
const auto & fi : std::as_const(infoList))
272 if (fi.fileName().startsWith(
"."))
275 os <<
" <li class=\"file ext_" << fi.suffix() << R
"("><a href="#" rel=")"
276 << fi.absoluteFilePath() << "\">" << fi.fileName() <<
"</a></li>\r\n";
285 else if ((request->
m_sMethod ==
"GetValueList") &&
296 "no-cache=\"Ext\", max-age = 0";
303 "config_backend_database.xml";
305 QString form(
"/Config/Database/Save");
326 else if (request->
m_sMethod ==
"General")
329 "config_backend_general.xml";
331 QString form(
"/Config/General/Save");
357 "no-cache=\"Ext\", max-age = 0";
364 const QString &group)
366 QTextStream os(&buffer);
368 #if QT_VERSION < QT_VERSION_CHECK(6,0,0)
369 os.setCodec(
"UTF-8");
371 os.setEncoding(QStringConverter::Utf8);
374 os <<
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" "
375 <<
"\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\r\n"
376 <<
"<html xmlns=\"http://www.w3.org/1999/xhtml\""
377 <<
" xml:lang=\"en\" lang=\"en\">\r\n"
379 <<
" <meta http-equiv=\"Content-Type\"\r\n"
380 <<
" content=\"text/html; charset=UTF-8\" />\r\n"
381 <<
" <link rel=\"stylesheet\" href=\"/setup/css/Config.css\" type=\"text/css\">\r\n"
382 <<
" <title>MythTV Config</title>"
385 <<
"<div class=\"config\">\r\n"
386 <<
" <h1 class=\"config\">MythTV Configuration</h1>\r\n";
392 const QString &group)
394 QTextStream os(&buffer);
396 #if QT_VERSION < QT_VERSION_CHECK(6,0,0)
397 os.setCodec(
"UTF-8");
399 os.setEncoding(QStringConverter::Utf8);
402 os <<
" <form id=\"config_form_" << group <<
"\">\r\n"
403 << R
"( <input type="hidden" id="__config_form_action__" value=")" << form << "\" />\r\n"
404 << R
"( <input type="hidden" id="__group__" value=")" << group << "\" />\r\n";
409 QTextStream os(&buffer);
413 os << R
"( <input type="button" value="Save Changes" onClick="javascript:submitConfigForm(')" << group << "')\" />\r\n"
422 QTextStream os(&buffer);
431 QTextStream os(&buffer);
433 for (
const auto *setting : std::as_const(settings))
434 os << setting->ToHTML(1);
static void PrintSettings(QBuffer &buffer, const MythSettingList &settings)
bool extractZIP(QString zipFile, const QString &outDir)
MythSettingList m_databaseSettings
MythSettingList m_generalSettings
bool load_settings(MythSettingList &settings, const QString &hostname)
QString m_sResponseTypeText
bool parse_settings(MythSettingList &settings, const QString &filename, const QString &group)
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
QStringList GetSettingValueList(const QString &type)
QStringMap m_mapRespHeaders
QString StringMapToJSON(const QMap< QString, QString > &map)
static void PrintHeader(QBuffer &buffer, const QString &form, const QString &group="")
static QString GenMythURL(const QString &host=QString(), int port=0, QString path=QString(), const QString &storageGroup=QString())
QString GetShareDir(void)
static void PrintFooter(QBuffer &buffer, const QString &group="")
QString GetFirstDir(bool appendSlash=false) const
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
static void CloseForm(QBuffer &buffer, const QString &group="")
bool ProcessRequest(HTTPRequest *pRequest) override
bool check_settings(MythSettingList &, const QMap< QString, QString > ¶ms, QString &result)
QList< MythSettingBase * > MythSettingList
void FormatFileResponse(const QString &sFileName)
HttpResponseType m_eResponseType
QStringList GetFileInfoList(const QString &Path)
QString GetHostName(void)
QMap< QString, QString > GetSettingsMap(const MythSettingList &settings, const QString &hostname)
QStringList GetBasePaths() override
QString StringListToJSON(const QString &key, const QStringList &sList)
MythContext * gContext
This global variable contains the MythContext instance for the application.
MythDownloadManager * GetMythDownloadManager(void)
Gets the pointer to the MythDownloadManager singleton.
static void OpenForm(QBuffer &buffer, const QString &form, const QString &group="")