void RequestEtagJob::start() { QNetworkRequest req; if (_account && _account->rootEtagChangesNotOnlySubFolderEtags()) { // Fixed from 8.1 https://github.com/owncloud/client/issues/3730 req.setRawHeader("Depth", "0"); } else { // Let's always request all entries inside a directory. There are/were bugs in the server // where a root or root-folder ETag is not updated when its contents change. We work around // this by concatenating the ETags of the root and its contents. req.setRawHeader("Depth", "1"); // See https://github.com/owncloud/core/issues/5255 and others } QByteArray xml("<?xml version=\"1.0\" ?>\n" "<d:propfind xmlns:d=\"DAV:\">\n" " <d:prop>\n" " <d:getetag/>\n" " </d:prop>\n" "</d:propfind>\n"); QBuffer *buf = new QBuffer(this); buf->setData(xml); buf->open(QIODevice::ReadOnly); // assumes ownership sendRequest("PROPFIND", makeDavUrl(path()), req, buf); if (reply()->error() != QNetworkReply::NoError) { qCWarning(lcEtagJob) << "request network error: " << reply()->errorString(); } AbstractNetworkJob::start(); }
void PropfindJob::start() { QList<QByteArray> properties = _properties; if (properties.isEmpty()) { qCWarning(lcLsColJob) << "Propfind with no properties!"; } QNetworkRequest req; // Always have a higher priority than the propagator because we use this from the UI // and really want this to be done first (no matter what internal scheduling QNAM uses). // Also possibly useful for avoiding false timeouts. req.setPriority(QNetworkRequest::HighPriority); req.setRawHeader("Depth", "0"); QByteArray propStr; foreach (const QByteArray &prop, properties) { if (prop.contains(':')) { int colIdx = prop.lastIndexOf(":"); propStr += " <" + prop.mid(colIdx + 1) + " xmlns=\"" + prop.left(colIdx) + "\" />\n"; } else { propStr += " <d:" + prop + " />\n"; } } QByteArray xml = "<?xml version=\"1.0\" ?>\n" "<d:propfind xmlns:d=\"DAV:\">\n" " <d:prop>\n" + propStr + " </d:prop>\n" "</d:propfind>\n"; QBuffer *buf = new QBuffer(this); buf->setData(xml); buf->open(QIODevice::ReadOnly); sendRequest("PROPFIND", makeDavUrl(path()), req, buf); AbstractNetworkJob::start(); }
void MkColJob::start() { // add 'Content-Length: 0' header (see https://github.com/owncloud/client/issues/3256) QNetworkRequest req; req.setRawHeader("Content-Length", "0"); for (auto it = _extraHeaders.constBegin(); it != _extraHeaders.constEnd(); ++it) { req.setRawHeader(it.key(), it.value()); } // assumes ownership if (_url.isValid()) { sendRequest("MKCOL", _url, req); } else { sendRequest("MKCOL", makeDavUrl(path()), req); } AbstractNetworkJob::start(); }
void MoveJob::start() { QNetworkRequest req; req.setRawHeader("Destination", QUrl::toPercentEncoding(_destination, "/")); for (auto it = _extraHeaders.constBegin(); it != _extraHeaders.constEnd(); ++it) { req.setRawHeader(it.key(), it.value()); } if (_url.isValid()) { sendRequest("MOVE", _url, req); } else { sendRequest("MOVE", makeDavUrl(path()), req); } if (reply()->error() != QNetworkReply::NoError) { qCWarning(lcPropagateRemoteMove) << " Network error: " << reply()->errorString(); } AbstractNetworkJob::start(); }
void ProppatchJob::start() { if (_properties.isEmpty()) { qCWarning(lcProppatchJob) << "Proppatch with no properties!"; } QNetworkRequest req; QByteArray propStr; QMapIterator<QByteArray, QByteArray> it(_properties); while (it.hasNext()) { it.next(); QByteArray keyName = it.key(); QByteArray keyNs; if (keyName.contains(':')) { int colIdx = keyName.lastIndexOf(":"); keyNs = keyName.left(colIdx); keyName = keyName.mid(colIdx + 1); } propStr += " <" + keyName; if (!keyNs.isEmpty()) { propStr += " xmlns=\"" + keyNs + "\" "; } propStr += ">"; propStr += it.value(); propStr += "</" + keyName + ">\n"; } QByteArray xml = "<?xml version=\"1.0\" ?>\n" "<d:propertyupdate xmlns:d=\"DAV:\">\n" " <d:set><d:prop>\n" + propStr + " </d:prop></d:set>\n" "</d:propertyupdate>\n"; QBuffer *buf = new QBuffer(this); buf->setData(xml); buf->open(QIODevice::ReadOnly); sendRequest("PROPPATCH", makeDavUrl(path()), req, buf); AbstractNetworkJob::start(); }
void LsColJob::start() { QList<QByteArray> properties = _properties; if (properties.isEmpty()) { qCWarning(lcLsColJob) << "Propfind with no properties!"; } QByteArray propStr; foreach (const QByteArray &prop, properties) { if (prop.contains(':')) { int colIdx = prop.lastIndexOf(":"); auto ns = prop.left(colIdx); if (ns == "http://owncloud.org/ns") { propStr += " <oc:" + prop.mid(colIdx + 1) + " />\n"; } else { propStr += " <" + prop.mid(colIdx + 1) + " xmlns=\"" + ns + "\" />\n"; } } else { propStr += " <d:" + prop + " />\n"; } } QNetworkRequest req; req.setRawHeader("Depth", "1"); QByteArray xml("<?xml version=\"1.0\" ?>\n" "<d:propfind xmlns:d=\"DAV:\" xmlns:oc=\"http://owncloud.org/ns\">\n" " <d:prop>\n" + propStr + " </d:prop>\n" "</d:propfind>\n"); QBuffer *buf = new QBuffer(this); buf->setData(xml); buf->open(QIODevice::ReadOnly); if (_url.isValid()) { sendRequest("PROPFIND", _url, req, buf); } else { sendRequest("PROPFIND", makeDavUrl(path()), req, buf); } AbstractNetworkJob::start(); }
void RequestEtagJob::start() { QNetworkRequest req; req.setRawHeader("Depth", "0"); QByteArray xml("<?xml version=\"1.0\" ?>\n" "<d:propfind xmlns:d=\"DAV:\">\n" " <d:prop>\n" " <d:getetag/>\n" " </d:prop>\n" "</d:propfind>\n"); QBuffer *buf = new QBuffer(this); buf->setData(xml); buf->open(QIODevice::ReadOnly); // assumes ownership sendRequest("PROPFIND", makeDavUrl(path()), req, buf); if (reply()->error() != QNetworkReply::NoError) { qCWarning(lcEtagJob) << "request network error: " << reply()->errorString(); } AbstractNetworkJob::start(); }