Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/desktop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthieu Gallien <matthieu.gallien@nextcloud.com>2022-10-27 18:29:02 +0300
committerMatthieu Gallien <matthieu_gallien@yahoo.fr>2022-11-07 20:33:13 +0300
commit402d959caea89c461366a232e807dced2c712034 (patch)
treea8cf22a3a27b9dbf3c395a6c60d0cb7f1e396780
parent783cefe3f1efee67a99fc5048d5ce5bc3d284509 (diff)
do not skip folder deletion if BlacklistedError during propagation
in case some propgation actions ends up with a BlacklistedError, we would skip the deletions of local folders (even though they have been deleted from server) let's not skip them but rather keep track of the error status and properly report them Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
-rw-r--r--src/libsync/owncloudpropagator.cpp34
-rw-r--r--src/libsync/owncloudpropagator.h9
2 files changed, 40 insertions, 3 deletions
diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp
index 198f1b73b..cb3734e17 100644
--- a/src/libsync/owncloudpropagator.cpp
+++ b/src/libsync/owncloudpropagator.cpp
@@ -594,7 +594,7 @@ void OwncloudPropagator::start(SyncFileItemVector &&items)
}
foreach (PropagatorJob *it, directoriesToRemove) {
- _rootJob->_dirDeletionJobs.appendJob(it);
+ _rootJob->appendDirDeletionJob(it);
}
connect(_rootJob.data(), &PropagatorJob::finished, this, &OwncloudPropagator::emitFinished);
@@ -1292,6 +1292,11 @@ qint64 PropagateRootDirectory::committedDiskSpace() const
return _subJobs.committedDiskSpace() + _dirDeletionJobs.committedDiskSpace();
}
+void PropagateRootDirectory::appendDirDeletionJob(PropagatorJob *job)
+{
+ _dirDeletionJobs.appendJob(job);
+}
+
bool PropagateRootDirectory::scheduleSelfOrChild()
{
qCInfo(lcRootDirectory()) << "scheduleSelfOrChild" << _state << "pending uploads" << propagator()->delayedTasks().size() << "subjobs state" << _subJobs._state;
@@ -1327,6 +1332,7 @@ void PropagateRootDirectory::slotSubJobsFinished(SyncFileItem::Status status)
if (status != SyncFileItem::Success
&& status != SyncFileItem::Restoration
+ && status != SyncFileItem::BlacklistedError
&& status != SyncFileItem::Conflict) {
if (_state != Finished) {
// Synchronously abort
@@ -1338,11 +1344,37 @@ void PropagateRootDirectory::slotSubJobsFinished(SyncFileItem::Status status)
return;
}
+ if (_errorStatus == SyncFileItem::NoStatus) {
+ switch (status) {
+ case SyncFileItem::NoStatus:
+ case SyncFileItem::FatalError:
+ case SyncFileItem::NormalError:
+ case SyncFileItem::SoftError:
+ case SyncFileItem::Conflict:
+ case SyncFileItem::FileIgnored:
+ case SyncFileItem::FileLocked:
+ case SyncFileItem::Restoration:
+ case SyncFileItem::FileNameInvalid:
+ case SyncFileItem::FileNameClash:
+ case SyncFileItem::DetailError:
+ case SyncFileItem::Success:
+ break;
+ case SyncFileItem::BlacklistedError:
+ _errorStatus = SyncFileItem::BlacklistedError;
+ break;
+ }
+ }
+
propagator()->scheduleNextJob();
}
void PropagateRootDirectory::slotDirDeletionJobsFinished(SyncFileItem::Status status)
{
+ if (_errorStatus != SyncFileItem::NoStatus && status == SyncFileItem::Success) {
+ qCInfo(lcPropagator) << "PropagateRootDirectory::slotDirDeletionJobsFinished" << "reporting previous error" << _errorStatus;
+ status = _errorStatus;
+ }
+
_state = Finished;
qCInfo(lcPropagator) << "PropagateRootDirectory::slotDirDeletionJobsFinished" << "emit finished" << status;
emit finished(status);
diff --git a/src/libsync/owncloudpropagator.h b/src/libsync/owncloudpropagator.h
index 87e695afc..95fe4e743 100644
--- a/src/libsync/owncloudpropagator.h
+++ b/src/libsync/owncloudpropagator.h
@@ -365,8 +365,6 @@ class OWNCLOUDSYNC_EXPORT PropagateRootDirectory : public PropagateDirectory
{
Q_OBJECT
public:
- PropagatorCompositeJob _dirDeletionJobs;
-
explicit PropagateRootDirectory(OwncloudPropagator *propagator);
bool scheduleSelfOrChild() override;
@@ -375,6 +373,9 @@ public:
[[nodiscard]] qint64 committedDiskSpace() const override;
+public slots:
+ void appendDirDeletionJob(PropagatorJob *job);
+
private slots:
void slotSubJobsFinished(SyncFileItem::Status status) override;
void slotDirDeletionJobsFinished(SyncFileItem::Status status);
@@ -382,6 +383,10 @@ private slots:
private:
bool scheduleDelayedJobs();
+
+ PropagatorCompositeJob _dirDeletionJobs;
+
+ SyncFileItem::Status _errorStatus = SyncFileItem::Status::NoStatus;
};
/**