5#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
6#include <QStringConverter>
31 paths <<
"/Config/Database";
32 paths <<
"/Config/General";
41 LOG(VB_UPNP, LOG_INFO,
42 QString(
"HttpConfig::ProcessRequest(): m_sBaseURL: '%1',"
45 if (!request->
m_sBaseUrl.startsWith(
"/Config"))
69 bool okToSave =
false;
78 else if (request->
m_sBaseUrl ==
"/Config/General")
86 LOG(VB_UPNP, LOG_INFO,
"HTTP method 'Save' called, but not handled");
89 os <<
"<html><body><h3>The Save function for this screen is "
90 <<
"not hooked up yet</h3><dl>";
91 QStringMap::const_iterator it = request->
m_mapParams.begin();
94 if (it.key() ==
"__group__")
97 os <<
"<dt>"<<it.key()<<
"</dt><dd>"
100 os <<
"</dl></body></html>";
108 "no-cache=\"Ext\", max-age = 0";
114 else if (request->
m_sMethod ==
"Settings")
116 QString result = R
"({ "Error": "Unknown Settings List" })";
119 if (request->
m_sBaseUrl ==
"/Config/Database")
121 fn +=
"config_backend_database.xml";
126 else if (request->
m_sBaseUrl ==
"/Config/General")
128 fn +=
"config_backend_general.xml";
139 "no-cache=\"Ext\", max-age = 0";
147 if (request->
m_sBaseUrl ==
"/Config/Database")
148 fn +=
"config_backend_database.xml";
149 else if (request->
m_sBaseUrl ==
"/Config/General")
150 fn +=
"config_backend_general.xml";
155 else if ((request->
m_sMethod ==
"InstallPackage") &&
158 QString
package = QUrl::fromPercentEncoding(request->m_mapParams["package"].toUtf8());
159 QString url = QString(
"http://www.mythtv.org/ftp/3rdParty/%1").arg(package);
161 QString tmpFile = tmpGroup.
GetFirstDir(
true) +
"package.zip";
165 QString result =
"false";
178 "no-cache=\"Ext\", max-age = 0";
182 else if ((request->
m_sMethod ==
"FileBrowser") &&
185 QString startingDir = QUrl::fromPercentEncoding(request->
m_mapParams[
"dir"].toUtf8());
186 if (startingDir.startsWith(
"myth://"))
188 QUrl qurl(startingDir);
191 QString host = qurl.host();
192 int port = qurl.port();
196 QString storageGroup = qurl.userName();
201 if ((entries.size() == 1) &&
202 (entries[0].startsWith(
"sgdir::")))
204 QStringList parts = entries[0].split(
"::");
208 if (!entries.empty())
211 os <<
"<ul class=\"jqueryFileTree\" style=\"display: none;\">\r\n";
213 for (
const auto & entry : std::as_const(entries))
215 QStringList parts = entry.split(
"::");
216 QFileInfo fi(parts[1]);
224 if (entry.startsWith(
"sgdir::"))
226 os << R
"( <li class="directory collapsed"><a href="#" rel=")"
227 << path << "/\">" << parts[1] <<
"</a></li>\r\n";
229 else if (entry.startsWith(
"dir::"))
231 os << R
"( <li class="directory collapsed"><a href="#" rel=")"
232 << path << "/\">" << fi.fileName() <<
"</a></li>\r\n";
234 else if (entry.startsWith(
"file::"))
236 os <<
" <li class=\"file ext_" << fi.suffix() << R
"("><a href="#" rel=")"
237 << parts[3] << "\">" << fi.fileName() <<
"</a></li>\r\n";
245 QDir dir(startingDir);
249 os <<
"<ul class=\"jqueryFileTree\" style=\"display: none;\">\r\n";
251 QFileInfoList infoList = dir.entryInfoList();
252 for (
const auto & fi : std::as_const(infoList))
256 if (fi.fileName().startsWith(
"."))
259 os << R
"( <li class="directory collapsed"><a href="#" rel=")"
260 << fi.absoluteFilePath() << "/\">" << fi.fileName() <<
"</a></li>\r\n";
263 bool dirsOnly =
true;
265 dirsOnly = (request->
m_mapParams[
"dirsOnly"].toInt() != 0);
269 for (
const auto & fi : std::as_const(infoList))
273 if (fi.fileName().startsWith(
"."))
276 os <<
" <li class=\"file ext_" << fi.suffix() << R
"("><a href="#" rel=")"
277 << fi.absoluteFilePath() << "\">" << fi.fileName() <<
"</a></li>\r\n";
286 else if ((request->
m_sMethod ==
"GetValueList") &&
297 "no-cache=\"Ext\", max-age = 0";
301 else if (request->
m_sMethod ==
"Database")
304 "config_backend_database.xml";
306 QString form(
"/Config/Database/Save");
327 else if (request->
m_sMethod ==
"General")
330 "config_backend_general.xml";
332 QString form(
"/Config/General/Save");
358 "no-cache=\"Ext\", max-age = 0";
365 const QString &group)
367 QTextStream os(&buffer);
369#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
370 os.setCodec(
"UTF-8");
372 os.setEncoding(QStringConverter::Utf8);
375 os <<
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" "
376 <<
"\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\r\n"
377 <<
"<html xmlns=\"http://www.w3.org/1999/xhtml\""
378 <<
" xml:lang=\"en\" lang=\"en\">\r\n"
380 <<
" <meta http-equiv=\"Content-Type\"\r\n"
381 <<
" content=\"text/html; charset=UTF-8\" />\r\n"
382 <<
" <link rel=\"stylesheet\" href=\"/setup/css/Config.css\" type=\"text/css\">\r\n"
383 <<
" <title>MythTV Config</title>"
386 <<
"<div class=\"config\">\r\n"
387 <<
" <h1 class=\"config\">MythTV Configuration</h1>\r\n";
393 const QString &group)
395 QTextStream os(&buffer);
397#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
398 os.setCodec(
"UTF-8");
400 os.setEncoding(QStringConverter::Utf8);
403 os <<
" <form id=\"config_form_" << group <<
"\">\r\n"
404 << R
"( <input type="hidden" id="__config_form_action__" value=")" << form << "\" />\r\n"
405 << R
"( <input type="hidden" id="__group__" value=")" << group << "\" />\r\n";
410 QTextStream os(&buffer);
414 os << R
"( <input type="button" value="Save Changes" onClick="javascript:submitConfigForm(')" << group << "')\" />\r\n"
423 QTextStream os(&buffer);
432 QTextStream os(&buffer);
434 for (
const auto *setting : std::as_const(settings))
435 os << setting->ToHTML(1);
HttpResponseType m_eResponseType
QString m_sResponseTypeText
void FormatFileResponse(const QString &sFileName)
QStringMap m_mapRespHeaders
MythSettingList m_generalSettings
static void PrintHeader(QBuffer &buffer, const QString &form, const QString &group="")
bool ProcessRequest(HTTPRequest *pRequest) override
static void OpenForm(QBuffer &buffer, const QString &form, const QString &group="")
static void CloseForm(QBuffer &buffer, const QString &group="")
MythSettingList m_databaseSettings
static void PrintSettings(QBuffer &buffer, const MythSettingList &settings)
QStringList GetBasePaths() override
static void PrintFooter(QBuffer &buffer, const QString &group="")
QString GetHostName(void)
static QString GenMythURL(const QString &host=QString(), int port=0, QString path=QString(), const QString &storageGroup=QString())
QString GetFirstDir(bool appendSlash=false) const
QStringList GetFileInfoList(const QString &Path)
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
QString GetShareDir(void)
MythDownloadManager * GetMythDownloadManager(void)
Gets the pointer to the MythDownloadManager singleton.
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
QMap< QString, QString > GetSettingsMap(const MythSettingList &settings, const QString &hostname)
QString StringListToJSON(const QString &key, const QStringList &sList)
bool parse_settings(MythSettingList &settings, const QString &filename, const QString &group)
bool load_settings(MythSettingList &settings, const QString &hostname)
QStringList GetSettingValueList(const QString &type)
QString StringMapToJSON(const QMap< QString, QString > &map)
bool check_settings(MythSettingList &, const QMap< QString, QString > ¶ms, QString &result)
QList< MythSettingBase * > MythSettingList
bool extractZIP(QString zipFile, const QString &outDir)