Do not initialise file provider components if system does not support file provider
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Wed, 15 Mar 2023 09:26:10 +0000 (10:26 +0100)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 12 May 2023 05:21:36 +0000 (13:21 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/gui/macOS/fileprovider.h
src/gui/macOS/fileprovider_mac.mm
src/gui/macOS/fileproviderdomainmanager.h
src/gui/macOS/fileproviderdomainmanager_mac.mm

index faef58c372b2fa5d2a10b8fc6b975f99372218c4..c974afb765b2c470f0e6a05ee457fb170afa4eca 100644 (file)
@@ -16,6 +16,7 @@
 
 #include <QObject>
 
+#include "fileproviderdomainmanager.h"
 #include "fileprovidersocketserver.h"
 
 namespace OCC {
@@ -37,7 +38,8 @@ public:
 
 private:
     explicit FileProvider(QObject * const parent = nullptr);
-    FileProviderSocketServer _socketServer;
+    std::unique_ptr<FileProviderDomainManager> _domainManager;
+    std::unique_ptr<FileProviderSocketServer> _socketServer;
 };
 
 } // namespace Mac
index 8b5df2ec5e37981d3546a025d45dc9b23828d913..879a39098a4f89274707c3380dea5770bc13ae18 100644 (file)
@@ -17,7 +17,6 @@
 #include <QLoggingCategory>
 
 #include "fileprovider.h"
-#include "fileproviderdomainmanager.h"
 
 namespace OCC {
 
@@ -30,14 +29,32 @@ static FileProvider *_instance = nullptr;
 FileProvider::FileProvider(QObject * const parent)
     : QObject(parent)
 {
-    const auto domainManager = FileProviderDomainManager::instance();
-    if (domainManager) {
+    if (!fileProviderAvailable()) {
+        qCDebug(lcMacFileProvider) << "File provider system is not available on this version of macOS.";
+        return;
+    }
+
+    qCDebug(lcMacFileProvider) << "Initialising file provider domain manager.";
+    _domainManager = std::make_unique<FileProviderDomainManager>(new FileProviderDomainManager(this));
+
+    if (_domainManager) {
         qCDebug(lcMacFileProvider()) << "Initialized file provider domain manager";
     }
+
+    qCDebug(lcMacFileProvider) << "Initialising file provider socket server.";
+    _socketServer = std::make_unique<FileProviderSocketServer>(new FileProviderSocketServer(this));
+
+    if (_socketServer) {
+        qCDebug(lcMacFileProvider) << "Initialised file provider socket server.";
+    }
 }
 
 FileProvider *FileProvider::instance()
 {
+    if (!fileProviderAvailable()) {
+        return nullptr;
+    }
+
     if (!_instance) {
         _instance = new FileProvider();
     }
index b175e621aa207bf400a9eb8a504c391426a8ca3a..a8787c7ccdc62c3050007165aa5eb77cee7c5f0b 100644 (file)
@@ -29,7 +29,7 @@ class FileProviderDomainManager : public QObject
     Q_OBJECT
 
 public:
-    static FileProviderDomainManager *instance();
+    explicit FileProviderDomainManager(QObject * const parent = nullptr);
     ~FileProviderDomainManager() override;
 
 private slots:
@@ -51,8 +51,6 @@ private:
     // Starts regular enumerator signalling if no push notifications available
     QTimer _enumeratorSignallingTimer;
 
-    explicit FileProviderDomainManager(QObject * const parent = nullptr);
-    static FileProviderDomainManager *_instance;
     class Private;
     std::unique_ptr<Private> d;
 };
index 22c440941dc5a2be398b84f007b4afcd44ed522b..aea1776b3fb3cc1b3cfb375ac5f1a1be286ad840 100644 (file)
@@ -81,8 +81,6 @@ Q_LOGGING_CATEGORY(lcMacFileProviderDomainManager, "nextcloud.gui.macfileprovide
 
 namespace Mac {
 
-FileProviderDomainManager *FileProviderDomainManager::_instance = nullptr;
-
 class FileProviderDomainManager::Private {
 
   public:
@@ -460,14 +458,6 @@ FileProviderDomainManager::FileProviderDomainManager(QObject * const parent)
     });
 }
 
-FileProviderDomainManager *FileProviderDomainManager::instance()
-{
-    if (!_instance) {
-        _instance = new FileProviderDomainManager();
-    }
-    return _instance;
-}
-
 FileProviderDomainManager::~FileProviderDomainManager() = default;
 
 void FileProviderDomainManager::setupFileProviderDomains()