]> dgit.raspbian.org Git - nextcloud-desktop.git/commitdiff
Make fileprovidersocketmanager keep track of connected sockets
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Thu, 22 Dec 2022 12:30:36 +0000 (13:30 +0100)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 12 May 2023 05:21:07 +0000 (13:21 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/gui/macOS/fileprovidersocketmanager.cpp
src/gui/macOS/fileprovidersocketmanager.h

index 0a571dbb6502dc65c837f8dea5e6b3944de2611b..03257a467c0c015b4b6c98cf3cbcfc5b59a3a3c2 100644 (file)
@@ -16,6 +16,8 @@
 
 #include <QLocalSocket>
 
+#include "fileprovidersocketcontroller.h"
+
 namespace OCC
 {
 
@@ -61,6 +63,26 @@ void FileProviderSocketManager::slotNewConnection()
         return;
     }
 
+    connect(socket, &QLocalSocket::disconnected,
+            this, &FileProviderSocketManager::slotOnDisconnected);
+    connect(socket, &QLocalSocket::destroyed,
+            this, &FileProviderSocketManager::slotSocketDestroyed);
+
+    const FileProviderSocketControllerPtr controller(new FileProviderSocketController(socket));
+    _socketControllers.insert(socket, controller);
+}
+
+void FileProviderSocketManager::slotOnDisconnected()
+{
+    const auto socket = qobject_cast<QLocalSocket *>(sender());
+    Q_ASSERT(socket);
+    socket->deleteLater();
+}
+
+void FileProviderSocketManager::slotSocketDestroyed(QObject *object)
+{
+    const auto socket = qobject_cast<QLocalSocket *>(object);
+    _socketControllers.remove(socket);
 }
 
 } // namespace Mac
index df6f195069b6a018bc8e7edc21e263b24f7f112d..12f3f2d4dd4b38ecaa9ea60baf9b7d052e162c30 100644 (file)
@@ -23,6 +23,9 @@ namespace OCC
 
 namespace Mac {
 
+class FileProviderSocketController;
+using FileProviderSocketControllerPtr = QSharedPointer<FileProviderSocketController>;
+
 #ifdef Q_OS_MACOS
 QString fileProviderSocketPath();
 #endif
@@ -37,10 +40,13 @@ public:
 private slots:
     void startListening();
     void slotNewConnection();
+    void slotOnDisconnected();
+    void slotSocketDestroyed(QObject *object);
 
 private:
     QString _socketPath;
     QLocalServer _socketServer;
+    QHash<QLocalSocket*, FileProviderSocketControllerPtr> _socketControllers;
 };
 
 } // namespace Mac