X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Ftransfer.h;h=57c9cceab483cd9d8f1d4756fe0782b1a9ff9452;hp=797c2b8ff607f451eafec4ab099399a3b77dff9a;hb=00e1a9c29e792ba4d65dba21b7ba04131bcb13bc;hpb=234d1cbd0d5b83602df964251ced84ec5ed4f371 diff --git a/src/common/transfer.h b/src/common/transfer.h index 797c2b8f..57c9ccea 100644 --- a/src/common/transfer.h +++ b/src/common/transfer.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2013 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -24,6 +24,7 @@ #include #include +#include "peer.h" #include "syncableobject.h" class Transfer : public SyncableObject @@ -31,19 +32,20 @@ class Transfer : public SyncableObject Q_OBJECT SYNCABLE_OBJECT - Q_PROPERTY(QUuid uuid READ uuid); - Q_PROPERTY(State state READ state WRITE setState NOTIFY stateChanged); - Q_PROPERTY(Direction direction READ direction WRITE setDirection NOTIFY directionChanged); - Q_PROPERTY(QHostAddress address READ address WRITE setAddress NOTIFY addressChanged); - Q_PROPERTY(quint16 port READ port WRITE setPort NOTIFY portChanged); - Q_PROPERTY(QString fileName READ fileName WRITE setFileName NOTIFY fileNameChanged); - Q_PROPERTY(quint64 fileSize READ fileSize WRITE setFileSize NOTIFY fileSizeChanged); - Q_PROPERTY(QString nick READ nick WRITE setNick NOTIFY nickChanged); + Q_PROPERTY(QUuid uuid READ uuid) + Q_PROPERTY(Transfer::Status status READ status WRITE setStatus NOTIFY statusChanged) + Q_PROPERTY(Transfer::Direction direction READ direction WRITE setDirection NOTIFY directionChanged) + Q_PROPERTY(QHostAddress address READ address WRITE setAddress NOTIFY addressChanged) + Q_PROPERTY(quint16 port READ port WRITE setPort NOTIFY portChanged) + Q_PROPERTY(QString fileName READ fileName WRITE setFileName NOTIFY fileNameChanged) + Q_PROPERTY(quint64 fileSize READ fileSize WRITE setFileSize NOTIFY fileSizeChanged) + Q_PROPERTY(QString nick READ nick WRITE setNick NOTIFY nickChanged) public: - enum State { + enum class Status { New, Pending, + Connecting, Transferring, Paused, Completed, @@ -52,7 +54,7 @@ public: }; Q_ENUMS(State) - enum Direction { + enum class Direction { Send, Receive }; @@ -60,9 +62,11 @@ public: Transfer(const QUuid &uuid, QObject *parent = 0); // for creating a syncable object client-side Transfer(Direction direction, const QString &nick, const QString &fileName, const QHostAddress &address, quint16 port, quint64 size = 0, QObject *parent = 0); + inline const QMetaObject *syncMetaObject() const override { return &staticMetaObject; } QUuid uuid() const; - State state() const; + Status status() const; + QString prettyStatus() const; Direction direction() const; QString fileName() const; QHostAddress address() const; @@ -70,19 +74,44 @@ public: quint64 fileSize() const; QString nick() const; + virtual quint64 transferred() const = 0; + +public slots: + // called on the client side + virtual void accept(const QString &savePath) const { Q_UNUSED(savePath); } + virtual void reject() const {} + + // called on the core side through sync calls + virtual void requestAccepted(PeerPtr peer) { Q_UNUSED(peer); } + virtual void requestRejected(PeerPtr peer) { Q_UNUSED(peer); } + signals: - void stateChanged(State state); - void directionChanged(Direction direction); + void statusChanged(Transfer::Status state); + void directionChanged(Transfer::Direction direction); void addressChanged(const QHostAddress &address); void portChanged(quint16 port); void fileNameChanged(const QString &fileName); void fileSizeChanged(quint64 fileSize); + void transferredChanged(quint64 transferred); void nickChanged(const QString &nick); -protected: - void setState(State state); + void error(const QString &errorString); + + void accepted(PeerPtr peer = 0) const; + void rejected(PeerPtr peer = 0) const; + +protected slots: + void setStatus(Transfer::Status status); + void setError(const QString &errorString); + + // called on the client side through sync calls + virtual void dataReceived(PeerPtr, const QByteArray &data) { Q_UNUSED(data); } + + virtual void cleanUp() = 0; private: + void init(); + void setDirection(Direction direction); void setAddress(const QHostAddress &address); void setPort(quint16 port); @@ -91,7 +120,7 @@ private: void setNick(const QString &nick); - State _state; + Status _status; Direction _direction; QString _fileName; QHostAddress _address; @@ -101,4 +130,12 @@ private: QUuid _uuid; }; +Q_DECLARE_METATYPE(Transfer::Status) +Q_DECLARE_METATYPE(Transfer::Direction) + +QDataStream &operator<<(QDataStream &out, Transfer::Status state); +QDataStream &operator>>(QDataStream &in, Transfer::Status &state); +QDataStream &operator<<(QDataStream &out, Transfer::Direction direction); +QDataStream &operator>>(QDataStream &in, Transfer::Direction &direction); + #endif