Improve initialisation of C++ FileProvider class
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Wed, 15 Mar 2023 14:54:10 +0000 (15:54 +0100)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 12 May 2023 05:28:46 +0000 (13:28 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/gui/application.cpp
src/gui/macOS/fileprovider.h
src/gui/macOS/fileprovider_mac.mm

index 4d6b25c629aa6fbde56f7bf7c2660fc849582ae6..57c5f93495af9b16735790e5be8b45cd77cd840a 100644 (file)
@@ -403,7 +403,7 @@ Application::Application(int &argc, char **argv)
     }
 
 #ifdef Q_OS_MACOS
-    _fileProvider.reset(Mac::FileProvider::instance());
+    _fileProvider.reset(new Mac::FileProvider);
 #endif
 
     FolderMan::instance()->setSyncEnabled(true);
index c974afb765b2c470f0e6a05ee457fb170afa4eca..d45ba987d2a5b96d7ed11816326c090f712b4f37 100644 (file)
@@ -21,6 +21,8 @@
 
 namespace OCC {
 
+class Application;
+
 namespace Mac {
 
 // NOTE: For the file provider extension to work, the app bundle will
@@ -32,14 +34,18 @@ class FileProvider : public QObject
 
 public:
     static FileProvider *instance();
-    ~FileProvider() = default;
+    ~FileProvider() override;
 
     static bool fileProviderAvailable();
 
 private:
-    explicit FileProvider(QObject * const parent = nullptr);
     std::unique_ptr<FileProviderDomainManager> _domainManager;
     std::unique_ptr<FileProviderSocketServer> _socketServer;
+
+    static FileProvider *_instance;
+    explicit FileProvider(QObject * const parent = nullptr);
+
+    friend class OCC::Application;
 };
 
 } // namespace Mac
index 879a39098a4f89274707c3380dea5770bc13ae18..9cb5b739bd5e335b48d149c814b141b84b2856d5 100644 (file)
@@ -24,11 +24,13 @@ Q_LOGGING_CATEGORY(lcMacFileProvider, "nextcloud.gui.macfileprovider", QtInfoMsg
 
 namespace Mac {
 
-static FileProvider *_instance = nullptr;
+FileProvider* FileProvider::_instance = nullptr;
 
 FileProvider::FileProvider(QObject * const parent)
     : QObject(parent)
 {
+    Q_ASSERT(!_instance);
+
     if (!fileProviderAvailable()) {
         qCDebug(lcMacFileProvider) << "File provider system is not available on this version of macOS.";
         return;
@@ -61,6 +63,11 @@ FileProvider *FileProvider::instance()
     return _instance;
 }
 
+FileProvider::~FileProvider()
+{
+    _instance = nullptr;
+}
+
 bool FileProvider::fileProviderAvailable()
 {
     if (@available(macOS 11.0, *)) {