Greatly simplify TransferManager API and implementation
authorManuel Nickschas <sputnick@quassel-irc.org>
Mon, 6 Jun 2016 21:23:10 +0000 (23:23 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Mon, 6 Jun 2016 21:25:07 +0000 (23:25 +0200)
This commit does away with the overly complex overloaded signals
from the TransferManager family of classes, and replaces unneeded
code with using declarations.

src/client/clienttransfermanager.cpp
src/client/clienttransfermanager.h
src/common/transfermanager.cpp
src/common/transfermanager.h
src/core/coretransfermanager.cpp
src/core/coretransfermanager.h
src/qtui/mainwin.cpp
src/qtui/mainwin.h

index 29342fc..29bdd56 100644 (file)
 #include "client.h"
 #include "clienttransfer.h"
 
-
 INIT_SYNCABLE_OBJECT(ClientTransferManager)
-ClientTransferManager::ClientTransferManager(QObject *parent)
-    : TransferManager(parent)
-{
-    connect(this, SIGNAL(transferAdded(const Transfer*)), SLOT(onTransferAdded(const Transfer*)));
-}
-
 
 void ClientTransferManager::onCoreTransferAdded(const QUuid &uuid)
 {
@@ -39,7 +32,7 @@ void ClientTransferManager::onCoreTransferAdded(const QUuid &uuid)
         return;
     }
 
-    ClientTransfer *transfer = new ClientTransfer(uuid, this);
+    auto transfer = new ClientTransfer(uuid, this);
     connect(transfer, SIGNAL(initDone()), SLOT(onTransferInitDone())); // we only want to add initialized transfers
     Client::signalProxy()->synchronize(transfer);
 }
@@ -51,15 +44,3 @@ void ClientTransferManager::onTransferInitDone()
     Q_ASSERT(transfer);
     addTransfer(transfer);
 }
-
-
-void ClientTransferManager::onTransferAdded(const Transfer *transfer)
-{
-    const ClientTransfer *t = qobject_cast<const ClientTransfer *>(transfer);
-    if (!t) {
-        qWarning() << "Invalid Transfer added to ClientTransferManager!";
-        return;
-    }
-
-    emit transferAdded(t);
-}
index f837694..7842f05 100644 (file)
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
  ***************************************************************************/
 
-#ifndef CLIENTTRANSFERMANAGER_H
-#define CLIENTTRANSFERMANAGER_H
-
-#include "transfermanager.h"
+#pragma once
 
 #include <QUuid>
 
-class ClientTransfer;
+#include "transfermanager.h"
 
 class ClientTransferManager : public TransferManager
 {
@@ -33,18 +30,9 @@ class ClientTransferManager : public TransferManager
     SYNCABLE_OBJECT
 
 public:
-    ClientTransferManager(QObject *parent = 0);
-
-public slots:
-    void onCoreTransferAdded(const QUuid &uuid);
-    void onTransferInitDone();
-
-signals:
-    void transferAdded(const ClientTransfer *transfer);
+    using TransferManager::TransferManager;
 
 private slots:
-    void onTransferAdded(const Transfer *transfer);
-
+    void onCoreTransferAdded(const QUuid &uuid) override;
+    void onTransferInitDone();
 };
-
-#endif
index c90adfb..285b3bf 100644 (file)
 
 
 INIT_SYNCABLE_OBJECT(TransferManager)
-TransferManager::TransferManager(QObject *parent)
-    : SyncableObject(parent)
-{
-
-}
-
 
 Transfer *TransferManager::transfer(const QUuid &uuid) const
 {
@@ -55,5 +49,17 @@ void TransferManager::addTransfer(Transfer *transfer)
     _transfers[uuid] = transfer;
 
     SYNC_OTHER(onCoreTransferAdded, ARG(uuid));
-    emit transferAdded(transfer);
+    emit transferAdded(uuid);
+}
+
+
+void TransferManager::removeTransfer(const QUuid& uuid)
+{
+    if (!_transfers.contains(uuid)) {
+        qWarning() << "Can not find transfer" << uuid << "to remove!";
+        return;
+    }
+    emit transferRemoved(uuid);
+    auto transfer = _transfers.take(uuid);
+    transfer->deleteLater();
 }
index 72f9fb9..5dc17fe 100644 (file)
@@ -18,8 +18,7 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
  ***************************************************************************/
 
-#ifndef TRANSFERMANAGER_H
-#define TRANSFERMANAGER_H
+#pragma once
 
 #include "syncableobject.h"
 
@@ -33,17 +32,19 @@ class TransferManager : public SyncableObject
     SYNCABLE_OBJECT
 
 public:
-    TransferManager(QObject *parent = 0);
+    using SyncableObject::SyncableObject;
     inline virtual const QMetaObject *syncMetaObject() const { return &staticMetaObject; }
 
     Transfer *transfer(const QUuid &uuid) const;
     QList<QUuid> transferIds() const;
 
 signals:
