diff options
Diffstat (limited to '')
-rw-r--r-- | xbmc/filesystem/DAVCommon.cpp | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/xbmc/filesystem/DAVCommon.cpp b/xbmc/filesystem/DAVCommon.cpp new file mode 100644 index 0000000..f200609 --- /dev/null +++ b/xbmc/filesystem/DAVCommon.cpp @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2005-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "DAVCommon.h" + +#include "utils/StringUtils.h" +#include "utils/log.h" + +using namespace XFILE; + +/* + * Return true if pElement value is equal value without namespace. + * + * if pElement is <DAV:foo> and value is foo then ValueWithoutNamespace is true + */ +bool CDAVCommon::ValueWithoutNamespace(const TiXmlNode *pNode, const std::string& value) +{ + const TiXmlElement *pElement; + + if (!pNode) + { + return false; + } + + pElement = pNode->ToElement(); + + if (!pElement) + { + return false; + } + + std::vector<std::string> tag = StringUtils::Split(pElement->ValueStr(), ":", 2); + + if (tag.size() == 1 && tag[0] == value) + { + return true; + } + else if (tag.size() == 2 && tag[1] == value) + { + return true; + } + else if (tag.size() > 2) + { + CLog::Log(LOGERROR, "{} - Splitting {} failed, size(): {}, value: {}", __FUNCTION__, + pElement->Value(), (unsigned long int)tag.size(), value); + } + + return false; +} + +/* + * Search for <status> and return its content + */ +std::string CDAVCommon::GetStatusTag(const TiXmlElement *pElement) +{ + const TiXmlElement *pChild; + + for (pChild = pElement->FirstChildElement(); pChild != 0; pChild = pChild->NextSiblingElement()) + { + if (ValueWithoutNamespace(pChild, "status")) + { + return pChild->NoChildren() ? "" : pChild->FirstChild()->ValueStr(); + } + } + + return ""; +} + |