From: Manuel Nickschas Date: Mon, 6 Jun 2016 21:23:10 +0000 (+0200) Subject: Greatly simplify TransferManager API and implementation X-Git-Tag: travis-deploy-test~493 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=7e72235113a6677c46f6be55b58ef101c47d0080 Greatly simplify TransferManager API and implementation This commit does away with the overly complex overloaded signals from the TransferManager family of classes, and replaces unneeded code with using declarations. --- diff --git a/src/client/clienttransfermanager.cpp b/src/client/clienttransfermanager.cpp index 29342fc3..29bdd56c 100644 --- a/src/client/clienttransfermanager.cpp +++ b/src/client/clienttransfermanager.cpp @@ -23,14 +23,7 @@ #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(transfer); - if (!t) { - qWarning() << "Invalid Transfer added to ClientTransferManager!"; - return; - } - - emit transferAdded(t); -} diff --git a/src/client/clienttransfermanager.h b/src/client/clienttransfermanager.h index f837694d..7842f056 100644 --- a/src/client/clienttransfermanager.h +++ b/src/client/clienttransfermanager.h @@ -18,14 +18,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef CLIENTTRANSFERMANAGER_H -#define CLIENTTRANSFERMANAGER_H - -#include "transfermanager.h" +#pragma once #include -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 diff --git a/src/common/transfermanager.cpp b/src/common/transfermanager.cpp index c90adfb3..285b3bf0 100644 --- a/src/common/transfermanager.cpp +++ b/src/common/transfermanager.cpp @@ -24,12 +24,6 @@ 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(); } diff --git a/src/common/transfermanager.h b/src/common/transfermanager.h index 72f9fb99..5dc17fe8 100644 --- a/src/common/transfermanager.h +++ b/src/common/transfermanager.h @@ -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 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 _transfers; }; - -#endif diff --git a/src/core/coretransfermanager.cpp b/src/core/coretransfermanager.cpp index aa370992..a9ad640a 100644 --- a/src/core/coretransfermanager.cpp +++ b/src/core/coretransfermanager.cpp @@ -20,30 +20,4 @@ #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(qobject_cast(transfer)); - if (!t) { - qWarning() << "Invalid Transfer added to CoreTransferManager!"; - return; - } - - emit transferAdded(t); -} diff --git a/src/core/coretransfermanager.h b/src/core/coretransfermanager.h index 7553502c..3850148a 100644 --- a/src/core/coretransfermanager.h +++ b/src/core/coretransfermanager.h @@ -18,11 +18,9 @@ * 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 diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index e27c2fe2..674d5a06 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -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; + } } diff --git a/src/qtui/mainwin.h b/src/qtui/mainwin.h index 900354b1..98337a1a 100644 --- a/src/qtui/mainwin.h +++ b/src/qtui/mainwin.h @@ -20,6 +20,8 @@ #pragma once +#include + #ifdef HAVE_KDE4 # include #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);