-    void transferAdded(const Transfer *transfer);
+    void transferAdded(const QUuid &uuid);
+    void transferRemoved(const QUuid &uuid);
 
 protected:
     void addTransfer(Transfer *transfer);
+    void removeTransfer(const QUuid &uuid);
 
 protected slots:
     virtual void onCoreTransferAdded(const QUuid &uuid) { Q_UNUSED(uuid) };
@@ -52,5 +53,3 @@ private:
     QHash<QUuid, Transfer *> _transfers;
 
 };
-
-#endif
index aa37099..a9ad640 100644 (file)
 
 #include "coretransfermanager.h"
 
-#include "coretransfer.h"
-
 INIT_SYNCABLE_OBJECT(CoreTransferManager)
-CoreTransferManager::CoreTransferManager(QObject *parent)
-    : TransferManager(parent)
-{
-    connect(this, SIGNAL(transferAdded(const Transfer*)), SLOT(onTransferAdded(const Transfer*)));
-}
-
-
-void CoreTransferManager::addTransfer(CoreTransfer *transfer)
-{
-    TransferManager::addTransfer(transfer);
-}
-
-
-void CoreTransferManager::onTransferAdded(const Transfer *transfer)
-{
-    // for core-side use, publishing a non-const pointer is ok
-    CoreTransfer *t = const_cast<CoreTransfer *>(qobject_cast<const CoreTransfer *>(transfer));
-    if (!t) {
-        qWarning() << "Invalid Transfer added to CoreTransferManager!";
-        return;
-    }
-
-    emit transferAdded(t);
-}
index 7553502..3850148 100644 (file)
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
  ***************************************************************************/
 
-#ifndef CORETRANSFERMANAGER_H
-#define CORETRANSFERMANAGER_H
+#pragma once
 
 #include "transfermanager.h"
-#include "types.h"
 
 class CoreTransfer;
 
@@ -32,17 +30,8 @@ class CoreTransferManager : public TransferManager
     SYNCABLE_OBJECT
 
 public:
-    CoreTransferManager(QObject *parent = 0);
-
-public slots:
-    void addTransfer(CoreTransfer *transfer);
-
-signals:
-    void transferAdded(CoreTransfer *transfer);
-
-private slots:
-    void onTransferAdded(const Transfer *transfer);
+    using TransferManager::TransferManager;
 
+    // make available unprotected
+    using TransferManager::addTransfer;
 };
-
-#endif
index e27c2fe..674d5a0 100644 (file)
@@ -1072,7 +1072,7 @@ void MainWin::connectedToCore()
     connect(Client::bufferViewManager(), SIGNAL(bufferViewConfigDeleted(int)), this, SLOT(removeBufferView(int)));
     connect(Client::bufferViewManager(), SIGNAL(initDone()), this, SLOT(loadLayout()));
 
-    connect(Client::transferManager(), SIGNAL(transferAdded(const ClientTransfer*)), SLOT(showNewTransferDlg(const ClientTransfer*)));
+    connect(Client::transferManager(), SIGNAL(transferAdded(QUuid)), SLOT(showNewTransferDlg(QUuid)));
 
     setConnectedState();
 }
@@ -1416,10 +1416,16 @@ void MainWin::showShortcutsDlg()
 }
 
 
-void MainWin::showNewTransferDlg(const ClientTransfer *transfer)
+void MainWin::showNewTransferDlg(const QUuid &transferId)
 {
-    ReceiveFileDlg *dlg = new ReceiveFileDlg(transfer, this);
-    dlg->show();
+    auto transfer = Client::transferManager()->transfer(transferId);
+    if (transfer) {
+        ReceiveFileDlg *dlg = new ReceiveFileDlg(transfer, this);
+        dlg->show();
+    }
+    else {
+        qWarning() << "Unknown transfer ID" << transferId;
+    }
 }
 
 
index 900354b..98337a1 100644 (file)
@@ -20,6 +20,8 @@
 
 #pragma once
 
+#include <QUuid>
+
 #ifdef HAVE_KDE4
 #  include <KMainWindow>
 #elif defined HAVE_KF5
@@ -36,8 +38,8 @@ class ActionCollection;
 class BufferHotListFilter;
 class BufferView;
 class BufferViewConfig;
+class ChatMonitorView;
 class ClientBufferViewConfig;
-class ClientTransfer;
 class CoreAccount;
 class CoreConnectionStatusWidget;
 class BufferViewDock;
@@ -46,7 +48,6 @@ class InputWidget;
 class MsgProcessorStatusWidget;
 class NickListWidget;
 class SystemTray;
-class ChatMonitorView;
 class TopicWidget;
 
 class QMenu;
@@ -124,7 +125,7 @@ private slots:
     void showIgnoreList(QString newRule = QString());
     void showShortcutsDlg();
     void showPasswordChangeDlg();
-    void showNewTransferDlg(const ClientTransfer *transfer);
+    void showNewTransferDlg(const QUuid &transferId);
     void onFullScreenToggled();
 
     void handleCoreConnectionError(const QString &errorMsg);