diff --git a/src/common/davitemsfetchjob.cpp b/src/common/davitemsfetchjob.cpp --- a/src/common/davitemsfetchjob.cpp +++ b/src/common/davitemsfetchjob.cpp @@ -116,13 +116,14 @@ const QDomElement hrefElement = Utils::firstChildElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("href")); const QString href = hrefElement.text(); - QUrl url = davJob->url(); + QUrl url = QUrl::fromUserInput(href); if (href.startsWith(QLatin1Char('/'))) { - // href is only a path, use request url to complete - url.setPath(href, QUrl::TolerantMode); - } else { - // href is a complete url - url = QUrl::fromUserInput(href); + // href is a relative URL (i.e. missing scheme, hostname and so on) + // QUrl would treat this as a file URL be default, avoid that by setting + // empty scheme. + // Note: We don't want to expand this into a full URL (including hostname) + // as some CalDav implementations don't seem to handle that correctly. + url.setScheme(QString()); } auto _url = url; diff --git a/src/common/davitemslistjob.cpp b/src/common/davitemslistjob.cpp --- a/src/common/davitemslistjob.cpp +++ b/src/common/davitemslistjob.cpp @@ -220,14 +220,15 @@ const QDomElement hrefElement = Utils::firstChildElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("href")); const QString href = hrefElement.text(); - QUrl url = davJob->url(); + QUrl url = QUrl::fromUserInput(href); url.setUserInfo(QString()); if (href.startsWith(QLatin1Char('/'))) { - // href is only a path, use request url to complete - url.setPath(href, QUrl::TolerantMode); - } else { - // href is a complete url - url = QUrl::fromUserInput(href); + // href is a relative URL (i.e. missing scheme, hostname and so on) + // QUrl would treat this as a file URL be default, avoid that by setting + // empty scheme. + // Note: We don't want to expand this into a full URL (including hostname) + // as some CalDav implementations don't seem to handle that correctly. + url.setScheme(QString()); } QString itemUrl = url.toDisplayString(); diff --git a/src/protocols/caldavprotocol.cpp b/src/protocols/caldavprotocol.cpp --- a/src/protocols/caldavprotocol.cpp +++ b/src/protocols/caldavprotocol.cpp @@ -271,8 +271,7 @@ for (const QString &url : urls) { QDomElement hrefElement = document.createElementNS(QStringLiteral("DAV:"), QStringLiteral("href")); - const QUrl pathUrl = QUrl::fromUserInput(url); - const QDomText textNode = document.createTextNode(pathUrl.toString()); + const QDomText textNode = document.createTextNode(url); hrefElement.appendChild(textNode); multigetElement.appendChild(hrefElement);