diff --git a/src/gui/macOS/fileproviderxpc.h b/src/gui/macOS/fileproviderxpc.h index 737657cbaf..349dfc3264 100644 --- a/src/gui/macOS/fileproviderxpc.h +++ b/src/gui/macOS/fileproviderxpc.h @@ -54,7 +54,7 @@ private slots: private: QHash _clientCommServices; - QDateTime _lastUnreachableTime; + QHash _unreachableAccountExtensions; }; } // namespace OCC::Mac diff --git a/src/gui/macOS/fileproviderxpc_mac.mm b/src/gui/macOS/fileproviderxpc_mac.mm index b2d1793ce5..4c55cc5d34 100644 --- a/src/gui/macOS/fileproviderxpc_mac.mm +++ b/src/gui/macOS/fileproviderxpc_mac.mm @@ -146,7 +146,8 @@ void FileProviderXPC::createDebugArchiveForExtension(const QString &extensionAcc bool FileProviderXPC::fileProviderExtReachable(const QString &extensionAccountId) { - if (_lastUnreachableTime.isValid() && _lastUnreachableTime.secsTo(QDateTime::currentDateTime()) < ::reachableRetryTimeout) { + const auto lastUnreachableTime = _unreachableAccountExtensions.value(extensionAccountId); + if (lastUnreachableTime.isValid() && lastUnreachableTime.secsTo(QDateTime::currentDateTime()) < ::reachableRetryTimeout) { qCInfo(lcFileProviderXPC) << "File provider extension was unreachable less than a minute ago. " << "Not checking again"; return false; @@ -165,9 +166,11 @@ bool FileProviderXPC::fileProviderExtReachable(const QString &extensionAccountId }]; dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, semaphoreWaitDelta)); - if (!response) { + if (response) { + _unreachableAccountExtensions.remove(extensionAccountId); + } else { qCWarning(lcFileProviderXPC) << "Could not reach file provider extension."; - _lastUnreachableTime = QDateTime::currentDateTime(); + _unreachableAccountExtensions.insert(extensionAccountId, QDateTime::currentDateTime()); } return response; }