Compare commits
3 Commits
563d9c5487
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 8c15113cb0 | |||
| 4253acb72b | |||
| e22630b1bd |
@@ -6,7 +6,7 @@ endif()
|
|||||||
project(PIP)
|
project(PIP)
|
||||||
set(PIP_MAJOR 5)
|
set(PIP_MAJOR 5)
|
||||||
set(PIP_MINOR 5)
|
set(PIP_MINOR 5)
|
||||||
set(PIP_REVISION 3)
|
set(PIP_REVISION 4)
|
||||||
set(PIP_SUFFIX )
|
set(PIP_SUFFIX )
|
||||||
set(PIP_COMPANY SHS)
|
set(PIP_COMPANY SHS)
|
||||||
set(PIP_DOMAIN org.SHS)
|
set(PIP_DOMAIN org.SHS)
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ bool PIHTTPClient::init() {
|
|||||||
if (is_cancel) return false;
|
if (is_cancel) return false;
|
||||||
CurlThreadPool::instance();
|
CurlThreadPool::instance();
|
||||||
if (!PRIVATE->init()) return false;
|
if (!PRIVATE->init()) return false;
|
||||||
auto ait = request.arguments().makeIterator();
|
auto ait = request.queryArguments().makeIterator();
|
||||||
while (ait.next()) {
|
while (ait.next()) {
|
||||||
if (!url.contains('?'))
|
if (!url.contains('?'))
|
||||||
url.append('?');
|
url.append('?');
|
||||||
|
|||||||
@@ -400,9 +400,9 @@ PIJSON PIJSON::parseValue(PIString & s) {
|
|||||||
s.trim();
|
s.trim();
|
||||||
if (s.isEmpty()) return ret;
|
if (s.isEmpty()) return ret;
|
||||||
if (s[0] == '{') {
|
if (s[0] == '{') {
|
||||||
ret = parseObject(s.takeRange('{', '}'));
|
ret = parseObject(s.takeRange('{', '}').trim());
|
||||||
} else if (s[0] == '[') {
|
} else if (s[0] == '[') {
|
||||||
ret = parseArray(s.takeRange('[', ']'));
|
ret = parseArray(s.takeRange('[', ']').trim());
|
||||||
} else {
|
} else {
|
||||||
s.trim();
|
s.trim();
|
||||||
if (s.startsWith('"')) {
|
if (s.startsWith('"')) {
|
||||||
|
|||||||
@@ -42,6 +42,14 @@ PIString mask(const PIString & str) {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PIString overrideFile(PIString path) {
|
||||||
|
if (path.isEmpty()) return {};
|
||||||
|
PIFile::FileInfo fi(path);
|
||||||
|
auto ext = fi.extension();
|
||||||
|
path.insert(path.size_s() - ext.size_s() - (ext.isEmpty() ? 0 : 1), ".override");
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
PIValueTree PIValueTreeConversions::fromPropertyStorage(const PIPropertyStorage & ps) {
|
PIValueTree PIValueTreeConversions::fromPropertyStorage(const PIPropertyStorage & ps) {
|
||||||
PIValueTree ret;
|
PIValueTree ret;
|
||||||
@@ -292,7 +300,11 @@ PIString toTextTree(const PIValueTree & root, PIString prefix, PIValueTreeConver
|
|||||||
ret += "\n[" + prefix + "]\n";
|
ret += "\n[" + prefix + "]\n";
|
||||||
if (root.isArray() && options[PIValueTreeConversions::WithAttributes]) ret += toTextTreeAttributes(root, "", options);
|
if (root.isArray() && options[PIValueTreeConversions::WithAttributes]) ret += toTextTreeAttributes(root, "", options);
|
||||||
for (const auto & c: root.children()) {
|
for (const auto & c: root.children()) {
|
||||||
PIString cp = prefix;
|
if (c.hasChildren()) continue;
|
||||||
|
ret += toTextTree(c, prefix, options);
|
||||||
|
}
|
||||||
|
for (const auto & c: root.children()) {
|
||||||
|
if (!c.hasChildren()) continue;
|
||||||
ret += toTextTree(c, prefix, options);
|
ret += toTextTree(c, prefix, options);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -315,9 +327,13 @@ PIString toTextTree(const PIValueTree & root, PIString prefix, PIValueTreeConver
|
|||||||
PIString PIValueTreeConversions::toText(const PIValueTree & root, Options options) {
|
PIString PIValueTreeConversions::toText(const PIValueTree & root, Options options) {
|
||||||
PIString ret;
|
PIString ret;
|
||||||
for (const auto & c: root.children()) {
|
for (const auto & c: root.children()) {
|
||||||
ret += toTextTree(c, PIString(), options);
|
if (c.hasChildren()) continue;
|
||||||
|
ret += toTextTree(c, {}, options);
|
||||||
|
}
|
||||||
|
for (const auto & c: root.children()) {
|
||||||
|
if (!c.hasChildren()) continue;
|
||||||
|
ret += toTextTree(c, {}, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -329,13 +345,26 @@ PIValueTree PIValueTreeConversions::fromText(const PIString & str) {
|
|||||||
|
|
||||||
|
|
||||||
PIValueTree PIValueTreeConversions::fromJSONFile(const PIString & path) {
|
PIValueTree PIValueTreeConversions::fromJSONFile(const PIString & path) {
|
||||||
return PIValueTreeConversions::fromJSON(PIJSON::fromJSON(PIString::fromUTF8(PIFile::readAll(path))));
|
auto ret = PIValueTreeConversions::fromJSON(PIJSON::fromJSON(PIString::fromUTF8(PIFile::readAll(path))));
|
||||||
|
auto ofp = overrideFile(path);
|
||||||
|
if (PIFile::isExists(ofp)) {
|
||||||
|
auto override_vt = PIValueTreeConversions::fromJSON(PIJSON::fromJSON(PIString::fromUTF8(PIFile::readAll(ofp))));
|
||||||
|
ret.merge(override_vt);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PIValueTree PIValueTreeConversions::fromTextFile(const PIString & path) {
|
PIValueTree PIValueTreeConversions::fromTextFile(const PIString & path) {
|
||||||
PIFile f(path, PIIODevice::ReadOnly);
|
PIFile f(path, PIIODevice::ReadOnly);
|
||||||
return PIValueTreeConversions::fromText(&f);
|
auto ret = PIValueTreeConversions::fromText(&f);
|
||||||
|
auto ofp = overrideFile(path);
|
||||||
|
if (PIFile::isExists(ofp)) {
|
||||||
|
PIFile of(ofp, PIIODevice::ReadOnly);
|
||||||
|
auto override_vt = PIValueTreeConversions::fromText(&of);
|
||||||
|
ret.merge(override_vt);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -124,6 +124,23 @@ void PIValueTree::applyValues(const PIValueTree & root, bool recursive) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PIValueTree::merge(const PIValueTree & root) {
|
||||||
|
if (_is_null) return;
|
||||||
|
for (const auto & c: root._children) {
|
||||||
|
bool found = false;
|
||||||
|
for (auto & i: _children) {
|
||||||
|
if (c.name() == i.name()) {
|
||||||
|
if (c.isValid()) i._value = c._value;
|
||||||
|
i.merge(c);
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) _children << c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
PIVariant PIValueTree::childValue(const PIString & child_name, const PIVariant & default_value, bool * exists) const {
|
PIVariant PIValueTree::childValue(const PIString & child_name, const PIVariant & default_value, bool * exists) const {
|
||||||
const PIValueTree & node = child(child_name);
|
const PIValueTree & node = child(child_name);
|
||||||
if (node.isNull()) {
|
if (node.isNull()) {
|
||||||
|
|||||||
@@ -170,6 +170,13 @@ public:
|
|||||||
//! \param recursive Если установлено в true, то значения будут применяться рекурсивно к дочерним узлам.
|
//! \param recursive Если установлено в true, то значения будут применяться рекурсивно к дочерним узлам.
|
||||||
void applyValues(const PIValueTree & root, bool recursive = true);
|
void applyValues(const PIValueTree & root, bool recursive = true);
|
||||||
|
|
||||||
|
//! \~\brief
|
||||||
|
//! \~english Set or add the values of a given %PIValueTree object to the current %PIValueTree object.
|
||||||
|
//! \param root The %PIValueTree object whose values are to be merged.
|
||||||
|
//! \~russian Устанавливает или добавляет значения данного объекта %PIValueTree к текущему объекту %PIValueTree.
|
||||||
|
//! \param root Объект %PIValueTree, значения которого должны быть добавлены.
|
||||||
|
void merge(const PIValueTree & root);
|
||||||
|
|
||||||
//! \~\brief
|
//! \~\brief
|
||||||
//! \~english Returns the children of the current %PIValueTree object.
|
//! \~english Returns the children of the current %PIValueTree object.
|
||||||
//! \~russian Возвращает дочерние элементы текущего объекта %PIValueTree.
|
//! \~russian Возвращает дочерние элементы текущего объекта %PIValueTree.
|
||||||
|
|||||||
Reference in New Issue
Block a user