From: Hannah von Reth Date: Mon, 19 Oct 2020 14:27:45 +0000 (+0200) Subject: Ensure the callback is triggered X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~21^2~468^2~21 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=440b31986ab10e2b23a299866ce7905789ece32c;p=nextcloud-desktop.git Ensure the callback is triggered --- diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index b4c87964f..e058e2693 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -732,7 +732,15 @@ void SyncEngine::slotDiscoveryFinished() side += it->_direction == SyncFileItem::Down ? 1 : -1; } } - emit aboutToRemoveAllFiles(side >= 0 ? SyncFileItem::Down : SyncFileItem::Up, [this, finish](bool cancel){ + + QPointer guard = new QObject(); + auto callback = [this, finish, guard](bool cancel) -> void { + // use a guard to ensure its only called once... + if (!guard) + { + return; + } + guard->deleteLater(); if (cancel) { qCInfo(lcEngine) << "User aborted sync"; finalize(false); @@ -740,7 +748,8 @@ void SyncEngine::slotDiscoveryFinished() } else { finish(); } - }); + }; + emit aboutToRemoveAllFiles(side >= 0 ? SyncFileItem::Down : SyncFileItem::Up, callback); return; } finish(); diff --git a/test/syncenginetestutils.h b/test/syncenginetestutils.h index 79ce808b7..b19f2d0f5 100644 --- a/test/syncenginetestutils.h +++ b/test/syncenginetestutils.h @@ -23,6 +23,7 @@ #include #include +#include /* * TODO: In theory we should use QVERIFY instead of Q_ASSERT for testing, but this @@ -991,6 +992,13 @@ public: // Ignore temporary files from the download. (This is in the default exclude list, but we don't load it) _syncEngine->excludedFiles().addManualExclude("]*.~*"); + // handle aboutToRemoveAllFiles with a timeout in case our test does not handle it + QObject::connect(_syncEngine.get(), &OCC::SyncEngine::aboutToRemoveAllFiles, _syncEngine.get(), [this](OCC::SyncFileItem::Direction, std::function callback){ + QTimer::singleShot(1 * 1000, _syncEngine.get(), [callback]{ + callback(false); + }); + }); + // Ensure we have a valid VfsOff instance "running" switchToVfs(_syncEngine->syncOptions()._vfs);