qCDebug(lcPropagateDownload) << _item->_file << propagator()->_activeJobList.count();
- const auto rootPath = [=]() {
- const auto result = propagator()->remotePath();
- if (result.startsWith('/')) {
- return result.mid(1);
- } else {
- return result;
- }
- }();
- const auto remoteFilename = _item->_encryptedFileName.isEmpty() ? _item->_file : _item->_encryptedFileName;
- const auto remotePath = QString(rootPath + remoteFilename);
- const auto remoteParentPath = remotePath.left(remotePath.lastIndexOf('/'));
+ const auto path = _item->_file;
+ const auto slashPosition = path.lastIndexOf('/');
+ const auto parentPath = slashPosition >= 0 ? path.left(slashPosition) : QString();
+
+ SyncJournalFileRecord parentRec;
+ propagator()->_journal->getFileRecord(parentPath, &parentRec);
const auto account = propagator()->account();
if (!account->capabilities().clientSideEncryptionAvailable() ||
- !account->e2e()->isFolderEncrypted(remoteParentPath + '/')) {
+ !parentRec.isValid() ||
+ !parentRec._isE2eEncrypted) {
startAfterIsEncryptedIsChecked();
} else {
- const auto path = _item->_file;
- const auto slashPosition = path.lastIndexOf('/');
- const auto parentPath = slashPosition >= 0 ? path.left(slashPosition) : QString();
-
_downloadEncryptedHelper = new PropagateDownloadEncrypted(propagator(), parentPath, _item, this);
connect(_downloadEncryptedHelper, &PropagateDownloadEncrypted::folderStatusNotEncrypted, [this] {
startAfterIsEncryptedIsChecked();
return;
}
- const auto remoteParentPath = parentRec._e2eMangledName.isEmpty() ? parentPath : parentRec._e2eMangledName;
- const auto absoluteRemoteParentPath = remoteParentPath.isEmpty() ? rootPath : rootPath + remoteParentPath + '/';
const auto account = propagator->account();
if (account->capabilities().clientSideEncryptionAvailable() &&
- account->e2e()->isFolderEncrypted(absoluteRemoteParentPath)) {
+ parentRec.isValid() &&
+ parentRec._isE2eEncrypted) {
_parallelism = WaitForFinished;
}
}
return;
}
- const auto remoteParentPath = parentRec._e2eMangledName.isEmpty() ? parentPath : parentRec._e2eMangledName;
- const auto absoluteRemoteParentPath = remoteParentPath.isEmpty() ? rootPath : rootPath + remoteParentPath + '/';
- const auto account = propagator()->account();
+ const auto hasEncryptedAncestor = [=] {
+ auto pathComponents = parentPath.split('/');
+ while (!pathComponents.isEmpty()) {
+ SyncJournalFileRecord rec;
+ propagator()->_journal->getFileRecord(pathComponents.join('/'), &rec);
+ if (rec.isValid() && rec._isE2eEncrypted) {
+ return true;
+ }
+ pathComponents.removeLast();
+ }
+ return false;
+ }();
- if (!account->capabilities().clientSideEncryptionAvailable() ||
- (!account->e2e()->isFolderEncrypted(absoluteRemoteParentPath) &&
- !account->e2e()->isAnyParentFolderEncrypted(absoluteRemoteParentPath))) {
+ const auto account = propagator()->account();
+ if (!account->capabilities().clientSideEncryptionAvailable() || !hasEncryptedAncestor) {
slotStartMkcolJob();
return;
}
// We should be encrypted as well since our parent is
+ const auto remoteParentPath = parentRec._e2eMangledName.isEmpty() ? parentPath : parentRec._e2eMangledName;
_uploadEncryptedHelper = new PropagateUploadEncrypted(propagator(), remoteParentPath, _item, this);
connect(_uploadEncryptedHelper, &PropagateUploadEncrypted::folderNotEncrypted,
this, &PropagateRemoteMkdir::slotStartMkcolJob);
, _uploadEncryptedHelper(nullptr)
, _uploadingEncrypted(false)
{
- const auto rootPath = [=]() {
- const auto result = propagator->remotePath();
- if (result.startsWith('/')) {
- return result.mid(1);
- } else {
- return result;
- }
- }();
const auto path = _item->_file;
const auto slashPosition = path.lastIndexOf('/');
const auto parentPath = slashPosition >= 0 ? path.left(slashPosition) : QString();
return;
}
- const auto remoteParentPath = parentRec._e2eMangledName.isEmpty() ? parentPath : parentRec._e2eMangledName;
- const auto absoluteRemoteParentPath = remoteParentPath.isEmpty() ? rootPath : rootPath + remoteParentPath + '/';
const auto account = propagator->account();
if (account->capabilities().clientSideEncryptionAvailable() &&
- account->e2e()->isFolderEncrypted(absoluteRemoteParentPath)) {
+ parentRec.isValid() &&
+ parentRec._isE2eEncrypted) {
_parallelism = WaitForFinished;
}
}
void PropagateUploadFileCommon::start()
{
- const auto rootPath = [=]() {
- const auto result = propagator()->remotePath();
- if (result.startsWith('/')) {
- return result.mid(1);
- } else {
- return result;
- }
- }();
const auto path = _item->_file;
const auto slashPosition = path.lastIndexOf('/');
const auto parentPath = slashPosition >= 0 ? path.left(slashPosition) : QString();
return;
}
- const auto remoteParentPath = parentRec._e2eMangledName.isEmpty() ? parentPath : parentRec._e2eMangledName;
- const auto absoluteRemoteParentPath = remoteParentPath.isEmpty() ? rootPath : rootPath + remoteParentPath + '/';
const auto account = propagator()->account();
if (!account->capabilities().clientSideEncryptionAvailable() ||
- !account->e2e()->isFolderEncrypted(absoluteRemoteParentPath)) {
+ !parentRec.isValid() ||
+ !parentRec._isE2eEncrypted) {
setupUnencryptedFile();
return;
}
+ const auto remoteParentPath = parentRec._e2eMangledName.isEmpty() ? parentPath : parentRec._e2eMangledName;
_uploadEncryptedHelper = new PropagateUploadEncrypted(propagator(), remoteParentPath, _item, this);
connect(_uploadEncryptedHelper, &PropagateUploadEncrypted::folderNotEncrypted,
this, &PropagateUploadFileCommon::setupUnencryptedFile);