From: Claudio Cambra Date: Thu, 20 Apr 2023 12:50:13 +0000 (+0800) Subject: Properly parse tags in propfind request X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~96^2^2~49^2~12 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=29c17132e90cd273cf6d59384c1fd1029888b70e;p=nextcloud-desktop.git Properly parse tags in propfind request Signed-off-by: Claudio Cambra --- diff --git a/src/libsync/networkjobs.cpp b/src/libsync/networkjobs.cpp index 00e01d36d..d7baf9f28 100644 --- a/src/libsync/networkjobs.cpp +++ b/src/libsync/networkjobs.cpp @@ -61,6 +61,8 @@ Q_LOGGING_CATEGORY(lcSimpleFileJob, "nextcloud.sync.networkjob.simplefilejob", Q constexpr auto notModifiedStatusCode = 304; constexpr auto propfindPropElementTagName = "prop"; +constexpr auto propfindFileTagElementTagName = "tag"; +constexpr auto propfindFileTagsContainerElementTagName = "tags"; RequestEtagJob::RequestEtagJob(AccountPtr account, const QString &path, QObject *parent) : AbstractNetworkJob(account, path, parent) @@ -658,7 +660,31 @@ QVariantMap PropfindJob::processPropfindDomDocument(const QDomDocument &domDocum const auto propChildElement = propChildNode.toElement(); if (!propChildElement.isNull()) { - items.insert(propChildElement.tagName(), propChildElement.text()); + const auto propChildElementTagName = propChildElement.tagName(); + + if (propChildElementTagName == propfindFileTagsContainerElementTagName) { + const auto tagNodes = domDocument.elementsByTagName(propfindFileTagElementTagName); + const auto tagCount = tagNodes.count(); + + auto tagList = QStringList(); + tagList.reserve(tagCount); + + for (auto i = 0; i < tagCount; ++i) { + const auto tagNode = tagNodes.at(i); + const auto tagElement = tagNode.toElement(); + + if (tagElement.isNull()) { + continue; + } + + tagList.append(tagElement.text()); + } + + items.insert(propChildElementTagName, tagList); + + } else { + items.insert(propChildElementTagName, propChildElement.text()); + } } propChildNode = propChildNode.nextSibling();