]> dgit.raspbian.org Git - nextcloud-desktop.git/commitdiff
Run poll timer for enumerator signalling to notify accounts without push notification...
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Mon, 13 Mar 2023 17:02:34 +0000 (18:02 +0100)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 12 May 2023 05:21:33 +0000 (13:21 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/gui/macOS/fileproviderdomainmanager.h
src/gui/macOS/fileproviderdomainmanager_mac.mm

index e96f34707bbebff38c90a3214e71448192887ed6..b175e621aa207bf400a9eb8a504c391426a8ca3a 100644 (file)
@@ -44,9 +44,13 @@ private slots:
     void setupPushNotificationsForAccount(const OCC::Account * const account);
     void signalEnumeratorChanged(const OCC::Account * const account);
 
-    void slotAccountStateChanged(const AccountState * const accountState);
+    void slotAccountStateChanged(const OCC::AccountState * const accountState);
+    void slotEnumeratorSignallingTimerTimeout();
 
 private:
+    // Starts regular enumerator signalling if no push notifications available
+    QTimer _enumeratorSignallingTimer;
+
     explicit FileProviderDomainManager(QObject * const parent = nullptr);
     static FileProviderDomainManager *_instance;
     class Private;
index cf2f470a16fd7dc0f13837a4b7c80ed2dd4b0f42..22c440941dc5a2be398b84f007b4afcd44ed522b 100644 (file)
@@ -12,6 +12,7 @@
  * for more details.
  */
 
+#include "configfile.h"
 #import <FileProvider/FileProvider.h>
 
 #include <QLoggingCategory>
@@ -435,6 +436,13 @@ FileProviderDomainManager::FileProviderDomainManager(QObject * const parent)
 {
     d.reset(new FileProviderDomainManager::Private());
 
+    ConfigFile cfg;
+    std::chrono::milliseconds polltime = cfg.remotePollInterval();
+    _enumeratorSignallingTimer.setInterval(polltime.count());
+    connect(&_enumeratorSignallingTimer, &QTimer::timeout,
+            this, &FileProviderDomainManager::slotEnumeratorSignallingTimerTimeout);
+    _enumeratorSignallingTimer.start();
+
     setupFileProviderDomains();
 
     connect(AccountManager::instance(), &AccountManager::accountAdded,
@@ -596,6 +604,23 @@ void FileProviderDomainManager::slotAccountStateChanged(const AccountState * con
     }
 }
 
+void FileProviderDomainManager::slotEnumeratorSignallingTimerTimeout()
+{
+    qCDebug(lcMacFileProviderDomainManager) << "Enumerator signalling timer timed out, notifying domains for accounts without push notifications";
+
+    const auto registeredDomainIds = d->configuredDomainIds();
+    for (const auto &domainId : registeredDomainIds) {
+        const auto accountUserId = accountIdFromDomainId(domainId);
+        const auto accountState = AccountManager::instance()->accountFromUserId(accountUserId);
+        const auto account = accountState->account();
+
+        if (!accountFilesPushNotificationsReady(account)) {
+            qCDebug(lcMacFileProviderDomainManager) << "Notifying domain for account:" << account->userIdAtHostWithPort();
+            d->signalEnumeratorChanged(account.get());
+        }
+    }
+}
+
 } // namespace Mac
 
 } // namespace OCC