From b5cc4b41ce3f255004c8fa10007b47be3e7a48ac Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Thu, 20 Apr 2023 19:54:35 +0800 Subject: [PATCH] Extract propfind result data processing into separate method Signed-off-by: Claudio Cambra --- src/libsync/networkjobs.cpp | 61 ++++++++++++++++++++++--------------- src/libsync/networkjobs.h | 2 ++ 2 files changed, 39 insertions(+), 24 deletions(-) diff --git a/src/libsync/networkjobs.cpp b/src/libsync/networkjobs.cpp index 14334ebf5..00e01d36d 100644 --- a/src/libsync/networkjobs.cpp +++ b/src/libsync/networkjobs.cpp @@ -610,7 +610,6 @@ bool PropfindJob::finished() if (http_result_code == 207) { // Parse DAV response - auto items = QVariantMap(); auto domDocument = QDomDocument(); auto errorMsg = QString(); auto errorLine = -1; @@ -619,40 +618,54 @@ bool PropfindJob::finished() if (!domDocument.setContent(reply(), true, &errorMsg, &errorLine, &errorColumn)) { qCWarning(lcPropfindJob) << "XML parser error: " << errorMsg << errorLine << errorColumn; emit finishedWithError(reply()); - return true; + + } else { + const auto parsedItems = processPropfindDomDocument(domDocument); + emit result(parsedItems); } - const auto rootElement = domDocument.documentElement(); - const auto propNodes = rootElement.elementsByTagName(propfindPropElementTagName); + } else { + qCWarning(lcPropfindJob) << "*not* successful, http result code is" << http_result_code + << (http_result_code == 302 ? reply()->header(QNetworkRequest::LocationHeader).toString() : QLatin1String("")); + emit finishedWithError(reply()); + } - for (auto i = 0; i < propNodes.count(); ++i) { - const auto propNode = propNodes.at(i); - const auto propElement = propNode.toElement(); + return true; +} - if (propElement.isNull() || propElement.tagName() != propfindPropElementTagName) { - continue; - } +QVariantMap PropfindJob::processPropfindDomDocument(const QDomDocument &domDocument) +{ + if (!domDocument.hasChildNodes()) { + return {}; + } - auto propChildNode = propElement.firstChild(); + auto items = QVariantMap(); - while (!propChildNode.isNull()) { - const auto propChildElement = propChildNode.toElement(); + const auto rootElement = domDocument.documentElement(); + const auto propNodes = rootElement.elementsByTagName(propfindPropElementTagName); - if (!propChildElement.isNull()) { - items.insert(propChildElement.tagName(), propChildElement.text()); - } + for (auto i = 0; i < propNodes.count(); ++i) { + const auto propNode = propNodes.at(i); + const auto propElement = propNode.toElement(); + + if (propElement.isNull() || propElement.tagName() != propfindPropElementTagName) { + continue; + } + + auto propChildNode = propElement.firstChild(); - propChildNode = propChildNode.nextSibling(); + while (!propChildNode.isNull()) { + const auto propChildElement = propChildNode.toElement(); + + if (!propChildElement.isNull()) { + items.insert(propChildElement.tagName(), propChildElement.text()); } - } - emit result(items); - } else { - qCWarning(lcPropfindJob) << "*not* successful, http result code is" << http_result_code - << (http_result_code == 302 ? reply()->header(QNetworkRequest::LocationHeader).toString() : QLatin1String("")); - emit finishedWithError(reply()); + propChildNode = propChildNode.nextSibling(); + } } - return true; + + return items; } /*********************************************************************************************/ diff --git a/src/libsync/networkjobs.h b/src/libsync/networkjobs.h index 9f1f043b6..c274b4d3f 100644 --- a/src/libsync/networkjobs.h +++ b/src/libsync/networkjobs.h @@ -199,6 +199,8 @@ private slots: bool finished() override; private: + static QVariantMap processPropfindDomDocument(const QDomDocument &domDocument); + QList _properties; }; -- 2.30.2