void fetchPrivateLinkUrl(AccountPtr account, const QString &remotePath, const QByteArray &numericFileId, QObject *target, std::function<void(const QString &url)> targetFun) { QString oldUrl; if (!numericFileId.isEmpty()) oldUrl = account->deprecatedPrivateLinkUrl(numericFileId).toString(QUrl::FullyEncoded); // Retrieve the new link by PROPFIND PropfindJob *job = new PropfindJob(account, remotePath, target); job->setProperties( QList<QByteArray>() << "http://owncloud.org/ns:fileid" // numeric file id for fallback private link generation << "http://owncloud.org/ns:privatelink"); job->setTimeout(10 * 1000); QObject::connect(job, &PropfindJob::result, target, [=](const QVariantMap &result) { auto privateLinkUrl = result["privatelink"].toString(); auto numericFileId = result["fileid"].toByteArray(); if (!privateLinkUrl.isEmpty()) { targetFun(privateLinkUrl); } else if (!numericFileId.isEmpty()) { targetFun(account->deprecatedPrivateLinkUrl(numericFileId).toString(QUrl::FullyEncoded)); } else { targetFun(oldUrl); } }); QObject::connect(job, &PropfindJob::finishedWithError, target, [=](QNetworkReply *) { targetFun(oldUrl); }); job->start(); }
void ConnectionValidator::checkAuthentication() { AbstractCredentials *creds = _account->credentials(); if (!creds->ready()) { // The user canceled reportResult(UserCanceledCredentials); } // simply GET the webdav root, will fail if credentials are wrong. // continue in slotAuthCheck here :-) qDebug() << "# Check whether authenticated propfind works."; PropfindJob *job = new PropfindJob(_account, "/", this); job->setTimeout(timeoutToUseMsec); job->setProperties(QList<QByteArray>() << "getlastmodified"); connect(job, SIGNAL(result(QVariantMap)), SLOT(slotAuthSuccess())); connect(job, SIGNAL(finishedWithError(QNetworkReply*)), SLOT(slotAuthFailed(QNetworkReply*))); job->start(); }