}
}
+bool PropagateItemJob::hasEncryptedAncestor() const
+{
+ if (!propagator()->account()->capabilities().clientSideEncryptionAvailable()) {
+ return false;
+ }
+
+ const auto path = _item->_file;
+ const auto slashPosition = path.lastIndexOf('/');
+ const auto parentPath = slashPosition >= 0 ? path.left(slashPosition) : QString();
+
+ 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;
+}
+
// ================================================================================
PropagateItemJob *OwncloudPropagator::createJob(const SyncFileItemPtr &item)
, _uploadEncryptedHelper(nullptr)
, _parallelism(FullParallelism)
{
- 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 account = propagator->account();
-
- if (account->capabilities().clientSideEncryptionAvailable() &&
- parentRec.isValid() &&
- parentRec._isE2eEncrypted) {
+ if (hasEncryptedAncestor()) {
_parallelism = WaitForFinished;
}
}
void PropagateRemoteMkdir::slotMkdir()
{
- 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 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;
- }();
-
- const auto account = propagator()->account();
- if (!account->capabilities().clientSideEncryptionAvailable() || !hasEncryptedAncestor) {
+ if (!hasEncryptedAncestor()) {
slotStartMkcolJob();
return;
}