mirror of
https://github.com/nextcloud/desktop.git
synced 2025-10-26 11:17:43 +00:00
Merge pull request #6019 from nextcloud/backport/6014/stable-3.10
[stable-3.10] Allow deleting remotely deleted files locally in case of upload errors
This commit is contained in:
commit
43cd9403e7
@ -227,6 +227,7 @@ void DiscoveryPhase::enqueueDirectoryToDelete(const QString &path, ProcessDirect
|
||||
void DiscoveryPhase::startJob(ProcessDirectoryJob *job)
|
||||
{
|
||||
ENFORCE(!_currentRootJob);
|
||||
connect(this, &DiscoveryPhase::itemDiscovered, this, &DiscoveryPhase::slotItemDiscovered, Qt::UniqueConnection);
|
||||
connect(job, &ProcessDirectoryJob::finished, this, [this, job] {
|
||||
ENFORCE(_currentRootJob == sender());
|
||||
_currentRootJob = nullptr;
|
||||
@ -267,6 +268,16 @@ void DiscoveryPhase::scheduleMoreJobs()
|
||||
}
|
||||
}
|
||||
|
||||
void DiscoveryPhase::slotItemDiscovered(const OCC::SyncFileItemPtr &item)
|
||||
{
|
||||
if (item->_instruction == CSYNC_INSTRUCTION_ERROR && item->_direction == SyncFileItem::Up) {
|
||||
_hasUploadErrorItems = true;
|
||||
}
|
||||
if (item->_instruction == CSYNC_INSTRUCTION_REMOVE && item->_direction == SyncFileItem::Down) {
|
||||
_hasDownloadRemovedItems = true;
|
||||
}
|
||||
}
|
||||
|
||||
DiscoverySingleLocalDirectoryJob::DiscoverySingleLocalDirectoryJob(const AccountPtr &account, const QString &localPath, OCC::Vfs *vfs, QObject *parent)
|
||||
: QObject(parent), QRunnable(), _localPath(localPath), _account(account), _vfs(vfs)
|
||||
{
|
||||
|
||||
@ -318,6 +318,9 @@ public:
|
||||
|
||||
QStringList _listExclusiveFiles;
|
||||
|
||||
bool _hasUploadErrorItems = false;
|
||||
bool _hasDownloadRemovedItems = false;
|
||||
|
||||
signals:
|
||||
void fatalError(const QString &errorString, const OCC::ErrorCategory errorCategory);
|
||||
void itemDiscovered(const OCC::SyncFileItemPtr &item);
|
||||
@ -334,6 +337,9 @@ signals:
|
||||
void silentlyExcluded(const QString &folderPath);
|
||||
|
||||
void addErrorToGui(const SyncFileItem::Status status, const QString &errorMessage, const QString &subject, const OCC::ErrorCategory category);
|
||||
|
||||
private slots:
|
||||
void slotItemDiscovered(const OCC::SyncFileItemPtr &item);
|
||||
};
|
||||
|
||||
/// Implementation of DiscoveryPhase::adjustRenamedPath
|
||||
|
||||
@ -510,10 +510,12 @@ void OwncloudPropagator::start(SyncFileItemVector &&items)
|
||||
} while (index > 0);
|
||||
}
|
||||
}
|
||||
items.erase(std::remove_if(items.begin(), items.end(), [&names](auto i) {
|
||||
return !names.contains(QStringRef { &i->_file });
|
||||
}),
|
||||
items.end());
|
||||
items.erase(std::remove_if(items.begin(),
|
||||
items.end(),
|
||||
[&names](auto i) {
|
||||
return !names.contains(QStringRef{&i->_file});
|
||||
}),
|
||||
items.end());
|
||||
}
|
||||
|
||||
QStringList files;
|
||||
|
||||
@ -810,6 +810,15 @@ void SyncEngine::slotDiscoveryFinished()
|
||||
slotUnscheduleFilesDelayedSync();
|
||||
}
|
||||
|
||||
if (_discoveryPhase->_hasDownloadRemovedItems && _discoveryPhase->_hasUploadErrorItems) {
|
||||
for (const auto &item : _syncItems) {
|
||||
if (item->_instruction == CSYNC_INSTRUCTION_ERROR && item->_direction == SyncFileItem::Up) {
|
||||
item->_instruction = CSYNC_INSTRUCTION_IGNORE;
|
||||
}
|
||||
}
|
||||
_anotherSyncNeeded = ImmediateFollowUp;
|
||||
}
|
||||
|
||||
Q_ASSERT(std::is_sorted(_syncItems.begin(), _syncItems.end()));
|
||||
|
||||
qCInfo(lcEngine) << "#### Reconcile (aboutToPropagate) #################################################### " << _stopWatch.addLapTime(QStringLiteral("Reconcile (aboutToPropagate)")) << "ms";
|
||||
|
||||
Loading…
Reference in New Issue
Block a user