Make the Transfer::accept() and ::reject() machinery work
authorManuel Nickschas <sputnick@quassel-irc.org>
Sat, 28 Dec 2013 17:49:54 +0000 (18:49 +0100)
committerManuel Nickschas <sputnick@quassel-irc.org>
Wed, 1 Jan 2014 22:15:14 +0000 (23:15 +0100)
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.

src/common/transfer.cpp
src/common/transfer.h
src/common/transfermanager.h
src/core/coretransfermanager.cpp
src/core/coretransfermanager.h

index bba0c43..25f1e20 100644 (file)
@@ -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();
+}
index 797c2b8..e36ed15 100644 (file)
@@ -25,6 +25,7 @@
 #include <QUuid>
 
 #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
index a8f186b..77c864c 100644 (file)
@@ -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) };
index 981ac28..a11927a 100644 (file)
 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)
 {
 
 }
index ea5777b..f5f47c8 100644 (file)
@@ -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