From: Manuel Nickschas Date: Sat, 28 Dec 2013 17:49:54 +0000 (+0100) Subject: Make the Transfer::accept() and ::reject() machinery work X-Git-Tag: 0.10-beta1~64 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=f5bb6544096b45cde4642e821654c48e26a9f79c Make the Transfer::accept() and ::reject() machinery work This adds the necessary stuff to be able to accept/reject a transfer on the client side, syncing it on the core side and setting the necessary signals. The core also receives a PeerPtr, so it can keep track of which peer actually accepted the transfer. --- diff --git a/src/common/transfer.cpp b/src/common/transfer.cpp index bba0c431..25f1e205 100644 --- a/src/common/transfer.cpp +++ b/src/common/transfer.cpp @@ -29,7 +29,7 @@ Transfer::Transfer(const QUuid &uuid, QObject *parent) _fileSize(0), _uuid(uuid) { - renameObject(QString("Transfer/%1").arg(_uuid.toString())); + init(); } Transfer::Transfer(Direction direction, const QString &nick, const QString &fileName, const QHostAddress &address, quint16 port, quint64 fileSize, QObject *parent) @@ -42,8 +42,15 @@ Transfer::Transfer(Direction direction, const QString &nick, const QString &file _fileSize(fileSize), _nick(nick), _uuid(QUuid::createUuid()) +{ + init(); +} + + +void Transfer::init() { renameObject(QString("Transfer/%1").arg(_uuid.toString())); + setAllowClientUpdates(true); } @@ -164,3 +171,37 @@ void Transfer::setNick(const QString &nick) emit nickChanged(nick); } } + + +QString Transfer::savePath() const +{ + return _savePath; +} + + +void Transfer::accept(const QString &savePath) const +{ + _savePath = savePath; + PeerPtr ptr = 0; + REQUEST_OTHER(requestAccepted, ARG(ptr)); + emit accepted(); +} + + +void Transfer::reject() const +{ + REQUEST_OTHER(requestRejected, NO_ARG); + emit rejected(); +} + + +void Transfer::requestAccepted(PeerPtr peer) +{ + emit accepted(peer); +} + + +void Transfer::requestRejected() +{ + emit rejected(); +} diff --git a/src/common/transfer.h b/src/common/transfer.h index 797c2b8f..e36ed15c 100644 --- a/src/common/transfer.h +++ b/src/common/transfer.h @@ -25,6 +25,7 @@ #include #include "syncableobject.h" +#include "types.h" class Transfer : public SyncableObject { @@ -70,6 +71,17 @@ public: quint64 fileSize() const; QString nick() const; + QString savePath() const; + +public slots: + // called on the client side + void accept(const QString &savePath) const; + void reject() const; + + // called on the core side through sync calls + void requestAccepted(PeerPtr peer = 0); + void requestRejected(); + signals: void stateChanged(State state); void directionChanged(Direction direction); @@ -79,10 +91,15 @@ signals: void fileSizeChanged(quint64 fileSize); void nickChanged(const QString &nick); + void accepted(PeerPtr peer = 0) const; + void rejected() const; + protected: void setState(State state); private: + void init(); + void setDirection(Direction direction); void setAddress(const QHostAddress &address); void setPort(quint16 port); @@ -99,6 +116,9 @@ private: quint64 _fileSize; QString _nick; QUuid _uuid; + + // non-synced attributes + mutable QString _savePath; }; #endif diff --git a/src/common/transfermanager.h b/src/common/transfermanager.h index a8f186b3..77c864c1 100644 --- a/src/common/transfermanager.h +++ b/src/common/transfermanager.h @@ -43,7 +43,7 @@ public slots: void addTransfer(Transfer *transfer); signals: - void transferAdded(Transfer *transfer); + void transferAdded(const Transfer *transfer); protected slots: virtual void onCoreTransferAdded(const QUuid &uuid) { Q_UNUSED(uuid) }; diff --git a/src/core/coretransfermanager.cpp b/src/core/coretransfermanager.cpp index 981ac284..a11927ab 100644 --- a/src/core/coretransfermanager.cpp +++ b/src/core/coretransfermanager.cpp @@ -26,6 +26,25 @@ INIT_SYNCABLE_OBJECT(CoreTransferManager) CoreTransferManager::CoreTransferManager(QObject *parent) : TransferManager(parent) +{ + connect(this, SIGNAL(transferAdded(const Transfer*)), SLOT(onTransferAdded(const Transfer*))); +} + + +void CoreTransferManager::onTransferAdded(const Transfer *transfer) +{ + connect(transfer, SIGNAL(accepted(PeerPtr)), SLOT(onTransferAccepted(PeerPtr))); + connect(transfer, SIGNAL(rejected(PeerPtr)), SLOT(onTransferRejected(PeerPtr))); +} + + +void CoreTransferManager::onTransferAccepted(PeerPtr peer) +{ + +} + + +void CoreTransferManager::onTransferRejected(PeerPtr peer) { } diff --git a/src/core/coretransfermanager.h b/src/core/coretransfermanager.h index ea5777b7..f5f47c86 100644 --- a/src/core/coretransfermanager.h +++ b/src/core/coretransfermanager.h @@ -22,6 +22,7 @@ #define CORETRANSFERMANAGER_H #include "transfermanager.h" +#include "types.h" class CoreTransferManager : public TransferManager { @@ -31,6 +32,11 @@ class CoreTransferManager : public TransferManager public: CoreTransferManager(QObject *parent = 0); +private slots: + void onTransferAdded(const Transfer *transfer); + void onTransferAccepted(PeerPtr peer); + void onTransferRejected(PeerPtr peer); + }; #endif