Exemplo n.º 1
0
static void fill_settings(
    MythSettingList &settings, MSqlQuery &query, MythSetting::SettingType stype)
{
    QMap<QString,QString> map;
    while (query.next())
        map[query.value(0).toString()] = query.value(1).toString();

    MythSettingList::const_iterator it = settings.begin();
    for (; it != settings.end(); ++it)
        fill_setting(*it, map, stype);
}
Exemplo n.º 2
0
bool load_settings(MythSettingList &settings, const QString &hostname)
{
    MSqlQuery query(MSqlQuery::InitCon());

    QString list = extract_query_list(settings, MythSetting::kFile);
    if (!list.isEmpty())
    {
        QMap<QString,QString> map = GetConfigFileSettingValues();
        if (map.isEmpty())
            return false;

        MythSettingList::const_iterator it = settings.begin();
        for (; it != settings.end(); ++it)
            fill_setting(*it, map, MythSetting::kFile);
    }

    list = extract_query_list(settings, MythSetting::kHost);
    QString qstr =
        "SELECT value, data "
        "FROM settings "
        "WHERE hostname = '" + hostname + "' AND "
        "      value in (" + list + ")";

    if (!list.isEmpty())
    {
        if (!query.exec(qstr))
        {
            MythDB::DBError("HttpConfig::LoadMythSettings() 1", query);
            return false;
        }
        fill_settings(settings, query, MythSetting::kHost);
    }

    list = extract_query_list(settings, MythSetting::kGlobal);
    qstr =
        "SELECT value, data "
        "FROM settings "
        "WHERE hostname IS NULL AND "
        "      value in (" + list + ")";
    
    if (!list.isEmpty())
    {
        if (!query.exec(qstr))
        {
            MythDB::DBError("HttpConfig::LoadMythSettings() 2", query);
            return false;
        }
        fill_settings(settings, query, MythSetting::kGlobal);
    }

    return true;
}
Exemplo n.º 3
0
bool parse_settings(MythSettingList &settings, const QString &filename,
                    const QString &group)
{
    QDomDocument doc;
    QFile f(filename);

    if (!f.open(QIODevice::ReadOnly))
    {
        LOG(VB_GENERAL, LOG_ERR, QString("parse_settings: Can't open: '%1'")
                .arg(filename));
        return false;
    }

    QString errorMsg;
    int errorLine = 0;
    int errorColumn = 0;

    if (!doc.setContent(&f, false, &errorMsg, &errorLine, &errorColumn))
    {
        LOG(VB_GENERAL, LOG_ERR, QString("parse_settings: ") +
            QString("Parsing: %1 at line: %2 column: %3")
                .arg(filename).arg(errorLine).arg(errorColumn) +
            QString("\n\t\t\t%1").arg(errorMsg));
        f.close();
        return false;
    }
    f.close();

    settings.clear();
    bool foundGroup = false;
    bool includeAllChildren = group.isEmpty();
    return parse_dom(settings, doc.documentElement(), filename, group,
                     includeAllChildren, foundGroup);
}
Exemplo n.º 4
0
static QString extract_query_list(
    const MythSettingList &settings, MythSetting::SettingType stype)
{
    QString list;

    MythSettingList::const_iterator it = settings.begin();
    for (; it != settings.end(); ++it)
    {
        const MythSettingGroup *group =
            dynamic_cast<const MythSettingGroup*>(*it);
        if (group)
        {
            list += extract_query_list(group->m_settings, stype);
            continue;
        }
        const MythSetting *setting = dynamic_cast<const MythSetting*>(*it);
        if (setting && (setting->m_stype == stype))
            list += QString(",'%1'").arg(setting->m_value);
    }
    if (!list.isEmpty() && (list[0] == QChar(',')))
        list = list.mid(1);

    return list;
}
Exemplo n.º 5
0
bool parse_dom(MythSettingList &settings, const QDomElement &element,
               const QString &filename, const QString &group,
               bool includeAllChildren, bool &foundGroup)
{
#define LOC QString("parse_dom(%1@~%2), error: ") \
            .arg(filename).arg(e.lineNumber())

    bool mFoundGroup = false;

    QDomNode n = element.firstChild();
    while (!n.isNull())
    {
        const QDomElement e = n.toElement();
        if (e.isNull())
        {
            n = n.nextSibling();
            continue;
        }

        if (e.tagName() == "group")
        {
            QString m_human_label  = e.attribute("human_label");
            QString m_unique_label = e.attribute("unique_label");
            QString m_ecma_script  = e.attribute("ecma_script");

            bool tmpFoundGroup = false;
            bool tmpIncludeAllChildren = false || includeAllChildren;
            if (group.isEmpty() || m_unique_label == group)
            {
                mFoundGroup = true;
                tmpIncludeAllChildren = true;
            }

            MythSettingGroup *g = new MythSettingGroup(
                m_human_label, m_unique_label, m_ecma_script);

            if ((e.hasChildNodes()) &&
                (!parse_dom(g->m_settings, e, filename, group, tmpIncludeAllChildren,
                            tmpFoundGroup)))
            {
                delete g;
                return false;
            }

            if (tmpFoundGroup || tmpIncludeAllChildren)
            {
                settings.push_back(g);
                mFoundGroup = true;
            }
            else
                delete g;

        }
        else if (e.tagName() == "setting" && includeAllChildren)
        {
            QMap<QString,QString> m;
            m["value"]            = e.attribute("value");
            m["setting_type"]     = e.attribute("setting_type");
            m["label"]            = e.attribute("label");
            m["help_text"]        = e.attribute("help_text");
            m["data_type"]        = e.attribute("data_type");

            MythSetting::DataType dtype = parse_data_type(m["data_type"]);
            if (MythSetting::kInvalidDataType == dtype)
            {
                LOG(VB_GENERAL, LOG_ERR, LOC +
                    "Setting has invalid or missing data_type attribute.");
                return false;
            }

            QStringList data_list;
            QStringList display_list;
            if ((MythSetting::kComboBox == dtype) ||
                (MythSetting::kSelect   == dtype))
            {
                if (!e.hasChildNodes())
                {
                    LOG(VB_GENERAL, LOG_ERR, LOC +
                        "Setting missing selection items.");
                    return false;
                }

                QDomNode n2 = e.firstChild();
                while (!n2.isNull())
                {
                    const QDomElement e2 = n2.toElement();
                    if (e2.tagName() != "option")
                    {
                        LOG(VB_GENERAL, LOG_ERR, LOC +
                            "Setting selection contains invalid tags.");
                        return false;
                    }
                    QString display = e2.attribute("display");
                    QString data    = e2.attribute("data");
                    if (data.isEmpty())
                    {
                        LOG(VB_GENERAL, LOG_ERR, LOC +
                            "Setting selection item missing data.");
                        return false;
                    }
                    display = (display.isEmpty()) ? data : display;
                    data_list.push_back(data);
                    display_list.push_back(display);

                    n2 = n2.nextSibling();
                }
            }

            if (MythSetting::kIntegerRange == dtype)
            {
                m["range_min"] = e.attribute("range_min");
                m["range_max"] = e.attribute("range_max");
            }

            QMap<QString,QString>::const_iterator it = m.begin();
            for (; it != m.end(); ++it)
            {
                if ((*it).isEmpty())
                {
                    LOG(VB_GENERAL, LOG_ERR, LOC +
                        QString("Setting has invalid or missing %1 attribute")
                            .arg(it.key()));
                    return false;
                }
            }

            m["default_data"] = e.attribute("default_data");
            m["placeholder_text"] = e.attribute("placeholder_text");

            MythSetting::SettingType stype =
                parse_setting_type(m["setting_type"]);
            if (MythSetting::kInvalidSettingType == stype)
            {
                LOG(VB_GENERAL, LOG_ERR, LOC +
                    "Setting has invalid setting_type attribute.");
                return false;
            }

            long long range_min = m["range_min"].toLongLong();
            long long range_max = m["range_max"].toLongLong();
            if (range_max < range_min)
            {
                LOG(VB_GENERAL, LOG_ERR, LOC +
                    "Setting has invalid range attributes");
                return false;
            }

            MythSetting *s = new MythSetting(
                m["value"], m["default_data"], stype,
                m["label"], m["help_text"], dtype,
                data_list, display_list, range_min, range_max,
                m["placeholder_text"]);

            settings.push_back(s);
        }
        else if (group.isEmpty())
        {
            LOG(VB_GENERAL, LOG_ERR, LOC +
                QString("Unknown element: %1").arg(e.tagName()));
            return false;
        }
        n = n.nextSibling();
    }

    if (mFoundGroup)
        foundGroup = true;

    return true;
#undef LOC
}